<?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>67349</bug_id>
          
          <creation_ts>2011-08-31 17:51:30 -0700</creation_ts>
          <short_desc>[Chromium] Rename PlatformBridge to PlatformSupport</short_desc>
          <delta_ts>2011-08-31 23:22:40 -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>460123</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 17:51:30 -0700</bug_when>
    <thetext>[Chromium] Rename PlatformBridge to PlatformSupport</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460124</commentid>
    <comment_count>1</comment_count>
      <attachid>105872</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 17:53:07 -0700</bug_when>
    <thetext>Created attachment 105872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460126</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 17:57:01 -0700</bug_when>
    <thetext>Attachment 105872 did not pass style-queue:

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

Source/WebCore/platform/qt/PlatformSupport.h:75:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/PlatformSupport.h:76:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/qt/PlatformSupport.h:91:  The parameter name &quot;npp&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 64 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>460161</commentid>
    <comment_count>3</comment_count>
      <attachid>105872</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 19:04:47 -0700</bug_when>
    <thetext>Comment on attachment 105872
Patch

Attachment 105872 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9582002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460246</commentid>
    <comment_count>4</comment_count>
      <attachid>105872</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 23:12:13 -0700</bug_when>
    <thetext>Comment on attachment 105872
Patch

Attachment 105872 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9570900</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460254</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-31 23:22:40 -0700</bug_when>
    <thetext>Committed r94275: &lt;http://trac.webkit.org/changeset/94275&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105872</attachid>
            <date>2011-08-31 17:53:07 -0700</date>
            <delta_ts>2011-08-31 23:12:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67349-20110831175306.patch</filename>
            <type>text/plain</type>
            <size>203227</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MjU3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAzIEBACisyMDExLTA4LTMxICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW5hbWUgUGxh
