<?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>67309</bug_id>
          
          <creation_ts>2011-08-31 11:59:23 -0700</creation_ts>
          <short_desc>[Chromium] Rename WebKitClient to WebKitPlatformSupport</short_desc>
          <delta_ts>2011-08-31 14:09:34 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>459801</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 11:59:23 -0700</bug_when>
    <thetext>[Chromium] Rename WebKitClient to WebKitPlatformSupport</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459805</commentid>
    <comment_count>1</comment_count>
      <attachid>105807</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 12:01:36 -0700</bug_when>
    <thetext>Created attachment 105807
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459838</commentid>
    <comment_count>2</comment_count>
      <attachid>105816</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 12:58:37 -0700</bug_when>
    <thetext>Created attachment 105816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459839</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 12:59:10 -0700</bug_when>
    <thetext>This patch depends on &lt;http://codereview.chromium.org/7820001/&gt;, so the EWS bot will fail.  I&apos;ll get that patch landed and rolling in before landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459840</commentid>
    <comment_count>4</comment_count>
      <attachid>105817</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 13:00:52 -0700</bug_when>
    <thetext>Created attachment 105817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459841</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 13:01:57 -0700</bug_when>
    <thetext>Attachment 105816 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/public/WebKitPlatformSupport.h:42:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:116:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:183:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:218:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:249:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 5 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459842</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 13:03:13 -0700</bug_when>
    <thetext>Attachment 105817 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/public/WebKitPlatformSupport.h:42:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:116:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:183:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:218:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/public/WebKitPlatformSupport.h:249:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 5 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459865</commentid>
    <comment_count>7</comment_count>
      <attachid>105817</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 13:36:03 -0700</bug_when>
    <thetext>Comment on attachment 105817
Patch

Attachment 105817 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9565888</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459868</commentid>
    <comment_count>8</comment_count>
      <attachid>105817</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-31 13:38:39 -0700</bug_when>
    <thetext>Comment on attachment 105817
Patch

Awesome!  Maybe we should also rename PlatformBridge to PlatformSupport :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459870</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 13:39:36 -0700</bug_when>
    <thetext>&gt; Maybe we should also rename PlatformBridge to PlatformSupport :)

Interesting idea.  I&apos;ll investigate after I get this patch fully landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459909</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 14:09:34 -0700</bug_when>
    <thetext>Committed r94231: &lt;http://trac.webkit.org/changeset/94231&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105807</attachid>
            <date>2011-08-31 12:01:36 -0700</date>
            <delta_ts>2011-08-31 12:58:33 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-67309-20110831120134.patch</filename>
            <type>text/plain</type>
            <size>95564</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDIxMikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcw
IEBACisyMDExLTA4LTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBSZW5hbWUgV2ViS2l0Q2xpZW50IHRvIFdlYktpdFBsYXRmb3JtU3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczMDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXRD
bGllbnQgZG9lc24ndCBhY3R1YWxseSByZXByZXNlbnQgdGhlIFdlYktpdCBDbGllbnQuICBJbnN0
ZWFkLCBpdAorICAgICAgICByZXByZXNlbnRzIHN1cHBvcnRpbmcgY29kZSBmb3IgdGhlIFdlYktp
dCBQbGF0Zm9ybS4gIFRoaXMgcGF0Y2ggcmVuYW1lcworICAgICAgICBXZWJLaXRDbGllbnQgdG8g
V2ViS2l0UGxhdGZvcm1TdXBwb3J0IHRvIG1ha2UgaXQgZWFzaWVyIGZvciBmb2xrcyB0bworICAg
ICAgICB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIENsaWVudCBhbmQgdGhl
IFBsYXRmb3JtLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW5jbHVkZXMgc2hpbXMgc28gYXMgbm90
IHRvIGJyZWFrIHRoZSBDaHJvbWl1bSBidWlsZC4gIE9uY2UKKyAgICAgICAgdGhlIENocm9taXVt
IHNpZGUgaXMgdXBkYXRlZCwgSSdsbCByZW1vdmUgdGhlIHNoaW1zLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWVDbGllbnQuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViS2l0Lmg6CisgICAgICAgIChXZWJLaXQ6OndlYktpdENsaWVudCk6CisgICAgICAg
ICogcHVibGljL1dlYktpdENsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJL
aXRQbGF0Zm9ybVN1cHBvcnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViS2l0Q2xpZW50LmguCisgICAgICAgIChXZWJLaXQ6OldlYktpdFBsYXRmb3JtU3Vw
cG9ydDo6fldlYktpdFBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogc3JjL0FwcGxpY2F0aW9u
Q2FjaGVIb3N0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRlci5j
cHA6CisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bSk6CisgICAgICAgICogc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06OkF1ZGlvRGVzdGluYXRpb25DaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBs
ZVJhdGUpOgorICAgICAgICAqIHNyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iUmVnaXN0cnlQcm94eTo6QmxvYlJlZ2lzdHJ5UHJveHkpOgorICAgICAgICAq
IHNyYy9DQ1RocmVhZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ1RocmVhZEltcGw6OkND
VGhyZWFkSW1wbCk6CisgICAgICAgICogc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwOgorICAg
ICAgICAoV1RGOjpjdXJyZW50VGltZSk6CisgICAgICAgIChXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSk6CisgICAgICAgICogc3JjL0Nocm9taXVtT1NSYW5kb21Tb3VyY2UuY3BwOgor
ICAgICAgICAoV1RGOjpjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlc0Zyb21PUyk6CisgICAg
ICAgICogc3JjL0Nocm9taXVtVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFdURjo6Q2hyb21pdW1U
aHJlYWRpbmc6OmNhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNh
blNob3dNSU1FVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
dXNlckFnZW50KToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAg
KiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQkZh
Y3RvcnlCYWNrZW5kUHJveHk6OklEQkZhY3RvcnlCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNy
Yy9Mb2NhbGl6ZWRTdHJpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnF1ZXJ5KToKKyAgICAg
ICAgKiBzcmMvUGxhdGZvcm1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29va2ll
SmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjYWNoZU1ldGFkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWls
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBs
YWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVh
ZEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkR2V0U2Vx
dWVuY2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xp
cGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmZp
bGVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpvcGVuRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xvc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzZWVrRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpyZWFkRnJvbUZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpsb2FkRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZh
bHVlc0FuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmluamVj
dElEQktleUludG9TZXJpYWxpemVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1h
Z2VNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVG
b3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OndlbGxLbm93
bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjptaW1lVHlwZUZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpw
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6cGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9h
ZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjppbmNyZW1lbnRTdGF0c0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnBhaW50VHJhY2tiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmdldFRo
ZW1lUGFydFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhl
bWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWVtb3J5VXNhZ2VNQik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQik6CisgICAgICAgICogc3JjL1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCk6CisgICAgICAg
ICogc3JjL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBzcmMvU2hhcmVkV29ya2VyUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpj
b25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3Vt
ZW50RGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6
aGFzU2hhcmVkV29ya2Vycyk6CisgICAgICAgICogc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6Y29ubmVjdCk6
CisgICAgICAgICogc3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaCk6CisgICAgICAg
ICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAqIHNyYy9XZWJL
aXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpnZW5lcmF0ZUVudHJvcHkpOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6c2h1dGRvd24pOgorICAgICAgICAo
V2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHNyYy9XZWJNZWRpYVBs
YXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb3B5KToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06
OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmls
ZVdyaXRlckNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVX
cml0ZXJDYWxsYmFja3NCcmlkZ2U6OmluaXRPbk1haW5UaHJlYWQpOgorICAgICAgICAqIHRlc3Rz
L1J1bkFsbFRlc3RzLmNwcDoKKwogMjAxMS0wOC0zMSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2VkLCBmaXggaW5jb25zaXN0ZW50
IFdlYktpdC5neXBpIGFmdGVyIHI5NDEwNgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSW5wdXRFdmVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYktpdC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYktpdENsaWVudC5oJywKKyAgICAgICAgICAgICAg
ICAncHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkxhYmVsRWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkxvY2Fs
aXplZFN0cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhRWxlbWVudC5o
JywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGll
bnQuaAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJGcmFtZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoK
ICAgICAvLyBTZXJ2aWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIEEgZnJhbWUgc3BlY2lmaWMgY29va2llIGph
ci4gIE1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2FzZQotICAgIC8vIFdlYktpdENsaWVudDo6
Y29va2llSmFyKCkgd2lsbCBiZSBjYWxsZWQgdG8gYWNjZXNzIGNvb2tpZXMuCisgICAgLy8gV2Vi
S2l0UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVKYXIoKSB3aWxsIGJlIGNhbGxlZCB0byBhY2Nlc3Mg
Y29va2llcy4KICAgICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKFdlYkZyYW1lKikg
eyByZXR1cm4gMDsgfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktp
dC5oCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNyArMzUsMzEgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIFdlYktpdENsaWVudDsKK2NsYXNzIFdlYktpdFBsYXRmb3JtU3VwcG9y
dDsKIAogLy8gTXVzdCBiZSBjYWxsZWQgb24gdGhlIHRocmVhZCB0aGF0IHdpbGwgYmUgdGhlIG1h
aW4gV2ViS2l0IHRocmVhZCBiZWZvcmUKLS8vIHVzaW5nIGFueSBvdGhlciBXZWJLaXQgQVBJcy4g
IFRoZSBwcm92aWRlZCBXZWJLaXRDbGllbnQgbXVzdCBiZSBub24tbnVsbAotLy8gYW5kIG11c3Qg
cmVtYWluIHZhbGlkIHVudGlsIHRoZSBjdXJyZW50IHRocmVhZCBjYWxscyBzaHV0ZG93bi4KLVdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKFdlYktpdENsaWVudCopOwotCi0vLyBPbmNlIHNo
dXRkb3duLCB0aGUgV2ViS2l0Q2xpZW50IHBhc3NlZCB0byBpbml0aWFsaXplIHdpbGwgbm8gbG9u
Z2VyIGJlCi0vLyBhY2Nlc3NlZC4gIE5vIG90aGVyIFdlYktpdCBvYmplY3RzIHNob3VsZCBiZSBp
biB1c2Ugd2hlbiB0aGlzIGZ1bmN0aW9uCi0vLyBpcyBjYWxsZWQuICBBbnkgYmFja2dyb3VuZCB0
aHJlYWRzIGNyZWF0ZWQgYnkgV2ViS2l0IGFyZSBwcm9taXNlZCB0byBiZQorLy8gdXNpbmcgYW55
IG90aGVyIFdlYktpdCBBUElzLiBUaGUgcHJvdmlkZWQgV2ViS2l0UGxhdGZvcm1TdXBwb3J0OyBt
dXN0IGJlCisvLyBub24tbnVsbCBhbmQgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGN1cnJl
bnQgdGhyZWFkIGNhbGxzIHNodXRkb3duLgorV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUo
V2ViS2l0UGxhdGZvcm1TdXBwb3J0Kik7CisKKy8vIE9uY2Ugc2h1dGRvd24sIHRoZSBXZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQgcGFzc2VkIHRvIGluaXRpYWxpemUgd2lsbCBubyBsb25nZXIKKy8vIGJl
IGFjY2Vzc2VkLiBObyBvdGhlciBXZWJLaXQgb2JqZWN0cyBzaG91bGQgYmUgaW4gdXNlIHdoZW4g
dGhpcyBmdW5jdGlvbiBpcworLy8gY2FsbGVkLiBBbnkgYmFja2dyb3VuZCB0aHJlYWRzIGNyZWF0
ZWQgYnkgV2ViS2l0IGFyZSBwcm9taXNlZCB0byBiZQogLy8gdGVybWluYXRlZCBieSB0aGUgdGlt
ZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCiBXRUJLSVRfRVhQT1JUIHZvaWQgc2h1dGRvd24oKTsK
IAotLy8gUmV0dXJucyB0aGUgV2ViS2l0Q2xpZW50IGluc3RhbmNlIHBhc3NlZCB0byBpbml0aWFs
aXplLgotV0VCS0lUX0VYUE9SVCBXZWJLaXRDbGllbnQqIHdlYktpdENsaWVudCgpOworLy8gUmV0
dXJucyB0aGUgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IGluc3RhbmNlIHBhc3NlZCB0byBpbml0aWFs
aXplLgorV0VCS0lUX0VYUE9SVCBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQqIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpOworCisjaWZuZGVmIFdFQktJVF9SRU5BTUVfV0VCS0lUX0NMSUVOVAorV2ViS2l0
UGxhdGZvcm1TdXBwb3J0KiB3ZWJLaXRDbGllbnQoKSB7IHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKTsgfQorI2VuZGlmCiAKIC8vIEFsdGVycyB0aGUgcmVuZGVyaW5nIG9mIGNvbnRlbnQg
dG8gY29uZm9ybSB0byBhIGZpeGVkIHNldCBvZiBydWxlcy4KIFdFQktJVF9FWFBPUlQgdm9pZCBz
ZXRMYXlvdXRUZXN0TW9kZShib29sKTsKIFdFQktJVF9FWFBPUlQgYm9vbCBsYXlvdXRUZXN0TW9k
ZSgpOwogCi0vLyBFbmFibGVzIHRoZSBuYW1lZCBsb2cgY2hhbm5lbC4gIFNlZSBXZWJDb3JlL3Bs
YXRmb3JtL0xvZ2dpbmcuaCBmb3IgZGV0YWlscy4KKy8vIEVuYWJsZXMgdGhlIG5hbWVkIGxvZyBj
aGFubmVsLiBTZWUgV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmggZm9yIGRldGFpbHMuCiBXRUJL
SVRfRVhQT1JUIHZvaWQgZW5hYmxlTG9nQ2hhbm5lbChjb25zdCBjaGFyKik7CiAKIC8vIFB1cmdl
IHRoZSBwbHVnaW4gbGlzdCBjYWNoZS4gSWYgfHJlbG9hZFBhZ2VzfCBpcyB0cnVlLCBhbnkgcGFn
ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5o
CShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktp
dENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMxNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRD
bGllbnRfaAotI2RlZmluZSBXZWJLaXRDbGllbnRfaAotCi0jaW5jbHVkZSAiV2ViQXVkaW9CdXMu
aCIKLSNpbmNsdWRlICJXZWJBdWRpb0RldmljZS5oIgotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgot
I2luY2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJMb2NhbGl6ZWRTdHJpbmcuaCIKLSNp
bmNsdWRlICJXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKLSNpbmNsdWRlICJXZWJWZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJVUkwuaCIKLQotI2luY2x1
ZGUgPHRpbWUuaD4KLQotI2lmZGVmIFdJTjMyCi10eXBlZGVmIHZvaWQgKkhBTkRMRTsKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q7
Ci1jbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKLWNsYXNzIFdlYkJsb2JSZWdp
c3RyeTsKLWNsYXNzIFdlYkNsaXBib2FyZDsKLWNsYXNzIFdlYkNvb2tpZUphcjsKLWNsYXNzIFdl
YkZpbGVTeXN0ZW07Ci1jbGFzcyBXZWJGaWxlVXRpbGl0aWVzOwotY2xhc3MgV2ViR3JhcGhpY3ND
b250ZXh0M0Q7Ci1jbGFzcyBXZWJJREJGYWN0b3J5OwotY2xhc3MgV2ViSURCS2V5OwotY2xhc3Mg
V2ViTWVzc2FnZVBvcnRDaGFubmVsOwotY2xhc3MgV2ViTWltZVJlZ2lzdHJ5OwotY2xhc3MgV2Vi
UGx1Z2luTGlzdEJ1aWxkZXI7Ci1jbGFzcyBXZWJTYW5kYm94U3VwcG9ydDsKLWNsYXNzIFdlYlNo
YXJlZFdvcmtlclJlcG9zaXRvcnk7Ci1jbGFzcyBXZWJTb2NrZXRTdHJlYW1IYW5kbGU7Ci1jbGFz
cyBXZWJTdG9yYWdlTmFtZXNwYWNlOwotY2xhc3MgV2ViVGhlbWVFbmdpbmU7Ci1jbGFzcyBXZWJU
aHJlYWQ7Ci1jbGFzcyBXZWJVUkxMb2FkZXI7Ci0KLWNsYXNzIFdlYktpdENsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCi0gICAgdmlydHVhbCBXZWJDbGlwYm9h
cmQqIGNsaXBib2FyZCgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIE11c3QgcmV0dXJuIG5vbi1u
dWxsLgotICAgIHZpcnR1YWwgV2ViTWltZVJlZ2lzdHJ5KiBtaW1lUmVnaXN0cnkoKSB7IHJldHVy
biAwOyB9Ci0KLSAgICAvLyBNdXN0IHJldHVybiBub24tbnVsbC4KLSAgICB2aXJ0dWFsIFdlYkZp
bGVVdGlsaXRpZXMqIGZpbGVVdGlsaXRpZXMoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBNYXkg
cmV0dXJuIG51bGwgaWYgc2FuZGJveCBzdXBwb3J0IGlzIG5vdCBuZWNlc3NhcnkKLSAgICB2aXJ0
dWFsIFdlYlNhbmRib3hTdXBwb3J0KiBzYW5kYm94U3VwcG9ydCgpIHsgcmV0dXJuIDA7IH0KLQot
ICAgIC8vIE1heSByZXR1cm4gbnVsbCBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICB2aXJ0dWFsIFdl
YlRoZW1lRW5naW5lKiB0aGVtZUVuZ2luZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIE1heSBy
ZXR1cm4gbnVsbC4KLSAgICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKCkgeyByZXR1
cm4gMDsgfQotCi0gICAgLy8gQmxvYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBNdXN0IHJldHVybiBub24t
bnVsbC4KLSAgICB2aXJ0dWFsIFdlYkJsb2JSZWdpc3RyeSogYmxvYlJlZ2lzdHJ5KCkgeyByZXR1
cm4gMDsgfQotCi0gICAgLy8gRE9NIFN0b3JhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIFJldHVybiBhIExvY2FsU3RvcmFnZSBu
YW1lc3BhY2UgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZm9sbG93aW5nIHBhdGguCi0gICAgdmly
dHVhbCBXZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29u
c3QgV2ViU3RyaW5nJiBwYXRoLCB1bnNpZ25lZCBxdW90YSkgeyByZXR1cm4gMDsgfQotCi0gICAg
Ly8gQ2FsbGVkIHdoZW4gc3RvcmFnZSBldmVudHMgZmlyZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYg
b2xkVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFdlYlN0cmluZyYgb3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBpc0xvY2Fs
U3RvcmFnZSkgeyB9Ci0KLQotICAgIC8vIEhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gUmV0dXJucyB0
aGUgaGFzaCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZWQgVVJMIGZvciB1c2UgaW4gdmlzaXRl
ZAotICAgIC8vIGxpbmsgY29sb3JpbmcuCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcg
dmlzaXRlZExpbmtIYXNoKAotICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxVUkwsIHNpemVf
dCBsZW5ndGgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2
ZW4gbGluayBoYXNoIGlzIGluIHRoZSB1c2VyJ3MgaGlzdG9yeS4gIFRoZQotICAgIC8vIGhhc2gg
bXVzdCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJ5IGNhbGxpbmcgVmlzaXRlZExpbmtIYXNoKCkuCi0g
ICAgdmlydHVhbCBib29sIGlzTGlua1Zpc2l0ZWQodW5zaWduZWQgbG9uZyBsb25nIGxpbmtIYXNo
KSB7IHJldHVybiBmYWxzZTsgfQotCi0KLSAgICAvLyBIVE1MNSBEYXRhYmFzZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmZGVmIFdJ
TjMyCi0gICAgdHlwZWRlZiBIQU5ETEUgRmlsZUhhbmRsZTsKLSNlbHNlCi0gICAgdHlwZWRlZiBp
bnQgRmlsZUhhbmRsZTsKLSNlbmRpZgotCi0gICAgLy8gT3BlbnMgYSBkYXRhYmFzZSBmaWxlOyBk
aXJIYW5kbGUgc2hvdWxkIGJlIDAgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkCi0gICAgLy8g
YSBoYW5kbGUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZQotICAgIHZpcnR1
YWwgRmlsZUhhbmRsZSBkYXRhYmFzZU9wZW5GaWxlKAotICAgICAgICBjb25zdCBXZWJTdHJpbmcm
IHZmc0ZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKSB7IHJldHVybiBGaWxlSGFuZGxlKCk7IH0K
LQotICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlIGFuZCByZXR1cm5zIHRoZSBlcnJvciBj
b2RlCi0gICAgdmlydHVhbCBpbnQgZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFdlYlN0cmluZyYg
dmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpcikgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gUmV0dXJu
cyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UgZmlsZQotICAgIHZpcnR1YWwg
bG9uZyBkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5h
bWUpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGdpdmVu
IGRhdGFiYXNlIGZpbGUKLSAgICB2aXJ0dWFsIGxvbmcgbG9uZyBkYXRhYmFzZUdldEZpbGVTaXpl
KGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJl
dHVybnMgdGhlIHNwYWNlIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIG9yaWdpbgotICAgIHZpcnR1
YWwgbG9uZyBsb25nIGRhdGFiYXNlR2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4oY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8v
IEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgdmlydHVhbCBXZWJJREJGYWN0b3J5KiBpZGJGYWN0b3J5KCkg
eyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6
ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFdlYlZlY3RvcjxXZWJTZXJpYWxpemVkU2NyaXB0VmFs
dWU+JiB2YWx1ZXMsICBjb25zdCBXZWJTdHJpbmcmIGtleVBhdGgsIFdlYlZlY3RvcjxXZWJJREJL
ZXk+JiBrZXlzKSB7IH0KLSAgICB2aXJ0dWFsIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBpbmpl
Y3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYklEQktleSYga2V5LCBjb25zdCBX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJTdHJpbmcmIGtleVBhdGgp
IHsgcmV0dXJuIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOyB9Ci0KLQotICAgIC8vIEtleWdl
biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gICAgLy8gSGFuZGxlIHRoZSA8a2V5Z2VuPiB0YWcgZm9yIGdlbmVyYXRpbmcg
Y2xpZW50IGNlcnRpZmljYXRlcwotICAgIC8vIFJldHVybnMgYSBiYXNlNjQgZW5jb2RlZCBzaWdu
ZWQgY29weSBvZiBhIHB1YmxpYyBrZXkgZnJvbSBhIG5ld2x5Ci0gICAgLy8gZ2VuZXJhdGVkIGtl
eSBwYWlyIGFuZCB0aGUgc3VwcGxpZWQgY2hhbGxlbmdlIHN0cmluZy4ga2V5U2l6ZWluZGV4Ci0g
ICAgLy8gc3BlY2lmaWVzIHRoZSBzdHJlbmd0aCBvZiB0aGUga2V5LgotICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXpl
SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBjaGFsbGVuZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6
V2ViVVJMJiB1cmwpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0KLQotCi0gICAgLy8gTWVtb3J5
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNwYWNlIGFsbG9jYXRlZCBmb3Ig
dGhlIHBhZ2VmaWxlLCBpbiBNQi4KLSAgICAvLyBUaGF0IGlzIGNvbW1pdHRlZCBzaXplIGZvciBX
aW5kb3dzIGFuZCB2aXJ0dWFsIG1lbW9yeSBzaXplIGZvciBQT1NJWAotICAgIHZpcnR1YWwgc2l6
ZV90IG1lbW9yeVVzYWdlTUIoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBTYW1lIGFzIGFib3Zl
LCBidXQgYWx3YXlzIHJldHVybnMgYWN0dWFsIHZhbHVlLCB3aXRob3V0IGFueSBjYWNoZXMuCi0g
ICAgdmlydHVhbCBzaXplX3QgYWN0dWFsTWVtb3J5VXNhZ2VNQigpIHsgcmV0dXJuIDA7IH0KLQot
Ci0gICAgLy8gVGhyZWFkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBDcmVhdGVzIGFuIGVtYmVkZGVyLWRlZmluZWQgdGhy
ZWFkLgotICAgIHZpcnR1YWwgV2ViVGhyZWFkKiBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogbmFt
ZSkgeyByZXR1cm4gMDsgfQotCi0KLSAgICAvLyBNZXNzYWdlIFBvcnRzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIENyZWF0
ZXMgYSBNZXNzYWdlIFBvcnQgQ2hhbm5lbC4gIFRoaXMgY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhy
ZWFkLgotICAgIC8vIFRoZSByZXR1cm5lZCBvYmplY3Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0
aGUgdGhyZWFkIGl0IHdhcyBjcmVhdGVkIG9uLgotICAgIHZpcnR1YWwgV2ViTWVzc2FnZVBvcnRD
aGFubmVsKiBjcmVhdGVNZXNzYWdlUG9ydENoYW5uZWwoKSB7IHJldHVybiAwOyB9Ci0KLQotICAg
IC8vIE5ldHdvcmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gQSBzdWdnZXN0aW9uIHRvIHByZWZldGNoIElQIGlu
Zm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gaG9zdG5hbWUuCi0gICAgdmlydHVhbCB2b2lkIHByZWZl
dGNoSG9zdE5hbWUoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgbmV3
IFdlYlVSTExvYWRlciBpbnN0YW5jZS4KLSAgICB2aXJ0dWFsIFdlYlVSTExvYWRlciogY3JlYXRl
VVJMTG9hZGVyKCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gUmV0dXJucyBhIG5ldyBXZWJTb2Nr
ZXRTdHJlYW1IYW5kbGUgaW5zdGFuY2UuCi0gICAgdmlydHVhbCBXZWJTb2NrZXRTdHJlYW1IYW5k
bGUqIGNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJl
dHVybnMgdGhlIFVzZXItQWdlbnQgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBn
aXZlbiBVUkwuCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgdXNlckFnZW50KGNvbnN0IFdlYlVSTCYp
IHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0KLSAgICAvLyBBIHN1Z2dlc3Rpb24gdG8gY2FjaGUg
dGhpcyBtZXRhZGF0YSBpbiBhc3NvY2lhdGlvbiB3aXRoIHRoaXMgVVJMLgotICAgIHZpcnR1YWwg
dm9pZCBjYWNoZU1ldGFkYXRhKGNvbnN0IFdlYlVSTCYsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkgeyB9Ci0KLQotICAgIC8vIFBsdWdpbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgLy8gSWYgcmVmcmVzaCBpcyB0cnVlLCB0aGVuIGNhY2hlZCBpbmZvcm1hdGlv
biBzaG91bGQgbm90IGJlIHVzZWQgdG8KLSAgICAvLyBzYXRpc2Z5IHRoaXMgY2FsbC4KLSAgICB2
aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luTGlzdChib29sIHJlZnJlc2gsIFdlYlBsdWdpbkxpc3RCdWls
ZGVyKikgeyB9Ci0KLQotICAgIC8vIFByb2ZpbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgdmlydHVhbCB2b2lkIGRl
Y3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgaW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpIHsgfQotCi0gICAgLy8g
QW4gZXZlbnQgaXMgaWRlbnRpZmllZCBieSB0aGUgcGFpciAobmFtZSwgaWQpLiAgVGhlIGV4dHJh
IHBhcmFtZXRlcgotICAgIC8vIHNwZWNpZmllcyBhZGRpdGlvbmFsIGRhdGEgdG8gbG9nIHdpdGgg
dGhlIGV2ZW50LgotICAgIHZpcnR1YWwgdm9pZCB0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciog
bmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0
cmEpIHsgfQotCi0gICAgLy8gQ2FsbGJhY2tzIGZvciByZXBvcnRpbmcgaGlzdG9ncmFtIGRhdGEu
Ci0gICAgLy8gQ3VzdG9tQ291bnRzIGhpc3RvZ3JhbSBoYXMgZXhwb25lbnRpYWwgYnVja2V0IHNp
emVzLCBzbyB0aGF0IG1pbj0xLCBtYXg9MTAwMDAwMCwgYnVja2V0Q291bnQ9NTAgd291bGQgZG8u
Ci0gICAgdmlydHVhbCB2b2lkIGhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBuYW1l
LCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpIHsgfQotICAg
IC8vIEVudW1lcmF0aW9uIGhpc3RvZ3JhbSBidWNrZXRzIGFyZSBsaW5lYXIsIGJvdW5kYXJ5VmFs
dWUgc2hvdWxkIGJlIGxhcmdlciB0aGFuIGFueSBwb3NzaWJsZSBzYW1wbGUgdmFsdWUuCi0gICAg
dmlydHVhbCB2b2lkIGhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBz
YW1wbGUsIGludCBib3VuZGFyeVZhbHVlKSB7IH0KLQotCi0gICAgLy8gUmVzb3VyY2VzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgICAvLyBSZXR1cm5zIGEgYmxvYiBvZiBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hbWVk
IHJlc291cmNlLgotICAgIHZpcnR1YWwgV2ViRGF0YSBsb2FkUmVzb3VyY2UoY29uc3QgY2hhciog
bmFtZSkgeyByZXR1cm4gV2ViRGF0YSgpOyB9Ci0KLSAgICAvLyBEZWNvZGVzIHRoZSBpbi1tZW1v
cnkgYXVkaW8gZmlsZSBkYXRhIGFuZCByZXR1cm5zIHRoZSBsaW5lYXIgUENNIGF1ZGlvIGRhdGEg
aW4gdGhlIGRlc3RpbmF0aW9uQnVzLgotICAgIC8vIEEgc2FtcGxlLXJhdGUgY29udmVyc2lvbiB0
byBzYW1wbGVSYXRlIHdpbGwgb2NjdXIgaWYgdGhlIGZpbGUgZGF0YSBpcyBhdCBhIGRpZmZlcmVu
dCBzYW1wbGUtcmF0ZS4KLSAgICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLSAgICB2aXJ0
dWFsIGJvb2wgbG9hZEF1ZGlvUmVzb3VyY2UoV2ViQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBj
b25zdCBjaGFyKiBhdWRpb0ZpbGVEYXRhLCBzaXplX3QgZGF0YVNpemUsIGRvdWJsZSBzYW1wbGVS
YXRlKSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gUmV0dXJucyBhIGxvY2FsaXplZCBzdHJp
bmcgcmVzb3VyY2UgKHdpdGggc3Vic3RpdHV0aW9uIHBhcmFtZXRlcnMpLgotICAgIHZpcnR1YWwg
V2ViU3RyaW5nIHF1ZXJ5TG9jYWxpemVkU3RyaW5nKFdlYkxvY2FsaXplZFN0cmluZzo6TmFtZSkg
eyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBxdWVyeUxvY2Fs
aXplZFN0cmluZyhXZWJMb2NhbGl6ZWRTdHJpbmc6Ok5hbWUsIGNvbnN0IFdlYlN0cmluZyYgcGFy
YW1ldGVyKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHF1
ZXJ5TG9jYWxpemVkU3RyaW5nKFdlYkxvY2FsaXplZFN0cmluZzo6TmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBwYXJhbWV0ZXIxLCBjb25zdCBXZWJTdHJpbmcmIHBhcmFtZXRlcjIpIHsgcmV0dXJuIFdl
YlN0cmluZygpOyB9Ci0KLQotICAgIC8vIFNhbmRib3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBJbiBzb21lIGJy
b3dzZXJzLCBhICJzYW5kYm94IiByZXN0cmljdHMgd2hhdCBvcGVyYXRpb25zIGEgcHJvZ3JhbQot
ICAgIC8vIGlzIGFsbG93ZWQgdG8gcHJlZm9ybS4gIFN1Y2ggb3BlcmF0aW9ucyBhcmUgdHlwaWNh
bGx5IGFic3RyYWN0ZWQgb3V0Ci0gICAgLy8gdmlhIHRoaXMgQVBJLCBidXQgc29tZXRpbWVzIChs
aWtlIGluIEhUTUwgNSBkYXRhYmFzZSBvcGVuaW5nKSBXZWJLaXQKLSAgICAvLyBuZWVkcyB0byBi
ZWhhdmUgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhlciBpdCdzIHJlc3RyaWN0ZWQgb3Igbm90
LgotICAgIC8vIEluIHRoZXNlIGNhc2VzIChhbmQgdGhlc2UgY2FzZXMgb25seSkgeW91IGNhbiBj
YWxsIHRoaXMgZnVuY3Rpb24uCi0gICAgLy8gSXQncyBPSyBmb3IgdGhpcyB2YWx1ZSB0byBiZSBj
b25zZXJ2aXRpdmUgKGkuZS4gdHJ1ZSBldmVuIGlmIHRoZQotICAgIC8vIHNhbmRib3ggaXNuJ3Qg
YWN0aXZlKS4KLSAgICB2aXJ0dWFsIGJvb2wgc2FuZGJveEVuYWJsZWQoKSB7IHJldHVybiBmYWxz
ZTsgfQotCi0KLSAgICAvLyBTaGFyZWQgV29ya2VycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHZpcnR1YWwgV2ViU2hhcmVkV29y
a2VyUmVwb3NpdG9yeSogc2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpIHsgcmV0dXJuIDA7IH0KLQot
ICAgIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gRGlzYWJsZS9FbmFibGUgc3VkZGVuIHRlcm1p
bmF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBl
bmFibGVkKSB7IH0KLQotCi0gICAgLy8gU3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBSZXR1cm5zIGEg
dmFsdWUgc3VjaCBhcyAiZW4tVVMiLgotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGRlZmF1bHRMb2Nh
bGUoKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotCi0gICAgLy8gV2FsbCBjbG9jayB0aW1lIGlu
IHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLgotICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1l
KCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHRpbWUg
aW4gc2Vjb25kcyBmcm9tIGFuIGFyYml0cmFyeSBmaXhlZCBwb2ludCBpbiB0aGUgcGFzdC4KLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhdCBsZWFzdCBtaWxsaXNl
Y29uZC1wcmVjaXNpb24gdmFsdWVzLiBGb3IgdGhpcyByZWFzb24sCi0gICAgLy8gaXQgaXMgcmVj
b21tZW5kZWQgdGhhdCB0aGUgZml4ZWQgcG9pbnQgYmUgbm8gZnVydGhlciBpbiB0aGUgcGFzdCB0
aGFuIHRoZSBlcG9jaC4KLSAgICB2aXJ0dWFsIGRvdWJsZSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBXZWJLaXQgY2xpZW50cyBtdXN0IGltcGxl
bWVudCB0aGlzIGZ1bmNpb24gaWYgdGhleSB1c2UgY3J5cHRvZ3JhcGhpYyByYW5kb21uZXNzLgot
ICAgIHZpcnR1YWwgdm9pZCBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyh1bnNpZ25lZCBj
aGFyKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpID0gMDsKLQotICAgIC8vIERlbGF5ZWQgd29yayBp
cyBkcml2ZW4gYnkgYSBzaGFyZWQgdGltZXIuCi0gICAgdHlwZWRlZiB2b2lkICgqU2hhcmVkVGlt
ZXJGdW5jdGlvbikoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0
aW9uKFNoYXJlZFRpbWVyRnVuY3Rpb24gdGltZXJGdW5jdGlvbikgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHN0b3BTaGFyZWRUaW1lcigpIHsgfQotCi0gICAgLy8gQ2FsbGFibGUgZnJvbSBhIGJhY2tn
cm91bmQgV2ViS2l0IHRocmVhZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2FsbE9uTWFpblRocmVhZCh2
b2lkICgqZnVuYykodm9pZCopLCB2b2lkKiBjb250ZXh0KSB7IH0KLQotICAgIC8vIFdlYkdMIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYgV2ViR0wgaXMgbm90IHN1cHBvcnRlZC4K
LSAgICAvLyBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCBpbnN0
YW5jZS4KLSAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVHcmFwaGljc0Nv
bnRleHQzRCgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIEF1ZGlvIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICB2aXJ0
dWFsIGRvdWJsZSBhdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIFdlYkF1ZGlvRGV2aWNlKiBjcmVhdGVBdWRpb0RldmljZShzaXplX3QgYnVmZmVyU2l6
ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgZG91YmxlIHNhbXBsZVJhdGUsIFdlYkF1ZGlv
RGV2aWNlOjpSZW5kZXJDYWxsYmFjayopIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIEZpbGVTeXN0
ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0gICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCi0gICAgdmlydHVhbCBXZWJGaWxl
U3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgfldl
YktpdENsaWVudCgpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxh
dGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDk0MjAwKQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaDo5NDIwMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRDbGllbnRfaAorI2RlZmluZSBXZWJLaXRDbGllbnRfaAor
CisjaW5jbHVkZSAiV2ViQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJXZWJBdWRpb0RldmljZS5oIgor
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJX
ZWJMb2NhbGl6ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNs
dWRlICJXZWJVUkwuaCIKKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2lmZGVmIFdJTjMyCit0eXBl
ZGVmIHZvaWQgKkhBTkRMRTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViQXBwbGljYXRpb25DYWNoZUhvc3Q7CitjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENs
aWVudDsKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeTsKK2NsYXNzIFdlYkNsaXBib2FyZDsKK2NsYXNz
IFdlYkNvb2tpZUphcjsKK2NsYXNzIFdlYkZpbGVTeXN0ZW07CitjbGFzcyBXZWJGaWxlVXRpbGl0
aWVzOworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBXZWJJREJGYWN0b3J5Owor
Y2xhc3MgV2ViSURCS2V5OworY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFubmVsOworY2xhc3MgV2Vi
TWltZVJlZ2lzdHJ5OworY2xhc3MgV2ViUGx1Z2luTGlzdEJ1aWxkZXI7CitjbGFzcyBXZWJTYW5k
Ym94U3VwcG9ydDsKK2NsYXNzIFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnk7CitjbGFzcyBXZWJT
b2NrZXRTdHJlYW1IYW5kbGU7CitjbGFzcyBXZWJTdG9yYWdlTmFtZXNwYWNlOworY2xhc3MgV2Vi
VGhlbWVFbmdpbmU7CitjbGFzcyBXZWJUaHJlYWQ7CitjbGFzcyBXZWJVUkxMb2FkZXI7CisKK2Ns
YXNzIFdlYktpdENsaWVudCB7CitwdWJsaWM6CisgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwu
CisgICAgdmlydHVhbCBXZWJDbGlwYm9hcmQqIGNsaXBib2FyZCgpIHsgcmV0dXJuIDA7IH0KKwor
ICAgIC8vIE11c3QgcmV0dXJuIG5vbi1udWxsLgorICAgIHZpcnR1YWwgV2ViTWltZVJlZ2lzdHJ5
KiBtaW1lUmVnaXN0cnkoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBNdXN0IHJldHVybiBub24t
bnVsbC4KKyAgICB2aXJ0dWFsIFdlYkZpbGVVdGlsaXRpZXMqIGZpbGVVdGlsaXRpZXMoKSB7IHJl
dHVybiAwOyB9CisKKyAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYgc2FuZGJveCBzdXBwb3J0IGlz
IG5vdCBuZWNlc3NhcnkKKyAgICB2aXJ0dWFsIFdlYlNhbmRib3hTdXBwb3J0KiBzYW5kYm94U3Vw
cG9ydCgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIE1heSByZXR1cm4gbnVsbCBvbiBzb21lIHBs
YXRmb3Jtcy4KKyAgICB2aXJ0dWFsIFdlYlRoZW1lRW5naW5lKiB0aGVtZUVuZ2luZSgpIHsgcmV0
dXJuIDA7IH0KKworICAgIC8vIE1heSByZXR1cm4gbnVsbC4KKyAgICB2aXJ0dWFsIFdlYkNvb2tp
ZUphciogY29va2llSmFyKCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gQmxvYiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
KyAgICAvLyBNdXN0IHJldHVybiBub24tbnVsbC4KKyAgICB2aXJ0dWFsIFdlYkJsb2JSZWdpc3Ry
eSogYmxvYlJlZ2lzdHJ5KCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gRE9NIFN0b3JhZ2UgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8v
IFJldHVybiBhIExvY2FsU3RvcmFnZSBuYW1lc3BhY2UgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg
Zm9sbG93aW5nIHBhdGguCisgICAgdmlydHVhbCBXZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgV2ViU3RyaW5nJiBwYXRoLCB1bnNpZ25lZCBxdW90
YSkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gQ2FsbGVkIHdoZW4gc3RvcmFnZSBldmVudHMgZmly
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgV2ViU3RyaW5n
JiBrZXksIGNvbnN0IFdlYlN0cmluZyYgb2xkVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFdlYlN0cmlu
ZyYgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJVUkwmIHVybCwgYm9vbCBpc0xvY2FsU3RvcmFnZSkgeyB9CisKKworICAgIC8vIEhpc3Rvcnkg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgLy8gUmV0dXJucyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbGl6
ZWQgVVJMIGZvciB1c2UgaW4gdmlzaXRlZAorICAgIC8vIGxpbmsgY29sb3JpbmcuCisgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgdmlzaXRlZExpbmtIYXNoKAorICAgICAgICBjb25zdCBj
aGFyKiBjYW5vbmljYWxVUkwsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbGluayBoYXNoIGlzIGluIHRoZSB1c2VyJ3MgaGlz
dG9yeS4gIFRoZQorICAgIC8vIGhhc2ggbXVzdCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJ5IGNhbGxp
bmcgVmlzaXRlZExpbmtIYXNoKCkuCisgICAgdmlydHVhbCBib29sIGlzTGlua1Zpc2l0ZWQodW5z
aWduZWQgbG9uZyBsb25nIGxpbmtIYXNoKSB7IHJldHVybiBmYWxzZTsgfQorCisKKyAgICAvLyBI
VE1MNSBEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworI2lmZGVmIFdJTjMyCisgICAgdHlwZWRlZiBIQU5ETEUgRmlsZUhhbmRs
ZTsKKyNlbHNlCisgICAgdHlwZWRlZiBpbnQgRmlsZUhhbmRsZTsKKyNlbmRpZgorCisgICAgLy8g
T3BlbnMgYSBkYXRhYmFzZSBmaWxlOyBkaXJIYW5kbGUgc2hvdWxkIGJlIDAgaWYgdGhlIGNhbGxl
ciBkb2VzIG5vdCBuZWVkCisgICAgLy8gYSBoYW5kbGUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWlu
aW5nIHRoaXMgZmlsZQorICAgIHZpcnR1YWwgRmlsZUhhbmRsZSBkYXRhYmFzZU9wZW5GaWxlKAor
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHZmc0ZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKSB7
IHJldHVybiBGaWxlSGFuZGxlKCk7IH0KKworICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxl
IGFuZCByZXR1cm5zIHRoZSBlcnJvciBjb2RlCisgICAgdmlydHVhbCBpbnQgZGF0YWJhc2VEZWxl
dGVGaWxlKGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpcikgeyByZXR1
cm4gMDsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gZGF0
YWJhc2UgZmlsZQorICAgIHZpcnR1YWwgbG9uZyBkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNv
bnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFJldHVy
bnMgdGhlIHNpemUgb2YgdGhlIGdpdmVuIGRhdGFiYXNlIGZpbGUKKyAgICB2aXJ0dWFsIGxvbmcg
bG9uZyBkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUpIHsg
cmV0dXJuIDA7IH0KKworICAgIC8vIFJldHVybnMgdGhlIHNwYWNlIGF2YWlsYWJsZSBmb3IgdGhl
IGdpdmVuIG9yaWdpbgorICAgIHZpcnR1YWwgbG9uZyBsb25nIGRhdGFiYXNlR2V0U3BhY2VBdmFp
bGFibGVGb3JPcmlnaW4oY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIp
IHsgcmV0dXJuIDA7IH0KKworICAgIC8vIEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmlydHVhbCBXZWJJ
REJGYWN0b3J5KiBpZGJGYWN0b3J5KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFdlYlZlY3Rv
cjxXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiB2YWx1ZXMsICBjb25zdCBXZWJTdHJpbmcmIGtl
eVBhdGgsIFdlYlZlY3RvcjxXZWJJREJLZXk+JiBrZXlzKSB7IH0KKyAgICB2aXJ0dWFsIFdlYlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGNvbnN0
IFdlYklEQktleSYga2V5LCBjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBj
b25zdCBXZWJTdHJpbmcmIGtleVBhdGgpIHsgcmV0dXJuIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSgpOyB9CisKKworICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gSGFuZGxlIHRoZSA8a2V5
Z2VuPiB0YWcgZm9yIGdlbmVyYXRpbmcgY2xpZW50IGNlcnRpZmljYXRlcworICAgIC8vIFJldHVy
bnMgYSBiYXNlNjQgZW5jb2RlZCBzaWduZWQgY29weSBvZiBhIHB1YmxpYyBrZXkgZnJvbSBhIG5l
d2x5CisgICAgLy8gZ2VuZXJhdGVkIGtleSBwYWlyIGFuZCB0aGUgc3VwcGxpZWQgY2hhbGxlbmdl
IHN0cmluZy4ga2V5U2l6ZWluZGV4CisgICAgLy8gc3BlY2lmaWVzIHRoZSBzdHJlbmd0aCBvZiB0
aGUga2V5LgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5n
ZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBj
aGFsbGVuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVVJMJiB1cmwpIHsgcmV0dXJuIFdlYlN0cmluZygp
OyB9CisKKworCisgICAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZXR1cm5zIHRoZSBjdXJy
ZW50IHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2VmaWxlLCBpbiBNQi4KKyAgICAvLyBUaGF0
IGlzIGNvbW1pdHRlZCBzaXplIGZvciBXaW5kb3dzIGFuZCB2aXJ0dWFsIG1lbW9yeSBzaXplIGZv
ciBQT1NJWAorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeVVzYWdlTUIoKSB7IHJldHVybiAwOyB9
CisKKyAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgYWx3YXlzIHJldHVybnMgYWN0dWFsIHZhbHVl
LCB3aXRob3V0IGFueSBjYWNoZXMuCisgICAgdmlydHVhbCBzaXplX3QgYWN0dWFsTWVtb3J5VXNh
Z2VNQigpIHsgcmV0dXJuIDA7IH0KKworCisgICAgLy8gVGhyZWFkcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBDcmVhdGVz
IGFuIGVtYmVkZGVyLWRlZmluZWQgdGhyZWFkLgorICAgIHZpcnR1YWwgV2ViVGhyZWFkKiBjcmVh
dGVUaHJlYWQoY29uc3QgY2hhciogbmFtZSkgeyByZXR1cm4gMDsgfQorCisKKyAgICAvLyBNZXNz
YWdlIFBvcnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8vIENyZWF0ZXMgYSBNZXNzYWdlIFBvcnQgQ2hhbm5lbC4gIFRoaXMg
Y2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgorICAgIC8vIFRoZSByZXR1cm5lZCBvYmplY3Qg
c2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgdGhyZWFkIGl0IHdhcyBjcmVhdGVkIG9uLgorICAg
IHZpcnR1YWwgV2ViTWVzc2FnZVBvcnRDaGFubmVsKiBjcmVhdGVNZXNzYWdlUG9ydENoYW5uZWwo
KSB7IHJldHVybiAwOyB9CisKKworICAgIC8vIE5ldHdvcmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gQSBzdWdn
ZXN0aW9uIHRvIHByZWZldGNoIElQIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gaG9zdG5hbWUu
CisgICAgdmlydHVhbCB2b2lkIHByZWZldGNoSG9zdE5hbWUoY29uc3QgV2ViU3RyaW5nJikgeyB9
CisKKyAgICAvLyBSZXR1cm5zIGEgbmV3IFdlYlVSTExvYWRlciBpbnN0YW5jZS4KKyAgICB2aXJ0
dWFsIFdlYlVSTExvYWRlciogY3JlYXRlVVJMTG9hZGVyKCkgeyByZXR1cm4gMDsgfQorCisgICAg
Ly8gUmV0dXJucyBhIG5ldyBXZWJTb2NrZXRTdHJlYW1IYW5kbGUgaW5zdGFuY2UuCisgICAgdmly
dHVhbCBXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIGNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSgpIHsg
cmV0dXJuIDA7IH0KKworICAgIC8vIFJldHVybnMgdGhlIFVzZXItQWdlbnQgc3RyaW5nIHRoYXQg
c2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBnaXZlbiBVUkwuCisgICAgdmlydHVhbCBXZWJTdHJpbmcg
dXNlckFnZW50KGNvbnN0IFdlYlVSTCYpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CisKKyAgICAv
LyBBIHN1Z2dlc3Rpb24gdG8gY2FjaGUgdGhpcyBtZXRhZGF0YSBpbiBhc3NvY2lhdGlvbiB3aXRo
IHRoaXMgVVJMLgorICAgIHZpcnR1YWwgdm9pZCBjYWNoZU1ldGFkYXRhKGNvbnN0IFdlYlVSTCYs
IGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkg
eyB9CisKKworICAgIC8vIFBsdWdpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gSWYgcmVmcmVzaCBpcyB0cnVl
LCB0aGVuIGNhY2hlZCBpbmZvcm1hdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgdG8KKyAgICAvLyBz
YXRpc2Z5IHRoaXMgY2FsbC4KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luTGlzdChib29sIHJl
ZnJlc2gsIFdlYlBsdWdpbkxpc3RCdWlsZGVyKikgeyB9CisKKworICAgIC8vIFByb2ZpbGluZyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCisgICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBu
YW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNo
YXIqIG5hbWUpIHsgfQorCisgICAgLy8gQW4gZXZlbnQgaXMgaWRlbnRpZmllZCBieSB0aGUgcGFp
ciAobmFtZSwgaWQpLiAgVGhlIGV4dHJhIHBhcmFtZXRlcgorICAgIC8vIHNwZWNpZmllcyBhZGRp
dGlvbmFsIGRhdGEgdG8gbG9nIHdpdGggdGhlIGV2ZW50LgorICAgIHZpcnR1YWwgdm9pZCB0cmFj
ZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJh
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2
b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpIHsgfQorCisgICAgLy8gQ2FsbGJhY2tzIGZvciBy
ZXBvcnRpbmcgaGlzdG9ncmFtIGRhdGEuCisgICAgLy8gQ3VzdG9tQ291bnRzIGhpc3RvZ3JhbSBo
YXMgZXhwb25lbnRpYWwgYnVja2V0IHNpemVzLCBzbyB0aGF0IG1pbj0xLCBtYXg9MTAwMDAwMCwg
YnVja2V0Q291bnQ9NTAgd291bGQgZG8uCisgICAgdmlydHVhbCB2b2lkIGhpc3RvZ3JhbUN1c3Rv
bUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBp
bnQgYnVja2V0Q291bnQpIHsgfQorICAgIC8vIEVudW1lcmF0aW9uIGhpc3RvZ3JhbSBidWNrZXRz
IGFyZSBsaW5lYXIsIGJvdW5kYXJ5VmFsdWUgc2hvdWxkIGJlIGxhcmdlciB0aGFuIGFueSBwb3Nz
aWJsZSBzYW1wbGUgdmFsdWUuCisgICAgdmlydHVhbCB2b2lkIGhpc3RvZ3JhbUVudW1lcmF0aW9u
KGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKSB7IH0KKwor
CisgICAgLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZXR1cm5zIGEgYmxvYiBvZiBkYXRhIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIG5hbWVkIHJlc291cmNlLgorICAgIHZpcnR1YWwgV2ViRGF0YSBs
b2FkUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkgeyByZXR1cm4gV2ViRGF0YSgpOyB9CisKKyAg
ICAvLyBEZWNvZGVzIHRoZSBpbi1tZW1vcnkgYXVkaW8gZmlsZSBkYXRhIGFuZCByZXR1cm5zIHRo
ZSBsaW5lYXIgUENNIGF1ZGlvIGRhdGEgaW4gdGhlIGRlc3RpbmF0aW9uQnVzLgorICAgIC8vIEEg
c2FtcGxlLXJhdGUgY29udmVyc2lvbiB0byBzYW1wbGVSYXRlIHdpbGwgb2NjdXIgaWYgdGhlIGZp
bGUgZGF0YSBpcyBhdCBhIGRpZmZlcmVudCBzYW1wbGUtcmF0ZS4KKyAgICAvLyBSZXR1cm5zIHRy
dWUgb24gc3VjY2Vzcy4KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEF1ZGlvUmVzb3VyY2UoV2ViQXVk
aW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBjb25zdCBjaGFyKiBhdWRpb0ZpbGVEYXRhLCBzaXplX3Qg
ZGF0YVNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8g
UmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVzb3VyY2UgKHdpdGggc3Vic3RpdHV0aW9uIHBh
cmFtZXRlcnMpLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIHF1ZXJ5TG9jYWxpemVkU3RyaW5nKFdl
YkxvY2FsaXplZFN0cmluZzo6TmFtZSkgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KKyAgICB2aXJ0
dWFsIFdlYlN0cmluZyBxdWVyeUxvY2FsaXplZFN0cmluZyhXZWJMb2NhbGl6ZWRTdHJpbmc6Ok5h
bWUsIGNvbnN0IFdlYlN0cmluZyYgcGFyYW1ldGVyKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQor
ICAgIHZpcnR1YWwgV2ViU3RyaW5nIHF1ZXJ5TG9jYWxpemVkU3RyaW5nKFdlYkxvY2FsaXplZFN0
cmluZzo6TmFtZSwgY29uc3QgV2ViU3RyaW5nJiBwYXJhbWV0ZXIxLCBjb25zdCBXZWJTdHJpbmcm
IHBhcmFtZXRlcjIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CisKKworICAgIC8vIFNhbmRib3gg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCBhICJzYW5kYm94IiByZXN0cmljdHMgd2hh
dCBvcGVyYXRpb25zIGEgcHJvZ3JhbQorICAgIC8vIGlzIGFsbG93ZWQgdG8gcHJlZm9ybS4gIFN1
Y2ggb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGFic3RyYWN0ZWQgb3V0CisgICAgLy8gdmlhIHRo
aXMgQVBJLCBidXQgc29tZXRpbWVzIChsaWtlIGluIEhUTUwgNSBkYXRhYmFzZSBvcGVuaW5nKSBX
ZWJLaXQKKyAgICAvLyBuZWVkcyB0byBiZWhhdmUgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhl
ciBpdCdzIHJlc3RyaWN0ZWQgb3Igbm90LgorICAgIC8vIEluIHRoZXNlIGNhc2VzIChhbmQgdGhl
c2UgY2FzZXMgb25seSkgeW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24uCisgICAgLy8gSXQncyBP
SyBmb3IgdGhpcyB2YWx1ZSB0byBiZSBjb25zZXJ2aXRpdmUgKGkuZS4gdHJ1ZSBldmVuIGlmIHRo
ZQorICAgIC8vIHNhbmRib3ggaXNuJ3QgYWN0aXZlKS4KKyAgICB2aXJ0dWFsIGJvb2wgc2FuZGJv
eEVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQorCisKKyAgICAvLyBTaGFyZWQgV29ya2VycyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHZpcnR1YWwgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeSogc2hhcmVkV29ya2VyUmVwb3Np
dG9yeSgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gRGlz
YWJsZS9FbmFibGUgc3VkZGVuIHRlcm1pbmF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzdWRkZW5U
ZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKSB7IH0KKworCisgICAgLy8gU3lzdGVtIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICAvLyBSZXR1cm5zIGEgdmFsdWUgc3VjaCBhcyAiZW4tVVMiLgorICAgIHZpcnR1
YWwgV2ViU3RyaW5nIGRlZmF1bHRMb2NhbGUoKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorCisg
ICAgLy8gV2FsbCBjbG9jayB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLgorICAgIHZp
cnR1YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gTW9ub3Rv
bmljYWxseSBpbmNyZWFzaW5nIHRpbWUgaW4gc2Vjb25kcyBmcm9tIGFuIGFyYml0cmFyeSBmaXhl
ZCBwb2ludCBpbiB0aGUgcGFzdC4KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRv
IHJldHVybiBhdCBsZWFzdCBtaWxsaXNlY29uZC1wcmVjaXNpb24gdmFsdWVzLiBGb3IgdGhpcyBy
ZWFzb24sCisgICAgLy8gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZml4ZWQgcG9pbnQgYmUg
bm8gZnVydGhlciBpbiB0aGUgcGFzdCB0aGFuIHRoZSBlcG9jaC4KKyAgICB2aXJ0dWFsIGRvdWJs
ZSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBX
ZWJLaXQgY2xpZW50cyBtdXN0IGltcGxlbWVudCB0aGlzIGZ1bmNpb24gaWYgdGhleSB1c2UgY3J5
cHRvZ3JhcGhpYyByYW5kb21uZXNzLgorICAgIHZpcnR1YWwgdm9pZCBjcnlwdG9ncmFwaGljYWxs
eVJhbmRvbVZhbHVlcyh1bnNpZ25lZCBjaGFyKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpID0gMDsK
KworICAgIC8vIERlbGF5ZWQgd29yayBpcyBkcml2ZW4gYnkgYSBzaGFyZWQgdGltZXIuCisgICAg
dHlwZWRlZiB2b2lkICgqU2hhcmVkVGltZXJGdW5jdGlvbikoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKFNoYXJlZFRpbWVyRnVuY3Rpb24gdGltZXJGdW5j
dGlvbikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRv
dWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0b3BTaGFyZWRUaW1lcigpIHsgfQorCisgICAg
Ly8gQ2FsbGFibGUgZnJvbSBhIGJhY2tncm91bmQgV2ViS2l0IHRocmVhZC4KKyAgICB2aXJ0dWFs
IHZvaWQgY2FsbE9uTWFpblRocmVhZCh2b2lkICgqZnVuYykodm9pZCopLCB2b2lkKiBjb250ZXh0
KSB7IH0KKworICAgIC8vIFdlYkdMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYg
V2ViR0wgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAvLyBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBX
ZWJHcmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZS4KKyAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29u
dGV4dDNEKiBjcmVhdGVHcmFwaGljc0NvbnRleHQzRCgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8v
IEF1ZGlvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICB2aXJ0dWFsIGRvdWJsZSBhdWRpb0hhcmR3YXJlU2FtcGxlUmF0
ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFdlYkF1ZGlvRGV2aWNlKiBjcmVhdGVBdWRp
b0RldmljZShzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgZG91
YmxlIHNhbXBsZVJhdGUsIFdlYkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjayopIHsgcmV0dXJu
IDA7IH0KKworICAgIC8vIEZpbGVTeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51
bGwuCisgICAgdmlydHVhbCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsg
fQorCitwcm90ZWN0ZWQ6CisgICAgfldlYktpdENsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDk0MjAwKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBXZWJLaXRDbGllbnRfaAotI2RlZmluZSBXZWJLaXRDbGllbnRfaAorI2lmbmRlZiBX
ZWJLaXRQbGF0Zm9ybVN1cHBvcnRfaAorI2RlZmluZSBXZWJLaXRQbGF0Zm9ybVN1cHBvcnRfaAog
CiAjaW5jbHVkZSAiV2ViQXVkaW9CdXMuaCIKICNpbmNsdWRlICJXZWJBdWRpb0RldmljZS5oIgpA
QCAtNzAsNyArNzAsNyBAQCBjbGFzcyBXZWJUaGVtZUVuZ2luZTsKIGNsYXNzIFdlYlRocmVhZDsK
IGNsYXNzIFdlYlVSTExvYWRlcjsKIAotY2xhc3MgV2ViS2l0Q2xpZW50IHsKK2NsYXNzIFdlYktp
dFBsYXRmb3JtU3VwcG9ydCB7CiBwdWJsaWM6CiAgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwu
CiAgICAgdmlydHVhbCBXZWJDbGlwYm9hcmQqIGNsaXBib2FyZCgpIHsgcmV0dXJuIDA7IH0KQEAg
LTMwNyw3ICszMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJGaWxlU3lzdGVtKiBmaWxl
U3lzdGVtKCkgeyByZXR1cm4gMDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgfldlYktpdENsaWVudCgp
IHsgfQorICAgIH5XZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXBwbGljYXRpb25D
YWNoZUhvc3RJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWwuaAkocmV2aXNpb24gOTQyMTEpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVu
dC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2lu
Y2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5o
IgogI2luY2x1ZGUgIldlYlVSTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAko
cmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVk
VVJMTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUg
IldlYkRhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJX
ZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0
Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldlYlVS
TExvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
CiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJG
aWxlV3JpdGVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKQEAgLTUyLDcgKzUyLDcgQEAgYm9vbCBBc3luY0ZpbGVTeXN0ZW06
OmlzQXZhaWxhYmxlKCkKIAogQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiByb290VVJM
KQogICAgIDogQXN5bmNGaWxlU3lzdGVtKHR5cGUpCi0gICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2Vi
S2l0Ojp3ZWJLaXRDbGllbnQoKS0+ZmlsZVN5c3RlbSgpKQorICAgICwgbV93ZWJGaWxlU3lzdGVt
KFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVTeXN0ZW0oKSkKICAgICAsIG1f
ZmlsZXN5c3RlbVJvb3RVUkwocm9vdFVSTCkKIHsKICAgICBBU1NFUlQobV93ZWJGaWxlU3lzdGVt
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXVkaW9E
ZXN0aW5hdGlvbkNocm9taXVtLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAg
LTcxLDcgKzcxLDcgQEAgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpBdWRpb0Rlc3RpbmF0aQog
ICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCiAgICAgLCBtX2lzUGxheWluZyhmYWxzZSkK
IHsKLSAgICBtX2F1ZGlvRGV2aWNlID0gYWRvcHRQdHIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZUF1
ZGlvRGV2aWNlKGNhbGxiYWNrQnVmZmVyU2l6ZSwgbnVtYmVyT2ZDaGFubmVscywgc2FtcGxlUmF0
ZSwgdGhpcykpOworICAgIG1fYXVkaW9EZXZpY2UgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+Y3JlYXRlQXVkaW9EZXZpY2UoY2FsbGJhY2tCdWZmZXJTaXplLCBudW1iZXJPZkNo
YW5uZWxzLCBzYW1wbGVSYXRlLCB0aGlzKSk7CiAgICAgQVNTRVJUKG1fYXVkaW9EZXZpY2UuZ2V0
KCkpOwogfQogCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVt
OjpzdG9wKCkKIAogZG91YmxlIEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgp
CiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5hdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgp
OworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+YXVkaW9IYXJkd2FyZVNhbXBs
ZVJhdGUoKTsKIH0KIAogLy8gUHVsbHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCB0aGUgcmVuZGVy
ZWQgYXVkaW8gc3RyZWFtLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJl
Z2lzdHJ5UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Jsb2JSZWdpc3RyeVByb3h5LmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAKICNpbmNsdWRlICJXZWJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIldlYkJsb2JS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5o
IgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlVSTC5o
IgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgpAQCAtNTgsNyArNTgsNyBAQCBCbG9iUmVnaXN0cnkmIGJsb2JSZWdpc3RyeSgpCiB9CiAK
IEJsb2JSZWdpc3RyeVByb3h5OjpCbG9iUmVnaXN0cnlQcm94eSgpCi0gICAgOiBtX3dlYkJsb2JS
ZWdpc3RyeShXZWJLaXQ6OndlYktpdENsaWVudCgpLT5ibG9iUmVnaXN0cnkoKSkKKyAgICA6IG1f
d2ViQmxvYlJlZ2lzdHJ5KFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmJsb2JSZWdp
c3RyeSgpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DQ1RocmVh
ZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVGhy
ZWFkSW1wbC5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ0NUaHJlYWRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lu
Y2x1ZGUgIkNDVGhyZWFkSW1wbC5oIgogCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAi
V2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5j
bHVkZSAiV2ViVGhyZWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKICNp
bmNsdWRlIDxzdGRpbnQuaD4KQEAgLTk2LDcgKzk2LDcgQEAgVGhyZWFkSWRlbnRpZmllciBDQ1Ro
cmVhZEltcGw6OnRocmVhZElEKAogfQogCiBDQ1RocmVhZEltcGw6OkNDVGhyZWFkSW1wbCgpCi0g
ICAgOiBtX3RocmVhZChhZG9wdFB0cih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVGhyZWFkKCJDQ1Ro
cmVhZCIpKSkKKyAgICA6IG1fdGhyZWFkKGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5jcmVhdGVUaHJlYWQoIkNDVGhyZWFkIikpKQogewogICAgIC8vIEdldCB0aGUgdGhyZWFkSWQg
Zm9yIHRoZSBuZXdseS1jcmVhdGVkIHRocmVhZCBieSBydW5uaW5nIGEgdGFzawogICAgIC8vIG9u
IHRoYXQgdGhyZWFkLCBibG9ja2luZyBvbiB0aGUgcmVzdWx0LgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1DdXJyZW50VGltZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1DdXJyZW50VGltZS5jcHAJKHJldmlzaW9u
IDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1DdXJyZW50VGlt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxOCBAQAogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBX
VEYgewogCiBkb3VibGUgY3VycmVudFRpbWUoKQogewotICAgIHJldHVybiBXZWJLaXQ6OndlYktp
dENsaWVudCgpLT5jdXJyZW50VGltZSgpOworICAgIHJldHVybiBXZWJLaXQ6OndlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5jdXJyZW50VGltZSgpOwogfQogCiBkb3VibGUgbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCkKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+bW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPm1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogfQogCiB9ICAv
LyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1
bU9TUmFuZG9tU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWl1bU9TUmFuZG9tU291cmNlLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bU9TUmFuZG9tU291cmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSA8d3RmL09TUmFuZG9tU291cmNl
Lmg+CiAKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNp
bmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKIAogbmFtZXNwYWNlIFdURiB7CiAKIHZv
aWQgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXNGcm9tT1ModW5zaWduZWQgY2hhciogYnVm
ZmVyLCBzaXplX3QgbGVuZ3RoKQogewotICAgIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBXZWJLaXQ6Ondl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhidWZm
ZXIsIGxlbmd0aCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9taXVtVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWl1bVRocmVhZGluZy5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1UaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL2Nocm9taXVtL0Nocm9taXVtVGhyZWFkaW5n
Lmg+CiAKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNp
bmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgQ2hyb21p
dW1UaHJlYWRpbmc6OmNhbGxPbk1haW5UaHJlYWQodm9pZCAoKmZ1bmMpKHZvaWQqKSwgdm9pZCog
Y29udGV4dCkKIHsKLSAgICBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5jYWxsT25NYWluVGhyZWFk
KGZ1bmMsIGNvbnRleHQpOworICAgIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNh
bGxPbk1haW5UaHJlYWQoZnVuYywgY29udGV4dCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXVEYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUlt
cGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNp
bmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJNaW1lUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVu
dC5oIgpAQCAtMTI5MCw3ICsxMjkwLDcgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNh
blNob3dNSU1FVAogICAgIC8vIG1pbWVUeXBlIHN0cmluZ3MgYXJlIHN1cHBvc2VkIHRvIGJlIEFT
Q0lJLCBidXQgaWYgdGhleSBhcmUgbm90IGZvciBzb21lCiAgICAgLy8gcmVhc29uLCB0aGVuIGl0
IGp1c3QgbWVhbnMgdGhhdCB0aGUgbWltZSB0eXBlIHdpbGwgZmFpbCBhbGwgb2YgdGhlc2UgImlz
CiAgICAgLy8gc3VwcG9ydGVkIiBjaGVja3MgYW5kIGdvIGRvd24gdGhlIHBhdGggb2YgYW4gdW5o
YW5kbGVkIG1pbWUgdHlwZS4KLSAgICBpZiAod2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgp
LT5zdXBwb3J0c01JTUVUeXBlKG1pbWVUeXBlKSA9PSBXZWJNaW1lUmVnaXN0cnk6OklzU3VwcG9y
dGVkKQorICAgIGlmICh3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1
cHBvcnRzTUlNRVR5cGUobWltZVR5cGUpID09IFdlYk1pbWVSZWdpc3RyeTo6SXNTdXBwb3J0ZWQp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgQ2hyb21lIGlzIHN0YXJ0ZWQgd2l0
aCB0aGUgLS1kaXNhYmxlLXBsdWdpbnMgc3dpdGNoLCBwbHVnaW5EYXRhIGlzIG51bGwuCkBAIC0x
Mzc4LDcgKzEzNzgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2V0VGl0bGUoY29u
CiAKIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudEltcGw6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1
cmwpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT51c2VyQWdlbnQodXJsKTsKKyAgICBy
ZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnVzZXJBZ2VudCh1cmwpOwogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2Fj
aGVkRnJhbWUqKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250
ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2lu
Y2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5o
IgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtOTg2
LDcgKzk4Niw3IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ28KICAg
ICB3ZWJBdHRyaWJ1dGVzLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3MgPSBhdHRycy5jYW5SZWNv
dmVyRnJvbUNvbnRleHRMb3NzOwogICAgIHdlYkF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gYXR0
cnMubm9FeHRlbnNpb25zOwogICAgIHdlYkF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBhdHRy
cy5zaGFyZVJlc291cmNlczsKLSAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RD4gd2ViQ29udGV4dCA9IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dDNEKCkpOworICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEPiB3ZWJDb250ZXh0ID0gYWRvcHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAgaWYgKCF3ZWJDb250ZXh0KQogICAg
ICAgICByZXR1cm4gMDsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFj
dG9yeUJhY2tlbmRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUVycm9y
LmgiCiAjaW5jbHVkZSAiV2ViSURCRmFjdG9yeS5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2lu
Y2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5o
IgogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJXZWJWZWN0b3Iu
aCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgpAQCAtNTYsNyArNTYsNyBAQCBQYXNzUmVmUHRy
PElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBJCiB9CiAKIElEQkZhY3RvcnlCYWNrZW5kUHJv
eHk6OklEQkZhY3RvcnlCYWNrZW5kUHJveHkoKQotICAgIDogbV93ZWJJREJGYWN0b3J5KHdlYktp
dENsaWVudCgpLT5pZGJGYWN0b3J5KCkpCisgICAgOiBtX3dlYklEQkZhY3Rvcnkod2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPmlkYkZhY3RvcnkoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAJKHJldmlzaW9uIDk0MjEx
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViTG9jYWxpemVkU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKQEAgLTQ5LDE3ICs0OSwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBTdHJpbmcgcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5n
OjpOYW1lIG5hbWUpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPnF1ZXJ5
TG9jYWxpemVkU3RyaW5nKG5hbWUpOworICAgIHJldHVybiBXZWJLaXQ6OndlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5xdWVyeUxvY2FsaXplZFN0cmluZyhuYW1lKTsKIH0KIAogc3RhdGljIFN0cmlu
ZyBxdWVyeShXZWJMb2NhbGl6ZWRTdHJpbmc6Ok5hbWUgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBw
YXJhbWV0ZXIpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPnF1ZXJ5TG9j
YWxpemVkU3RyaW5nKG5hbWUsIHBhcmFtZXRlcik7CisgICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPnF1ZXJ5TG9jYWxpemVkU3RyaW5nKG5hbWUsIHBhcmFtZXRlcik7
CiB9CiAKIHN0YXRpYyBTdHJpbmcgcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpOYW1lIG5hbWUs
IGNvbnN0IFdlYlN0cmluZyYgcGFyYW1ldGVyMSwgY29uc3QgV2ViU3RyaW5nJiBwYXJhbWV0ZXIy
KQogewotICAgIHJldHVybiBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5xdWVyeUxvY2FsaXplZFN0
cmluZyhuYW1lLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp3
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+cXVlcnlMb2NhbGl6ZWRTdHJpbmcobmFtZSwgcGFyYW1l
dGVyMSwgcGFyYW1ldGVyMik7CiB9CiAKIFN0cmluZyBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rp
b24oKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdl
LmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0
Zm9ybUJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRl
ICJXZWJJREJLZXkuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1ZGUgIldlYktpdC5o
IgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3Vw
cG9ydC5oIgogI2luY2x1ZGUgIldlYk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldlYlBsdWdp
bkNvbnRhaW5lckltcGwuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaCIK
QEAgLTEzNSw3ICsxMzUsNyBAQCBzdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29u
c3QgCiAgICAgICAgIHJldHVybiAwOwogICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJh
bWVJbXBsLT5jbGllbnQoKS0+Y29va2llSmFyKGZyYW1lSW1wbCk7CiAgICAgaWYgKCFjb29raWVK
YXIpCi0gICAgICAgIGNvb2tpZUphciA9IHdlYktpdENsaWVudCgpLT5jb29raWVKYXIoKTsKKyAg
ICAgICAgY29va2llSmFyID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNvb2tpZUphcigpOwog
ICAgIHJldHVybiBjb29raWVKYXI7CiB9CiAKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgV2Vi
Q29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgCiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNh
Y2hlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJsLCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNhY2hlTWV0YWRhdGEo
dXJsLCByZXNwb25zZVRpbWUsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPmNhY2hlTWV0YWRhdGEodXJsLCByZXNwb25zZVRpbWUsIGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKIC8vIENsaXBib2FyZCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1
Miw3ICsxNTIsNyBAQCBib29sIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2CiAg
ICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCBmb3JtYXQsCiAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCiB7Ci0gICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5jbGlwYm9hcmQoKS0+aXNGb3JtYXRBdmFpbGFibGUoCisgICAgcmV0dXJuIHdl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+aXNGb3JtYXRBdmFpbGFibGUoCiAg
ICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6Rm9ybWF0Pihmb3JtYXQpLAogICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7CiB9CkBAIC0xNjAs
NyArMTYwLDcgQEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdgogU3Ry
aW5nIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KAogICAgIFBhc3RlYm9h
cmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQogewotICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRQbGFpblRleHQoCisgICAgcmV0dXJuIHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+cmVhZFBsYWluVGV4dCgKICAgICAgICAgc3Rh
dGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwogfQogCkBAIC0xNjksNyAr
MTY5LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCiAgICAgU3Ry
aW5nKiBodG1sVGV4dCwgS1VSTCogc291cmNlVVJMKQogewogICAgIFdlYlVSTCB1cmw7Ci0gICAg
Kmh0bWxUZXh0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKKyAgICAq
aHRtbFRleHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRIVE1M
KAogICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVy
bCk7CiAgICAgKnNvdXJjZVVSTCA9IHVybDsKIH0KQEAgLTE3NywxMiArMTc3LDEyIEBAIHZvaWQg
UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKAogUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSW1hZ2UoCiAgICAgUGFzdGVib2FyZFBy
aXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5jbGlwYm9hcmQoKS0+cmVhZEltYWdlKHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVm
ZmVyPihidWZmZXIpKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBi
b2FyZCgpLT5yZWFkSW1hZ2Uoc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZl
cikpOwogfQogCiB1aW50NjRfdCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkR2V0U2VxdWVuY2VO
dW1iZXIoKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPmdldFNl
cXVlbmNlTnVtYmVyKCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlw
Ym9hcmQoKS0+Z2V0U2VxdWVuY2VOdW1iZXIoKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBodG1sVGV4dCwKQEAgLTE5MCwx
OCArMTkwLDE4IEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlU2VsZWMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
cGxhaW5UZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCB3cml0ZVNtYXJ0UGFzdGUpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgp
LT53cml0ZUhUTUwoCisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53
cml0ZUhUTUwoCiAgICAgICAgIGh0bWxUZXh0LCBzb3VyY2VVUkwsIHBsYWluVGV4dCwgd3JpdGVT
bWFydFBhc3RlKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFp
blRleHQoY29uc3QgU3RyaW5nJiBwbGFpblRleHQpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNs
aXBib2FyZCgpLT53cml0ZVBsYWluVGV4dChwbGFpblRleHQpOworICAgIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKIH0KIAog
dm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+
d3JpdGVVUkwodXJsLCB0aXRsZSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBi
b2FyZCgpLT53cml0ZVVSTCh1cmwsIHRpdGxlKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwKQEAgLTIxMywyMCArMjEz
LDIwIEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UKICNlbHNlCiAg
ICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoaW1hZ2UpOwogI2VuZGlmCi0gICAgd2ViS2l0Q2xpZW50KCkt
PmNsaXBib2FyZCgpLT53cml0ZUltYWdlKHdlYkltYWdlLCBzb3VyY2VVUkwsIHRpdGxlKTsKKyAg
ICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlSW1hZ2Uod2ViSW1h
Z2UsIHNvdXJjZVVSTCwgdGl0bGUpOwogfQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9h
cmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1ldGFkYXRhKQogewotICAgIHdlYktp
dENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVEYXRhKHR5cGUsIGRhdGEsIG1ldGFkYXRhKTsK
KyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlRGF0YSh0eXBl
LCBkYXRhLCBtZXRhZGF0YSk7CiB9CiAKIEhhc2hTZXQ8U3RyaW5nPiBQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKAogICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlw
Ym9hcmRCdWZmZXIgYnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcykKIHsKLSAgICBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJl
YWRBdmFpbGFibGVUeXBlcygKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRBdmFpbGFibGVUeXBlcygKICAg
ICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIGNvbnRhaW5z
RmlsZW5hbWVzKTsKICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCkBAIC0yMzksNyArMjM5LDcgQEAgYm9vbCBQ
bGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoUAogewogICAgIFdlYlN0cmluZyByZXN1
bHREYXRhOwogICAgIFdlYlN0cmluZyByZXN1bHRNZXRhZGF0YTsKLSAgICBib29sIHN1Y2NlZWRl
ZCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZERhdGEoCisgICAgYm9vbCBzdWNj
ZWVkZWQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWREYXRhKAog
ICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgdHlwZSwg
JnJlc3VsdERhdGEsICZyZXN1bHRNZXRhZGF0YSk7CiAgICAgaWYgKHN1Y2NlZWRlZCkgewogICAg
ICAgICBkYXRhID0gcmVzdWx0RGF0YTsKQEAgLTI1MCw3ICsyNTAsNyBAQCBib29sIFBsYXRmb3Jt
QnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YShQCiAKIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIgYnVmZmVyKQogewotICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktp
dENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEZpbGVuYW1lcygKKyAgICBXZWJWZWN0b3I8V2Vi
U3RyaW5nPiByZXN1bHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJl
YWRGaWxlbmFtZXMoCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihi
dWZmZXIpKTsKICAgICBWZWN0b3I8U3RyaW5nPiBjb252ZXJ0ZWRSZXN1bHQ7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCkBAIC0zMzEsNDAgKzMzMSw0MCBA
QCBib29sIFBsYXRmb3JtQnJpZGdlOjpjb29raWVzRW5hYmxlZChjb25zCiAKIHZvaWQgUGxhdGZv
cm1CcmlkZ2U6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7Ci0gICAgd2Vi
S2l0Q2xpZW50KCktPnByZWZldGNoSG9zdE5hbWUoaG9zdG5hbWUpOworICAgIHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5wcmVmZXRjaEhvc3ROYW1lKGhvc3RuYW1lKTsKIH0KIAogLy8gRmlsZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25zdCBT
dHJpbmcmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPmZpbGVFeGlzdHMocGF0aCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5maWxlVXRpbGl0aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7CiB9CiAKIGJvb2wgUGxhdGZvcm1C
cmlkZ2U6OmRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVGaWxlKHBhdGgpOworICAgIHJldHVy
biB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVGaWxlKHBh
dGgpOwogfQogCiBib29sIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShjb25z
dCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0
aWVzKCktPmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVFbXB0eURpcmVjdG9yeShwYXRo
KTsKIH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBw
YXRoLCBsb25nIGxvbmcmIHJlc3VsdCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZp
bGVVdGlsaXRpZXMoKS0+Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKKyAgICByZXR1cm4gd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZVNpemUocGF0aCwg
cmVzdWx0KTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyhjb25z
dCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+
cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Zmls
ZVV0aWxpdGllcygpLT5yZXZlYWxGb2xkZXJJbk9TKHBhdGgpOwogfQogCiBib29sIFBsYXRmb3Jt
QnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVf
dCYgcmVzdWx0KQogewogICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwotICAgIGlmICghd2Vi
S2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0
aCwgbW9kaWZpY2F0aW9uVGltZSkpCisgICAgaWYgKCF3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
ZmlsZVV0aWxpdGllcygpLT5nZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCBtb2RpZmljYXRp
b25UaW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0
PHRpbWVfdD4obW9kaWZpY2F0aW9uVGltZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzIsNjIg
KzM3Miw2MiBAQCBib29sIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uCiAKIFN0
cmluZyBQbGF0Zm9ybUJyaWRnZTo6ZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7
Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRpcmVjdG9yeU5h
bWUocGF0aCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0
aWVzKCktPmRpcmVjdG9yeU5hbWUocGF0aCk7CiB9CiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBjb21wb25lbnQpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBjb21wb25lbnQpOworICAgIHJldHVy
biB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5wYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQocGF0aCwgY29tcG9uZW50KTsKIH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
bWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOwor
ICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5tYWtl
QWxsRGlyZWN0b3JpZXMocGF0aCk7CiB9CiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0QWJz
b2x1dGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0QWJzb2x1dGVQYXRoKHBhdGgpOworICAgIHJldHVybiB3
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5nZXRBYnNvbHV0ZVBhdGgo
cGF0aCk7CiB9CiAKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmlzRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+
aXNEaXJlY3RvcnkocGF0aCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5m
aWxlVXRpbGl0aWVzKCktPmlzRGlyZWN0b3J5KHBhdGgpOwogfQogCiBLVVJMIFBsYXRmb3JtQnJp
ZGdlOjpmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZmlsZVBhdGhUb1VSTChwYXRoKTsKKyAgICBy
ZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+ZmlsZVBhdGhU
b1VSTChwYXRoKTsKIH0KIAogUGxhdGZvcm1GaWxlSGFuZGxlIFBsYXRmb3JtQnJpZGdlOjpvcGVu
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogewotICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5vcGVuRmlsZShwYXRoLCBtb2RlKTsK
KyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+b3Bl
bkZpbGUocGF0aCwgbW9kZSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsb3NlRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5jbG9zZUZpbGUoaGFuZGxlKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+ZmlsZVV0aWxpdGllcygpLT5jbG9zZUZpbGUoaGFuZGxlKTsKIH0KIAogbG9uZyBsb25nIFBs
YXRmb3JtQnJpZGdlOjpzZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxv
bmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4p
OworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5z
ZWVrRmlsZShoYW5kbGUsIG9mZnNldCwgb3JpZ2luKTsKIH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRn
ZTo6dHJ1bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZz
ZXQpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnRydW5j
YXRlRmlsZShoYW5kbGUsIG9mZnNldCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9y
dCgpLT5maWxlVXRpbGl0aWVzKCktPnRydW5jYXRlRmlsZShoYW5kbGUsIG9mZnNldCk7CiB9CiAK
IGludCBQbGF0Zm9ybUJyaWRnZTo6cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5maWxlVXRpbGl0aWVzKCktPnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7Cisg
ICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPnJlYWRG
cm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAKIGludCBQbGF0Zm9ybUJyaWRnZTo6
d3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMo
KS0+d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOworICAgIHJldHVybiB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT53cml0ZVRvRmlsZShoYW5kbGUsIGRh
dGEsIGxlbmd0aCk7CiB9CiAKIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQzNSw3ICs0MzUs
NyBAQCBpbnQgUGxhdGZvcm1CcmlkZ2U6OndyaXRlVG9GaWxlKFBsYXRmb3JtCiAjaWYgT1MoV0lO
RE9XUykKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCkK
IHsKLSAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1
cHBvcnQoKTsKKyAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKIAogICAgIC8vIGlmIHRoZXJlIGlzIG5vIHNhbmRib3gs
IHRoZW4gd2UgY2FuIGFzc3VtZSB0aGUgZm9udAogICAgIC8vIHdhcyBhYmxlIHRvIGJlIGxvYWRl
ZCBzdWNjZXNzZnVsbHkgYWxyZWFkeQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIGJvb2wgUGxhdGZvcm1C
cmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEYKICNpZiBPUyhEQVJXSU4pCiBib29sIFBsYXRmb3Jt
QnJpZGdlOjpsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYqIGNv
bnRhaW5lciwgdWludDMyX3QqIGZvbnRJRCkKIHsKLSAgICBXZWJTYW5kYm94U3VwcG9ydCogc3Mg
PSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKKyAgICBXZWJTYW5kYm94U3VwcG9y
dCogc3MgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKICAgICBp
ZiAoc3MpCiAgICAgICAgIHJldHVybiBzcy0+bG9hZEZvbnQoc3JjRm9udCwgY29udGFpbmVyLCBm
b250SUQpOwogCkBAIC00NjEsOCArNDYxLDggQEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bG9hZEZv
bnQoTlNGb250KiBzcgogI2VsaWYgT1MoVU5JWCkKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0
Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBu
dW1DaGFyYWN0ZXJzLCBjb25zdCBjaGFyKiBwcmVmZXJyZWRMb2NhbGUpCiB7Ci0gICAgaWYgKHdl
YktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpKQotICAgICAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPnNhbmRib3hTdXBwb3J0KCktPmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNoYXJh
Y3RlcnMsIG51bUNoYXJhY3RlcnMsIHByZWZlcnJlZExvY2FsZSk7CisgICAgaWYgKHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5zYW5kYm94U3VwcG9ydCgpKQorICAgICAgICByZXR1cm4gd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPnNhbmRib3hTdXBwb3J0KCktPmdldEZvbnRGYW1pbHlGb3JDaGFy
YWN0ZXJzKGNoYXJhY3RlcnMsIG51bUNoYXJhY3RlcnMsIHByZWZlcnJlZExvY2FsZSk7CiAKICAg
ICBXZWJDU3RyaW5nIGZhbWlseSA9IFdlYkZvbnRJbmZvOjpmYW1pbHlGb3JDaGFycyhjaGFyYWN0
ZXJzLCBudW1DaGFyYWN0ZXJzLCBwcmVmZXJyZWRMb2NhbGUpOwogICAgIGlmIChmYW1pbHkuZGF0
YSgpKQpAQCAtNDc1LDggKzQ3NSw4IEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmdldFJlbmRlclN0
eWxlRm9yU3QKIHsKICAgICBXZWJGb250UmVuZGVyU3R5bGUgc3R5bGU7CiAKLSAgICBpZiAod2Vi
S2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCkpCi0gICAgICAgIHdlYktpdENsaWVudCgpLT5z
YW5kYm94U3VwcG9ydCgpLT5nZXRSZW5kZXJTdHlsZUZvclN0cmlrZShmb250LCBzaXplQW5kU3R5
bGUsICZzdHlsZSk7CisgICAgaWYgKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zYW5kYm94U3Vw
cG9ydCgpKQorICAgICAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQo
KS0+Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOwog
ICAgIGVsc2UKICAgICAgICAgV2ViRm9udEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKGZvbnQs
IHNpemVBbmRTdHlsZSwgJnN0eWxlKTsKIApAQCAtNDg4LDI3ICs0ODgsMjcgQEAgdm9pZCBQbGF0
Zm9ybUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdAogCiBQbGF0Zm9ybUZpbGVIYW5kbGUgUGxh
dGZvcm1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwg
aW50IGRlc2lyZWRGbGFncykKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNl
T3BlbkZpbGUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKKyAgICByZXR1
cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmRhdGFiYXNlT3BlbkZpbGUoV2ViU3RyaW5nKHZm
c0ZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKIH0KIAogaW50IFBsYXRmb3JtQnJpZGdlOjpkYXRh
YmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKQog
ewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdlYlN0cmlu
Zyh2ZnNGaWxlTmFtZSksIHN5bmNEaXIpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIHN5bmNEaXIp
OwogfQogCiBsb25nIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNv
bnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5k
YXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkpOworICAgIHJl
dHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhX
ZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKIH0KIAogbG9uZyBsb25nIFBsYXRmb3JtQnJpZGdlOjpk
YXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCiB7Ci0gICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVTaXplKFdlYlN0cmluZyh2ZnNGaWxl
TmFtZSkpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGF0YWJhc2VHZXRG
aWxlU2l6ZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKIH0KIAogbG9uZyBsb25nIFBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZUdldFNwYWNlQXZhaWxhYmxlRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYg
b3JpZ2luSWRlbnRpZmllcikKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNl
R2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7CisgICAgcmV0dXJu
IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5kYXRhYmFzZUdldFNwYWNlQXZhaWxhYmxlRm9yT3Jp
Z2luKG9yaWdpbklkZW50aWZpZXIpOwogfQogCiAvLyBJbmRleGVkIERhdGFiYXNlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01
MjQsNyArNTI0LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZQog
ewogICAgIFdlYlZlY3RvcjxXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHdlYlZhbHVlcyA9IHZh
bHVlczsKICAgICBXZWJWZWN0b3I8V2ViSURCS2V5PiB3ZWJLZXlzOwotICAgIHdlYktpdENsaWVu
dCgpLT5jcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHdlYlZhbHVl
cywga2V5UGF0aCwgd2ViS2V5cyk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0
ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgod2ViVmFsdWVzLCBrZXlQYXRo
LCB3ZWJLZXlzKTsKIAogICAgIHNpemVfdCB3ZWJLZXlzU2l6ZSA9IHdlYktleXMuc2l6ZSgpOwog
ICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KHdlYktleXNTaXplKTsKQEAgLTUzNCw3ICs1MzQsNyBA
QCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlCiAKIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBQbGF0Zm9ybUJyaWRnZTo6aW5qZWN0SURCS2V5SW50b1Nl
cmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2
YWx1ZSwga2V5UGF0aCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5pbmpl
Y3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOwogfQogCiAv
LyBLZXlnZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NDIsNyArNTQyLDcgQEAgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IFBsYXRmbwogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpzaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoCiAgICAgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBj
b25zdCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNpemVJ
bmRleCwKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nKGNoYWxsZW5n
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViVVJMKHVybCkpOwogfQpAQCAtNTUxLDcgKzU1MSw3IEBAIFN0cmluZyBQbGF0
Zm9ybUJyaWRnZTo6c2lnbmVkUHVibGljS2V5QW4KIAogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpj
b21wdXRlZERlZmF1bHRMYW5ndWFnZSgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5k
ZWZhdWx0TG9jYWxlKCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5kZWZh
dWx0TG9jYWxlKCk7CiB9CiAKIC8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU2NSw0MCArNTY1
LDQwIEBAIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkKIAogYm9vbCBQbGF0
Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9y
dHNJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKQorICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKICAg
ICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAogYm9vbCBQbGF0
Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5z
dXBwb3J0c0phdmFTY3JpcHRNSU1FVHlwZShtaW1lVHlwZSkKKyAgICByZXR1cm4gd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c0phdmFTY3JpcHRNSU1FVHlw
ZShtaW1lVHlwZSkKICAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsK
IH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1l
UmVnaXN0cnkoKS0+c3VwcG9ydHNOb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKQorICAgIHJldHVy
biB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTm9uSW1h
Z2VNSU1FVHlwZShtaW1lVHlwZSkKICAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1
cHBvcnRlZDsKIH0KIAogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjptaW1lVHlwZUZvckV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
Pm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOworICAgIHJl
dHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBlRm9y
RXh0ZW5zaW9uKGV4dGVuc2lvbik7CiB9CiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6d2VsbEtu
b3duTWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCiB7Ci0gICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+d2VsbEtub3duTWltZVR5cGVG
b3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPm1pbWVSZWdpc3RyeSgpLT53ZWxsS25vd25NaW1lVHlwZUZvckV4dGVuc2lvbihleHRlbnNp
b24pOwogfQogCiBTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRnJvbUZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5
KCktPm1pbWVUeXBlRnJvbUZpbGUocGF0aCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGcm9tRmlsZShwYXRoKTsKIH0KIAogU3Ry
aW5nIFBsYXRmb3JtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lz
dHJ5KCktPnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1
cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1pbWVSZWdpc3RyeSgpLT5wcmVmZXJyZWRFeHRl
bnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CiB9CiAKIC8vIFBsdWdpbiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTYwNiw3ICs2MDYsNyBAQCBTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OnByZWZlcnJlZEV4dGVu
c2lvCiBib29sIFBsYXRmb3JtQnJpZGdlOjpwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBs
dWdpbkluZm8+KiByZXN1bHRzKQogewogICAgIFdlYlBsdWdpbkxpc3RCdWlsZGVySW1wbCBidWls
ZGVyKHJlc3VsdHMpOwotICAgIHdlYktpdENsaWVudCgpLT5nZXRQbHVnaW5MaXN0KHJlZnJlc2gs
ICZidWlsZGVyKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Z2V0UGx1Z2luTGlzdChy
ZWZyZXNoLCAmYnVpbGRlcik7CiAgICAgcmV0dXJuIHRydWU7ICAvLyBGSVhNRTogVGhlcmUgaXMg
bm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2YWx1ZS4KIH0KIApAQCAtNjIy
LDcgKzYyMiw3IEBAIE5QT2JqZWN0KiBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2luU2NyaXB0YWIKIAog
UGFzc1JlZlB0cjxJbWFnZT4gUGxhdGZvcm1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3Vy
Y2UoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdl
YktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7CisgICAgY29uc3QgV2ViRGF0YSYgcmVz
b3VyY2UgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bG9hZFJlc291cmNlKG5hbWUpOwogICAg
IGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdl
KCk7CiAKQEAgLTYzNSw3ICs2MzUsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBQbGF0Zm9ybUJyaWRn
ZTo6bG9hZFBsCiAKIFBhc3NPd25QdHI8QXVkaW9CdXM+IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxh
dGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQog
ewotICAgIGNvbnN0IFdlYkRhdGEmIHJlc291cmNlID0gd2ViS2l0Q2xpZW50KCktPmxvYWRSZXNv
dXJjZShuYW1lKTsKKyAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7CiAgICAgaWYgKHJlc291cmNlLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC02NDUsNyArNjQ1LDcgQEAgUGFz
c093blB0cjxBdWRpb0J1cz4gUGxhdGZvcm1CcmlkZ2U6OmxvYQogUGFzc093blB0cjxBdWRpb0J1
cz4gUGxhdGZvcm1CcmlkZ2U6OmRlY29kZUF1ZGlvRmlsZURhdGEoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IHNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKQogewogICAgIFdlYkF1ZGlvQnVzIHdlYkF1
ZGlvQnVzOwotICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+bG9hZEF1ZGlvUmVzb3VyY2UoJndlYkF1
ZGlvQnVzLCBkYXRhLCBzaXplLCBzYW1wbGVSYXRlKSkKKyAgICBpZiAod2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPmxvYWRBdWRpb1Jlc291cmNlKCZ3ZWJBdWRpb0J1cywgZGF0YSwgc2l6ZSwgc2Ft
cGxlUmF0ZSkpCiAgICAgICAgIHJldHVybiB3ZWJBdWRpb0J1cy5yZWxlYXNlKCk7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CkBAIC02NTYsNTMgKzY1Niw1MyBAQCBQYXNzT3duUHRyPEF1ZGlvQnVz
PiBQbGF0Zm9ybUJyaWRnZTo6ZGVjCiAKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OnNhbmRib3hFbmFi
bGVkKCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hFbmFibGVkKCk7Cisg
ICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zYW5kYm94RW5hYmxlZCgpOwogfQog
CiAvLyBTaGFyZWRUaW1lcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJl
ZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZnVuYykoKSkKIHsKLSAgICB3ZWJLaXRDbGllbnQo
KS0+c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKGZ1bmMpOworICAgIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5zZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oZnVuYyk7CiB9CiAKIHZvaWQg
UGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZh
bCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoaW50
ZXJ2YWwpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zZXRTaGFyZWRUaW1lckZpcmVJ
bnRlcnZhbChpbnRlcnZhbCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnN0b3BTaGFyZWRU
aW1lcigpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnN0b3BTaGFyZWRUaW1lcigpOworICAgIHdl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zdG9wU2hhcmVkVGltZXIoKTsKIH0KIAogLy8gU3RhdHND
b3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50
ZXIoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+ZGVjcmVtZW50U3Rh
dHNDb3VudGVyKG5hbWUpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5kZWNyZW1lbnRT
dGF0c0NvdW50ZXIobmFtZSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmluY3JlbWVudFN0
YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQogewotICAgIHdlYktpdENsaWVudCgpLT5pbmNy
ZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmlu
Y3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6aGlz
dG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4s
IGludCBtYXgsIGludCBidWNrZXRDb3VudCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+aGlzdG9n
cmFtQ3VzdG9tQ291bnRzKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldENvdW50KTsKKyAg
ICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKG5hbWUsIHNh
bXBsZSwgbWluLCBtYXgsIGJ1Y2tldENvdW50KTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6
aGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJv
dW5kYXJ5VmFsdWUpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUVudW1lcmF0aW9u
KG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1ZSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPmhpc3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1ZSk7CiB9
CiAKIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6c3VkZGVu
VGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+
c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGVuYWJsZWQpOworICAgIHdlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT5zdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoZW5hYmxlZCk7CiB9CiAKIC8vIFRoZW1p
bmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTcxMyw3ICs3MTMsNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpw
YWludEJ1dHRvbigKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRl
LCBpbnQgY2xhc3NpY1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2Vi
S2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50QnV0dG9uKAorICAgIHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludEJ1dHRvbigKICAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVj
dCk7CiB9CiAKQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludE1l
bnVMaXN0KAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICB3ZWJLaXRD
bGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRNZW51TGlzdCgKKyAgICB3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRNZW51TGlzdCgKICAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVj
dCk7CiB9CiAKQEAgLTcyOSw3ICs3MjksNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNj
cm9sbGJhckFycm93CiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xpZW50
KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyQXJyb3coCisgICAgd2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyQXJyb3coCiAgICAgICAg
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJl
Y3QpOwogfQogCkBAIC03MzcsNyArNzM3LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRT
Y3JvbGxiYXJUaHVtYgogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3Rh
dGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICB3
ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICB3
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVt
YigKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUs
IGNsYXNzaWNTdGF0ZSwgcmVjdCk7CiB9CiAKQEAgLTc0NSw3ICs3NDUsNyBAQCB2b2lkIFBsYXRm
b3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRyYWNrCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywg
aW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRSZWN0JiBhbGlnblJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCkt
PnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVHJhY2soCisgICAgd2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVHJhY2soCiAgICAgICAgIGdj
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUs
IHJlY3QsCiAgICAgICAgIGFsaWduUmVjdCk7CiB9CkBAIC03NTQsNyArNzU0LDcgQEAgdm9pZCBQ
bGF0Zm9ybUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2Ms
IGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTcGlu
QnV0dG9uKAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWlu
dFNwaW5CdXR0b24oCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBh
cnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQogCkBAIC03NjYsNyArNzY2LDcgQEAg
dm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUZXh0RmllbGQoCiAgICAgLy8gRmFsbGJhY2sgdG8g
d2hpdGUgd2hlbiB8Y29sb3J8IGlzIGludmFsaWQuCiAgICAgUkdCQTMyIGJhY2tncm91bmRDb2xv
ciA9IGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yLnJnYigpIDogQ29sb3I6OndoaXRlOwogCi0gICAg
d2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50VGV4dEZpZWxkKAorICAgIHdlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFRleHRGaWVsZCgKICAgICAg
ICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNT
dGF0ZSwgcmVjdCwKICAgICAgICAgYmFja2dyb3VuZENvbG9yLCBmaWxsQ29udGVudEFyZWEsIGRy
YXdFZGdlcyk7CiB9CkBAIC03NzUsMTQgKzc3NSwxNCBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpw
YWludFRyYWNrYmFyKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3Rh
dGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICB3
ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUcmFja2JhcigKKyAgICB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUcmFja2JhcigKICAgICAgICAg
Z2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0
ZSwgcmVjdCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIoCiAg
ICAgR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50
UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRz
KQogewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dyZXNzQmFy
KAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dy
ZXNzQmFyKAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBiYXJSZWN0
LCB2YWx1ZVJlY3QsIGRldGVybWluYXRlLCBhbmltYXRlZFNlY29uZHMpOwogfQogCkBAIC04MDUs
NyArODA1LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYgogI2Vs
c2UKICAgICBXZWJLaXQ6OldlYkNhbnZhcyogd2ViQ2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4
dCgpOwogI2VuZGlmCi0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Ny
b2xsYmFyVGh1bWIoCisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCkt
PnBhaW50U2Nyb2xsYmFyVGh1bWIoCiAgICAgICAgIHdlYkNhbnZhcywKICAgICAgICAgc3RhdGlj
X2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlN0YXRlPihzdGF0ZSksCiAgICAgICAgIHN0YXRpY19jYXN0
PFdlYlRoZW1lRW5naW5lOjpTaXplPihzaXplKSwKQEAgLTkwOSw3ICs5MDksNyBAQCBzdGF0aWMg
dm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKFBsYXRmCiAKIEludFNpemUgUGxhdGZvcm1Ccmlk
Z2U6OmdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0IHBhcnQpCiB7Ci0gICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+Z2V0U2l6ZShXZWJUaGVtZVBhcnQocGFydCkpOwor
ICAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPmdldFNp
emUoV2ViVGhlbWVQYXJ0KHBhcnQpKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRU
aGVtZVBhcnQoCkBAIC05MTcsNyArOTE3LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRU
aGVtZVBhcnQoCiB7CiAgICAgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zIHdlYlRoZW1lRXh0
cmFQYXJhbXM7CiAgICAgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhwYXJ0LCBzdGF0ZSwgZXh0cmFQ
YXJhbXMsICZ3ZWJUaGVtZUV4dHJhUGFyYW1zKTsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVF
bmdpbmUoKS0+cGFpbnQoCisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5l
KCktPnBhaW50KAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBXZWJU
aGVtZVBhcnQocGFydCksIFdlYlRoZW1lU3RhdGUoc3RhdGUpLCByZWN0LCAmd2ViVGhlbWVFeHRy
YVBhcmFtcyk7CiB9CiAKQEAgLTkyNywxMiArOTI3LDEyIEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6
OnBhaW50VGhlbWVQYXJ0KAogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4o
Y29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQogewotICAgIHdl
YktpdENsaWVudCgpLT50cmFjZUV2ZW50QmVnaW4obmFtZSwgaWQsIGV4dHJhKTsKKyAgICB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlkLCBleHRyYSk7CiB9
CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29uc3QgY2hhciogbmFtZSwg
dm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQogewotICAgIHdlYktpdENsaWVudCgpLT50cmFj
ZUV2ZW50RW5kKG5hbWUsIGlkLCBleHRyYSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkt
PnRyYWNlRXZlbnRFbmQobmFtZSwgaWQsIGV4dHJhKTsKIH0KIAogLy8gVmlzaXRlZCBMaW5rcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtOTQzLDcgKzk0Myw3IEBAIExpbmtIYXNoIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVk
TGlua0hhc2gKICAgICB1cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7CiAgICAgaWYgKCF1cmxfdXRp
bDo6Q2Fub25pY2FsaXplKHVybCwgbGVuZ3RoLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAgICAg
ICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIFVSTHMgYXJlIHVudmlzaXRlZC4KLSAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVu
Z3RoKCkpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dmlzaXRlZExpbmtI
YXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiB9CiAKIExpbmtIYXNoIFBsYXRm
b3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwKQEAgLTk3NywxMiAr
OTc3LDEyIEBAIExpbmtIYXNoIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2gKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCAwLCAm
YnVmZmVyLCAmcGFyc2VkKSkKICAgICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIHJlc29sdmVk
IFVSTC4KIAotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsK
IH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6aXNMaW5rVmlzaXRlZChMaW5rSGFzaCB2aXNpdGVk
TGlua0hhc2gpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5pc0xpbmtWaXNpdGVkKHZp
c2l0ZWRMaW5rSGFzaCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5pc0xp
bmtWaXNpdGVkKHZpc2l0ZWRMaW5rSGFzaCk7CiB9CiAKIC8vIFRoZXNlIGFyZSB0ZW1wb3Jhcnkg
bWV0aG9kcyB0aGF0IHRoZSBXZWJLaXQgbGF5ZXIgY2FuIHVzZSB0byBjYWxsIHRvIHRoZQpAQCAt
MTAwMiwxMiArMTAwMiwxMiBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpub3RpZnlKU091dE9mTWVt
b3J5CiAKIGludCBQbGF0Zm9ybUJyaWRnZTo6bWVtb3J5VXNhZ2VNQigpCiB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4od2ViS2l0Q2xpZW50KCktPm1lbW9yeVVzYWdlTUIoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4od2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1lbW9yeVVz
YWdlTUIoKSk7CiB9CiAKIGludCBQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigp
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2ViS2l0Q2xpZW50KCktPmFjdHVhbE1l
bW9yeVVzYWdlTUIoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCktPmFjdHVhbE1lbW9yeVVzYWdlTUIoKSk7CiB9CiAKIGludCBQbGF0Zm9ybUJy
aWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3Bw
CShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiV2ViS2l0Lmgi
Ci0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBw
b3J0LmgiCiAjaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiV2Vi
U3RyaW5nLmgiCiAKQEAgLTEyMiw3ICsxMjIsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsPiBQCiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6UGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWwoKQogICAgIDogbV9sb2NhbFBvcnQoMCkKIHsKLSAgICBtX3dlYkNoYW5u
ZWwgPSB3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlTWVzc2FnZVBvcnRDaGFubmVsKCk7CisgICAgbV93
ZWJDaGFubmVsID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZU1lc3NhZ2VQb3J0Q2hh
bm5lbCgpOwogICAgIGlmIChtX3dlYkNoYW5uZWwpCiAgICAgICAgIG1fd2ViQ2hhbm5lbC0+c2V0
Q2xpZW50KHRoaXMpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3Vy
Y2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jl
c291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogI2luY2x1ZGUgIldlYktpdC5oIgotI2lu
Y2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5o
IgogI2luY2x1ZGUgIldlYlVSTEVycm9yLmgiCiAjaW5jbHVkZSAiV2ViVVJMTG9hZGVyLmgiCiAj
aW5jbHVkZSAiV2ViVVJMTG9hZGVyQ2xpZW50LmgiCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6c3RhcnQoKQogICAgICAgICBDUkFTSCgpOwogICAgIG1fc3Rh
dGUgPSBDb25uZWN0aW9uU3RhdGVTdGFydGVkOwogCi0gICAgbV9sb2FkZXIgPSBhZG9wdFB0cih3
ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOworICAgIG1fbG9hZGVyID0gYWRvcHRQ
dHIod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKICAgICBBU1NF
UlQobV9sb2FkZXIuZ2V0KCkpOwogCiAgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCB3cmFwcGVk
UmVxdWVzdChtX3JlcXVlc3QpOwpAQCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsK
LSAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFB0cih3ZWJLaXRDbGllbnQo
KS0+Y3JlYXRlVVJMTG9hZGVyKCkpOworICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IGxvYWRlciA9
IGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVVUkxMb2FkZXIoKSk7CiAg
ICAgQVNTRVJUKGxvYWRlci5nZXQoKSk7CiAKICAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3RJbihyZXF1ZXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NoYXJl
ZFdvcmtlclJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRl
ICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNp
bmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKICNpbmNsdWRlICJXZWJTaGFyZWRXb3Jr
ZXIuaCIKICNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCkBAIC0xODYsOCAr
MTg2LDggQEAgdm9pZCBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI6OmNvbm5lY3RlZAogCiBib29s
IFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmlzQXZhaWxhYmxlKCkKIHsKLSAgICAvLyBBbGxvdyB0
aGUgV2ViS2l0Q2xpZW50IHRvIGRldGVybWluZSBpZiBTaGFyZWRXb3JrZXJzIGFyZSBhdmFpbGFi
bGUuCi0gICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPnNoYXJlZFdvcmtlclJlcG9z
aXRvcnkoKTsKKyAgICAvLyBBbGxvdyB0aGUgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IHRvIGRldGVy
bWluZSBpZiBTaGFyZWRXb3JrZXJzIGFyZSBhdmFpbGFibGUuCisgICAgcmV0dXJuIFdlYktpdDo6
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKTsKIH0KIAog
c3RhdGljIFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OkRvY3VtZW50SUQgZ2V0SWQodm9pZCog
ZG9jdW1lbnQpCkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5
Ojpjb25uZWN0KFBhcwogewogICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsYWJsZSB1bmxl
c3MgdGhlcmUncyBhIFNoYXJlZFdvcmtlclJlcG9zaXRvcnkgZm9yCiAgICAgLy8gdGhpcyBjb250
ZXh0IChzaW5jZSBpc0F2YWlsYWJsZSgpIHNob3VsZCBoYXZlIHJldHVybmVkIG51bGwpLgotICAg
IEFTU0VSVChXZWJLaXQ6OndlYktpdENsaWVudCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCkp
OworICAgIEFTU0VSVChXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5KCkpOwogCiAgICAgLy8gTm8gbmVzdGVkIHdvcmtlcnMgKGZvciBub3cpIC0g
Y29ubmVjdCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGRvY3VtZW50IGNvbnRleHQuCiAg
ICAgQVNTRVJUKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkp
OwpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Y29ubmVj
dChQYXMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdlYktpdDo6d2ViS2l0Q2xpZW50
KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKS0+YWRkU2hhcmVkV29ya2VyKAorICAgIFdlYktp
dDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKS0+YWRk
U2hhcmVkV29ya2VyKAogICAgICAgICB3ZWJXb3JrZXIuZ2V0KCksIGdldElkKGRvY3VtZW50KSk7
CiAKICAgICAvLyBUaGUgbG9hZGVyIG9iamVjdCBtYW5hZ2VzIGl0cyBvd24gbGlmZWN5Y2xlIChh
bmQgdGhlIGxpZmVjeWNsZXMgb2YgdGhlIHR3byB3b3JrZXIgb2JqZWN0cykuCkBAIC0yMjYsNyAr
MjI2LDcgQEAgdm9pZCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpjb25uZWN0KFBhcwogCiB2b2lk
IFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewotICAgIFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkqIHJlcG8gPSBXZWJLaXQ6Ondl
YktpdENsaWVudCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCk7CisgICAgV2ViU2hhcmVkV29y
a2VyUmVwb3NpdG9yeSogcmVwbyA9IFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNo
YXJlZFdvcmtlclJlcG9zaXRvcnkoKTsKICAgICBpZiAocmVwbykKICAgICAgICAgcmVwby0+ZG9j
dW1lbnREZXRhY2hlZChnZXRJZChkb2N1bWVudCkpOwogCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9p
ZCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpkb2N1bWVudERldAogCiBib29sIFNoYXJlZFdvcmtl
clJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAg
IFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkqIHJlcG8gPSBXZWJLaXQ6OndlYktpdENsaWVudCgp
LT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCk7CisgICAgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9y
eSogcmVwbyA9IFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNoYXJlZFdvcmtlclJl
cG9zaXRvcnkoKTsKICAgICByZXR1cm4gcmVwbyAmJiByZXBvLT5oYXNTaGFyZWRXb3JrZXJzKGdl
dElkKGRvY3VtZW50KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Nv
Y2tldFN0cmVhbUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViRGF0YS5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldl
YktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1
ZGUgIldlYlNvY2tldFN0cmVhbUhhbmRsZS5oIgogI2luY2x1ZGUgIldlYlNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgpAQCAtODksNyArODksNyBAQCBTb2Nr
ZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6flNvY2tldFN0cmVhCiAKIHZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlSW50ZXJuYWw6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsKQogewotICAgIG1fc29ja2V0
ID0gYWRvcHRQdHIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSgpKTsK
KyAgICBtX3NvY2tldCA9IGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVT
b2NrZXRTdHJlYW1IYW5kbGUoKSk7CiAgICAgTE9HKE5ldHdvcmssICJjb25uZWN0Iik7CiAgICAg
QVNTRVJUKG1fc29ja2V0LmdldCgpKTsKICAgICBtX3NvY2tldC0+Y29ubmVjdCh1cmwsIHRoaXMp
OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
dG9yYWdlRXZlbnREaXNwYXRjaGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJl
YS5oIgogCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBTdG9yYWdlRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaChjbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBGcmFtZSogc291cmNlRnJhbWUpCiB7CiAg
ICAgQVNTRVJUKCFzb3VyY2VGcmFtZSk7ICAvLyBTYWQsIGJ1dCB0cnVlLgotICAgIFdlYktpdDo6
d2ViS2l0Q2xpZW50KCktPmRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIG5ld1Zh
bHVlLCBvcmlnaW4tPnRvU3RyaW5nKCksIFdlYktpdDo6V2ViVVJMKCksIHN0b3JhZ2VUeXBlID09
IExvY2FsU3RvcmFnZSk7CisgICAgV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG9yaWdpbi0+dG9TdHJp
bmcoKSwgV2ViS2l0OjpXZWJVUkwoKSwgc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCShyZXZpc2lvbiA5NDIxMSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIK
LSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBv
cnQuaCIKICNpbmNsdWRlICJXZWJTdG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgpAQCAtNDQsNyArNDQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5h
bWVzcGFjZTo6bG9jYWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWdu
ZWQgcXVvdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlUHJv
eHkoV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBh
dGgsIHF1b3RhKSwgTG9jYWxTdG9yYWdlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9y
YWdlTmFtZXNwYWNlUHJveHkoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRl
TG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBhdGgsIHF1b3RhKSwgTG9jYWxTdG9yYWdlKSk7CiB9CiAK
IFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UoUGFnZSogcGFnZSwgdW5zaWduZWQgcXVvdGEpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVk
ZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmgiCkBAIC01NCwyNiArNTQsMjYgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAvLyBEb2luZyBzbyBtYXkgY2F1c2UgaGFyZCB0byByZXByb2R1Y2UgY3Jhc2hlcy4KIHN0YXRp
YyBib29sIHNfd2ViS2l0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAotc3RhdGljIFdlYktpdENsaWVu
dCogc193ZWJLaXRDbGllbnQgPSAwOworc3RhdGljIFdlYktpdFBsYXRmb3JtU3VwcG9ydCogc193
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQgPSAwOwogc3RhdGljIGJvb2wgc19sYXlvdXRUZXN0TW9kZSA9
IGZhbHNlOwogCiBzdGF0aWMgYm9vbCBnZW5lcmF0ZUVudHJvcHkodW5zaWduZWQgY2hhciogYnVm
ZmVyLCBzaXplX3QgbGVuZ3RoKQogewotICAgIGlmIChzX3dlYktpdENsaWVudCkgewotICAgICAg
ICBzX3dlYktpdENsaWVudC0+Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLCBs
ZW5ndGgpOworICAgIGlmIChzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCkgeworICAgICAgICBzX3dl
YktpdFBsYXRmb3JtU3VwcG9ydC0+Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVy
LCBsZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIGluaXRpYWxpemUoV2ViS2l0Q2xpZW50KiB3ZWJLaXRDbGllbnQpCit2b2lk
IGluaXRpYWxpemUoV2ViS2l0UGxhdGZvcm1TdXBwb3J0KiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQp
CiB7CiAgICAgQVNTRVJUKCFzX3dlYktpdEluaXRpYWxpemVkKTsKICAgICBzX3dlYktpdEluaXRp
YWxpemVkID0gdHJ1ZTsKIAotICAgIEFTU0VSVCh3ZWJLaXRDbGllbnQpOwotICAgIEFTU0VSVCgh
c193ZWJLaXRDbGllbnQpOwotICAgIHNfd2ViS2l0Q2xpZW50ID0gd2ViS2l0Q2xpZW50OworICAg
IEFTU0VSVCh3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOworICAgIEFTU0VSVCghc193ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQpOworICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gd2ViS2l0UGxhdGZv
cm1TdXBwb3J0OwogCiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZCgpOwpAQCAtOTUsMTIgKzk1LDEyIEBAIHZvaWQgaW5pdGlhbGl6
ZShXZWJLaXRDbGllbnQqIHdlYktpdENsaWUKIAogdm9pZCBzaHV0ZG93bigpCiB7Ci0gICAgc193
ZWJLaXRDbGllbnQgPSAwOworICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gMDsKIH0KIAot
V2ViS2l0Q2xpZW50KiB3ZWJLaXRDbGllbnQoKQorV2ViS2l0UGxhdGZvcm1TdXBwb3J0KiB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKQogewotICAgIHJldHVybiBzX3dlYktpdENsaWVudDsKKyAgICBy
ZXR1cm4gc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQ7CiB9CiAKIHZvaWQgc2V0TGF5b3V0VGVzdE1v
ZGUoYm9vbCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQu
aCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNs
dWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIK
ICNpbmNsdWRlICJXZWJNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllci5o
IgogI2luY2x1ZGUgIldlYk1pbWVSZWdpc3RyeS5oIgpAQCAtNjI3LDggKzYyNyw3IEBAIHZvaWQg
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpnZXRTdXBwb3IKIE1lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5n
JiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGNvZGVjcykKIHsKLSAgICBXZWJNaW1lUmVn
aXN0cnk6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUgPQotICAgICAgICB3ZWJLaXRDbGllbnQo
KS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTWVkaWFNSU1FVHlwZSh0eXBlLCBjb2RlY3MpOwor
ICAgIFdlYk1pbWVSZWdpc3RyeTo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZSA9IHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNNZWRpYU1JTUVUeXBlKHR5
cGUsIGNvZGVjcyk7CiAKICAgICBzd2l0Y2ggKHN1cHBvcnRzVHlwZSkgewogICAgIGRlZmF1bHQ6
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5D
b250YWluZXJJbXBsLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNyBAQAogI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktp
dENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUg
IldlYlBsdWdpbi5oIgogI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmNvcHko
KQogICAgIGlmICghbV93ZWJQbHVnaW4tPmhhc1NlbGVjdGlvbigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlSFRNTChtX3dlYlBsdWdp
bi0+c2VsZWN0aW9uQXNNYXJrdXAoKSwgV2ViVVJMKCksIG1fd2ViUGx1Z2luLT5zZWxlY3Rpb25B
c1RleHQoKSwgZmFsc2UpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQo
KS0+d3JpdGVIVE1MKG1fd2ViUGx1Z2luLT5zZWxlY3Rpb25Bc01hcmt1cCgpLCBXZWJVUkwoKSwg
bV93ZWJQbHVnaW4tPnNlbGVjdGlvbkFzVGV4dCgpLCBmYWxzZSk7CiB9CiAKIFdlYkVsZW1lbnQg
V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6ZWxlbWVudCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEy
LDcgKzExMiw3IEBACiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYklu
cHV0RXZlbnRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2Vi
S2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVk
ZSAiV2ViTWVkaWFQbGF5ZXJBY3Rpb24uaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCiAjaW5jbHVk
ZSAiV2ViUGx1Z2luLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3Jr
ZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQAogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAi
V2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2Vi
TWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgog
I2luY2x1ZGUgIldlYlN0cmluZy5oIgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2
aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNp
bmNsdWRlICJXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oIgogI2luY2x1ZGUgIldlYkZpbGVX
cml0ZXIuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJXb3JrZXJC
YXNlLmgiCiAjaW5jbHVkZSAiV29ya2VyQXN5bmNGaWxlV3JpdGVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
IGZpbGVTeXN0ZW1PcGVyYXRpb25zTW8KIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpX
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgV2ViS2l0OjpXZWJVUkwmIHJv
b3RVUkwsIGJvb2wgc3luY2hyb25vdXMpCiAgICAgOiBBc3luY0ZpbGVTeXN0ZW0odHlwZSkKICAg
ICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAgICwgbV93ZWJGaWxlU3lz
dGVtKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmZpbGVTeXN0ZW0oKSkKKyAgICAsIG1fd2ViRmls
ZVN5c3RlbSh3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVN5c3RlbSgpKQogICAgICwgbV93
b3JrZXJDb250ZXh0KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KSkKICAgICAs
IG1fc3luY2hyb25vdXMoc3luY2hyb25vdXMpCiAgICAgLCBtX2ZpbGVzeXN0ZW1Sb290VVJMKHJv
b3RVUkwpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlV3JpdGVy
Q2FsbGJhY2tzQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJGaWxlV3JpdGVyQ2FsbGJhY2tzQnJpZGdlLmNwcAkocmV2aXNpb24gOTQyMTEp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlV3JpdGVyQ2FsbGJhY2tz
QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgIldl
YkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJXZWJGaWxlV3JpdGVyLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZv
cm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgogI2luY2x1ZGUgIldvcmtl
ckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgpAQCAtMTA0LDcgKzEw
NCw3IEBAIHZvaWQgV29ya2VyRmlsZVdyaXRlckNhbGxiYWNrc0JyaWRnZTo6YWIKIHZvaWQgV29y
a2VyRmlsZVdyaXRlckNhbGxiYWNrc0JyaWRnZTo6aW5pdE9uTWFpblRocmVhZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlV3JpdGVyQ2FsbGJhY2tzQnJpZGdl
PiBicmlkZ2UsIGNvbnN0IEtVUkwmIHBhdGgpCiB7CiAgICAgQVNTRVJUKCFicmlkZ2UtPm1fd3Jp
dGVyKTsKLSAgICBicmlkZ2UtPm1fd3JpdGVyID0gYWRvcHRQdHIod2ViS2l0Q2xpZW50KCktPmZp
bGVTeXN0ZW0oKS0+Y3JlYXRlRmlsZVdyaXRlcihwYXRoLCBicmlkZ2UuZ2V0KCkpKTsKKyAgICBi
cmlkZ2UtPm1fd3JpdGVyID0gYWRvcHRQdHIod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVT
eXN0ZW0oKS0+Y3JlYXRlRmlsZVdyaXRlcihwYXRoLCBicmlkZ2UuZ2V0KCkpKTsKIH0KIAogdm9p
ZCBXb3JrZXJGaWxlV3JpdGVyQ2FsbGJhY2tzQnJpZGdlOjpzaHV0ZG93bk9uTWFpblRocmVhZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlV3JpdGVyQ2FsbGJh
Y2tzQnJpZGdlPiBicmlkZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1
bkFsbFRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1J1bkFsbFRlc3RzLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1J1bkFsbFRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QAogI2luY2x1ZGUgPGJhc2UvdGVzdC90ZXN0X3N1aXRlLmg+CiAKICNpbmNsdWRlICJXZWJLaXQu
aCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1
cHBvcnQuaCIKICNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgogCiAj
aWYgZGVmaW5lZChXRUJLSVRfRExMX1VOSVRURVNUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105816</attachid>
            <date>2011-08-31 12:58:37 -0700</date>
            <delta_ts>2011-08-31 13:00:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67309-20110831125836.patch</filename>
            <type>text/plain</type>
            <size>95706</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDIxMikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcw
IEBACisyMDExLTA4LTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBSZW5hbWUgV2ViS2l0Q2xpZW50IHRvIFdlYktpdFBsYXRmb3JtU3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczMDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXRD
bGllbnQgZG9lc24ndCBhY3R1YWxseSByZXByZXNlbnQgdGhlIFdlYktpdCBDbGllbnQuICBJbnN0
ZWFkLCBpdAorICAgICAgICByZXByZXNlbnRzIHN1cHBvcnRpbmcgY29kZSBmb3IgdGhlIFdlYktp
dCBQbGF0Zm9ybS4gIFRoaXMgcGF0Y2ggcmVuYW1lcworICAgICAgICBXZWJLaXRDbGllbnQgdG8g
V2ViS2l0UGxhdGZvcm1TdXBwb3J0IHRvIG1ha2UgaXQgZWFzaWVyIGZvciBmb2xrcyB0bworICAg
ICAgICB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIENsaWVudCBhbmQgdGhl
IFBsYXRmb3JtLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW5jbHVkZXMgc2hpbXMgc28gYXMgbm90
IHRvIGJyZWFrIHRoZSBDaHJvbWl1bSBidWlsZC4gIE9uY2UKKyAgICAgICAgdGhlIENocm9taXVt
IHNpZGUgaXMgdXBkYXRlZCwgSSdsbCByZW1vdmUgdGhlIHNoaW1zLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWVDbGllbnQuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViS2l0Lmg6CisgICAgICAgIChXZWJLaXQ6OndlYktpdENsaWVudCk6CisgICAgICAg
ICogcHVibGljL1dlYktpdENsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJL
aXRQbGF0Zm9ybVN1cHBvcnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViS2l0Q2xpZW50LmguCisgICAgICAgIChXZWJLaXQ6OldlYktpdFBsYXRmb3JtU3Vw
cG9ydDo6fldlYktpdFBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogc3JjL0FwcGxpY2F0aW9u
Q2FjaGVIb3N0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRlci5j
cHA6CisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bSk6CisgICAgICAgICogc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06OkF1ZGlvRGVzdGluYXRpb25DaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBs
ZVJhdGUpOgorICAgICAgICAqIHNyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iUmVnaXN0cnlQcm94eTo6QmxvYlJlZ2lzdHJ5UHJveHkpOgorICAgICAgICAq
IHNyYy9DQ1RocmVhZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ1RocmVhZEltcGw6OkND
VGhyZWFkSW1wbCk6CisgICAgICAgICogc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwOgorICAg
ICAgICAoV1RGOjpjdXJyZW50VGltZSk6CisgICAgICAgIChXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSk6CisgICAgICAgICogc3JjL0Nocm9taXVtT1NSYW5kb21Tb3VyY2UuY3BwOgor
ICAgICAgICAoV1RGOjpjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlc0Zyb21PUyk6CisgICAg
ICAgICogc3JjL0Nocm9taXVtVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFdURjo6Q2hyb21pdW1U
aHJlYWRpbmc6OmNhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNh
blNob3dNSU1FVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
dXNlckFnZW50KToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAg
KiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQkZh
Y3RvcnlCYWNrZW5kUHJveHk6OklEQkZhY3RvcnlCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNy
Yy9Mb2NhbGl6ZWRTdHJpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnF1ZXJ5KToKKyAgICAg
ICAgKiBzcmMvUGxhdGZvcm1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29va2ll
SmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjYWNoZU1ldGFkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWls
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBs
YWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVh
ZEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkR2V0U2Vx
dWVuY2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xp
cGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmZp
bGVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpvcGVuRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xvc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzZWVrRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpyZWFkRnJvbUZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpsb2FkRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZh
bHVlc0FuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmluamVj
dElEQktleUludG9TZXJpYWxpemVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1h
Z2VNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVG
b3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OndlbGxLbm93
bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjptaW1lVHlwZUZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpw
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6cGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9h
ZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjppbmNyZW1lbnRTdGF0c0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnBhaW50VHJhY2tiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmdldFRo
ZW1lUGFydFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhl
bWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWVtb3J5VXNhZ2VNQik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQik6CisgICAgICAgICogc3JjL1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCk6CisgICAgICAg
ICogc3JjL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBzcmMvU2hhcmVkV29ya2VyUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpj
b25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3Vt
ZW50RGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6
aGFzU2hhcmVkV29ya2Vycyk6CisgICAgICAgICogc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6Y29ubmVjdCk6
CisgICAgICAgICogc3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaCk6CisgICAgICAg
ICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAqIHNyYy9XZWJL
aXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpnZW5lcmF0ZUVudHJvcHkpOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6c2h1dGRvd24pOgorICAgICAgICAo
V2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHNyYy9XZWJNZWRpYVBs
YXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb3B5KToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06
OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmls
ZVdyaXRlckNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVX
cml0ZXJDYWxsYmFja3NCcmlkZ2U6OmluaXRPbk1haW5UaHJlYWQpOgorICAgICAgICAqIHRlc3Rz
L1J1bkFsbFRlc3RzLmNwcDoKKwogMjAxMS0wOC0zMSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2VkLCBmaXggaW5jb25zaXN0ZW50
IFdlYktpdC5neXBpIGFmdGVyIHI5NDEwNgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSW5wdXRFdmVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYktpdC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYktpdENsaWVudC5oJywKKyAgICAgICAgICAgICAg
ICAncHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkxhYmVsRWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkxvY2Fs
aXplZFN0cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhRWxlbWVudC5o
JywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGll
bnQuaAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJGcmFtZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoK
ICAgICAvLyBTZXJ2aWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIEEgZnJhbWUgc3BlY2lmaWMgY29va2llIGph
ci4gIE1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2FzZQotICAgIC8vIFdlYktpdENsaWVudDo6
Y29va2llSmFyKCkgd2lsbCBiZSBjYWxsZWQgdG8gYWNjZXNzIGNvb2tpZXMuCisgICAgLy8gV2Vi
S2l0UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVKYXIoKSB3aWxsIGJlIGNhbGxlZCB0byBhY2Nlc3Mg
Y29va2llcy4KICAgICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKFdlYkZyYW1lKikg
eyByZXR1cm4gMDsgfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktp
dC5oCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNyArMzUsMzEgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIFdlYktpdENsaWVudDsKK2NsYXNzIFdlYktpdFBsYXRmb3JtU3VwcG9y
dDsKIAogLy8gTXVzdCBiZSBjYWxsZWQgb24gdGhlIHRocmVhZCB0aGF0IHdpbGwgYmUgdGhlIG1h
aW4gV2ViS2l0IHRocmVhZCBiZWZvcmUKLS8vIHVzaW5nIGFueSBvdGhlciBXZWJLaXQgQVBJcy4g
IFRoZSBwcm92aWRlZCBXZWJLaXRDbGllbnQgbXVzdCBiZSBub24tbnVsbAotLy8gYW5kIG11c3Qg
cmVtYWluIHZhbGlkIHVudGlsIHRoZSBjdXJyZW50IHRocmVhZCBjYWxscyBzaHV0ZG93bi4KLVdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKFdlYktpdENsaWVudCopOwotCi0vLyBPbmNlIHNo
dXRkb3duLCB0aGUgV2ViS2l0Q2xpZW50IHBhc3NlZCB0byBpbml0aWFsaXplIHdpbGwgbm8gbG9u
Z2VyIGJlCi0vLyBhY2Nlc3NlZC4gIE5vIG90aGVyIFdlYktpdCBvYmplY3RzIHNob3VsZCBiZSBp
biB1c2Ugd2hlbiB0aGlzIGZ1bmN0aW9uCi0vLyBpcyBjYWxsZWQuICBBbnkgYmFja2dyb3VuZCB0
aHJlYWRzIGNyZWF0ZWQgYnkgV2ViS2l0IGFyZSBwcm9taXNlZCB0byBiZQorLy8gdXNpbmcgYW55
IG90aGVyIFdlYktpdCBBUElzLiBUaGUgcHJvdmlkZWQgV2ViS2l0UGxhdGZvcm1TdXBwb3J0OyBt
dXN0IGJlCisvLyBub24tbnVsbCBhbmQgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGN1cnJl
bnQgdGhyZWFkIGNhbGxzIHNodXRkb3duLgorV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUo
V2ViS2l0UGxhdGZvcm1TdXBwb3J0Kik7CisKKy8vIE9uY2Ugc2h1dGRvd24sIHRoZSBXZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQgcGFzc2VkIHRvIGluaXRpYWxpemUgd2lsbCBubyBsb25nZXIKKy8vIGJl
IGFjY2Vzc2VkLiBObyBvdGhlciBXZWJLaXQgb2JqZWN0cyBzaG91bGQgYmUgaW4gdXNlIHdoZW4g
dGhpcyBmdW5jdGlvbiBpcworLy8gY2FsbGVkLiBBbnkgYmFja2dyb3VuZCB0aHJlYWRzIGNyZWF0
ZWQgYnkgV2ViS2l0IGFyZSBwcm9taXNlZCB0byBiZQogLy8gdGVybWluYXRlZCBieSB0aGUgdGlt
ZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCiBXRUJLSVRfRVhQT1JUIHZvaWQgc2h1dGRvd24oKTsK
IAotLy8gUmV0dXJucyB0aGUgV2ViS2l0Q2xpZW50IGluc3RhbmNlIHBhc3NlZCB0byBpbml0aWFs
aXplLgotV0VCS0lUX0VYUE9SVCBXZWJLaXRDbGllbnQqIHdlYktpdENsaWVudCgpOworLy8gUmV0
dXJucyB0aGUgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IGluc3RhbmNlIHBhc3NlZCB0byBpbml0aWFs
aXplLgorV0VCS0lUX0VYUE9SVCBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQqIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpOworCisjaWZuZGVmIFdFQktJVF9SRU5BTUVfV0VCS0lUX0NMSUVOVAorV0VCS0lU
X0VYUE9SVCBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQqIHdlYktpdENsaWVudCgpOworI2VuZGlmCiAK
IC8vIEFsdGVycyB0aGUgcmVuZGVyaW5nIG9mIGNvbnRlbnQgdG8gY29uZm9ybSB0byBhIGZpeGVk
IHNldCBvZiBydWxlcy4KIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRMYXlvdXRUZXN0TW9kZShib29s
KTsKIFdFQktJVF9FWFBPUlQgYm9vbCBsYXlvdXRUZXN0TW9kZSgpOwogCi0vLyBFbmFibGVzIHRo
ZSBuYW1lZCBsb2cgY2hhbm5lbC4gIFNlZSBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaCBmb3Ig
ZGV0YWlscy4KKy8vIEVuYWJsZXMgdGhlIG5hbWVkIGxvZyBjaGFubmVsLiBTZWUgV2ViQ29yZS9w
bGF0Zm9ybS9Mb2dnaW5nLmggZm9yIGRldGFpbHMuCiBXRUJLSVRfRVhQT1JUIHZvaWQgZW5hYmxl
TG9nQ2hhbm5lbChjb25zdCBjaGFyKik7CiAKIC8vIFB1cmdlIHRoZSBwbHVnaW4gbGlzdCBjYWNo
ZS4gSWYgfHJlbG9hZFBhZ2VzfCBpcyB0cnVlLCBhbnkgcGFnZXMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCShyZXZpc2lvbiA5NDIxMSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRDbGllbnRfaAotI2RlZmluZSBXZWJL
aXRDbGllbnRfaAotCi0jaW5jbHVkZSAiV2ViQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJXZWJBdWRp
b0RldmljZS5oIgotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYkRhdGEuaCIK
LSNpbmNsdWRlICJXZWJMb2NhbGl6ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKLSNpbmNsdWRlICJXZWJWZWN0
b3IuaCIKLSNpbmNsdWRlICJXZWJVUkwuaCIKLQotI2luY2x1ZGUgPHRpbWUuaD4KLQotI2lmZGVm
IFdJTjMyCi10eXBlZGVmIHZvaWQgKkhBTkRMRTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q7Ci1jbGFzcyBXZWJBcHBsaWNhdGlv
bkNhY2hlSG9zdENsaWVudDsKLWNsYXNzIFdlYkJsb2JSZWdpc3RyeTsKLWNsYXNzIFdlYkNsaXBi
b2FyZDsKLWNsYXNzIFdlYkNvb2tpZUphcjsKLWNsYXNzIFdlYkZpbGVTeXN0ZW07Ci1jbGFzcyBX
ZWJGaWxlVXRpbGl0aWVzOwotY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBXZWJJ
REJGYWN0b3J5OwotY2xhc3MgV2ViSURCS2V5OwotY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFubmVs
OwotY2xhc3MgV2ViTWltZVJlZ2lzdHJ5OwotY2xhc3MgV2ViUGx1Z2luTGlzdEJ1aWxkZXI7Ci1j
bGFzcyBXZWJTYW5kYm94U3VwcG9ydDsKLWNsYXNzIFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnk7
Ci1jbGFzcyBXZWJTb2NrZXRTdHJlYW1IYW5kbGU7Ci1jbGFzcyBXZWJTdG9yYWdlTmFtZXNwYWNl
OwotY2xhc3MgV2ViVGhlbWVFbmdpbmU7Ci1jbGFzcyBXZWJUaHJlYWQ7Ci1jbGFzcyBXZWJVUkxM
b2FkZXI7Ci0KLWNsYXNzIFdlYktpdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gTXVzdCByZXR1
cm4gbm9uLW51bGwuCi0gICAgdmlydHVhbCBXZWJDbGlwYm9hcmQqIGNsaXBib2FyZCgpIHsgcmV0
dXJuIDA7IH0KLQotICAgIC8vIE11c3QgcmV0dXJuIG5vbi1udWxsLgotICAgIHZpcnR1YWwgV2Vi
TWltZVJlZ2lzdHJ5KiBtaW1lUmVnaXN0cnkoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBNdXN0
IHJldHVybiBub24tbnVsbC4KLSAgICB2aXJ0dWFsIFdlYkZpbGVVdGlsaXRpZXMqIGZpbGVVdGls
aXRpZXMoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYgc2FuZGJv
eCBzdXBwb3J0IGlzIG5vdCBuZWNlc3NhcnkKLSAgICB2aXJ0dWFsIFdlYlNhbmRib3hTdXBwb3J0
KiBzYW5kYm94U3VwcG9ydCgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIE1heSByZXR1cm4gbnVs
bCBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICB2aXJ0dWFsIFdlYlRoZW1lRW5naW5lKiB0aGVtZUVu
Z2luZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIE1heSByZXR1cm4gbnVsbC4KLSAgICB2aXJ0
dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gQmxv
YiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgICAvLyBNdXN0IHJldHVybiBub24tbnVsbC4KLSAgICB2aXJ0dWFsIFdl
YkJsb2JSZWdpc3RyeSogYmxvYlJlZ2lzdHJ5KCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gRE9N
IFN0b3JhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotICAgIC8vIFJldHVybiBhIExvY2FsU3RvcmFnZSBuYW1lc3BhY2UgdGhhdCBjb3JyZXNw
b25kcyB0byB0aGUgZm9sbG93aW5nIHBhdGguCi0gICAgdmlydHVhbCBXZWJTdG9yYWdlTmFtZXNw
YWNlKiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoY29uc3QgV2ViU3RyaW5nJiBwYXRoLCB1
bnNpZ25lZCBxdW90YSkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gc3RvcmFn
ZSBldmVudHMgZmlyZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29u
c3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmluZyYgb2xkVmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbmV3VmFsdWUsIGNv
bnN0IFdlYlN0cmluZyYgb3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBpc0xvY2FsU3RvcmFnZSkgeyB9Ci0KLQotICAg
IC8vIEhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gUmV0dXJucyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVu
IGNhbm9uaWNhbGl6ZWQgVVJMIGZvciB1c2UgaW4gdmlzaXRlZAotICAgIC8vIGxpbmsgY29sb3Jp
bmcuCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgdmlzaXRlZExpbmtIYXNoKAotICAg
ICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxVUkwsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIDA7
IH0KLQotICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbGluayBoYXNoIGlzIGluIHRo
ZSB1c2VyJ3MgaGlzdG9yeS4gIFRoZQotICAgIC8vIGhhc2ggbXVzdCBoYXZlIGJlZW4gZ2VuZXJh
dGVkIGJ5IGNhbGxpbmcgVmlzaXRlZExpbmtIYXNoKCkuCi0gICAgdmlydHVhbCBib29sIGlzTGlu
a1Zpc2l0ZWQodW5zaWduZWQgbG9uZyBsb25nIGxpbmtIYXNoKSB7IHJldHVybiBmYWxzZTsgfQot
Ci0KLSAgICAvLyBIVE1MNSBEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmZGVmIFdJTjMyCi0gICAgdHlwZWRlZiBIQU5E
TEUgRmlsZUhhbmRsZTsKLSNlbHNlCi0gICAgdHlwZWRlZiBpbnQgRmlsZUhhbmRsZTsKLSNlbmRp
ZgotCi0gICAgLy8gT3BlbnMgYSBkYXRhYmFzZSBmaWxlOyBkaXJIYW5kbGUgc2hvdWxkIGJlIDAg
aWYgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkCi0gICAgLy8gYSBoYW5kbGUgdG8gdGhlIGRpcmVj
dG9yeSBjb250YWluaW5nIHRoaXMgZmlsZQotICAgIHZpcnR1YWwgRmlsZUhhbmRsZSBkYXRhYmFz
ZU9wZW5GaWxlKAotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHZmc0ZpbGVOYW1lLCBpbnQgZGVz
aXJlZEZsYWdzKSB7IHJldHVybiBGaWxlSGFuZGxlKCk7IH0KLQotICAgIC8vIERlbGV0ZXMgYSBk
YXRhYmFzZSBmaWxlIGFuZCByZXR1cm5zIHRoZSBlcnJvciBjb2RlCi0gICAgdmlydHVhbCBpbnQg
ZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3lu
Y0RpcikgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgYXR0cmlidXRlcyBvZiB0
aGUgZ2l2ZW4gZGF0YWJhc2UgZmlsZQotICAgIHZpcnR1YWwgbG9uZyBkYXRhYmFzZUdldEZpbGVB
dHRyaWJ1dGVzKGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUpIHsgcmV0dXJuIDA7IH0KLQot
ICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGdpdmVuIGRhdGFiYXNlIGZpbGUKLSAgICB2
aXJ0dWFsIGxvbmcgbG9uZyBkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFdlYlN0cmluZyYgdmZz
RmlsZU5hbWUpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJldHVybnMgdGhlIHNwYWNlIGF2YWls
YWJsZSBmb3IgdGhlIGdpdmVuIG9yaWdpbgotICAgIHZpcnR1YWwgbG9uZyBsb25nIGRhdGFiYXNl
R2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4oY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG9yaWdp
bklkZW50aWZpZXIpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIEluZGV4ZWQgRGF0YWJhc2UgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAg
dmlydHVhbCBXZWJJREJGYWN0b3J5KiBpZGJGYWN0b3J5KCkgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNv
bnN0IFdlYlZlY3RvcjxXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiB2YWx1ZXMsICBjb25zdCBX
ZWJTdHJpbmcmIGtleVBhdGgsIFdlYlZlY3RvcjxXZWJJREJLZXk+JiBrZXlzKSB7IH0KLSAgICB2
aXJ0dWFsIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKGNvbnN0IFdlYklEQktleSYga2V5LCBjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBXZWJTdHJpbmcmIGtleVBhdGgpIHsgcmV0dXJuIFdlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSgpOyB9Ci0KLQotICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gSGFu
ZGxlIHRoZSA8a2V5Z2VuPiB0YWcgZm9yIGdlbmVyYXRpbmcgY2xpZW50IGNlcnRpZmljYXRlcwot
ICAgIC8vIFJldHVybnMgYSBiYXNlNjQgZW5jb2RlZCBzaWduZWQgY29weSBvZiBhIHB1YmxpYyBr
ZXkgZnJvbSBhIG5ld2x5Ci0gICAgLy8gZ2VuZXJhdGVkIGtleSBwYWlyIGFuZCB0aGUgc3VwcGxp
ZWQgY2hhbGxlbmdlIHN0cmluZy4ga2V5U2l6ZWluZGV4Ci0gICAgLy8gc3BlY2lmaWVzIHRoZSBz
dHJlbmd0aCBvZiB0aGUga2V5LgotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJiBjaGFsbGVuZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVVJMJiB1cmwpIHsgcmV0dXJu
IFdlYlN0cmluZygpOyB9Ci0KLQotCi0gICAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBSZXR1
cm5zIHRoZSBjdXJyZW50IHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2VmaWxlLCBpbiBNQi4K
LSAgICAvLyBUaGF0IGlzIGNvbW1pdHRlZCBzaXplIGZvciBXaW5kb3dzIGFuZCB2aXJ0dWFsIG1l
bW9yeSBzaXplIGZvciBQT1NJWAotICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeVVzYWdlTUIoKSB7
IHJldHVybiAwOyB9Ci0KLSAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgYWx3YXlzIHJldHVybnMg
YWN0dWFsIHZhbHVlLCB3aXRob3V0IGFueSBjYWNoZXMuCi0gICAgdmlydHVhbCBzaXplX3QgYWN0
dWFsTWVtb3J5VXNhZ2VNQigpIHsgcmV0dXJuIDA7IH0KLQotCi0gICAgLy8gVGhyZWFkcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
ICAvLyBDcmVhdGVzIGFuIGVtYmVkZGVyLWRlZmluZWQgdGhyZWFkLgotICAgIHZpcnR1YWwgV2Vi
VGhyZWFkKiBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciogbmFtZSkgeyByZXR1cm4gMDsgfQotCi0K
LSAgICAvLyBNZXNzYWdlIFBvcnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIENyZWF0ZXMgYSBNZXNzYWdlIFBvcnQgQ2hh
bm5lbC4gIFRoaXMgY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLgotICAgIC8vIFRoZSByZXR1
cm5lZCBvYmplY3Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgdGhyZWFkIGl0IHdhcyBjcmVh
dGVkIG9uLgotICAgIHZpcnR1YWwgV2ViTWVzc2FnZVBvcnRDaGFubmVsKiBjcmVhdGVNZXNzYWdl
UG9ydENoYW5uZWwoKSB7IHJldHVybiAwOyB9Ci0KLQotICAgIC8vIE5ldHdvcmsgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgLy8gQSBzdWdnZXN0aW9uIHRvIHByZWZldGNoIElQIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2
ZW4gaG9zdG5hbWUuCi0gICAgdmlydHVhbCB2b2lkIHByZWZldGNoSG9zdE5hbWUoY29uc3QgV2Vi
U3RyaW5nJikgeyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgbmV3IFdlYlVSTExvYWRlciBpbnN0YW5j
ZS4KLSAgICB2aXJ0dWFsIFdlYlVSTExvYWRlciogY3JlYXRlVVJMTG9hZGVyKCkgeyByZXR1cm4g
MDsgfQotCi0gICAgLy8gUmV0dXJucyBhIG5ldyBXZWJTb2NrZXRTdHJlYW1IYW5kbGUgaW5zdGFu
Y2UuCi0gICAgdmlydHVhbCBXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIGNyZWF0ZVNvY2tldFN0cmVh
bUhhbmRsZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFJldHVybnMgdGhlIFVzZXItQWdlbnQg
c3RyaW5nIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBnaXZlbiBVUkwuCi0gICAgdmlydHVh
bCBXZWJTdHJpbmcgdXNlckFnZW50KGNvbnN0IFdlYlVSTCYpIHsgcmV0dXJuIFdlYlN0cmluZygp
OyB9Ci0KLSAgICAvLyBBIHN1Z2dlc3Rpb24gdG8gY2FjaGUgdGhpcyBtZXRhZGF0YSBpbiBhc3Nv
Y2lhdGlvbiB3aXRoIHRoaXMgVVJMLgotICAgIHZpcnR1YWwgdm9pZCBjYWNoZU1ldGFkYXRhKGNv
bnN0IFdlYlVSTCYsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBkYXRhU2l6ZSkgeyB9Ci0KLQotICAgIC8vIFBsdWdpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gSWYgcmVm
cmVzaCBpcyB0cnVlLCB0aGVuIGNhY2hlZCBpbmZvcm1hdGlvbiBzaG91bGQgbm90IGJlIHVzZWQg
dG8KLSAgICAvLyBzYXRpc2Z5IHRoaXMgY2FsbC4KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2lu
TGlzdChib29sIHJlZnJlc2gsIFdlYlBsdWdpbkxpc3RCdWlsZGVyKikgeyB9Ci0KLQotICAgIC8v
IFByb2ZpbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudFN0YXRzQ291bnRlcihj
b25zdCBjaGFyKiBuYW1lKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50U3RhdHNDb3Vu
dGVyKGNvbnN0IGNoYXIqIG5hbWUpIHsgfQotCi0gICAgLy8gQW4gZXZlbnQgaXMgaWRlbnRpZmll
ZCBieSB0aGUgcGFpciAobmFtZSwgaWQpLiAgVGhlIGV4dHJhIHBhcmFtZXRlcgotICAgIC8vIHNw
ZWNpZmllcyBhZGRpdGlvbmFsIGRhdGEgdG8gbG9nIHdpdGggdGhlIGV2ZW50LgotICAgIHZpcnR1
YWwgdm9pZCB0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0
IGNoYXIqIGV4dHJhKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBj
aGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpIHsgfQotCi0gICAgLy8gQ2Fs
bGJhY2tzIGZvciByZXBvcnRpbmcgaGlzdG9ncmFtIGRhdGEuCi0gICAgLy8gQ3VzdG9tQ291bnRz
IGhpc3RvZ3JhbSBoYXMgZXhwb25lbnRpYWwgYnVja2V0IHNpemVzLCBzbyB0aGF0IG1pbj0xLCBt
YXg9MTAwMDAwMCwgYnVja2V0Q291bnQ9NTAgd291bGQgZG8uCi0gICAgdmlydHVhbCB2b2lkIGhp
c3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWlu
LCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpIHsgfQotICAgIC8vIEVudW1lcmF0aW9uIGhpc3Rv
Z3JhbSBidWNrZXRzIGFyZSBsaW5lYXIsIGJvdW5kYXJ5VmFsdWUgc2hvdWxkIGJlIGxhcmdlciB0
aGFuIGFueSBwb3NzaWJsZSBzYW1wbGUgdmFsdWUuCi0gICAgdmlydHVhbCB2b2lkIGhpc3RvZ3Jh
bUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZh
bHVlKSB7IH0KLQotCi0gICAgLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBSZXR1cm5zIGEgYmxv
YiBvZiBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hbWVkIHJlc291cmNlLgotICAgIHZpcnR1
YWwgV2ViRGF0YSBsb2FkUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkgeyByZXR1cm4gV2ViRGF0
YSgpOyB9Ci0KLSAgICAvLyBEZWNvZGVzIHRoZSBpbi1tZW1vcnkgYXVkaW8gZmlsZSBkYXRhIGFu
ZCByZXR1cm5zIHRoZSBsaW5lYXIgUENNIGF1ZGlvIGRhdGEgaW4gdGhlIGRlc3RpbmF0aW9uQnVz
LgotICAgIC8vIEEgc2FtcGxlLXJhdGUgY29udmVyc2lvbiB0byBzYW1wbGVSYXRlIHdpbGwgb2Nj
dXIgaWYgdGhlIGZpbGUgZGF0YSBpcyBhdCBhIGRpZmZlcmVudCBzYW1wbGUtcmF0ZS4KLSAgICAv
LyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEF1ZGlvUmVz
b3VyY2UoV2ViQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBjb25zdCBjaGFyKiBhdWRpb0ZpbGVE
YXRhLCBzaXplX3QgZGF0YVNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKSB7IHJldHVybiBmYWxzZTsg
fQotCi0gICAgLy8gUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVzb3VyY2UgKHdpdGggc3Vi
c3RpdHV0aW9uIHBhcmFtZXRlcnMpLgotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHF1ZXJ5TG9jYWxp
emVkU3RyaW5nKFdlYkxvY2FsaXplZFN0cmluZzo6TmFtZSkgeyByZXR1cm4gV2ViU3RyaW5nKCk7
IH0KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBxdWVyeUxvY2FsaXplZFN0cmluZyhXZWJMb2NhbGl6
ZWRTdHJpbmc6Ok5hbWUsIGNvbnN0IFdlYlN0cmluZyYgcGFyYW1ldGVyKSB7IHJldHVybiBXZWJT
dHJpbmcoKTsgfQotICAgIHZpcnR1YWwgV2ViU3RyaW5nIHF1ZXJ5TG9jYWxpemVkU3RyaW5nKFdl
YkxvY2FsaXplZFN0cmluZzo6TmFtZSwgY29uc3QgV2ViU3RyaW5nJiBwYXJhbWV0ZXIxLCBjb25z
dCBXZWJTdHJpbmcmIHBhcmFtZXRlcjIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0KLQotICAg
IC8vIFNhbmRib3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBJbiBzb21lIGJyb3dzZXJzLCBhICJzYW5kYm94IiBy
ZXN0cmljdHMgd2hhdCBvcGVyYXRpb25zIGEgcHJvZ3JhbQotICAgIC8vIGlzIGFsbG93ZWQgdG8g
cHJlZm9ybS4gIFN1Y2ggb3BlcmF0aW9ucyBhcmUgdHlwaWNhbGx5IGFic3RyYWN0ZWQgb3V0Ci0g
ICAgLy8gdmlhIHRoaXMgQVBJLCBidXQgc29tZXRpbWVzIChsaWtlIGluIEhUTUwgNSBkYXRhYmFz
ZSBvcGVuaW5nKSBXZWJLaXQKLSAgICAvLyBuZWVkcyB0byBiZWhhdmUgZGlmZmVyZW50bHkgYmFz
ZWQgb24gd2hldGhlciBpdCdzIHJlc3RyaWN0ZWQgb3Igbm90LgotICAgIC8vIEluIHRoZXNlIGNh
c2VzIChhbmQgdGhlc2UgY2FzZXMgb25seSkgeW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24uCi0g
ICAgLy8gSXQncyBPSyBmb3IgdGhpcyB2YWx1ZSB0byBiZSBjb25zZXJ2aXRpdmUgKGkuZS4gdHJ1
ZSBldmVuIGlmIHRoZQotICAgIC8vIHNhbmRib3ggaXNuJ3QgYWN0aXZlKS4KLSAgICB2aXJ0dWFs
IGJvb2wgc2FuZGJveEVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQotCi0KLSAgICAvLyBTaGFy
ZWQgV29ya2VycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAgIHZpcnR1YWwgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeSogc2hhcmVk
V29ya2VyUmVwb3NpdG9yeSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFN1ZGRlbiBUZXJtaW5h
dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gICAgLy8gRGlzYWJsZS9FbmFibGUgc3VkZGVuIHRlcm1pbmF0aW9uLgotICAgIHZpcnR1YWwg
dm9pZCBzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKSB7IH0KLQotCi0gICAg
Ly8gU3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBSZXR1cm5zIGEgdmFsdWUgc3VjaCBhcyAiZW4tVVMi
LgotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGRlZmF1bHRMb2NhbGUoKSB7IHJldHVybiBXZWJTdHJp
bmcoKTsgfQotCi0gICAgLy8gV2FsbCBjbG9jayB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGVw
b2NoLgotICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gMDsgfQotCi0g
ICAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHRpbWUgaW4gc2Vjb25kcyBmcm9tIGFuIGFy
Yml0cmFyeSBmaXhlZCBwb2ludCBpbiB0aGUgcGFzdC4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz
IGV4cGVjdGVkIHRvIHJldHVybiBhdCBsZWFzdCBtaWxsaXNlY29uZC1wcmVjaXNpb24gdmFsdWVz
LiBGb3IgdGhpcyByZWFzb24sCi0gICAgLy8gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZml4
ZWQgcG9pbnQgYmUgbm8gZnVydGhlciBpbiB0aGUgcGFzdCB0aGFuIHRoZSBlcG9jaC4KLSAgICB2
aXJ0dWFsIGRvdWJsZSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSB7IHJldHVybiAwOyB9
Ci0KLSAgICAvLyBXZWJLaXQgY2xpZW50cyBtdXN0IGltcGxlbWVudCB0aGlzIGZ1bmNpb24gaWYg
dGhleSB1c2UgY3J5cHRvZ3JhcGhpYyByYW5kb21uZXNzLgotICAgIHZpcnR1YWwgdm9pZCBjcnlw
dG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyh1bnNpZ25lZCBjaGFyKiBidWZmZXIsIHNpemVfdCBs
ZW5ndGgpID0gMDsKLQotICAgIC8vIERlbGF5ZWQgd29yayBpcyBkcml2ZW4gYnkgYSBzaGFyZWQg
dGltZXIuCi0gICAgdHlwZWRlZiB2b2lkICgqU2hhcmVkVGltZXJGdW5jdGlvbikoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKFNoYXJlZFRpbWVyRnVuY3Rp
b24gdGltZXJGdW5jdGlvbikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFNoYXJlZFRpbWVyRmly
ZUludGVydmFsKGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BTaGFyZWRUaW1lcigp
IHsgfQotCi0gICAgLy8gQ2FsbGFibGUgZnJvbSBhIGJhY2tncm91bmQgV2ViS2l0IHRocmVhZC4K
LSAgICB2aXJ0dWFsIHZvaWQgY2FsbE9uTWFpblRocmVhZCh2b2lkICgqZnVuYykodm9pZCopLCB2
b2lkKiBjb250ZXh0KSB7IH0KLQotICAgIC8vIFdlYkdMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBNYXkgcmV0
dXJuIG51bGwgaWYgV2ViR0wgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAvLyBSZXR1cm5zIG5ld2x5
IGFsbG9jYXRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCBpbnN0YW5jZS4KLSAgICB2aXJ0dWFsIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVHcmFwaGljc0NvbnRleHQzRCgpIHsgcmV0dXJuIDA7
IH0KLQotICAgIC8vIEF1ZGlvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICB2aXJ0dWFsIGRvdWJsZSBhdWRpb0hhcmR3
YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIFdlYkF1ZGlvRGV2aWNl
KiBjcmVhdGVBdWRpb0RldmljZShzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgZG91YmxlIHNhbXBsZVJhdGUsIFdlYkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFj
ayopIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIEZpbGVTeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gTXVzdCBy
ZXR1cm4gbm9uLW51bGwuCi0gICAgdmlydHVhbCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkg
eyByZXR1cm4gMDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgfldlYktpdENsaWVudCgpIHsgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgJKHJldmlz
aW9uIDk0MjAwKQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGll
bnQuaDo5NDIwMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRm
b3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRDbGllbnRfaAorI2RlZmluZSBXZWJLaXRDbGllbnRfaAorCisjaW5jbHVkZSAiV2ViQXVkaW9C
dXMuaCIKKyNpbmNsdWRlICJXZWJBdWRpb0RldmljZS5oIgorI2luY2x1ZGUgIldlYkNvbW1vbi5o
IgorI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJMb2NhbGl6ZWRTdHJpbmcuaCIK
KyNpbmNsdWRlICJXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJXZWJTdHJp
bmcuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKworI2lu
Y2x1ZGUgPHRpbWUuaD4KKworI2lmZGVmIFdJTjMyCit0eXBlZGVmIHZvaWQgKkhBTkRMRTsKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhv
c3Q7CitjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKK2NsYXNzIFdlYkJsb2JS
ZWdpc3RyeTsKK2NsYXNzIFdlYkNsaXBib2FyZDsKK2NsYXNzIFdlYkNvb2tpZUphcjsKK2NsYXNz
IFdlYkZpbGVTeXN0ZW07CitjbGFzcyBXZWJGaWxlVXRpbGl0aWVzOworY2xhc3MgV2ViR3JhcGhp
Y3NDb250ZXh0M0Q7CitjbGFzcyBXZWJJREJGYWN0b3J5OworY2xhc3MgV2ViSURCS2V5OworY2xh
c3MgV2ViTWVzc2FnZVBvcnRDaGFubmVsOworY2xhc3MgV2ViTWltZVJlZ2lzdHJ5OworY2xhc3Mg
V2ViUGx1Z2luTGlzdEJ1aWxkZXI7CitjbGFzcyBXZWJTYW5kYm94U3VwcG9ydDsKK2NsYXNzIFdl
YlNoYXJlZFdvcmtlclJlcG9zaXRvcnk7CitjbGFzcyBXZWJTb2NrZXRTdHJlYW1IYW5kbGU7Citj
bGFzcyBXZWJTdG9yYWdlTmFtZXNwYWNlOworY2xhc3MgV2ViVGhlbWVFbmdpbmU7CitjbGFzcyBX
ZWJUaHJlYWQ7CitjbGFzcyBXZWJVUkxMb2FkZXI7CisKK2NsYXNzIFdlYktpdENsaWVudCB7Citw
dWJsaWM6CisgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCisgICAgdmlydHVhbCBXZWJDbGlw
Ym9hcmQqIGNsaXBib2FyZCgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIE11c3QgcmV0dXJuIG5v
bi1udWxsLgorICAgIHZpcnR1YWwgV2ViTWltZVJlZ2lzdHJ5KiBtaW1lUmVnaXN0cnkoKSB7IHJl
dHVybiAwOyB9CisKKyAgICAvLyBNdXN0IHJldHVybiBub24tbnVsbC4KKyAgICB2aXJ0dWFsIFdl
YkZpbGVVdGlsaXRpZXMqIGZpbGVVdGlsaXRpZXMoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBN
YXkgcmV0dXJuIG51bGwgaWYgc2FuZGJveCBzdXBwb3J0IGlzIG5vdCBuZWNlc3NhcnkKKyAgICB2
aXJ0dWFsIFdlYlNhbmRib3hTdXBwb3J0KiBzYW5kYm94U3VwcG9ydCgpIHsgcmV0dXJuIDA7IH0K
KworICAgIC8vIE1heSByZXR1cm4gbnVsbCBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICB2aXJ0dWFs
IFdlYlRoZW1lRW5naW5lKiB0aGVtZUVuZ2luZSgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIE1h
eSByZXR1cm4gbnVsbC4KKyAgICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKCkgeyBy
ZXR1cm4gMDsgfQorCisgICAgLy8gQmxvYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBNdXN0IHJldHVybiBu
b24tbnVsbC4KKyAgICB2aXJ0dWFsIFdlYkJsb2JSZWdpc3RyeSogYmxvYlJlZ2lzdHJ5KCkgeyBy
ZXR1cm4gMDsgfQorCisgICAgLy8gRE9NIFN0b3JhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFJldHVybiBhIExvY2FsU3RvcmFn
ZSBuYW1lc3BhY2UgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZm9sbG93aW5nIHBhdGguCisgICAg
dmlydHVhbCBXZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uo
Y29uc3QgV2ViU3RyaW5nJiBwYXRoLCB1bnNpZ25lZCBxdW90YSkgeyByZXR1cm4gMDsgfQorCisg
ICAgLy8gQ2FsbGVkIHdoZW4gc3RvcmFnZSBldmVudHMgZmlyZS4KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgV2ViU3RyaW5nJiBrZXksIGNvbnN0IFdlYlN0cmlu
ZyYgb2xkVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFdlYlN0cmluZyYgb3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJVUkwmIHVybCwgYm9vbCBpc0xv
Y2FsU3RvcmFnZSkgeyB9CisKKworICAgIC8vIEhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gUmV0dXJu
cyB0aGUgaGFzaCBmb3IgdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZWQgVVJMIGZvciB1c2UgaW4gdmlz
aXRlZAorICAgIC8vIGxpbmsgY29sb3JpbmcuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgdmlzaXRlZExpbmtIYXNoKAorICAgICAgICBjb25zdCBjaGFyKiBjYW5vbmljYWxVUkwsIHNp
emVfdCBsZW5ndGgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUg
Z2l2ZW4gbGluayBoYXNoIGlzIGluIHRoZSB1c2VyJ3MgaGlzdG9yeS4gIFRoZQorICAgIC8vIGhh
c2ggbXVzdCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJ5IGNhbGxpbmcgVmlzaXRlZExpbmtIYXNoKCku
CisgICAgdmlydHVhbCBib29sIGlzTGlua1Zpc2l0ZWQodW5zaWduZWQgbG9uZyBsb25nIGxpbmtI
YXNoKSB7IHJldHVybiBmYWxzZTsgfQorCisKKyAgICAvLyBIVE1MNSBEYXRhYmFzZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmZGVm
IFdJTjMyCisgICAgdHlwZWRlZiBIQU5ETEUgRmlsZUhhbmRsZTsKKyNlbHNlCisgICAgdHlwZWRl
ZiBpbnQgRmlsZUhhbmRsZTsKKyNlbmRpZgorCisgICAgLy8gT3BlbnMgYSBkYXRhYmFzZSBmaWxl
OyBkaXJIYW5kbGUgc2hvdWxkIGJlIDAgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkCisgICAg
Ly8gYSBoYW5kbGUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZmlsZQorICAgIHZp
cnR1YWwgRmlsZUhhbmRsZSBkYXRhYmFzZU9wZW5GaWxlKAorICAgICAgICBjb25zdCBXZWJTdHJp
bmcmIHZmc0ZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKSB7IHJldHVybiBGaWxlSGFuZGxlKCk7
IH0KKworICAgIC8vIERlbGV0ZXMgYSBkYXRhYmFzZSBmaWxlIGFuZCByZXR1cm5zIHRoZSBlcnJv
ciBjb2RlCisgICAgdmlydHVhbCBpbnQgZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFdlYlN0cmlu
ZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpcikgeyByZXR1cm4gMDsgfQorCisgICAgLy8gUmV0
dXJucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UgZmlsZQorICAgIHZpcnR1
YWwgbG9uZyBkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFdlYlN0cmluZyYgdmZzRmls
ZU5hbWUpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGdp
dmVuIGRhdGFiYXNlIGZpbGUKKyAgICB2aXJ0dWFsIGxvbmcgbG9uZyBkYXRhYmFzZUdldEZpbGVT
aXplKGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUpIHsgcmV0dXJuIDA7IH0KKworICAgIC8v
IFJldHVybnMgdGhlIHNwYWNlIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIG9yaWdpbgorICAgIHZp
cnR1YWwgbG9uZyBsb25nIGRhdGFiYXNlR2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4oY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpIHsgcmV0dXJuIDA7IH0KKworICAg
IC8vIEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmlydHVhbCBXZWJJREJGYWN0b3J5KiBpZGJGYWN0b3J5
KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlh
bGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFdlYlZlY3RvcjxXZWJTZXJpYWxpemVkU2NyaXB0
VmFsdWU+JiB2YWx1ZXMsICBjb25zdCBXZWJTdHJpbmcmIGtleVBhdGgsIFdlYlZlY3RvcjxXZWJJ
REJLZXk+JiBrZXlzKSB7IH0KKyAgICB2aXJ0dWFsIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBp
bmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYklEQktleSYga2V5LCBjb25z
dCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJTdHJpbmcmIGtleVBh
dGgpIHsgcmV0dXJuIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOyB9CisKKworICAgIC8vIEtl
eWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgLy8gSGFuZGxlIHRoZSA8a2V5Z2VuPiB0YWcgZm9yIGdlbmVyYXRp
bmcgY2xpZW50IGNlcnRpZmljYXRlcworICAgIC8vIFJldHVybnMgYSBiYXNlNjQgZW5jb2RlZCBz
aWduZWQgY29weSBvZiBhIHB1YmxpYyBrZXkgZnJvbSBhIG5ld2x5CisgICAgLy8gZ2VuZXJhdGVk
IGtleSBwYWlyIGFuZCB0aGUgc3VwcGxpZWQgY2hhbGxlbmdlIHN0cmluZy4ga2V5U2l6ZWluZGV4
CisgICAgLy8gc3BlY2lmaWVzIHRoZSBzdHJlbmd0aCBvZiB0aGUga2V5LgorICAgIHZpcnR1YWwg
V2ViU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlT
aXplSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBjaGFsbGVuZ2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktp
dDo6V2ViVVJMJiB1cmwpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CisKKworCisgICAgLy8gTWVt
b3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNwYWNlIGFsbG9jYXRlZCBm
b3IgdGhlIHBhZ2VmaWxlLCBpbiBNQi4KKyAgICAvLyBUaGF0IGlzIGNvbW1pdHRlZCBzaXplIGZv
ciBXaW5kb3dzIGFuZCB2aXJ0dWFsIG1lbW9yeSBzaXplIGZvciBQT1NJWAorICAgIHZpcnR1YWwg
c2l6ZV90IG1lbW9yeVVzYWdlTUIoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBTYW1lIGFzIGFi
b3ZlLCBidXQgYWx3YXlzIHJldHVybnMgYWN0dWFsIHZhbHVlLCB3aXRob3V0IGFueSBjYWNoZXMu
CisgICAgdmlydHVhbCBzaXplX3QgYWN0dWFsTWVtb3J5VXNhZ2VNQigpIHsgcmV0dXJuIDA7IH0K
KworCisgICAgLy8gVGhyZWFkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBDcmVhdGVzIGFuIGVtYmVkZGVyLWRlZmluZWQg
dGhyZWFkLgorICAgIHZpcnR1YWwgV2ViVGhyZWFkKiBjcmVhdGVUaHJlYWQoY29uc3QgY2hhciog
bmFtZSkgeyByZXR1cm4gMDsgfQorCisKKyAgICAvLyBNZXNzYWdlIFBvcnRzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIENy
ZWF0ZXMgYSBNZXNzYWdlIFBvcnQgQ2hhbm5lbC4gIFRoaXMgY2FuIGJlIGNhbGxlZCBvbiBhbnkg
dGhyZWFkLgorICAgIC8vIFRoZSByZXR1cm5lZCBvYmplY3Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBv
biB0aGUgdGhyZWFkIGl0IHdhcyBjcmVhdGVkIG9uLgorICAgIHZpcnR1YWwgV2ViTWVzc2FnZVBv
cnRDaGFubmVsKiBjcmVhdGVNZXNzYWdlUG9ydENoYW5uZWwoKSB7IHJldHVybiAwOyB9CisKKwor
ICAgIC8vIE5ldHdvcmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gQSBzdWdnZXN0aW9uIHRvIHByZWZldGNoIElQ
IGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gaG9zdG5hbWUuCisgICAgdmlydHVhbCB2b2lkIHBy
ZWZldGNoSG9zdE5hbWUoY29uc3QgV2ViU3RyaW5nJikgeyB9CisKKyAgICAvLyBSZXR1cm5zIGEg
bmV3IFdlYlVSTExvYWRlciBpbnN0YW5jZS4KKyAgICB2aXJ0dWFsIFdlYlVSTExvYWRlciogY3Jl
YXRlVVJMTG9hZGVyKCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gUmV0dXJucyBhIG5ldyBXZWJT
b2NrZXRTdHJlYW1IYW5kbGUgaW5zdGFuY2UuCisgICAgdmlydHVhbCBXZWJTb2NrZXRTdHJlYW1I
YW5kbGUqIGNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8v
IFJldHVybnMgdGhlIFVzZXItQWdlbnQgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRo
ZSBnaXZlbiBVUkwuCisgICAgdmlydHVhbCBXZWJTdHJpbmcgdXNlckFnZW50KGNvbnN0IFdlYlVS
TCYpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CisKKyAgICAvLyBBIHN1Z2dlc3Rpb24gdG8gY2Fj
aGUgdGhpcyBtZXRhZGF0YSBpbiBhc3NvY2lhdGlvbiB3aXRoIHRoaXMgVVJMLgorICAgIHZpcnR1
YWwgdm9pZCBjYWNoZU1ldGFkYXRhKGNvbnN0IFdlYlVSTCYsIGRvdWJsZSByZXNwb25zZVRpbWUs
IGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkgeyB9CisKKworICAgIC8vIFBsdWdp
bnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgLy8gSWYgcmVmcmVzaCBpcyB0cnVlLCB0aGVuIGNhY2hlZCBpbmZvcm1h
dGlvbiBzaG91bGQgbm90IGJlIHVzZWQgdG8KKyAgICAvLyBzYXRpc2Z5IHRoaXMgY2FsbC4KKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UGx1Z2luTGlzdChib29sIHJlZnJlc2gsIFdlYlBsdWdpbkxpc3RC
dWlsZGVyKikgeyB9CisKKworICAgIC8vIFByb2ZpbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmlydHVhbCB2b2lk
IGRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgaW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpIHsgfQorCisgICAg
Ly8gQW4gZXZlbnQgaXMgaWRlbnRpZmllZCBieSB0aGUgcGFpciAobmFtZSwgaWQpLiAgVGhlIGV4
dHJhIHBhcmFtZXRlcgorICAgIC8vIHNwZWNpZmllcyBhZGRpdGlvbmFsIGRhdGEgdG8gbG9nIHdp
dGggdGhlIGV2ZW50LgorICAgIHZpcnR1YWwgdm9pZCB0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hh
ciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciog
ZXh0cmEpIHsgfQorCisgICAgLy8gQ2FsbGJhY2tzIGZvciByZXBvcnRpbmcgaGlzdG9ncmFtIGRh
dGEuCisgICAgLy8gQ3VzdG9tQ291bnRzIGhpc3RvZ3JhbSBoYXMgZXhwb25lbnRpYWwgYnVja2V0
IHNpemVzLCBzbyB0aGF0IG1pbj0xLCBtYXg9MTAwMDAwMCwgYnVja2V0Q291bnQ9NTAgd291bGQg
ZG8uCisgICAgdmlydHVhbCB2b2lkIGhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBu
YW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpIHsgfQor
ICAgIC8vIEVudW1lcmF0aW9uIGhpc3RvZ3JhbSBidWNrZXRzIGFyZSBsaW5lYXIsIGJvdW5kYXJ5
VmFsdWUgc2hvdWxkIGJlIGxhcmdlciB0aGFuIGFueSBwb3NzaWJsZSBzYW1wbGUgdmFsdWUuCisg
ICAgdmlydHVhbCB2b2lkIGhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGlu
dCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKSB7IH0KKworCisgICAgLy8gUmVzb3VyY2VzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgICAvLyBSZXR1cm5zIGEgYmxvYiBvZiBkYXRhIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5h
bWVkIHJlc291cmNlLgorICAgIHZpcnR1YWwgV2ViRGF0YSBsb2FkUmVzb3VyY2UoY29uc3QgY2hh
ciogbmFtZSkgeyByZXR1cm4gV2ViRGF0YSgpOyB9CisKKyAgICAvLyBEZWNvZGVzIHRoZSBpbi1t
ZW1vcnkgYXVkaW8gZmlsZSBkYXRhIGFuZCByZXR1cm5zIHRoZSBsaW5lYXIgUENNIGF1ZGlvIGRh
dGEgaW4gdGhlIGRlc3RpbmF0aW9uQnVzLgorICAgIC8vIEEgc2FtcGxlLXJhdGUgY29udmVyc2lv
biB0byBzYW1wbGVSYXRlIHdpbGwgb2NjdXIgaWYgdGhlIGZpbGUgZGF0YSBpcyBhdCBhIGRpZmZl
cmVudCBzYW1wbGUtcmF0ZS4KKyAgICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKyAgICB2
aXJ0dWFsIGJvb2wgbG9hZEF1ZGlvUmVzb3VyY2UoV2ViQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVz
LCBjb25zdCBjaGFyKiBhdWRpb0ZpbGVEYXRhLCBzaXplX3QgZGF0YVNpemUsIGRvdWJsZSBzYW1w
bGVSYXRlKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gUmV0dXJucyBhIGxvY2FsaXplZCBz
dHJpbmcgcmVzb3VyY2UgKHdpdGggc3Vic3RpdHV0aW9uIHBhcmFtZXRlcnMpLgorICAgIHZpcnR1
YWwgV2ViU3RyaW5nIHF1ZXJ5TG9jYWxpemVkU3RyaW5nKFdlYkxvY2FsaXplZFN0cmluZzo6TmFt
ZSkgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBxdWVyeUxv
Y2FsaXplZFN0cmluZyhXZWJMb2NhbGl6ZWRTdHJpbmc6Ok5hbWUsIGNvbnN0IFdlYlN0cmluZyYg
cGFyYW1ldGVyKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgV2ViU3RyaW5n
IHF1ZXJ5TG9jYWxpemVkU3RyaW5nKFdlYkxvY2FsaXplZFN0cmluZzo6TmFtZSwgY29uc3QgV2Vi
U3RyaW5nJiBwYXJhbWV0ZXIxLCBjb25zdCBXZWJTdHJpbmcmIHBhcmFtZXRlcjIpIHsgcmV0dXJu
IFdlYlN0cmluZygpOyB9CisKKworICAgIC8vIFNhbmRib3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBJbiBzb21l
IGJyb3dzZXJzLCBhICJzYW5kYm94IiByZXN0cmljdHMgd2hhdCBvcGVyYXRpb25zIGEgcHJvZ3Jh
bQorICAgIC8vIGlzIGFsbG93ZWQgdG8gcHJlZm9ybS4gIFN1Y2ggb3BlcmF0aW9ucyBhcmUgdHlw
aWNhbGx5IGFic3RyYWN0ZWQgb3V0CisgICAgLy8gdmlhIHRoaXMgQVBJLCBidXQgc29tZXRpbWVz
IChsaWtlIGluIEhUTUwgNSBkYXRhYmFzZSBvcGVuaW5nKSBXZWJLaXQKKyAgICAvLyBuZWVkcyB0
byBiZWhhdmUgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhlciBpdCdzIHJlc3RyaWN0ZWQgb3Ig
bm90LgorICAgIC8vIEluIHRoZXNlIGNhc2VzIChhbmQgdGhlc2UgY2FzZXMgb25seSkgeW91IGNh
biBjYWxsIHRoaXMgZnVuY3Rpb24uCisgICAgLy8gSXQncyBPSyBmb3IgdGhpcyB2YWx1ZSB0byBi
ZSBjb25zZXJ2aXRpdmUgKGkuZS4gdHJ1ZSBldmVuIGlmIHRoZQorICAgIC8vIHNhbmRib3ggaXNu
J3QgYWN0aXZlKS4KKyAgICB2aXJ0dWFsIGJvb2wgc2FuZGJveEVuYWJsZWQoKSB7IHJldHVybiBm
YWxzZTsgfQorCisKKyAgICAvLyBTaGFyZWQgV29ya2VycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZpcnR1YWwgV2ViU2hhcmVk
V29ya2VyUmVwb3NpdG9yeSogc2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpIHsgcmV0dXJuIDA7IH0K
KworICAgIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gRGlzYWJsZS9FbmFibGUgc3VkZGVuIHRl
cm1pbmF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9v
bCBlbmFibGVkKSB7IH0KKworCisgICAgLy8gU3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZXR1cm5z
IGEgdmFsdWUgc3VjaCBhcyAiZW4tVVMiLgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGRlZmF1bHRM
b2NhbGUoKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQorCisgICAgLy8gV2FsbCBjbG9jayB0aW1l
IGluIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLgorICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRU
aW1lKCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHRp
bWUgaW4gc2Vjb25kcyBmcm9tIGFuIGFyYml0cmFyeSBmaXhlZCBwb2ludCBpbiB0aGUgcGFzdC4K
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhdCBsZWFzdCBtaWxs
aXNlY29uZC1wcmVjaXNpb24gdmFsdWVzLiBGb3IgdGhpcyByZWFzb24sCisgICAgLy8gaXQgaXMg
cmVjb21tZW5kZWQgdGhhdCB0aGUgZml4ZWQgcG9pbnQgYmUgbm8gZnVydGhlciBpbiB0aGUgcGFz
dCB0aGFuIHRoZSBlcG9jaC4KKyAgICB2aXJ0dWFsIGRvdWJsZSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBXZWJLaXQgY2xpZW50cyBtdXN0IGlt
cGxlbWVudCB0aGlzIGZ1bmNpb24gaWYgdGhleSB1c2UgY3J5cHRvZ3JhcGhpYyByYW5kb21uZXNz
LgorICAgIHZpcnR1YWwgdm9pZCBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyh1bnNpZ25l
ZCBjaGFyKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpID0gMDsKKworICAgIC8vIERlbGF5ZWQgd29y
ayBpcyBkcml2ZW4gYnkgYSBzaGFyZWQgdGltZXIuCisgICAgdHlwZWRlZiB2b2lkICgqU2hhcmVk
VGltZXJGdW5jdGlvbikoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKFNoYXJlZFRpbWVyRnVuY3Rpb24gdGltZXJGdW5jdGlvbikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSkgeyB9CisgICAgdmlydHVh
bCB2b2lkIHN0b3BTaGFyZWRUaW1lcigpIHsgfQorCisgICAgLy8gQ2FsbGFibGUgZnJvbSBhIGJh
Y2tncm91bmQgV2ViS2l0IHRocmVhZC4KKyAgICB2aXJ0dWFsIHZvaWQgY2FsbE9uTWFpblRocmVh
ZCh2b2lkICgqZnVuYykodm9pZCopLCB2b2lkKiBjb250ZXh0KSB7IH0KKworICAgIC8vIFdlYkdM
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAvLyBNYXkgcmV0dXJuIG51bGwgaWYgV2ViR0wgaXMgbm90IHN1cHBvcnRl
ZC4KKyAgICAvLyBSZXR1cm5zIG5ld2x5IGFsbG9jYXRlZCBXZWJHcmFwaGljc0NvbnRleHQzRCBp
bnN0YW5jZS4KKyAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVHcmFwaGlj
c0NvbnRleHQzRCgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIEF1ZGlvIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2
aXJ0dWFsIGRvdWJsZSBhdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIFdlYkF1ZGlvRGV2aWNlKiBjcmVhdGVBdWRpb0RldmljZShzaXplX3QgYnVmZmVy
U2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgZG91YmxlIHNhbXBsZVJhdGUsIFdlYkF1
ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjayopIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIEZpbGVT
eXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCisgICAgdmlydHVhbCBXZWJG
aWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsgfQorCitwcm90ZWN0ZWQ6CisgICAg
fldlYktpdENsaWVudCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBw
b3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0
UGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDk0MjAwKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRDbGllbnRf
aAotI2RlZmluZSBXZWJLaXRDbGllbnRfaAorI2lmbmRlZiBXZWJLaXRQbGF0Zm9ybVN1cHBvcnRf
aAorI2RlZmluZSBXZWJLaXRQbGF0Zm9ybVN1cHBvcnRfaAogCiAjaW5jbHVkZSAiV2ViQXVkaW9C
dXMuaCIKICNpbmNsdWRlICJXZWJBdWRpb0RldmljZS5oIgpAQCAtNzAsNyArNzAsNyBAQCBjbGFz
cyBXZWJUaGVtZUVuZ2luZTsKIGNsYXNzIFdlYlRocmVhZDsKIGNsYXNzIFdlYlVSTExvYWRlcjsK
IAotY2xhc3MgV2ViS2l0Q2xpZW50IHsKK2NsYXNzIFdlYktpdFBsYXRmb3JtU3VwcG9ydCB7CiBw
dWJsaWM6CiAgICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCiAgICAgdmlydHVhbCBXZWJDbGlw
Ym9hcmQqIGNsaXBib2FyZCgpIHsgcmV0dXJuIDA7IH0KQEAgLTMwNyw3ICszMDcsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtKCkgeyByZXR1cm4gMDsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgfldlYktpdENsaWVudCgpIHsgfQorICAgIH5XZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0SW50ZXJuYWwuaAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9BcHBsaWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUgIldlYkZy
YW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5o
IgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlVSTC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NvY2lhdGVkVVJMTG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKICNp
bmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNs
dWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldlYlVSTExvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjEx
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJGaWxlV3JpdGVyLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0
UGxhdGZvcm1TdXBwb3J0LmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAg
LTUyLDcgKzUyLDcgQEAgYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKIAogQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKEFzeW5jRmlsZVN5
c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiByb290VVJMKQogICAgIDogQXN5bmNGaWxlU3lz
dGVtKHR5cGUpCi0gICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+
ZmlsZVN5c3RlbSgpKQorICAgICwgbV93ZWJGaWxlU3lzdGVtKFdlYktpdDo6d2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCktPmZpbGVTeXN0ZW0oKSkKICAgICAsIG1fZmlsZXN5c3RlbVJvb3RVUkwocm9v
dFVSTCkKIHsKICAgICBBU1NFUlQobV93ZWJGaWxlU3lzdGVtKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtLmNw
cAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdWRpb0Rl
c3RpbmF0aW9uQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAK
ICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0j
aW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTcxLDcgKzcxLDcgQEAgQXVkaW9E
ZXN0aW5hdGlvbkNocm9taXVtOjpBdWRpb0Rlc3RpbmF0aQogICAgICwgbV9zYW1wbGVSYXRlKHNh
bXBsZVJhdGUpCiAgICAgLCBtX2lzUGxheWluZyhmYWxzZSkKIHsKLSAgICBtX2F1ZGlvRGV2aWNl
ID0gYWRvcHRQdHIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZUF1ZGlvRGV2aWNlKGNhbGxiYWNrQnVm
ZmVyU2l6ZSwgbnVtYmVyT2ZDaGFubmVscywgc2FtcGxlUmF0ZSwgdGhpcykpOworICAgIG1fYXVk
aW9EZXZpY2UgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlQXVkaW9E
ZXZpY2UoY2FsbGJhY2tCdWZmZXJTaXplLCBudW1iZXJPZkNoYW5uZWxzLCBzYW1wbGVSYXRlLCB0
aGlzKSk7CiAgICAgQVNTRVJUKG1fYXVkaW9EZXZpY2UuZ2V0KCkpOwogfQogCkBAIC05OCw3ICs5
OCw3IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpzdG9wKCkKIAogZG91YmxlIEF1
ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCiB7Ci0gICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5hdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpOworICAgIHJldHVybiB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+YXVkaW9IYXJkd2FyZVNhbXBsZVJhdGUoKTsKIH0KIAogLy8gUHVs
bHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCB0aGUgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmNw
cAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVn
aXN0cnlQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRl
ICJXZWJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIldlYkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBs
YXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNTgsNyArNTgsNyBA
QCBCbG9iUmVnaXN0cnkmIGJsb2JSZWdpc3RyeSgpCiB9CiAKIEJsb2JSZWdpc3RyeVByb3h5OjpC
bG9iUmVnaXN0cnlQcm94eSgpCi0gICAgOiBtX3dlYkJsb2JSZWdpc3RyeShXZWJLaXQ6OndlYktp
dENsaWVudCgpLT5ibG9iUmVnaXN0cnkoKSkKKyAgICA6IG1fd2ViQmxvYlJlZ2lzdHJ5KFdlYktp
dDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmJsb2JSZWdpc3RyeSgpKQogewogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DQ1RocmVhZEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVGhyZWFkSW1wbC5jcHAJKHJldmlzaW9u
IDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ0NUaHJlYWRJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkNDVGhyZWFkSW1wbC5o
IgogCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViVGhyZWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKICNpbmNsdWRlIDxzdGRpbnQuaD4KQEAg
LTk2LDcgKzk2LDcgQEAgVGhyZWFkSWRlbnRpZmllciBDQ1RocmVhZEltcGw6OnRocmVhZElEKAog
fQogCiBDQ1RocmVhZEltcGw6OkNDVGhyZWFkSW1wbCgpCi0gICAgOiBtX3RocmVhZChhZG9wdFB0
cih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVGhyZWFkKCJDQ1RocmVhZCIpKSkKKyAgICA6IG1fdGhy
ZWFkKGFkb3B0UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVUaHJlYWQoIkNDVGhy
ZWFkIikpKQogewogICAgIC8vIEdldCB0aGUgdGhyZWFkSWQgZm9yIHRoZSBuZXdseS1jcmVhdGVk
IHRocmVhZCBieSBydW5uaW5nIGEgdGFzawogICAgIC8vIG9uIHRoYXQgdGhyZWFkLCBibG9ja2lu
ZyBvbiB0aGUgcmVzdWx0LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21p
dW1DdXJyZW50VGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21pdW1DdXJyZW50VGltZS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1DdXJyZW50VGltZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDE4ICszMiwxOCBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiAjaW5j
bHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2Vi
S2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXVEYgewogCiBkb3VibGUgY3VycmVu
dFRpbWUoKQogewotICAgIHJldHVybiBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5jdXJyZW50VGlt
ZSgpOworICAgIHJldHVybiBXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jdXJyZW50
VGltZSgpOwogfQogCiBkb3VibGUgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkKIHsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+bW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7CisgICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bU9TUmFuZG9tU291cmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bU9TUmFuZG9t
U291cmNlLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWl1bU9TUmFuZG9tU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMy
LDEzIEBACiAjaW5jbHVkZSA8d3RmL09TUmFuZG9tU291cmNlLmg+CiAKICNpbmNsdWRlICJXZWJL
aXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKIAogbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgY3J5cHRvZ3JhcGhpY2FsbHlS
YW5kb21WYWx1ZXNGcm9tT1ModW5zaWduZWQgY2hhciogYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQog
ewotICAgIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFs
dWVzKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5jcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhidWZmZXIsIGxlbmd0aCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtVGhyZWFkaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bVRocmVhZGlu
Zy5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21pdW1UaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSA8d3RmL2Nocm9taXVtL0Nocm9taXVtVGhyZWFkaW5nLmg+CiAKICNpbmNsdWRlICJXZWJL
aXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKIAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTQwLDcgKzQw
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgQ2hyb21pdW1UaHJlYWRpbmc6OmNhbGxPbk1h
aW5UaHJlYWQodm9pZCAoKmZ1bmMpKHZvaWQqKSwgdm9pZCogY29udGV4dCkKIHsKLSAgICBXZWJL
aXQ6OndlYktpdENsaWVudCgpLT5jYWxsT25NYWluVGhyZWFkKGZ1bmMsIGNvbnRleHQpOworICAg
IFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNhbGxPbk1haW5UaHJlYWQoZnVuYywg
Y29udGV4dCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNp
b24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiAjaW5jbHVkZSAiV2Vi
RnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJL
aXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJO
b2RlLmgiCiAjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgpAQCAtMTI5MCw3ICsxMjkw
LDcgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNhblNob3dNSU1FVAogICAgIC8vIG1p
bWVUeXBlIHN0cmluZ3MgYXJlIHN1cHBvc2VkIHRvIGJlIEFTQ0lJLCBidXQgaWYgdGhleSBhcmUg
bm90IGZvciBzb21lCiAgICAgLy8gcmVhc29uLCB0aGVuIGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUg
bWltZSB0eXBlIHdpbGwgZmFpbCBhbGwgb2YgdGhlc2UgImlzCiAgICAgLy8gc3VwcG9ydGVkIiBj
aGVja3MgYW5kIGdvIGRvd24gdGhlIHBhdGggb2YgYW4gdW5oYW5kbGVkIG1pbWUgdHlwZS4KLSAg
ICBpZiAod2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c01JTUVUeXBlKG1p
bWVUeXBlKSA9PSBXZWJNaW1lUmVnaXN0cnk6OklzU3VwcG9ydGVkKQorICAgIGlmICh3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTUlNRVR5cGUobWltZVR5
cGUpID09IFdlYk1pbWVSZWdpc3RyeTo6SXNTdXBwb3J0ZWQpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgLy8gSWYgQ2hyb21lIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgLS1kaXNhYmxlLXBsdWdp
bnMgc3dpdGNoLCBwbHVnaW5EYXRhIGlzIG51bGwuCkBAIC0xMzc4LDcgKzEzNzgsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6c2V0VGl0bGUoY29uCiAKIFN0cmluZyBGcmFtZUxvYWRl
ckNsaWVudEltcGw6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT51c2VyQWdlbnQodXJsKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPnVzZXJBZ2VudCh1cmwpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDcgQEAKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5o
IgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlZpZXdJ
bXBsLmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtOTg2LDcgKzk4Niw3IEBAIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ28KICAgICB3ZWJBdHRyaWJ1dGVzLmNhblJl
Y292ZXJGcm9tQ29udGV4dExvc3MgPSBhdHRycy5jYW5SZWNvdmVyRnJvbUNvbnRleHRMb3NzOwog
ICAgIHdlYkF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gYXR0cnMubm9FeHRlbnNpb25zOwogICAg
IHdlYkF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBhdHRycy5zaGFyZVJlc291cmNlczsKLSAg
ICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9IGFkb3B0
UHRyKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKCkpOwor
ICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0ID0gYWRv
cHRQdHIoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlR3JhcGhpY3NDb250
ZXh0M0QoKSk7CiAgICAgaWYgKCF3ZWJDb250ZXh0KQogICAgICAgICByZXR1cm4gMDsKIApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tl
bmRQcm94eS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiV2ViSURC
RmFjdG9yeS5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5o
IgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlBlcm1p
c3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgpAQCAtNTYsNyArNTYsNyBAQCBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlPiBJCiB9CiAKIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OklEQkZhY3RvcnlCYWNrZW5k
UHJveHkoKQotICAgIDogbV93ZWJJREJGYWN0b3J5KHdlYktpdENsaWVudCgpLT5pZGJGYWN0b3J5
KCkpCisgICAgOiBtX3dlYklEQkZhY3Rvcnkod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmlkYkZh
Y3RvcnkoKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxp
emVkU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
TG9jYWxpemVkU3RyaW5ncy5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxpemVkU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiAjaW5jbHVkZSAiV2ViS2l0
LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1T
dXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViTG9jYWxpemVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2Vi
U3RyaW5nLmgiCiAKQEAgLTQ5LDE3ICs0OSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBTdHJpbmcgcXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpOYW1lIG5hbWUpCiB7Ci0gICAg
cmV0dXJuIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPnF1ZXJ5TG9jYWxpemVkU3RyaW5nKG5hbWUp
OworICAgIHJldHVybiBXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5xdWVyeUxvY2Fs
aXplZFN0cmluZyhuYW1lKTsKIH0KIAogc3RhdGljIFN0cmluZyBxdWVyeShXZWJMb2NhbGl6ZWRT
dHJpbmc6Ok5hbWUgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBwYXJhbWV0ZXIpCiB7Ci0gICAgcmV0
dXJuIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPnF1ZXJ5TG9jYWxpemVkU3RyaW5nKG5hbWUsIHBh
cmFtZXRlcik7CisgICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnF1
ZXJ5TG9jYWxpemVkU3RyaW5nKG5hbWUsIHBhcmFtZXRlcik7CiB9CiAKIHN0YXRpYyBTdHJpbmcg
cXVlcnkoV2ViTG9jYWxpemVkU3RyaW5nOjpOYW1lIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgcGFy
YW1ldGVyMSwgY29uc3QgV2ViU3RyaW5nJiBwYXJhbWV0ZXIyKQogewotICAgIHJldHVybiBXZWJL
aXQ6OndlYktpdENsaWVudCgpLT5xdWVyeUxvY2FsaXplZFN0cmluZyhuYW1lLCBwYXJhbWV0ZXIx
LCBwYXJhbWV0ZXIyKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+cXVlcnlMb2NhbGl6ZWRTdHJpbmcobmFtZSwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMik7CiB9
CiAKIFN0cmluZyBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcAkocmV2aXNpb24gOTQyMTEp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJXZWJJREJLZXkuaCIKICNpbmNs
dWRlICJXZWJJbWFnZS5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENs
aWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldl
Yk1pbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKICNp
bmNsdWRlICJXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaCIKQEAgLTEzNSw3ICsxMzUsNyBAQCBz
dGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgCiAgICAgICAgIHJldHVybiAw
OwogICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29v
a2llSmFyKGZyYW1lSW1wbCk7CiAgICAgaWYgKCFjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUph
ciA9IHdlYktpdENsaWVudCgpLT5jb29raWVKYXIoKTsKKyAgICAgICAgY29va2llSmFyID0gd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPmNvb2tpZUphcigpOwogICAgIHJldHVybiBjb29raWVKYXI7
CiB9CiAKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVK
YXIoY29uc3QgCiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNhY2hlTWV0YWRhdGEoY29uc3QgS1VS
TCYgdXJsLCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7
Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNhY2hlTWV0YWRhdGEodXJsLCByZXNwb25zZVRpbWUsIGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNh
Y2hlTWV0YWRhdGEodXJsLCByZXNwb25zZVRpbWUsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7
CiB9CiAKIC8vIENsaXBib2FyZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Miw3ICsxNTIsNyBAQCBib29sIFBs
YXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2CiAgICAgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEZvcm1hdCBmb3JtYXQsCiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciBidWZmZXIpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+aXNGb3JtYXRBdmFpbGFibGUoCisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5jbGlwYm9hcmQoKS0+aXNGb3JtYXRBdmFpbGFibGUoCiAgICAgICAgIHN0YXRpY19jYXN0PFdl
YkNsaXBib2FyZDo6Rm9ybWF0Pihmb3JtYXQpLAogICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlw
Ym9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7CiB9CkBAIC0xNjAsNyArMTYwLDcgQEAgYm9vbCBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdgogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkUGxhaW5UZXh0KAogICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIgYnVmZmVyKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCkt
PnJlYWRQbGFpblRleHQoCisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlw
Ym9hcmQoKS0+cmVhZFBsYWluVGV4dCgKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJk
OjpCdWZmZXI+KGJ1ZmZlcikpOwogfQogCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBQbGF0Zm9y
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCiAgICAgU3RyaW5nKiBodG1sVGV4dCwgS1VSTCog
c291cmNlVVJMKQogewogICAgIFdlYlVSTCB1cmw7Ci0gICAgKmh0bWxUZXh0ID0gd2ViS2l0Q2xp
ZW50KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKKyAgICAqaHRtbFRleHQgPSB3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRIVE1MKAogICAgICAgICBzdGF0aWNfY2Fz
dDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCk7CiAgICAgKnNvdXJjZVVSTCA9
IHVybDsKIH0KQEAgLTE3NywxMiArMTc3LDEyIEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRIVE1MKAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkSW1hZ2UoCiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZl
ciBidWZmZXIpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVh
ZEltYWdlKHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKKyAgICBy
ZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkSW1hZ2Uoc3Rh
dGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwogfQogCiB1aW50NjRfdCBQ
bGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkR2V0U2VxdWVuY2VOdW1iZXIoKQogewotICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPmdldFNlcXVlbmNlTnVtYmVyKCk7CisgICAg
cmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+Z2V0U2VxdWVuY2VO
dW1iZXIoKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rp
b24oY29uc3QgU3RyaW5nJiBodG1sVGV4dCwKQEAgLTE5MCwxOCArMTkwLDE4IEBAIHZvaWQgUGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlU2VsZWMKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVNtYXJ0UGFzdGUp
CiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUhUTUwoCisgICAgd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53cml0ZUhUTUwoCiAgICAgICAgIGh0
bWxUZXh0LCBzb3VyY2VVUkwsIHBsYWluVGV4dCwgd3JpdGVTbWFydFBhc3RlKTsKIH0KIAogdm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiBw
bGFpblRleHQpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZVBsYWlu
VGV4dChwbGFpblRleHQpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQo
KS0+d3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQog
ewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVVUkwodXJsLCB0aXRsZSk7
CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53cml0ZVVSTCh1cmws
IHRpdGxlKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShO
YXRpdmVJbWFnZVB0ciBpbWFnZSwKQEAgLTIxMywyMCArMjEzLDIwIEBAIHZvaWQgUGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UKICNlbHNlCiAgICAgV2ViSW1hZ2Ugd2ViSW1hZ2Uo
aW1hZ2UpOwogI2VuZGlmCi0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUlt
YWdlKHdlYkltYWdlLCBzb3VyY2VVUkwsIHRpdGxlKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlSW1hZ2Uod2ViSW1hZ2UsIHNvdXJjZVVSTCwgdGl0bGUp
OwogfQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIG1ldGFkYXRhKQogewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+d3JpdGVEYXRhKHR5cGUsIGRhdGEsIG1ldGFkYXRhKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlRGF0YSh0eXBlLCBkYXRhLCBtZXRhZGF0YSk7CiB9
CiAKIEhhc2hTZXQ8U3RyaW5nPiBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJs
ZVR5cGVzKAogICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCBi
b29sKiBjb250YWluc0ZpbGVuYW1lcykKIHsKLSAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1
bHQgPSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRBdmFpbGFibGVUeXBlcygKKyAg
ICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
Y2xpcGJvYXJkKCktPnJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgc3RhdGljX2Nhc3Q8V2Vi
Q2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIGNvbnRhaW5zRmlsZW5hbWVzKTsKICAgICBIYXNo
U2V0PFN0cmluZz4gdHlwZXM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6
ZSgpOyArK2kpCkBAIC0yMzksNyArMjM5LDcgQEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJv
YXJkUmVhZERhdGEoUAogewogICAgIFdlYlN0cmluZyByZXN1bHREYXRhOwogICAgIFdlYlN0cmlu
ZyByZXN1bHRNZXRhZGF0YTsKLSAgICBib29sIHN1Y2NlZWRlZCA9IHdlYktpdENsaWVudCgpLT5j
bGlwYm9hcmQoKS0+cmVhZERhdGEoCisgICAgYm9vbCBzdWNjZWVkZWQgPSB3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWREYXRhKAogICAgICAgICBzdGF0aWNfY2FzdDxX
ZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgdHlwZSwgJnJlc3VsdERhdGEsICZyZXN1bHRN
ZXRhZGF0YSk7CiAgICAgaWYgKHN1Y2NlZWRlZCkgewogICAgICAgICBkYXRhID0gcmVzdWx0RGF0
YTsKQEAgLTI1MCw3ICsyNTAsNyBAQCBib29sIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFk
RGF0YShQCiAKIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmls
ZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQogewotICAg
IFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+cmVhZEZpbGVuYW1lcygKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRGaWxlbmFtZXMoCiAgICAgICAg
IHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBjb252ZXJ0ZWRSZXN1bHQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1
bHQuc2l6ZSgpOyArK2kpCkBAIC0zMzEsNDAgKzMzMSw0MCBAQCBib29sIFBsYXRmb3JtQnJpZGdl
Ojpjb29raWVzRW5hYmxlZChjb25zCiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnByZWZldGNoRE5T
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnByZWZldGNo
SG9zdE5hbWUoaG9zdG5hbWUpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5wcmVmZXRj
aEhvc3ROYW1lKGhvc3RuYW1lKTsKIH0KIAogLy8gRmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogYm9v
bCBQbGF0Zm9ybUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7
CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPmZp
bGVFeGlzdHMocGF0aCk7CiB9CiAKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5kZWxldGVGaWxlKHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVGaWxlKHBhdGgpOwogfQogCiBib29sIFBsYXRm
b3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0g
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRlbGV0ZUVtcHR5RGly
ZWN0b3J5KHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5kZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKIH0KIAogYm9vbCBQbGF0Zm9y
bUJyaWRnZTo6Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3Vs
dCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0Rmls
ZVNpemUocGF0aCwgcmVzdWx0KTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkt
PmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0g
ICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmV2ZWFsRm9sZGVySW5PUyhwYXRo
KTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5yZXZlYWxG
b2xkZXJJbk9TKHBhdGgpOwogfQogCiBib29sIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlTW9kaWZp
Y2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewogICAgIGRv
dWJsZSBtb2RpZmljYXRpb25UaW1lOwotICAgIGlmICghd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkp
CisgICAgaWYgKCF3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5nZXRG
aWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCBtb2RpZmljYXRpb25UaW1lKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PHRpbWVfdD4obW9kaWZpY2F0aW9u
VGltZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzIsNjIgKzM3Miw2MiBAQCBib29sIFBsYXRm
b3JtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uCiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6
ZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRpcmVjdG9yeU5hbWUocGF0aCk7CisgICAgcmV0dXJu
IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPmRpcmVjdG9yeU5hbWUo
cGF0aCk7CiB9CiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7Ci0gICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXRoLCBjb21wb25lbnQpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+ZmlsZVV0aWxpdGllcygpLT5wYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29t
cG9uZW50KTsKIH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5tYWtlQWxsRGlyZWN0b3JpZXMocGF0aCk7
CiB9CiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+
Z2V0QWJzb2x1dGVQYXRoKHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+ZmlsZVV0aWxpdGllcygpLT5nZXRBYnNvbHV0ZVBhdGgocGF0aCk7CiB9CiAKIGJvb2wgUGxh
dGZvcm1CcmlkZ2U6OmlzRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+aXNEaXJlY3RvcnkocGF0aCk7Cisg
ICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPmlzRGly
ZWN0b3J5KHBhdGgpOwogfQogCiBLVVJMIFBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+ZmlsZVBhdGhUb1VSTChwYXRoKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+ZmlsZVBhdGhUb1VSTChwYXRoKTsKIH0KIAogUGxh
dGZvcm1GaWxlSGFuZGxlIFBsYXRmb3JtQnJpZGdlOjpvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Zmls
ZVV0aWxpdGllcygpLT5vcGVuRmlsZShwYXRoLCBtb2RlKTsKKyAgICByZXR1cm4gd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+b3BlbkZpbGUocGF0aCwgbW9kZSk7CiB9
CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhh
bmRsZSkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5jbG9zZUZpbGUo
aGFuZGxlKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5j
bG9zZUZpbGUoaGFuZGxlKTsKIH0KIAogbG9uZyBsb25nIFBsYXRmb3JtQnJpZGdlOjpzZWVrRmls
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09y
aWdpbiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOworICAgIHJldHVybiB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5zZWVrRmlsZShoYW5kbGUsIG9mZnNl
dCwgb3JpZ2luKTsKIH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpCiB7Ci0gICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnRydW5jYXRlRmlsZShoYW5kbGUsIG9mZnNl
dCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCkt
PnRydW5jYXRlRmlsZShoYW5kbGUsIG9mZnNldCk7CiB9CiAKIGludCBQbGF0Zm9ybUJyaWRnZTo6
cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnJl
YWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEs
IGxlbmd0aCk7CiB9CiAKIGludCBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBy
ZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+d3JpdGVUb0ZpbGUoaGFuZGxl
LCBkYXRhLCBsZW5ndGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Zmls
ZVV0aWxpdGllcygpLT53cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAKIC8v
IEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQzNSw3ICs0MzUsNyBAQCBpbnQgUGxhdGZvcm1Ccmlk
Z2U6OndyaXRlVG9GaWxlKFBsYXRmb3JtCiAjaWYgT1MoV0lORE9XUykKIGJvb2wgUGxhdGZvcm1C
cmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCkKIHsKLSAgICBXZWJTYW5kYm94U3Vw
cG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKKyAgICBXZWJTYW5k
Ym94U3VwcG9ydCogc3MgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQo
KTsKIAogICAgIC8vIGlmIHRoZXJlIGlzIG5vIHNhbmRib3gsIHRoZW4gd2UgY2FuIGFzc3VtZSB0
aGUgZm9udAogICAgIC8vIHdhcyBhYmxlIHRvIGJlIGxvYWRlZCBzdWNjZXNzZnVsbHkgYWxyZWFk
eQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2Fk
ZWQoSEYKICNpZiBPUyhEQVJXSU4pCiBib29sIFBsYXRmb3JtQnJpZGdlOjpsb2FkRm9udChOU0Zv
bnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYqIGNvbnRhaW5lciwgdWludDMyX3QqIGZv
bnRJRCkKIHsKLSAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2Fu
ZGJveFN1cHBvcnQoKTsKKyAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKICAgICBpZiAoc3MpCiAgICAgICAgIHJldHVy
biBzcy0+bG9hZEZvbnQoc3JjRm9udCwgY29udGFpbmVyLCBmb250SUQpOwogCkBAIC00NjEsOCAr
NDYxLDggQEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bG9hZEZvbnQoTlNGb250KiBzcgogI2VsaWYg
T1MoVU5JWCkKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzLCBjb25zdCBj
aGFyKiBwcmVmZXJyZWRMb2NhbGUpCiB7Ci0gICAgaWYgKHdlYktpdENsaWVudCgpLT5zYW5kYm94
U3VwcG9ydCgpKQotICAgICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0
KCktPmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIG51bUNoYXJhY3RlcnMs
IHByZWZlcnJlZExvY2FsZSk7CisgICAgaWYgKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zYW5k
Ym94U3VwcG9ydCgpKQorICAgICAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNh
bmRib3hTdXBwb3J0KCktPmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIG51
bUNoYXJhY3RlcnMsIHByZWZlcnJlZExvY2FsZSk7CiAKICAgICBXZWJDU3RyaW5nIGZhbWlseSA9
IFdlYkZvbnRJbmZvOjpmYW1pbHlGb3JDaGFycyhjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzLCBw
cmVmZXJyZWRMb2NhbGUpOwogICAgIGlmIChmYW1pbHkuZGF0YSgpKQpAQCAtNDc1LDggKzQ3NSw4
IEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3QKIHsKICAgICBXZWJG
b250UmVuZGVyU3R5bGUgc3R5bGU7CiAKLSAgICBpZiAod2ViS2l0Q2xpZW50KCktPnNhbmRib3hT
dXBwb3J0KCkpCi0gICAgICAgIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRS
ZW5kZXJTdHlsZUZvclN0cmlrZShmb250LCBzaXplQW5kU3R5bGUsICZzdHlsZSk7CisgICAgaWYg
KHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zYW5kYm94U3VwcG9ydCgpKQorICAgICAgICB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQoKS0+Z2V0UmVuZGVyU3R5bGVGb3JT
dHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOwogICAgIGVsc2UKICAgICAgICAgV2Vi
Rm9udEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKGZvbnQsIHNpemVBbmRTdHlsZSwgJnN0eWxl
KTsKIApAQCAtNDg4LDI3ICs0ODgsMjcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Z2V0UmVuZGVy
U3R5bGVGb3JTdAogCiBQbGF0Zm9ybUZpbGVIYW5kbGUgUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNl
T3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgaW50IGRlc2lyZWRGbGFncykKIHsK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlT3BlbkZpbGUoV2ViU3RyaW5nKHZm
c0ZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPmRhdGFiYXNlT3BlbkZpbGUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgZGVzaXJlZEZs
YWdzKTsKIH0KIAogaW50IFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3Qg
U3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKQogewotICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIHN5bmNE
aXIpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGF0YWJhc2VEZWxldGVG
aWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIHN5bmNEaXIpOwogfQogCiBsb25nIFBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVBdHRyaWJ1
dGVzKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhXZWJTdHJpbmcodmZzRmlsZU5hbWUp
KTsKIH0KIAogbG9uZyBsb25nIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXplKGNv
bnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5k
YXRhYmFzZUdldEZpbGVTaXplKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkpOworICAgIHJldHVybiB3
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGF0YWJhc2VHZXRGaWxlU2l6ZShXZWJTdHJpbmcodmZz
RmlsZU5hbWUpKTsKIH0KIAogbG9uZyBsb25nIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdldFNw
YWNlQXZhaWxhYmxlRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikKIHsK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlR2V0U3BhY2VBdmFpbGFibGVGb3JP
cmlnaW4ob3JpZ2luSWRlbnRpZmllcik7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9y
dCgpLT5kYXRhYmFzZUdldFNwYWNlQXZhaWxhYmxlRm9yT3JpZ2luKG9yaWdpbklkZW50aWZpZXIp
OwogfQogCiAvLyBJbmRleGVkIERhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBQ
bGF0Zm9ybUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZQogewogICAgIFdlYlZlY3RvcjxXZWJT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHdlYlZhbHVlcyA9IHZhbHVlczsKICAgICBXZWJWZWN0b3I8
V2ViSURCS2V5PiB3ZWJLZXlzOwotICAgIHdlYktpdENsaWVudCgpLT5jcmVhdGVJREJLZXlzRnJv
bVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHdlYlZhbHVlcywga2V5UGF0aCwgd2ViS2V5cyk7
CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXpl
ZFZhbHVlc0FuZEtleVBhdGgod2ViVmFsdWVzLCBrZXlQYXRoLCB3ZWJLZXlzKTsKIAogICAgIHNp
emVfdCB3ZWJLZXlzU2l6ZSA9IHdlYktleXMuc2l6ZSgpOwogICAgIGtleXMucmVzZXJ2ZUNhcGFj
aXR5KHdlYktleXNTaXplKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdl
OjpjcmVhdGVJREJLZXlzRnJvbVNlCiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBQbGF0Zm9ybUJyaWRnZTo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAg
cmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5pbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOwogfQogCiAvLyBLZXlnZW4gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC01NDIsNyArNTQyLDcgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFBs
YXRmbwogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcoCiAgICAgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5n
ZSwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNpemVJbmRleCwKKyAgICByZXR1cm4gd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhr
ZXlTaXplSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nKGNoYWxsZW5nZSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVVJMKHVybCkp
OwogfQpAQCAtNTUxLDcgKzU1MSw3IEBAIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6c2lnbmVkUHVi
bGljS2V5QW4KIAogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFn
ZSgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9jYWxlKCk7CisgICAg
cmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5kZWZhdWx0TG9jYWxlKCk7CiB9CiAKIC8v
IExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU2NSw0MCArNTY1LDQwIEBAIGJvb2wgUGxhdGZvcm1C
cmlkZ2U6OmxheW91dFRlc3RNb2RlKCkKIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNJbWFnZU1JTUVUeXBlKG1pbWVU
eXBlKQorICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCkt
PnN1cHBvcnRzSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKICAgICAgICAgIT0gV2ViTWltZVJlZ2lz
dHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0
ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c0phdmFTY3JpcHRNSU1F
VHlwZShtaW1lVHlwZSkKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1pbWVS
ZWdpc3RyeSgpLT5zdXBwb3J0c0phdmFTY3JpcHRNSU1FVHlwZShtaW1lVHlwZSkKICAgICAgICAg
IT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAogYm9vbCBQbGF0Zm9ybUJy
aWRnZTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
CiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNO
b25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKQorICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkK
ICAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAogU3RyaW5n
IFBsYXRmb3JtQnJpZGdlOjptaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbikKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5taW1l
VHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7
CiB9CiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6d2VsbEtub3duTWltZVR5cGVGb3JFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5taW1lUmVnaXN0cnkoKS0+d2VsbEtub3duTWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9u
KTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1pbWVSZWdpc3RyeSgpLT53
ZWxsS25vd25NaW1lVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOwogfQogCiBTdHJpbmcgUGxh
dGZvcm1CcmlkZ2U6Om1pbWVUeXBlRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBlRnJvbUZpbGUo
cGF0aCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5taW1lUmVnaXN0cnko
KS0+bWltZVR5cGVGcm9tRmlsZShwYXRoKTsKIH0KIAogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpw
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewot
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnByZWZlcnJlZEV4dGVu
c2lvbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPm1pbWVSZWdpc3RyeSgpLT5wcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1l
VHlwZSk7CiB9CiAKIC8vIFBsdWdpbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYwNiw3ICs2MDYsNyBAQCBT
dHJpbmcgUGxhdGZvcm1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lvCiBib29sIFBsYXRmb3JtQnJp
ZGdlOjpwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbkluZm8+KiByZXN1bHRzKQog
ewogICAgIFdlYlBsdWdpbkxpc3RCdWlsZGVySW1wbCBidWlsZGVyKHJlc3VsdHMpOwotICAgIHdl
YktpdENsaWVudCgpLT5nZXRQbHVnaW5MaXN0KHJlZnJlc2gsICZidWlsZGVyKTsKKyAgICB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+Z2V0UGx1Z2luTGlzdChyZWZyZXNoLCAmYnVpbGRlcik7CiAg
ICAgcmV0dXJuIHRydWU7ICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhpcyBmdW5j
dGlvbiB0byByZXR1cm4gYSB2YWx1ZS4KIH0KIApAQCAtNjIyLDcgKzYyMiw3IEBAIE5QT2JqZWN0
KiBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2luU2NyaXB0YWIKIAogUGFzc1JlZlB0cjxJbWFnZT4gUGxh
dGZvcm1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkK
IHsKLSAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVz
b3VyY2UobmFtZSk7CisgICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+bG9hZFJlc291cmNlKG5hbWUpOwogICAgIGlmIChyZXNvdXJjZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CiAKQEAgLTYzNSw3ICs2MzUs
NyBAQCBQYXNzUmVmUHRyPEltYWdlPiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsCiAKIFBhc3NPd25Q
dHI8QXVkaW9CdXM+IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKGNv
bnN0IGNoYXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQogewotICAgIGNvbnN0IFdlYkRhdGEm
IHJlc291cmNlID0gd2ViS2l0Q2xpZW50KCktPmxvYWRSZXNvdXJjZShuYW1lKTsKKyAgICBjb25z
dCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5sb2FkUmVzb3Vy
Y2UobmFtZSk7CiAgICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgCkBAIC02NDUsNyArNjQ1LDcgQEAgUGFzc093blB0cjxBdWRpb0J1cz4gUGxh
dGZvcm1CcmlkZ2U6OmxvYQogUGFzc093blB0cjxBdWRpb0J1cz4gUGxhdGZvcm1CcmlkZ2U6OmRl
Y29kZUF1ZGlvRmlsZURhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUsIGRvdWJsZSBz
YW1wbGVSYXRlKQogewogICAgIFdlYkF1ZGlvQnVzIHdlYkF1ZGlvQnVzOwotICAgIGlmICh3ZWJL
aXRDbGllbnQoKS0+bG9hZEF1ZGlvUmVzb3VyY2UoJndlYkF1ZGlvQnVzLCBkYXRhLCBzaXplLCBz
YW1wbGVSYXRlKSkKKyAgICBpZiAod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmxvYWRBdWRpb1Jl
c291cmNlKCZ3ZWJBdWRpb0J1cywgZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpCiAgICAgICAgIHJl
dHVybiB3ZWJBdWRpb0J1cy5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC02
NTYsNTMgKzY1Niw1MyBAQCBQYXNzT3duUHRyPEF1ZGlvQnVzPiBQbGF0Zm9ybUJyaWRnZTo6ZGVj
CiAKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OnNhbmRib3hFbmFibGVkKCkKIHsKLSAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPnNhbmRib3hFbmFibGVkKCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5zYW5kYm94RW5hYmxlZCgpOwogfQogCiAvLyBTaGFyZWRUaW1lcnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2
b2lkICgqZnVuYykoKSkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJGaXJl
ZEZ1bmN0aW9uKGZ1bmMpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zZXRTaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24oZnVuYyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnNldFNo
YXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKIHsKLSAgICB3ZWJLaXRDbGll
bnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgIHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5zZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChpbnRlcnZhbCk7CiB9
CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcigpCiB7Ci0gICAgd2ViS2l0
Q2xpZW50KCktPnN0b3BTaGFyZWRUaW1lcigpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5zdG9wU2hhcmVkVGltZXIoKTsKIH0KIAogLy8gU3RhdHNDb3VudGVycyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lk
IFBsYXRmb3JtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSkK
IHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+ZGVjcmVtZW50U3RhdHNDb3VudGVyKG5hbWUpOworICAg
IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5kZWNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7CiB9
CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFy
KiBuYW1lKQogewotICAgIHdlYktpdENsaWVudCgpLT5pbmNyZW1lbnRTdGF0c0NvdW50ZXIobmFt
ZSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmluY3JlbWVudFN0YXRzQ291bnRlcihu
YW1lKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNv
bnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRD
b3VudCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKG5hbWUs
IHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldENvdW50KTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tl
dENvdW50KTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24o
Y29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpCiB7Ci0gICAg
d2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRh
cnlWYWx1ZSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmhpc3RvZ3JhbUVudW1lcmF0
aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1ZSk7CiB9CiAKIC8vIFN1ZGRlbiBUZXJtaW5h
dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+c3VkZGVuVGVybWluYXRpb25DaGFu
Z2VkKGVuYWJsZWQpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zdWRkZW5UZXJtaW5h
dGlvbkNoYW5nZWQoZW5hYmxlZCk7CiB9CiAKIC8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcx
Myw3ICs3MTMsNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludEJ1dHRvbigKICAgICBHcmFw
aGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAog
ICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5n
aW5lKCktPnBhaW50QnV0dG9uKAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVu
Z2luZSgpLT5wYWludEJ1dHRvbigKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7CiB9CiAKQEAgLTcyMSw3ICs3
MjEsNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludE1lbnVMaXN0KAogICAgIEdyYXBoaWNz
Q29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUo
KS0+cGFpbnRNZW51TGlzdCgKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dGhlbWVFbmdp
bmUoKS0+cGFpbnRNZW51TGlzdCgKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7CiB9CiAKQEAgLTcyOSw3ICs3
MjksNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93CiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBnYywgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAogICAgIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBh
aW50U2Nyb2xsYmFyQXJyb3coCisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5n
aW5lKCktPnBhaW50U2Nyb2xsYmFyQXJyb3coCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCksIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQogCkBAIC03MzcsNyAr
NzM3LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYgogICAgIEdy
YXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUs
CiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVF
bmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVtYigKICAgICAgICAgZ2MtPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7
CiB9CiAKQEAgLTc0NSw3ICs3NDUsNyBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9s
bGJhclRyYWNrCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwg
aW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0
JiBhbGlnblJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50
U2Nyb2xsYmFyVHJhY2soCisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5l
KCktPnBhaW50U2Nyb2xsYmFyVHJhY2soCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QsCiAgICAgICAgIGFsaWdu
UmVjdCk7CiB9CkBAIC03NTQsNyArNzU0LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRT
cGluQnV0dG9uKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUs
IGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICB3ZWJL
aXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTcGluQnV0dG9uKAorICAgIHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNwaW5CdXR0b24oCiAgICAgICAg
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3Rh
dGUsIHJlY3QpOwogfQogCkBAIC03NjYsNyArNzY2LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6
cGFpbnRUZXh0RmllbGQoCiAgICAgLy8gRmFsbGJhY2sgdG8gd2hpdGUgd2hlbiB8Y29sb3J8IGlz
IGludmFsaWQuCiAgICAgUkdCQTMyIGJhY2tncm91bmRDb2xvciA9IGNvbG9yLmlzVmFsaWQoKSA/
IGNvbG9yLnJnYigpIDogQ29sb3I6OndoaXRlOwogCi0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1l
RW5naW5lKCktPnBhaW50VGV4dEZpZWxkKAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50
aGVtZUVuZ2luZSgpLT5wYWludFRleHRGaWVsZCgKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCwKICAgICAgICAg
YmFja2dyb3VuZENvbG9yLCBmaWxsQ29udGVudEFyZWEsIGRyYXdFZGdlcyk7CiB9CkBAIC03NzUs
MTQgKzc3NSwxNCBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFRyYWNrYmFyKAogICAgIEdy
YXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUs
CiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVF
bmdpbmUoKS0+cGFpbnRUcmFja2JhcigKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dGhl
bWVFbmdpbmUoKS0+cGFpbnRUcmFja2JhcigKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7CiB9CiAKIHZvaWQg
UGxhdGZvcm1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBn
YywgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50UmVjdCYgdmFsdWVSZWN0LCBib29s
IGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRzKQogewotICAgIHdlYktpdENsaWVu
dCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dyZXNzQmFyKAorICAgIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dyZXNzQmFyKAogICAgICAgICBnYy0+
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBiYXJSZWN0LCB2YWx1ZVJlY3QsIGRldGVybWlu
YXRlLCBhbmltYXRlZFNlY29uZHMpOwogfQogCkBAIC04MDUsNyArODA1LDcgQEAgdm9pZCBQbGF0
Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYgogI2Vsc2UKICAgICBXZWJLaXQ6OldlYkNh
bnZhcyogd2ViQ2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlmCi0gICAgd2Vi
S2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVGh1bWIo
CiAgICAgICAgIHdlYkNhbnZhcywKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6
OlN0YXRlPihzdGF0ZSksCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTaXpl
PihzaXplKSwKQEAgLTkwOSw3ICs5MDksNyBAQCBzdGF0aWMgdm9pZCBHZXRXZWJUaGVtZUV4dHJh
UGFyYW1zKFBsYXRmCiAKIEludFNpemUgUGxhdGZvcm1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUo
VGhlbWVQYXJ0IHBhcnQpCiB7Ci0gICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdp
bmUoKS0+Z2V0U2l6ZShXZWJUaGVtZVBhcnQocGFydCkpOworICAgICByZXR1cm4gd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2ViVGhlbWVQYXJ0KHBhcnQp
KTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCkBAIC05MTcsNyAr
OTE3LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCiB7CiAgICAgV2Vi
VGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zIHdlYlRoZW1lRXh0cmFQYXJhbXM7CiAgICAgR2V0V2Vi
VGhlbWVFeHRyYVBhcmFtcyhwYXJ0LCBzdGF0ZSwgZXh0cmFQYXJhbXMsICZ3ZWJUaGVtZUV4dHJh
UGFyYW1zKTsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnQoCisgICAg
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50KAogICAgICAgICBn
Yy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBXZWJUaGVtZVBhcnQocGFydCksIFdlYlRo
ZW1lU3RhdGUoc3RhdGUpLCByZWN0LCAmd2ViVGhlbWVFeHRyYVBhcmFtcyk7CiB9CiAKQEAgLTky
NywxMiArOTI3LDEyIEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAogCiB2
b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9p
ZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQogewotICAgIHdlYktpdENsaWVudCgpLT50cmFjZUV2
ZW50QmVnaW4obmFtZSwgaWQsIGV4dHJhKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlkLCBleHRyYSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Ccmlk
Z2U6OnRyYWNlRXZlbnRFbmQoY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIq
IGV4dHJhKQogewotICAgIHdlYktpdENsaWVudCgpLT50cmFjZUV2ZW50RW5kKG5hbWUsIGlkLCBl
eHRyYSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRyYWNlRXZlbnRFbmQobmFtZSwg
aWQsIGV4dHJhKTsKIH0KIAogLy8gVmlzaXRlZCBMaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTQzLDcgKzk0Myw3
IEBAIExpbmtIYXNoIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2gKICAgICB1cmxfcGFy
c2U6OlBhcnNlZCBwYXJzZWQ7CiAgICAgaWYgKCF1cmxfdXRpbDo6Q2Fub25pY2FsaXplKHVybCwg
bGVuZ3RoLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAgICAgICAgcmV0dXJuIDA7ICAvLyBJbnZh
bGlkIFVSTHMgYXJlIHVudmlzaXRlZC4KLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0
ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOworICAgIHJldHVybiB3
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1
ZmZlci5sZW5ndGgoKSk7CiB9CiAKIExpbmtIYXNoIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlu
a0hhc2goY29uc3QgS1VSTCYgYmFzZSwKQEAgLTk3NywxMiArOTc3LDEyIEBAIExpbmtIYXNoIFBs
YXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2gKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkKICAg
ICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIHJlc29sdmVkIFVSTC4KIAotICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5n
dGgoKSk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT52aXNpdGVkTGlua0hh
c2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybUJy
aWRnZTo6aXNMaW5rVmlzaXRlZChMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2gpCiB7Ci0gICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5pc0xpbmtWaXNpdGVkKHZpc2l0ZWRMaW5rSGFzaCk7CisgICAg
cmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5pc0xpbmtWaXNpdGVkKHZpc2l0ZWRMaW5r
SGFzaCk7CiB9CiAKIC8vIFRoZXNlIGFyZSB0ZW1wb3JhcnkgbWV0aG9kcyB0aGF0IHRoZSBXZWJL
aXQgbGF5ZXIgY2FuIHVzZSB0byBjYWxsIHRvIHRoZQpAQCAtMTAwMiwxMiArMTAwMiwxMiBAQCB2
b2lkIFBsYXRmb3JtQnJpZGdlOjpub3RpZnlKU091dE9mTWVtb3J5CiAKIGludCBQbGF0Zm9ybUJy
aWRnZTo6bWVtb3J5VXNhZ2VNQigpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2Vi
S2l0Q2xpZW50KCktPm1lbW9yeVVzYWdlTUIoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4od2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1lbW9yeVVzYWdlTUIoKSk7CiB9CiAKIGludCBQ
bGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpCiB7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4od2ViS2l0Q2xpZW50KCktPmFjdHVhbE1lbW9yeVVzYWdlTUIoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4od2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmFjdHVhbE1l
bW9yeVVzYWdlTUIoKSk7CiB9CiAKIGludCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lk
Z2V0KiB3aWRnZXQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2Vi
TWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKQEAgLTEyMiw3
ICsxMjIsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBQCiBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwoKQogICAg
IDogbV9sb2NhbFBvcnQoMCkKIHsKLSAgICBtX3dlYkNoYW5uZWwgPSB3ZWJLaXRDbGllbnQoKS0+
Y3JlYXRlTWVzc2FnZVBvcnRDaGFubmVsKCk7CisgICAgbV93ZWJDaGFubmVsID0gd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPmNyZWF0ZU1lc3NhZ2VQb3J0Q2hhbm5lbCgpOwogICAgIGlmIChtX3dl
YkNoYW5uZWwpCiAgICAgICAgIG1fd2ViQ2hhbm5lbC0+c2V0Q2xpZW50KHRoaXMpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2
aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKIAogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5o
IgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlVSTEVy
cm9yLmgiCiAjaW5jbHVkZSAiV2ViVVJMTG9hZGVyLmgiCiAjaW5jbHVkZSAiV2ViVVJMTG9hZGVy
Q2xpZW50LmgiCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
c3RhcnQoKQogICAgICAgICBDUkFTSCgpOwogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVT
dGFydGVkOwogCi0gICAgbV9sb2FkZXIgPSBhZG9wdFB0cih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRl
VVJMTG9hZGVyKCkpOworICAgIG1fbG9hZGVyID0gYWRvcHRQdHIod2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKICAgICBBU1NFUlQobV9sb2FkZXIuZ2V0KCkpOwog
CiAgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCB3cmFwcGVkUmVxdWVzdChtX3JlcXVlc3QpOwpA
QCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNo
cm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAgICBPd25QdHI8V2ViVVJMTG9h
ZGVyPiBsb2FkZXIgPSBhZG9wdFB0cih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkp
OworICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IGxvYWRlciA9IGFkb3B0UHRyKHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5jcmVhdGVVUkxMb2FkZXIoKSk7CiAgICAgQVNTRVJUKGxvYWRlci5nZXQo
KSk7CiAKICAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RJbihyZXF1ZXN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NoYXJlZFdvcmtlclJl
cG9zaXRvcnkuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUlt
cGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNp
bmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJNZXNzYWdlUG9y
dENoYW5uZWwuaCIKICNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXIuaCIKICNpbmNsdWRlICJXZWJT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCkBAIC0xODYsOCArMTg2LDggQEAgdm9pZCBTaGFyZWRX
b3JrZXJTY3JpcHRMb2FkZXI6OmNvbm5lY3RlZAogCiBib29sIFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6OmlzQXZhaWxhYmxlKCkKIHsKLSAgICAvLyBBbGxvdyB0aGUgV2ViS2l0Q2xpZW50IHRvIGRl
dGVybWluZSBpZiBTaGFyZWRXb3JrZXJzIGFyZSBhdmFpbGFibGUuCi0gICAgcmV0dXJuIFdlYktp
dDo6d2ViS2l0Q2xpZW50KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKTsKKyAgICAvLyBBbGxv
dyB0aGUgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IHRvIGRldGVybWluZSBpZiBTaGFyZWRXb3JrZXJz
IGFyZSBhdmFpbGFibGUuCisgICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKTsKIH0KIAogc3RhdGljIFdlYlNoYXJlZFdvcmtl
clJlcG9zaXRvcnk6OkRvY3VtZW50SUQgZ2V0SWQodm9pZCogZG9jdW1lbnQpCkBAIC0yMDAsNyAr
MjAwLDcgQEAgdm9pZCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpjb25uZWN0KFBhcwogewogICAg
IC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsYWJsZSB1bmxlc3MgdGhlcmUncyBhIFNoYXJlZFdv
cmtlclJlcG9zaXRvcnkgZm9yCiAgICAgLy8gdGhpcyBjb250ZXh0IChzaW5jZSBpc0F2YWlsYWJs
ZSgpIHNob3VsZCBoYXZlIHJldHVybmVkIG51bGwpLgotICAgIEFTU0VSVChXZWJLaXQ6OndlYktp
dENsaWVudCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCkpOworICAgIEFTU0VSVChXZWJLaXQ6
OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCkpOwogCiAg
ICAgLy8gTm8gbmVzdGVkIHdvcmtlcnMgKGZvciBub3cpIC0gY29ubmVjdCgpIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBmcm9tIGRvY3VtZW50IGNvbnRleHQuCiAgICAgQVNTRVJUKHdvcmtlci0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOwpAQCAtMjE1LDcgKzIxNSw3IEBA
IHZvaWQgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Y29ubmVjdChQYXMKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPnNoYXJlZFdvcmtlclJlcG9z
aXRvcnkoKS0+YWRkU2hhcmVkV29ya2VyKAorICAgIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKS0+YWRkU2hhcmVkV29ya2VyKAogICAgICAg
ICB3ZWJXb3JrZXIuZ2V0KCksIGdldElkKGRvY3VtZW50KSk7CiAKICAgICAvLyBUaGUgbG9hZGVy
IG9iamVjdCBtYW5hZ2VzIGl0cyBvd24gbGlmZWN5Y2xlIChhbmQgdGhlIGxpZmVjeWNsZXMgb2Yg
dGhlIHR3byB3b3JrZXIgb2JqZWN0cykuCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5Ojpjb25uZWN0KFBhcwogCiB2b2lkIFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIFdlYlNoYXJl
ZFdvcmtlclJlcG9zaXRvcnkqIHJlcG8gPSBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5zaGFyZWRX
b3JrZXJSZXBvc2l0b3J5KCk7CisgICAgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeSogcmVwbyA9
IFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnko
KTsKICAgICBpZiAocmVwbykKICAgICAgICAgcmVwby0+ZG9jdW1lbnREZXRhY2hlZChnZXRJZChk
b2N1bWVudCkpOwogCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBTaGFyZWRXb3JrZXJSZXBvc2l0
b3J5Ojpkb2N1bWVudERldAogCiBib29sIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJl
ZFdvcmtlcnMoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIFdlYlNoYXJlZFdvcmtlclJlcG9z
aXRvcnkqIHJlcG8gPSBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0
b3J5KCk7CisgICAgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeSogcmVwbyA9IFdlYktpdDo6d2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPnNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKTsKICAgICByZXR1
cm4gcmVwbyAmJiByZXBvLT5oYXNTaGFyZWRXb3JrZXJzKGdldElkKGRvY3VtZW50KSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU29ja2V0U3RyZWFtSGFu
ZGxlLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
b2NrZXRTdHJlYW1IYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAj
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRGF0YS5o
IgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1
ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlNvY2tldFN0cmVhbUhh
bmRsZS5oIgogI2luY2x1ZGUgIldlYlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgogI2luY2x1
ZGUgIldlYlVSTC5oIgpAQCAtODksNyArODksNyBAQCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5h
bDo6flNvY2tldFN0cmVhCiAKIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmNvbm5l
Y3QoY29uc3QgS1VSTCYgdXJsKQogewotICAgIG1fc29ja2V0ID0gYWRvcHRQdHIod2ViS2l0Q2xp
ZW50KCktPmNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSgpKTsKKyAgICBtX3NvY2tldCA9IGFkb3B0
UHRyKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUoKSk7
CiAgICAgTE9HKE5ldHdvcmssICJjb25uZWN0Iik7CiAgICAgQVNTRVJUKG1fc29ja2V0LmdldCgp
KTsKICAgICBtX3NvY2tldC0+Y29ubmVjdCh1cmwsIHRoaXMpOwpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlRXZlbnREaXNwYXRjaGVy
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSAiV2Vi
S2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZv
cm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgi
CiAKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aChjbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBGcmFtZSogc291cmNlRnJhbWUpCiB7CiAgICAgQVNTRVJUKCFzb3VyY2VGcmFt
ZSk7ICAvLyBTYWQsIGJ1dCB0cnVlLgotICAgIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmRpc3Bh
dGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBvcmlnaW4tPnRvU3RyaW5n
KCksIFdlYktpdDo6V2ViVVJMKCksIHN0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSk7CisgICAg
V2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG9yaWdpbi0+dG9TdHJpbmcoKSwgV2ViS2l0OjpXZWJVUkwo
KSwgc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdl
TmFtZXNwYWNlUHJveHkuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGll
bnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJT
dG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlld0NsaWVudC5oIgpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBh
c3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6bG9jYWxTdG9yYWdl
TmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWduZWQgcXVvdGEpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlUHJveHkoV2ViS2l0Ojp3ZWJLaXRDbGll
bnQoKS0+Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHBhdGgsIHF1b3RhKSwgTG9jYWxTdG9y
YWdlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlTmFtZXNwYWNlUHJveHkoV2Vi
S2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KHBhdGgsIHF1b3RhKSwgTG9jYWxTdG9yYWdlKSk7CiB9CiAKIFBhc3NSZWZQdHI8U3RvcmFnZU5h
bWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoUGFnZSog
cGFnZSwgdW5zaWduZWQgcXVvdGEpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJLaXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktp
dC5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
S2l0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBw
b3J0LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAi
V2ViU29ja2V0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCkBA
IC01NCwyNiArNTQsMjYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyBEb2luZyBzbyBtYXkgY2F1
c2UgaGFyZCB0byByZXByb2R1Y2UgY3Jhc2hlcy4KIHN0YXRpYyBib29sIHNfd2ViS2l0SW5pdGlh
bGl6ZWQgPSBmYWxzZTsKIAotc3RhdGljIFdlYktpdENsaWVudCogc193ZWJLaXRDbGllbnQgPSAw
Oworc3RhdGljIFdlYktpdFBsYXRmb3JtU3VwcG9ydCogc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQg
PSAwOwogc3RhdGljIGJvb2wgc19sYXlvdXRUZXN0TW9kZSA9IGZhbHNlOwogCiBzdGF0aWMgYm9v
bCBnZW5lcmF0ZUVudHJvcHkodW5zaWduZWQgY2hhciogYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQog
ewotICAgIGlmIChzX3dlYktpdENsaWVudCkgewotICAgICAgICBzX3dlYktpdENsaWVudC0+Y3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLCBsZW5ndGgpOworICAgIGlmIChzX3dl
YktpdFBsYXRmb3JtU3VwcG9ydCkgeworICAgICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydC0+
Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLCBsZW5ndGgpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIGluaXRpYWxp
emUoV2ViS2l0Q2xpZW50KiB3ZWJLaXRDbGllbnQpCit2b2lkIGluaXRpYWxpemUoV2ViS2l0UGxh
dGZvcm1TdXBwb3J0KiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpCiB7CiAgICAgQVNTRVJUKCFzX3dl
YktpdEluaXRpYWxpemVkKTsKICAgICBzX3dlYktpdEluaXRpYWxpemVkID0gdHJ1ZTsKIAotICAg
IEFTU0VSVCh3ZWJLaXRDbGllbnQpOwotICAgIEFTU0VSVCghc193ZWJLaXRDbGllbnQpOwotICAg
IHNfd2ViS2l0Q2xpZW50ID0gd2ViS2l0Q2xpZW50OworICAgIEFTU0VSVCh3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQpOworICAgIEFTU0VSVCghc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOworICAgIHNf
d2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0OwogCiAgICAgV1RG
Ojppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgp
OwpAQCAtOTUsMTQgKzk1LDIxIEBAIHZvaWQgaW5pdGlhbGl6ZShXZWJLaXRDbGllbnQqIHdlYktp
dENsaWUKIAogdm9pZCBzaHV0ZG93bigpCiB7Ci0gICAgc193ZWJLaXRDbGllbnQgPSAwOworICAg
IHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gMDsKIH0KIAotV2ViS2l0Q2xpZW50KiB3ZWJLaXRD
bGllbnQoKQorV2ViS2l0UGxhdGZvcm1TdXBwb3J0KiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKQog
ewotICAgIHJldHVybiBzX3dlYktpdENsaWVudDsKKyAgICByZXR1cm4gc193ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQ7CiB9CiAKKyNpZm5kZWYgV0VCS0lUX1JFTkFNRV9XRUJLSVRfQ0xJRU5UCitXZWJL
aXRQbGF0Zm9ybVN1cHBvcnQqIHdlYktpdENsaWVudCgpCit7CisgICAgcmV0dXJuIHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpOworfQorI2VuZGlmCisKIHZvaWQgc2V0TGF5b3V0VGVzdE1vZGUoYm9v
bCB2YWx1ZSkKIHsKICAgICBzX2xheW91dFRlc3RNb2RlID0gdmFsdWU7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bC5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QAogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgi
CiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVk
ZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViTWVkaWFFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiV2ViTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnku
aCIKQEAgLTYyNyw4ICs2MjcsNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Z2V0
U3VwcG9yCiBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bDo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBjb2RlY3MpCiB7Ci0gICAgV2ViTWltZVJlZ2lzdHJ5OjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlID0KLSAgICAgICAgd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c01l
ZGlhTUlNRVR5cGUodHlwZSwgY29kZWNzKTsKKyAgICBXZWJNaW1lUmVnaXN0cnk6OlN1cHBvcnRz
VHlwZSBzdXBwb3J0c1R5cGUgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5
KCktPnN1cHBvcnRzTWVkaWFNSU1FVHlwZSh0eXBlLCBjb2RlY3MpOwogCiAgICAgc3dpdGNoIChz
dXBwb3J0c1R5cGUpIHsKICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHJldmlzaW9uIDk0
MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKICNpbmNsdWRl
ICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKICNpbmNsdWRlICJXZWJS
ZWN0LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBX
ZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb3B5KCkKICAgICBpZiAoIW1fd2ViUGx1Z2luLT5oYXNT
ZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBi
b2FyZCgpLT53cml0ZUhUTUwobV93ZWJQbHVnaW4tPnNlbGVjdGlvbkFzTWFya3VwKCksIFdlYlVS
TCgpLCBtX3dlYlBsdWdpbi0+c2VsZWN0aW9uQXNUZXh0KCksIGZhbHNlKTsKKyAgICB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlSFRNTChtX3dlYlBsdWdpbi0+c2Vs
ZWN0aW9uQXNNYXJrdXAoKSwgV2ViVVJMKCksIG1fd2ViUGx1Z2luLT5zZWxlY3Rpb25Bc1RleHQo
KSwgZmFsc2UpOwogfQogCiBXZWJFbGVtZW50IFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmVsZW1l
bnQoKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAko
cmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQAogI2luY2x1ZGUgIldlYklu
cHV0RXZlbnQuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5oIgogI2luY2x1
ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktp
dFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyQWN0aW9uLmgiCiAj
aW5jbHVkZSAiV2ViTm9kZS5oIgogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAJKHJl
dmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xp
ZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNsdWRlICJX
ZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldl
YktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRm
b3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1
ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGwuaCIKICNpbmNsdWRlICJXZWJGaWxlV3JpdGVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0Lmgi
Ci0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBw
b3J0LmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgogI2luY2x1ZGUgIldvcmtlckFzeW5j
RmlsZVdyaXRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtNTks
NyArNTksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBmaWxlU3lzdGVtT3BlcmF0aW9uc01vCiBXb3Jr
ZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5
cGUsIGNvbnN0IFdlYktpdDo6V2ViVVJMJiByb290VVJMLCBib29sIHN5bmNocm9ub3VzKQogICAg
IDogQXN5bmNGaWxlU3lzdGVtKHR5cGUpCiAgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
Y29udGV4dCkKLSAgICAsIG1fd2ViRmlsZVN5c3RlbShXZWJLaXQ6OndlYktpdENsaWVudCgpLT5m
aWxlU3lzdGVtKCkpCisgICAgLCBtX3dlYkZpbGVTeXN0ZW0od2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPmZpbGVTeXN0ZW0oKSkKICAgICAsIG1fd29ya2VyQ29udGV4dChzdGF0aWNfY2FzdDxXb3Jr
ZXJDb250ZXh0Kj4oY29udGV4dCkpCiAgICAgLCBtX3N5bmNocm9ub3VzKHN5bmNocm9ub3VzKQog
ICAgICwgbV9maWxlc3lzdGVtUm9vdFVSTChyb290VVJMKQpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV29ya2VyRmlsZVdyaXRlckNhbGxiYWNrc0JyaWRnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVdyaXRlckNhbGxiYWNr
c0JyaWRnZS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyRmlsZVdyaXRlckNhbGxiYWNrc0JyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiV2Vi
RmlsZVdyaXRlci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVu
dC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYldv
cmtlckJhc2UuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2Vy
TG9hZGVyUHJveHkuaCIKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIFdvcmtlckZpbGVXcml0ZXJD
YWxsYmFja3NCcmlkZ2U6OmFiCiB2b2lkIFdvcmtlckZpbGVXcml0ZXJDYWxsYmFja3NCcmlkZ2U6
OmluaXRPbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29y
a2VyRmlsZVdyaXRlckNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBjb25zdCBLVVJMJiBwYXRoKQog
ewogICAgIEFTU0VSVCghYnJpZGdlLT5tX3dyaXRlcik7Ci0gICAgYnJpZGdlLT5tX3dyaXRlciA9
IGFkb3B0UHRyKHdlYktpdENsaWVudCgpLT5maWxlU3lzdGVtKCktPmNyZWF0ZUZpbGVXcml0ZXIo
cGF0aCwgYnJpZGdlLmdldCgpKSk7CisgICAgYnJpZGdlLT5tX3dyaXRlciA9IGFkb3B0UHRyKHdl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlU3lzdGVtKCktPmNyZWF0ZUZpbGVXcml0ZXIocGF0
aCwgYnJpZGdlLmdldCgpKSk7CiB9CiAKIHZvaWQgV29ya2VyRmlsZVdyaXRlckNhbGxiYWNrc0Jy
aWRnZTo6c2h1dGRvd25Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8V29ya2VyRmlsZVdyaXRlckNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlKQpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9SdW5BbGxUZXN0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9SdW5BbGxUZXN0cy5jcHAJKHJldmlzaW9uIDk0
MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9SdW5BbGxUZXN0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxiYXNlL3Rlc3QvdGVzdF9z
dWl0ZS5oPgogCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSA8d2Via2l0L3N1
cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KIAogI2lmIGRlZmluZWQoV0VCS0lUX0RMTF9VTklUVEVT
VCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105817</attachid>
            <date>2011-08-31 13:00:52 -0700</date>
            <delta_ts>2011-08-31 13:38:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67309-20110831130051.patch</filename>
            <type>text/plain</type>
            <size>81013</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDIxMikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcw
IEBACisyMDExLTA4LTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBSZW5hbWUgV2ViS2l0Q2xpZW50IHRvIFdlYktpdFBsYXRmb3JtU3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczMDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXRD
bGllbnQgZG9lc24ndCBhY3R1YWxseSByZXByZXNlbnQgdGhlIFdlYktpdCBDbGllbnQuICBJbnN0
ZWFkLCBpdAorICAgICAgICByZXByZXNlbnRzIHN1cHBvcnRpbmcgY29kZSBmb3IgdGhlIFdlYktp
dCBQbGF0Zm9ybS4gIFRoaXMgcGF0Y2ggcmVuYW1lcworICAgICAgICBXZWJLaXRDbGllbnQgdG8g
V2ViS2l0UGxhdGZvcm1TdXBwb3J0IHRvIG1ha2UgaXQgZWFzaWVyIGZvciBmb2xrcyB0bworICAg
ICAgICB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIENsaWVudCBhbmQgdGhl
IFBsYXRmb3JtLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW5jbHVkZXMgc2hpbXMgc28gYXMgbm90
IHRvIGJyZWFrIHRoZSBDaHJvbWl1bSBidWlsZC4gIE9uY2UKKyAgICAgICAgdGhlIENocm9taXVt
IHNpZGUgaXMgdXBkYXRlZCwgSSdsbCByZW1vdmUgdGhlIHNoaW1zLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWVDbGllbnQuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViS2l0Lmg6CisgICAgICAgIChXZWJLaXQ6OndlYktpdENsaWVudCk6CisgICAgICAg
ICogcHVibGljL1dlYktpdENsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHB1YmxpYy9XZWJL
aXRQbGF0Zm9ybVN1cHBvcnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViS2l0Q2xpZW50LmguCisgICAgICAgIChXZWJLaXQ6OldlYktpdFBsYXRmb3JtU3Vw
cG9ydDo6fldlYktpdFBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogc3JjL0FwcGxpY2F0aW9u
Q2FjaGVIb3N0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBzcmMvQXNzb2NpYXRlZFVSTExvYWRlci5j
cHA6CisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bSk6CisgICAgICAgICogc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW06OkF1ZGlvRGVzdGluYXRpb25DaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBs
ZVJhdGUpOgorICAgICAgICAqIHNyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iUmVnaXN0cnlQcm94eTo6QmxvYlJlZ2lzdHJ5UHJveHkpOgorICAgICAgICAq
IHNyYy9DQ1RocmVhZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDQ1RocmVhZEltcGw6OkND
VGhyZWFkSW1wbCk6CisgICAgICAgICogc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwOgorICAg
ICAgICAoV1RGOjpjdXJyZW50VGltZSk6CisgICAgICAgIChXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSk6CisgICAgICAgICogc3JjL0Nocm9taXVtT1NSYW5kb21Tb3VyY2UuY3BwOgor
ICAgICAgICAoV1RGOjpjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlc0Zyb21PUyk6CisgICAg
ICAgICogc3JjL0Nocm9taXVtVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKFdURjo6Q2hyb21pdW1U
aHJlYWRpbmc6OmNhbGxPbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNh
blNob3dNSU1FVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
dXNlckFnZW50KToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAg
KiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OklEQkZh
Y3RvcnlCYWNrZW5kUHJveHk6OklEQkZhY3RvcnlCYWNrZW5kUHJveHkpOgorICAgICAgICAqIHNy
Yy9Mb2NhbGl6ZWRTdHJpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnF1ZXJ5KToKKyAgICAg
ICAgKiBzcmMvUGxhdGZvcm1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29va2ll
SmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjYWNoZU1ldGFkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWls
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBs
YWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVh
ZEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkR2V0U2Vx
dWVuY2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xp
cGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmZp
bGVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpvcGVuRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xvc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzZWVrRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpyZWFkRnJvbUZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpsb2FkRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZh
bHVlc0FuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmluamVj
dElEQktleUludG9TZXJpYWxpemVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1h
Z2VNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVG
b3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OndlbGxLbm93
bk1pbWVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjptaW1lVHlwZUZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpw
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6cGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9h
ZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjppbmNyZW1lbnRTdGF0c0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnBhaW50VHJhY2tiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmdldFRo
ZW1lUGFydFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhl
bWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWVtb3J5VXNhZ2VNQik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQik6CisgICAgICAgICogc3JjL1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCk6CisgICAgICAg
ICogc3JjL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBzcmMvU2hhcmVkV29ya2VyUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpj
b25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3Vt
ZW50RGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6
aGFzU2hhcmVkV29ya2Vycyk6CisgICAgICAgICogc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6Y29ubmVjdCk6
CisgICAgICAgICogc3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaCk6CisgICAgICAg
ICogc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlTmFtZXNwYWNlOjpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAqIHNyYy9XZWJL
aXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpnZW5lcmF0ZUVudHJvcHkpOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6c2h1dGRvd24pOgorICAgICAgICAo
V2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHNyYy9XZWJNZWRpYVBs
YXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb3B5KToK
KyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06
OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmls
ZVdyaXRlckNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVX
cml0ZXJDYWxsYmFja3NCcmlkZ2U6OmluaXRPbk1haW5UaHJlYWQpOgorICAgICAgICAqIHRlc3Rz
L1J1bkFsbFRlc3RzLmNwcDoKKwogMjAxMS0wOC0zMSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2VkLCBmaXggaW5jb25zaXN0ZW50
IFdlYktpdC5neXBpIGFmdGVyIHI5NDEwNgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViSW5wdXRFdmVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYktpdC5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYktpdENsaWVudC5oJywKKyAgICAgICAgICAgICAg
ICAncHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkxhYmVsRWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkxvY2Fs
aXplZFN0cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYk1lZGlhRWxlbWVudC5o
JywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGll
bnQuaAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJGcmFtZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoK
ICAgICAvLyBTZXJ2aWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIEEgZnJhbWUgc3BlY2lmaWMgY29va2llIGph
ci4gIE1heSByZXR1cm4gbnVsbCwgaW4gd2hpY2ggY2FzZQotICAgIC8vIFdlYktpdENsaWVudDo6
Y29va2llSmFyKCkgd2lsbCBiZSBjYWxsZWQgdG8gYWNjZXNzIGNvb2tpZXMuCisgICAgLy8gV2Vi
S2l0UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVKYXIoKSB3aWxsIGJlIGNhbGxlZCB0byBhY2Nlc3Mg
Y29va2llcy4KICAgICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKFdlYkZyYW1lKikg
eyByZXR1cm4gMDsgfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktp
dC5oCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNyArMzUsMzEgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIFdlYktpdENsaWVudDsKK2NsYXNzIFdlYktpdFBsYXRmb3JtU3VwcG9y
dDsKIAogLy8gTXVzdCBiZSBjYWxsZWQgb24gdGhlIHRocmVhZCB0aGF0IHdpbGwgYmUgdGhlIG1h
aW4gV2ViS2l0IHRocmVhZCBiZWZvcmUKLS8vIHVzaW5nIGFueSBvdGhlciBXZWJLaXQgQVBJcy4g
IFRoZSBwcm92aWRlZCBXZWJLaXRDbGllbnQgbXVzdCBiZSBub24tbnVsbAotLy8gYW5kIG11c3Qg
cmVtYWluIHZhbGlkIHVudGlsIHRoZSBjdXJyZW50IHRocmVhZCBjYWxscyBzaHV0ZG93bi4KLVdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKFdlYktpdENsaWVudCopOwotCi0vLyBPbmNlIHNo
dXRkb3duLCB0aGUgV2ViS2l0Q2xpZW50IHBhc3NlZCB0byBpbml0aWFsaXplIHdpbGwgbm8gbG9u
Z2VyIGJlCi0vLyBhY2Nlc3NlZC4gIE5vIG90aGVyIFdlYktpdCBvYmplY3RzIHNob3VsZCBiZSBp
biB1c2Ugd2hlbiB0aGlzIGZ1bmN0aW9uCi0vLyBpcyBjYWxsZWQuICBBbnkgYmFja2dyb3VuZCB0
aHJlYWRzIGNyZWF0ZWQgYnkgV2ViS2l0IGFyZSBwcm9taXNlZCB0byBiZQorLy8gdXNpbmcgYW55
IG90aGVyIFdlYktpdCBBUElzLiBUaGUgcHJvdmlkZWQgV2ViS2l0UGxhdGZvcm1TdXBwb3J0OyBt
dXN0IGJlCisvLyBub24tbnVsbCBhbmQgbXVzdCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGN1cnJl
bnQgdGhyZWFkIGNhbGxzIHNodXRkb3duLgorV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUo
V2ViS2l0UGxhdGZvcm1TdXBwb3J0Kik7CisKKy8vIE9uY2Ugc2h1dGRvd24sIHRoZSBXZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQgcGFzc2VkIHRvIGluaXRpYWxpemUgd2lsbCBubyBsb25nZXIKKy8vIGJl
IGFjY2Vzc2VkLiBObyBvdGhlciBXZWJLaXQgb2JqZWN0cyBzaG91bGQgYmUgaW4gdXNlIHdoZW4g
dGhpcyBmdW5jdGlvbiBpcworLy8gY2FsbGVkLiBBbnkgYmFja2dyb3VuZCB0aHJlYWRzIGNyZWF0
ZWQgYnkgV2ViS2l0IGFyZSBwcm9taXNlZCB0byBiZQogLy8gdGVybWluYXRlZCBieSB0aGUgdGlt
ZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCiBXRUJLSVRfRVhQT1JUIHZvaWQgc2h1dGRvd24oKTsK
IAotLy8gUmV0dXJucyB0aGUgV2ViS2l0Q2xpZW50IGluc3RhbmNlIHBhc3NlZCB0byBpbml0aWFs
aXplLgotV0VCS0lUX0VYUE9SVCBXZWJLaXRDbGllbnQqIHdlYktpdENsaWVudCgpOworLy8gUmV0
dXJucyB0aGUgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IGluc3RhbmNlIHBhc3NlZCB0byBpbml0aWFs
aXplLgorV0VCS0lUX0VYUE9SVCBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQqIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpOworCisjaWZuZGVmIFdFQktJVF9SRU5BTUVfV0VCS0lUX0NMSUVOVAorV0VCS0lU
X0VYUE9SVCBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQqIHdlYktpdENsaWVudCgpOworI2VuZGlmCiAK
IC8vIEFsdGVycyB0aGUgcmVuZGVyaW5nIG9mIGNvbnRlbnQgdG8gY29uZm9ybSB0byBhIGZpeGVk
IHNldCBvZiBydWxlcy4KIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRMYXlvdXRUZXN0TW9kZShib29s
KTsKIFdFQktJVF9FWFBPUlQgYm9vbCBsYXlvdXRUZXN0TW9kZSgpOwogCi0vLyBFbmFibGVzIHRo
ZSBuYW1lZCBsb2cgY2hhbm5lbC4gIFNlZSBXZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaCBmb3Ig
ZGV0YWlscy4KKy8vIEVuYWJsZXMgdGhlIG5hbWVkIGxvZyBjaGFubmVsLiBTZWUgV2ViQ29yZS9w
bGF0Zm9ybS9Mb2dnaW5nLmggZm9yIGRldGFpbHMuCiBXRUJLSVRfRVhQT1JUIHZvaWQgZW5hYmxl
TG9nQ2hhbm5lbChjb25zdCBjaGFyKik7CiAKIC8vIFB1cmdlIHRoZSBwbHVnaW4gbGlzdCBjYWNo
ZS4gSWYgfHJlbG9hZFBhZ2VzfCBpcyB0cnVlLCBhbnkgcGFnZXMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCShyZXZpc2lvbiA5NDIxMSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CkBAIC0zMSwyODUgKzMxLDE1IEBACiAjaWZuZGVmIFdlYktpdENsaWVudF9oCiAjZGVmaW5lIFdl
YktpdENsaWVudF9oCiAKLSNpbmNsdWRlICJXZWJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIldlYkF1
ZGlvRGV2aWNlLmgiCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViRGF0YS5o
IgotI2luY2x1ZGUgIldlYkxvY2FsaXplZFN0cmluZy5oIgotI2luY2x1ZGUgIldlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgotI2luY2x1ZGUgIldlYlZl
Y3Rvci5oIgotI2luY2x1ZGUgIldlYlVSTC5oIgorLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZpbGUg
b25jZSB3ZSdyZSBkb25lIHJlbmFtaW5nIFdlYktpdENsaWVudCB0byBXZWJLaXRQbGF0Zm9ybVN1
cHBvcnQuCisjaWZuZGVmIFdFQktJVF9SRU5BTUVfV0VCS0lUX0NMSUVOVAogCi0jaW5jbHVkZSA8
dGltZS5oPgotCi0jaWZkZWYgV0lOMzIKLXR5cGVkZWYgdm9pZCAqSEFORExFOwotI2VuZGlmCisj
aW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewor
dHlwZWRlZiBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQgV2ViS2l0Q2xpZW50OworfQogCi1jbGFzcyBX
ZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKLWNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xp
ZW50OwotY2xhc3MgV2ViQmxvYlJlZ2lzdHJ5OwotY2xhc3MgV2ViQ2xpcGJvYXJkOwotY2xhc3Mg
V2ViQ29va2llSmFyOwotY2xhc3MgV2ViRmlsZVN5c3RlbTsKLWNsYXNzIFdlYkZpbGVVdGlsaXRp
ZXM7Ci1jbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFdlYklEQkZhY3Rvcnk7Ci1j
bGFzcyBXZWJJREJLZXk7Ci1jbGFzcyBXZWJNZXNzYWdlUG9ydENoYW5uZWw7Ci1jbGFzcyBXZWJN
aW1lUmVnaXN0cnk7Ci1jbGFzcyBXZWJQbHVnaW5MaXN0QnVpbGRlcjsKLWNsYXNzIFdlYlNhbmRi
b3hTdXBwb3J0OwotY2xhc3MgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeTsKLWNsYXNzIFdlYlNv
Y2tldFN0cmVhbUhhbmRsZTsKLWNsYXNzIFdlYlN0b3JhZ2VOYW1lc3BhY2U7Ci1jbGFzcyBXZWJU
aGVtZUVuZ2luZTsKLWNsYXNzIFdlYlRocmVhZDsKLWNsYXNzIFdlYlVSTExvYWRlcjsKLQotY2xh
c3MgV2ViS2l0Q2xpZW50IHsKLXB1YmxpYzoKLSAgICAvLyBNdXN0IHJldHVybiBub24tbnVsbC4K
LSAgICB2aXJ0dWFsIFdlYkNsaXBib2FyZCogY2xpcGJvYXJkKCkgeyByZXR1cm4gMDsgfQotCi0g
ICAgLy8gTXVzdCByZXR1cm4gbm9uLW51bGwuCi0gICAgdmlydHVhbCBXZWJNaW1lUmVnaXN0cnkq
IG1pbWVSZWdpc3RyeSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIE11c3QgcmV0dXJuIG5vbi1u
dWxsLgotICAgIHZpcnR1YWwgV2ViRmlsZVV0aWxpdGllcyogZmlsZVV0aWxpdGllcygpIHsgcmV0
dXJuIDA7IH0KLQotICAgIC8vIE1heSByZXR1cm4gbnVsbCBpZiBzYW5kYm94IHN1cHBvcnQgaXMg
bm90IG5lY2Vzc2FyeQotICAgIHZpcnR1YWwgV2ViU2FuZGJveFN1cHBvcnQqIHNhbmRib3hTdXBw
b3J0KCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gTWF5IHJldHVybiBudWxsIG9uIHNvbWUgcGxh
dGZvcm1zLgotICAgIHZpcnR1YWwgV2ViVGhlbWVFbmdpbmUqIHRoZW1lRW5naW5lKCkgeyByZXR1
cm4gMDsgfQotCi0gICAgLy8gTWF5IHJldHVybiBudWxsLgotICAgIHZpcnR1YWwgV2ViQ29va2ll
SmFyKiBjb29raWVKYXIoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBCbG9iIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgIC8vIE11c3QgcmV0dXJuIG5vbi1udWxsLgotICAgIHZpcnR1YWwgV2ViQmxvYlJlZ2lzdHJ5
KiBibG9iUmVnaXN0cnkoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBET00gU3RvcmFnZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8g
UmV0dXJuIGEgTG9jYWxTdG9yYWdlIG5hbWVzcGFjZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBm
b2xsb3dpbmcgcGF0aC4KLSAgICB2aXJ0dWFsIFdlYlN0b3JhZ2VOYW1lc3BhY2UqIGNyZWF0ZUxv
Y2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBXZWJTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3Rh
KSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBzdG9yYWdlIGV2ZW50cyBmaXJl
LgotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBXZWJTdHJpbmcm
IGtleSwgY29uc3QgV2ViU3RyaW5nJiBvbGRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgV2ViU3RyaW5n
JiBvcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlVSTCYgdXJsLCBib29sIGlzTG9jYWxTdG9yYWdlKSB7IH0KLQotCi0gICAgLy8gSGlzdG9yeSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgICAvLyBSZXR1cm5zIHRoZSBoYXNoIGZvciB0aGUgZ2l2ZW4gY2Fub25pY2FsaXpl
ZCBVUkwgZm9yIHVzZSBpbiB2aXNpdGVkCi0gICAgLy8gbGluayBjb2xvcmluZy4KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyB2aXNpdGVkTGlua0hhc2goCi0gICAgICAgIGNvbnN0IGNo
YXIqIGNhbm9uaWNhbFVSTCwgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8g
UmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rIGhhc2ggaXMgaW4gdGhlIHVzZXIncyBoaXN0
b3J5LiAgVGhlCi0gICAgLy8gaGFzaCBtdXN0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgYnkgY2FsbGlu
ZyBWaXNpdGVkTGlua0hhc2goKS4KLSAgICB2aXJ0dWFsIGJvb2wgaXNMaW5rVmlzaXRlZCh1bnNp
Z25lZCBsb25nIGxvbmcgbGlua0hhc2gpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLQotICAgIC8vIEhU
TUw1IERhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0jaWZkZWYgV0lOMzIKLSAgICB0eXBlZGVmIEhBTkRMRSBGaWxlSGFuZGxl
OwotI2Vsc2UKLSAgICB0eXBlZGVmIGludCBGaWxlSGFuZGxlOwogI2VuZGlmCiAKLSAgICAvLyBP
cGVucyBhIGRhdGFiYXNlIGZpbGU7IGRpckhhbmRsZSBzaG91bGQgYmUgMCBpZiB0aGUgY2FsbGVy
IGRvZXMgbm90IG5lZWQKLSAgICAvLyBhIGhhbmRsZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5p
bmcgdGhpcyBmaWxlCi0gICAgdmlydHVhbCBGaWxlSGFuZGxlIGRhdGFiYXNlT3BlbkZpbGUoCi0g
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpIHsg
cmV0dXJuIEZpbGVIYW5kbGUoKTsgfQotCi0gICAgLy8gRGVsZXRlcyBhIGRhdGFiYXNlIGZpbGUg
YW5kIHJldHVybnMgdGhlIGVycm9yIGNvZGUKLSAgICB2aXJ0dWFsIGludCBkYXRhYmFzZURlbGV0
ZUZpbGUoY29uc3QgV2ViU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKSB7IHJldHVy
biAwOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBnaXZlbiBkYXRh
YmFzZSBmaWxlCi0gICAgdmlydHVhbCBsb25nIGRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoY29u
c3QgV2ViU3RyaW5nJiB2ZnNGaWxlTmFtZSkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gUmV0dXJu
cyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UgZmlsZQotICAgIHZpcnR1YWwgbG9uZyBs
b25nIGRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgV2ViU3RyaW5nJiB2ZnNGaWxlTmFtZSkgeyBy
ZXR1cm4gMDsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgc3BhY2UgYXZhaWxhYmxlIGZvciB0aGUg
Z2l2ZW4gb3JpZ2luCi0gICAgdmlydHVhbCBsb25nIGxvbmcgZGF0YWJhc2VHZXRTcGFjZUF2YWls
YWJsZUZvck9yaWdpbihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgb3JpZ2luSWRlbnRpZmllcikg
eyByZXR1cm4gMDsgfQotCi0gICAgLy8gSW5kZXhlZCBEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICB2aXJ0dWFsIFdlYklE
QkZhY3RvcnkqIGlkYkZhY3RvcnkoKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgV2ViVmVjdG9y
PFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIHZhbHVlcywgIGNvbnN0IFdlYlN0cmluZyYga2V5
UGF0aCwgV2ViVmVjdG9yPFdlYklEQktleT4mIGtleXMpIHsgfQotICAgIHZpcnR1YWwgV2ViU2Vy
aWFsaXplZFNjcmlwdFZhbHVlIGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoY29uc3Qg
V2ViSURCS2V5JiBrZXksIGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNv
bnN0IFdlYlN0cmluZyYga2V5UGF0aCkgeyByZXR1cm4gV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVl
KCk7IH0KLQotCi0gICAgLy8gS2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBIYW5kbGUgdGhlIDxrZXln
ZW4+IHRhZyBmb3IgZ2VuZXJhdGluZyBjbGllbnQgY2VydGlmaWNhdGVzCi0gICAgLy8gUmV0dXJu
cyBhIGJhc2U2NCBlbmNvZGVkIHNpZ25lZCBjb3B5IG9mIGEgcHVibGljIGtleSBmcm9tIGEgbmV3
bHkKLSAgICAvLyBnZW5lcmF0ZWQga2V5IHBhaXIgYW5kIHRoZSBzdXBwbGllZCBjaGFsbGVuZ2Ug
c3RyaW5nLiBrZXlTaXplaW5kZXgKLSAgICAvLyBzcGVjaWZpZXMgdGhlIHN0cmVuZ3RoIG9mIHRo
ZSBrZXkuCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
U3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNo
YWxsZW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJVUkwmIHVybCkgeyByZXR1cm4gV2ViU3RyaW5nKCk7
IH0KLQotCi0KLSAgICAvLyBNZW1vcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIFJldHVybnMgdGhlIGN1cnJl
bnQgc3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgcGFnZWZpbGUsIGluIE1CLgotICAgIC8vIFRoYXQg
aXMgY29tbWl0dGVkIHNpemUgZm9yIFdpbmRvd3MgYW5kIHZpcnR1YWwgbWVtb3J5IHNpemUgZm9y
IFBPU0lYCi0gICAgdmlydHVhbCBzaXplX3QgbWVtb3J5VXNhZ2VNQigpIHsgcmV0dXJuIDA7IH0K
LQotICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBhbHdheXMgcmV0dXJucyBhY3R1YWwgdmFsdWUs
IHdpdGhvdXQgYW55IGNhY2hlcy4KLSAgICB2aXJ0dWFsIHNpemVfdCBhY3R1YWxNZW1vcnlVc2Fn
ZU1CKCkgeyByZXR1cm4gMDsgfQotCi0KLSAgICAvLyBUaHJlYWRzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIENyZWF0ZXMg
YW4gZW1iZWRkZXItZGVmaW5lZCB0aHJlYWQuCi0gICAgdmlydHVhbCBXZWJUaHJlYWQqIGNyZWF0
ZVRocmVhZChjb25zdCBjaGFyKiBuYW1lKSB7IHJldHVybiAwOyB9Ci0KLQotICAgIC8vIE1lc3Nh
Z2UgUG9ydHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0gICAgLy8gQ3JlYXRlcyBhIE1lc3NhZ2UgUG9ydCBDaGFubmVsLiAgVGhpcyBj
YW4gYmUgY2FsbGVkIG9uIGFueSB0aHJlYWQuCi0gICAgLy8gVGhlIHJldHVybmVkIG9iamVjdCBz
aG91bGQgb25seSBiZSB1c2VkIG9uIHRoZSB0aHJlYWQgaXQgd2FzIGNyZWF0ZWQgb24uCi0gICAg
dmlydHVhbCBXZWJNZXNzYWdlUG9ydENoYW5uZWwqIGNyZWF0ZU1lc3NhZ2VQb3J0Q2hhbm5lbCgp
IHsgcmV0dXJuIDA7IH0KLQotCi0gICAgLy8gTmV0d29yayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBBIHN1Z2dl
c3Rpb24gdG8gcHJlZmV0Y2ggSVAgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBob3N0bmFtZS4K
LSAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hIb3N0TmFtZShjb25zdCBXZWJTdHJpbmcmKSB7IH0K
LQotICAgIC8vIFJldHVybnMgYSBuZXcgV2ViVVJMTG9hZGVyIGluc3RhbmNlLgotICAgIHZpcnR1
YWwgV2ViVVJMTG9hZGVyKiBjcmVhdGVVUkxMb2FkZXIoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAv
LyBSZXR1cm5zIGEgbmV3IFdlYlNvY2tldFN0cmVhbUhhbmRsZSBpbnN0YW5jZS4KLSAgICB2aXJ0
dWFsIFdlYlNvY2tldFN0cmVhbUhhbmRsZSogY3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKCkgeyBy
ZXR1cm4gMDsgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgVXNlci1BZ2VudCBzdHJpbmcgdGhhdCBz
aG91bGQgYmUgdXNlZCBmb3IgdGhlIGdpdmVuIFVSTC4KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyB1
c2VyQWdlbnQoY29uc3QgV2ViVVJMJikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLQotICAgIC8v
IEEgc3VnZ2VzdGlvbiB0byBjYWNoZSB0aGlzIG1ldGFkYXRhIGluIGFzc29jaWF0aW9uIHdpdGgg
dGhpcyBVUkwuCi0gICAgdmlydHVhbCB2b2lkIGNhY2hlTWV0YWRhdGEoY29uc3QgV2ViVVJMJiwg
ZG91YmxlIHJlc3BvbnNlVGltZSwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFTaXplKSB7
IH0KLQotCi0gICAgLy8gUGx1Z2lucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBJZiByZWZyZXNoIGlzIHRydWUs
IHRoZW4gY2FjaGVkIGluZm9ybWF0aW9uIHNob3VsZCBub3QgYmUgdXNlZCB0bwotICAgIC8vIHNh
dGlzZnkgdGhpcyBjYWxsLgotICAgIHZpcnR1YWwgdm9pZCBnZXRQbHVnaW5MaXN0KGJvb2wgcmVm
cmVzaCwgV2ViUGx1Z2luTGlzdEJ1aWxkZXIqKSB7IH0KLQotCi0gICAgLy8gUHJvZmlsaW5nIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5h
bWUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hh
ciogbmFtZSkgeyB9Ci0KLSAgICAvLyBBbiBldmVudCBpcyBpZGVudGlmaWVkIGJ5IHRoZSBwYWly
IChuYW1lLCBpZCkuICBUaGUgZXh0cmEgcGFyYW1ldGVyCi0gICAgLy8gc3BlY2lmaWVzIGFkZGl0
aW9uYWwgZGF0YSB0byBsb2cgd2l0aCB0aGUgZXZlbnQuCi0gICAgdmlydHVhbCB2b2lkIHRyYWNl
RXZlbnRCZWdpbihjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZv
aWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkgeyB9Ci0KLSAgICAvLyBDYWxsYmFja3MgZm9yIHJl
cG9ydGluZyBoaXN0b2dyYW0gZGF0YS4KLSAgICAvLyBDdXN0b21Db3VudHMgaGlzdG9ncmFtIGhh
cyBleHBvbmVudGlhbCBidWNrZXQgc2l6ZXMsIHNvIHRoYXQgbWluPTEsIG1heD0xMDAwMDAwLCBi
dWNrZXRDb3VudD01MCB3b3VsZCBkby4KLSAgICB2aXJ0dWFsIHZvaWQgaGlzdG9ncmFtQ3VzdG9t
Q291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGlu
dCBidWNrZXRDb3VudCkgeyB9Ci0gICAgLy8gRW51bWVyYXRpb24gaGlzdG9ncmFtIGJ1Y2tldHMg
YXJlIGxpbmVhciwgYm91bmRhcnlWYWx1ZSBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gYW55IHBvc3Np
YmxlIHNhbXBsZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgaGlzdG9ncmFtRW51bWVyYXRpb24o
Y29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpIHsgfQotCi0K
LSAgICAvLyBSZXNvdXJjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIFJldHVybnMgYSBibG9iIG9mIGRhdGEgY29y
cmVzcG9uZGluZyB0byB0aGUgbmFtZWQgcmVzb3VyY2UuCi0gICAgdmlydHVhbCBXZWJEYXRhIGxv
YWRSZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKSB7IHJldHVybiBXZWJEYXRhKCk7IH0KLQotICAg
IC8vIERlY29kZXMgdGhlIGluLW1lbW9yeSBhdWRpbyBmaWxlIGRhdGEgYW5kIHJldHVybnMgdGhl
IGxpbmVhciBQQ00gYXVkaW8gZGF0YSBpbiB0aGUgZGVzdGluYXRpb25CdXMuCi0gICAgLy8gQSBz
YW1wbGUtcmF0ZSBjb252ZXJzaW9uIHRvIHNhbXBsZVJhdGUgd2lsbCBvY2N1ciBpZiB0aGUgZmls
ZSBkYXRhIGlzIGF0IGEgZGlmZmVyZW50IHNhbXBsZS1yYXRlLgotICAgIC8vIFJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzLgotICAgIHZpcnR1YWwgYm9vbCBsb2FkQXVkaW9SZXNvdXJjZShXZWJBdWRp
b0J1cyogZGVzdGluYXRpb25CdXMsIGNvbnN0IGNoYXIqIGF1ZGlvRmlsZURhdGEsIHNpemVfdCBk
YXRhU2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBS
ZXR1cm5zIGEgbG9jYWxpemVkIHN0cmluZyByZXNvdXJjZSAod2l0aCBzdWJzdGl0dXRpb24gcGFy
YW1ldGVycykuCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgcXVlcnlMb2NhbGl6ZWRTdHJpbmcoV2Vi
TG9jYWxpemVkU3RyaW5nOjpOYW1lKSB7IHJldHVybiBXZWJTdHJpbmcoKTsgfQotICAgIHZpcnR1
YWwgV2ViU3RyaW5nIHF1ZXJ5TG9jYWxpemVkU3RyaW5nKFdlYkxvY2FsaXplZFN0cmluZzo6TmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBwYXJhbWV0ZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0g
ICAgdmlydHVhbCBXZWJTdHJpbmcgcXVlcnlMb2NhbGl6ZWRTdHJpbmcoV2ViTG9jYWxpemVkU3Ry
aW5nOjpOYW1lLCBjb25zdCBXZWJTdHJpbmcmIHBhcmFtZXRlcjEsIGNvbnN0IFdlYlN0cmluZyYg
cGFyYW1ldGVyMikgeyByZXR1cm4gV2ViU3RyaW5nKCk7IH0KLQotCi0gICAgLy8gU2FuZGJveCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotICAgIC8vIEluIHNvbWUgYnJvd3NlcnMsIGEgInNhbmRib3giIHJlc3RyaWN0cyB3aGF0
IG9wZXJhdGlvbnMgYSBwcm9ncmFtCi0gICAgLy8gaXMgYWxsb3dlZCB0byBwcmVmb3JtLiAgU3Vj
aCBvcGVyYXRpb25zIGFyZSB0eXBpY2FsbHkgYWJzdHJhY3RlZCBvdXQKLSAgICAvLyB2aWEgdGhp
cyBBUEksIGJ1dCBzb21ldGltZXMgKGxpa2UgaW4gSFRNTCA1IGRhdGFiYXNlIG9wZW5pbmcpIFdl
YktpdAotICAgIC8vIG5lZWRzIHRvIGJlaGF2ZSBkaWZmZXJlbnRseSBiYXNlZCBvbiB3aGV0aGVy
IGl0J3MgcmVzdHJpY3RlZCBvciBub3QuCi0gICAgLy8gSW4gdGhlc2UgY2FzZXMgKGFuZCB0aGVz
ZSBjYXNlcyBvbmx5KSB5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbi4KLSAgICAvLyBJdCdzIE9L
IGZvciB0aGlzIHZhbHVlIHRvIGJlIGNvbnNlcnZpdGl2ZSAoaS5lLiB0cnVlIGV2ZW4gaWYgdGhl
Ci0gICAgLy8gc2FuZGJveCBpc24ndCBhY3RpdmUpLgotICAgIHZpcnR1YWwgYm9vbCBzYW5kYm94
RW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLQotICAgIC8vIFNoYXJlZCBXb3JrZXJzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
ICAgdmlydHVhbCBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5KiBzaGFyZWRXb3JrZXJSZXBvc2l0
b3J5KCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8gU3VkZGVuIFRlcm1pbmF0aW9uIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBEaXNh
YmxlL0VuYWJsZSBzdWRkZW4gdGVybWluYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIHN1ZGRlblRl
cm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQpIHsgfQotCi0KLSAgICAvLyBTeXN0ZW0gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotICAgIC8vIFJldHVybnMgYSB2YWx1ZSBzdWNoIGFzICJlbi1VUyIuCi0gICAgdmlydHVh
bCBXZWJTdHJpbmcgZGVmYXVsdExvY2FsZSgpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9Ci0KLSAg
ICAvLyBXYWxsIGNsb2NrIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guCi0gICAgdmly
dHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSB7IHJldHVybiAwOyB9Ci0KLSAgICAvLyBNb25vdG9u
aWNhbGx5IGluY3JlYXNpbmcgdGltZSBpbiBzZWNvbmRzIGZyb20gYW4gYXJiaXRyYXJ5IGZpeGVk
IHBvaW50IGluIHRoZSBwYXN0LgotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8g
cmV0dXJuIGF0IGxlYXN0IG1pbGxpc2Vjb25kLXByZWNpc2lvbiB2YWx1ZXMuIEZvciB0aGlzIHJl
YXNvbiwKLSAgICAvLyBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBmaXhlZCBwb2ludCBiZSBu
byBmdXJ0aGVyIGluIHRoZSBwYXN0IHRoYW4gdGhlIGVwb2NoLgotICAgIHZpcnR1YWwgZG91Ymxl
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIHsgcmV0dXJuIDA7IH0KLQotICAgIC8vIFdl
YktpdCBjbGllbnRzIG11c3QgaW1wbGVtZW50IHRoaXMgZnVuY2lvbiBpZiB0aGV5IHVzZSBjcnlw
dG9ncmFwaGljIHJhbmRvbW5lc3MuCi0gICAgdmlydHVhbCB2b2lkIGNyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tVmFsdWVzKHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkgPSAwOwot
Ci0gICAgLy8gRGVsYXllZCB3b3JrIGlzIGRyaXZlbiBieSBhIHNoYXJlZCB0aW1lci4KLSAgICB0
eXBlZGVmIHZvaWQgKCpTaGFyZWRUaW1lckZ1bmN0aW9uKSgpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oU2hhcmVkVGltZXJGdW5jdGlvbiB0aW1lckZ1bmN0
aW9uKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91
YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCkgeyB9Ci0KLSAgICAv
LyBDYWxsYWJsZSBmcm9tIGEgYmFja2dyb3VuZCBXZWJLaXQgdGhyZWFkLgotICAgIHZpcnR1YWwg
dm9pZCBjYWxsT25NYWluVGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkKiksIHZvaWQqIGNvbnRleHQp
IHsgfQotCi0gICAgLy8gV2ViR0wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIE1heSByZXR1cm4gbnVsbCBpZiBX
ZWJHTCBpcyBub3Qgc3VwcG9ydGVkLgotICAgIC8vIFJldHVybnMgbmV3bHkgYWxsb2NhdGVkIFdl
YkdyYXBoaWNzQ29udGV4dDNEIGluc3RhbmNlLgotICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250
ZXh0M0QqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dDNEKCkgeyByZXR1cm4gMDsgfQotCi0gICAgLy8g
QXVkaW8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAgIHZpcnR1YWwgZG91YmxlIGF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRl
KCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgV2ViQXVkaW9EZXZpY2UqIGNyZWF0ZUF1ZGlv
RGV2aWNlKHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBkb3Vi
bGUgc2FtcGxlUmF0ZSwgV2ViQXVkaW9EZXZpY2U6OlJlbmRlckNhbGxiYWNrKikgeyByZXR1cm4g
MDsgfQotCi0gICAgLy8gRmlsZVN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBNdXN0IHJldHVybiBub24tbnVs
bC4KLSAgICB2aXJ0dWFsIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0oKSB7IHJldHVybiAwOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICB+V2ViS2l0Q2xpZW50KCkgeyB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaAkocmV2aXNpb24gOTQyMDApCShm
cm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oOjk0MjAwKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgJ
KHdvcmtpbmcgY29weSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktp
dFBsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lvbiA5NDIwMCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
V2ViS2l0Q2xpZW50X2gKLSNkZWZpbmUgV2ViS2l0Q2xpZW50X2gKKyNpZm5kZWYgV2ViS2l0UGxh
dGZvcm1TdXBwb3J0X2gKKyNkZWZpbmUgV2ViS2l0UGxhdGZvcm1TdXBwb3J0X2gKIAogI2luY2x1
ZGUgIldlYkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiV2ViQXVkaW9EZXZpY2UuaCIKQEAgLTcwLDcg
KzcwLDcgQEAgY2xhc3MgV2ViVGhlbWVFbmdpbmU7CiBjbGFzcyBXZWJUaHJlYWQ7CiBjbGFzcyBX
ZWJVUkxMb2FkZXI7CiAKLWNsYXNzIFdlYktpdENsaWVudCB7CitjbGFzcyBXZWJLaXRQbGF0Zm9y
bVN1cHBvcnQgewogcHVibGljOgogICAgIC8vIE11c3QgcmV0dXJuIG5vbi1udWxsLgogICAgIHZp
cnR1YWwgV2ViQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSB7IHJldHVybiAwOyB9CkBAIC0zMDcsNyAr
MzA3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSgp
IHsgcmV0dXJuIDA7IH0KIAogcHJvdGVjdGVkOgotICAgIH5XZWJLaXRDbGllbnQoKSB7IH0KKyAg
ICB+V2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkgeyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0
SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BcHBs
aWNhdGlvbkNhY2hlSG9zdEludGVybmFsLmgJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXBwbGljYXRpb25DYWNoZUhvc3RJbnRlcm5hbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNp
bmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNs
dWRlICJXZWJVUkwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRlci5jcHAJKHJldmlzaW9u
IDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzb2NpYXRlZFVSTExvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJXZWJEYXRh
U291cmNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0Lmgi
Ci0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBw
b3J0LmgiCiAjaW5jbHVkZSAiV2ViVVJMRXJyb3IuaCIKICNpbmNsdWRlICJXZWJVUkxMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1
ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVdyaXRl
ci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCkBAIC01Miw3ICs1Miw3IEBAIGJvb2wgQXN5bmNGaWxlU3lzdGVtOjppc0F2YWls
YWJsZSgpCiAKIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bShBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgcm9vdFVSTCkKICAgICA6
IEFzeW5jRmlsZVN5c3RlbSh0eXBlKQotICAgICwgbV93ZWJGaWxlU3lzdGVtKFdlYktpdDo6d2Vi
S2l0Q2xpZW50KCktPmZpbGVTeXN0ZW0oKSkKKyAgICAsIG1fd2ViRmlsZVN5c3RlbShXZWJLaXQ6
OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlU3lzdGVtKCkpCiAgICAgLCBtX2ZpbGVzeXN0
ZW1Sb290VVJMKHJvb3RVUkwpCiB7CiAgICAgQVNTRVJUKG1fd2ViRmlsZVN5c3RlbSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1ZGlvRGVzdGluYXRp
b25DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUg
IldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBs
YXRmb3JtU3VwcG9ydC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBAIC03MSw3ICs3
MSw3IEBAIEF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bTo6QXVkaW9EZXN0aW5hdGkKICAgICAsIG1f
c2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCiB7Ci0gICAg
bV9hdWRpb0RldmljZSA9IGFkb3B0UHRyKHdlYktpdENsaWVudCgpLT5jcmVhdGVBdWRpb0Rldmlj
ZShjYWxsYmFja0J1ZmZlclNpemUsIG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUsIHRoaXMp
KTsKKyAgICBtX2F1ZGlvRGV2aWNlID0gYWRvcHRQdHIod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkt
PmNyZWF0ZUF1ZGlvRGV2aWNlKGNhbGxiYWNrQnVmZmVyU2l6ZSwgbnVtYmVyT2ZDaGFubmVscywg
c2FtcGxlUmF0ZSwgdGhpcykpOwogICAgIEFTU0VSVChtX2F1ZGlvRGV2aWNlLmdldCgpKTsKIH0K
IApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bTo6c3RvcCgp
CiAKIGRvdWJsZSBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQogewotICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+YXVkaW9IYXJkd2FyZVNhbXBsZVJhdGUoKTsKKyAgICBy
ZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRlKCk7
CiB9CiAKIC8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQgdGhlIHJlbmRlcmVkIGF1ZGlv
IHN0cmVhbS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVn
aXN0cnlQcm94eS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBACiAjaW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKICNpbmNsdWRlICJXZWJCbG9iUmVnaXN0cnku
aCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAg
LTU4LDcgKzU4LDcgQEAgQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQogfQogCiBCbG9iUmVn
aXN0cnlQcm94eTo6QmxvYlJlZ2lzdHJ5UHJveHkoKQotICAgIDogbV93ZWJCbG9iUmVnaXN0cnko
V2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+YmxvYlJlZ2lzdHJ5KCkpCisgICAgOiBtX3dlYkJsb2JS
ZWdpc3RyeShXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5ibG9iUmVnaXN0cnkoKSkK
IHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ0NUaHJlYWRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DQ1RocmVhZEltcGwu
Y3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NDVGhy
ZWFkSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJD
Q1RocmVhZEltcGwuaCIKIAogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENs
aWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldl
YlRocmVhZC5oIgogI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCiAjaW5jbHVkZSA8
c3RkaW50Lmg+CkBAIC05Niw3ICs5Niw3IEBAIFRocmVhZElkZW50aWZpZXIgQ0NUaHJlYWRJbXBs
Ojp0aHJlYWRJRCgKIH0KIAogQ0NUaHJlYWRJbXBsOjpDQ1RocmVhZEltcGwoKQotICAgIDogbV90
aHJlYWQoYWRvcHRQdHIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVRocmVhZCgiQ0NUaHJlYWQiKSkp
CisgICAgOiBtX3RocmVhZChhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRl
VGhyZWFkKCJDQ1RocmVhZCIpKSkKIHsKICAgICAvLyBHZXQgdGhlIHRocmVhZElkIGZvciB0aGUg
bmV3bHktY3JlYXRlZCB0aHJlYWQgYnkgcnVubmluZyBhIHRhc2sKICAgICAvLyBvbiB0aGF0IHRo
cmVhZCwgYmxvY2tpbmcgb24gdGhlIHJlc3VsdC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwCShyZXZpc2lvbiA5NDIxMSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQ3VycmVudFRpbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KIAogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgor
I2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIAog
ZG91YmxlIGN1cnJlbnRUaW1lKCkKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRDbGllbnQo
KS0+Y3VycmVudFRpbWUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+Y3VycmVudFRpbWUoKTsKIH0KIAogZG91YmxlIG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPm1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOworICAgIHJldHVybiBXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT5tb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKIH0KIAogfSAgLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1PU1JhbmRv
bVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21pdW1PU1JhbmRvbVNvdXJjZS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1PU1JhbmRvbVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEzICszMiwxMyBAQAogI2luY2x1ZGUgPHd0Zi9PU1JhbmRvbVNvdXJjZS5oPgogCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXVEYgewogCiB2b2lkIGNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzRnJvbU9TKHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6
ZV90IGxlbmd0aCkKIHsKLSAgICBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5jcnlwdG9ncmFwaGlj
YWxseVJhbmRvbVZhbHVlcyhidWZmZXIsIGxlbmd0aCk7CisgICAgV2ViS2l0Ojp3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLCBsZW5n
dGgpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bVRo
cmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21pdW1UaHJlYWRpbmcuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9taXVtVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9jaHJvbWl1bS9DaHJvbWl1bVRocmVhZGluZy5oPgogCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiB2b2lkIENocm9taXVtVGhyZWFk
aW5nOjpjYWxsT25NYWluVGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkKiksIHZvaWQqIGNvbnRleHQp
CiB7Ci0gICAgV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+Y2FsbE9uTWFpblRocmVhZChmdW5jLCBj
b250ZXh0KTsKKyAgICBXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jYWxsT25NYWlu
VGhyZWFkKGZ1bmMsIGNvbnRleHQpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQAog
I2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAj
aW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViTWltZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiV2ViTm9kZS5oIgogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKQEAg
LTEyOTAsNyArMTI5MCw3IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjYW5TaG93TUlN
RVQKICAgICAvLyBtaW1lVHlwZSBzdHJpbmdzIGFyZSBzdXBwb3NlZCB0byBiZSBBU0NJSSwgYnV0
IGlmIHRoZXkgYXJlIG5vdCBmb3Igc29tZQogICAgIC8vIHJlYXNvbiwgdGhlbiBpdCBqdXN0IG1l
YW5zIHRoYXQgdGhlIG1pbWUgdHlwZSB3aWxsIGZhaWwgYWxsIG9mIHRoZXNlICJpcwogICAgIC8v
IHN1cHBvcnRlZCIgY2hlY2tzIGFuZCBnbyBkb3duIHRoZSBwYXRoIG9mIGFuIHVuaGFuZGxlZCBt
aW1lIHR5cGUuCi0gICAgaWYgKHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9y
dHNNSU1FVHlwZShtaW1lVHlwZSkgPT0gV2ViTWltZVJlZ2lzdHJ5OjpJc1N1cHBvcnRlZCkKKyAg
ICBpZiAod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c01J
TUVUeXBlKG1pbWVUeXBlKSA9PSBXZWJNaW1lUmVnaXN0cnk6OklzU3VwcG9ydGVkKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIElmIENocm9tZSBpcyBzdGFydGVkIHdpdGggdGhlIC0t
ZGlzYWJsZS1wbHVnaW5zIHN3aXRjaCwgcGx1Z2luRGF0YSBpcyBudWxsLgpAQCAtMTM3OCw3ICsx
Mzc4LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OnNldFRpdGxlKGNvbgogCiBTdHJp
bmcgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjp1c2VyQWdlbnQoY29uc3QgS1VSTCYgdXJsKQogewot
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dXNlckFnZW50KHVybCk7CisgICAgcmV0dXJuIHdl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT51c2VyQWdlbnQodXJsKTsKIH0KIAogdm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1l
KikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAi
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNs
dWRlICJXZWJWaWV3SW1wbC5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTk4Niw3ICs5ODYs
NyBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvCiAgICAgd2ViQXR0
cmlidXRlcy5jYW5SZWNvdmVyRnJvbUNvbnRleHRMb3NzID0gYXR0cnMuY2FuUmVjb3ZlckZyb21D
b250ZXh0TG9zczsKICAgICB3ZWJBdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IGF0dHJzLm5vRXh0
ZW5zaW9uczsKICAgICB3ZWJBdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gYXR0cnMuc2hhcmVS
ZXNvdXJjZXM7Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNv
bnRleHQgPSBhZG9wdFB0cihXZWJLaXQ6OndlYktpdENsaWVudCgpLT5jcmVhdGVHcmFwaGljc0Nv
bnRleHQzRCgpKTsKKyAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2Vi
Q29udGV4dCA9IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dDNEKCkpOwogICAgIGlmICghd2ViQ29udGV4dCkKICAgICAgICAgcmV0
dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VFcnJvci5oIgogI2lu
Y2x1ZGUgIldlYklEQkZhY3RvcnkuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNs
dWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5j
bHVkZSAiV2ViVmlld0ltcGwuaCIKQEAgLTU2LDcgKzU2LDcgQEAgUGFzc1JlZlB0cjxJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZT4gSQogfQogCiBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpJREJG
YWN0b3J5QmFja2VuZFByb3h5KCkKLSAgICA6IG1fd2ViSURCRmFjdG9yeSh3ZWJLaXRDbGllbnQo
KS0+aWRiRmFjdG9yeSgpKQorICAgIDogbV93ZWJJREJGYWN0b3J5KHdlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT5pZGJGYWN0b3J5KCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0xvY2FsaXplZFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0xvY2FsaXplZFN0cmluZ3MuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsaXplZFN0cmluZ3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogI2lu
Y2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldl
YktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYkxvY2FsaXplZFN0cmluZy5oIgog
I2luY2x1ZGUgIldlYlN0cmluZy5oIgogCkBAIC00OSwxNyArNDksMTcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdGF0aWMgU3RyaW5nIHF1ZXJ5KFdlYkxvY2FsaXplZFN0cmluZzo6TmFtZSBu
YW1lKQogewotICAgIHJldHVybiBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5xdWVyeUxvY2FsaXpl
ZFN0cmluZyhuYW1lKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+cXVlcnlMb2NhbGl6ZWRTdHJpbmcobmFtZSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgcXVlcnko
V2ViTG9jYWxpemVkU3RyaW5nOjpOYW1lIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgcGFyYW1ldGVy
KQogewotICAgIHJldHVybiBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5xdWVyeUxvY2FsaXplZFN0
cmluZyhuYW1lLCBwYXJhbWV0ZXIpOworICAgIHJldHVybiBXZWJLaXQ6OndlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5xdWVyeUxvY2FsaXplZFN0cmluZyhuYW1lLCBwYXJhbWV0ZXIpOwogfQogCiBz
dGF0aWMgU3RyaW5nIHF1ZXJ5KFdlYkxvY2FsaXplZFN0cmluZzo6TmFtZSBuYW1lLCBjb25zdCBX
ZWJTdHJpbmcmIHBhcmFtZXRlcjEsIGNvbnN0IFdlYlN0cmluZyYgcGFyYW1ldGVyMikKIHsKLSAg
ICByZXR1cm4gV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+cXVlcnlMb2NhbGl6ZWRTdHJpbmcobmFt
ZSwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMik7CisgICAgcmV0dXJuIFdlYktpdDo6d2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPnF1ZXJ5TG9jYWxpemVkU3RyaW5nKG5hbWUsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIpOwogfQogCiBTdHJpbmcgc2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAJKHJl
dmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1Ccmlk
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBACiAjaW5jbHVkZSAiV2ViSURC
S2V5LmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNs
dWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIK
ICNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5Db250YWlu
ZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBsLmgiCkBAIC0xMzUs
NyArMTM1LDcgQEAgc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IAogICAg
ICAgICByZXR1cm4gMDsKICAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGZyYW1lSW1wbC0+
Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwogICAgIGlmICghY29va2llSmFyKQotICAg
ICAgICBjb29raWVKYXIgPSB3ZWJLaXRDbGllbnQoKS0+Y29va2llSmFyKCk7CisgICAgICAgIGNv
b2tpZUphciA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jb29raWVKYXIoKTsKICAgICByZXR1
cm4gY29va2llSmFyOwogfQogCkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIFdlYkNvb2tpZUph
ciogZ2V0Q29va2llSmFyKGNvbnN0IAogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpjYWNoZU1ldGFk
YXRhKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJlc3BvbnNlVGltZSwgY29uc3QgVmVjdG9yPGNo
YXI+JiBkYXRhKQogewotICAgIHdlYktpdENsaWVudCgpLT5jYWNoZU1ldGFkYXRhKHVybCwgcmVz
cG9uc2VUaW1lLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5jYWNoZU1ldGFkYXRhKHVybCwgcmVzcG9uc2VUaW1lLCBkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpOwogfQogCiAvLyBDbGlwYm9hcmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTIsNyArMTUy
LDcgQEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdgogICAgIFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRGb3JtYXQgZm9ybWF0LAogICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+Y2xpcGJvYXJkKCktPmlzRm9ybWF0QXZhaWxhYmxlKAorICAgIHJldHVybiB3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPmlzRm9ybWF0QXZhaWxhYmxlKAogICAgICAgICBz
dGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkZvcm1hdD4oZm9ybWF0KSwKICAgICAgICAgc3RhdGlj
X2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwogfQpAQCAtMTYwLDcgKzE2MCw3
IEBAIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0QXYKIFN0cmluZyBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dCgKICAgICBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlcikKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PmNsaXBib2FyZCgpLT5yZWFkUGxhaW5UZXh0KAorICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRQbGFpblRleHQoCiAgICAgICAgIHN0YXRpY19jYXN0
PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKIH0KIApAQCAtMTY5LDcgKzE2OSw3IEBA
IHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFN0cmluZyogaHRt
bFRleHQsIEtVUkwqIHNvdXJjZVVSTCkKIHsKICAgICBXZWJVUkwgdXJsOwotICAgICpodG1sVGV4
dCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEhUTUwoCisgICAgKmh0bWxUZXh0
ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKICAgICAg
ICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOwogICAg
ICpzb3VyY2VVUkwgPSB1cmw7CiB9CkBAIC0xNzcsMTIgKzE3NywxMiBAQCB2b2lkIFBsYXRmb3Jt
QnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTCgKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEltYWdlKAogICAgIFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIgYnVmZmVyKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xp
cGJvYXJkKCktPnJlYWRJbWFnZShzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVm
ZmVyKSk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+
cmVhZEltYWdlKHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKIH0K
IAogdWludDY0X3QgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZEdldFNlcXVlbmNlTnVtYmVyKCkK
IHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5nZXRTZXF1ZW5jZU51
bWJlcigpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCkt
PmdldFNlcXVlbmNlTnVtYmVyKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlU2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgaHRtbFRleHQsCkBAIC0xOTAsMTggKzE5MCwx
OCBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBsYWluVGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3Jp
dGVTbWFydFBhc3RlKQogewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVI
VE1MKAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVIVE1M
KAogICAgICAgICBodG1sVGV4dCwgc291cmNlVVJMLCBwbGFpblRleHQsIHdyaXRlU21hcnRQYXN0
ZSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KGNv
bnN0IFN0cmluZyYgcGxhaW5UZXh0KQogewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+d3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y2xpcGJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHBsYWluVGV4dCk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiB0aXRsZSkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlVVJM
KHVybCwgdGl0bGUpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jbGlwYm9hcmQoKS0+
d3JpdGVVUkwodXJsLCB0aXRsZSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsCkBAIC0yMTMsMjAgKzIxMywyMCBAQCB2
b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZUltYWdlCiAjZWxzZQogICAgIFdlYklt
YWdlIHdlYkltYWdlKGltYWdlKTsKICNlbmRpZgotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9h
cmQoKS0+d3JpdGVJbWFnZSh3ZWJJbWFnZSwgc291cmNlVVJMLCB0aXRsZSk7CisgICAgd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53cml0ZUltYWdlKHdlYkltYWdlLCBzb3Vy
Y2VVUkwsIHRpdGxlKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXRhZGF0YSkKIHsKLSAgICB3ZWJLaXRDbGllbnQo
KS0+Y2xpcGJvYXJkKCktPndyaXRlRGF0YSh0eXBlLCBkYXRhLCBtZXRhZGF0YSk7CisgICAgd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53cml0ZURhdGEodHlwZSwgZGF0YSwg
bWV0YWRhdGEpOwogfQogCiBIYXNoU2V0PFN0cmluZz4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRBdmFpbGFibGVUeXBlcygKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyIGJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpCiB7Ci0gICAgV2ViVmVjdG9yPFdl
YlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkQXZhaWxh
YmxlVHlwZXMoCisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkQXZhaWxhYmxlVHlwZXMoCiAgICAgICAgIHN0
YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCBjb250YWluc0ZpbGVuYW1l
cyk7CiAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVzdWx0LnNpemUoKTsgKytpKQpAQCAtMjM5LDcgKzIzOSw3IEBAIGJvb2wgUGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKFAKIHsKICAgICBXZWJTdHJpbmcgcmVzdWx0RGF0YTsK
ICAgICBXZWJTdHJpbmcgcmVzdWx0TWV0YWRhdGE7Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSB3ZWJL
aXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWREYXRhKAorICAgIGJvb2wgc3VjY2VlZGVkID0g
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkRGF0YSgKICAgICAgICAg
c3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIHR5cGUsICZyZXN1bHRE
YXRhLCAmcmVzdWx0TWV0YWRhdGEpOwogICAgIGlmIChzdWNjZWVkZWQpIHsKICAgICAgICAgZGF0
YSA9IHJlc3VsdERhdGE7CkBAIC0yNTAsNyArMjUwLDcgQEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkUmVhZERhdGEoUAogCiBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybUJyaWRnZTo6Y2xp
cGJvYXJkUmVhZEZpbGVuYW1lcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1
ZmZlcikKIHsKLSAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJLaXRDbGllbnQo
KS0+Y2xpcGJvYXJkKCktPnJlYWRGaWxlbmFtZXMoCisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4g
cmVzdWx0ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkRmlsZW5h
bWVzKAogICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7
CiAgICAgVmVjdG9yPFN0cmluZz4gY29udmVydGVkUmVzdWx0OwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQpAQCAtMzMxLDQwICszMzEsNDAgQEAgYm9vbCBQ
bGF0Zm9ybUJyaWRnZTo6Y29va2llc0VuYWJsZWQoY29ucwogCiB2b2lkIFBsYXRmb3JtQnJpZGdl
OjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewotICAgIHdlYktpdENsaWVu
dCgpLT5wcmVmZXRjaEhvc3ROYW1lKGhvc3RuYW1lKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+cHJlZmV0Y2hIb3N0TmFtZShob3N0bmFtZSk7CiB9CiAKIC8vIEZpbGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBw
YXRoKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxl
RXhpc3RzKHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5maWxlRXhpc3RzKHBhdGgpOwogfQogCiBib29sIFBsYXRmb3JtQnJpZGdlOjpk
ZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVsZXRlRmlsZShwYXRoKTsKKyAgICByZXR1cm4gd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVsZXRlRmlsZShwYXRoKTsKIH0K
IAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5k
ZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9CiAK
IGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9u
ZyBsb25nJiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0
aWVzKCktPmdldEZpbGVTaXplKHBhdGgsIHJlc3VsdCk7CisgICAgcmV0dXJuIHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEZpbGVTaXplKHBhdGgsIHJlc3VsdCk7
CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnJldmVhbEZvbGRlckluT1MoY29uc3QgU3RyaW5n
JiBwYXRoKQogewotICAgIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnJldmVhbEZv
bGRlckluT1MocGF0aCk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRp
ZXMoKS0+cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKIH0KIAogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIHJlc3Vs
dCkKIHsKICAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoIXdlYktpdENsaWVu
dCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1vZGlm
aWNhdGlvblRpbWUpKQorICAgIGlmICghd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGls
aXRpZXMoKS0+Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDx0aW1lX3Q+
KG1vZGlmaWNhdGlvblRpbWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcyLDYyICszNzIsNjIg
QEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvbgogCiBTdHJpbmcgUGxh
dGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJl
dHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kaXJlY3RvcnlOYW1lKHBhdGgp
OworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5k
aXJlY3RvcnlOYW1lKHBhdGgpOwogfQogCiBTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9u
ZW50KQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5wYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29tcG9uZW50KTsKKyAgICByZXR1cm4gd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhdGgsIGNvbXBvbmVudCk7CiB9CiAKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6Om1ha2VBbGxE
aXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5maWxlVXRpbGl0aWVzKCktPm1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKKyAgICByZXR1
cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+bWFrZUFsbERpcmVj
dG9yaWVzKHBhdGgpOwogfQogCiBTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmdldEFic29sdXRlUGF0
aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxl
VXRpbGl0aWVzKCktPmdldEFic29sdXRlUGF0aChwYXRoKTsKKyAgICByZXR1cm4gd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0QWJzb2x1dGVQYXRoKHBhdGgpOwog
fQogCiBib29sIFBsYXRmb3JtQnJpZGdlOjppc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgp
CiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmlzRGlyZWN0
b3J5KHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5pc0RpcmVjdG9yeShwYXRoKTsKIH0KIAogS1VSTCBQbGF0Zm9ybUJyaWRnZTo6Zmls
ZVBhdGhUb1VSTChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVQYXRoVG9VUkwocGF0aCk7CisgICAgcmV0dXJuIHdl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVQYXRoVG9VUkwocGF0
aCk7CiB9CiAKIFBsYXRmb3JtRmlsZUhhbmRsZSBQbGF0Zm9ybUJyaWRnZTo6b3BlbkZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gd2ViS2l0
Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+b3BlbkZpbGUocGF0aCwgbW9kZSk7CisgICAgcmV0
dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPm9wZW5GaWxlKHBh
dGgsIG1vZGUpOwogfQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMo
KS0+Y2xvc2VGaWxlKGhhbmRsZSk7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVV
dGlsaXRpZXMoKS0+Y2xvc2VGaWxlKGhhbmRsZSk7CiB9CiAKIGxvbmcgbG9uZyBQbGF0Zm9ybUJy
aWRnZTo6c2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNl
dCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
ZmlsZVV0aWxpdGllcygpLT5zZWVrRmlsZShoYW5kbGUsIG9mZnNldCwgb3JpZ2luKTsKKyAgICBy
ZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+c2Vla0ZpbGUo
aGFuZGxlLCBvZmZzZXQsIG9yaWdpbik7CiB9CiAKIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OnRydW5j
YXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KQogewot
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT50cnVuY2F0ZUZpbGUo
aGFuZGxlLCBvZmZzZXQpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Zmls
ZVV0aWxpdGllcygpLT50cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQpOwogfQogCiBpbnQgUGxh
dGZvcm1CcmlkZ2U6OnJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5yZWFkRnJvbUZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOworICAgIHJldHVy
biB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5yZWFkRnJvbUZpbGUo
aGFuZGxlLCBkYXRhLCBsZW5ndGgpOwogfQogCiBpbnQgUGxhdGZvcm1CcmlkZ2U6OndyaXRlVG9G
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPndyaXRl
VG9GaWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5n
dGgpOwogfQogCiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzUsNyArNDM1LDcgQEAgaW50
IFBsYXRmb3JtQnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9ybQogI2lmIE9TKFdJTkRPV1MpCiBi
b29sIFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKEhGT05UIGZvbnQpCiB7Ci0gICAg
V2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCk7
CisgICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNh
bmRib3hTdXBwb3J0KCk7CiAKICAgICAvLyBpZiB0aGVyZSBpcyBubyBzYW5kYm94LCB0aGVuIHdl
IGNhbiBhc3N1bWUgdGhlIGZvbnQKICAgICAvLyB3YXMgYWJsZSB0byBiZSBsb2FkZWQgc3VjY2Vz
c2Z1bGx5IGFscmVhZHkKQEAgLTQ0Niw3ICs0NDYsNyBAQCBib29sIFBsYXRmb3JtQnJpZGdlOjpl
bnN1cmVGb250TG9hZGVkKEhGCiAjaWYgT1MoREFSV0lOKQogYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
bG9hZEZvbnQoTlNGb250KiBzcmNGb250LCBBVFNGb250Q29udGFpbmVyUmVmKiBjb250YWluZXIs
IHVpbnQzMl90KiBmb250SUQpCiB7Ci0gICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0
Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCk7CisgICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0g
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNhbmRib3hTdXBwb3J0KCk7CiAgICAgaWYgKHNzKQog
ICAgICAgICByZXR1cm4gc3MtPmxvYWRGb250KHNyY0ZvbnQsIGNvbnRhaW5lciwgZm9udElEKTsK
IApAQCAtNDYxLDggKzQ2MSw4IEBAIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OmxvYWRGb250KE5TRm9u
dCogc3IKICNlbGlmIE9TKFVOSVgpCiBTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmdldEZvbnRGYW1p
bHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFj
dGVycywgY29uc3QgY2hhciogcHJlZmVycmVkTG9jYWxlKQogewotICAgIGlmICh3ZWJLaXRDbGll
bnQoKS0+c2FuZGJveFN1cHBvcnQoKSkKLSAgICAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5z
YW5kYm94U3VwcG9ydCgpLT5nZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBu
dW1DaGFyYWN0ZXJzLCBwcmVmZXJyZWRMb2NhbGUpOworICAgIGlmICh3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJuIHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhj
aGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzLCBwcmVmZXJyZWRMb2NhbGUpOwogCiAgICAgV2ViQ1N0
cmluZyBmYW1pbHkgPSBXZWJGb250SW5mbzo6ZmFtaWx5Rm9yQ2hhcnMoY2hhcmFjdGVycywgbnVt
Q2hhcmFjdGVycywgcHJlZmVycmVkTG9jYWxlKTsKICAgICBpZiAoZmFtaWx5LmRhdGEoKSkKQEAg
LTQ3NSw4ICs0NzUsOCBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0
CiB7CiAgICAgV2ViRm9udFJlbmRlclN0eWxlIHN0eWxlOwogCi0gICAgaWYgKHdlYktpdENsaWVu
dCgpLT5zYW5kYm94U3VwcG9ydCgpKQotICAgICAgICB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1
cHBvcnQoKS0+Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5
bGUpOworICAgIGlmICh3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQoKSkK
KyAgICAgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNhbmRib3hTdXBwb3J0KCktPmdldFJl
bmRlclN0eWxlRm9yU3RyaWtlKGZvbnQsIHNpemVBbmRTdHlsZSwgJnN0eWxlKTsKICAgICBlbHNl
CiAgICAgICAgIFdlYkZvbnRJbmZvOjpyZW5kZXJTdHlsZUZvclN0cmlrZShmb250LCBzaXplQW5k
U3R5bGUsICZzdHlsZSk7CiAKQEAgLTQ4OCwyNyArNDg4LDI3IEBAIHZvaWQgUGxhdGZvcm1Ccmlk
Z2U6OmdldFJlbmRlclN0eWxlRm9yU3QKIAogUGxhdGZvcm1GaWxlSGFuZGxlIFBsYXRmb3JtQnJp
ZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNp
cmVkRmxhZ3MpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZU9wZW5GaWxl
KFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIGRlc2lyZWRGbGFncyk7CisgICAgcmV0dXJuIHdlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5kYXRhYmFzZU9wZW5GaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFt
ZSksIGRlc2lyZWRGbGFncyk7CiB9CiAKIGludCBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VEZWxl
dGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpcikKIHsKLSAgICBy
ZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlRGVsZXRlRmlsZShXZWJTdHJpbmcodmZzRmls
ZU5hbWUpLCBzeW5jRGlyKTsKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmRh
dGFiYXNlRGVsZXRlRmlsZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpLCBzeW5jRGlyKTsKIH0KIAog
bG9uZyBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJp
bmcmIHZmc0ZpbGVOYW1lKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VH
ZXRGaWxlQXR0cmlidXRlcyhXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKKyAgICByZXR1cm4gd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoV2ViU3RyaW5n
KHZmc0ZpbGVOYW1lKSk7CiB9CiAKIGxvbmcgbG9uZyBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VH
ZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKQogewotICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+ZGF0YWJhc2VHZXRGaWxlU2l6ZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsK
KyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmRhdGFiYXNlR2V0RmlsZVNpemUo
V2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSk7CiB9CiAKIGxvbmcgbG9uZyBQbGF0Zm9ybUJyaWRnZTo6
ZGF0YWJhc2VHZXRTcGFjZUF2YWlsYWJsZUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIpCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldFNwYWNl
QXZhaWxhYmxlRm9yT3JpZ2luKG9yaWdpbklkZW50aWZpZXIpOworICAgIHJldHVybiB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+ZGF0YWJhc2VHZXRTcGFjZUF2YWlsYWJsZUZvck9yaWdpbihvcmln
aW5JZGVudGlmaWVyKTsKIH0KIAogLy8gSW5kZXhlZCBEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTI0LDcgKzUy
NCw3IEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2UKIHsKICAgICBX
ZWJWZWN0b3I8V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlPiB3ZWJWYWx1ZXMgPSB2YWx1ZXM7CiAg
ICAgV2ViVmVjdG9yPFdlYklEQktleT4gd2ViS2V5czsKLSAgICB3ZWJLaXRDbGllbnQoKS0+Y3Jl
YXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh3ZWJWYWx1ZXMsIGtleVBh
dGgsIHdlYktleXMpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVJREJLZXlz
RnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHdlYlZhbHVlcywga2V5UGF0aCwgd2ViS2V5
cyk7CiAKICAgICBzaXplX3Qgd2ViS2V5c1NpemUgPSB3ZWJLZXlzLnNpemUoKTsKICAgICBrZXlz
LnJlc2VydmVDYXBhY2l0eSh3ZWJLZXlzU2l6ZSk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBQ
bGF0Zm9ybUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZQogCiBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gUGxhdGZvcm1CcmlkZ2U6OmluamVjdElEQktleUludG9TZXJpYWxpemVk
VmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7Ci0gICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5pbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGtleSwgdmFsdWUsIGtl
eVBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+aW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShrZXksIHZhbHVlLCBrZXlQYXRoKTsKIH0KIAogLy8gS2V5Z2Vu
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtNTQyLDcgKzU0Miw3IEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBQbGF0Zm8KIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6c2lnbmVkUHVibGljS2V5
QW5kQ2hhbGxlbmdlU3RyaW5nKAogICAgIHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3Ry
aW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgsCisg
ICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmcoa2V5U2l6ZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0cmluZyhjaGFsbGVuZ2UpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYlVSTCh1cmwpKTsKIH0KQEAgLTU1MSw3ICs1NTEsNyBAQCBTdHJpbmcgUGxhdGZvcm1Ccmlk
Z2U6OnNpZ25lZFB1YmxpY0tleUFuCiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWRE
ZWZhdWx0TGFuZ3VhZ2UoKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGVmYXVsdExv
Y2FsZSgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGVmYXVsdExvY2Fs
ZSgpOwogfQogCiAvLyBMYXlvdXRUZXN0TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NjUsNDAgKzU2NSw0MCBAQCBi
b29sIFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpCiAKIGJvb2wgUGxhdGZvcm1Ccmlk
Z2U6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewot
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSW1hZ2VN
SU1FVHlwZShtaW1lVHlwZSkKKyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1p
bWVSZWdpc3RyeSgpLT5zdXBwb3J0c0ltYWdlTUlNRVR5cGUobWltZVR5cGUpCiAgICAgICAgICE9
IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKIGJvb2wgUGxhdGZvcm1Ccmlk
Z2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
CiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNK
YXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUpCisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNKYXZhU2NyaXB0TUlNRVR5cGUobWltZVR5
cGUpCiAgICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKIGJv
b2wgUGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5
KCktPnN1cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKKyAgICByZXR1cm4gd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c05vbkltYWdlTUlNRVR5
cGUobWltZVR5cGUpCiAgICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7
CiB9CiAKIFN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3Qg
U3RyaW5nJiBleHRlbnNpb24pCiB7Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVn
aXN0cnkoKS0+bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICByZXR1cm4gd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZvckV4dGVuc2lv
bihleHRlbnNpb24pOwogfQogCiBTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OndlbGxLbm93bk1pbWVU
eXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewotICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPndlbGxLbm93bk1pbWVUeXBlRm9yRXh0ZW5z
aW9uKGV4dGVuc2lvbik7CisgICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5taW1l
UmVnaXN0cnkoKS0+d2VsbEtub3duTWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKIH0K
IAogU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5taW1l
VHlwZUZyb21GaWxlKHBhdGgpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBlRnJvbUZpbGUocGF0aCk7CiB9CiAKIFN0cmluZyBQbGF0
Zm9ybUJyaWRnZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKIHsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5w
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgcmV0dXJuIHdlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+cHJlZmVycmVkRXh0ZW5zaW9uRm9y
TUlNRVR5cGUobWltZVR5cGUpOwogfQogCiAvLyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDYs
NyArNjA2LDcgQEAgU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpbwogYm9v
bCBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyhib29sIHJlZnJlc2gsIFZlY3RvcjxQbHVnaW5JbmZv
PiogcmVzdWx0cykKIHsKICAgICBXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwgYnVpbGRlcihyZXN1
bHRzKTsKLSAgICB3ZWJLaXRDbGllbnQoKS0+Z2V0UGx1Z2luTGlzdChyZWZyZXNoLCAmYnVpbGRl
cik7CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmdldFBsdWdpbkxpc3QocmVmcmVzaCwg
JmJ1aWxkZXIpOwogICAgIHJldHVybiB0cnVlOyAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIG5lZWQg
Zm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGEgdmFsdWUuCiB9CiAKQEAgLTYyMiw3ICs2MjIs
NyBAQCBOUE9iamVjdCogUGxhdGZvcm1CcmlkZ2U6OnBsdWdpblNjcmlwdGFiCiAKIFBhc3NSZWZQ
dHI8SW1hZ2U+IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0
IGNoYXIqIG5hbWUpCiB7Ci0gICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRDbGll
bnQoKS0+bG9hZFJlc291cmNlKG5hbWUpOworICAgIGNvbnN0IFdlYkRhdGEmIHJlc291cmNlID0g
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmxvYWRSZXNvdXJjZShuYW1lKTsKICAgICBpZiAocmVz
b3VyY2UuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gSW1hZ2U6Om51bGxJbWFnZSgpOwogCkBA
IC02MzUsNyArNjM1LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gUGxhdGZvcm1CcmlkZ2U6OmxvYWRQ
bAogCiBQYXNzT3duUHRyPEF1ZGlvQnVzPiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVk
aW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKLSAgICBj
b25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFt
ZSk7CisgICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+bG9hZFJlc291cmNlKG5hbWUpOwogICAgIGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtNjQ1LDcgKzY0NSw3IEBAIFBhc3NPd25QdHI8
QXVkaW9CdXM+IFBsYXRmb3JtQnJpZGdlOjpsb2EKIFBhc3NPd25QdHI8QXVkaW9CdXM+IFBsYXRm
b3JtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBz
aXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKICAgICBXZWJBdWRpb0J1cyB3ZWJBdWRpb0J1czsK
LSAgICBpZiAod2ViS2l0Q2xpZW50KCktPmxvYWRBdWRpb1Jlc291cmNlKCZ3ZWJBdWRpb0J1cywg
ZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpCisgICAgaWYgKHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5sb2FkQXVkaW9SZXNvdXJjZSgmd2ViQXVkaW9CdXMsIGRhdGEsIHNpemUsIHNhbXBsZVJhdGUp
KQogICAgICAgICByZXR1cm4gd2ViQXVkaW9CdXMucmVsZWFzZSgpOwogICAgIHJldHVybiBudWxs
cHRyOwogfQpAQCAtNjU2LDUzICs2NTYsNTMgQEAgUGFzc093blB0cjxBdWRpb0J1cz4gUGxhdGZv
cm1CcmlkZ2U6OmRlYwogCiBib29sIFBsYXRmb3JtQnJpZGdlOjpzYW5kYm94RW5hYmxlZCgpCiB7
Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94RW5hYmxlZCgpOworICAgIHJldHVy
biB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2FuZGJveEVuYWJsZWQoKTsKIH0KIAogLy8gU2hh
cmVkVGltZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24odm9pZCAoKmZ1bmMpKCkpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnNldFNo
YXJlZFRpbWVyRmlyZWRGdW5jdGlvbihmdW5jKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKGZ1bmMpOwogfQogCiB2b2lkIFBsYXRmb3Jt
QnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpCiB7Ci0g
ICAgd2ViS2l0Q2xpZW50KCktPnNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGludGVydmFsKTsK
KyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwo
aW50ZXJ2YWwpOwogfQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKQog
ewotICAgIHdlYktpdENsaWVudCgpLT5zdG9wU2hhcmVkVGltZXIoKTsKKyAgICB3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+c3RvcFNoYXJlZFRpbWVyKCk7CiB9CiAKIC8vIFN0YXRzQ291bnRlcnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0
IGNoYXIqIG5hbWUpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmRlY3JlbWVudFN0YXRzQ291bnRl
cihuYW1lKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGVjcmVtZW50U3RhdHNDb3Vu
dGVyKG5hbWUpOwogfQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjppbmNyZW1lbnRTdGF0c0NvdW50
ZXIoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+aW5jcmVtZW50U3Rh
dHNDb3VudGVyKG5hbWUpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5pbmNyZW1lbnRT
dGF0c0NvdW50ZXIobmFtZSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1
c3RvbUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4
LCBpbnQgYnVja2V0Q291bnQpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUN1c3Rv
bUNvdW50cyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBidWNrZXRDb3VudCk7CisgICAgd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cyhuYW1lLCBzYW1wbGUsIG1p
biwgbWF4LCBidWNrZXRDb3VudCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3Jh
bUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZh
bHVlKQogewotICAgIHdlYktpdENsaWVudCgpLT5oaXN0b2dyYW1FbnVtZXJhdGlvbihuYW1lLCBz
YW1wbGUsIGJvdW5kYXJ5VmFsdWUpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5oaXN0
b2dyYW1FbnVtZXJhdGlvbihuYW1lLCBzYW1wbGUsIGJvdW5kYXJ5VmFsdWUpOwogfQogCiAvLyBT
dWRkZW4gVGVybWluYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0
aW9uQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnN1ZGRlblRl
cm1pbmF0aW9uQ2hhbmdlZChlbmFibGVkKTsKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGVuYWJsZWQpOwogfQogCiAvLyBUaGVtaW5nIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC03MTMsNyArNzEzLDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0
b24oCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNs
YXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHdlYktpdENsaWVu
dCgpLT50aGVtZUVuZ2luZSgpLT5wYWludEJ1dHRvbigKKyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRCdXR0b24oCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQog
CkBAIC03MjEsNyArNzIxLDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRNZW51TGlzdCgK
ICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3Np
Y1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xpZW50KCkt
PnRoZW1lRW5naW5lKCktPnBhaW50TWVudUxpc3QoCisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPnRoZW1lRW5naW5lKCktPnBhaW50TWVudUxpc3QoCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQog
CkBAIC03MjksNyArNzI5LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJB
cnJvdwogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0
ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHdlYktpdENsaWVudCgpLT50aGVt
ZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhckFycm93KAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9y
dCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhckFycm93KAogICAgICAgICBnYy0+cGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0K
IApAQCAtNzM3LDcgKzczNyw3IEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFy
VGh1bWIKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xp
ZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgd2ViS2l0UGxh
dGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVGh1bWIoCiAgICAg
ICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2lj
U3RhdGUsIHJlY3QpOwogfQogCkBAIC03NDUsNyArNzQ1LDcgQEAgdm9pZCBQbGF0Zm9ybUJyaWRn
ZTo6cGFpbnRTY3JvbGxiYXJUcmFjawogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgSW50UmVjdCYgYWxpZ25SZWN0KQogewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVu
Z2luZSgpLT5wYWludFNjcm9sbGJhclRyYWNrKAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRyYWNrKAogICAgICAgICBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0LAog
ICAgICAgICBhbGlnblJlY3QpOwogfQpAQCAtNzU0LDcgKzc1NCw3IEBAIHZvaWQgUGxhdGZvcm1C
cmlkZ2U6OnBhaW50U3BpbkJ1dHRvbigKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFy
dCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U3BpbkJ1dHRvbigK
KyAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTcGluQnV0
dG9uKAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0
ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0KIApAQCAtNzY2LDcgKzc2Niw3IEBAIHZvaWQgUGxh
dGZvcm1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAogICAgIC8vIEZhbGxiYWNrIHRvIHdoaXRlIHdo
ZW4gfGNvbG9yfCBpcyBpbnZhbGlkLgogICAgIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IgPSBjb2xv
ci5pc1ZhbGlkKCkgPyBjb2xvci5yZ2IoKSA6IENvbG9yOjp3aGl0ZTsKIAotICAgIHdlYktpdENs
aWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFRleHRGaWVsZCgKKyAgICB3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUZXh0RmllbGQoCiAgICAgICAgIGdjLT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJl
Y3QsCiAgICAgICAgIGJhY2tncm91bmRDb2xvciwgZmlsbENvbnRlbnRBcmVhLCBkcmF3RWRnZXMp
OwogfQpAQCAtNzc1LDE0ICs3NzUsMTQgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUcmFj
a2JhcigKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgd2ViS2l0Q2xp
ZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50VHJhY2tiYXIoCisgICAgd2ViS2l0UGxhdGZvcm1T
dXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50VHJhY2tiYXIoCiAgICAgICAgIGdjLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3Qp
OwogfQogCiB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKAogICAgIEdyYXBo
aWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZh
bHVlUmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcykKIHsKLSAg
ICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRQcm9ncmVzc0JhcigKKyAgICB3
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRQcm9ncmVzc0JhcigK
ICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgYmFyUmVjdCwgdmFsdWVS
ZWN0LCBkZXRlcm1pbmF0ZSwgYW5pbWF0ZWRTZWNvbmRzKTsKIH0KIApAQCAtODA1LDcgKzgwNSw3
IEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIKICNlbHNlCiAgICAg
V2ViS2l0OjpXZWJDYW52YXMqIHdlYkNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKICNl
bmRpZgotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRo
dW1iKAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNj
cm9sbGJhclRodW1iKAogICAgICAgICB3ZWJDYW52YXMsCiAgICAgICAgIHN0YXRpY19jYXN0PFdl
YlRoZW1lRW5naW5lOjpTdGF0ZT4oc3RhdGUpLAogICAgICAgICBzdGF0aWNfY2FzdDxXZWJUaGVt
ZUVuZ2luZTo6U2l6ZT4oc2l6ZSksCkBAIC05MDksNyArOTA5LDcgQEAgc3RhdGljIHZvaWQgR2V0
V2ViVGhlbWVFeHRyYVBhcmFtcyhQbGF0ZgogCiBJbnRTaXplIFBsYXRmb3JtQnJpZGdlOjpnZXRU
aGVtZVBhcnRTaXplKFRoZW1lUGFydCBwYXJ0KQogewotICAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2ViVGhlbWVQYXJ0KHBhcnQpKTsKKyAgICAgcmV0
dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5nZXRTaXplKFdlYlRo
ZW1lUGFydChwYXJ0KSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0
KApAQCAtOTE3LDcgKzkxNyw3IEBAIHZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0
KAogewogICAgIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyB3ZWJUaGVtZUV4dHJhUGFyYW1z
OwogICAgIEdldFdlYlRoZW1lRXh0cmFQYXJhbXMocGFydCwgc3RhdGUsIGV4dHJhUGFyYW1zLCAm
d2ViVGhlbWVFeHRyYVBhcmFtcyk7Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCkt
PnBhaW50KAorICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWlu
dCgKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgV2ViVGhlbWVQYXJ0
KHBhcnQpLCBXZWJUaGVtZVN0YXRlKHN0YXRlKSwgcmVjdCwgJndlYlRoZW1lRXh0cmFQYXJhbXMp
OwogfQogCkBAIC05MjcsMTIgKzkyNywxMiBAQCB2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFRo
ZW1lUGFydCgKIAogdm9pZCBQbGF0Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEJlZ2luKGNvbnN0IGNo
YXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkKIHsKLSAgICB3ZWJLaXRDbGll
bnQoKS0+dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlkLCBleHRyYSk7CisgICAgd2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCktPnRyYWNlRXZlbnRCZWdpbihuYW1lLCBpZCwgZXh0cmEpOwogfQogCiB2b2lk
IFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlk
LCBjb25zdCBjaGFyKiBleHRyYSkKIHsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEVu
ZChuYW1lLCBpZCwgZXh0cmEpOworICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50cmFjZUV2
ZW50RW5kKG5hbWUsIGlkLCBleHRyYSk7CiB9CiAKIC8vIFZpc2l0ZWQgTGlua3MgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTk0Myw3ICs5NDMsNyBAQCBMaW5rSGFzaCBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtIYXNo
CiAgICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOwogICAgIGlmICghdXJsX3V0aWw6OkNhbm9u
aWNhbGl6ZSh1cmwsIGxlbmd0aCwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkpCiAgICAgICAgIHJldHVy
biAwOyAgLy8gSW52YWxpZCBVUkxzIGFyZSB1bnZpc2l0ZWQuCi0gICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsK
KyAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnZpc2l0ZWRMaW5rSGFzaChidWZm
ZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwogfQogCiBMaW5rSGFzaCBQbGF0Zm9ybUJyaWRn
ZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsCkBAIC05NzcsMTIgKzk3NywxMiBA
QCBMaW5rSGFzaCBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSwgMCwgJmJ1ZmZlciwg
JnBhcnNlZCkpCiAgICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCByZXNvbHZlZCBVUkwuCiAK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgp
LCBidWZmZXIubGVuZ3RoKCkpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiB9CiAKIGJv
b2wgUGxhdGZvcm1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNo
KQogewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+aXNMaW5rVmlzaXRlZCh2aXNpdGVkTGlu
a0hhc2gpOworICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+aXNMaW5rVmlzaXRl
ZCh2aXNpdGVkTGlua0hhc2gpOwogfQogCiAvLyBUaGVzZSBhcmUgdGVtcG9yYXJ5IG1ldGhvZHMg
dGhhdCB0aGUgV2ViS2l0IGxheWVyIGNhbiB1c2UgdG8gY2FsbCB0byB0aGUKQEAgLTEwMDIsMTIg
KzEwMDIsMTIgQEAgdm9pZCBQbGF0Zm9ybUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeQogCiBp
bnQgUGxhdGZvcm1CcmlkZ2U6Om1lbW9yeVVzYWdlTUIoKQogewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KHdlYktpdENsaWVudCgpLT5tZW1vcnlVc2FnZU1CKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5tZW1vcnlVc2FnZU1CKCkp
OwogfQogCiBpbnQgUGxhdGZvcm1CcmlkZ2U6OmFjdHVhbE1lbW9yeVVzYWdlTUIoKQogewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHdlYktpdENsaWVudCgpLT5hY3R1YWxNZW1vcnlVc2Fn
ZU1CKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHdlYktpdFBsYXRmb3JtU3VwcG9y
dCgpLT5hY3R1YWxNZW1vcnlVc2FnZU1CKCkpOwogfQogCiBpbnQgUGxhdGZvcm1CcmlkZ2U6OnNj
cmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAkocmV2aXNp
b24gOTQyMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1
ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgog
I2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5o
IgogCkBAIC0xMjIsNyArMTIyLDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbD4gUAogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OlBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsKCkKICAgICA6IG1fbG9jYWxQb3J0KDApCiB7Ci0gICAgbV93ZWJDaGFubmVsID0gd2Vi
S2l0Q2xpZW50KCktPmNyZWF0ZU1lc3NhZ2VQb3J0Q2hhbm5lbCgpOworICAgIG1fd2ViQ2hhbm5l
bCA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVNZXNzYWdlUG9ydENoYW5uZWwoKTsK
ICAgICBpZiAobV93ZWJDaGFubmVsKQogICAgICAgICBtX3dlYkNoYW5uZWwtPnNldENsaWVudCh0
aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhh
bmRsZS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
UmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNs
dWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldlYlVSTExvYWRlci5oIgogI2luY2x1ZGUg
IldlYlVSTExvYWRlckNsaWVudC5oIgpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OnN0YXJ0KCkKICAgICAgICAgQ1JBU0goKTsKICAgICBtX3N0YXRlID0gQ29u
bmVjdGlvblN0YXRlU3RhcnRlZDsKIAotICAgIG1fbG9hZGVyID0gYWRvcHRQdHIod2ViS2l0Q2xp
ZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKKyAgICBtX2xvYWRlciA9IGFkb3B0UHRyKHdlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5jcmVhdGVVUkxMb2FkZXIoKSk7CiAgICAgQVNTRVJUKG1fbG9h
ZGVyLmdldCgpKTsKIAogICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3Qgd3JhcHBlZFJlcXVlc3Qo
bV9yZXF1ZXN0KTsKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7Ci0gICAgT3du
UHRyPFdlYlVSTExvYWRlcj4gbG9hZGVyID0gYWRvcHRQdHIod2ViS2l0Q2xpZW50KCktPmNyZWF0
ZVVSTExvYWRlcigpKTsKKyAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFB0
cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOwogICAgIEFTU0VS
VChsb2FkZXIuZ2V0KCkpOwogCiAgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0SW4o
cmVxdWVzdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TaGFyZWRXb3JrZXJS
ZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
aGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9TaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAi
V2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2VyLmgiCiAj
aW5jbHVkZSAiV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgpAQCAtMTg2LDggKzE4Niw4IEBA
IHZvaWQgU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyOjpjb25uZWN0ZWQKIAogYm9vbCBTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5Ojppc0F2YWlsYWJsZSgpCiB7Ci0gICAgLy8gQWxsb3cgdGhlIFdlYktp
dENsaWVudCB0byBkZXRlcm1pbmUgaWYgU2hhcmVkV29ya2VycyBhcmUgYXZhaWxhYmxlLgotICAg
IHJldHVybiBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCk7
CisgICAgLy8gQWxsb3cgdGhlIFdlYktpdFBsYXRmb3JtU3VwcG9ydCB0byBkZXRlcm1pbmUgaWYg
U2hhcmVkV29ya2VycyBhcmUgYXZhaWxhYmxlLgorICAgIHJldHVybiBXZWJLaXQ6OndlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCk7CiB9CiAKIHN0YXRpYyBX
ZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpEb2N1bWVudElEIGdldElkKHZvaWQqIGRvY3VtZW50
KQpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Y29ubmVj
dChQYXMKIHsKICAgICAvLyBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGFibGUgdW5sZXNzIHRoZXJl
J3MgYSBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5IGZvcgogICAgIC8vIHRoaXMgY29udGV4dCAoc2lu
Y2UgaXNBdmFpbGFibGUoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsKS4KLSAgICBBU1NFUlQo
V2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+c2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpKTsKKyAgICBB
U1NFUlQoV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2hhcmVkV29ya2VyUmVwb3Np
dG9yeSgpKTsKIAogICAgIC8vIE5vIG5lc3RlZCB3b3JrZXJzIChmb3Igbm93KSAtIGNvbm5lY3Qo
KSBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBkb2N1bWVudCBjb250ZXh0LgogICAgIEFTU0VS
VCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKQEAgLTIx
NSw3ICsyMTUsNyBAQCB2b2lkIFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3QoUGFzCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXZWJLaXQ6OndlYktpdENsaWVudCgpLT5zaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5KCktPmFkZFNoYXJlZFdvcmtlcigKKyAgICBXZWJLaXQ6OndlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCktPmFkZFNoYXJlZFdv
cmtlcigKICAgICAgICAgd2ViV29ya2VyLmdldCgpLCBnZXRJZChkb2N1bWVudCkpOwogCiAgICAg
Ly8gVGhlIGxvYWRlciBvYmplY3QgbWFuYWdlcyBpdHMgb3duIGxpZmVjeWNsZSAoYW5kIHRoZSBs
aWZlY3ljbGVzIG9mIHRoZSB0d28gd29ya2VyIG9iamVjdHMpLgpAQCAtMjI2LDcgKzIyNiw3IEBA
IHZvaWQgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Y29ubmVjdChQYXMKIAogdm9pZCBTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5Ojpkb2N1bWVudERldGFjaGVkKERvY3VtZW50KiBkb2N1bWVudCkKIHsK
LSAgICBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5KiByZXBvID0gV2ViS2l0Ojp3ZWJLaXRDbGll
bnQoKS0+c2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpOworICAgIFdlYlNoYXJlZFdvcmtlclJlcG9z
aXRvcnkqIHJlcG8gPSBXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5KCk7CiAgICAgaWYgKHJlcG8pCiAgICAgICAgIHJlcG8tPmRvY3VtZW50RGV0
YWNoZWQoZ2V0SWQoZG9jdW1lbnQpKTsKIApAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgU2hhcmVk
V29ya2VyUmVwb3NpdG9yeTo6ZG9jdW1lbnREZXQKIAogYm9vbCBTaGFyZWRXb3JrZXJSZXBvc2l0
b3J5OjpoYXNTaGFyZWRXb3JrZXJzKERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICBXZWJTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5KiByZXBvID0gV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+c2hhcmVk
V29ya2VyUmVwb3NpdG9yeSgpOworICAgIFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkqIHJlcG8g
PSBXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zaGFyZWRXb3JrZXJSZXBvc2l0b3J5
KCk7CiAgICAgcmV0dXJuIHJlcG8gJiYgcmVwby0+aGFzU2hhcmVkV29ya2VycyhnZXRJZChkb2N1
bWVudCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Tb2NrZXRTdHJl
YW1IYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Nv
Y2tldFN0cmVhbUhhbmRsZS5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQAogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgogI2luY2x1
ZGUgIldlYkRhdGEuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGll
bnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJT
b2NrZXRTdHJlYW1IYW5kbGUuaCIKICNpbmNsdWRlICJXZWJTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKQEAgLTg5LDcgKzg5LDcgQEAgU29ja2V0U3RyZWFt
SGFuZGxlSW50ZXJuYWw6On5Tb2NrZXRTdHJlYQogCiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlu
dGVybmFsOjpjb25uZWN0KGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBtX3NvY2tldCA9IGFkb3B0
UHRyKHdlYktpdENsaWVudCgpLT5jcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUoKSk7CisgICAgbV9z
b2NrZXQgPSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y3JlYXRlU29ja2V0U3Ry
ZWFtSGFuZGxlKCkpOwogICAgIExPRyhOZXR3b3JrLCAiY29ubmVjdCIpOwogICAgIEFTU0VSVCht
X3NvY2tldC5nZXQoKSk7CiAgICAgbV9zb2NrZXQtPmNvbm5lY3QodXJsLCB0aGlzKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VFdmVudERpc3BhdGNoZXJDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlRXZlbnREaXNwYXRjaGVyQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKIAog
I2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUg
IldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1
ZGUgIldlYlVSTC5oIgogCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2goY28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewogICAgIEFTU0VS
VCghc291cmNlRnJhbWUpOyAgLy8gU2FkLCBidXQgdHJ1ZS4KLSAgICBXZWJLaXQ6OndlYktpdENs
aWVudCgpLT5kaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgb3Jp
Z2luLT50b1N0cmluZygpLCBXZWJLaXQ6OldlYlVSTCgpLCBzdG9yYWdlVHlwZSA9PSBMb2NhbFN0
b3JhZ2UpOworICAgIFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmRpc3BhdGNoU3Rv
cmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBvcmlnaW4tPnRvU3RyaW5nKCksIFdl
YktpdDo6V2ViVVJMKCksIHN0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3Jh
Z2VOYW1lc3BhY2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU3RvcmFnZU5hbWVzcGFjZVByb3h5LmNwcAkocmV2aXNpb24gOTQyMTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJTdG9yYWdlQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVk
ZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAj
aW5jbHVkZSAiV2ViU3RvcmFnZU5hbWVzcGFjZS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgog
I2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6
OmxvY2FsU3RvcmFnZU5hbWVzcGFjZShjb25zdCBTdHJpbmcmIHBhdGgsIHVuc2lnbmVkIHF1b3Rh
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZVByb3h5KFdlYktp
dDo6d2ViS2l0Q2xpZW50KCktPmNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZShwYXRoLCBxdW90
YSksIExvY2FsU3RvcmFnZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVz
cGFjZVByb3h5KFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZUxvY2FsU3Rv
cmFnZU5hbWVzcGFjZShwYXRoLCBxdW90YSksIExvY2FsU3RvcmFnZSkpOwogfQogCiBQYXNzUmVm
UHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6OnNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlKFBhZ2UqIHBhZ2UsIHVuc2lnbmVkIHF1b3RhKQpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViS2l0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJLaXQuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYktpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktp
dFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5o
IgogI2luY2x1ZGUgIldlYlNvY2tldC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eS5oIgpAQCAtNTQsMjYgKzU0LDI2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gRG9p
bmcgc28gbWF5IGNhdXNlIGhhcmQgdG8gcmVwcm9kdWNlIGNyYXNoZXMuCiBzdGF0aWMgYm9vbCBz
X3dlYktpdEluaXRpYWxpemVkID0gZmFsc2U7CiAKLXN0YXRpYyBXZWJLaXRDbGllbnQqIHNfd2Vi
S2l0Q2xpZW50ID0gMDsKK3N0YXRpYyBXZWJLaXRQbGF0Zm9ybVN1cHBvcnQqIHNfd2ViS2l0UGxh
dGZvcm1TdXBwb3J0ID0gMDsKIHN0YXRpYyBib29sIHNfbGF5b3V0VGVzdE1vZGUgPSBmYWxzZTsK
IAogc3RhdGljIGJvb2wgZ2VuZXJhdGVFbnRyb3B5KHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6
ZV90IGxlbmd0aCkKIHsKLSAgICBpZiAoc193ZWJLaXRDbGllbnQpIHsKLSAgICAgICAgc193ZWJL
aXRDbGllbnQtPmNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGJ1ZmZlciwgbGVuZ3RoKTsK
KyAgICBpZiAoc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpIHsKKyAgICAgICAgc193ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQtPmNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGJ1ZmZlciwgbGVuZ3Ro
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBpbml0aWFsaXplKFdlYktpdENsaWVudCogd2ViS2l0Q2xpZW50KQordm9pZCBpbml0aWFs
aXplKFdlYktpdFBsYXRmb3JtU3VwcG9ydCogd2ViS2l0UGxhdGZvcm1TdXBwb3J0KQogewogICAg
IEFTU0VSVCghc193ZWJLaXRJbml0aWFsaXplZCk7CiAgICAgc193ZWJLaXRJbml0aWFsaXplZCA9
IHRydWU7CiAKLSAgICBBU1NFUlQod2ViS2l0Q2xpZW50KTsKLSAgICBBU1NFUlQoIXNfd2ViS2l0
Q2xpZW50KTsKLSAgICBzX3dlYktpdENsaWVudCA9IHdlYktpdENsaWVudDsKKyAgICBBU1NFUlQo
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KTsKKyAgICBBU1NFUlQoIXNfd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KTsKKyAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IHdlYktpdFBsYXRmb3JtU3VwcG9y
dDsKIAogICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKQEAgLTk1LDE0ICs5NSwyMSBAQCB2b2lkIGluaXRpYWxpemUoV2ViS2l0
Q2xpZW50KiB3ZWJLaXRDbGllCiAKIHZvaWQgc2h1dGRvd24oKQogewotICAgIHNfd2ViS2l0Q2xp
ZW50ID0gMDsKKyAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IDA7CiB9CiAKLVdlYktpdENs
aWVudCogd2ViS2l0Q2xpZW50KCkKK1dlYktpdFBsYXRmb3JtU3VwcG9ydCogd2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCkKIHsKLSAgICByZXR1cm4gc193ZWJLaXRDbGllbnQ7CisgICAgcmV0dXJuIHNf
d2ViS2l0UGxhdGZvcm1TdXBwb3J0OwogfQogCisjaWZuZGVmIFdFQktJVF9SRU5BTUVfV0VCS0lU
X0NMSUVOVAorV2ViS2l0UGxhdGZvcm1TdXBwb3J0KiB3ZWJLaXRDbGllbnQoKQoreworICAgIHJl
dHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKTsKK30KKyNlbmRpZgorCiB2b2lkIHNldExheW91
dFRlc3RNb2RlKGJvb2wgdmFsdWUpCiB7CiAgICAgc19sYXlvdXRUZXN0TW9kZSA9IHZhbHVlOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBs
YXllckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUgIldl
YkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVu
dC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYk1l
ZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiV2Vi
TWltZVJlZ2lzdHJ5LmgiCkBAIC02MjcsOCArNjI3LDcgQEAgdm9pZCBXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OmdldFN1cHBvcgogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBXZWJNZWRpYVBs
YXllckNsaWVudEltcGw6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgY29kZWNzKQogewotICAgIFdlYk1pbWVSZWdpc3RyeTo6U3VwcG9ydHNU
eXBlIHN1cHBvcnRzVHlwZSA9Ci0gICAgICAgIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnko
KS0+c3VwcG9ydHNNZWRpYU1JTUVUeXBlKHR5cGUsIGNvZGVjcyk7CisgICAgV2ViTWltZVJlZ2lz
dHJ5OjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkt
Pm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c01lZGlhTUlNRVR5cGUodHlwZSwgY29kZWNzKTsKIAog
ICAgIHN3aXRjaCAoc3VwcG9ydHNUeXBlKSB7CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3Bw
CShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiV2ViSW5wdXRFdmVudC5oIgogI2luY2x1ZGUgIldlYklucHV0RXZlbnRDb252ZXJzaW9u
LmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAj
aW5jbHVkZSAiV2ViUmVjdC5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgpAQCAtMjcwLDcgKzI3
MCw3IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6Y29weSgpCiAgICAgaWYgKCFtX3dl
YlBsdWdpbi0+aGFzU2VsZWN0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdlYktpdENs
aWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVIVE1MKG1fd2ViUGx1Z2luLT5zZWxlY3Rpb25Bc01h
cmt1cCgpLCBXZWJVUkwoKSwgbV93ZWJQbHVnaW4tPnNlbGVjdGlvbkFzVGV4dCgpLCBmYWxzZSk7
CisgICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53cml0ZUhUTUwobV93
ZWJQbHVnaW4tPnNlbGVjdGlvbkFzTWFya3VwKCksIFdlYlVSTCgpLCBtX3dlYlBsdWdpbi0+c2Vs
ZWN0aW9uQXNUZXh0KCksIGZhbHNlKTsKIH0KIAogV2ViRWxlbWVudCBXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOjplbGVtZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAJKHJldmlzaW9uIDk0MjExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAKICNp
bmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNp
b24uaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNp
bmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXll
ckFjdGlvbi5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJQbHVnaW4uaCIK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVu
dEltcGwuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYldvcmtlckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
CiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIK
ICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5u
ZWwuaCIKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDIxMSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIldlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVdyaXRlci5oIgogI2luY2x1
ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktp
dFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKICNpbmNsdWRl
ICJXb3JrZXJBc3luY0ZpbGVXcml0ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgZmlsZVN5c3RlbU9wZXJh
dGlvbnNNbwogV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5
c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgcm9vdFVSTCwgYm9vbCBzeW5j
aHJvbm91cykKICAgICA6IEFzeW5jRmlsZVN5c3RlbSh0eXBlKQogICAgICwgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJL
aXRDbGllbnQoKS0+ZmlsZVN5c3RlbSgpKQorICAgICwgbV93ZWJGaWxlU3lzdGVtKHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5maWxlU3lzdGVtKCkpCiAgICAgLCBtX3dvcmtlckNvbnRleHQoc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpKQogICAgICwgbV9zeW5jaHJvbm91cyhz
eW5jaHJvbm91cykKICAgICAsIG1fZmlsZXN5c3RlbVJvb3RVUkwocm9vdFVSTCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVXcml0ZXJDYWxsYmFja3NCcmlkZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVX
cml0ZXJDYWxsYmFja3NCcmlkZ2UuY3BwCShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVXcml0ZXJDYWxsYmFja3NCcmlkZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbS5oIgog
I2luY2x1ZGUgIldlYkZpbGVXcml0ZXIuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRl
ICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNp
bmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBXb3Jr
ZXJGaWxlV3JpdGVyQ2FsbGJhY2tzQnJpZGdlOjphYgogdm9pZCBXb3JrZXJGaWxlV3JpdGVyQ2Fs
bGJhY2tzQnJpZGdlOjppbml0T25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPFdvcmtlckZpbGVXcml0ZXJDYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3Qg
S1VSTCYgcGF0aCkKIHsKICAgICBBU1NFUlQoIWJyaWRnZS0+bV93cml0ZXIpOwotICAgIGJyaWRn
ZS0+bV93cml0ZXIgPSBhZG9wdFB0cih3ZWJLaXRDbGllbnQoKS0+ZmlsZVN5c3RlbSgpLT5jcmVh
dGVGaWxlV3JpdGVyKHBhdGgsIGJyaWRnZS5nZXQoKSkpOworICAgIGJyaWRnZS0+bV93cml0ZXIg
PSBhZG9wdFB0cih3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVN5c3RlbSgpLT5jcmVhdGVG
aWxlV3JpdGVyKHBhdGgsIGJyaWRnZS5nZXQoKSkpOwogfQogCiB2b2lkIFdvcmtlckZpbGVXcml0
ZXJDYWxsYmFja3NCcmlkZ2U6OnNodXRkb3duT25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVXcml0ZXJDYWxsYmFja3NCcmlkZ2U+IGJyaWRn
ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3Bw
CShyZXZpc2lvbiA5NDIxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxs
VGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8YmFz
ZS90ZXN0L3Rlc3Rfc3VpdGUuaD4KIAogI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldl
YktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1
ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CiAKICNpZiBkZWZpbmVkKFdFQktJ
VF9ETExfVU5JVFRFU1QpCg==
</data>
<flag name="review"
          id="102070"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="102078"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>