dGZvcm1CcmlkZ2UgdG8gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbWF0Y2hlcyB0aGUgV2ViS2l0UGxhdGZvcm1TdXBw
b3J0IGVtYmVkZGVyIEFQSS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcDoKKyAgICAg
ICAgKF9OUE5fRXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0
SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RmF0YWxFcnJvckluVjgpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmhhbmRsZU91dE9mTWVt
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhpc3RvZ3Jh
bUVudW1lcmF0aW9uKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2F1
ZGlvL2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1
c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVj
dDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0U2VxdWVuY2VOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojpjb250YWluc0ZpbGVu
YW1lcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0
QXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpn
ZXRBc0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGVsZXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXZlYWxGb2xkZXJJbk9TKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VBbGxEaXJlY3Rv
cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3NlRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZWVrRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjp0cnVuY2F0ZUZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6cmVhZEZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVG9GaWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtRGVmYXVsdExhbmd1YWdlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZp
c2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdp
c3RyeUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6Omdl
dE1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0
cnk6OmdldFdlbGxLbm93bk1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFT
Y3JpcHRNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bh
c3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0
ZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmQ6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpw
bGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlbkRlcHRoUGVyQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2No
cm9tZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRm
b3JtU3VwcG9ydC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QbGF0Zm9ybUJyaWRnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdl
bmVyYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
Q2hyb21pdW1MaW51eDo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1iKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6Om1pbmltdW1U
aHVtYkxlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlVG9UaGVtZVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNjcm9s
bGJhclRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVt
V2luOjpwYWludFRyYWNrUGllY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bVdpbjo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6cGFpbnRUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZUNocm9taXVtV2luOjpidXR0b25TaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9TaGFyZWRUaW1lckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVJ
bnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpzdG9wU2hhcmVkVGltZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL1N1ZGRlblRlcm1pbmF0aW9uQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9U
cmFjZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjppbnRlcm5hbDo6U2NvcGVUcmFjZXI6OlNj
b3BlVHJhY2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVybmFsOjpTY29wZVRyYWNlcjo6flNj
b3BlVHJhY2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJQYWludGVy
OjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9j
ZXNzRm9udExvYWRpbmcubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udENhY2hlQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENvbnRhaW5z
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMb2dGb250KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRyYXdHbHlwaHNXaW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpzY3JpcHRGb250UHJvcGVydGllcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2Rl
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEJNUEdseXBocyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXJUZXh0UnVuOjp0cnlUb1ByZWxvYWRGb250KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BsYXRm
b3JtQnJpZGdlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvUGxhdGZvcm1Ccmlk
Z2VRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvUGxhdGZvcm1TdXBwb3J0
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtQnJpZGdl
LmguCisgICAgICAgICogcGxhdGZvcm0vcXQvUGxhdGZvcm1TdXBwb3J0UXQuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZVF0LmNwcC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3VwcG9ydDo6cG9wdXBzQWxsb3dlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybVN1cHBvcnQ6OnBsdWdpblNjcmlwdGFibGVPYmplY3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hy
b21pdW1Qb3NpeC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZp
bGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9jaHJvbWl1bS9QbHVn
aW5EYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQ2FjaGU6OnBsdWdp
bnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0V2ViVGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50Q2hlY2tib3gpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRDaGVja2JveFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFJhZGlv
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c2V0UmFkaW9T
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWlu
dFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRJbm5lclNwaW5CdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFByb2dy
ZXNzQmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnVzZXNUZXN0TW9kZUZv
Y3VzUmluZ0NvbG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0
QmxpbmtJbnRlcnZhbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZv
cm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
Om1lbnVMaXN0QnV0dG9uV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFRleHRGaWVsZEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAg
ICAqIHN0b3JhZ2UvY2hyb21pdW0vSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0ZSk6CisgICAg
ICAgICogc3RvcmFnZS9jaHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlh
bGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGhCYWNr
ZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZSk6CisgICAgICAgICogc3Rv
cmFnZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGFU
cmFja2VyOjpnZXREYXRhYmFzZVNpemVBbmRTcGFjZUF2YWlsYWJsZVRvT3JpZ2luKToKKwogMjAx
MS0wOC0zMSAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IGNvbXBpbGUgaXNzdWVzIHdoZW4gZW5hYmxpbmcgSEFWRShDRk5FVFdPUktfREFUQV9BUlJB
WV9DQUxMQkFDSykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk0MjQzKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIwLDEwICszMjIw
LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNo
cm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENo
cm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZFBy
aXZhdGUuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2Uu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1DdXJzb3IuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Q2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNo
cm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJv
bWl1bUd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhl
bWVDaHJvbWl1bUd0ay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9y
bVdpZGdldC5oJywKQEAgLTQyODMsMTEgKzQyODMsMTEgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9xdC9Mb2dnaW5nUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9NSU1FVHlwZVJl
Z2lzdHJ5UXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3Bw
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZS5oJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZVF0LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vcXQvUGxhdGZvcm1LZXlib2FyZEV2ZW50UXQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9xdC9QbGF0Zm9ybU1vdXNlRXZlbnRRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9QbGF0
Zm9ybVN1cHBvcnQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vcXQvUGxhdGZvcm1TdXBwb3J0
UXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9xdC9QbGF0Zm9ybVRvdWNoRXZlbnRRdC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3F0L1BsYXRmb3JtVG91Y2hQb2ludFF0LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCcsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCB2OCB7CiAgICAgaW5jbHVkZSgkJFBXRC8u
Li9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaSkKIAogICAgIFNPVVJDRVMgKz0gXAotICAgICAg
ICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZVF0LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL3F0
L1BsYXRmb3JtU3VwcG9ydFF0LmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2dlbmVyaWMvQmluZGlu
Z1NlY3VyaXR5QmFzZS5jcHAgXAogICAgICAgICBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L1dvcmxk
Q29udGV4dEhhbmRsZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBW
OE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvTlBW
OE9iamVjdC5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvTlBWOE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIk5QVjhPYmplY3QuaCIKIAotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJPd25BcnJheVB0ci5oIgpAQCAtMjc5LDcgKzI3OSw3IEBA
IGJvb2wgX05QTl9JbnZva2VEZWZhdWx0KE5QUCBucHAsIE5QT2JqZWMKIAogYm9vbCBfTlBOX0V2
YWx1YXRlKE5QUCBucHAsIE5QT2JqZWN0KiBucE9iamVjdCwgTlBTdHJpbmcqIG5wU2NyaXB0LCBO
UFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBib29sIHBvcHVwc0FsbG93ZWQgPSBQbGF0Zm9ybUJy
aWRnZTo6cG9wdXBzQWxsb3dlZChucHApOworICAgIGJvb2wgcG9wdXBzQWxsb3dlZCA9IFBsYXRm
b3JtU3VwcG9ydDo6cG9wdXBzQWxsb3dlZChucHApOwogICAgIHJldHVybiBfTlBOX0V2YWx1YXRl
SGVscGVyKG5wcCwgcG9wdXBzQWxsb3dlZCwgbnBPYmplY3QsIG5wU2NyaXB0LCByZXN1bHQpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAotI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRl
ICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCkBAIC0yNzYsNyArMjc2LDcgQEAgUGFzc1Njcmlw
dEluc3RhbmNlIFNjcmlwdENvbnRyb2xsZXI6OmNyZQogICAgIGlmICh3aWRnZXQtPmlzRnJhbWVW
aWV3KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gUGxh
dGZvcm1CcmlkZ2U6OnBsdWdpblNjcmlwdGFibGVPYmplY3Qod2lkZ2V0KTsKKyAgICBOUE9iamVj
dCogbnBPYmplY3QgPSBQbGF0Zm9ybVN1cHBvcnQ6OnBsdWdpblNjcmlwdGFibGVPYmplY3Qod2lk
Z2V0KTsKIAogICAgIGlmICghbnBPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHJldmlz
aW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWOERPTVdpbmRvd1NoZWxsLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJy
aWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiRGF0ZUV4dGVuc2lvbi5oIgogI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyB2b2lkIHJlcG9y
dEZhdGFsRXJyb3JJblY4KGNvbnN0IGMKICAgICAvLyBGSVhNRTogY2xlYW4gdXAgVjhQcm94eSBh
bmQgZGlzYWJsZSBKYXZhU2NyaXB0LgogICAgIGludCBtZW1vcnlVc2FnZU1CID0gLTE7CiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pCi0gICAgbWVtb3J5VXNhZ2VNQiA9IFBsYXRmb3JtQnJpZGdlOjph
Y3R1YWxNZW1vcnlVc2FnZU1CKCk7CisgICAgbWVtb3J5VXNhZ2VNQiA9IFBsYXRmb3JtU3VwcG9y
dDo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpOwogI2VuZGlmCiAgICAgcHJpbnRmKCJWOCBlcnJvcjog
JXMgKCVzKS4gIEN1cnJlbnQgbWVtb3J5IHVzYWdlOiAlZCBNQlxuIiwgbWVzc2FnZSwgbG9jYXRp
b24sIG1lbW9yeVVzYWdlTUIpOwogICAgIGhhbmRsZUZhdGFsRXJyb3JJblY4KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0
LmgiCiAjaW5jbHVkZSAiUmV0YWluZWRET01JbmZvLmgiCiAjaW5jbHVkZSAiUmV0YWluZWRPYmpl
Y3RJbmZvLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCkBAIC00MjEsNyArNDIxLDcgQEAgbmFt
ZXNwYWNlIHsKIGludCBnZXRNZW1vcnlVc2FnZUluTUIoKQogewogI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6bWVtb3J5VXNhZ2VNQigpOworICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6Om1lbW9yeVVzYWdlTUIoKTsKICNlbHNlCiAgICAgcmV0dXJu
IDA7CiAjZW5kaWYKQEAgLTQzMCw3ICs0MzAsNyBAQCBpbnQgZ2V0TWVtb3J5VXNhZ2VJbk1CKCkK
IGludCBnZXRBY3R1YWxNZW1vcnlVc2FnZUluTUIoKQogewogI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpOworICAg
IHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmFjdHVhbE1lbW9yeVVzYWdlTUIoKTsKICNlbHNlCiAg
ICAgcmV0dXJuIDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJv
eHkuY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBh
Z2VHcm91cC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTIzMSw3ICsyMzEsNyBA
QCBib29sIFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkKICAgICB9CiAKICNpZiBQTEFURk9S
TShDSFJPTUlVTSkKLSAgICBQbGF0Zm9ybUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeShmcmFt
ZSk7CisgICAgUGxhdGZvcm1TdXBwb3J0Ojpub3RpZnlKU091dE9mTWVtb3J5KGZyYW1lKTsKICNl
bmRpZgogCiAgICAgLy8gRGlzYWJsZSBKUy4KQEAgLTM2OCw3ICszNjgsNyBAQCB2ODo6TG9jYWw8
djg6OlZhbHVlPiBWOFByb3h5OjpldmFsdWF0ZShjCiAgICAgICAgIC8vIENvbXBpbGUgdGhlIHNj
cmlwdC4KICAgICAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IGNvZGUgPSB2OEV4dGVybmFsU3Ry
aW5nKHNvdXJjZS5zb3VyY2UoKSk7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgIFBs
YXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4oInY4LmNvbXBpbGUiLCBub2RlLCAiIik7Cisg
ICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6dHJhY2VFdmVudEJlZ2luKCJ2OC5jb21waWxlIiwgbm9k
ZSwgIiIpOwogI2VuZGlmCiAgICAgICAgIE93blB0cjx2ODo6U2NyaXB0RGF0YT4gc2NyaXB0RGF0
YSA9IHByZWNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLmNhY2hlZFNjcmlwdCgpKTsKIApAQCAt
Mzc2LDkgKzM3Niw5IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OmV2YWx1YXRlKGMK
ICAgICAgICAgLy8gMSwgd2hlcmVhcyB2OCBzdGFydHMgYXQgMC4KICAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwg
V1RGOjp0b1plcm9CYXNlZFRleHRQb3NpdGlvbihzb3VyY2Uuc3RhcnRQb3NpdGlvbigpKSwgc2Ny
aXB0RGF0YS5nZXQoKSk7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgICAgIFBsYXRmb3Jt
QnJpZGdlOjp0cmFjZUV2ZW50RW5kKCJ2OC5jb21waWxlIiwgbm9kZSwgIiIpOworICAgICAgICBQ
bGF0Zm9ybVN1cHBvcnQ6OnRyYWNlRXZlbnRFbmQoInY4LmNvbXBpbGUiLCBub2RlLCAiIik7CiAK
LSAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRCZWdpbigidjgucnVuIiwgbm9kZSwg
IiIpOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OnRyYWNlRXZlbnRCZWdpbigidjgucnVuIiwg
bm9kZSwgIiIpOwogI2VuZGlmCiAgICAgICAgIC8vIFNldCBpbmxpbmVDb2RlIHRvIHRydWUgZm9y
IDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9Tb21ldGhpbmcoKSI+CiAgICAgICAgIC8vIGFuZCBmYWxz
ZSBmb3IgPHNjcmlwdD5kb1NvbWV0aGluZzwvc2NyaXB0Pi4gV2UgbWFrZSBhIHJvdWdoIGd1ZXNz
IGF0CkBAIC0zODYsNyArMzg2LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6ZXZh
bHVhdGUoYwogICAgICAgICByZXN1bHQgPSBydW5TY3JpcHQoc2NyaXB0LCBzb3VyY2UudXJsKCku
c3RyaW5nKCkuaXNOdWxsKCkpOwogICAgIH0KICNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAgICBQ
bGF0Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEVuZCgidjgucnVuIiwgbm9kZSwgIiIpOworICAgIFBs
YXRmb3JtU3VwcG9ydDo6dHJhY2VFdmVudEVuZCgidjgucnVuIiwgbm9kZSwgIiIpOwogI2VuZGlm
CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KGNvb2tp
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA5NDI0
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRlZiBWOFByb3h5X2gKICNkZWZpbmUgVjhQcm94eV9o
CiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9y
dC5oIgogI2luY2x1ZGUgIlNoYXJlZFBlcnNpc3RlbnQuaCIKICNpbmNsdWRlICJWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlY4RE9NV2luZG93U2hlbGwuaCIKQEAgLTQ2LDcg
KzQ2LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KIAogI2lmIGRlZmlu
ZWQoRU5BQkxFX0RPTV9TVEFUU19DT1VOVEVSUykgJiYgUExBVEZPUk0oQ0hST01JVU0pCi0jZGVm
aW5lIElOQ19TVEFUUyhuYW1lKSBQbGF0Zm9ybUJyaWRnZTo6aW5jcmVtZW50U3RhdHNDb3VudGVy
KG5hbWUpCisjZGVmaW5lIElOQ19TVEFUUyhuYW1lKSBQbGF0Zm9ybVN1cHBvcnQ6OmluY3JlbWVu
dFN0YXRzQ291bnRlcihuYW1lKQogI2Vsc2UKICNkZWZpbmUgSU5DX1NUQVRTKG5hbWUpCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24g
OTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JG
cm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZEhvc3QuaCIKICNpZiAhUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiUGxhdGZvcm1Ccmlk
Z2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNlbmRpZgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGhpc3RvZ3JhbUVuCiAKICAgICBpbnQgc2FtcGxlID0gYXJnc1swXS0+VG9JbnQz
MigpLT5WYWx1ZSgpOwogICAgIGlmIChzYW1wbGUgPCBib3VuZGFyeVZhbHVlKQotICAgICAgICBQ
bGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24obmFtZSwgc2FtcGxlLCBib3VuZGFy
eVZhbHVlKTsKKyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbihu
YW1lLCBzYW1wbGUsIGJvdW5kYXJ5VmFsdWUpOwogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDk0MjQzKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCiAjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN1cHBvcnQuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzgsNyAr
MTc4LDcgQEAgYm9vbCBQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdgogewogI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQogICAgIC8vIFVzZSBDaHJvbWl1bSdzIGJ1aWx0LWluIHZpc2l0
ZWQgbGluayBkYXRhYmFzZS4KLSAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmlzTGlua1Zpc2l0
ZWQodmlzaXRlZExpbmtIYXNoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojppc0xpbmtW
aXNpdGVkKHZpc2l0ZWRMaW5rSGFzaCk7CiAjZWxzZQogICAgIGlmICghbV92aXNpdGVkTGlua3NQ
b3B1bGF0ZWQpIHsKICAgICAgICAgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQgPSB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9CdXNDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21p
dW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogCiAjaW5jbHVk
ZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IFBhc3NPd25QdHI8QXVkaW9CdXM+IEF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25z
dCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKICAgICAvLyBGSVhNRTogdGhlIHNh
bXBsZVJhdGUgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIEl0IHNob3VsZCBiZSByZW1vdmVkIGZyb20g
dGhlIEFQSS4KLSAgICBPd25QdHI8QXVkaW9CdXM+IGF1ZGlvQnVzID0gUGxhdGZvcm1CcmlkZ2U6
OmxvYWRQbGF0Zm9ybUF1ZGlvUmVzb3VyY2UobmFtZSwgc2FtcGxlUmF0ZSk7CisgICAgT3duUHRy
PEF1ZGlvQnVzPiBhdWRpb0J1cyA9IFBsYXRmb3JtU3VwcG9ydDo6bG9hZFBsYXRmb3JtQXVkaW9S
ZXNvdXJjZShuYW1lLCBzYW1wbGVSYXRlKTsKICAgICBpZiAoIWF1ZGlvQnVzLmdldCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTUxLDcgKzUxLDcgQEAgUGFzc093blB0cjxB
dWRpb0J1cz4gQXVkaW9CdXM6OmxvYWRQbGF0ZgogUGFzc093blB0cjxBdWRpb0J1cz4gY3JlYXRl
QnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6
ZSwgYm9vbCBtaXhUb01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKQogewogICAgIC8vIEZJWE1FOiB0
aGUgc2FtcGxlUmF0ZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gSXQgc2hvdWxkIGJlIHJlbW92ZWQg
ZnJvbSB0aGUgQVBJLgotICAgIE93blB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBQbGF0Zm9ybUJy
aWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSks
IGRhdGFTaXplLCBzYW1wbGVSYXRlKTsKKyAgICBPd25QdHI8QXVkaW9CdXM+IGF1ZGlvQnVzID0g
UGxhdGZvcm1TdXBwb3J0OjpkZWNvZGVBdWRpb0ZpbGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihkYXRhKSwgZGF0YVNpemUsIHNhbXBsZVJhdGUpOwogICAgIGlmICghYXVkaW9CdXMuZ2V0
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAJ
KHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAj
aW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTAzLDcgKzEwMyw3IEBAIEhhc2hTZXQ8U3Ry
aW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGUKIHsKICAgICBpZiAobV9jbGlwYm9hcmRUeXBl
ID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7CiAgICAgICAgIGJvb2wgaWdub3JlZENvbnRh
aW5zRmlsZW5hbWVzOwotICAgICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRBdmFpbGFibGVUeXBlcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIsCisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhQ
YXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZ25vcmVkQ29udGFpbnNGaWxl
bmFtZXMpOwogICAgIH0KIApAQCAtMTM0LDcgKzEzNCw3IEBAIFN0cmluZyBDaHJvbWl1bURhdGFP
YmplY3Q6OmdldERhdGEoY29uc3QKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFs
UGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CiAgICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CiAgICAgICAgICAgICAgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAgICAgICAg
U3RyaW5nIHRleHQgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVm
ZmVyKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0VtcHR5KCk7CiAgICAgICAgICAg
ICByZXR1cm4gdGV4dDsKICAgICAgICAgfQpAQCAtMTYwLDcgKzE2MCw3IEBAIFN0cmluZyBDaHJv
bWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7CiAg
ICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIFBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7CisgICAgICAg
ICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0
LCAmc291cmNlVVJMKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgp
OwogICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwogICAgICAgICB9CkBAIC0yMjgsNyArMjI4
LDcgQEAgYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgUwogCiB1aW50NjRf
dCBDaHJvbWl1bURhdGFPYmplY3Q6OmdldFNlcXVlbmNlTnVtYmVyKCkKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZEdldFNlcXVlbmNlTnVtYmVyKCk7CisgICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkR2V0U2VxdWVuY2VOdW1iZXIoKTsKIH0KIAogYm9v
bCBDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKQEAgLTIzNiw3
ICsyMzYsNyBAQCBib29sIENocm9taXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtCiAgICAg
Ym9vbCBjb250YWluc0ZpbGVuYW1lczsKICAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBi
b2FyZDo6Q29weUFuZFBhc3RlKSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBpZ25vcmVkUmVz
dWx0cyA9Ci0gICAgICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJs
ZVR5cGVzKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlciwKKyAgICAgICAgICAgIFBs
YXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKFBhc3RlYm9hcmRQcml2
YXRlOjpTdGFuZGFyZEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmNvbnRhaW5zRmlsZW5hbWVzKTsKICAgICB9IGVsc2UKICAg
ICAgICAgY29udGFpbnNGaWxlbmFtZXMgPSAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNs
dWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3RyaW5nQ2FsbGJhY2su
aCIKIApAQCAtOTEsMTMgKzkxLDEzIEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpn
ZXRBc1N0cmkKICAgICBBU1NFUlQobV9zb3VyY2UgPT0gUGFzdGVib2FyZFNvdXJjZSk7CiAgICAg
Ly8gVGhpcyBpcyB1Z2x5IGJ1dCB0aGVyZSdzIG5vIHJlYWwgYWx0ZXJuYXRpdmUuCiAgICAgaWYg
KHR5cGUoKSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBjYWxsYmFjay0+c2NoZWR1
bGVDYWxsYmFjayhtX2NvbnRleHQsIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5U
ZXh0KFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcikpOworICAgICAgICBjYWxsYmFj
ay0+c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJk
UmVhZFBsYWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodHlwZSgpID09IG1pbWVUeXBlVGV4dEhUTUwpIHsK
ICAgICAgICAgU3RyaW5nIGh0bWw7CiAgICAgICAgIEtVUkwgaWdub3JlZFNvdXJjZVVSTDsKLSAg
ICAgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRl
OjpTdGFuZGFyZEJ1ZmZlciwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMKTsKKyAgICAgICAgUGxh
dGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRh
cmRCdWZmZXIsICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCk7CiAgICAgICAgIGNhbGxiYWNrLT5z
Y2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgaHRtbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xMjMsNyArMTIzLDcgQEAgUGFzc1JlZlB0cjxCbG9iPiBEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdQogICAgICAgICAvLyBtZXRob2QgdG8gdGhlIGJsb2IgcmVnaXN0cnk7IHRoYXQgd2F5IHRo
ZSBkYXRhIGlzIG9ubHkgY29waWVkIG92ZXIKICAgICAgICAgLy8gaW50byB0aGUgcmVuZGVyZXIg
d2hlbiBpdCdzIGFjdHVhbGx5IHJlYWQsIG5vdCB3aGVuIHRoZSBibG9iIGlzCiAgICAgICAgIC8v
IGluaXRpYWxseSBjb25zdHJ1Y3RlZCkuCi0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEgPSBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRl
OjpTdGFuZGFyZEJ1ZmZlcik7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBQ
bGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRJbWFnZShQYXN0ZWJvYXJkUHJpdmF0ZTo6U3Rh
bmRhcmRCdWZmZXIpOwogICAgICAgICBSZWZQdHI8UmF3RGF0YT4gcmF3RGF0YSA9IFJhd0RhdGE6
OmNyZWF0ZSgpOwogICAgICAgICByYXdEYXRhLT5tdXRhYmxlRGF0YSgpLT5hcHBlbmQoZGF0YS0+
ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRh
ID0gQmxvYkRhdGE6OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNjMsNyArNjMsNyBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmls
ZW5hbWVDCiAgICAgICAgIGlmICh0aXRsZSkKICAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZv
cm1EcmFnRGF0YS0+dXJsVGl0bGUoKTsKICAgICB9IGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09
IENvbnZlcnRGaWxlbmFtZXMgJiYgY29udGFpbnNGaWxlcygpKSB7Ci0gICAgICAgIHVybCA9IFBs
YXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKFBsYXRmb3JtQnJpZGdlOjpnZXRBYnNvbHV0ZVBh
dGgobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKVswXSkpOworICAgICAgICB1cmwgPSBQ
bGF0Zm9ybVN1cHBvcnQ6OmZpbGVQYXRoVG9VUkwoUGxhdGZvcm1TdXBwb3J0OjpnZXRBYnNvbHV0
ZVBhdGgobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKVswXSkpOwogICAgIH0KICAgICBy
ZXR1cm4gdXJsOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRmls
ZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDg0ICszMiw4NCBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
IAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2Uu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9y
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVGaWxlKHBhdGgp
OworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUZpbGUocGF0aCk7CiB9CiAKIGJv
b2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVy
biBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CisgICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9CiAKIGJvb2wg
Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdCkKIHsKLSAg
ICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmdldEZpbGVTaXplKHBhdGgsIHJlc3VsdCk7CisgICAg
cmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKIH0KIAog
Ym9vbCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYg
cmVzdWx0KQogewotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlv
blRpbWUocGF0aCwgcmVzdWx0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZShwYXRoLCByZXN1bHQpOwogfQogCiB2b2lkIHJldmVhbEZvbGRlcklu
T1MoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIFBsYXRmb3JtQnJpZGdlOjpyZXZlYWxGb2xk
ZXJJbk9TKHBhdGgpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6cmV2ZWFsRm9sZGVySW5PUyhwYXRo
KTsKIH0KIAogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAg
IHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGlyZWN0b3J5TmFtZShwYXRoKTsKKyAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0OjpkaXJlY3RvcnlOYW1lKHBhdGgpOwogfQogCiBTdHJpbmcgcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21w
b25lbnQpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQocGF0aCwgY29tcG9uZW50KTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29tcG9uZW50KTsKIH0KIAogYm9vbCBtYWtlQWxs
RGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBQbGF0Zm9ybUJy
aWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBv
cnQ6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKIH0KIAogYm9vbCBmaWxlRXhpc3RzKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmZpbGVFeGlzdHMo
cGF0aCk7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZmlsZUV4aXN0cyhwYXRoKTsKIH0K
IAogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpvcGVuRmlsZShwYXRo
LCBtb2RlKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpvcGVuRmlsZShwYXRoLCBtb2Rl
KTsKIH0KIAogdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7Ci0g
ICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0OjpjbG9zZUZpbGUoaGFuZGxlKTsKIH0KIAogbG9uZyBsb25nIHNlZWtG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQsIEZpbGVTZWVr
T3JpZ2luIG9yaWdpbikKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNlZWtGaWxlKGhh
bmRsZSwgb2Zmc2V0LCBvcmlnaW4pOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnNlZWtG
aWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOwogfQogCiBib29sIHRydW5jYXRlRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KQogewotICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0Ojp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQpOwogfQogCiBpbnQg
cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpyZWFkRnJvbUZpbGUoaGFuZGxl
LCBkYXRhLCBsZW5ndGgpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJlYWRGcm9tRmls
ZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAKIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIHJl
dHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOwor
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YSwgbGVu
Z3RoKTsKIH0KIAogVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vTGFuZ3VhZ2VDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vTGFuZ3VhZ2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGFuZ3VhZ2VDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMYW5ndWFnZS5oIgogCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDcgKzQwLDcgQEAgU3RyaW5nIHBsYXRmb3Jt
RGVmYXVsdExhbmd1YWdlKCkKIHsKICAgICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVkRGVmYXVsdExh
bmd1YWdlOwogICAgIGlmIChjb21wdXRlZERlZmF1bHRMYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAg
ICAgIGNvbXB1dGVkRGVmYXVsdExhbmd1YWdlID0gUGxhdGZvcm1CcmlkZ2U6OmNvbXB1dGVkRGVm
YXVsdExhbmd1YWdlKCk7CisgICAgICAgIGNvbXB1dGVkRGVmYXVsdExhbmd1YWdlID0gUGxhdGZv
cm1TdXBwb3J0Ojpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpOwogICAgIHJldHVybiBjb21wdXRl
ZERlZmF1bHRMYW5ndWFnZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIExpbmtI
YXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2godXJsLCBsZW5ndGgp
OworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnZpc2l0ZWRMaW5rSGFzaCh1cmwsIGxlbmd0
aCk7CiB9CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1Ccmlk
Z2U6OnZpc2l0ZWRMaW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOworICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OnZpc2l0ZWRMaW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5
cGVSZWdpc3RyeUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjYgKzMyLDI2IEBA
CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9y
dC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogLy8gTk9URTogVW5saWtlIG90aGVyIHBvcnRzLCB3ZSBkb24ndCB1c2Ug
dGhlIHNoYXJlZCBpbXBsZW1lbnRhdGlvbiBpbgogLy8gTUlNRVR5cGVSZWdpc3RyeS5jcHAuICBJ
bnN0ZWFkLCB3ZSBuZWVkIHRvIHJvdXRlIG1vc3QgZnVuY3Rpb25zIHZpYQotLy8gdGhlIFBsYXRm
b3JtQnJpZGdlIHRvIHRoZSBlbWJlZGRlci4KKy8vIHRoZSBQbGF0Zm9ybVN1cHBvcnQgdG8gdGhl
IGVtYmVkZGVyLgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBNSU1FVHlwZVJlZ2lz
dHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcgJmV4dCkKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKGV4dCk7CisgICAgcmV0
dXJuIFBsYXRmb3JtU3VwcG9ydDo6bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0KTsKIH0KIAogI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRXZWxsS25v
d25NSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcgJmV4dCkKIHsKICAgICAvLyBUaGlz
IG1ldGhvZCBtdXN0IGJlIHRocmVhZCBzYWZlIGFuZCBzaG91bGQgbm90IGNvbnN1bHQgdGhlIE9T
L3JlZ2lzdHJ5LgotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d2VsbEtub3duTWltZVR5cGVG
b3JFeHRlbnNpb24oZXh0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojp3ZWxsS25vd25N
aW1lVHlwZUZvckV4dGVuc2lvbihleHQpOwogfQogI2VuZGlmCiAKQEAgLTYzLDcgKzYzLDcgQEAg
U3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dAogICAgIC8vIEZJWE1FOiBJ
cyB0aGlzIHJlYWxseSBuZWNlc3Nhcnk/PwogICAgIFN0cmluZyBtaW1lVHlwZSA9IHR5cGUuc3Vi
c3RyaW5nKDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlLmZpbmQoJzsnKSkpOwogCi0gICAg
U3RyaW5nIGV4dCA9IFBsYXRmb3JtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlw
ZSh0eXBlKTsKKyAgICBTdHJpbmcgZXh0ID0gUGxhdGZvcm1TdXBwb3J0OjpwcmVmZXJyZWRFeHRl
bnNpb25Gb3JNSU1FVHlwZSh0eXBlKTsKICAgICBpZiAoIWV4dC5pc0VtcHR5KCkgJiYgZXh0WzBd
ID09ICcuJykKICAgICAgICAgZXh0ID0gZXh0LnN1YnN0cmluZygxKTsKIApAQCAtODksNyArODks
NyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQCiAKIGJvb2wgTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCiB7IAotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojppc1N1cHBvcnRl
ZEltYWdlTUlNRVR5cGUobWltZVR5cGUpOwogfQogCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCkBA
IC0xMDQsMTIgKzEwNCwxMiBAQCBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNCiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gUGxh
dGZvcm1TdXBwb3J0Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShtaW1lVHlwZSk7CiB9
CiAgICAgCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6
aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpOwogfQogCiBi
b29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFz
dGVib2FyZENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogcwog
I2VuZGlmCiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2UocGxhaW5UZXh0KTsKIAotICAgIFBsYXRm
b3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjdGlvbihodG1sLCB1cmwsIHBsYWluVGV4dCwg
Y2FuU21hcnRDb3B5T3JEZWxldGUpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkV3Jp
dGVTZWxlY3Rpb24oaHRtbCwgdXJsLCBwbGFpblRleHQsIGNhblNtYXJ0Q29weU9yRGVsZXRlKTsK
IH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQp
CkBAIC05OSw5ICs5OSw5IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3Qg
U3QKICNpZiBPUyhXSU5ET1dTKQogICAgIFN0cmluZyBwbGFpblRleHQodGV4dCk7CiAgICAgcmVw
bGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHBsYWluVGV4dCk7Ci0gICAgUGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KHBsYWluVGV4dCk7CisgICAgUGxh
dGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dChwbGFpblRleHQpOwogI2Vsc2UK
LSAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQodGV4dCk7CisgICAg
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dCh0ZXh0KTsKICNlbmRpZgog
fQogCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBL
VVJMJiB1cgogICAgICAgICAgICAgdGl0bGUgPSB1cmwuaG9zdCgpOwogICAgIH0KIAotICAgIFBs
YXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTCh1cmwsIHRpdGxlKTsKKyAgICBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFdyaXRlVVJMKHVybCwgdGl0bGUpOwogfQogCiB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
dGl0bGUpCkBAIC0xNTIsMTcgKzE1MiwxNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2Uo
Tm9kZSogbm9kZSwgCiAgICAgfQogICAgIEtVUkwgdXJsID0gdXJsU3RyaW5nLmlzRW1wdHkoKSA/
IEtVUkwoKSA6IG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRy
YWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKIAotICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZUltYWdlKGJpdG1hcCwgdXJsLCB0aXRsZSk7CisgICAgUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRXcml0ZUltYWdlKGJpdG1hcCwgdXJsLCB0aXRsZSk7CiB9CiAKIGJvb2wgUGFz
dGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OmNsaXBib2FyZElzRm9ybWF0QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpXZWJTbWFydFBh
c3RlRm9ybWF0LCBtX3NlbGVjdGlvbk1vZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9u
QnVmZmVyIDogUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyKTsKKyAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJp
dmF0ZTo6V2ViU21hcnRQYXN0ZUZvcm1hdCwgbV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFBy
aXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZl
cik7CiB9CiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZyYW1lKQogewot
ICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChtX3NlbGVj
dGlvbk1vZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogUGFzdGVib2Fy
ZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpj
bGlwYm9hcmRSZWFkUGxhaW5UZXh0KG1fc2VsZWN0aW9uTW9kZSA/IFBhc3RlYm9hcmRQcml2YXRl
OjpTZWxlY3Rpb25CdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIpOwog
fQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJh
Z21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29sIGFsbG93
UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKQEAgLTE3MCwxMCArMTcwLDEwIEBAIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICBjaG9zZVBsYWluVGV4
dCA9IGZhbHNlOwogICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVy
ID0gbV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6
IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKIAotICAgIGlmIChQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkhUTUxG
b3JtYXQsIGJ1ZmZlcikpIHsKKyAgICBpZiAoUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRJc0Zv
cm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCwgYnVmZmVyKSkgewog
ICAgICAgICBTdHJpbmcgbWFya3VwOwogICAgICAgICBLVVJMIHNyY1VSTDsKLSAgICAgICAgUGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCk7
CisgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFy
a3VwLCAmc3JjVVJMKTsKIAogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPQogICAgICAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVu
dCgpLCBtYXJrdXAsIHNyY1VSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKQEAgLTE4
Miw3ICsxODIsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAg
ICAgfQogCiAgICAgaWYgKGFsbG93UGxhaW5UZXh0KSB7Ci0gICAgICAgIFN0cmluZyBtYXJrdXAg
PSBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAg
ICBTdHJpbmcgbWFya3VwID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0
KGJ1ZmZlcik7CiAgICAgICAgIGlmICghbWFya3VwLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
Y2hvc2VQbGFpblRleHQgPSB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9QbGF0Zm9ybUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtQnJpZGdlLmgJKHJldmlzaW9uIDk0MjQzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw0MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsYXRmb3JtQnJpZGdlX2gKLSNkZWZpbmUg
UGxhdGZvcm1CcmlkZ2VfaAotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSNpbmNsdWRlICJBdWRp
b0J1cy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiSW1h
Z2VTb3VyY2UuaCIKLSNpbmNsdWRlICJMaW5rSGFzaC5oIgotI2luY2x1ZGUgIlBhc3NSZWZQdHIu
aCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGEu
aCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IE5QT2JqZWN0IE5QT2Jq
ZWN0OwotdHlwZWRlZiBzdHJ1Y3QgX05QUCBOUFBfdDsKLXR5cGVkZWYgTlBQX3QqIE5QUDsKLQot
I2lmIE9TKERBUldJTikKLXR5cGVkZWYgc3RydWN0IENHRm9udCogQ0dGb250UmVmOwotdHlwZWRl
ZiB1aW50cHRyX3QgQVRTRm9udENvbnRhaW5lclJlZjsKLSNpZmRlZiBfX09CSkNfXwotQGNsYXNz
IE5TRm9udDsKLSNlbHNlCi1jbGFzcyBOU0ZvbnQ7Ci0jZW5kaWYKLSNlbmRpZiAvLyBPUyhEQVJX
SU4pCi0KLSNpZiBPUyhXSU5ET1dTKQotdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDbGlwYm9hcmREYXRhOwotY2xh
c3MgQ29sb3I7Ci1jbGFzcyBDdXJzb3I7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZyYW1lOwot
Y2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOwotY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW07Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSW50UmVjdDsK
LWNsYXNzIEtVUkw7Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFzcyBXaWRnZXQ7
Ci0KLXN0cnVjdCBDb29raWU7Ci1zdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwotCi0vLyBBbiBpbnRl
cmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciwgd2hpY2ggaGFzIHRoZSBhYmlsaXR5IHRvIGFu
c3dlcgotLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4uCi0KLWNsYXNz
IFBsYXRmb3JtQnJpZGdlIHsKLXB1YmxpYzoKLSAgICAvLyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIHN0YXRp
YyB2b2lkIGNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNv
bnN0IFZlY3RvcjxjaGFyPiYpOwotCi0gICAgLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgYm9v
bCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
Rm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKLQotICAgIHN0YXRp
YyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBsYWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyKTsKLSAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjbGlwYm9hcmRSZWFkSW1hZ2UoUGFzdGVib2FyZFByaXZh
dGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNsaXBib2FyZEdldFNl
cXVlbmNlTnVtYmVyKCk7Ci0KLSAgICAvLyBPbmx5IHRoZSBjbGlwYm9hcmRSZWFkIGZ1bmN0aW9u
cyB0YWtlIGEgYnVmZmVyIGFyZ3VtZW50IGJlY2F1c2UKLSAgICAvLyBDaHJvbWl1bSBjdXJyZW50
bHkgdXNlcyBhIGRpZmZlcmVudCB0ZWNobmlxdWUgdG8gd3JpdGUgdG8gYWx0ZXJuYXRlCi0gICAg
Ly8gY2xpcGJvYXJkIGJ1ZmZlcnMuCi0gICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVTZWxl
Y3Rpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIGJvb2wpOwot
ICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOwot
ICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKTsKLSAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRy
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgY2xpcGJvYXJk
V3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIG1ldGFkYXRhKTsKLQotICAgIC8vIEludGVyZmFjZSBmb3IgaGFuZGxpbmcgY29weSBh
bmQgcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rpb24gY29weS4KLSAgICBzdGF0aWMg
SGFzaFNldDxTdHJpbmc+IGNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhQYXN0ZWJvYXJkUHJp
dmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcyk7Ci0gICAgc3Rh
dGljIGJvb2wgY2xpcGJvYXJkUmVhZERhdGEoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1
ZmZlciwgY29uc3QgU3RyaW5nJiB0eXBlLCBTdHJpbmcmIGRhdGEsIFN0cmluZyYgbWV0YWRhdGEp
OwotICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotCi0gICAgLy8gQ29va2llcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
ICBzdGF0aWMgdm9pZCBzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBi
b29sIHJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mKTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotCi0gICAgLy8gRE5TIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBz
dGF0aWMgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKLQotICAgIC8v
IEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgcmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJp
bmcmKTsKLSAgICBzdGF0aWMgYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYpOwotICAgIHN0
YXRpYyBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgZGVs
ZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0Rmls
ZVNpemUoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiByZXN1bHQpOwotICAgIHN0YXRpYyBib29s
IGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsK
LSAgICBzdGF0aWMgU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KTsKLSAgICBzdGF0aWMgYm9vbCBtYWtlQWxsRGly
ZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldEFic29s
dXRlUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9vbCBpc0RpcmVjdG9yeShjb25z
dCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgS1VSTCBmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYp
OwotICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlT3Blbk1vZGUpOwotICAgIHN0YXRpYyB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUmKTsKLSAgICBzdGF0aWMgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwotICAgIHN0YXRpYyBib29s
IHRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpOwotICAg
IHN0YXRpYyBpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwg
aW50IGxlbmd0aCk7Ci0gICAgc3RhdGljIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwotCi0gICAgLy8gRm9udCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSNpZiBPUyhXSU5ET1dTKQotICAgIHN0YXRpYyBib29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQp
OwotI2VuZGlmCi0jaWYgT1MoREFSV0lOKQotICAgIHN0YXRpYyBib29sIGxvYWRGb250KE5TRm9u
dCogc3JjRm9udCwgQVRTRm9udENvbnRhaW5lclJlZiosIHVpbnQzMl90KiBmb250SUQpOwotI2Vs
aWYgT1MoVU5JWCkKLSAgICBzdGF0aWMgdm9pZCBnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25z
dCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0
KTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IG51bUNoYXJhY3RlcnMsIGNvbnN0IGNoYXIqIHByZWZlcnJlZExvY2FsZSk7
Ci0jZW5kaWYKLQotICAgIC8vIEZvcm1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgbm90aWZ5Rm9y
bVN0YXRlQ2hhbmdlZChjb25zdCBEb2N1bWVudCopOwotCi0gICAgLy8gRGF0YWJhc2VzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
ICAvLyBSZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSBEQiBmaWxlIGFuZCBvb3B0aW9uYWxseSBhIGhh
bmRsZSB0byBpdHMgY29udGFpbmluZyBkaXJlY3RvcnkKLSAgICBzdGF0aWMgUGxhdGZvcm1GaWxl
SGFuZGxlIGRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBpbnQgZGVz
aXJlZEZsYWdzKTsKLSAgICAvLyBSZXR1cm5zIGEgU1FMaXRlIGNvZGUgKFNRTElURV9PSyA9IDAs
IG9uIHN1Y2Nlc3MpCi0gICAgc3RhdGljIGludCBkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3Ry
aW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyID0gZmFsc2UpOwotICAgIC8vIFJldHVybnMg
dGhlIGF0dHJpYnV0ZXMgb2YgdGhlIERCIGZpbGUKLSAgICBzdGF0aWMgbG9uZyBkYXRhYmFzZUdl
dEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpOwotICAgIC8vIFJldHVy
bnMgdGhlIHNpemUgb2YgdGhlIERCIGZpbGUKLSAgICBzdGF0aWMgbG9uZyBsb25nIGRhdGFiYXNl
R2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSk7Ci0gICAgLy8gUmV0dXJucyB0
aGUgc3BhY2UgYXZhaWxhYmxlIGZvciB0aGUgb3JpZ2luCi0gICAgc3RhdGljIGxvbmcgbG9uZyBk
YXRhYmFzZUdldFNwYWNlQXZhaWxhYmxlRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllcik7Ci0KLSAgICAvLyBJbmRleGVkREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBpZGJGYWN0b3J5KCk7Ci0gICAgLy8gRXh0cmFjdHMg
a2V5UGF0aCBmcm9tIHZhbHVlcyBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBrZXlzLgot
ICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBh
dGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcywg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cyk7Ci0g
ICAgLy8gSW5qZWN0cyBrZXkgdmlhIGtleVBhdGggaW50byB2YWx1ZS4gUmV0dXJucyB0cnVlIG9u
IHN1Y2Nlc3MuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBp
bmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBTdHJpbmcmIGtleVBhdGgpOwotCi0g
ICAgLy8gSmF2YVNjcmlwdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgdm9pZCBub3RpZnlKU091dE9mTWVtb3J5KEZy
YW1lKik7Ci0gICAgc3RhdGljIGJvb2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0dGluZ3MoY29uc3Qg
S1VSTCYgZG9jdW1lbnRVUkwpOwotCi0gICAgLy8gS2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgU3Ry
aW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5k
ZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBLVVJMJik7Ci0KLSAgICAvLyBMYW5n
dWFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgIHN0YXRpYyBTdHJpbmcgY29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKTsKLQot
ICAgIC8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIGJvb2wgbGF5b3V0VGVzdE1vZGUoKTsKLQot
ICAgIC8vIE1lbW9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBzcGFjZSBhbGxv
Y2F0ZWQgZm9yIHRoZSBwYWdlZmlsZSwgaW4gTUIuCi0gICAgLy8gVGhhdCBpcyBjb21taXR0ZWQg
c2l6ZSBmb3IgV2luZG93cyBhbmQgdmlydHVhbCBtZW1vcnkgc2l6ZSBmb3IgUE9TSVgKLSAgICBz
dGF0aWMgaW50IG1lbW9yeVVzYWdlTUIoKTsKLQotICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBh
bHdheXMgcmV0dXJucyBhY3R1YWwgdmFsdWUsIHdpdGhvdXQgYW55IGNhY2hlcy4KLSAgICBzdGF0
aWMgaW50IGFjdHVhbE1lbW9yeVVzYWdlTUIoKTsKLQotICAgIC8vIE1pbWVUeXBlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOwotICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOwotICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkTm9uSW1hZ2VN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICBzdGF0aWMgU3RyaW5nIG1pbWVU
eXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbik7Ci0gICAgc3RhdGlj
IFN0cmluZyB3ZWxsS25vd25NaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVF
eHRlbnNpb24pOwotICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVQYXRoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotCi0gICAgLy8gUGx1Z2luIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
ICBzdGF0aWMgYm9vbCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbkluZm8+Kik7
Ci0gICAgc3RhdGljIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCopOwot
ICAgIHN0YXRpYyBib29sIHBvcHVwc0FsbG93ZWQoTlBQKTsKLQotICAgIC8vIFJlc291cmNlcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2Uo
Y29uc3QgY2hhciogbmFtZSk7Ci0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEF1ZGlvQnVzPiBsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0J1
cz4gZGVjb2RlQXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QsIGRvdWJsZSBz
YW1wbGVSYXRlKTsKLSNlbmRpZgotCi0gICAgLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgYm9v
bCBzYW5kYm94RW5hYmxlZCgpOwotCi0gICAgLy8gU2NyZWVuIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgaW50
IHNjcmVlbkRlcHRoKFdpZGdldCopOwotICAgIHN0YXRpYyBpbnQgc2NyZWVuRGVwdGhQZXJDb21w
b25lbnQoV2lkZ2V0Kik7Ci0gICAgc3RhdGljIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdl
dCopOwotICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7Ci0gICAgc3RhdGlj
IEludFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKLQotICAgIC8vIFNoYXJlZFRp
bWVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gICAgc3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpm
dW5jKSgpKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3Vi
bGUpOwotICAgIHN0YXRpYyB2b2lkIHN0b3BTaGFyZWRUaW1lcigpOwotCi0gICAgLy8gU3RhdHND
b3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICBzdGF0aWMgdm9pZCBkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciog
bmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgaW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIq
IG5hbWUpOwotICAgIHN0YXRpYyB2b2lkIGhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFy
KiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpOwot
ICAgIHN0YXRpYyB2b2lkIGhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGlu
dCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKTsKLQotICAgIC8vIFN1ZGRlbiBUZXJtaW5hdGlv
bgotICAgIHN0YXRpYyB2b2lkIHN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQp
OwotCi0gICAgLy8gVGhlbWluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpZiBPUyhXSU5ET1dTKQotICAgIHN0YXRpYyB2b2lk
IHBhaW50QnV0dG9uKAotICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0
YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQg
cGFpbnRNZW51TGlzdCgKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBz
dGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOwotICAgIHN0YXRpYyB2b2lk
IHBhaW50U2Nyb2xsYmFyQXJyb3coCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOwotICAgIHN0YXRpYyB2b2lkIHBh
aW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBp
bnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICBzdGF0aWMg
dm9pZCBwYWludFNjcm9sbGJhclRyYWNrKAotICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQg
cGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50UmVjdCYgYWxpZ25SZWN0KTsKLSAgICBzdGF0aWMgdm9pZCBwYWludFNwaW5CdXR0b24oCi0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2lj
U3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICBzdGF0aWMgdm9pZCBwYWludFRleHRGaWVsZCgK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJiwgYm9vbCBmaWxsQ29udGVudEFy
ZWEsIGJvb2wgZHJhd0VkZ2VzKTsKLSAgICBzdGF0aWMgdm9pZCBwYWludFRyYWNrYmFyKAotICAg
ICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0
YXRlLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgcGFpbnRQcm9ncmVzc0JhcigK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3Qg
SW50UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNv
bmRzKTsKLSNlbGlmIE9TKERBUldJTikKLSAgICBlbnVtIFRoZW1lUGFpbnRTdGF0ZSB7Ci0gICAg
ICAgIFN0YXRlRGlzYWJsZWQsCi0gICAgICAgIFN0YXRlSW5hY3RpdmUsCi0gICAgICAgIFN0YXRl
QWN0aXZlLAotICAgICAgICBTdGF0ZVByZXNzZWQsCi0gICAgfTsKLQotICAgIGVudW0gVGhlbWVQ
YWludFNpemUgewotICAgICAgICBTaXplUmVndWxhciwKLSAgICAgICAgU2l6ZVNtYWxsLAotICAg
IH07Ci0KLSAgICBlbnVtIFRoZW1lUGFpbnRTY3JvbGxiYXJPcmllbnRhdGlvbiB7Ci0gICAgICAg
IFNjcm9sbGJhck9yaWVudGF0aW9uSG9yaXpvbnRhbCwKLSAgICAgICAgU2Nyb2xsYmFyT3JpZW50
YXRpb25WZXJ0aWNhbCwKLSAgICB9OwotCi0gICAgZW51bSBUaGVtZVBhaW50U2Nyb2xsYmFyUGFy
ZW50IHsKLSAgICAgICAgU2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldywKLSAgICAgICAgU2Nyb2xs
YmFyUGFyZW50UmVuZGVyTGF5ZXIsCi0gICAgfTsKLQotICAgIHN0cnVjdCBUaGVtZVBhaW50U2Ny
b2xsYmFySW5mbyB7Ci0gICAgICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbjsKLSAgICAgICAgVGhlbWVQYWludFNjcm9sbGJhclBhcmVudCBwYXJlbnQ7Ci0gICAg
ICAgIGludCBtYXhWYWx1ZTsKLSAgICAgICAgaW50IGN1cnJlbnRWYWx1ZTsKLSAgICAgICAgaW50
IHZpc2libGVTaXplOwotICAgICAgICBpbnQgdG90YWxTaXplOwotICAgIH07Ci0KLSAgICBzdGF0
aWMgdm9pZCBwYWludFNjcm9sbGJhclRodW1iKEdyYXBoaWNzQ29udGV4dCosIFRoZW1lUGFpbnRT
dGF0ZSwgVGhlbWVQYWludFNpemUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUaGVtZVBhaW50U2Ny
b2xsYmFySW5mbyYpOwotI2VsaWYgT1MoVU5JWCkKLSAgICAvLyBUaGUgVUkgcGFydCB3aGljaCBp
cyBiZWluZyBhY2Nlc3NlZC4KLSAgICBlbnVtIFRoZW1lUGFydCB7Ci0gICAgICAgIC8vIFNjcm9s
bGJhclRoZW1lIHBhcnRzCi0gICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCi0gICAgICAg
IFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCi0gICAgICAgIFBhcnRTY3JvbGxiYXJSaWdodEFycm93
LAotICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAgICAgUGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYiwKLSAgICAgICAgUGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIsCi0gICAg
ICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2ssCi0gICAgICAgIFBhcnRTY3JvbGxiYXJW
ZXJ0aWNhbFRyYWNrLAotCi0gICAgICAgIC8vIFJlbmRlclRoZW1lIHBhcnRzCi0gICAgICAgIFBh
cnRDaGVja2JveCwKLSAgICAgICAgUGFydFJhZGlvLAotICAgICAgICBQYXJ0QnV0dG9uLAotICAg
ICAgICBQYXJ0VGV4dEZpZWxkLAotICAgICAgICBQYXJ0TWVudUxpc3QsCi0gICAgICAgIFBhcnRT
bGlkZXJUcmFjaywKLSAgICAgICAgUGFydFNsaWRlclRodW1iLAotICAgICAgICBQYXJ0SW5uZXJT
cGluQnV0dG9uLAotICAgICAgICBQYXJ0UHJvZ3Jlc3NCYXIKLSAgICB9OwotCi0gICAgLy8gVGhl
IGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFzc29jaWF0ZWQgUGFydC4KLSAgICBlbnVtIFRoZW1lUGFp
bnRTdGF0ZSB7Ci0gICAgICAgIFN0YXRlRGlzYWJsZWQsCi0gICAgICAgIFN0YXRlSG92ZXIsCi0g
ICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAgICBTdGF0ZVByZXNzZWQKLSAgICB9OwotCi0gICAg
c3RydWN0IFNjcm9sbGJhclRyYWNrRXh0cmFQYXJhbXMgewotICAgICAgICAvLyBUaGUgYm91bmRz
IG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFzIG9wcG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRl
ZC4KLSAgICAgICAgaW50IHRyYWNrWDsKLSAgICAgICAgaW50IHRyYWNrWTsKLSAgICAgICAgaW50
IHRyYWNrV2lkdGg7Ci0gICAgICAgIGludCB0cmFja0hlaWdodDsKLSAgICB9OwotCi0gICAgc3Ry
dWN0IEJ1dHRvbkV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9vbCBjaGVja2VkOwotICAgICAgICBi
b29sIGluZGV0ZXJtaW5hdGU7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBzdGF0ZSBpcyBpbmRldGVy
bWluYXRlLgotICAgICAgICBib29sIGlzRGVmYXVsdDsgLy8gV2hldGhlciB0aGUgYnV0dG9uIGlz
IGRlZmF1bHQgYnV0dG9uLgotICAgICAgICBib29sIGhhc0JvcmRlcjsKLSAgICAgICAgdW5zaWdu
ZWQgYmFja2dyb3VuZENvbG9yOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgVGV4dEZpZWxkRXh0cmFQ
YXJhbXMgewotICAgICAgICBib29sIGlzVGV4dEFyZWE7Ci0gICAgICAgIGJvb2wgaXNMaXN0Ym94
OwotICAgICAgICB1bnNpZ25lZCBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBNZW51TGlzdEV4dHJhUGFyYW1zIHsKLSAgICAgICAgYm9vbCBoYXNCb3JkZXI7Ci0gICAgICAg
IGJvb2wgaGFzQm9yZGVyUmFkaXVzOwotICAgICAgICBpbnQgYXJyb3dYOwotICAgICAgICBpbnQg
YXJyb3dZOwotICAgICAgICB1bnNpZ25lZCBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgfTsKLQotICAg
IHN0cnVjdCBTbGlkZXJFeHRyYVBhcmFtcyB7Ci0gICAgICAgIGJvb2wgdmVydGljYWw7Ci0gICAg
ICAgIGJvb2wgaW5EcmFnOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgSW5uZXJTcGluQnV0dG9uRXh0
cmFQYXJhbXMgewotICAgICAgICBib29sIHNwaW5VcDsKLSAgICAgICAgYm9vbCByZWFkT25seTsK
LSAgICB9OwotCi0gICAgc3RydWN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMgewotICAgICAgICBi
b29sIGRldGVybWluYXRlOwotICAgICAgICBpbnQgdmFsdWVSZWN0WDsKLSAgICAgICAgaW50IHZh
bHVlUmVjdFk7Ci0gICAgICAgIGludCB2YWx1ZVJlY3RXaWR0aDsKLSAgICAgICAgaW50IHZhbHVl
UmVjdEhlaWdodDsKLSAgICB9OwotCi0gICAgdW5pb24gVGhlbWVQYWludEV4dHJhUGFyYW1zIHsK
LSAgICAgICAgU2Nyb2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFjazsKLSAgICAg
ICAgQnV0dG9uRXh0cmFQYXJhbXMgYnV0dG9uOwotICAgICAgICBUZXh0RmllbGRFeHRyYVBhcmFt
cyB0ZXh0RmllbGQ7Ci0gICAgICAgIE1lbnVMaXN0RXh0cmFQYXJhbXMgbWVudUxpc3Q7Ci0gICAg
ICAgIFNsaWRlckV4dHJhUGFyYW1zIHNsaWRlcjsKLSAgICAgICAgSW5uZXJTcGluQnV0dG9uRXh0
cmFQYXJhbXMgaW5uZXJTcGluOwotICAgICAgICBQcm9ncmVzc0JhckV4dHJhUGFyYW1zIHByb2dy
ZXNzQmFyOwotICAgIH07Ci0KLSAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVt
ZSBwYXJ0LiBGb3IgdmFyaWFibGUgc2l6ZWQgaXRlbXMKLSAgICAvLyBsaWtlIHZlcnRpY2FsIHNj
cm9sbGJhciB0aHVtYnMsIHRoZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJlZCB3aWR0aCBvZgot
ICAgIC8vIHRoZSB0cmFjayB3aGlsZSB0aGUgaGVpZ2h0IHdpbGwgYmUgdGhlIG1pbmltdW0gaGVp
Z2h0LgotICAgIHN0YXRpYyBJbnRTaXplIGdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0KTsKLSAg
ICAvLyBQYWludCB0aGUgZ2l2ZW4gdGhlIGdpdmVuIHRoZW1lIHBhcnQuCi0gICAgc3RhdGljIHZv
aWQgcGFpbnRUaGVtZVBhcnQoR3JhcGhpY3NDb250ZXh0KiwgVGhlbWVQYXJ0LCBUaGVtZVBhaW50
U3RhdGUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBUaGVtZVBhaW50RXh0cmFQYXJhbXMqKTsKLSNl
bmRpZgotCi0gICAgLy8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgdm9pZCB0cmFjZUV2ZW50QmVn
aW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCosIGNvbnN0IGNoYXIqIGV4dHJhKTsKLSAgICBzdGF0
aWMgdm9pZCB0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqLCBjb25zdCBjaGFy
KiBleHRyYSk7Ci0KLSAgICAvLyBWaXNpdGVkIGxpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNp
dGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlVVJMKTsKLSAgICBzdGF0aWMgYm9vbCBpc0xpbmtWaXNpdGVkKExp
bmtIYXNoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9y
bVNjcmVlbkNocm9taXVtLmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMzMgKzMyLDMzIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKIAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBzY3JlZW5E
ZXB0aChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVl
bkRlcHRoKHdpZGdldCk7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6c2NyZWVuRGVwdGgo
d2lkZ2V0KTsKIH0KIAogaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0
KQogewotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQo
d2lkZ2V0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpzY3JlZW5EZXB0aFBlckNvbXBv
bmVudCh3aWRnZXQpOwogfQogCiBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdl
dCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZSh3aWRn
ZXQpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnNjcmVlbklzTW9ub2Nocm9tZSh3aWRn
ZXQpOwogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlblJlY3Qod2lkZ2V0KTsKKyAgICByZXR1cm4gUGxh
dGZvcm1TdXBwb3J0OjpzY3JlZW5SZWN0KHdpZGdldCk7CiB9CiAKIEZsb2F0UmVjdCBzY3JlZW5B
dmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRn
ZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCh3aWRnZXQpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBv
cnQ6OnNjcmVlbkF2YWlsYWJsZVJlY3Qod2lkZ2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDk0MjQzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybUJyaWRnZS5oOjk0MjQzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybUJyaWRnZV9oCisjZGVmaW5lIFBsYXRmb3JtQnJp
ZGdlX2gKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNl
bmRpZgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgi
CisjaW5jbHVkZSAiTGlua0hhc2guaCIKKyNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCisjaW5jbHVk
ZSAiUGFzdGVib2FyZFByaXZhdGUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCit0eXBlZGVmIHN0cnVjdCBOUE9iamVjdCBOUE9iamVjdDsKK3R5cGVk
ZWYgc3RydWN0IF9OUFAgTlBQX3Q7Cit0eXBlZGVmIE5QUF90KiBOUFA7CisKKyNpZiBPUyhEQVJX
SU4pCit0eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKK3R5cGVkZWYgdWludHB0cl90
IEFUU0ZvbnRDb250YWluZXJSZWY7CisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBOU0ZvbnQ7Cisj
ZWxzZQorY2xhc3MgTlNGb250OworI2VuZGlmCisjZW5kaWYgLy8gT1MoREFSV0lOKQorCisjaWYg
T1MoV0lORE9XUykKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOworI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2xpcGJvYXJkRGF0YTsKK2NsYXNzIENvbG9yOwor
Y2xhc3MgQ3Vyc29yOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEdlb2xv
Y2F0aW9uU2VydmljZUJyaWRnZTsKK2NsYXNzIEdlb2xvY2F0aW9uU2VydmljZUNocm9taXVtOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW1hZ2U7CitjbGFzcyBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZTsKK2NsYXNzIElEQktleTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBLVVJM
OworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworY2xhc3MgV2lkZ2V0OworCitzdHJ1Y3Qg
Q29va2llOworc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsKKworLy8gQW4gaW50ZXJmYWNlIHRvIHRo
ZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJpbGl0eSB0byBhbnN3ZXIKKy8vIHF1
ZXN0aW9ucyBhYm91dCB0aGUgc3lzdGVtIGFuZCBzbyBvbi4uLgorCitjbGFzcyBQbGF0Zm9ybUJy
aWRnZSB7CitwdWJsaWM6CisgICAgLy8gQ2FjaGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCBjYWNo
ZU1ldGFkYXRhKGNvbnN0IEtVUkwmLCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8
Y2hhcj4mKTsKKworICAgIC8vIENsaXBib2FyZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJk
SXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwgUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CisKKyAgICBzdGF0aWMgU3RyaW5nIGNs
aXBib2FyZFJlYWRQbGFpblRleHQoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7
CisgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkUmVhZEhUTUwoUGFzdGVib2FyZFByaXZhdGU6OkNs
aXBib2FyZEJ1ZmZlciwgU3RyaW5nKiwgS1VSTCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gY2xpcGJvYXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9h
cmRCdWZmZXIpOworICAgIHN0YXRpYyB1aW50NjRfdCBjbGlwYm9hcmRHZXRTZXF1ZW5jZU51bWJl
cigpOworCisgICAgLy8gT25seSB0aGUgY2xpcGJvYXJkUmVhZCBmdW5jdGlvbnMgdGFrZSBhIGJ1
ZmZlciBhcmd1bWVudCBiZWNhdXNlCisgICAgLy8gQ2hyb21pdW0gY3VycmVudGx5IHVzZXMgYSBk
aWZmZXJlbnQgdGVjaG5pcXVlIHRvIHdyaXRlIHRvIGFsdGVybmF0ZQorICAgIC8vIGNsaXBib2Fy
ZCBidWZmZXJzLgorICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKGNvbnN0
IFN0cmluZyYsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBib29sKTsKKyAgICBzdGF0aWMg
dm9pZCBjbGlwYm9hcmRXcml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMg
dm9pZCBjbGlwYm9hcmRXcml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAg
c3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBtZXRh
ZGF0YSk7CisKKyAgICAvLyBJbnRlcmZhY2UgZm9yIGhhbmRsaW5nIGNvcHkgYW5kIHBhc3RlLCBk
cmFnIGFuZCBkcm9wLCBhbmQgc2VsZWN0aW9uIGNvcHkuCisgICAgc3RhdGljIEhhc2hTZXQ8U3Ry
aW5nPiBjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBi
b2FyZEJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpOworICAgIHN0YXRpYyBib29sIGNs
aXBib2FyZFJlYWREYXRhKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIGNvbnN0
IFN0cmluZyYgdHlwZSwgU3RyaW5nJiBkYXRhLCBTdHJpbmcmIG1ldGFkYXRhKTsKKyAgICBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gY2xpcGJvYXJkUmVhZEZpbGVuYW1lcyhQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKKworICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZv
aWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7CisgICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgYm9vbCByYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisgICAg
c3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSk7CisgICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQo
Y29uc3QgRG9jdW1lbnQqKTsKKworICAgIC8vIEROUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQg
cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CisKKyAgICAvLyBGaWxlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgIHN0YXRpYyB2b2lkIHJldmVhbEZvbGRlckluT1MoY29uc3QgU3RyaW5nJik7CisgICAg
c3RhdGljIGJvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWxldGVGaWxlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGdldEZpbGVTaXplKGNvbnN0
IFN0cmluZyYsIGxvbmcgbG9uZyYgcmVzdWx0KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRGaWxlTW9k
aWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmLCB0aW1lX3QmIHJlc3VsdCk7CisgICAgc3RhdGlj
IFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFN0
cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBT
dHJpbmcmIGNvbXBvbmVudCk7CisgICAgc3RhdGljIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNv
bnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFN0cmluZyBnZXRBYnNvbHV0ZVBhdGgoY29u
c3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgaXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIEtVUkwgZmlsZVBhdGhUb1VSTChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0
aWMgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7
CisgICAgc3RhdGljIGxvbmcgbG9uZyBzZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcg
bG9uZyBvZmZzZXQsIEZpbGVTZWVrT3JpZ2luKTsKKyAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZUZp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KTsKKyAgICBzdGF0aWMgaW50
IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
OworICAgIHN0YXRpYyBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKKworICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaWYgT1MoV0lO
RE9XUykKKyAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKKyNlbmRpZgor
I2lmIE9TKERBUldJTikKKyAgICBzdGF0aWMgYm9vbCBsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQs
IEFUU0ZvbnRDb250YWluZXJSZWYqLCB1aW50MzJfdCogZm9udElEKTsKKyNlbGlmIE9TKFVOSVgp
CisgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3QgY2hhciogZmFt
aWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCk7CisgICAgc3Rh
dGljIFN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHNpemVf
dCBudW1DaGFyYWN0ZXJzLCBjb25zdCBjaGFyKiBwcmVmZXJyZWRMb2NhbGUpOworI2VuZGlmCisK
KyAgICAvLyBGb3JtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyB2b2lkIG5vdGlmeUZvcm1TdGF0ZUNoYW5n
ZWQoY29uc3QgRG9jdW1lbnQqKTsKKworICAgIC8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUmV0dXJu
cyBhIGhhbmRsZSB0byB0aGUgREIgZmlsZSBhbmQgb29wdGlvbmFsbHkgYSBoYW5kbGUgdG8gaXRz
IGNvbnRhaW5pbmcgZGlyZWN0b3J5CisgICAgc3RhdGljIFBsYXRmb3JtRmlsZUhhbmRsZSBkYXRh
YmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmxlTmFtZSwgaW50IGRlc2lyZWRGbGFncyk7
CisgICAgLy8gUmV0dXJucyBhIFNRTGl0ZSBjb2RlIChTUUxJVEVfT0sgPSAwLCBvbiBzdWNjZXNz
KQorICAgIHN0YXRpYyBpbnQgZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmls
ZU5hbWUsIGJvb2wgc3luY0RpciA9IGZhbHNlKTsKKyAgICAvLyBSZXR1cm5zIHRoZSBhdHRyaWJ1
dGVzIG9mIHRoZSBEQiBmaWxlCisgICAgc3RhdGljIGxvbmcgZGF0YWJhc2VHZXRGaWxlQXR0cmli
dXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKTsKKyAgICAvLyBSZXR1cm5zIHRoZSBzaXpl
IG9mIHRoZSBEQiBmaWxlCisgICAgc3RhdGljIGxvbmcgbG9uZyBkYXRhYmFzZUdldEZpbGVTaXpl
KGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpOworICAgIC8vIFJldHVybnMgdGhlIHNwYWNlIGF2
YWlsYWJsZSBmb3IgdGhlIG9yaWdpbgorICAgIHN0YXRpYyBsb25nIGxvbmcgZGF0YWJhc2VHZXRT
cGFjZUF2YWlsYWJsZUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIpOwor
CisgICAgLy8gSW5kZXhlZERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4gaWRiRmFjdG9yeSgpOworICAgIC8vIEV4dHJhY3RzIGtleVBhdGggZnJv
bSB2YWx1ZXMgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcga2V5cy4KKyAgICBzdGF0aWMg
dm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1ZXMsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMpOworICAgIC8vIEluamVj
dHMga2V5IHZpYSBrZXlQYXRoIGludG8gdmFsdWUuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKKworICAgIC8vIEphdmFT
Y3JpcHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgc3RhdGljIHZvaWQgbm90aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSopOworICAg
IHN0YXRpYyBib29sIGFsbG93U2NyaXB0RGVzcGl0ZVNldHRpbmdzKGNvbnN0IEtVUkwmIGRvY3Vt
ZW50VVJMKTsKKworICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIFN0cmluZyBzaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBT
dHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYpOworCisgICAgLy8gTGFuZ3VhZ2UgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKCk7CisKKyAgICAvLyBMYXlv
dXRUZXN0TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIHN0YXRpYyBib29sIGxheW91dFRlc3RNb2RlKCk7CisKKyAgICAvLyBNZW1v
cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgc3BhY2UgYWxsb2NhdGVkIGZvciB0
aGUgcGFnZWZpbGUsIGluIE1CLgorICAgIC8vIFRoYXQgaXMgY29tbWl0dGVkIHNpemUgZm9yIFdp
bmRvd3MgYW5kIHZpcnR1YWwgbWVtb3J5IHNpemUgZm9yIFBPU0lYCisgICAgc3RhdGljIGludCBt
ZW1vcnlVc2FnZU1CKCk7CisKKyAgICAvLyBTYW1lIGFzIGFib3ZlLCBidXQgYWx3YXlzIHJldHVy
bnMgYWN0dWFsIHZhbHVlLCB3aXRob3V0IGFueSBjYWNoZXMuCisgICAgc3RhdGljIGludCBhY3R1
YWxNZW1vcnlVc2FnZU1CKCk7CisKKyAgICAvLyBNaW1lVHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyBib29s
IGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBz
dGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgc3RhdGljIFN0cmluZyBtaW1lVHlwZUZvckV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pOworICAgIHN0YXRpYyBTdHJpbmcgd2Vs
bEtub3duTWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKTsK
KyAgICBzdGF0aWMgU3RyaW5nIG1pbWVUeXBlRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCk7CisgICAgc3RhdGljIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKKworICAgIC8vIFBsdWdpbiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIGJv
b2wgcGx1Z2lucyhib29sIHJlZnJlc2gsIFZlY3RvcjxQbHVnaW5JbmZvPiopOworICAgIHN0YXRp
YyBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU9iamVjdChXaWRnZXQqKTsKKyAgICBzdGF0aWMg
Ym9vbCBwb3B1cHNBbGxvd2VkKE5QUCk7CisKKyAgICAvLyBSZXNvdXJjZXMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEltYWdlPiBsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUpOworCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBzdGF0aWMgUGFzc093blB0cjxB
dWRpb0J1cz4gbG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3Vi
bGUgc2FtcGxlUmF0ZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8QXVkaW9CdXM+IGRlY29kZUF1
ZGlvRmlsZURhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90LCBkb3VibGUgc2FtcGxlUmF0ZSk7
CisjZW5kaWYKKworICAgIC8vIFNhbmRib3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIGJvb2wgc2FuZGJveEVu
YWJsZWQoKTsKKworICAgIC8vIFNjcmVlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIGludCBzY3JlZW5EZXB0
aChXaWRnZXQqKTsKKyAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdl
dCopOworICAgIHN0YXRpYyBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKTsKKyAgICBz
dGF0aWMgSW50UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOworICAgIHN0YXRpYyBJbnRSZWN0IHNj
cmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CisKKyAgICAvLyBTaGFyZWRUaW1lcnMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0
YXRpYyB2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZnVuYykoKSk7Cisg
ICAgc3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlKTsKKyAgICBz
dGF0aWMgdm9pZCBzdG9wU2hhcmVkVGltZXIoKTsKKworICAgIC8vIFN0YXRzQ291bnRlcnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
c3RhdGljIHZvaWQgZGVjcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpOworICAg
IHN0YXRpYyB2b2lkIGluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKTsKKyAg
ICBzdGF0aWMgdm9pZCBoaXN0b2dyYW1DdXN0b21Db3VudHMoY29uc3QgY2hhciogbmFtZSwgaW50
IHNhbXBsZSwgaW50IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KTsKKyAgICBzdGF0aWMg
dm9pZCBoaXN0b2dyYW1FbnVtZXJhdGlvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBp
bnQgYm91bmRhcnlWYWx1ZSk7CisKKyAgICAvLyBTdWRkZW4gVGVybWluYXRpb24KKyAgICBzdGF0
aWMgdm9pZCBzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKTsKKworICAgIC8v
IFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisjaWYgT1MoV0lORE9XUykKKyAgICBzdGF0aWMgdm9pZCBwYWludEJ1dHRv
bigKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNs
YXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50TWVudUxp
c3QoCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBj
bGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9s
bGJhckFycm93KAorICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgc3RhdGUsIGludCBjbGFz
c2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJh
clRodW1iKAorICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBp
bnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRT
Y3JvbGxiYXJUcmFjaygKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBz
dGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmIGFs
aWduUmVjdCk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRTcGluQnV0dG9uKAorICAgICAgICBHcmFw
aGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUZXh0RmllbGQoCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNv
bnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYsIGJvb2wgZmlsbENvbnRlbnRBcmVhLCBib29sIGRy
YXdFZGdlcyk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUcmFja2JhcigKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3Qg
SW50UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZh
bHVlUmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcyk7CisjZWxp
ZiBPUyhEQVJXSU4pCisgICAgZW51bSBUaGVtZVBhaW50U3RhdGUgeworICAgICAgICBTdGF0ZURp
c2FibGVkLAorICAgICAgICBTdGF0ZUluYWN0aXZlLAorICAgICAgICBTdGF0ZUFjdGl2ZSwKKyAg
ICAgICAgU3RhdGVQcmVzc2VkLAorICAgIH07CisKKyAgICBlbnVtIFRoZW1lUGFpbnRTaXplIHsK
KyAgICAgICAgU2l6ZVJlZ3VsYXIsCisgICAgICAgIFNpemVTbWFsbCwKKyAgICB9OworCisgICAg
ZW51bSBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24geworICAgICAgICBTY3JvbGxiYXJP
cmllbnRhdGlvbkhvcml6b250YWwsCisgICAgICAgIFNjcm9sbGJhck9yaWVudGF0aW9uVmVydGlj
YWwsCisgICAgfTsKKworICAgIGVudW0gVGhlbWVQYWludFNjcm9sbGJhclBhcmVudCB7CisgICAg
ICAgIFNjcm9sbGJhclBhcmVudFNjcm9sbFZpZXcsCisgICAgICAgIFNjcm9sbGJhclBhcmVudFJl
bmRlckxheWVyLAorICAgIH07CisKKyAgICBzdHJ1Y3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8g
eworICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247Cisg
ICAgICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQgcGFyZW50OworICAgICAgICBpbnQgbWF4
VmFsdWU7CisgICAgICAgIGludCBjdXJyZW50VmFsdWU7CisgICAgICAgIGludCB2aXNpYmxlU2l6
ZTsKKyAgICAgICAgaW50IHRvdGFsU2l6ZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgcGFp
bnRTY3JvbGxiYXJUaHVtYihHcmFwaGljc0NvbnRleHQqLCBUaGVtZVBhaW50U3RhdGUsIFRoZW1l
UGFpbnRTaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8m
KTsKKyNlbGlmIE9TKFVOSVgpCisgICAgLy8gVGhlIFVJIHBhcnQgd2hpY2ggaXMgYmVpbmcgYWNj
ZXNzZWQuCisgICAgZW51bSBUaGVtZVBhcnQgeworICAgICAgICAvLyBTY3JvbGxiYXJUaGVtZSBw
YXJ0cworICAgICAgICBQYXJ0U2Nyb2xsYmFyRG93bkFycm93LAorICAgICAgICBQYXJ0U2Nyb2xs
YmFyTGVmdEFycm93LAorICAgICAgICBQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdywKKyAgICAgICAg
UGFydFNjcm9sbGJhclVwQXJyb3csCisgICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1
bWIsCisgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAorICAgICAgICBQYXJ0U2Ny
b2xsYmFySG9yaXpvbnRhbFRyYWNrLAorICAgICAgICBQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFj
aywKKworICAgICAgICAvLyBSZW5kZXJUaGVtZSBwYXJ0cworICAgICAgICBQYXJ0Q2hlY2tib3gs
CisgICAgICAgIFBhcnRSYWRpbywKKyAgICAgICAgUGFydEJ1dHRvbiwKKyAgICAgICAgUGFydFRl
eHRGaWVsZCwKKyAgICAgICAgUGFydE1lbnVMaXN0LAorICAgICAgICBQYXJ0U2xpZGVyVHJhY2ss
CisgICAgICAgIFBhcnRTbGlkZXJUaHVtYiwKKyAgICAgICAgUGFydElubmVyU3BpbkJ1dHRvbiwK
KyAgICAgICAgUGFydFByb2dyZXNzQmFyCisgICAgfTsKKworICAgIC8vIFRoZSBjdXJyZW50IHN0
YXRlIG9mIHRoZSBhc3NvY2lhdGVkIFBhcnQuCisgICAgZW51bSBUaGVtZVBhaW50U3RhdGUgewor
ICAgICAgICBTdGF0ZURpc2FibGVkLAorICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAgICBTdGF0
ZU5vcm1hbCwKKyAgICAgICAgU3RhdGVQcmVzc2VkCisgICAgfTsKKworICAgIHN0cnVjdCBTY3Jv
bGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKKyAgICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50
aXJlIHRyYWNrLCBhcyBvcHBvc2VkIHRvIHRoZSBwYXJ0IGJlaW5nIHBhaW50ZWQuCisgICAgICAg
IGludCB0cmFja1g7CisgICAgICAgIGludCB0cmFja1k7CisgICAgICAgIGludCB0cmFja1dpZHRo
OworICAgICAgICBpbnQgdHJhY2tIZWlnaHQ7CisgICAgfTsKKworICAgIHN0cnVjdCBCdXR0b25F
eHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgY2hlY2tlZDsKKyAgICAgICAgYm9vbCBpbmRldGVy
bWluYXRlOyAvLyBXaGV0aGVyIHRoZSBidXR0b24gc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAg
ICAgICAgYm9vbCBpc0RlZmF1bHQ7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkZWZhdWx0IGJ1
dHRvbi4KKyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgICAgIHVuc2lnbmVkIGJhY2tncm91
bmRDb2xvcjsKKyAgICB9OworCisgICAgc3RydWN0IFRleHRGaWVsZEV4dHJhUGFyYW1zIHsKKyAg
ICAgICAgYm9vbCBpc1RleHRBcmVhOworICAgICAgICBib29sIGlzTGlzdGJveDsKKyAgICAgICAg
dW5zaWduZWQgYmFja2dyb3VuZENvbG9yOworICAgIH07CisKKyAgICBzdHJ1Y3QgTWVudUxpc3RF
eHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgaGFzQm9yZGVyOworICAgICAgICBib29sIGhhc0Jv
cmRlclJhZGl1czsKKyAgICAgICAgaW50IGFycm93WDsKKyAgICAgICAgaW50IGFycm93WTsKKyAg
ICAgICAgdW5zaWduZWQgYmFja2dyb3VuZENvbG9yOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2xp
ZGVyRXh0cmFQYXJhbXMgeworICAgICAgICBib29sIHZlcnRpY2FsOworICAgICAgICBib29sIGlu
RHJhZzsKKyAgICB9OworCisgICAgc3RydWN0IElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zIHsK
KyAgICAgICAgYm9vbCBzcGluVXA7CisgICAgICAgIGJvb2wgcmVhZE9ubHk7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zIHsKKyAgICAgICAgYm9vbCBkZXRlcm1p
bmF0ZTsKKyAgICAgICAgaW50IHZhbHVlUmVjdFg7CisgICAgICAgIGludCB2YWx1ZVJlY3RZOwor
ICAgICAgICBpbnQgdmFsdWVSZWN0V2lkdGg7CisgICAgICAgIGludCB2YWx1ZVJlY3RIZWlnaHQ7
CisgICAgfTsKKworICAgIHVuaW9uIFRoZW1lUGFpbnRFeHRyYVBhcmFtcyB7CisgICAgICAgIFNj
cm9sbGJhclRyYWNrRXh0cmFQYXJhbXMgc2Nyb2xsYmFyVHJhY2s7CisgICAgICAgIEJ1dHRvbkV4
dHJhUGFyYW1zIGJ1dHRvbjsKKyAgICAgICAgVGV4dEZpZWxkRXh0cmFQYXJhbXMgdGV4dEZpZWxk
OworICAgICAgICBNZW51TGlzdEV4dHJhUGFyYW1zIG1lbnVMaXN0OworICAgICAgICBTbGlkZXJF
eHRyYVBhcmFtcyBzbGlkZXI7CisgICAgICAgIElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zIGlu
bmVyU3BpbjsKKyAgICAgICAgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyBwcm9ncmVzc0JhcjsKKyAg
ICB9OworCisgICAgLy8gR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gdGhlbWUgcGFydC4gRm9y
IHZhcmlhYmxlIHNpemVkIGl0ZW1zCisgICAgLy8gbGlrZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgdGh1
bWJzLCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YKKyAgICAvLyB0aGUg
dHJhY2sgd2hpbGUgdGhlIGhlaWdodCB3aWxsIGJlIHRoZSBtaW5pbXVtIGhlaWdodC4KKyAgICBz
dGF0aWMgSW50U2l6ZSBnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCk7CisgICAgLy8gUGFpbnQg
dGhlIGdpdmVuIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LgorICAgIHN0YXRpYyB2b2lkIHBhaW50VGhl
bWVQYXJ0KEdyYXBoaWNzQ29udGV4dCosIFRoZW1lUGFydCwgVGhlbWVQYWludFN0YXRlLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgVGhlbWVQYWludEV4dHJhUGFyYW1zKik7CisjZW5kaWYKKworICAg
IC8vIFRyYWNlIEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEJlZ2luKGNvbnN0IGNo
YXIqIG5hbWUsIHZvaWQqLCBjb25zdCBjaGFyKiBleHRyYSk7CisgICAgc3RhdGljIHZvaWQgdHJh
Y2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiwgY29uc3QgY2hhciogZXh0cmEpOwor
CisgICAgLy8gVmlzaXRlZCBsaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNo
KGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIExpbmtIYXNo
IHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0
dHJpYnV0ZVVSTCk7CisgICAgc3RhdGljIGJvb2wgaXNMaW5rVmlzaXRlZChMaW5rSGFzaCk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9u
IDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBQbGF0Zm9ybUJyaWRnZV9oCi0jZGVmaW5lIFBsYXRmb3JtQnJpZGdlX2gK
KyNpZm5kZWYgUGxhdGZvcm1TdXBwb3J0X2gKKyNkZWZpbmUgUGxhdGZvcm1TdXBwb3J0X2gKIAog
I2lmIEVOQUJMRShXRUJfQVVESU8pCiAjaW5jbHVkZSAiQXVkaW9CdXMuaCIKQEAgLTg1LDEwICs4
NSwxMSBAQCBjbGFzcyBXaWRnZXQ7CiBzdHJ1Y3QgQ29va2llOwogc3RydWN0IEZvbnRSZW5kZXJT
dHlsZTsKIAotLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhh
cyB0aGUgYWJpbGl0eSB0byBhbnN3ZXIKLS8vIHF1ZXN0aW9ucyBhYm91dCB0aGUgc3lzdGVtIGFu
ZCBzbyBvbi4uLgorLy8gUGxhdGZvcm1TdXBwb3J0IGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRk
aW5nIGxheWVyIHRoYXQgbGV0cyB0aGUgZW1iZWRkZXIKKy8vIHN1cHBseSBpbXBsZW1lbnRhdGlv
bnMgZm9yIFBsYXRmb3JtIGZ1bmN0aW9uYWxpdHkgdGhhdCBXZWJDb3JlIGNhbm5vdCBhY2Nlc3MK
Ky8vIGRpcmVjdGx5IChmb3IgZXhhbXBsZSwgYmVjYXVzZSBXZWJDb3JlIGlzIGluIGEgc2FuZGJv
eCkuCiAKLWNsYXNzIFBsYXRmb3JtQnJpZGdlIHsKK2NsYXNzIFBsYXRmb3JtU3VwcG9ydCB7CiBw
dWJsaWM6CiAgICAgLy8gQ2FjaGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICBzdGF0aWMgdm9pZCBjYWNoZU1ldGFkYXRh
KGNvbnN0IEtVUkwmLCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU1NMS2V5R2VuZXJhdG9yLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDEzICs0Nyw5IEBAIHZvaWQgZ2V0U3VwcG9y
dGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4KICAgICBzaXplc1sxXSA9IGtleWdlbk1lbnVNZWRp
dW1HcmFkZUtleVNpemUoKTsKIH0KIAotU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5n
ZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlU3RyaW5nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcg
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwg
Y29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhr
ZXlTaXplSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlU3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCk7CisgICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNp
emVJbmRleCwgY2hhbGxlbmdlU3RyaW5nLCB1cmwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIlBsYXRmb3JtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bUxpbnV4LmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCkBAIC00NiwyMiArNDYsMjIgQEAgU2Ny
b2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaAogaW50IFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1MaW51eDo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNv
bnRyb2xTaXplKQogewogICAgIC8vIEhvcml6IGFuZCBWZXJ0IHNjcm9sbGJhcnMgYXJlIHRoZSBz
YW1lIHRoaWNrbmVzcy4KLSAgICBJbnRTaXplIHNjcm9sbGJhclNpemUgPSBQbGF0Zm9ybUJyaWRn
ZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2Fs
VHJhY2spOworICAgIEludFNpemUgc2Nyb2xsYmFyU2l6ZSA9IFBsYXRmb3JtU3VwcG9ydDo6Z2V0
VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNr
KTsKICAgICByZXR1cm4gc2Nyb2xsYmFyU2l6ZS53aWR0aCgpOwogfQogCiB2b2lkIFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2Ms
IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0
IHBhcnRUeXBlKQogewotICAgIFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUg
PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gcGFydFR5cGUgPyBQbGF0Zm9ybUJyaWRnZTo6
U3RhdGVIb3ZlciA6IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKKyAgICBQbGF0Zm9ybVN1
cHBvcnQ6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9
PSBwYXJ0VHlwZSA/IFBsYXRmb3JtU3VwcG9ydDo6U3RhdGVIb3ZlciA6IFBsYXRmb3JtU3VwcG9y
dDo6U3RhdGVOb3JtYWw7CiAgICAgSW50UmVjdCBhbGlnblJlY3QgPSB0cmFja1JlY3Qoc2Nyb2xs
YmFyLCBmYWxzZSk7Ci0gICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBl
eHRyYVBhcmFtczsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBl
eHRyYVBhcmFtczsKICAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja1ggPSBhbGln
blJlY3QueCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrWSA9IGFsaWdu
UmVjdC55KCk7CiAgICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aCA9IGFs
aWduUmVjdC53aWR0aCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrSGVp
Z2h0ID0gYWxpZ25SZWN0LmhlaWdodCgpOwotICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1l
UGFydCgKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnBhaW50VGhlbWVQYXJ0KAogICAgICAgICBnYywK
LSAgICAgICAgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIg
PyBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjayA6IFBsYXRmb3Jt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaywKKyAgICAgICAgc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBQbGF0Zm9ybVN1cHBvcnQ6OlBh
cnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgOiBQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRTY3JvbGxi
YXJWZXJ0aWNhbFRyYWNrLAogICAgICAgICBzdGF0ZSwKICAgICAgICAgcmVjdCwKICAgICAgICAg
JmV4dHJhUGFyYW1zKTsKQEAgLTY5LDUyICs2OSw1MiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eDo6cGFpbnRUCiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4Ojpw
YWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQogewotICAgIFBsYXRmb3JtQnJp
ZGdlOjpUaGVtZVBhcnQgcGFpbnRQYXJ0OwotICAgIFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50
U3RhdGUgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAgUGxhdGZvcm1T
dXBwb3J0OjpUaGVtZVBhcnQgcGFpbnRQYXJ0OworICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQ
YWludFN0YXRlIHN0YXRlID0gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZU5vcm1hbDsKICAgICBib29s
IGNoZWNrTWluID0gZmFsc2U7CiAgICAgYm9vbCBjaGVja01heCA9IGZhbHNlOwogICAgIGlmIChz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAg
ICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAgICAgICBwYWludFBh
cnQgPSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICAgICAgICAg
IHBhaW50UGFydCA9IFBsYXRmb3JtU3VwcG9ydDo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKICAg
ICAgICAgICAgIGNoZWNrTWluID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHBhaW50UGFydCA9IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAg
ICAgICAgICAgIHBhaW50UGFydCA9IFBsYXRmb3JtU3VwcG9ydDo6UGFydFNjcm9sbGJhclJpZ2h0
QXJyb3c7CiAgICAgICAgICAgICBjaGVja01heCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAg
ICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3c7Cisg
ICAgICAgICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRTY3JvbGxiYXJVcEFy
cm93OwogICAgICAgICAgICAgY2hlY2tNaW4gPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJEb3duQXJy
b3c7CisgICAgICAgICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRTY3JvbGxi
YXJEb3duQXJyb3c7CiAgICAgICAgICAgICBjaGVja01heCA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKChjaGVja01pbiAmJiAoc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPD0gMCkp
CiAgICAgICAgIHx8IChjaGVja01heCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA9PSBzY3Jv
bGxiYXItPm1heGltdW0oKSkpIHsKLSAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3Rh
dGVEaXNhYmxlZDsKKyAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRlRGlzYWJs
ZWQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2Vk
UGFydCgpKQotICAgICAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVQcmVzc2Vk
OworICAgICAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRlUHJlc3NlZDsKICAg
ICAgICAgZWxzZSBpZiAocGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCi0gICAgICAg
ICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUhvdmVyOworICAgICAgICAgICAgc3Rh
dGUgPSBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRlSG92ZXI7CiAgICAgfQotICAgIFBsYXRmb3JtQnJp
ZGdlOjpwYWludFRoZW1lUGFydChnYywgcGFpbnRQYXJ0LCBzdGF0ZSwgcmVjdCwgMCk7CisgICAg
UGxhdGZvcm1TdXBwb3J0OjpwYWludFRoZW1lUGFydChnYywgcGFpbnRQYXJ0LCBzdGF0ZSwgcmVj
dCwgMCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1i
KEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewotICAgIFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGU7Cisg
ICAgUGxhdGZvcm1TdXBwb3J0OjpUaGVtZVBhaW50U3RhdGUgc3RhdGU7CiAKICAgICBpZiAoc2Ny
b2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgc3RhdGUgPSBQbGF0
Zm9ybUJyaWRnZTo6U3RhdGVQcmVzc2VkOworICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtU3VwcG9y
dDo6U3RhdGVQcmVzc2VkOwogICAgIGVsc2UgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9
PSBUaHVtYlBhcnQpCi0gICAgICAgIHN0YXRlID0gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlSG92ZXI7
CisgICAgICAgIHN0YXRlID0gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZUhvdmVyOwogICAgIGVsc2UK
LSAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVOb3JtYWw7Ci0gICAgUGxhdGZv
cm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAorICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtU3VwcG9y
dDo6U3RhdGVOb3JtYWw7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpwYWludFRoZW1lUGFydCgKICAg
ICAgICAgZ2MsCi0gICAgICAgIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIg
OiBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIsCisgICAgICAgIHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gUGxhdGZvcm1T
dXBwb3J0OjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iIDogUGxhdGZvcm1TdXBwb3J0OjpQ
YXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYiwKICAgICAgICAgc3RhdGUsCiAgICAgICAgIHJlY3Qs
CiAgICAgICAgIDApOwpAQCAtMTI4LDIzICsxMjgsMjMgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXg6OnNob3VsZAogSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6
OmJ1dHRvblNpemUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNp
emUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFy
dFNjcm9sbGJhclVwQXJyb3cpOworICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybVN1cHBv
cnQ6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1TdXBwb3J0OjpQYXJ0U2Nyb2xsYmFyVXBBcnJv
dyk7CiAgICAgICAgIHJldHVybiBJbnRTaXplKHNpemUud2lkdGgoKSwgc2Nyb2xsYmFyLT5oZWln
aHQoKSA8IDIgKiBzaXplLmhlaWdodCgpID8gc2Nyb2xsYmFyLT5oZWlnaHQoKSAvIDIgOiBzaXpl
LmhlaWdodCgpKTsKICAgICB9CiAKICAgICAvLyBIb3Jpem9udGFsU2Nyb2xsYmFyCi0gICAgSW50
U2l6ZSBzaXplID0gUGxhdGZvcm1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3cpOworICAgIEludFNpemUgc2l6ZSA9IFBsYXRmb3Jt
U3VwcG9ydDo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRTY3JvbGxiYXJM
ZWZ0QXJyb3cpOwogICAgIHJldHVybiBJbnRTaXplKHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiBz
aXplLndpZHRoKCkgPyBzY3JvbGxiYXItPndpZHRoKCkgLyAyIDogc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKIH0KIAogaW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6bWluaW11
bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgSW50U2l6ZSBz
aXplID0gUGxhdGZvcm1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1CcmlkZ2U6OlBh
cnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iKTsKKyAgICAgICAgSW50U2l6ZSBzaXplID0gUGxhdGZv
cm1TdXBwb3J0OjpnZXRUaGVtZVBhcnRTaXplKFBsYXRmb3JtU3VwcG9ydDo6UGFydFNjcm9sbGJh
clZlcnRpY2FsVGh1bWIpOwogICAgICAgICByZXR1cm4gc2l6ZS5oZWlnaHQoKTsKICAgICB9CiAK
LSAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0
Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYik7CisgICAgSW50U2l6ZSBz
aXplID0gUGxhdGZvcm1TdXBwb3J0OjpnZXRUaGVtZVBhcnRTaXplKFBsYXRmb3JtU3VwcG9ydDo6
UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYik7CiAgICAgcmV0dXJuIHNpemUud2lkdGgoKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA5NDI0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJHcmFkaWVu
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNs
dWRlICJTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5o
IgogI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KQEAgLTQ1NiwxNiArNDU2LDE2IEBAIHN0YXRp
YyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUKICAgICB9CiB9CiAKLXN0YXRpYyBQ
bGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRl
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQorc3RhdGljIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWlu
dFN0YXRlIHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQog
ewogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBQbGF0Zm9y
bUJyaWRnZTo6U3RhdGVEaXNhYmxlZDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6
U3RhdGVEaXNhYmxlZDsKICAgICBpZiAoIXNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+aXNB
Y3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUluYWN0aXZlOwor
ICAgICAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZUluYWN0aXZlOwogICAgIGlmIChz
Y3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICByZXR1cm4gUGxh
dGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9y
dDo6U3RhdGVQcmVzc2VkOwogCi0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUFjdGl2
ZTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZUFjdGl2ZTsKIH0KIAogdm9pZCBT
Y3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCkBAIC02MjIsMTggKzYyMiwxOCBAQCBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50KFNjCiAgICAgcGFpbnRHaXZlblRpY2ttYXJrcyhkcmF3aW5nQ29udGV4dCwg
c2Nyb2xsYmFyLCB0aWNrbWFya1RyYWNrUmVjdCwgdGlja21hcmtzKTsKIAogICAgIGlmIChoYXNU
aHVtYihzY3JvbGxiYXIpKSB7Ci0gICAgICAgIFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50U2Ny
b2xsYmFySW5mbyBzY3JvbGxiYXJJbmZvOwotICAgICAgICBzY3JvbGxiYXJJbmZvLm9yaWVudGF0
aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBQ
bGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsIDogUGxhdGZvcm1C
cmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWw7Ci0gICAgICAgIHNjcm9sbGJhcklu
Zm8ucGFyZW50ID0gc2Nyb2xsYmFyLT5wYXJlbnQoKSAmJiBzY3JvbGxiYXItPnBhcmVudCgpLT5p
c0ZyYW1lVmlldygpICYmIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHNjcm9sbGJhci0+cGFyZW50
KCkpLT5pc1Njcm9sbFZpZXdTY3JvbGxiYXIoc2Nyb2xsYmFyKSA/IFBsYXRmb3JtQnJpZGdlOjpT
Y3JvbGxiYXJQYXJlbnRTY3JvbGxWaWV3IDogUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhclBhcmVu
dFJlbmRlckxheWVyOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRTY3JvbGxi
YXJJbmZvIHNjcm9sbGJhckluZm87CisgICAgICAgIHNjcm9sbGJhckluZm8ub3JpZW50YXRpb24g
PSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IFBsYXRm
b3JtU3VwcG9ydDo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsIDogUGxhdGZvcm1TdXBw
b3J0OjpTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsOworICAgICAgICBzY3JvbGxiYXJJbmZv
LnBhcmVudCA9IHNjcm9sbGJhci0+cGFyZW50KCkgJiYgc2Nyb2xsYmFyLT5wYXJlbnQoKS0+aXNG
cmFtZVZpZXcoKSAmJiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihzY3JvbGxiYXItPnBhcmVudCgp
KS0+aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKHNjcm9sbGJhcikgPyBQbGF0Zm9ybVN1cHBvcnQ6OlNj
cm9sbGJhclBhcmVudFNjcm9sbFZpZXcgOiBQbGF0Zm9ybVN1cHBvcnQ6OlNjcm9sbGJhclBhcmVu
dFJlbmRlckxheWVyOwogICAgICAgICBzY3JvbGxiYXJJbmZvLm1heFZhbHVlID0gc2Nyb2xsYmFy
LT5tYXhpbXVtKCk7CiAgICAgICAgIHNjcm9sbGJhckluZm8uY3VycmVudFZhbHVlID0gc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCk7CiAgICAgICAgIHNjcm9sbGJhckluZm8udmlzaWJsZVNpemUgPSBz
Y3JvbGxiYXItPnZpc2libGVTaXplKCk7CiAgICAgICAgIHNjcm9sbGJhckluZm8udG90YWxTaXpl
ID0gc2Nyb2xsYmFyLT50b3RhbFNpemUoKTsKIAotICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6cGFp
bnRTY3JvbGxiYXJUaHVtYigKKyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpwYWludFNjcm9sbGJh
clRodW1iKAogICAgICAgICAgICAgZHJhd2luZ0NvbnRleHQsCiAgICAgICAgICAgICBzY3JvbGxi
YXJTdGF0ZVRvVGhlbWVTdGF0ZShzY3JvbGxiYXIpLAotICAgICAgICAgICAgc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpID09IFJlZ3VsYXJTY3JvbGxiYXIgPyBQbGF0Zm9ybUJyaWRnZTo6U2l6ZVJl
Z3VsYXIgOiBQbGF0Zm9ybUJyaWRnZTo6U2l6ZVNtYWxsLAorICAgICAgICAgICAgc2Nyb2xsYmFy
LT5jb250cm9sU2l6ZSgpID09IFJlZ3VsYXJTY3JvbGxiYXIgPyBQbGF0Zm9ybVN1cHBvcnQ6OlNp
emVSZWd1bGFyIDogUGxhdGZvcm1TdXBwb3J0OjpTaXplU21hbGwsCiAgICAgICAgICAgICBzY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLAogICAgICAgICAgICAgc2Nyb2xsYmFySW5mbyk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRlIDx2c3N0eWxlLmg+
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRn
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJT
Y3JvbGxiYXIuaCIKICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAKQEAgLTYxLDcgKzYxLDcgQEAg
aW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNjcm9sbGJhcgogewogICAgIHN0YXRpYyBp
bnQgdGhpY2tuZXNzOwogICAgIGlmICghdGhpY2tuZXNzKSB7Ci0gICAgICAgIGlmIChQbGF0Zm9y
bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKKyAgICAgICAgaWYgKFBsYXRmb3JtU3VwcG9ydDo6
bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBrTWFjU2Nyb2xsYmFyU2l6ZVtj
b250cm9sU2l6ZV07CiAgICAgICAgIHRoaWNrbmVzcyA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hW
U0NST0xMKTsKICAgICB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFRyYQogICAgIEludFJlY3QgYWxpZ25SZWN0ID0gdHJhY2tSZWN0KHNj
cm9sbGJhciwgZmFsc2UpOwogCiAgICAgLy8gRHJhdyB0aGUgdHJhY2sgYXJlYSBiZWZvcmUvYWZ0
ZXIgdGhlIHRodW1iIG9uIHRoZSBzY3JvbGwgYmFyLgotICAgIFBsYXRmb3JtQnJpZGdlOjpwYWlu
dFNjcm9sbGJhclRyYWNrKAorICAgIFBsYXRmb3JtU3VwcG9ydDo6cGFpbnRTY3JvbGxiYXJUcmFj
aygKICAgICAgICAgZ2MsCiAgICAgICAgIHBhcnRJZCwKICAgICAgICAgZ2V0VGhlbWVTdGF0ZShz
Y3JvbGxiYXIsIHBhcnRUeXBlKSwKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0CiAgICAgICAgIHBhcnRJZCA9IGhvcnogPyBERkNTX1ND
Uk9MTFJJR0hUIDogREZDU19TQ1JPTExET1dOOwogCiAgICAgLy8gRHJhdyB0aGUgdGh1bWIgKHRo
ZSBib3ggeW91IGRyYWcgaW4gdGhlIHNjcm9sbCBiYXIgdG8gc2Nyb2xsKS4KLSAgICBQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdygKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnBhaW50
U2Nyb2xsYmFyQXJyb3coCiAgICAgICAgIGdjLAogICAgICAgICBnZXRUaGVtZUFycm93U3RhdGUo
c2Nyb2xsYmFyLCBwYXJ0KSwKICAgICAgICAgcGFydElkIHwgZ2V0Q2xhc3NpY1RoZW1lU3RhdGUo
c2Nyb2xsYmFyLCBwYXJ0KSwKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1XaW46OnBhaW50VGh1CiAgICAgYm9vbCBob3J6ID0gc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7CiAKICAgICAvLyBEcmF3IHRoZSB0aHVtYiAo
dGhlIGJveCB5b3UgZHJhZyBpbiB0aGUgc2Nyb2xsIGJhciB0byBzY3JvbGwpLgotICAgIFBsYXRm
b3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAorICAgIFBsYXRmb3JtU3VwcG9ydDo6cGFp
bnRTY3JvbGxiYXJUaHVtYigKICAgICAgICAgZ2MsCiAgICAgICAgIGhvcnogPyBTQlBfVEhVTUJC
VE5IT1JaIDogU0JQX1RIVU1CQlROVkVSVCwKICAgICAgICAgZ2V0VGhlbWVTdGF0ZShzY3JvbGxi
YXIsIFRodW1iUGFydCksCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFRodQogICAgICAgICByZWN0KTsKIAogICAgIC8vIERyYXcgdGhlIGdy
aXBwZXIgKHRoZSB0aHJlZSBsaXR0bGUgbGluZXMgb24gdGhlIHRodW1iKS4KLSAgICBQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnBhaW50
U2Nyb2xsYmFyVGh1bWIoCiAgICAgICAgIGdjLAogICAgICAgICBob3J6ID8gU0JQX0dSSVBQRVJI
T1JaIDogU0JQX0dSSVBQRVJWRVJULAogICAgICAgICBnZXRUaGVtZVN0YXRlKHNjcm9sbGJhciwg
VGh1bWJQYXJ0KSwKQEAgLTI1Niw3ICsyNTYsNyBAQCBJbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1XaW46OmJ1dHRvCiAgICAgLy8gdGVzdCBtb2RlIHNvIHRoYXQgc2hvdWxkIGJlIGVub3Vn
aCB0byByZXN1bHQgaW4gcmVwZWF0YWJsZSByZXN1bHRzLCBidXQKICAgICAvLyBwcmVzZXJ2aW5n
IHRoaXMgaGFjayBhdm9pZHMgaGF2aW5nIHRvIHJlYmFzZWxpbmUgcGl4ZWwgdGVzdHMuCiAgICAg
Y29uc3QgaW50IGtMYXlvdXRUZXN0TW9kZUdpcnRoID0gMTc7Ci0gICAgaW50IGdpcnRoID0gUGxh
dGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBrTGF5b3V0VGVzdE1vZGVHaXJ0aCA6IHRo
aWNrbmVzczsKKyAgICBpbnQgZ2lydGggPSBQbGF0Zm9ybVN1cHBvcnQ6OmxheW91dFRlc3RNb2Rl
KCkgPyBrTGF5b3V0VGVzdE1vZGVHaXJ0aCA6IHRoaWNrbmVzczsKIAogICAgIGlmIChzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBpbnQg
d2lkdGggPSBzY3JvbGxiYXItPndpZHRoKCkgPCAyICogZ2lydGggPyBzY3JvbGxiYXItPndpZHRo
KCkgLyAyIDogZ2lydGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
aGFyZWRUaW1lckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TaGFyZWRUaW1lckNocm9taXVtLmNwcAkocmV2aXNpb24gOTQyNDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TaGFyZWRUaW1lckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjMgKzI2LDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU2hhcmVkVGltZXIuaCIKIAotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCiB7ICAgICAgICAg
ICAgICAgICAgIAotICAgIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rp
b24oZik7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24o
Zik7CiB9CiAKIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlSW50ZXJ2YWwoZG91YmxlIGZpcmVUaW1l
KQogewotICAgIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChmaXJl
VGltZSk7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChm
aXJlVGltZSk7CiB9CiAKIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKIHsKLSAgICBQbGF0Zm9ybUJy
aWRnZTo6c3RvcFNoYXJlZFRpbWVyKCk7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpzdG9wU2hhcmVk
VGltZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRp
b25DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDE4ICszMSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN1ZGRl
blRlcm1pbmF0aW9uLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgZGlzYWJs
ZVN1ZGRlblRlcm1pbmF0aW9uKCkKIHsKLSAgICBQbGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVybWlu
YXRpb25DaGFuZ2VkKGZhbHNlKTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnN1ZGRlblRlcm1pbmF0
aW9uQ2hhbmdlZChmYWxzZSk7CiB9CiAKIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKQog
ewotICAgIFBsYXRmb3JtQnJpZGdlOjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQodHJ1ZSk7Cisg
ICAgUGxhdGZvcm1TdXBwb3J0OjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQodHJ1ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1RyYWNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9UcmFjZUV2ZW50LmgJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vVHJhY2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaWZuZGVmIFRyYWNlRXZlbnRfaAogI2RlZmluZSBUcmFjZUV2ZW50X2gKIAot
I2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0Lmgi
CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIC8vIEltcGxlbWVudGF0aW9uIGRldGFp
bDogdHJhY2UgZXZlbnQgbWFjcm9zIGNyZWF0ZSB0ZW1wb3JhcnkgdmFyaWFibGVzCkBAIC0zNSw3
ICszNSw3IEBACiAjZGVmaW5lIFRSQUNFX0VWRU5UX01BS0VfVU5JUVVFX0lERU5USUZJRVIyKGEs
IGIpIFRSQUNFX0VWRU5UX01BS0VfVU5JUVVFX0lERU5USUZJRVIzKGEsIGIpCiAjZGVmaW5lIFRS
QUNFX0VWRU5UX01BS0VfVU5JUVVFX0lERU5USUZJRVIobmFtZV9wcmVmaXgpIFRSQUNFX0VWRU5U
X01BS0VfVU5JUVVFX0lERU5USUZJRVIyKG5hbWVfcHJlZml4LCBfX0xJTkVfXykKIAotLy8gSXNz
dWVzIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4gYW5kIHRyYWNlRXZlbnRFbmQgY2Fs
bHMgZm9yIHRoZSBlbmNsb3Npbmcgc2NvcGUKKy8vIElzc3VlcyBQbGF0Zm9ybVN1cHBvcnQ6OnRy
YWNlRXZlbnRCZWdpbiBhbmQgdHJhY2VFdmVudEVuZCBjYWxscyBmb3IgdGhlIGVuY2xvc2luZyBz
Y29wZQogI2RlZmluZSBUUkFDRV9FVkVOVChuYW1lLCBpZCwgZXh0cmEpIFdlYkNvcmU6OmludGVy
bmFsOjpTY29wZVRyYWNlciBUUkFDRV9FVkVOVF9NQUtFX1VOSVFVRV9JREVOVElGSUVSKF9fdHJh
Y2VFdmVudFNjb3BlKShuYW1lLCBpZCwgZXh0cmEpOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01OCwxNCArNTgsMTQgQEAgaW5saW5lIFNjb3BlVHJhY2VyOjpTY29wZVRyYWNlcihjb25zdCBj
aAogICAgIDogbV9uYW1lKG5hbWUpCiAgICAgLCBtX2lkKGlkKQogewotICAgIFBsYXRmb3JtQnJp
ZGdlOjp0cmFjZUV2ZW50QmVnaW4obmFtZSwgaWQsIGV4dHJhKTsgXAorICAgIFBsYXRmb3JtU3Vw
cG9ydDo6dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlkLCBleHRyYSk7IFwKICAgICBpZiAoZXh0cmEp
CiAgICAgICAgIG1fZXh0cmEgPSBhZG9wdEFycmF5UHRyKHN0cmR1cChleHRyYSkpOwogfQogCiBp
bmxpbmUgU2NvcGVUcmFjZXI6On5TY29wZVRyYWNlcigpCiB7Ci0gICAgUGxhdGZvcm1CcmlkZ2U6
OnRyYWNlRXZlbnRFbmQobV9uYW1lLCBtX2lkLCBtX2V4dHJhLmdldCgpKTsKKyAgICBQbGF0Zm9y
bVN1cHBvcnQ6OnRyYWNlRXZlbnRFbmQobV9uYW1lLCBtX2lkLCBtX2V4dHJhLmdldCgpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtNTksOCArNTksOCBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNvbnRlbnRS
ZWN0KTsKICAgICAgICAgZG91YmxlIHBhaW50RW5kID0gY3VycmVudFRpbWUoKTsKICAgICAgICAg
ZG91YmxlIHBpeGVsc1BlclNlYyA9IChjb250ZW50UmVjdC53aWR0aCgpICogY29udGVudFJlY3Qu
aGVpZ2h0KCkpIC8gKHBhaW50RW5kIC0gcGFpbnRTdGFydCk7Ci0gICAgICAgIFBsYXRmb3JtQnJp
ZGdlOjpoaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5BY2NlbENvbnRlbnRQYWludER1
cmF0aW9uTVMiLCAocGFpbnRFbmQgLSBwYWludFN0YXJ0KSAqIDEwMDAsIDAsIDEyMCwgMzApOwot
ICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQu
QWNjZWxDb250ZW50UGFpbnRNZWdhcGl4UGVyU2Vjb25kIiwgcGl4ZWxzUGVyU2VjIC8gMTAwMDAw
MCwgMTAsIDIxMCwgMzApOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6Omhpc3RvZ3JhbUN1c3Rv
bUNvdW50cygiUmVuZGVyZXI0LkFjY2VsQ29udGVudFBhaW50RHVyYXRpb25NUyIsIChwYWludEVu
ZCAtIHBhaW50U3RhcnQpICogMTAwMCwgMCwgMTIwLCAzMCk7CisgICAgICAgIFBsYXRmb3JtU3Vw
cG9ydDo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuQWNjZWxDb250ZW50UGFpbnRN
ZWdhcGl4UGVyU2Vjb25kIiwgcGl4ZWxzUGVyU2VjIC8gMTAwMDAwMCwgMTAsIDIxMCwgMzApOwog
ICAgIH0KIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyUGFpbnRlcihHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9u
dExvYWRpbmcubW0JKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgIkNyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgi
CiAKICNpbXBvcnQgIi4uL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbXBvcnQgIlBs
YXRmb3JtQnJpZGdlLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbXBvcnQgPEFw
cEtpdC9OU0ZvbnQuaD4KICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTEzNSw3ICsxMzUs
NyBAQCBQYXNzUmVmUHRyPE1lbW9yeUFjdGl2YXRlZEZvbnQ+IGxvYWRGb250CiAgICAgQVRTRm9u
dENvbnRhaW5lclJlZiBjb250YWluZXI7CiAgICAgdWludDMyX3QgZm9udElEOwogICAgIC8vIFNl
bmQgY3Jvc3MtcHJvY2VzcyByZXF1ZXN0IHRvIGxvYWQgZm9udC4KLSAgICBpZiAoIVBsYXRmb3Jt
QnJpZGdlOjpsb2FkRm9udChuc0ZvbnQsICZjb250YWluZXIsICZmb250SUQpKQorICAgIGlmICgh
UGxhdGZvcm1TdXBwb3J0Ojpsb2FkRm9udChuc0ZvbnQsICZjb250YWluZXIsICZmb250SUQpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGZvbnRJRCBm
cm9tIHRoZSBicm93c2VyIHByb2Nlc3MsIHdlIGNhbiBjb25zdWx0CkBAIC0xNDQsNyArMTQ0LDcg
QEAgUGFzc1JlZlB0cjxNZW1vcnlBY3RpdmF0ZWRGb250PiBsb2FkRm9udAogICAgIGlmIChmb250
KSB7CiAgICAgICAgIC8vIFdlIGNhbiBzYWZlbHkgZGlzY2FyZCB0aGUgbmV3IGNvbnRhaW5lciBz
aW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlCiAgICAgICAgIC8vIGZvbnQgaW4gb3VyIGNhY2hlLgot
ICAgICAgICAvLyBGSVhNRTogUGxhdGZvcm1CcmlkZ2U6OmxvYWRGb250KCkgc2hvdWxkIGNvbnN1
bHQgdGhlIGlkIGNhY2hlCisgICAgICAgIC8vIEZJWE1FOiBQbGF0Zm9ybVN1cHBvcnQ6OmxvYWRG
b250KCkgc2hvdWxkIGNvbnN1bHQgdGhlIGlkIGNhY2hlCiAgICAgICAgIC8vIGJlZm9yZSBhY3Rp
dmF0aW5nIHRoZSBmb250LiAgVGhlbiB3ZSBjYW4gc2F2ZSB0aGlzIGFjdGl2YXRlL2RlYWN0aXZl
CiAgICAgICAgIC8vIGRhbmNlIGFsdG9nZXRoZXIuCiAgICAgICAgIEFUU0ZvbnREZWFjdGl2YXRl
KGNvbnRhaW5lciwgMCwga0FUU09wdGlvbkZsYWdzRGVmYXVsdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udENhY2hlQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkZvbnRVdGlsc0Nocm9t
aXVtV2luLmgiCiAjaW5jbHVkZSAiSGFzaE1hcC5oIgogI2luY2x1ZGUgIkhhc2hTZXQuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgog
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91bmlzZXQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yODgsNyArMjg4LDcgQEAgc3Rh
dGljIGJvb2wgZm9udENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0IAogICAgIEhEQyBoZGMgPSBHZXRE
QygwKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oU2VsZWN0T2Jq
ZWN0KGhkYywgaGZvbnQpKTsKICAgICBpbnQgY291bnQgPSBHZXRGb250VW5pY29kZVJhbmdlcyho
ZGMsIDApOwotICAgIGlmICghY291bnQgJiYgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2Fk
ZWQoaGZvbnQpKQorICAgIGlmICghY291bnQgJiYgUGxhdGZvcm1TdXBwb3J0OjplbnN1cmVGb250
TG9hZGVkKGhmb250KSkKICAgICAgICAgY291bnQgPSBHZXRGb250VW5pY29kZVJhbmdlcyhoZGMs
IDApOwogICAgIGlmICghY291bnQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZ2V0
IHRoZSBmb250IHVuaWNvZGUgcmFuZ2UgYWZ0ZXIgc2Vjb25kIGF0dGVtcHQiKTsKQEAgLTM2Miw3
ICszNjIsNyBAQCBzdGF0aWMgdm9pZCBGaWxsTG9nRm9udChjb25zdCBGb250RGVzY3JpCiAgICAg
d2luZm9udC0+bGZTdHJpa2VPdXQgPSBmYWxzZTsKICAgICB3aW5mb250LT5sZkNoYXJTZXQgPSBE
RUZBVUxUX0NIQVJTRVQ7CiAgICAgd2luZm9udC0+bGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05M
WV9QUkVDSVM7Ci0gICAgd2luZm9udC0+bGZRdWFsaXR5ID0gUGxhdGZvcm1CcmlkZ2U6OmxheW91
dFRlc3RNb2RlKCkgPyBOT05BTlRJQUxJQVNFRF9RVUFMSVRZIDogREVGQVVMVF9RVUFMSVRZOyAv
LyBIb25vciB1c2VyJ3MgZGVza3RvcCBzZXR0aW5ncy4KKyAgICB3aW5mb250LT5sZlF1YWxpdHkg
PSBQbGF0Zm9ybVN1cHBvcnQ6OmxheW91dFRlc3RNb2RlKCkgPyBOT05BTlRJQUxJQVNFRF9RVUFM
SVRZIDogREVGQVVMVF9RVUFMSVRZOyAvLyBIb25vciB1c2VyJ3MgZGVza3RvcCBzZXR0aW5ncy4K
ICAgICB3aW5mb250LT5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRD
QVJFOwogICAgIHdpbmZvbnQtPmxmSXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygpOwog
ICAgIHdpbmZvbnQtPmxmV2VpZ2h0ID0gdG9HRElGb250V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53
ZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwCShyZXZpc2lvbiA5NDI0MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxp
bnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3VwcG9ydC5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpbmNsdWRlICJTa1Bh
aW50LmgiCkBAIC01OSw3ICs1OSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6
OmdldEZvbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbGVuZ3RoKQogewogICAgIGljdTo6TG9jYWxlIGxvY2FsZSA9IGljdTo6
TG9jYWxlOjpnZXREZWZhdWx0KCk7Ci0gICAgU3RyaW5nIGZhbWlseSA9IFBsYXRmb3JtQnJpZGdl
OjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgsIGxvY2FsZS5n
ZXRMYW5ndWFnZSgpKTsKKyAgICBTdHJpbmcgZmFtaWx5ID0gUGxhdGZvcm1TdXBwb3J0OjpnZXRG
b250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgsIGxvY2FsZS5nZXRMYW5n
dWFnZSgpKTsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJv
bWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiRm9udEZhbGxiYWNr
TGlzdC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Vw
cG9ydC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlNraWFGb250V2luLmgiCkBAIC00MzEsNyArNDMxLDcg
QEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1dpbihHcmFwaGljc0NvbnRleAogICAgICAgICAgICAg
c3VjY2VzcyA9IHBhaW50ZXIuZHJhd0dseXBocyhjdXJMZW4sICZnbHlwaHNbMF0sICZhZHZhbmNl
c1swXSwgaG9yaXpvbnRhbE9mZnNldCAtIHBvaW50LngoKSAtIGN1cnJlbnRXaWR0aCk7CiAgICAg
ICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgZXhlY3V0aW9ucyA9PSAwKSB7CiAgICAgICAgICAgICAg
ICAgLy8gQXNrIHRoZSBicm93c2VyIHRvIGxvYWQgdGhlIGZvbnQgZm9yIHVzIGFuZCByZXRyeS4K
LSAgICAgICAgICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChmb250LT5w
bGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6
OmVuc3VyZUZvbnRMb2FkZWQoZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9y
bURhdGFDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcAkocmV2
aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
MSArMzIsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1E
YXRhLmgiCiAKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8b2JqaWRsLmg+CiAjaW5j
bHVkZSA8bWxhbmcuaD4KLQotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSA8
b2JqaWRsLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9y
dC5oIgogI2luY2x1ZGUgIlNraWFGb250V2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTEzNSw3ICsxMzQsNyBAQCBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIEZvbnRQbGF0Zm9ybURhdGE6
CiAgICAgICAgICAgICBIUkVTVUxUIGhyID0gU2NyaXB0R2V0Rm9udFByb3BlcnRpZXMoZGMsIHNj
cmlwdENhY2hlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyk7CiAgICAgICAgICAgICBpZiAoU19PSyAhPSBo
cikgewotICAgICAgICAgICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJlRm9udExvYWRl
ZChoZm9udCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmVuc3Vy
ZUZvbnRMb2FkZWQoaGZvbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhh
bmRsZSBncmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNhbGwgYWxzbyBmYWlscy4KICAgICAg
ICAgICAgICAgICAgICAgaHIgPSBTY3JpcHRHZXRGb250UHJvcGVydGllcyhkYywgc2NyaXB0Q2Fj
aGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3NjcmlwdEZvbnRQcm9wZXJ0aWVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUxpbnV4LmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAK
ICNpbmNsdWRlICJTa0FkdmFuY2VkVHlwZWZhY2VNZXRyaWNzLmgiCkBAIC0yNDUsNyArMjQ1LDcg
QEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJlbgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUGxhdGZvcm1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtl
KG1fZmFtaWx5LmRhdGEoKSwgKCgoaW50KW1fdGV4dFNpemUpIDw8IDIpIHwgKG1fdHlwZWZhY2Ut
PnN0eWxlKCkgJiAzKSwgJm1fc3R5bGUpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6Z2V0UmVuZGVy
U3R5bGVGb3JTdHJpa2UobV9mYW1pbHkuZGF0YSgpLCAoKChpbnQpbV90ZXh0U2l6ZSkgPDwgMikg
fCAobV90eXBlZmFjZS0+c3R5bGUoKSAmIDMpLCAmbV9zdHlsZSk7CiB9CiAKIH0gIC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNo
cm9taXVtV2luLmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgog
I2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKICNpbmNsdWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0UnVu
LmgiCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBib29sIGZpbGxCTVBHbHlwaHModW5zaWduZWQg
b2Zmc2UKICAgICAgICAgUmVsZWFzZURDKDAsIGRjKTsKIAogICAgICAgICBpZiAocmVjdXJzZSkg
ewotICAgICAgICAgICAgaWYgKFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKSkKKyAgICAgICAgICAgIGlmIChQbGF0Zm9ybVN1
cHBvcnQ6OmVuc3VyZUZvbnRMb2FkZWQoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmaWxsQk1QR2x5cGhzKG9mZnNldCwgbGVuZ3RoLCBi
dWZmZXIsIHBhZ2UsIGZvbnREYXRhLCBmYWxzZSk7CiAKICAgICAgICAgICAgIGZpbGxFbXB0eUds
eXBocyhwYWdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDI0MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQogewotICAgIHJldHVy
biBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShuYW1lKTsKKyAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKG5hbWUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMu
bW0JKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0
LDEzIEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkltYWdlLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1C
cmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UobmFtZSk7CisgICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShuYW1lKTsKIH0KIAogLy8gRklY
TUU6IFRoZXNlIGFyZSB0ZW1wb3Jhcnkgc3R1YnMsIHdlIG5lZWQgcmVhbCBpbXBsZW1lbnRhdGlv
bnMgd2hpY2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KQEAgLTYwLDcgKzYwLDcgQEAgdm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKIAogICAgIFRFWFRNRVRSSUMgdGV4dE1l
dHJpYyA9IHswfTsKICAgICBpZiAoIUdldFRleHRNZXRyaWNzKGRjLCAmdGV4dE1ldHJpYykpIHsK
LSAgICAgICAgaWYgKFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1E
YXRhLmhmb250KCkpKSB7CisgICAgICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmVuc3VyZUZvbnRM
b2FkZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkpIHsKICAgICAgICAgICAgIC8vIFJldHJ5IEdl
dFRleHRNZXRyaWNzLgogICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBncmFjZWZ1bGx5IHRo
ZSBlcnJvciBpZiB0aGlzIGNhbGwgYWxzbyBmYWlscy4KICAgICAgICAgICAgIC8vIFNlZSBodHRw
Oi8vY3JidWcuY29tLzY0MDEuCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIC8vIGlzICpub3QqIGZpeGVkIHBpdGNoLiAgVW5iZWxp
ZXZhYmxlIGJ1dCB0cnVlLgogICAgIFRFWFRNRVRSSUMgdGV4dE1ldHJpYyA9IHswfTsKICAgICBp
ZiAoIUdldFRleHRNZXRyaWNzKGRjLCAmdGV4dE1ldHJpYykpIHsKLSAgICAgICAgaWYgKFBsYXRm
b3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhmb250KCkpKSB7Cisg
ICAgICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURh
dGEuaGZvbnQoKSkpIHsKICAgICAgICAgICAgIC8vIFJldHJ5IEdldFRleHRNZXRyaWNzLgogICAg
ICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBncmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNh
bGwgYWxzbyBmYWlscy4KICAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vY3JidWcuY29tLzY0MDEu
CkBAIC0xODUsNyArMTg1LDcgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhG
b3JHbAogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaWYgKCFHZXRDaGFyV2lkdGhJKGRjLCBnbHlw
aCwgMSwgMCwgJndpZHRoKSkgewogICAgICAgICAvLyBBc2sgdGhlIGJyb3dzZXIgdG8gcHJlbG9h
ZCB0aGUgZm9udCBhbmQgcmV0cnkuCi0gICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJl
Rm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgeworICAgICAgICBpZiAoUGxhdGZv
cm1TdXBwb3J0OjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhmb250KCkpKSB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGdyYWNlZnVsbHkgdGhlIGVycm9yIGlmIHRoaXMg
Y2FsbCBhbHNvIGZhaWxzLgogICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vNjQw
MS4KICAgICAgICAgICAgIGlmICghR2V0Q2hhcldpZHRoSShkYywgZ2x5cGgsIDEsIDAsICZ3aWR0
aCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Vbmlz
Y3JpYmVIZWxwZXJUZXh0UnVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcAkocmV2aXNp
b24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9V
bmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QAogI2luY2x1ZGUgIlVuaXNjcmliZUhlbHBlclRleHRSdW4uaCIKIAogI2luY2x1ZGUgIkZvbnQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9y
dC5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgog
CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6dHJ5VG9QcmVs
b2EKICAgICAvLyBBc2sgdGhlIGJyb3dzZXIgdG8gZ2V0IHRoZSBmb250IG1ldHJpY3MgZm9yIHRo
aXMgZm9udC4KICAgICAvLyBUaGF0IHdpbGwgcHJlbG9hZCB0aGUgZm9udCBhbmQgaXQgc2hvdWxk
IG5vdyBiZSBhY2Nlc3NpYmxlCiAgICAgLy8gZnJvbSB0aGUgcmVuZGVyZXIuCi0gICAgUGxhdGZv
cm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoZm9udCk7CisgICAgUGxhdGZvcm1TdXBwb3J0Ojpl
bnN1cmVGb250TG9hZGVkKGZvbnQpOwogfQogCiBib29sIFVuaXNjcmliZUhlbHBlclRleHRSdW46
Om5leHRXaW5Gb250RGF0YSgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAko
cmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBACiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJPcGVu
VHlwZVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdXBwb3J0LmgiCiAjZWxpZiBPUyhVTklYKSB8fCBQTEFURk9STShCUkVXTVApCiAj
aW5jbHVkZSAiU2tTdHJlYW0uaCIKICNlbmRpZgpAQCAtOTIsNyArOTIsNyBAQCBGb250UGxhdGZv
cm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAgICAgbG9nRm9udC5sZlN0cmlrZU91dCA9
IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwogICAgIGxv
Z0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7Ci0gICAgbG9nRm9udC5s
ZlF1YWxpdHkgPSBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/CisgICAgbG9nRm9u
dC5sZlF1YWxpdHkgPSBQbGF0Zm9ybVN1cHBvcnQ6OmxheW91dFRlc3RNb2RlKCkgPwogICAgICAg
ICAgICAgICAgICAgICAgICAgTk9OQU5USUFMSUFTRURfUVVBTElUWSA6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9wIHNldHRp
bmdzLgogICAgIGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0ggfCBGRl9E
T05UQ0FSRTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
Q29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDI0
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzOCArMzMsMzggQEAKIAogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1C
cmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgUGxhdGZvcm1CcmlkZ2U6OnNldENvb2tp
ZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2ll
cyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CiB9CiAKIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBQbGF0Zm9ybUJy
aWRnZTo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOwogfQogCiBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCiB7
Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKIH0KIAogYm9vbCBjb29raWVzRW5h
YmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJp
ZGdlOjpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9y
dDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOwogfQogCiBib29sIGdldFJhd0Nvb2tpZXMoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6cmF3Q29va2llcyhkb2N1
bWVudCwgdXJsLCByYXdDb29raWVzKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpyYXdD
b29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOwogfQogCiB2b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlQ29va2ll
KGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKIH0KIAogdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5T
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
NCArMjYsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJETlMuaCIKIAotI2lu
Y2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lk
IHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7Ci0gICAgUGxhdGZvcm1Ccmlk
Z2U6OnByZWZldGNoRE5TKGhvc3RuYW1lKTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnByZWZldGNo
RE5TKGhvc3RuYW1lKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cHJlcGFyZUZvclVSTChj
b25zdCBLVVJMJiB1cmwpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9y
bUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRm
b3JtQnJpZGdlLmgJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUGxhdGZvcm1CcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMDksIDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFBsYXRmb3JtQnJpZGdlX2gKLSNkZWZpbmUgUGxhdGZvcm1CcmlkZ2Vf
aAotCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLS8vIFY4IGJpbmRpbmdzIHVzZSB0aGUgQVJSQVlTSVpF
X1VOU0FGRSBtYWNyby4gVGhpcyBtYWNybyB3YXMgY29waWVkCi0vLyBmcm9tIGh0dHA6Ly9zcmMu
Y2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJvbWUvdHJ1bmsvc3JjL2Jhc2UvYmFzaWN0eXBlcy5oCi0v
LwotLy8gQVJSQVlTSVpFX1VOU0FGRSBwZXJmb3JtcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBjYWxj
dWxhdGlvbiBhcyBhcnJheXNpemUsCi0vLyBidXQgY2FuIGJlIHVzZWQgb24gYW5vbnltb3VzIHR5
cGVzIG9yIHR5cGVzIGRlZmluZWQgaW5zaWRlCi0vLyBmdW5jdGlvbnMuIEl0J3MgbGVzcyBzYWZl
IHRoYW4gYXJyYXlzaXplIGFzIGl0IGFjY2VwdHMgc29tZQotLy8gKGFsdGhvdWdoIG5vdCBhbGwp
IHBvaW50ZXJzLiBUaGVyZWZvcmUsIHlvdSBzaG91bGQgdXNlIGFycmF5c2l6ZQotLy8gd2hlbmV2
ZXIgcG9zc2libGUuCi0vLwotLy8gVGhlIGV4cHJlc3Npb24gQVJSQVlTSVpFX1VOU0FGRShhKSBp
cyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBvZiB0eXBlCi0vLyBzaXplX3QuCi0vLwotLy8gQVJS
QVlTSVpFX1VOU0FGRSBjYXRjaGVzIGEgZmV3IHR5cGUgZXJyb3JzLiBJZiB5b3Ugc2VlIGEgY29t
cGlsZXIgZXJyb3IKLS8vCi0vLyAgICJ3YXJuaW5nOiBkaXZpc2lvbiBieSB6ZXJvIGluIC4uLiIK
LS8vCi0vLyB3aGVuIHVzaW5nIEFSUkFZU0laRV9VTlNBRkUsIHlvdSBhcmUgKHdyb25nZnVsbHkp
IGdpdmluZyBpdCBhIHBvaW50ZXIuCi0vLyBZb3Ugc2hvdWxkIG9ubHkgdXNlIEFSUkFZU0laRV9V
TlNBRkUgb24gc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXlzLgotLy8KLS8vIFRoZSBmb2xsb3dp
bmcgY29tbWVudHMgYXJlIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgY2FuCi0v
LyBiZSBpZ25vcmVkIGJ5IHRoZSB1c2Vycy4KLS8vCi0vLyBBUlJBWVNJWkVfVU5TQUZFKGFycikg
d29ya3MgYnkgaW5zcGVjdGluZyBzaXplb2YoYXJyKSAodGhlICMgb2YgYnl0ZXMgaW4KLS8vIHRo
ZSBhcnJheSkgYW5kIHNpemVvZigqKGFycikpICh0aGUgIyBvZiBieXRlcyBpbiBvbmUgYXJyYXkK
LS8vIGVsZW1lbnQpLiBJZiB0aGUgZm9ybWVyIGlzIGRpdmlzaWJsZSBieSB0aGUgbGF0dGVyLCBw
ZXJoYXBzIGFyciBpcwotLy8gaW5kZWVkIGFuIGFycmF5LCBpbiB3aGljaCBjYXNlIHRoZSBkaXZp
c2lvbiByZXN1bHQgaXMgdGhlICMgb2YKLS8vIGVsZW1lbnRzIGluIHRoZSBhcnJheS4gT3RoZXJ3
aXNlLCBhcnIgY2Fubm90IHBvc3NpYmx5IGJlIGFuIGFycmF5LAotLy8gYW5kIHdlIGdlbmVyYXRl
IGEgY29tcGlsZXIgZXJyb3IgdG8gcHJldmVudCB0aGUgY29kZSBmcm9tCi0vLyBjb21waWxpbmcu
Ci0vLwotLy8gU2luY2UgdGhlIHNpemUgb2YgYm9vbCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVk
LCB3ZSBuZWVkIHRvIGNhc3QKLS8vICEoc2l6ZW9mKGEpICYgc2l6ZW9mKCooYSkpKSB0byBzaXpl
X3QgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBmaW5hbAotLy8gcmVzdWx0IGhhcyB0eXBlIHNpemVf
dC4KLS8vCi0vLyBUaGlzIG1hY3JvIGlzIG5vdCBwZXJmZWN0IGFzIGl0IHdyb25nZnVsbHkgYWNj
ZXB0cyBjZXJ0YWluCi0vLyBwb2ludGVycywgbmFtZWx5IHdoZXJlIHRoZSBwb2ludGVyIHNpemUg
aXMgZGl2aXNpYmxlIGJ5IHRoZSBwb2ludGVlCi0vLyBzaXplLiBTaW5jZSBhbGwgb3VyIGNvZGUg
aGFzIHRvIGdvIHRocm91Z2ggYSAzMi1iaXQgY29tcGlsZXIsCi0vLyB3aGVyZSBhIHBvaW50ZXIg
aXMgNCBieXRlcywgdGhpcyBtZWFucyBhbGwgcG9pbnRlcnMgdG8gYSB0eXBlIHdob3NlCi0vLyBz
aXplIGlzIDMgb3IgZ3JlYXRlciB0aGFuIDQgd2lsbCBiZSAocmlnaHRlb3VzbHkpIHJlamVjdGVk
LgotCi0jZGVmaW5lIEFSUkFZU0laRV9VTlNBRkUoYSkgXAotICAoKHNpemVvZihhKSAvIHNpemVv
ZigqKGEpKSkgLyBcCi0gICBzdGF0aWNfY2FzdDxzaXplX3Q+KCEoc2l6ZW9mKGEpICUgc2l6ZW9m
KCooYSkpKSkpCi0KLQotdHlwZWRlZiBzdHJ1Y3QgTlBPYmplY3QgTlBPYmplY3Q7Ci10eXBlZGVm
IHN0cnVjdCBfTlBQIE5QUF90OwotdHlwZWRlZiBOUFBfdCogTlBQOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFdpZGdldDsKLQotLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRp
bmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJpbGl0eSB0byBhbnN3ZXIKLS8vIHF1ZXN0aW9ucyBh
Ym91dCB0aGUgc3lzdGVtIGFuZCBzbyBvbi4uLgotLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8g
Y2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UgYW5kIHRoZSB0d28gYXJlIGxpa2VseSB0byBjb252ZXJn
ZQotLy8gaW4gdGhlIGZ1dHVyZS4KLWNsYXNzIFBsYXRmb3JtQnJpZGdlIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgYm9vbCBwb3B1cHNBbGxvd2VkKE5QUCBucHApOwotICAgIC8vIFBsdWdpbgotICAg
IHN0YXRpYyBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU9iamVjdChXaWRnZXQqKTsKLX07Ci0K
LX0KLSNlbmRpZiAvLyBQbGF0Zm9ybUJyaWRnZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZVF0LmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZVF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
UGx1Z2luVmlldy5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWJvb2wgUGxhdGZvcm1CcmlkZ2U6OnBvcHVwc0FsbG93ZWQoTlBQIG5wcCkKLXsKLSAgICBp
ZiAobnBwICYmIG5wcC0+bmRhdGEpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5W
aWV3Kj4obnBwLT5uZGF0YSktPmFyZVBvcHVwc0FsbG93ZWQoKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotTlBPYmplY3QqIFBsYXRmb3JtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0
KFdpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghd2lkZ2V0KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmICghd2lkZ2V0LT5pc1BsdWdpblZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdp
ZGdldCk7Ci0gICAgcmV0dXJuIHBsdWdpblZpZXctPm5wT2JqZWN0KCk7Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lv
biA5NDI0MykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1CcmlkZ2Uu
aDo5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU3VwcG9ydC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwg
MjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxh
dGZvcm1CcmlkZ2VfaAorI2RlZmluZSBQbGF0Zm9ybUJyaWRnZV9oCisKKyNpbmNsdWRlICJLVVJM
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworLy8gVjggYmluZGluZ3MgdXNlIHRoZSBBUlJBWVNJWkVfVU5TQUZFIG1hY3JvLiBUaGlz
IG1hY3JvIHdhcyBjb3BpZWQKKy8vIGZyb20gaHR0cDovL3NyYy5jaHJvbWl1bS5vcmcvdmlld3Zj
L2Nocm9tZS90cnVuay9zcmMvYmFzZS9iYXNpY3R5cGVzLmgKKy8vCisvLyBBUlJBWVNJWkVfVU5T
QUZFIHBlcmZvcm1zIGVzc2VudGlhbGx5IHRoZSBzYW1lIGNhbGN1bGF0aW9uIGFzIGFycmF5c2l6
ZSwKKy8vIGJ1dCBjYW4gYmUgdXNlZCBvbiBhbm9ueW1vdXMgdHlwZXMgb3IgdHlwZXMgZGVmaW5l
ZCBpbnNpZGUKKy8vIGZ1bmN0aW9ucy4gSXQncyBsZXNzIHNhZmUgdGhhbiBhcnJheXNpemUgYXMg
aXQgYWNjZXB0cyBzb21lCisvLyAoYWx0aG91Z2ggbm90IGFsbCkgcG9pbnRlcnMuIFRoZXJlZm9y
ZSwgeW91IHNob3VsZCB1c2UgYXJyYXlzaXplCisvLyB3aGVuZXZlciBwb3NzaWJsZS4KKy8vCisv
LyBUaGUgZXhwcmVzc2lvbiBBUlJBWVNJWkVfVU5TQUZFKGEpIGlzIGEgY29tcGlsZS10aW1lIGNv
bnN0YW50IG9mIHR5cGUKKy8vIHNpemVfdC4KKy8vCisvLyBBUlJBWVNJWkVfVU5TQUZFIGNhdGNo
ZXMgYSBmZXcgdHlwZSBlcnJvcnMuIElmIHlvdSBzZWUgYSBjb21waWxlciBlcnJvcgorLy8KKy8v
ICAgIndhcm5pbmc6IGRpdmlzaW9uIGJ5IHplcm8gaW4gLi4uIgorLy8KKy8vIHdoZW4gdXNpbmcg
QVJSQVlTSVpFX1VOU0FGRSwgeW91IGFyZSAod3JvbmdmdWxseSkgZ2l2aW5nIGl0IGEgcG9pbnRl
ci4KKy8vIFlvdSBzaG91bGQgb25seSB1c2UgQVJSQVlTSVpFX1VOU0FGRSBvbiBzdGF0aWNhbGx5
IGFsbG9jYXRlZCBhcnJheXMuCisvLworLy8gVGhlIGZvbGxvd2luZyBjb21tZW50cyBhcmUgb24g
dGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCBjYW4KKy8vIGJlIGlnbm9yZWQgYnkgdGhl
IHVzZXJzLgorLy8KKy8vIEFSUkFZU0laRV9VTlNBRkUoYXJyKSB3b3JrcyBieSBpbnNwZWN0aW5n
IHNpemVvZihhcnIpICh0aGUgIyBvZiBieXRlcyBpbgorLy8gdGhlIGFycmF5KSBhbmQgc2l6ZW9m
KCooYXJyKSkgKHRoZSAjIG9mIGJ5dGVzIGluIG9uZSBhcnJheQorLy8gZWxlbWVudCkuIElmIHRo
ZSBmb3JtZXIgaXMgZGl2aXNpYmxlIGJ5IHRoZSBsYXR0ZXIsIHBlcmhhcHMgYXJyIGlzCisvLyBp
bmRlZWQgYW4gYXJyYXksIGluIHdoaWNoIGNhc2UgdGhlIGRpdmlzaW9uIHJlc3VsdCBpcyB0aGUg
IyBvZgorLy8gZWxlbWVudHMgaW4gdGhlIGFycmF5LiBPdGhlcndpc2UsIGFyciBjYW5ub3QgcG9z
c2libHkgYmUgYW4gYXJyYXksCisvLyBhbmQgd2UgZ2VuZXJhdGUgYSBjb21waWxlciBlcnJvciB0
byBwcmV2ZW50IHRoZSBjb2RlIGZyb20KKy8vIGNvbXBpbGluZy4KKy8vCisvLyBTaW5jZSB0aGUg
c2l6ZSBvZiBib29sIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQsIHdlIG5lZWQgdG8gY2FzdAor
Ly8gIShzaXplb2YoYSkgJiBzaXplb2YoKihhKSkpIHRvIHNpemVfdCBpbiBvcmRlciB0byBlbnN1
cmUgdGhlIGZpbmFsCisvLyByZXN1bHQgaGFzIHR5cGUgc2l6ZV90LgorLy8KKy8vIFRoaXMgbWFj
cm8gaXMgbm90IHBlcmZlY3QgYXMgaXQgd3JvbmdmdWxseSBhY2NlcHRzIGNlcnRhaW4KKy8vIHBv
aW50ZXJzLCBuYW1lbHkgd2hlcmUgdGhlIHBvaW50ZXIgc2l6ZSBpcyBkaXZpc2libGUgYnkgdGhl
IHBvaW50ZWUKKy8vIHNpemUuIFNpbmNlIGFsbCBvdXIgY29kZSBoYXMgdG8gZ28gdGhyb3VnaCBh
IDMyLWJpdCBjb21waWxlciwKKy8vIHdoZXJlIGEgcG9pbnRlciBpcyA0IGJ5dGVzLCB0aGlzIG1l
YW5zIGFsbCBwb2ludGVycyB0byBhIHR5cGUgd2hvc2UKKy8vIHNpemUgaXMgMyBvciBncmVhdGVy
IHRoYW4gNCB3aWxsIGJlIChyaWdodGVvdXNseSkgcmVqZWN0ZWQuCisKKyNkZWZpbmUgQVJSQVlT
SVpFX1VOU0FGRShhKSBcCisgICgoc2l6ZW9mKGEpIC8gc2l6ZW9mKCooYSkpKSAvIFwKKyAgIHN0
YXRpY19jYXN0PHNpemVfdD4oIShzaXplb2YoYSkgJSBzaXplb2YoKihhKSkpKSkKKworCit0eXBl
ZGVmIHN0cnVjdCBOUE9iamVjdCBOUE9iamVjdDsKK3R5cGVkZWYgc3RydWN0IF9OUFAgTlBQX3Q7
Cit0eXBlZGVmIE5QUF90KiBOUFA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2lk
Z2V0OworCisvLyBBbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciwgd2hpY2ggaGFz
IHRoZSBhYmlsaXR5IHRvIGFuc3dlcgorLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5k
IHNvIG9uLi4uCisvLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBjaHJvbWl1bS9QbGF0Zm9ybUJy
aWRnZSBhbmQgdGhlIHR3byBhcmUgbGlrZWx5IHRvIGNvbnZlcmdlCisvLyBpbiB0aGUgZnV0dXJl
LgorY2xhc3MgUGxhdGZvcm1CcmlkZ2UgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIHBvcHVw
c0FsbG93ZWQoTlBQIG5wcCk7CisgICAgLy8gUGx1Z2luCisgICAgc3RhdGljIE5QT2JqZWN0KiBw
bHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCopOworfTsKKworfQorI2VuZGlmIC8vIFBsYXRm
b3JtQnJpZGdlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU3Vw
cG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3Jt
U3VwcG9ydC5oCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUGxhdGZvcm1CcmlkZ2VfaAotI2RlZmluZSBQbGF0
Zm9ybUJyaWRnZV9oCisjaWZuZGVmIFBsYXRmb3JtU3VwcG9ydF9oCisjZGVmaW5lIFBsYXRmb3Jt
U3VwcG9ydF9oCiAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKQEAgLTg0LDExICs4NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV2lkZ2V0
OwogCi0vLyBBbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciwgd2hpY2ggaGFzIHRo
ZSBhYmlsaXR5IHRvIGFuc3dlcgotLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHNv
IG9uLi4uCi0vLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBjaHJvbWl1bS9QbGF0Zm9ybUJyaWRn
ZSBhbmQgdGhlIHR3byBhcmUgbGlrZWx5IHRvIGNvbnZlcmdlCi0vLyBpbiB0aGUgZnV0dXJlLgot
Y2xhc3MgUGxhdGZvcm1CcmlkZ2UgeworLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gY2hyb21p
dW0vUGxhdGZvcm1TdXBwb3J0IGFuZCB0aGUgdHdvIGFyZSBsaWtlbHkgdG8KKy8vIGNvbnZlcmdl
IGluIHRoZSBmdXR1cmUuCitjbGFzcyBQbGF0Zm9ybVN1cHBvcnQgewogcHVibGljOgogICAgIHN0
YXRpYyBib29sIHBvcHVwc0FsbG93ZWQoTlBQIG5wcCk7CiAgICAgLy8gUGx1Z2luCkBAIC05Niw0
ICs5NCw0IEBAIHB1YmxpYzoKIH07CiAKIH0KLSNlbmRpZiAvLyBQbGF0Zm9ybUJyaWRnZV9oCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU3VwcG9ydFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybVN1
cHBvcnRRdC5jcHAJKHJldmlzaW9uIDk0MjQzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9QbGF0Zm9ybUJyaWRnZVF0LmNwcDo5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1BsYXRmb3JtU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUx
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Ccmlk
Z2UuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2lu
Y2x1ZGUgIldpZGdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgUGxhdGZvcm1C
cmlkZ2U6OnBvcHVwc0FsbG93ZWQoTlBQIG5wcCkKK3sKKyAgICBpZiAobnBwICYmIG5wcC0+bmRh
dGEpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4obnBwLT5uZGF0YSkt
PmFyZVBvcHVwc0FsbG93ZWQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworTlBPYmplY3Qq
IFBsYXRmb3JtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCogd2lkZ2V0KQor
eworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghd2lkZ2V0
LT5pc1BsdWdpblZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCk7CisgICAgcmV0dXJu
IHBsdWdpblZpZXctPm5wT2JqZWN0KCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1BsYXRmb3JtU3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybVN1cHBvcnRRdC5jcHAJKHJldmlzaW9uIDk0MjQzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1TdXBwb3J0UXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAgKgogICovCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQu
aCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgpAQCAtMjgs
NyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgUGxhdGZvcm1CcmlkZ2U6
OnBvcHVwc0FsbG93ZWQoTlBQIG5wcCkKK2Jvb2wgUGxhdGZvcm1TdXBwb3J0Ojpwb3B1cHNBbGxv
d2VkKE5QUCBucHApCiB7CiAgICAgaWYgKG5wcCAmJiBucHAtPm5kYXRhKQogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KG5wcC0+bmRhdGEpLT5hcmVQb3B1cHNBbGxvd2Vk
KCk7CkBAIC0zNiw3ICszNiw3IEBAIGJvb2wgUGxhdGZvcm1CcmlkZ2U6OnBvcHVwc0FsbG93ZWQo
TlBQIG4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5QT2JqZWN0KiBQbGF0Zm9ybUJyaWRnZTo6
cGx1Z2luU2NyaXB0YWJsZU9iamVjdChXaWRnZXQqIHdpZGdldCkKK05QT2JqZWN0KiBQbGF0Zm9y
bVN1cHBvcnQ6OnBsdWdpblNjcmlwdGFibGVPYmplY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAg
aWYgKCF3aWRnZXQpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTUUxp
dGVGaWxlU3lzdGVtLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVk
ZSA8c3FsaXRlMy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTkyLDEyICs5
MiwxMiBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhCiAKIGJvb2wg
U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIChQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZp
bGVOYW1lKSA9PSBTUUxJVEVfT0spOworICAgIHJldHVybiAoUGxhdGZvcm1TdXBwb3J0OjpkYXRh
YmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpID09IFNRTElURV9PSyk7CiB9CiAKIGxvbmcgbG9uZyBT
UUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXplKGZp
bGVOYW1lKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkYXRhYmFzZUdldEZpbGVTaXpl
KGZpbGVOYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0v
U1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUG9zaXguY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21p
dW1Qb3NpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAKLSNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgPHNx
bGl0ZTMuaD4KIAogI2luY2x1ZGUgPGZjbnRsLmg+CkBAIC02OSwxMCArNjksMTAgQEAgaW50IGNo
cm9taXVtT3BlbihzcWxpdGUzX3ZmcyogdmZzLCBjb25zdAogICAgICAgICByZXR1cm4gcmVzdWx0
OwogCiAgICAgaWYgKGZkIDwgMCkgewotICAgICAgICBmZCA9IFBsYXRmb3JtQnJpZGdlOjpkYXRh
YmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOworICAgICAgICBmZCA9IFBsYXRm
b3JtU3VwcG9ydDo6ZGF0YWJhc2VPcGVuRmlsZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKICAg
ICAgICAgaWYgKChmZCA8IDApICYmIChkZXNpcmVkRmxhZ3MgJiBTUUxJVEVfT1BFTl9SRUFEV1JJ
VEUpKSB7CiAgICAgICAgICAgICBpbnQgbmV3RmxhZ3MgPSAoZGVzaXJlZEZsYWdzICYgfihTUUxJ
VEVfT1BFTl9SRUFEV1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVBVEUpKSB8IFNRTElURV9PUEVOX1JF
QURPTkxZOwotICAgICAgICAgICAgZmQgPSBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmls
ZShmaWxlTmFtZSwgbmV3RmxhZ3MpOworICAgICAgICAgICAgZmQgPSBQbGF0Zm9ybVN1cHBvcnQ6
OmRhdGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIG5ld0ZsYWdzKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAoZmQgPCAwKSB7CkBAIC0xMDMsNyArMTAzLDcgQEAgaW50IGNocm9taXVtT3Blbihz
cWxpdGUzX3ZmcyogdmZzLCBjb25zdAogLy8gICAgICAgICAgIHNob3VsZCBiZSBzeW5jaGVkIGFm
dGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCiBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192ZnMq
LCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IHN5bmNEaXIpCiB7Ci0gICAgcmV0dXJuIFBsYXRm
b3JtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUsIHN5bmNEaXIpOworICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSwgc3luY0Rp
cik7CiB9CiAKIC8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4g
ZmlsZS4KQEAgLTExNCw3ICsxMTQsNyBAQCBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192ZnMq
LCBjb25zdCBjCiAvLyByZXMgLSB0aGUgcmVzdWx0LgogaW50IGNocm9taXVtQWNjZXNzKHNxbGl0
ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcykKIHsKLSAg
ICBpbnQgYXR0ciA9IHN0YXRpY19jYXN0PGludD4oUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0
RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpKTsKKyAgICBpbnQgYXR0ciA9IHN0YXRpY19jYXN0PGlu
dD4oUGxhdGZvcm1TdXBwb3J0OjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKSk7
CiAgICAgaWYgKGF0dHIgPCAwKSB7CiAgICAgICAgICpyZXMgPSAwOwogICAgICAgICByZXR1cm4g
U1FMSVRFX09LOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NR
TGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJ
KHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVt
L1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVt
LmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Vw
cG9ydC5oIgogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKQEAg
LTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIHsKIGludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMq
LCBjb25zdCBjaGFyKiBmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBp
ZCwgaW50IGRlc2lyZWRGbGFncywgaW50KiB1c2VkRmxhZ3MpCiB7Ci0gICAgSEFORExFIGggPSBQ
bGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsK
KyAgICBIQU5ETEUgaCA9IFBsYXRmb3JtU3VwcG9ydDo6ZGF0YWJhc2VPcGVuRmlsZShmaWxlTmFt
ZSwgZGVzaXJlZEZsYWdzKTsKICAgICBpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewog
ICAgICAgICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKSB7CiAgICAg
ICAgICAgICBpbnQgbmV3RmxhZ3MgPSAoZGVzaXJlZEZsYWdzIHwgU1FMSVRFX09QRU5fUkVBRE9O
TFkpICYgflNRTElURV9PUEVOX1JFQURXUklURTsKQEAgLTgyLDcgKzgyLDcgQEAgaW50IGNocm9t
aXVtT3BlbihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYQogLy8gICAgICAgICAgIHNob3VsZCBiZSBz
eW5jaGVkIGFmdGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCiBpbnQgY2hyb21pdW1EZWxldGUoc3Fs
aXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50KQogewotICAgIHJldHVybiBQbGF0
Zm9ybUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKTsKKyAgICByZXR1cm4gUGxh
dGZvcm1TdXBwb3J0OjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpOwogfQogCiAvLyBDaGVj
ayB0aGUgZXhpc3RhbmNlIGFuZCBzdGF0dXMgb2YgdGhlIGdpdmVuIGZpbGUuCkBAIC05Myw3ICs5
Myw3IEBAIGludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGMKIC8vIHJlcyAt
IHRoZSByZXN1bHQuCiBpbnQgY2hyb21pdW1BY2Nlc3Moc3FsaXRlM192ZnMqLCBjb25zdCBjaGFy
KiBmaWxlTmFtZSwgaW50IGZsYWcsIGludCogcmVzKQogewotICAgIERXT1JEIGF0dHIgPSBQbGF0
Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSk7CisgICAgRFdP
UkQgYXR0ciA9IFBsYXRmb3JtU3VwcG9ydDo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxl
TmFtZSk7CiAgICAgc3dpdGNoIChmbGFnKSB7CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQUQ6
CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNTX0VYSVNUUzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvY2hyb21pdW0vUGx1Z2luRGF0YUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL2Nocm9taXVtL1BsdWdpbkRhdGFDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9jaHJvbWl1bS9QbHVnaW5EYXRh
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YUNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJQ
bGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3Rv
cjxQbHVnaW5JbmZvPiYgcGx1Z2lucygpCiAgICAgewogICAgICAgICBpZiAoIW1fbG9hZGVkKSB7
Ci0gICAgICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyhtX3JlZnJlc2gsICZtX3BsdWdp
bnMpOworICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpwbHVnaW5zKG1fcmVmcmVzaCwgJm1f
cGx1Z2lucyk7CiAgICAgICAgICAgICBtX2xvYWRlZCA9IHRydWU7CiAgICAgICAgICAgICBtX3Jl
ZnJlc2ggPSBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAJKHJldmlzaW9uIDk0MjQz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCkBAIC01MCwxNiArNTAsMTYgQEAgZG91YmxlIFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6bV9jYXJldAogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVm
YXVsdEJ1dHRvbkJhY2tncm91bmRDb2xvciA9IDB4ZmZkZGRkZGQ7CiAKLXN0YXRpYyBQbGF0Zm9y
bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIGdldFdlYlRoZW1lU3RhdGUoY29uc3QgUmVuZGVyVGhl
bWUqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCitzdGF0aWMgUGxhdGZvcm1TdXBwb3J0
OjpUaGVtZVBhaW50U3RhdGUgZ2V0V2ViVGhlbWVTdGF0ZShjb25zdCBSZW5kZXJUaGVtZSogdGhl
bWUsIGNvbnN0IFJlbmRlck9iamVjdCogbykKIHsKICAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQo
bykpCi0gICAgICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVEaXNhYmxlZDsKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6U3RhdGVEaXNhYmxlZDsKICAgICBpZiAodGhlbWUt
PmlzUHJlc3NlZChvKSkKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZVByZXNz
ZWQ7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OlN0YXRlUHJlc3NlZDsKICAgICBp
ZiAodGhlbWUtPmlzSG92ZXJlZChvKSkKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpT
dGF0ZUhvdmVyOworICAgICAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZUhvdmVyOwog
Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKKyAgICByZXR1cm4gUGxh
dGZvcm1TdXBwb3J0OjpTdGF0ZU5vcm1hbDsKIH0KIAogCkBAIC0xNDUsNyArMTQ1LDcgQEAgQ29s
b3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwbGF0Zm9ybQogCiB2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKIHsKLSAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0
U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNsaWRlclRodW1iKTsKKyAgICBJbnRTaXplIHNpemUg
PSBQbGF0Zm9ybVN1cHBvcnQ6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1TdXBwb3J0OjpQYXJ0
U2xpZGVyVGh1bWIpOwogCiAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1
bWJIb3Jpem9udGFsUGFydCkgewogICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKQEAgLTE4NiwxMSArMTg2LDExIEBAIHZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjpzZXRTZWxlY3QKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBh
cmFtcyBleHRyYVBhcmFtczsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRFeHRyYVBh
cmFtcyBleHRyYVBhcmFtczsKICAgICBleHRyYVBhcmFtcy5idXR0b24uY2hlY2tlZCA9IGlzQ2hl
Y2tlZChvKTsKICAgICBleHRyYVBhcmFtcy5idXR0b24uaW5kZXRlcm1pbmF0ZSA9IGlzSW5kZXRl
cm1pbmF0ZShvKTsKIAotICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydChpLmNvbnRl
eHQsIFBsYXRmb3JtQnJpZGdlOjpQYXJ0Q2hlY2tib3gsIGdldFdlYlRoZW1lU3RhdGUodGhpcywg
byksIHJlY3QsICZleHRyYVBhcmFtcyk7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpwYWludFRoZW1l
UGFydChpLmNvbnRleHQsIFBsYXRmb3JtU3VwcG9ydDo6UGFydENoZWNrYm94LCBnZXRXZWJUaGVt
ZVN0YXRlKHRoaXMsIG8pLCByZWN0LCAmZXh0cmFQYXJhbXMpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtMjAwLDE2ICsyMDAsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnNldENoZWNrYgogICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAm
JiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRT
aXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRn
ZTo6UGFydENoZWNrYm94KTsKKyAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybVN1cHBvcnQ6Omdl
dFRoZW1lUGFydFNpemUoUGxhdGZvcm1TdXBwb3J0OjpQYXJ0Q2hlY2tib3gpOwogICAgIHNldFNp
emVJZkF1dG8oc3R5bGUsIHNpemUpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKLSAgICBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFy
YW1zIGV4dHJhUGFyYW1zOworICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludEV4dHJhUGFy
YW1zIGV4dHJhUGFyYW1zOwogICAgIGV4dHJhUGFyYW1zLmJ1dHRvbi5jaGVja2VkID0gaXNDaGVj
a2VkKG8pOwogCi0gICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KGkuY29udGV4dCwg
UGxhdGZvcm1CcmlkZ2U6OlBhcnRSYWRpbywgZ2V0V2ViVGhlbWVTdGF0ZSh0aGlzLCBvKSwgcmVj
dCwgJmV4dHJhUGFyYW1zKTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnBhaW50VGhlbWVQYXJ0KGku
Y29udGV4dCwgUGxhdGZvcm1TdXBwb3J0OjpQYXJ0UmFkaW8sIGdldFdlYlRoZW1lU3RhdGUodGhp
cywgbyksIHJlY3QsICZleHRyYVBhcmFtcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0y
MTksMjAgKzIxOSwyMCBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c2V0UmFkaW9T
CiAgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+
aGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgc2l6ZSA9
IFBsYXRmb3JtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFBsYXRmb3JtQnJpZGdlOjpQYXJ0UmFk
aW8pOworICAgIEludFNpemUgc2l6ZSA9IFBsYXRmb3JtU3VwcG9ydDo6Z2V0VGhlbWVQYXJ0U2l6
ZShQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRSYWRpbyk7CiAgICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwg
c2l6ZSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFyYW1z
OworICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFyYW1z
OwogICAgIGV4dHJhUGFyYW1zLmJ1dHRvbi5pc0RlZmF1bHQgPSBpc0RlZmF1bHQobyk7CiAgICAg
ZXh0cmFQYXJhbXMuYnV0dG9uLmhhc0JvcmRlciA9IHRydWU7CiAgICAgZXh0cmFQYXJhbXMuYnV0
dG9uLmJhY2tncm91bmRDb2xvciA9IGRlZmF1bHRCdXR0b25CYWNrZ3JvdW5kQ29sb3I7CiAgICAg
aWYgKG8tPmhhc0JhY2tncm91bmQoKSkKICAgICAgICAgZXh0cmFQYXJhbXMuYnV0dG9uLmJhY2tn
cm91bmRDb2xvciA9IG8tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikucmdiKCk7CiAKLSAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVt
ZVBhcnQoaS5jb250ZXh0LCBQbGF0Zm9ybUJyaWRnZTo6UGFydEJ1dHRvbiwgZ2V0V2ViVGhlbWVT
dGF0ZSh0aGlzLCBvKSwgcmVjdCwgJmV4dHJhUGFyYW1zKTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6
OnBhaW50VGhlbWVQYXJ0KGkuY29udGV4dCwgUGxhdGZvcm1TdXBwb3J0OjpQYXJ0QnV0dG9uLCBn
ZXRXZWJUaGVtZVN0YXRlKHRoaXMsIG8pLCByZWN0LCAmZXh0cmFQYXJhbXMpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtMjQ1LDcgKzI0NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludFRleHQKIAogICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCk7CiAKLSAgICBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFyYW1z
IGV4dHJhUGFyYW1zOworICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludEV4dHJhUGFyYW1z
IGV4dHJhUGFyYW1zOwogICAgIGV4dHJhUGFyYW1zLnRleHRGaWVsZC5pc1RleHRBcmVhID0gcGFy
dCA9PSBUZXh0QXJlYVBhcnQ7CiAgICAgZXh0cmFQYXJhbXMudGV4dEZpZWxkLmlzTGlzdGJveCA9
IHBhcnQgPT0gTGlzdGJveFBhcnQ7CiAKQEAgLTI1NSw3ICsyNTUsNyBAQCBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUZXh0CiAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IG8t
PnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cik7CiAgICAgZXh0cmFQYXJhbXMudGV4dEZpZWxkLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91
bmRDb2xvci5yZ2IoKTsKIAotICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydChpLmNv
bnRleHQsIFBsYXRmb3JtQnJpZGdlOjpQYXJ0VGV4dEZpZWxkLCBnZXRXZWJUaGVtZVN0YXRlKHRo
aXMsIG8pLCByZWN0LCAmZXh0cmFQYXJhbXMpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6cGFpbnRU
aGVtZVBhcnQoaS5jb250ZXh0LCBQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRUZXh0RmllbGQsIGdldFdl
YlRoZW1lU3RhdGUodGhpcywgbyksIHJlY3QsICZleHRyYVBhcmFtcyk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC0yNjcsNyArMjY3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50TWVudQogICAgIGNvbnN0IGludCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53aWR0
aCgpOwogICAgIGNvbnN0IGludCBtaWRkbGUgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAy
OwogCi0gICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRyYVBhcmFt
czsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRyYVBhcmFt
czsKICAgICBleHRyYVBhcmFtcy5tZW51TGlzdC5hcnJvd1ggPSAoby0+c3R5bGUoKS0+ZGlyZWN0
aW9uKCkgPT0gUlRMKSA/IHJlY3QueCgpICsgNyA6IHJpZ2h0IC0gMTM7CiAgICAgZXh0cmFQYXJh
bXMubWVudUxpc3QuYXJyb3dZID0gbWlkZGxlOwogICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0g
dG9SZW5kZXJCb3gobyk7CkBAIC0yNzksMzIgKzI3OSwzMiBAQCBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6cGFpbnRNZW51CiAgICAgaWYgKG8tPmhhc0JhY2tncm91bmQoKSkKICAgICAg
ICAgZXh0cmFQYXJhbXMubWVudUxpc3QuYmFja2dyb3VuZENvbG9yID0gby0+c3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2IoKTsKIAot
ICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydChpLmNvbnRleHQsIFBsYXRmb3JtQnJp
ZGdlOjpQYXJ0TWVudUxpc3QsIGdldFdlYlRoZW1lU3RhdGUodGhpcywgbyksIHJlY3QsICZleHRy
YVBhcmFtcyk7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpwYWludFRoZW1lUGFydChpLmNvbnRleHQs
IFBsYXRmb3JtU3VwcG9ydDo6UGFydE1lbnVMaXN0LCBnZXRXZWJUaGVtZVN0YXRlKHRoaXMsIG8p
LCByZWN0LCAmZXh0cmFQYXJhbXMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgUGxhdGZvcm1C
cmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsKKyAgICBQbGF0Zm9ybVN1
cHBvcnQ6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsKICAgICBleHRyYVBhcmFt
cy5zbGlkZXIudmVydGljYWwgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0OwogCi0gICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KGkuY29udGV4
dCwgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTbGlkZXJUcmFjaywgZ2V0V2ViVGhlbWVTdGF0ZSh0aGlz
LCBvKSwgcmVjdCwgJmV4dHJhUGFyYW1zKTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnBhaW50VGhl
bWVQYXJ0KGkuY29udGV4dCwgUGxhdGZvcm1TdXBwb3J0OjpQYXJ0U2xpZGVyVHJhY2ssIGdldFdl
YlRoZW1lU3RhdGUodGhpcywgbyksIHJlY3QsICZleHRyYVBhcmFtcyk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFy
YW1zOworICAgIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFy
YW1zOwogICAgIGV4dHJhUGFyYW1zLnNsaWRlci52ZXJ0aWNhbCA9IG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydDsKICAgICBleHRyYVBhcmFtcy5zbGlk
ZXIuaW5EcmFnID0gaXNQcmVzc2VkKG8pOwogCi0gICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhl
bWVQYXJ0KGkuY29udGV4dCwgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTbGlkZXJUaHVtYiwgZ2V0V2Vi
VGhlbWVTdGF0ZSh0aGlzLCBvKSwgcmVjdCwgJmV4dHJhUGFyYW1zKTsKKyAgICBQbGF0Zm9ybVN1
cHBvcnQ6OnBhaW50VGhlbWVQYXJ0KGkuY29udGV4dCwgUGxhdGZvcm1TdXBwb3J0OjpQYXJ0U2xp
ZGVyVGh1bWIsIGdldFdlYlRoZW1lU3RhdGUodGhpcywgbyksIHJlY3QsICZleHRyYVBhcmFtcyk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBzaXplID0gUGxhdGZvcm1C
cmlkZ2U6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1CcmlkZ2U6OlBhcnRJbm5lclNwaW5CdXR0
b24pOworICAgIEludFNpemUgc2l6ZSA9IFBsYXRmb3JtU3VwcG9ydDo6Z2V0VGhlbWVQYXJ0U2l6
ZShQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRJbm5lclNwaW5CdXR0b24pOwogCiAgICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldE1pbldp
ZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC0zMTIsMTEgKzMxMiwxMSBAQCB2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0SW5uCiAKIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBQbGF0Zm9ybUJy
aWRnZTo6VGhlbWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFyYW1zOworICAgIFBsYXRmb3JtU3Vw
cG9ydDo6VGhlbWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFyYW1zOwogICAgIGV4dHJhUGFyYW1z
LmlubmVyU3Bpbi5zcGluVXAgPSAoY29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8pICYgU3BpblVw
U3RhdGUpOwogICAgIGV4dHJhUGFyYW1zLmlubmVyU3Bpbi5yZWFkT25seSA9IGlzUmVhZE9ubHlD
b250cm9sKG8pOwogCi0gICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KGkuY29udGV4
dCwgUGxhdGZvcm1CcmlkZ2U6OlBhcnRJbm5lclNwaW5CdXR0b24sIGdldFdlYlRoZW1lU3RhdGUo
dGhpcywgbyksIHJlY3QsICZleHRyYVBhcmFtcyk7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpwYWlu
dFRoZW1lUGFydChpLmNvbnRleHQsIFBsYXRmb3JtU3VwcG9ydDo6UGFydElubmVyU3BpbkJ1dHRv
biwgZ2V0V2ViVGhlbWVTdGF0ZSh0aGlzLCBvKSwgcmVjdCwgJmV4dHJhUGFyYW1zKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTMzMCwxNCArMzMwLDE0IEBAIGJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjpwYWludFByb2cKICAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jl
c3MgPSB0b1JlbmRlclByb2dyZXNzKG8pOwogICAgIEludFJlY3QgdmFsdWVSZWN0ID0gcHJvZ3Jl
c3NWYWx1ZVJlY3RGb3IocmVuZGVyUHJvZ3Jlc3MsIHJlY3QpOwogCi0gICAgUGxhdGZvcm1Ccmlk
Z2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsKKyAgICBQbGF0Zm9ybVN1cHBv
cnQ6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsKICAgICBleHRyYVBhcmFtcy5w
cm9ncmVzc0Jhci5kZXRlcm1pbmF0ZSA9IHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCk7
CiAgICAgZXh0cmFQYXJhbXMucHJvZ3Jlc3NCYXIudmFsdWVSZWN0WCA9IHZhbHVlUmVjdC54KCk7
CiAgICAgZXh0cmFQYXJhbXMucHJvZ3Jlc3NCYXIudmFsdWVSZWN0WSA9IHZhbHVlUmVjdC55KCk7
CiAgICAgZXh0cmFQYXJhbXMucHJvZ3Jlc3NCYXIudmFsdWVSZWN0V2lkdGggPSB2YWx1ZVJlY3Qu
d2lkdGgoKTsKICAgICBleHRyYVBhcmFtcy5wcm9ncmVzc0Jhci52YWx1ZVJlY3RIZWlnaHQgPSB2
YWx1ZVJlY3QuaGVpZ2h0KCk7CiAKLSAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQo
aS5jb250ZXh0LCBQbGF0Zm9ybUJyaWRnZTo6UGFydFByb2dyZXNzQmFyLCBnZXRXZWJUaGVtZVN0
YXRlKHRoaXMsIG8pLCByZWN0LCAmZXh0cmFQYXJhbXMpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6
cGFpbnRUaGVtZVBhcnQoaS5jb250ZXh0LCBQbGF0Zm9ybVN1cHBvcnQ6OlBhcnRQcm9ncmVzc0Jh
ciwgZ2V0V2ViVGhlbWVTdGF0ZSh0aGlzLCBvKSwgcmVjdCwgJmV4dHJhUGFyYW1zKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJlbmRlclRo
ZW1lQ2hyb21pdW1NYWMuaCIKICNpbXBvcnQgIlBhaW50SW5mby5oIgotI2ltcG9ydCAiUGxhdGZv
cm1CcmlkZ2UuaCIKKyNpbXBvcnQgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2ltcG9ydCAiUmVuZGVy
TWVkaWFDb250cm9sc0Nocm9taXVtLmgiCiAjaW1wb3J0ICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5o
IgogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgpAQCAtNzEsNyArNzEsNyBAQCBQYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUNocm9tCiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6dXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBw
b3J0OjpsYXlvdXRUZXN0TW9kZSgpOwogfQogCiBOU1ZpZXcqIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OmRvY3VtZW50Vmlld0ZvcihSZW5kZXJPYmplY3QqKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCShy
ZXZpc2lvbiA5NDI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAi
UGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgi
CkBAIC0xNTQsNyArMTU0LDcgQEAgZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjYXJl
dEJsaQogewogICAgIC8vIERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91dCB0ZXN0
IG1vZGUsIGFzIGl0IGludHJvZHVjZXMKICAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZvciB0aGUg
cGl4ZWwgdGVzdHMuIGh0dHA6Ly9iLzExOTg0NDAKLSAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6Omxh
eW91dFRlc3RNb2RlKCkpCisgICAgaWYgKFBsYXRmb3JtU3VwcG9ydDo6bGF5b3V0VGVzdE1vZGUo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gY2FyZXRCbGlua0ludGVydmFsSW50
ZXJuYWwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFDb250
cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xp
ZGVyLmgiCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpz
dXBwb3J0c0ZvYwogCiBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgaWYgKFBsYXRmb3JtQnJp
ZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0Zm9ybVN1cHBvcnQ6OmxheW91dFRl
c3RNb2RlKCkpCiAgICAgICAgIHJldHVybiBDb2xvcigweDAwLCAweDAwLCAweGZmKTsgLy8gUm95
YWwgYmx1ZS4KICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hMSUdI
VCk7CiAgICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciks
IEdldEJWYWx1ZShjb2xvciksIDB4ZmYpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIENvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtQWMKIAogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7
Ci0gICAgaWYgKFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0
Zm9ybVN1cHBvcnQ6OmxheW91dFRlc3RNb2RlKCkpCiAgICAgICAgIHJldHVybiBDb2xvcigweDk5
LCAweDk5LCAweDk5KTsgLy8gTWVkaXVtIGdyYXkuCiAgICAgQ09MT1JSRUYgY29sb3IgPSBHZXRT
eXNDb2xvcihDT0xPUl9HUkFZVEVYVCk7CiAgICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xv
ciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDB4ZmYpOwpAQCAtMjcxLDcg
KzI3MSw3IEBAIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtSW4KIAogQ29s
b3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKSBjb25zdAogewotICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1v
ZGUoKSkKKyAgICBpZiAoUGxhdGZvcm1TdXBwb3J0OjpsYXlvdXRUZXN0TW9kZSgpKQogICAgICAg
ICByZXR1cm4gQ29sb3IoMHhmZiwgMHhmZiwgMHhjYyk7IC8vIFBhbGUgeWVsbG93LgogICAgIENP
TE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUVEVYVCk7CiAgICAgcmV0
dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShj
b2xvciksIDB4ZmYpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHN0YXRpYyBpbnQgY3NzVmFsdWVJZFRv
U3lzQ29sb3JJbmRleChpbnQKIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3RlbUNv
bG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAogewogICAgIGludCBzeXNDb2xvckluZGV4ID0gY3Nz
VmFsdWVJZFRvU3lzQ29sb3JJbmRleChjc3NWYWx1ZUlkKTsKLSAgICBpZiAoUGxhdGZvcm1Ccmlk
Z2U6OmxheW91dFRlc3RNb2RlKCkgfHwgKHN5c0NvbG9ySW5kZXggPT0gLTEpKQorICAgIGlmIChQ
bGF0Zm9ybVN1cHBvcnQ6OmxheW91dFRlc3RNb2RlKCkgfHwgKHN5c0NvbG9ySW5kZXggPT0gLTEp
KQogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwog
CiAgICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihzeXNDb2xvckluZGV4KTsKQEAgLTQy
OCw3ICs0MjgsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0dG9uCiAg
ICAgY29uc3QgVGhlbWVEYXRhJiB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7CiAKICAgICBU
aGVtZVBhaW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgIFBsYXRmb3JtQnJpZGdlOjpw
YWludEJ1dHRvbihwYWludGVyLmNvbnRleHQoKSwKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnBhaW50
QnV0dG9uKHBhaW50ZXIuY29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGVtZURhdGEubV9wYXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVt
ZURhdGEubV9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRh
Lm1fY2xhc3NpY1N0YXRlLApAQCAtNDQ2LDcgKzQ0Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6cGFpbnRTbGlkZXIKICAgICBjb25zdCBUaGVtZURhdGEmIHRoZW1lRGF0YSA9IGdl
dFRoZW1lRGF0YShvKTsKIAogICAgIFRoZW1lUGFpbnRlciBwYWludGVyKGkuY29udGV4dCwgcik7
Ci0gICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VHJhY2tiYXIocGFpbnRlci5jb250ZXh0KCksCisg
ICAgUGxhdGZvcm1TdXBwb3J0OjpwYWludFRyYWNrYmFyKHBhaW50ZXIuY29udGV4dCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fc3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlLApAQCAtNDYx
LDcgKzQ2MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTbGlkZXIKIAog
c3RhdGljIGludCBtZW51TGlzdEJ1dHRvbldpZHRoKCkKIHsKLSAgICBzdGF0aWMgaW50IHdpZHRo
ID0gUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBrU3RhbmRhcmRNZW51TGlzdEJ1
dHRvbldpZHRoIDogR2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOworICAgIHN0YXRpYyBp
bnQgd2lkdGggPSBQbGF0Zm9ybVN1cHBvcnQ6OmxheW91dFRlc3RNb2RlKCkgPyBrU3RhbmRhcmRN
ZW51TGlzdEJ1dHRvbldpZHRoIDogR2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAg
IHJldHVybiB3aWR0aDsKIH0KIApAQCAtNTA5LDExICs1MDksMTEgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtV2luOjpwYWludE1lbnVMaQogCiAgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1l
IGRhdGEgZm9yIGEgdGV4dGZpZWxkIGFuZCBwYWludCB0aGUgbWVudS4KICAgICBUaGVtZVBhaW50
ZXIgcGFpbnRlcihpLmNvbnRleHQsIHJlY3QpOwotICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludE1l
bnVMaXN0KHBhaW50ZXIuY29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENQX0RST1BET1dOQlVUVE9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRldGVybWluZVN0YXRlKG8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
dGVybWluZUNsYXNzaWNTdGF0ZShvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYWludGVyLmRyYXdSZWN0KCkpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6cGFpbnRNZW51TGlz
dChwYWludGVyLmNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1BfRFJPUERPV05CVVRUT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
dGVybWluZVN0YXRlKG8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRl
cm1pbmVDbGFzc2ljU3RhdGUobyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhaW50ZXIuZHJhd1JlY3QoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC02NzUsNyAr
Njc1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFRleHRGaQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZHJhd0Vk
Z2VzKQogewogICAgIC8vIEZhbGxiYWNrIHRvIHdoaXRlIGlmIHRoZSBzcGVjaWZpZWQgY29sb3Ig
b2JqZWN0IGlzIGludmFsaWQuCi0gICAgLy8gKE5vdGUgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGV4
dEZpZWxkIGR1cGxpY2F0ZXMgdGhpcyBjaGVjaykuCisgICAgLy8gKE5vdGUgUGxhdGZvcm1TdXBw
b3J0OjpwYWludFRleHRGaWVsZCBkdXBsaWNhdGVzIHRoaXMgY2hlY2spLgogICAgIENvbG9yIGJh
Y2tncm91bmRDb2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGlmIChvLT5zdHlsZSgpLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmlzVmFsaWQoKSkKICAg
ICAgICAgYmFja2dyb3VuZENvbG9yID0gby0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKQEAgLTY5OSwxNCArNjk5LDE0IEBAIGJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUZXh0RmkKICAgICB7CiAgICAgICAgIGNvbnN0
IFRoZW1lRGF0YSYgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG8pOwogICAgICAgICBUaGVtZVBh
aW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6cGFp
bnRUZXh0RmllbGQocGFpbnRlci5jb250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGVtZURhdGEubV9wYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9jbGFzc2ljU3RhdGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludGVyLmRyYXdSZWN0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29udGVudEFyZWEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3RWRnZXMpOworICAgICAgICBQbGF0Zm9y
bVN1cHBvcnQ6OnBhaW50VGV4dEZpZWxkKHBhaW50ZXIuY29udGV4dCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fc3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50ZXIuZHJhd1Jl
Y3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5k
Q29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbnRl
bnRBcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdFZGdl
cyk7CiAgICAgICAgIC8vIEVuZCBvZiBibG9jayBjb21taXRzIHRoZSBwYWludGVyIGJlZm9yZSBy
ZXN0b3JpbmcgY29udGV4dC4KICAgICB9CiAgICAgaWYgKG8tPnN0eWxlKCktPmhhc0JvcmRlclJh
ZGl1cygpKQpAQCAtNzMwLDIyICs3MzAsMjIgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjpwYWludElubmVyUwogICAgICAgICBoYWxmLnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8gMik7
CiAgICAgICAgIGNvbnN0IFRoZW1lRGF0YSYgdXBUaGVtZURhdGEgPSBnZXRUaGVtZURhdGEob2Jq
ZWN0LCBTcGluQnV0dG9uVXApOwogICAgICAgICBUaGVtZVBhaW50ZXIgdXBQYWludGVyKGluZm8u
Y29udGV4dCwgaGFsZik7Ci0gICAgICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFNwaW5CdXR0b24o
dXBQYWludGVyLmNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cFRoZW1lRGF0YS5tX3BhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXBUaGVtZURhdGEubV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cFRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cFBhaW50ZXIuZHJhd1JlY3QoKSk7CisgICAgICAg
IFBsYXRmb3JtU3VwcG9ydDo6cGFpbnRTcGluQnV0dG9uKHVwUGFpbnRlci5jb250ZXh0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwVGhlbWVEYXRhLm1fcGFy
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBUaGVtZURhdGEu
bV9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBUaGVt
ZURhdGEubV9jbGFzc2ljU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwUGFpbnRlci5kcmF3UmVjdCgpKTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIGhh
bGYuc2V0WShyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyKTsKICAgICAgICAgY29uc3QgVGhl
bWVEYXRhJiBkb3duVGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG9iamVjdCwgU3BpbkJ1dHRvbkRv
d24pOwogICAgICAgICBUaGVtZVBhaW50ZXIgZG93blBhaW50ZXIoaW5mby5jb250ZXh0LCBoYWxm
KTsKLSAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbihkb3duUGFpbnRlci5j
b250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93blRo
ZW1lRGF0YS5tX3BhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG93blRoZW1lRGF0YS5tX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvd25UaGVtZURhdGEubV9jbGFzc2ljU3RhdGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG93blBhaW50ZXIuZHJhd1JlY3QoKSk7CisgICAgICAgIFBs
YXRmb3JtU3VwcG9ydDo6cGFpbnRTcGluQnV0dG9uKGRvd25QYWludGVyLmNvbnRleHQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93blRoZW1lRGF0YS5tX3Bh
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25UaGVtZURh
dGEubV9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93
blRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG93blBhaW50ZXIuZHJhd1JlY3QoKSk7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTc4Myw3ICs3ODMsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OnBhaW50UHJvZ3JlCiAgICAgSW50UmVjdCB2YWx1ZVJlY3QgPSByZW5kZXJQcm9ncmVzcy0+aXNE
ZXRlcm1pbmF0ZSgpID8gZGV0ZXJtaW5hdGVQcm9ncmVzc1ZhbHVlUmVjdEZvcihyZW5kZXJQcm9n
cmVzcywgcikgOiBJbnRSZWN0KDAsIDAsIDAsIDApOwogICAgIGRvdWJsZSBhbmltYXRlZFNlY29u
ZHMgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uU3RhcnRUaW1lKCkgPyAgV1RGOjpjdXJyZW50
VGltZSgpIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblN0YXJ0VGltZSgpIDogMDsKICAgICBU
aGVtZVBhaW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgIFBsYXRmb3JtQnJpZGdlOjpw
YWludFByb2dyZXNzQmFyKHBhaW50ZXIuY29udGV4dCgpLCByLCB2YWx1ZVJlY3QsIHJlbmRlclBy
b2dyZXNzLT5pc0RldGVybWluYXRlKCksIGFuaW1hdGVkU2Vjb25kcyk7CisgICAgUGxhdGZvcm1T
dXBwb3J0OjpwYWludFByb2dyZXNzQmFyKHBhaW50ZXIuY29udGV4dCgpLCByLCB2YWx1ZVJlY3Qs
IHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCksIGFuaW1hdGVkU2Vjb25kcyk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVt
L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAkocmV2
aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Vw
cG9ydC5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKQEAgLTM2LDcgKzM2LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlPiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1
cm4gUGxhdGZvcm1CcmlkZ2U6OmlkYkZhY3RvcnkoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBw
b3J0OjppZGJGYWN0b3J5KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQktleVBhdGhC
YWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9jaHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxOSArMjksMTkgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUg
IklEQktleS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdm9pZCBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktl
eXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVzLCAgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBW
ZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQogewotICAgIFBsYXRmb3JtQnJpZGdlOjpj
cmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0
aCwga2V5cyk7CisgICAgUGxhdGZvcm1TdXBwb3J0OjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6
ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0aCwga2V5cyk7CiB9CiAKIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElE
QktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7
Ci0gICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZh
bHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6Omlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvY2hy
b21pdW0vUXVvdGFUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL2Nocm9taXVtL1F1b3RhVHJhY2tlci5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9RdW90YVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJRdW90
YVRyYWNrZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3VwcG9ydC5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCkBAIC00OCw3ICs0OCw3IEBA
IHZvaWQgUXVvdGFUcmFja2VyOjpnZXREYXRhYmFzZVNpemVBbmRTcGEKICAgICBjb25zdCBTdHJp
bmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLAogICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyogZGF0YWJhc2VTaXplLCB1bnNpZ25lZCBsb25nIGxvbmcqIHNwYWNl
QXZhaWxhYmxlKQogewotICAgIC8vIEV4dHJhIHNjb3BlIHRvIHVubG9jayBwcmlvciB0byBwb3Rl
bnRpYWxseSBjYWxsaW5nIFBsYXRmb3JtQnJpZGdlLgorICAgIC8vIEV4dHJhIHNjb3BlIHRvIHVu
bG9jayBwcmlvciB0byBwb3RlbnRpYWxseSBjYWxsaW5nIFBsYXRmb3JtU3VwcG9ydC4KICAgICB7
CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tEYXRhKG1fZGF0YUd1YXJkKTsKICAgICAgICAgQVNT
RVJUKG1fZGF0YWJhc2VTaXplcy5jb250YWlucyhvcmlnaW5JZGVudGlmaWVyKSk7CkBAIC02Myw3
ICs2Myw3IEBAIHZvaWQgUXVvdGFUcmFja2VyOjpnZXREYXRhYmFzZVNpemVBbmRTcGEKICAgICB9
CiAKICAgICAvLyBUaGUgZW1iZWRkZXIgaGFzbid0IHB1c2hlZCB0aGlzIHZhbHVlIHRvIHVzLCBz
byB3ZSBwdWxsIGl0IGFzIG5lZWRlZC4KLSAgICAqc3BhY2VBdmFpbGFibGUgPSBQbGF0Zm9ybUJy
aWRnZTo6ZGF0YWJhc2VHZXRTcGFjZUF2YWlsYWJsZUZvck9yaWdpbihvcmlnaW5JZGVudGlmaWVy
KTsKKyAgICAqc3BhY2VBdmFpbGFibGUgPSBQbGF0Zm9ybVN1cHBvcnQ6OmRhdGFiYXNlR2V0U3Bh
Y2VBdmFpbGFibGVGb3JPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUXVvdGFU
cmFja2VyOjp1cGRhdGVEYXRhYmFzZVNpemUoCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTQyNTcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDExLTA4LTMxICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW5hbWUgUGxhdGZvcm1C
cmlkZ2UgdG8gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NzM0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgbWF0Y2hlcyB0aGUgV2ViS2l0UGxhdGZvcm1TdXBwb3J0IGVt
YmVkZGVyIEFQSS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL0Fzc2Vy
dE1hdGNoaW5nRW51bXMuY3BwOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2hvdWxkUnVuTW9kYWxEaWFsb2dE
dXJpbmdQYWdlRGlzbWlzc2FsKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1CcmlkZ2UuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHNyYy9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YSk6CisgICAgICAgICogc3JjL1dlYkZy
YW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6V2ViRnJhbWVJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjp+V2ViRnJhbWVJbXBsKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpwYWlu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUpOgorCiAyMDExLTA4LTMxICBTYWlsZXNoIEFncmF3YWwgIDxzYWlsQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBDaHJvbWl1bSBNYWM6IEFkZCBmYWxsYmFjayBmb3IgZHJhd2lu
ZyBQREYgb3ZlcmhhbmcgYXJlYQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2
aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTQwNCw5ICs0MDQsOSBAQAogICAgICAgICAgICAgICAgICdzcmMvcGFpbnRp
bmcvR3JhcGhpY3NDb250ZXh0QnVpbGRlci5oJywKICAgICAgICAgICAgICAgICAnc3JjL1BhZ2VP
dmVybGF5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QYWdlT3ZlcmxheS5oJywKLSAgICAg
ICAgICAgICAgICAnc3JjL1BsYXRmb3JtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9QbGF0
Zm9ybVN1cHBvcnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1Jlc291cmNlSGFuZGxlLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9TY3JvbGxiYXJHcm91cC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvU2Nyb2xsYmFyR3JvdXAuaCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAkocmV2aXNpb24gOTQyNDMp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0ltcGwuaD4KIAogI2lmIE9TKERBUldJTikKLSNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIm1hYy9XZWJUaGVtZUVuZ2lu
ZS5oIgogI2VuZGlmCiAKQEAgLTQzOCwxOSArNDM4LDE5IEBAIENPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViU3RvcmFnZVEKICNlbmRpZgogCiAjaWYgT1MoREFSV0lOKQotQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZCwgUGxhdGZv
cm1CcmlkZ2U6OlN0YXRlRGlzYWJsZWQpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJUaGVtZUVuZ2luZTo6U3RhdGVJbmFjdGl2ZSwgUGxhdGZvcm1CcmlkZ2U6OlN0YXRlSW5hY3Rp
dmUpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U3RhdGVB
Y3RpdmUsIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUFjdGl2ZSk7Ci1DT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQsIFBsYXRmb3JtQnJpZGdlOjpT
dGF0ZVByZXNzZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2lu
ZTo6U3RhdGVEaXNhYmxlZCwgUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZURpc2FibGVkKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlSW5hY3RpdmUsIFBs
YXRmb3JtU3VwcG9ydDo6U3RhdGVJbmFjdGl2ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYlRoZW1lRW5naW5lOjpTdGF0ZUFjdGl2ZSwgUGxhdGZvcm1TdXBwb3J0OjpTdGF0ZUFj
dGl2ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTdGF0
ZVByZXNzZWQsIFBsYXRmb3JtU3VwcG9ydDo6U3RhdGVQcmVzc2VkKTsKIAotQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIsIFBsYXRmb3JtQnJp
ZGdlOjpTaXplUmVndWxhcik7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1l
RW5naW5lOjpTaXplU21hbGwsIFBsYXRmb3JtQnJpZGdlOjpTaXplU21hbGwpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIsIFBsYXRmb3Jt
U3VwcG9ydDo6U2l6ZVJlZ3VsYXIpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJU
aGVtZUVuZ2luZTo6U2l6ZVNtYWxsLCBQbGF0Zm9ybVN1cHBvcnQ6OlNpemVTbWFsbCk7CiAKLUNP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVu
dGF0aW9uSG9yaXpvbnRhbCwgUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uSG9y
aXpvbnRhbCk7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpT
Y3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsLCBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyT3Jp
ZW50YXRpb25WZXJ0aWNhbCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1l
RW5naW5lOjpTY3JvbGxiYXJPcmllbnRhdGlvbkhvcml6b250YWwsIFBsYXRmb3JtU3VwcG9ydDo6
U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWwsIFBsYXRm
b3JtU3VwcG9ydDo6U2Nyb2xsYmFyT3JpZW50YXRpb25WZXJ0aWNhbCk7CiAKLUNPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhclBhcmVudFNjcm9sbFZp
ZXcsIFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRTY3JvbGxWaWV3KTsKLUNPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhclBhcmVudFJlbmRl
ckxheWVyLCBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXIpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50
U2Nyb2xsVmlldywgUGxhdGZvcm1TdXBwb3J0OjpTY3JvbGxiYXJQYXJlbnRTY3JvbGxWaWV3KTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhclBh
cmVudFJlbmRlckxheWVyLCBQbGF0Zm9ybVN1cHBvcnQ6OlNjcm9sbGJhclBhcmVudFJlbmRlckxh
eWVyKTsKICNlbmRpZgogCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlBhZ2VWaXNp
YmlsaXR5U3RhdGVWaXNpYmxlLCBQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkocmV2
aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQAogI2luY2x1ZGUgIk5vZGUu
aCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBw
b3J0LmgiCiAjaW5jbHVkZSAiUG9wdXBDb250YWluZXIuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAtOTY0LDcgKzk2NCw3IEBA
IGJvb2wgQ2hyb21lQ2xpZW50SW1wbDo6c2hvdWxkUnVuTW9kYWxEaWEKICAgICBpbnQgZGlzbWlz
c2FsID0gc3RhdGljX2Nhc3Q8aW50PihkaXNtaXNzYWxUeXBlKSAtIDE7IC8vIEV4Y2x1ZGUgTm9E
aXNtaXNzYWwuCiAgICAgQVNTRVJUKDAgPD0gZGlzbWlzc2FsICYmIGRpc21pc3NhbCA8IHN0YXRp
Y19jYXN0PGludD4oYXJyYXlzaXplKGtEaXNtaXNzYWxzKSkpOwogCi0gICAgUGxhdGZvcm1Ccmlk
Z2U6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJSZW5kZXJlci5Nb2RhbERpYWxvZ3NEdXJpbmdQYWdl
RGlzbWlzc2FsIiwgZGlzbWlzc2FsICogYXJyYXlzaXplKGtEaWFsb2dzKSArIGRpYWxvZywgYXJy
YXlzaXplKGtEaWFsb2dzKSAqIGFycmF5c2l6ZShrRGlzbWlzc2FscykpOworICAgIFBsYXRmb3Jt
U3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIlJlbmRlcmVyLk1vZGFsRGlhbG9nc0R1cmlu
Z1BhZ2VEaXNtaXNzYWwiLCBkaXNtaXNzYWwgKiBhcnJheXNpemUoa0RpYWxvZ3MpICsgZGlhbG9n
LCBhcnJheXNpemUoa0RpYWxvZ3MpICogYXJyYXlzaXplKGtEaXNtaXNzYWxzKSk7CiAKICAgICBt
X3dlYlZpZXctPm1haW5GcmFtZSgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKFdlYkNvbnNvbGVNZXNz
YWdlKFdlYkNvbnNvbGVNZXNzYWdlOjpMZXZlbEVycm9yLCBtYWtlU3RyaW5nKCJCbG9ja2VkICIs
IGtEaWFsb2dzW2RpYWxvZ10sICIoJyIsIGRpYWxvZ01lc3NhZ2UsICInKSBkdXJpbmcgIiwga0Rp
c21pc3NhbHNbZGlzbWlzc2FsXSwgIi4iKSkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCShyZXZpc2lvbiA5NDI0MykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1C
cmlkZ2UuaCIKLQotI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvdXJsX3V0aWwuaD4KLQotI2luY2x1
ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiV2ViQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJXZWJDbGlwYm9hcmQu
aCIKLSNpbmNsdWRlICJXZWJDb29raWUuaCIKLSNpbmNsdWRlICJXZWJDb29raWVKYXIuaCIKLSNp
bmNsdWRlICJXZWJEYXRhLmgiCi0jaW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJX
ZWJGaWxlVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKLSNpbmNsdWRl
ICJXZWJGcmFtZUltcGwuaCIKLSNpbmNsdWRlICJXZWJJREJLZXkuaCIKLSNpbmNsdWRlICJXZWJJ
bWFnZS5oIgotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgIldlYktpdFBsYXRmb3JtU3Vw
cG9ydC5oIgotI2luY2x1ZGUgIldlYk1pbWVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIldlYlBsdWdp
bkNvbnRhaW5lckltcGwuaCIKLSNpbmNsdWRlICJXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaCIK
LSNpbmNsdWRlICJXZWJTYW5kYm94U3VwcG9ydC5oIgotI2luY2x1ZGUgIldlYlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldlYlNjcmVlbkluZm8uaCIKLSNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKLSNpbmNsdWRlICJXZWJVUkwuaCIKLSNpbmNsdWRlICJXZWJWZWN0b3IuaCIKLSNp
bmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKLSNpbmNs
dWRlICJXZWJXb3JrZXJDbGllbnRJbXBsLmgiCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHQ29udGV4dC5oPgotI2VuZGlmCi0KLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1
ZGUgIldlYlJlY3QuaCIKLSNpbmNsdWRlICJ3aW4vV2ViVGhlbWVFbmdpbmUuaCIKLSNlbmRpZgot
Ci0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgIm1hYy9XZWJUaGVtZUVuZ2luZS5oIgotI2VsaWYg
T1MoVU5JWCkKLSNpbmNsdWRlICJsaW51eC9XZWJUaGVtZUVuZ2luZS5oIgotI2luY2x1ZGUgIldl
YkZvbnRJbmZvLmgiCi0jaW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCi0jZW5kaWYKLQot
I2lmIFdFQktJVF9VU0lOR19TS0lBCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0jZW5k
aWYKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZFByb3h5LmgiCi0jaW5j
bHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLQotI2luY2x1ZGUgIldvcmtlci5oIgotI2luY2x1ZGUgIldvcmtlckNv
bnRleHRQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLS8vIFdlIGFyZSBw
YXJ0IG9mIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24uCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBXZWJXaWRnZXRDbGllbnQqIHRvV2Vi
V2lkZ2V0Q2xpZW50KFdpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghd2lkZ2V0KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEZyYW1lVmlldyogdmlldzsKLSAgICBpZiAod2lkZ2V0LT5pc0Zy
YW1lVmlldygpKQotICAgICAgICB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0
KTsKLSAgICBlbHNlIGlmICh3aWRnZXQtPnBhcmVudCgpICYmIHdpZGdldC0+cGFyZW50KCktPmlz
RnJhbWVWaWV3KCkpCi0gICAgICAgIHZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRn
ZXQtPnBhcmVudCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUGFnZSog
cGFnZSA9IHZpZXctPmZyYW1lKCkgPyB2aWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOwotICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB2b2lkKiB3ZWJWaWV3ID0gcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT53ZWJWaWV3KCk7Ci0gICAgaWYgKCF3ZWJWaWV3KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHdlYlZp
ZXcpLT5jbGllbnQoKTsKLX0KLQotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9
IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZy
YW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIo
ZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyID0gd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7
Ci19Ci0KLS8vIENhY2hlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2Fj
aGVNZXRhZGF0YShjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgZGF0YSkKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2FjaGVN
ZXRhZGF0YSh1cmwsIHJlc3BvbnNlVGltZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLX0K
LQotLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9h
cmRJc0Zvcm1hdEF2YWlsYWJsZSgKLSAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9y
bWF0IGZvcm1hdCwKLSAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZl
cikKLXsKLSAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5p
c0Zvcm1hdEF2YWlsYWJsZSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpGb3Jt
YXQ+KGZvcm1hdCksCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihi
dWZmZXIpKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5U
ZXh0KAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQotewot
ICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRQbGFp
blRleHQoCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIp
KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCi0gICAgUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAgU3RyaW5nKiBodG1s
VGV4dCwgS1VSTCogc291cmNlVVJMKQotewotICAgIFdlYlVSTCB1cmw7Ci0gICAgKmh0bWxUZXh0
ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOwotICAg
ICpzb3VyY2VVUkwgPSB1cmw7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBQbGF0Zm9y
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEltYWdlKAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlw
Ym9hcmRCdWZmZXIgYnVmZmVyKQotewotICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y2xpcGJvYXJkKCktPnJlYWRJbWFnZShzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZl
cj4oYnVmZmVyKSk7Ci19Ci0KLXVpbnQ2NF90IFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRHZXRT
ZXF1ZW5jZU51bWJlcigpCi17Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5j
bGlwYm9hcmQoKS0+Z2V0U2VxdWVuY2VOdW1iZXIoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRn
ZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBodG1sVGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHNvdXJj
ZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgcGxhaW5UZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB3cml0ZVNtYXJ0UGFzdGUpCi17Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPmNsaXBib2FyZCgpLT53cml0ZUhUTUwoCi0gICAgICAgIGh0bWxUZXh0LCBzb3VyY2VV
UkwsIHBsYWluVGV4dCwgd3JpdGVTbWFydFBhc3RlKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRn
ZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwbGFpblRleHQpCi17Ci0g
ICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53cml0ZVBsYWluVGV4dChw
bGFpblRleHQpOwotfQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCi17Ci0gICAgd2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCktPmNsaXBib2FyZCgpLT53cml0ZVVSTCh1cmwsIHRpdGxlKTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYg
c291cmNlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHRpdGxlKQotewotI2lmIFdFQktJVF9VU0lOR19TS0lBCi0gICAgV2ViSW1hZ2Ug
d2ViSW1hZ2UoaW1hZ2UtPmJpdG1hcCgpKTsKLSNlbHNlCi0gICAgV2ViSW1hZ2Ugd2ViSW1hZ2Uo
aW1hZ2UpOwotI2VuZGlmCi0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNsaXBib2FyZCgp
LT53cml0ZUltYWdlKHdlYkltYWdlLCBzb3VyY2VVUkwsIHRpdGxlKTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXRh
ZGF0YSkKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+Y2xpcGJvYXJkKCktPndyaXRl
RGF0YSh0eXBlLCBkYXRhLCBtZXRhZGF0YSk7Ci19Ci0KLUhhc2hTZXQ8U3RyaW5nPiBQbGF0Zm9y
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKAotICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcykKLXsK
LSAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQo
KS0+Y2xpcGJvYXJkKCktPnJlYWRBdmFpbGFibGVUeXBlcygKLSAgICAgICAgc3RhdGljX2Nhc3Q8
V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIGNvbnRhaW5zRmlsZW5hbWVzKTsKLSAgICBI
YXNoU2V0PFN0cmluZz4gdHlwZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHR5cGVzLmFkZChyZXN1bHRbaV0pOwotICAgIHJldHVybiB0
eXBlczsKLX0KLQotYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3Ry
aW5nJiBtZXRhZGF0YSkKLXsKLSAgICBXZWJTdHJpbmcgcmVzdWx0RGF0YTsKLSAgICBXZWJTdHJp
bmcgcmVzdWx0TWV0YWRhdGE7Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+Y2xpcGJvYXJkKCktPnJlYWREYXRhKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJD
bGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgdHlwZSwgJnJlc3VsdERhdGEsICZyZXN1bHRNZXRh
ZGF0YSk7Ci0gICAgaWYgKHN1Y2NlZWRlZCkgewotICAgICAgICBkYXRhID0gcmVzdWx0RGF0YTsK
LSAgICAgICAgbWV0YWRhdGEgPSByZXN1bHRNZXRhZGF0YTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1
Y2NlZWRlZDsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRGaWxlbmFtZXMoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCi17
Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPmNsaXBib2FyZCgpLT5yZWFkRmlsZW5hbWVzKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJD
bGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gY29udmVydGVk
UmVzdWx0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQot
ICAgICAgICBjb252ZXJ0ZWRSZXN1bHQuYXBwZW5kKHJlc3VsdFtpXSk7Ci0gICAgcmV0dXJuIGNv
bnZlcnRlZFJlc3VsdDsKLX0KLQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRm
b3JtQnJpZGdlOjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3Vt
ZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1
cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmlu
ZyBQbGF0Zm9ybUJyaWRnZTo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29v
a2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAg
ICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3Jt
QnJpZGdlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tp
ZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2ll
SmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgUGxhdGZvcm1CcmlkZ2U6OnJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2ll
PiB3ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVK
YXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3
Q29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVz
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsK
LSAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRv
bWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJD
b29raWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwK
LSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nv
b2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFBsYXRmb3JtQnJpZGdlOjpkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29r
aWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tp
ZUphcikKLSAgICAgICAgY29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsK
LX0KLQotYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFy
KiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIp
Ci0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNv
b2tpZVVSTCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRmb3JtQnJp
ZGdlOjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQotewotICAgIHdlYktpdFBs
YXRmb3JtU3VwcG9ydCgpLT5wcmVmZXRjaEhvc3ROYW1lKGhvc3RuYW1lKTsKLX0KLQotLy8gRmls
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBQbGF0Zm9ybUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5m
aWxlVXRpbGl0aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1Ccmlk
Z2U6OmRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVGaWxlKHBhdGgpOwotfQot
Ci1ib29sIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcm
IHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0
aWVzKCktPmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOwotfQotCi1ib29sIFBsYXRmb3JtQnJp
ZGdlOjpnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0KQot
ewotICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5n
ZXRGaWxlU2l6ZShwYXRoLCByZXN1bHQpOwotfQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpyZXZl
YWxGb2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5yZXZlYWxGb2xkZXJJbk9TKHBhdGgpOwotfQotCi1i
b29sIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcm
IHBhdGgsIHRpbWVfdCYgcmVzdWx0KQotewotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwot
ICAgIGlmICghd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0Rmls
ZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDx0aW1lX3Q+KG1vZGlmaWNhdGlvblRp
bWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1TdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmRpcmVj
dG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kaXJlY3RvcnlOYW1lKHBhdGgpOwotfQotCi1T
dHJpbmcgUGxhdGZvcm1CcmlkZ2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQotewotICAgIHJldHVybiB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5wYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocGF0aCwgY29tcG9uZW50KTsKLX0KLQotYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bWFrZUFsbERp
cmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gd2ViS2l0UGxhdGZv
cm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOwot
fQotCi1TdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmdldEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0
aWVzKCktPmdldEFic29sdXRlUGF0aChwYXRoKTsKLX0KLQotYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
aXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygpLT5pc0RpcmVjdG9yeShwYXRoKTsKLX0KLQot
S1VSTCBQbGF0Zm9ybUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChjb25zdCBTdHJpbmcmIHBhdGgpCi17
Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPmZp
bGVQYXRoVG9VUkwocGF0aCk7Ci19Ci0KLVBsYXRmb3JtRmlsZUhhbmRsZSBQbGF0Zm9ybUJyaWRn
ZTo6b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKLXsKLSAg
ICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+b3BlbkZp
bGUocGF0aCwgbW9kZSk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsb3NlRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+
ZmlsZVV0aWxpdGllcygpLT5jbG9zZUZpbGUoaGFuZGxlKTsKLX0KLQotbG9uZyBsb25nIFBsYXRm
b3JtQnJpZGdlOjpzZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcg
b2Zmc2V0LCBGaWxlU2Vla09yaWdpbiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5maWxlVXRpbGl0aWVzKCktPnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBv
cmlnaW4pOwotfQotCi1ib29sIFBsYXRmb3JtQnJpZGdlOjp0cnVuY2F0ZUZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCkKLXsKLSAgICByZXR1cm4gd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+dHJ1bmNhdGVGaWxlKGhhbmRsZSwg
b2Zmc2V0KTsKLX0KLQotaW50IFBsYXRmb3JtQnJpZGdlOjpyZWFkRnJvbUZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICByZXR1cm4g
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmZpbGVVdGlsaXRpZXMoKS0+cmVhZEZyb21GaWxlKGhh
bmRsZSwgZGF0YSwgbGVuZ3RoKTsKLX0KLQotaW50IFBsYXRmb3JtQnJpZGdlOjp3cml0ZVRvRmls
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQotewotICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZmlsZVV0aWxpdGllcygp
LT53cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7Ci19Ci0KLS8vIEZvbnQgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotI2lmIE9TKFdJTkRPV1MpCi1ib29sIFBsYXRmb3JtQnJpZGdlOjplbnN1cmVG
b250TG9hZGVkKEhGT05UIGZvbnQpCi17Ci0gICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPnNhbmRib3hTdXBwb3J0KCk7Ci0KLSAgICAvLyBpZiB0aGVy
ZSBpcyBubyBzYW5kYm94LCB0aGVuIHdlIGNhbiBhc3N1bWUgdGhlIGZvbnQKLSAgICAvLyB3YXMg
YWJsZSB0byBiZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5IGFscmVhZHkKLSAgICByZXR1cm4gc3MgPyBz
cy0+ZW5zdXJlRm9udExvYWRlZChmb250KSA6IHRydWU7Ci19Ci0jZW5kaWYKLQotI2lmIE9TKERB
UldJTikKLWJvb2wgUGxhdGZvcm1CcmlkZ2U6OmxvYWRGb250KE5TRm9udCogc3JjRm9udCwgQVRT
Rm9udENvbnRhaW5lclJlZiogY29udGFpbmVyLCB1aW50MzJfdCogZm9udElEKQotewotICAgIFdl
YlNhbmRib3hTdXBwb3J0KiBzcyA9IHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zYW5kYm94U3Vw
cG9ydCgpOwotICAgIGlmIChzcykKLSAgICAgICAgcmV0dXJuIHNzLT5sb2FkRm9udChzcmNGb250
LCBjb250YWluZXIsIGZvbnRJRCk7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBpbiByZXNwb25zZSB0byBhbiBlcnJvciBsb2FkaW5nIGEKLSAgICAvLyBmb250
IGR1ZSB0byBiZWluZyBibG9ja2VkIGJ5IHRoZSBzYW5kYm94LgotICAgIC8vIFRoaXMgYnkgZGVm
aW5pdGlvbiBzaG91bGRuJ3QgaGFwcGVuIGlmIHRoZXJlIGlzIG5vIHNhbmRib3ggc3VwcG9ydC4K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAqY29udGFpbmVyID0gMDsKLSAgICAqZm9u
dElEID0gMDsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZWxpZiBPUyhVTklYKQotU3RyaW5nIFBs
YXRmb3JtQnJpZGdlOjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3RlcnMsIGNvbnN0IGNoYXIqIHByZWZlcnJlZExvY2Fs
ZSkKLXsKLSAgICBpZiAod2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNhbmRib3hTdXBwb3J0KCkp
Ci0gICAgICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c2FuZGJveFN1cHBvcnQo
KS0+Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbnVtQ2hhcmFjdGVycywg
cHJlZmVycmVkTG9jYWxlKTsKLQotICAgIFdlYkNTdHJpbmcgZmFtaWx5ID0gV2ViRm9udEluZm86
OmZhbWlseUZvckNoYXJzKGNoYXJhY3RlcnMsIG51bUNoYXJhY3RlcnMsIHByZWZlcnJlZExvY2Fs
ZSk7Ci0gICAgaWYgKGZhbWlseS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBXZWJTdHJpbmc6OmZy
b21VVEY4KGZhbWlseS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYlN0cmluZygpOwotfQotCi12
b2lkIFBsYXRmb3JtQnJpZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBm
b250LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCkKLXsKLSAgICBX
ZWJGb250UmVuZGVyU3R5bGUgc3R5bGU7Ci0KLSAgICBpZiAod2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPnNhbmRib3hTdXBwb3J0KCkpCi0gICAgICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5z
YW5kYm94U3VwcG9ydCgpLT5nZXRSZW5kZXJTdHlsZUZvclN0cmlrZShmb250LCBzaXplQW5kU3R5
bGUsICZzdHlsZSk7Ci0gICAgZWxzZQotICAgICAgICBXZWJGb250SW5mbzo6cmVuZGVyU3R5bGVG
b3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOwotCi0gICAgc3R5bGUudG9Gb250
UmVuZGVyU3R5bGUocmVzdWx0KTsKLX0KLSNlbmRpZgotCi0vLyBEYXRhYmFzZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLVBsYXRmb3JtRmlsZUhhbmRsZSBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShj
b25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKQotewotICAgIHJldHVy
biB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGF0YWJhc2VPcGVuRmlsZShXZWJTdHJpbmcodmZz
RmlsZU5hbWUpLCBkZXNpcmVkRmxhZ3MpOwotfQotCi1pbnQgUGxhdGZvcm1CcmlkZ2U6OmRhdGFi
YXNlRGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lLCBib29sIHN5bmNEaXIpCi17
Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5kYXRhYmFzZURlbGV0ZUZpbGUo
V2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgc3luY0Rpcik7Ci19Ci0KLWxvbmcgUGxhdGZvcm1Ccmlk
Z2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSkK
LXsKLSAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmRhdGFiYXNlR2V0RmlsZUF0
dHJpYnV0ZXMoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSk7Ci19Ci0KLWxvbmcgbG9uZyBQbGF0Zm9y
bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKQot
ewotICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGF0YWJhc2VHZXRGaWxlU2l6
ZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKLX0KLQotbG9uZyBsb25nIFBsYXRmb3JtQnJpZGdl
OjpkYXRhYmFzZUdldFNwYWNlQXZhaWxhYmxlRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
SWRlbnRpZmllcikKLXsKLSAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmRhdGFi
YXNlR2V0U3BhY2VBdmFpbGFibGVGb3JPcmlnaW4ob3JpZ2luSWRlbnRpZmllcik7Ci19Ci0KLS8v
IEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZT4gUGxhdGZvcm1CcmlkZ2U6OmlkYkZhY3RvcnkoKQotewotICAgIC8vIFRoZXJlJ3Mgbm8g
cmVhc29uIHdoeSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHByb3h5IGVhY2ggdGltZSwgYnV0
Ci0gICAgLy8gdGhlcmUncyBhbHNvIG5vIHN0cm9uZyByZWFzb24gbm90IHRvLgotICAgIHJldHVy
biBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpjcmVhdGUoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJy
aWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBW
ZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFsdWVzLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBrZXlzKQotewotICAgIFdlYlZl
Y3RvcjxXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHdlYlZhbHVlcyA9IHZhbHVlczsKLSAgICBX
ZWJWZWN0b3I8V2ViSURCS2V5PiB3ZWJLZXlzOwotICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5jcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHdlYlZhbHVlcywg
a2V5UGF0aCwgd2ViS2V5cyk7Ci0KLSAgICBzaXplX3Qgd2ViS2V5c1NpemUgPSB3ZWJLZXlzLnNp
emUoKTsKLSAgICBrZXlzLnJlc2VydmVDYXBhY2l0eSh3ZWJLZXlzU2l6ZSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3ZWJLZXlzU2l6ZTsgKytpKQotICAgICAgICBrZXlzLmFwcGVuZChQ
YXNzUmVmUHRyPElEQktleT4od2ViS2V5c1tpXSkpOwotfQotCi1QYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gUGxhdGZvcm1CcmlkZ2U6OmluamVjdElEQktleUludG9TZXJpYWxpemVk
VmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5pbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGtleSwg
dmFsdWUsIGtleVBhdGgpOwotfQotCi0vLyBLZXlnZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVN0cmluZyBQ
bGF0Zm9ybUJyaWRnZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKAotICAgIHVu
c2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtVUkwm
IHVybCkKLXsKLSAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nKGNoYWxs
ZW5nZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViVVJMKHVybCkpOwotfQotCi0vLyBMYW5ndWFnZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LVN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKQotewotICAg
IHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+ZGVmYXVsdExvY2FsZSgpOwotfQotCi0v
LyBMYXlvdXRUZXN0TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RN
b2RlKCkKLXsKLSAgICByZXR1cm4gV2ViS2l0OjpsYXlvdXRUZXN0TW9kZSgpOwotfQotCi0vLyBN
aW1lVHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgUGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIHJldHVybiB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSW1hZ2VNSU1FVHlwZSht
aW1lVHlwZSkKLSAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKLX0K
LQotYm9vbCBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0
KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c0phdmFTY3JpcHRNSU1FVHlwZShtaW1lVHlwZSkK
LSAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKLX0KLQotYm9vbCBQ
bGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5taW1lUmVn
aXN0cnkoKS0+c3VwcG9ydHNOb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKQotICAgICAgICAhPSBX
ZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOwotfQotCi1TdHJpbmcgUGxhdGZvcm1Ccmlk
Z2U6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQotewotICAg
IHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBl
Rm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybUJyaWRnZTo6d2Vs
bEtub3duTWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCi17Ci0g
ICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+d2VsbEtu
b3duTWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLX0KLQotU3RyaW5nIFBsYXRmb3Jt
QnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1
cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZyb21G
aWxlKHBhdGgpOwotfQotCi1TdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lv
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIHdlYktp
dFBsYXRmb3JtU3VwcG9ydCgpLT5taW1lUmVnaXN0cnkoKS0+cHJlZmVycmVkRXh0ZW5zaW9uRm9y
TUlNRVR5cGUobWltZVR5cGUpOwotfQotCi0vLyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wg
UGxhdGZvcm1CcmlkZ2U6OnBsdWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4q
IHJlc3VsdHMpCi17Ci0gICAgV2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBsIGJ1aWxkZXIocmVzdWx0
cyk7Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmdldFBsdWdpbkxpc3QocmVmcmVzaCwg
JmJ1aWxkZXIpOwotICAgIHJldHVybiB0cnVlOyAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIG5lZWQg
Zm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGEgdmFsdWUuCi19Ci0KLU5QT2JqZWN0KiBQbGF0
Zm9ybUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAg
ICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc1BsdWdpbkNvbnRhaW5lcigpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBs
Kj4od2lkZ2V0KS0+c2NyaXB0YWJsZU9iamVjdCgpOwotfQotCi0vLyBSZXNvdXJjZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVBhc3NSZWZQdHI8SW1hZ2U+IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFn
ZVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgY29uc3QgV2ViRGF0YSYgcmVzb3Vy
Y2UgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+bG9hZFJlc291cmNlKG5hbWUpOwotICAgIGlm
IChyZXNvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7
Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAg
IGltYWdlLT5zZXREYXRhKHJlc291cmNlLCB0cnVlKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0K
LSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBQbGF0Zm9ybUJy
aWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUg
c2FtcGxlUmF0ZSkKLXsKLSAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7Ci0gICAgaWYgKHJlc291cmNlLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGRlY29kZUF1
ZGlvRmlsZURhdGEocmVzb3VyY2UuZGF0YSgpLCByZXNvdXJjZS5zaXplKCksIHNhbXBsZVJhdGUp
OwotfQotCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBQbGF0Zm9ybUJyaWRnZTo6ZGVjb2RlQXVkaW9G
aWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUp
Ci17Ci0gICAgV2ViQXVkaW9CdXMgd2ViQXVkaW9CdXM7Ci0gICAgaWYgKHdlYktpdFBsYXRmb3Jt
U3VwcG9ydCgpLT5sb2FkQXVkaW9SZXNvdXJjZSgmd2ViQXVkaW9CdXMsIGRhdGEsIHNpemUsIHNh
bXBsZVJhdGUpKQotICAgICAgICByZXR1cm4gd2ViQXVkaW9CdXMucmVsZWFzZSgpOwotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKLQotLy8gU2Fu
ZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIFBsYXRmb3JtQnJpZGdlOjpzYW5kYm94RW5hYmxlZCgp
Ci17Ci0gICAgcmV0dXJuIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5zYW5kYm94RW5hYmxlZCgp
OwotfQotCi0vLyBTaGFyZWRUaW1lcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGxhdGZvcm1CcmlkZ2U6OnNl
dFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZnVuYykoKSkKLXsKLSAgICB3ZWJLaXRQ
bGF0Zm9ybVN1cHBvcnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKGZ1bmMpOwotfQot
Ci12b2lkIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVJbnRlcnZhbChkb3VibGUg
aW50ZXJ2YWwpCi17Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnNldFNoYXJlZFRpbWVy
RmlyZUludGVydmFsKGludGVydmFsKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6c3RvcFNo
YXJlZFRpbWVyKCkKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+c3RvcFNoYXJlZFRp
bWVyKCk7Ci19Ci0KLS8vIFN0YXRzQ291bnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybUJyaWRn
ZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPmRlY3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6aW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUp
Ci17Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmluY3JlbWVudFN0YXRzQ291bnRlcihu
YW1lKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNv
bnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRD
b3VudCkKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291
bnRzKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldENvdW50KTsKLX0KLQotdm9pZCBQbGF0
Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNh
bXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpCi17Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkt
Pmhpc3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1ZSk7Ci19Ci0K
LS8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVy
bWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBv
cnQoKS0+c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGVuYWJsZWQpOwotfQotCi0vLyBUaGVtaW5n
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSNpZiBPUyhXSU5ET1dTKQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpw
YWludEJ1dHRvbigKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRl
LCBpbnQgY2xhc3NpY1N0YXRlLAotICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgd2Vi
S2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50QnV0dG9uKAotICAgICAg
ICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0
YXRlLCByZWN0KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRNZW51TGlzdCgKLSAg
ICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0
YXRlLAotICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50TWVudUxpc3QoCi0gICAgICAgIGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwot
fQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KAotICAgIEdyYXBo
aWNzQ29udGV4dCogZ2MsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2lu
ZSgpLT5wYWludFNjcm9sbGJhckFycm93KAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpLCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBp
bnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBh
aW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwotfQotCi12b2lkIFBsYXRmb3Jt
QnJpZGdlOjpwYWludFNjcm9sbGJhclRyYWNrKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGlu
dCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50UmVjdCYgYWxpZ25SZWN0KQotewotICAgIHdlYktpdFBsYXRmb3JtU3Vw
cG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRyYWNrKAotICAgICAgICBnYy0+
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCBy
ZWN0LAotICAgICAgICBhbGlnblJlY3QpOwotfQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWlu
dFNwaW5CdXR0b24oCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdl
YktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNwaW5CdXR0b24oCi0g
ICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFz
c2ljU3RhdGUsIHJlY3QpOwotfQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFRleHRGaWVs
ZCgKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLAotICAgIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Ym9vbCBmaWxsQ29udGVudEFyZWEsCi0gICAgYm9vbCBkcmF3RWRnZXMpCi17Ci0gICAgLy8gRmFs
bGJhY2sgdG8gd2hpdGUgd2hlbiB8Y29sb3J8IGlzIGludmFsaWQuCi0gICAgUkdCQTMyIGJhY2tn
cm91bmRDb2xvciA9IGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yLnJnYigpIDogQ29sb3I6OndoaXRl
OwotCi0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50VGV4
dEZpZWxkKAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBz
dGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0LAotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsIGZpbGxD
b250ZW50QXJlYSwgZHJhd0VkZ2VzKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRU
cmFja2JhcigKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBp
bnQgY2xhc3NpY1N0YXRlLAotICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgd2ViS2l0
UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPnBhaW50VHJhY2tiYXIoCi0gICAgICAg
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3Rh
dGUsIHJlY3QpOwotfQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKAot
ICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IElu
dFJlY3QmIHZhbHVlUmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25k
cykKLXsKLSAgICB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRQ
cm9ncmVzc0JhcigKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgYmFy
UmVjdCwgdmFsdWVSZWN0LCBkZXRlcm1pbmF0ZSwgYW5pbWF0ZWRTZWNvbmRzKTsKLX0KLQotI2Vs
aWYgT1MoREFSV0lOKQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1i
KAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgVGhlbWVQ
YWludFNpemUgc2l6ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQYWludFNjcm9s
bGJhckluZm8mIHNjcm9sbGJhckluZm8pCi17Ci0gICAgV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJh
ckluZm8gd2ViVGhlbWVTY3JvbGxiYXJJbmZvOwotCi0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZv
Lm9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVu
dGF0aW9uPihzY3JvbGxiYXJJbmZvLm9yaWVudGF0aW9uKTsKLSAgICB3ZWJUaGVtZVNjcm9sbGJh
ckluZm8ucGFyZW50ID0gc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhclBhcmVu
dD4oc2Nyb2xsYmFySW5mby5wYXJlbnQpOwotICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5tYXhW
YWx1ZSA9IHNjcm9sbGJhckluZm8ubWF4VmFsdWU7Ci0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZv
LmN1cnJlbnRWYWx1ZSA9IHNjcm9sbGJhckluZm8uY3VycmVudFZhbHVlOwotICAgIHdlYlRoZW1l
U2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZSA9IHNjcm9sbGJhckluZm8udmlzaWJsZVNpemU7Ci0g
ICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLnRvdGFsU2l6ZSA9IHNjcm9sbGJhckluZm8udG90YWxT
aXplOwotCi0jaWYgV0VCS0lUX1VTSU5HX1NLSUEKLSAgICBXZWJLaXQ6OldlYkNhbnZhcyogd2Vi
Q2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSNlbHNlCi0gICAgV2Vi
S2l0OjpXZWJDYW52YXMqIHdlYkNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNlbmRp
ZgotICAgIHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9s
bGJhclRodW1iKAotICAgICAgICB3ZWJDYW52YXMsCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYlRo
ZW1lRW5naW5lOjpTdGF0ZT4oc3RhdGUpLAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJUaGVtZUVu
Z2luZTo6U2l6ZT4oc2l6ZSksCi0gICAgICAgIHJlY3QsCi0gICAgICAgIHdlYlRoZW1lU2Nyb2xs
YmFySW5mbyk7Ci19Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLXN0YXRpYyBXZWJUaGVtZUVuZ2luZTo6
UGFydCBXZWJUaGVtZVBhcnQoUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFydCBwYXJ0KQotewotICAg
IHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJE
b3duQXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsK
LSAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OiByZXR1cm4g
V2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c7Ci0gICAgY2FzZSBQbGF0Zm9y
bUJyaWRnZTo6UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6
UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c7Ci0gICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNj
cm9sbGJhclVwQXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclVwQXJy
b3c7Ci0gICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVt
YjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iOwot
ICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iOiByZXR1
cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iOwotICAgIGNhc2Ug
UGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2s6IHJldHVybiBXZWJU
aGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjazsKLSAgICBjYXNlIFBsYXRm
b3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjazogcmV0dXJuIFdlYlRoZW1lRW5n
aW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjazsKLSAgICBjYXNlIFBsYXRmb3JtQnJpZGdl
OjpQYXJ0Q2hlY2tib3g6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydENoZWNrYm94OwotICAg
IGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRSYWRpbzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQ
YXJ0UmFkaW87Ci0gICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydEJ1dHRvbjogcmV0dXJuIFdl
YlRoZW1lRW5naW5lOjpQYXJ0QnV0dG9uOwotICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRU
ZXh0RmllbGQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFRleHRGaWVsZDsKLSAgICBjYXNl
IFBsYXRmb3JtQnJpZGdlOjpQYXJ0TWVudUxpc3Q6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFy
dE1lbnVMaXN0OwotICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTbGlkZXJUcmFjazogcmV0
dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2xpZGVyVHJhY2s7Ci0gICAgY2FzZSBQbGF0Zm9ybUJy
aWRnZTo6UGFydFNsaWRlclRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTbGlkZXJU
aHVtYjsKLSAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0SW5uZXJTcGluQnV0dG9uOiByZXR1
cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRJbm5lclNwaW5CdXR0b247Ci0gICAgY2FzZSBQbGF0Zm9y
bUJyaWRnZTo6UGFydFByb2dyZXNzQmFyOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRQcm9n
cmVzc0JhcjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdl
YlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OwotfQotCi1zdGF0aWMgV2ViVGhl
bWVFbmdpbmU6OlN0YXRlIFdlYlRoZW1lU3RhdGUoUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRT
dGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBQbGF0Zm9ybUJy
aWRnZTo6U3RhdGVEaXNhYmxlZDogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVk
OwotICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlN0YXRlSG92ZXI6IHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6U3RhdGVIb3ZlcjsKLSAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1hbDog
cmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZU5vcm1hbDsKLSAgICBjYXNlIFBsYXRmb3JtQnJp
ZGdlOjpTdGF0ZVByZXNzZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkOwot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlN0YXRlRGlzYWJsZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIEdldFdlYlRoZW1lRXh0cmFQYXJh
bXMoUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFydCBwYXJ0LCBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQ
YWludFN0YXRlIHN0YXRlLCBjb25zdCBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFy
YW1zKiBleHRyYVBhcmFtcywgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zKiB3ZWJUaGVtZUV4
dHJhUGFyYW1zKQotewotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgUGxhdGZvcm1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2s6Ci0gICAgY2FzZSBQbGF0Zm9ybUJyaWRn
ZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s6Ci0gICAgICAgIHdlYlRoZW1lRXh0cmFQYXJh
bXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50
cmFja1g7Ci0gICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNr
WSA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1k7Ci0gICAgICAgIHdlYlRoZW1l
RXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBleHRyYVBhcmFtcy0+c2Ny
b2xsYmFyVHJhY2sudHJhY2tXaWR0aDsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Ny
b2xsYmFyVHJhY2sudHJhY2tIZWlnaHQgPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJh
Y2tIZWlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRD
aGVja2JveDoKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+YnV0dG9uLmNoZWNrZWQgPSBl
eHRyYVBhcmFtcy0+YnV0dG9uLmNoZWNrZWQ7Ci0gICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMt
PmJ1dHRvbi5pbmRldGVybWluYXRlID0gZXh0cmFQYXJhbXMtPmJ1dHRvbi5pbmRldGVybWluYXRl
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0UmFkaW86Ci0g
ICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPmJ1dHRvbi5jaGVja2VkID0gZXh0cmFQYXJhbXMt
PmJ1dHRvbi5jaGVja2VkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtQnJpZGdl
OjpQYXJ0QnV0dG9uOgotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5idXR0b24uaXNEZWZh
dWx0ID0gZXh0cmFQYXJhbXMtPmJ1dHRvbi5pc0RlZmF1bHQ7Ci0gICAgICAgIHdlYlRoZW1lRXh0
cmFQYXJhbXMtPmJ1dHRvbi5oYXNCb3JkZXIgPSBleHRyYVBhcmFtcy0+YnV0dG9uLmhhc0JvcmRl
cjsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+YnV0dG9uLmJhY2tncm91bmRDb2xvciA9
IGV4dHJhUGFyYW1zLT5idXR0b24uYmFja2dyb3VuZENvbG9yOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0VGV4dEZpZWxkOgotICAgICAgICB3ZWJUaGVtZUV4
dHJhUGFyYW1zLT50ZXh0RmllbGQuaXNUZXh0QXJlYSA9IGV4dHJhUGFyYW1zLT50ZXh0RmllbGQu
aXNUZXh0QXJlYTsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+dGV4dEZpZWxkLmlzTGlz
dGJveCA9IGV4dHJhUGFyYW1zLT50ZXh0RmllbGQuaXNMaXN0Ym94OwotICAgICAgICB3ZWJUaGVt
ZUV4dHJhUGFyYW1zLT50ZXh0RmllbGQuYmFja2dyb3VuZENvbG9yID0gZXh0cmFQYXJhbXMtPnRl
eHRGaWVsZC5iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZv
cm1CcmlkZ2U6OlBhcnRNZW51TGlzdDoKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+bWVu
dUxpc3QuaGFzQm9yZGVyID0gZXh0cmFQYXJhbXMtPm1lbnVMaXN0Lmhhc0JvcmRlcjsKLSAgICAg
ICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+bWVudUxpc3QuaGFzQm9yZGVyUmFkaXVzID0gZXh0cmFQ
YXJhbXMtPm1lbnVMaXN0Lmhhc0JvcmRlclJhZGl1czsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBh
cmFtcy0+bWVudUxpc3QuYXJyb3dYID0gZXh0cmFQYXJhbXMtPm1lbnVMaXN0LmFycm93WDsKLSAg
ICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+bWVudUxpc3QuYXJyb3dZID0gZXh0cmFQYXJhbXMt
Pm1lbnVMaXN0LmFycm93WTsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+bWVudUxpc3Qu
YmFja2dyb3VuZENvbG9yID0gZXh0cmFQYXJhbXMtPm1lbnVMaXN0LmJhY2tncm91bmRDb2xvcjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNsaWRlclRyYWNr
OgotICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTbGlkZXJUaHVtYjoKLSAgICAgICAgd2Vi
VGhlbWVFeHRyYVBhcmFtcy0+c2xpZGVyLnZlcnRpY2FsID0gZXh0cmFQYXJhbXMtPnNsaWRlci52
ZXJ0aWNhbDsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2xpZGVyLmluRHJhZyA9IGV4
dHJhUGFyYW1zLT5zbGlkZXIuaW5EcmFnOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRm
b3JtQnJpZGdlOjpQYXJ0SW5uZXJTcGluQnV0dG9uOgotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFy
YW1zLT5pbm5lclNwaW4uc3BpblVwID0gZXh0cmFQYXJhbXMtPmlubmVyU3Bpbi5zcGluVXA7Ci0g
ICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPmlubmVyU3Bpbi5yZWFkT25seSA9IGV4dHJhUGFy
YW1zLT5pbm5lclNwaW4ucmVhZE9ubHk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZv
cm1CcmlkZ2U6OlBhcnRQcm9ncmVzc0JhcjoKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+
cHJvZ3Jlc3NCYXIuZGV0ZXJtaW5hdGUgPSBleHRyYVBhcmFtcy0+cHJvZ3Jlc3NCYXIuZGV0ZXJt
aW5hdGU7Ci0gICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnByb2dyZXNzQmFyLnZhbHVlUmVj
dFggPSBleHRyYVBhcmFtcy0+cHJvZ3Jlc3NCYXIudmFsdWVSZWN0WDsKLSAgICAgICAgd2ViVGhl
bWVFeHRyYVBhcmFtcy0+cHJvZ3Jlc3NCYXIudmFsdWVSZWN0WSA9IGV4dHJhUGFyYW1zLT5wcm9n
cmVzc0Jhci52YWx1ZVJlY3RZOwotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5wcm9ncmVz
c0Jhci52YWx1ZVJlY3RXaWR0aCA9IGV4dHJhUGFyYW1zLT5wcm9ncmVzc0Jhci52YWx1ZVJlY3RX
aWR0aDsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+cHJvZ3Jlc3NCYXIudmFsdWVSZWN0
SGVpZ2h0ID0gZXh0cmFQYXJhbXMtPnByb2dyZXNzQmFyLnZhbHVlUmVjdEhlaWdodDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7IC8vIFBhcnRzIHRoYXQgaGF2
ZSBubyBleHRyYSBwYXJhbXMgZ2V0IGhlcmUuCi0gICAgfQotfQotCi1JbnRTaXplIFBsYXRmb3Jt
QnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCBwYXJ0KQotewotICAgICByZXR1cm4g
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2ViVGhlbWVQ
YXJ0KHBhcnQpKTsKLX0KLQotdm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCi0g
ICAgR3JhcGhpY3NDb250ZXh0KiBnYywgVGhlbWVQYXJ0IHBhcnQsIFRoZW1lUGFpbnRTdGF0ZSBz
dGF0ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQYWludEV4dHJhUGFyYW1zKiBl
eHRyYVBhcmFtcykKLXsKLSAgICBXZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMgd2ViVGhlbWVF
eHRyYVBhcmFtczsKLSAgICBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKHBhcnQsIHN0YXRlLCBleHRy
YVBhcmFtcywgJndlYlRoZW1lRXh0cmFQYXJhbXMpOwotICAgIHdlYktpdFBsYXRmb3JtU3VwcG9y
dCgpLT50aGVtZUVuZ2luZSgpLT5wYWludCgKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKSwgV2ViVGhlbWVQYXJ0KHBhcnQpLCBXZWJUaGVtZVN0YXRlKHN0YXRlKSwgcmVj
dCwgJndlYlRoZW1lRXh0cmFQYXJhbXMpOwotfQotCi0jZW5kaWYKLQotLy8gVHJhY2UgRXZlbnQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi12b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hh
ciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQotewotICAgIHdlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT50cmFjZUV2ZW50QmVnaW4obmFtZSwgaWQsIGV4dHJhKTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBp
ZCwgY29uc3QgY2hhciogZXh0cmEpCi17Ci0gICAgd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnRy
YWNlRXZlbnRFbmQobmFtZSwgaWQsIGV4dHJhKTsKLX0KLQotLy8gVmlzaXRlZCBMaW5rcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1MaW5rSGFzaCBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFy
KiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0
PDIwNDg+IGJ1ZmZlcjsKLSAgICB1cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7Ci0gICAgaWYgKCF1
cmxfdXRpbDo6Q2Fub25pY2FsaXplKHVybCwgbGVuZ3RoLCAwLCAmYnVmZmVyLCAmcGFyc2VkKSkK
LSAgICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIFVSTHMgYXJlIHVudmlzaXRlZC4KLSAgICBy
ZXR1cm4gd2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0
YSgpLCBidWZmZXIubGVuZ3RoKCkpOwotfQotCi1MaW5rSGFzaCBQbGF0Zm9ybUJyaWRnZTo6dmlz
aXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQotewotICAg
IC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVSTCB1c2luZyBnb29nbGV1cmwgYW5kIHBhc3MgdGhl
IGFic29sdXRlIFVSTCB1cCB0bwotICAgIC8vIHRoZSBlbWJlZGRlci4gV2UgY291bGQgY3JlYXRl
IGEgR1VSTCBvYmplY3QgZnJvbSB0aGUgYmFzZSBhbmQgcmVzb2x2ZQotICAgIC8vIHRoZSByZWxh
dGl2ZSBVUkwgdGhhdCB3YXksIGJ1dCBjYWxsaW5nIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMK
LSAgICAvLyBkaXJlY3RseSBzYXZlcyB1cyB0aGUgc3RyaW5nIGFsbG9jYXRpb24gaW4gbW9zdCBj
YXNlcy4KLSAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZlcjsKLSAgICB1
cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7Ci0KLSNpZiBVU0UoR09PR0xFVVJMKQotICAgIGNvbnN0
IENTdHJpbmcmIGNzdHIgPSBiYXNlLnV0ZjhTdHJpbmcoKTsKLSAgICBjb25zdCBjaGFyKiBkYXRh
ID0gY3N0ci5kYXRhKCk7Ci0gICAgaW50IGxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7Ci0gICAgY29u
c3QgdXJsX3BhcnNlOjpQYXJzZWQmIHNyY1BhcnNlZCA9IGJhc2UucGFyc2VkKCk7Ci0jZWxzZQot
ICAgIC8vIFdoZW4gd2UncmUgbm90IHVzaW5nIEdvb2dsZVVSTCwgZmlyc3QgY2Fub25pY2FsaXpl
IGl0IHNvIHdlIGNhbiByZXNvbHZlIGl0Ci0gICAgLy8gYmVsb3cuCi0gICAgdXJsX2Nhbm9uOjpS
YXdDYW5vbk91dHB1dDwyMDQ4PiBzcmNDYW5vbjsKLSAgICB1cmxfcGFyc2U6OlBhcnNlZCBzcmNQ
YXJzZWQ7Ci0gICAgU3RyaW5nIHN0ciA9IGJhc2Uuc3RyaW5nKCk7Ci0gICAgaWYgKCF1cmxfdXRp
bDo6Q2Fub25pY2FsaXplKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwgMCwgJnNyY0Nh
bm9uLCAmc3JjUGFyc2VkKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgY2hhciogZGF0
YSA9IHNyY0Nhbm9uLmRhdGEoKTsKLSAgICBpbnQgbGVuZ3RoID0gc3JjQ2Fub24ubGVuZ3RoKCk7
Ci0jZW5kaWYKLQotICAgIGlmICghdXJsX3V0aWw6OlJlc29sdmVSZWxhdGl2ZShkYXRhLCBsZW5n
dGgsIHNyY1BhcnNlZCwgYXR0cmlidXRlVVJMLmNoYXJhY3RlcnMoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCAwLCAmYnVmZmVyLCAm
cGFyc2VkKSkKLSAgICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIHJlc29sdmVkIFVSTC4KLQot
ICAgIHJldHVybiB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1CcmlkZ2U6Omlz
TGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQotewotICAgIHJldHVybiB3ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQoKS0+aXNMaW5rVmlzaXRlZCh2aXNpdGVkTGlua0hhc2gpOwotfQot
Ci0vLyBUaGVzZSBhcmUgdGVtcG9yYXJ5IG1ldGhvZHMgdGhhdCB0aGUgV2ViS2l0IGxheWVyIGNh
biB1c2UgdG8gY2FsbCB0byB0aGUKLS8vIEdsdWUgbGF5ZXIuIE9uY2UgdGhlIEdsdWUgbGF5ZXIg
bW92ZXMgZW50aXJlbHkgaW50byB0aGUgV2ViS2l0IGxheWVyLCB0aGVzZQotLy8gbWV0aG9kcyB3
aWxsIGJlIGRlbGV0ZWQuCi0KLXZvaWQgUGxhdGZvcm1CcmlkZ2U6Om5vdGlmeUpTT3V0T2ZNZW1v
cnkoRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFt
ZSk7Ci0gICAgaWYgKCF3ZWJGcmFtZS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB3
ZWJGcmFtZS0+Y2xpZW50KCktPmRpZEV4aGF1c3RNZW1vcnlBdmFpbGFibGVGb3JTY3JpcHQod2Vi
RnJhbWUpOwotfQotCi1pbnQgUGxhdGZvcm1CcmlkZ2U6Om1lbW9yeVVzYWdlTUIoKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHdlYktpdFBsYXRmb3JtU3VwcG9ydCgpLT5tZW1vcnlV
c2FnZU1CKCkpOwotfQotCi1pbnQgUGxhdGZvcm1CcmlkZ2U6OmFjdHVhbE1lbW9yeVVzYWdlTUIo
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHdlYktpdFBsYXRmb3JtU3VwcG9ydCgp
LT5hY3R1YWxNZW1vcnlVc2FnZU1CKCkpOwotfQotCi1pbnQgUGxhdGZvcm1CcmlkZ2U6OnNjcmVl
bkRlcHRoKFdpZGdldCogd2lkZ2V0KQotewotICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0g
dG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLmRlcHRoOwotfQotCi1pbnQg
UGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQot
ewotICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0
KTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNsaWVu
dC0+c2NyZWVuSW5mbygpLmRlcHRoUGVyQ29tcG9uZW50OwotfQotCi1ib29sIFBsYXRmb3JtQnJp
ZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgV2ViV2lkZ2V0
Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwotICAgIGlmICghY2xp
ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCku
aXNNb25vY2hyb21lOwotfQotCi1JbnRSZWN0IFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5SZWN0KFdp
ZGdldCogd2lkZ2V0KQotewotICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRn
ZXRDbGllbnQod2lkZ2V0KTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKLSAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkucmVjdDsKLX0KLQotSW50UmVj
dCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKLXsK
LSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7
Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgcmV0dXJu
IGNsaWVudC0+c2NyZWVuSW5mbygpLmF2YWlsYWJsZVJlY3Q7Ci19Ci0KLWJvb2wgUGxhdGZvcm1C
cmlkZ2U6OnBvcHVwc0FsbG93ZWQoTlBQIG5wcCkKLXsKLSAgICAvLyBGSVhNRTogR2l2ZSB0aGUg
ZW1iZWRkZXIgYSB3YXkgdG8gY29udHJvbCB0aGlzLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
I2lmIEVOQUJMRShXT1JLRVJTKQotV29ya2VyQ29udGV4dFByb3h5KiBXb3JrZXJDb250ZXh0UHJv
eHk6OmNyZWF0ZShXb3JrZXIqIHdvcmtlcikKLXsKLSAgICByZXR1cm4gV2ViV29ya2VyQ2xpZW50
SW1wbDo6Y3JlYXRlV29ya2VyQ29udGV4dFByb3h5KHdvcmtlcik7Ci19Ci0jZW5kaWYKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVz
b3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgog
Ci0jaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTI5Myw3
ICsyOTMsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSCiAvLyBz
dGF0aWMKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAgICBQbGF0
Zm9ybUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9u
c2VUaW1lKCksIGRhdGEpOworICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2FjaGVNZXRhZGF0YShyZXNw
b25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCksIGRhdGEpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAJKHJldmlzaW9uIDk0MjQzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBACiAj
aW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0NvbnRl
eHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlBsdWdp
bkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
RnJhbWUuaCIKQEAgLTE4NjksMTMgKzE4NjksMTMgQEAgV2ViRnJhbWVJbXBsOjpXZWJGcmFtZUlt
cGwoV2ViRnJhbWVDbGllbgogICAgICwgbV9pZGVudGlmaWVyKGdlbmVyYXRlRnJhbWVJZGVudGlm
aWVyKCkpCiAgICAgLCBtX2luU2FtZURvY3VtZW50SGlzdG9yeUxvYWQoZmFsc2UpCiB7Ci0gICAg
UGxhdGZvcm1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcih3ZWJGcmFtZUFjdGl2ZUNvdW50
KTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OmluY3JlbWVudFN0YXRzQ291bnRlcih3ZWJGcmFtZUFj
dGl2ZUNvdW50KTsKICAgICBmcmFtZUNvdW50Kys7CiB9CiAKIFdlYkZyYW1lSW1wbDo6fldlYkZy
YW1lSW1wbCgpCiB7Ci0gICAgUGxhdGZvcm1CcmlkZ2U6OmRlY3JlbWVudFN0YXRzQ291bnRlcih3
ZWJGcmFtZUFjdGl2ZUNvdW50KTsKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OmRlY3JlbWVudFN0YXRz
Q291bnRlcih3ZWJGcmFtZUFjdGl2ZUNvdW50KTsKICAgICBmcmFtZUNvdW50LS07CiAKICAgICBj
YW5jZWxQZW5kaW5nU2NvcGluZ0VmZm9ydCgpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gOTQyNDMpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzUsOCAr
MTEzNSw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmEKICAgICAg
ICAgICAgIHdlYmZyYW1lLT5wYWludChjYW52YXMsIHJlY3QpOwogICAgICAgICBkb3VibGUgcGFp
bnRFbmQgPSBjdXJyZW50VGltZSgpOwogICAgICAgICBkb3VibGUgcGl4ZWxzUGVyU2VjID0gKHJl
Y3Qud2lkdGggKiByZWN0LmhlaWdodCkgLyAocGFpbnRFbmQgLSBwYWludFN0YXJ0KTsKLSAgICAg
ICAgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LlNvZnR3
YXJlUGFpbnREdXJhdGlvbk1TIiwgKHBhaW50RW5kIC0gcGFpbnRTdGFydCkgKiAxMDAwLCAwLCAx
MjAsIDMwKTsKLSAgICAgICAgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cygi
UmVuZGVyZXI0LlNvZnR3YXJlUGFpbnRNZWdhcGl4UGVyU2Vjb25kIiwgcGl4ZWxzUGVyU2VjIC8g
MTAwMDAwMCwgMTAsIDIxMCwgMzApOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6Omhpc3RvZ3Jh
bUN1c3RvbUNvdW50cygiUmVuZGVyZXI0LlNvZnR3YXJlUGFpbnREdXJhdGlvbk1TIiwgKHBhaW50
RW5kIC0gcGFpbnRTdGFydCkgKiAxMDAwLCAwLCAxMjAsIDMwKTsKKyAgICAgICAgUGxhdGZvcm1T
dXBwb3J0OjpoaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5Tb2Z0d2FyZVBhaW50TWVn
YXBpeFBlclNlY29uZCIsIHBpeGVsc1BlclNlYyAvIDEwMDAwMDAsIDEwLCAyMTAsIDMwKTsKICAg
ICB9CiB9CiAKQEAgLTI1NzQsOCArMjU3NCw4IEBAIHB1YmxpYzoKICAgICAgICAgdmlldy0+cGFp
bnRDb250ZW50cygmY29udGV4dCwgY29udGVudFJlY3QpOwogICAgICAgICBkb3VibGUgcGFpbnRF
bmQgPSBjdXJyZW50VGltZSgpOwogICAgICAgICBkb3VibGUgcGl4ZWxzUGVyU2VjID0gKGNvbnRl
bnRSZWN0LndpZHRoKCkgKiBjb250ZW50UmVjdC5oZWlnaHQoKSkgLyAocGFpbnRFbmQgLSBwYWlu
dFN0YXJ0KTsKLSAgICAgICAgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cygi
UmVuZGVyZXI0LkFjY2VsUm9vdFBhaW50RHVyYXRpb25NUyIsIChwYWludEVuZCAtIHBhaW50U3Rh
cnQpICogMTAwMCwgMCwgMTIwLCAzMCk7Ci0gICAgICAgIFBsYXRmb3JtQnJpZGdlOjpoaXN0b2dy
YW1DdXN0b21Db3VudHMoIlJlbmRlcmVyNC5BY2NlbFJvb3RQYWludE1lZ2FwaXhQZXJTZWNvbmQi
LCBwaXhlbHNQZXJTZWMgLyAxMDAwMDAwLCAxMCwgMjEwLCAzMCk7CisgICAgICAgIFBsYXRmb3Jt
U3VwcG9ydDo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJSZW5kZXJlcjQuQWNjZWxSb290UGFpbnRE
dXJhdGlvbk1TIiwgKHBhaW50RW5kIC0gcGFpbnRTdGFydCkgKiAxMDAwLCAwLCAxMjAsIDMwKTsK
KyAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpoaXN0b2dyYW1DdXN0b21Db3VudHMoIlJlbmRlcmVy
NC5BY2NlbFJvb3RQYWludE1lZ2FwaXhQZXJTZWNvbmQiLCBwaXhlbHNQZXJTZWMgLyAxMDAwMDAw
LCAxMCwgMjEwLCAzMCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMjU4OSw3ICsyNTg5LDcgQEAg
cHJpdmF0ZToKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKGJvb2wgYWN0aXZlKQogewotICAgIFBsYXRmb3JtQnJpZGdlOjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbigiR1BVLnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSIsIGFjdGl2ZSAq
IDIgKyBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSwgNCk7CisgICAgUGxhdGZvcm1T
dXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiR1BVLnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSIsIGFjdGl2ZSAqIDIgKyBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSwgNCk7CiAKICAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0
aXZlKQogICAgICAgICByZXR1cm47Cg==
</data>
<flag name="review"
          id="102151"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="102152"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>