<?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>151854</bug_id>
          
          <creation_ts>2015-12-04 01:27:13 -0800</creation_ts>
          <short_desc>Rename WebResourceLoadScheduler to WebLoaderStrategy</short_desc>
          <delta_ts>2015-12-04 13:58:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>WebKit 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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1146241</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-04 01:27:13 -0800</bug_when>
    <thetext>It implements WebCore::LoaderStrategy and doesn&apos;t do any scheduling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146242</commentid>
    <comment_count>1</comment_count>
      <attachid>266612</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-04 01:32:55 -0800</bug_when>
    <thetext>Created attachment 266612
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146339</commentid>
    <comment_count>2</comment_count>
      <attachid>266612</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-12-04 10:56:15 -0800</bug_when>
    <thetext>Comment on attachment 266612
patch

OK, but we should really try to get rid of strategies and make things be per page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146389</commentid>
    <comment_count>3</comment_count>
      <attachid>266612</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-04 13:57:58 -0800</bug_when>
    <thetext>Comment on attachment 266612
patch

Clearing flags on attachment: 266612

Committed r193468: &lt;http://trac.webkit.org/changeset/193468&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146390</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-04 13:58:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266612</attachid>
            <date>2015-12-04 01:32:55 -0800</date>
            <delta_ts>2015-12-04 13:57:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>webresourceloadscheduler-rename.patch</filename>
            <type>text/plain</type>
            <size>75267</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MzQxMikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDE1LTEyLTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyIHRvIFdlYkxvYWRlclN0cmF0ZWd5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpbXBsZW1lbnRzIFdlYkNvcmU6OkxvYWRlclN0
cmF0ZWd5IGFuZCBkb2Vzbid0IGRvIGFueSBzY2hlZHVsaW5nLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVN
ZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3ku
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcC4KKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVyU3RyYXRl
Z3k6OldlYkxvYWRlclN0cmF0ZWd5KToKKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVyU3RyYXRl
Z3k6On5XZWJMb2FkZXJTdHJhdGVneSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0cmF0
ZWd5Ojpsb2FkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6
c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKToKKyAgICAgICAgKFdlYktpdDo6bWF4aW11bUJ1ZmZl
cmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6c2NoZWR1bGVM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVyU3RyYXRlZ3k6OnNjaGVkdWxlSW50ZXJu
YWxseUZhaWxlZExvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJTdHJhdGVneTo6aW50
ZXJuYWxseUZhaWxlZExvYWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVy
U3RyYXRlZ3k6OnN0YXJ0TG9jYWxMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVyU3Ry
YXRlZ3k6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0cmF0ZWd5OjpzZXRE
ZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVyU3RyYXRlZ3k6OmNyb3Nz
T3JpZ2luUmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0cmF0
ZWd5OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0
cmF0ZWd5OjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTG9h
ZGVyU3RyYXRlZ3k6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxvYWRlclN0cmF0ZWd5OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMb2FkZXJTdHJhdGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkxvYWRlclN0cmF0ZWd5OjpjcmVhdGVQaW5nSGFuZGxlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
On5XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJlYW1M
b2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpzY2hlZHVsZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnNjaGVkdWxlSW50ZXJuYWxseUZhaWxlZExvYWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmludGVybmFsbHlGYWlsZWRM
b2FkVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6c3RhcnRMb2NhbExvYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5S
ZWRpcmVjdFJlY2VpdmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVz
dW1lUGVuZGluZ1JlcXVlc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OmNyZWF0ZVBpbmdIYW5kbGUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0
d29yay9XZWJMb2FkZXJTdHJhdGVneS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmguCisgICAgICAgIChXZWJL
aXQ6OldlYkxvYWRlclN0cmF0ZWd5Ojp3ZWJSZXNvdXJjZUxvYWRlckZvcklkZW50aWZpZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OndlYlJlc291cmNlTG9h
ZGVyRm9ySWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UGx1Z2luVmlldzo6U3RyZWFtOjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6
OlN0cmVhbTo6Y2FuY2VsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6V2Vi
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6bmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6d2ViTG9hZGVyU3RyYXRl
Z3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp3ZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oOgorCiAyMDE1
LTEyLTAzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEhhdmUgbGF5ZXIgbWVtb3J5IHVzZSBjb25zdWx0IHRoZSBiYWNraW5nIHN0b3JlIGZvcm1hdApJ
bmRleDogU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5Mjk5NCkKKysrIFNvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNyArNTYzLDcgQEAgc2V0
KFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKLSAgICBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcAorICAgIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJh
dGVneS5jcHAKICAgICBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCiAK
ICAgICBXZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyLmNwcApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkyOTk0KQorKysgU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUx
LDcgKzEwNTEsNyBAQAogCQk1MUZBMkQ3NzE1MjEyRTI2MDBDMUJBMEIgLyogV0tCdW5kbGVET01X
aW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFGQTJENzUxNTIxMkUxRTAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0
ZW5zaW9uLmNwcCAqLzsgfTsKIAkJNTFGQUVDM0ExQjA2NTc2MzAwMDlDNEU3IC8qIENoaWxkUHJv
Y2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUZBRUMzNzFCMDY1NzMxMDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZXMuaCAq
LzsgfTsKIAkJNTFGQUVDM0IxQjA2NTc2ODAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUZBRUMzNjFCMDY1NzMxMDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZVJlY2VpdmVy
LmNwcCAqLzsgfTsKLQkJNTFGQjA4RkYxNjM5REUxQTAwRUMzMjRBIC8qIFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcCAqLzsgfTsKKwkJNTFGQjA4RkYxNjM5REUxQTAwRUMzMjRBIC8qIFdlYkxvYWRlclN0cmF0
ZWd5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
QUJGNjU2MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJ
CTUxRkQxOEI1MTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGRDE4QjMxNjUx
RkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgKi87IH07CiAJCTUxRkQx
OEI2MTY1MUZCQUQwMERCRTFDRSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkQxOEI0MTY1MUZCQUQwMERC
RTFDRSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCAqLzsgfTsKIAkJNTI3MkIyOEExNDA2OTg1
RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0
aWNzRGF0YS5jcHAgKi87IH07CkBAIC0zMTk5LDggKzMxOTksOCBAQAogCQk1MUE4QTYxNzE2MjdG
NUJCMDAwRDkwRTkgLyogTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFBOUUxMDgxMzE1Q0QxODAwOUU3MDMxIC8qIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0tleVZhbHVlU3RvcmFn
ZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE5RTEwOTEzMTVD
RDE4MDA5RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyogV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHBhdGggPSBOZXR3b3JrL1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQUJGNjU3
MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg7IHBhdGgg
PSBOZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyogV2ViTG9hZGVyU3RyYXRlZ3ku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViTG9hZGVyU3RyYXRl
Z3kuY3BwOyBwYXRoID0gTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxQUJGNjU3MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJMb2FkZXJT
dHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJMb2FkZXJTdHJh
dGVneS5oOyBwYXRoID0gTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUFDQkI4MTEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4dE1l
bnVQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0TWVu
dVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUNCQjlFMTI3QThGMkMw
MEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51UHJveHlNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFBQ0JCOUYxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJv
eHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb250
ZXh0TWVudVByb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU2Niwx
MSArNTU2NiwxMSBAQAogCQkJCTUxMDVCMEQ0MTYyRjdBN0EwMEUyNzcwOSAvKiBOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTUxMDVCMEQ1MTYyRjdBN0EwMEUyNzcwOSAvKiBO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKIAkJCQk1MUZCMDkwMjE2M0EzQjFDMDBFQzMy
NEEgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovLAorCQkJCTUxQUJG
NjU2MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJMb2FkZXJTdHJhdGVneS5jcHAgKi8sCisJCQkJNTFB
QkY2NTcxNjM5MkYxNTAwMTMyQTdBIC8qIFdlYkxvYWRlclN0cmF0ZWd5LmggKi8sCiAJCQkJNTEw
QUZGQjcxNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmNwcCAqLywKIAkJCQk1
MTBBRkZCODE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQk1
MTBBRkZDRTE2NTQyQ0JEMDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4g
Ki8sCi0JCQkJNTFBQkY2NTYxNjM5MkYxNTAwMTMyQTdBIC8qIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAgKi8sCi0JCQkJNTFBQkY2NTcxNjM5MkYxNTAwMTMyQTdBIC8qIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBOZXR3b3JrOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTk5ODAsNyArOTk4MCw3IEBACiAJCQkJMzc2MDg4MUUxNTA0
MTNFOTAwRkM4MkM3IC8qIFdlYlJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTBBRkZCOTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVy
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRkIwOEZGMTYzOURFMUEw
MEVDMzI0QSAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTFGQjA4RkYxNjM5REUxQTAwRUMzMjRBIC8qIFdlYkxvYWRlclN0cmF0ZWd5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDMzYxRDcyMTkyN0ZBMzYwMDM2QTU5RCAvKiBXZWJTY3JpcHRNZXNz
YWdlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEM0I5NDg0ODExRkY0QjY1MDAwMzJC
MzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDgzMkQ2
MUE5Q0RGOTYwMDhCNERGRSAvKiBXZWJzaXRlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTkyOTk0
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJJ
Y29uRGF0YWJhc2VQcm94eS5oIgorI2luY2x1ZGUgIldlYkxvYWRlclN0cmF0ZWd5LmgiCiAjaW5j
bHVkZSAiV2ViTWVkaWFDYWNoZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJNZWRpYUtleVN0b3Jh
Z2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViTWVtb3J5U2FtcGxlci5oIgpAQCAtNjAsNyArNjEs
NiBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIldlYnNpdGVE
YXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlcy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTTG9jay5oPgpAQCAtMTU0LDggKzE1NCw4IEBAIFdlYlByb2Nlc3M6OldlYlByb2Nl
c3MoKQogICAgICwgbV9jYWNoZU1vZGVsKENhY2hlTW9kZWxEb2N1bWVudFZpZXdlcikKICAgICAs
IG1fZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZChmYWxzZSkKICAgICAsIG1fdGV4dENoZWNrZXJT
dGF0ZSgpCi0gICAgLCBtX2ljb25EYXRhYmFzZVByb3h5KG5ldyBXZWJJY29uRGF0YWJhc2VQcm94
eSh0aGlzKSkKLSAgICAsIG1fd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKG5ldyBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIpCisgICAgLCBtX2ljb25EYXRhYmFzZVByb3h5KCpuZXcgV2ViSWNvbkRh
dGFiYXNlUHJveHkodGhpcykpCisgICAgLCBtX3dlYkxvYWRlclN0cmF0ZWd5KCpuZXcgV2ViTG9h
ZGVyU3RyYXRlZ3kpCiAgICAgLCBtX2Ruc1ByZWZldGNoSHlzdGVyZXJpcyhbdGhpc10oSHlzdGVy
ZXNpc1N0YXRlIHN0YXRlKSB7IGlmIChzdGF0ZSA9PSBIeXN0ZXJlc2lzU3RhdGU6OlN0b3BwZWQp
IG1fZG5zUHJlZmV0Y2hlZEhvc3RzLmNsZWFyKCk7IH0pCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgLCBtX3BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcihQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6OmNyZWF0ZSgpKQpAQCAtMjYzLDcgKzI2Myw3IEBAIHZv
aWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2UKICAgICAgICAgc3VwcGxlbWVu
dC0+aW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIAogI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCi0g
ICAgbV9pY29uRGF0YWJhc2VQcm94eS0+c2V0RW5hYmxlZChwYXJhbWV0ZXJzLmljb25EYXRhYmFz
ZUVuYWJsZWQpOworICAgIG1faWNvbkRhdGFiYXNlUHJveHkuc2V0RW5hYmxlZChwYXJhbWV0ZXJz
Lmljb25EYXRhYmFzZUVuYWJsZWQpOwogI2VuZGlmCiAKICAgICBpZiAoIXBhcmFtZXRlcnMuYXBw
bGljYXRpb25DYWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC05OTksMTIgKzk5OSwxMiBAQCB2
b2lkIFdlYlByb2Nlc3M6Om5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvCiAKICAgICBtX25ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbiA9IG51bGxwdHI7CiAgICAgCi0gICAgbV93ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXItPm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpOworICAgIG1fd2ViTG9hZGVyU3RyYXRl
Z3kubmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CiB9CiAKLVdlYlJlc291cmNlTG9hZFNjaGVkdWxl
ciYgV2ViUHJvY2Vzczo6d2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKK1dlYkxvYWRlclN0cmF0
ZWd5JiBXZWJQcm9jZXNzOjp3ZWJMb2FkZXJTdHJhdGVneSgpCiB7Ci0gICAgcmV0dXJuICptX3dl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjsKKyAgICByZXR1cm4gbV93ZWJMb2FkZXJTdHJhdGVneTsK
IH0KIAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDE5Mjk5NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMCArNzgsMTAg
QEAgY2xhc3MgVXNlckRhdGE7CiBjbGFzcyBXZWJDb25uZWN0aW9uVG9VSVByb2Nlc3M7CiBjbGFz
cyBXZWJGcmFtZTsKIGNsYXNzIFdlYkljb25EYXRhYmFzZVByb3h5OworY2xhc3MgV2ViTG9hZGVy
U3RyYXRlZ3k7CiBjbGFzcyBXZWJQYWdlOwogY2xhc3MgV2ViUGFnZUdyb3VwUHJveHk7CiBjbGFz
cyBXZWJQcm9jZXNzU3VwcGxlbWVudDsKLWNsYXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsK
IHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdlYlBhZ2VHcm91cERh
dGE7CiBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXNTdG9yZTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBwdWJs
aWM6CiAKICAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qIG5ldHdvcmtDb25uZWN0aW9uKCk7
CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQoTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKik7Ci0gICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiB3ZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKTsKKyAgICBXZWJMb2FkZXJTdHJhdGVneSYgd2ViTG9hZGVyU3RyYXRlZ3ko
KTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogICAgIHZvaWQgd2ViVG9EYXRhYmFz
ZVByb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbiop
OwpAQCAtMzMwLDExICszMzAsMTEgQEAgcHJpdmF0ZToKIAogICAgIFRleHRDaGVja2VyU3RhdGUg
bV90ZXh0Q2hlY2tlclN0YXRlOwogCi0gICAgV2ViSWNvbkRhdGFiYXNlUHJveHkqIG1faWNvbkRh
dGFiYXNlUHJveHk7CisgICAgV2ViSWNvbkRhdGFiYXNlUHJveHkmIG1faWNvbkRhdGFiYXNlUHJv
eHk7CiAKICAgICB2b2lkIGVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIFJl
ZlB0cjxOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24+IG1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
OwotICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlciogbV93ZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI7CisgICAgV2ViTG9hZGVyU3RyYXRlZ3kmIG1fd2ViTG9hZGVyU3RyYXRlZ3k7CiAgICAgSGFz
aFNldDxTdHJpbmc+IG1fZG5zUHJlZmV0Y2hlZEhvc3RzOwogICAgIFdlYkNvcmU6Okh5c3RlcmVz
aXNBY3Rpdml0eSBtX2Ruc1ByZWZldGNoSHlzdGVyZXJpczsKIApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDE5Mjk5NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJMb2FkZXJTdHJhdGVneS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9DYWNoZWRSZXNvdXJjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4K
QEAgLTU0LDcgKzU0LDcgQEAgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjp+TmV0d29ya1Byb2Nl
cwogdm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlJl
c291cmNlTG9hZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgaWYgKFdlYlJl
c291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxvYWRlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLndlYlJlc291cmNlTG9hZGVyRm9ySWRlbnRpZmll
cihkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKSkpCisgICAgICAgIGlmIChXZWJSZXNvdXJjZUxvYWRl
ciogd2ViUmVzb3VyY2VMb2FkZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJMb2FkZXJT
dHJhdGVneSgpLndlYlJlc291cmNlTG9hZGVyRm9ySWRlbnRpZmllcihkZWNvZGVyLmRlc3RpbmF0
aW9uSUQoKSkpCiAgICAgICAgICAgICB3ZWJSZXNvdXJjZUxvYWRlci0+ZGlkUmVjZWl2ZVdlYlJl
c291cmNlTG9hZGVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJM
b2FkZXJTdHJhdGVneS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmNwcAkocmV2aXNpb24gMTkyOTk1KQkoZnJvbSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcDoxOTI5OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9h
ZGVyU3RyYXRlZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5oIgorCisjaW5jbHVkZSAiSGFuZ0RldGVjdGlvbkRpc2FibGVyLmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2Vy
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViRXJy
b3JzLmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNs
aWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldlYlJlc291
cmNlTG9hZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVkUmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1TdHJhdGVnaWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWZlcnJlclBv
bGljeS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1N1YnJlc291cmNlTG9hZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkK
KyAgICA6IG1faW50ZXJuYWxseUZhaWxlZExvYWRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmludGVybmFsbHlGYWlsZWRMb2FkVGltZXJGaXJl
ZCkKK3sKK30KKworV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+V2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkKK3sKK30KKworUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OmxvYWRSZXNvdXJjZShGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBs
b2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwgcmVxdWVz
dCwgb3B0aW9ucyk7CisgICAgaWYgKGxvYWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRl
ci5nZXQoKSwgcmVzb3VyY2UsIGZyYW1lLT5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpID09
IFJlZmVycmVyUG9saWN5RGVmYXVsdCk7CisgICAgcmV0dXJuIGxvYWRlcjsKK30KKworUmVmUHRy
PE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlUGx1Z2luU3RyZWFtTG9hZChGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7CisgICAg
aWYgKGxvYWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSwgMCwgZnJhbWUt
PmRvY3VtZW50KCktPnJlZmVycmVyUG9saWN5KCkgPT0gUmVmZXJyZXJQb2xpY3lEZWZhdWx0KTsK
KyAgICByZXR1cm4gbG9hZGVyOworfQorCitzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyBtYXhpbXVtQnVmZmVyaW5nVGltZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAg
aWYgKCFyZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIDBfbXM7CisKKyAgICBzd2l0Y2ggKHJlc291
cmNlLT50eXBlKCkpIHsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0Ogor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0ZvbnRSZXNvdXJjZToKKyNlbmRpZgorICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHM6Om1heCgpOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2U6CisgICAgICAgIHJldHVybiA1MDBfbXM7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6TWFpblJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6CisjaWYgRU5BQkxF
KExJTktfUFJFRkVUQ0gpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgor
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZToKKyNlbmRpZgorI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNv
dXJjZToKKyNlbmRpZgorI2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OlhTTFN0eWxlU2hlZXQ6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIDBfbXM7CisgICAgfQorCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDBfbXM7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291
cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgc2hvdWxkQ2xlYXJSZWZl
cnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2VMb2FkZXIp
OworCisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2Fk
ZXItPmlkZW50aWZpZXIoKTsKKyAgICBBU1NFUlQoaWRlbnRpZmllcik7CisKKyNpZiBFTkFCTEUo
V0VCX0FSQ0hJVkUpIHx8IEVOQUJMRShNSFRNTCkKKyAgICAvLyBJZiB0aGUgRG9jdW1lbnRMb2Fk
ZXIgc2NoZWR1bGVzIHRoaXMgYXMgYW4gYXJjaGl2ZSByZXNvdXJjZSBsb2FkLAorICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkIHJlbWVtYmVyIHRoZSBSZXNvdXJjZUxvYWRlciBpbiBvdXIgcmVjb3JkcyBi
dXQgbm90IHNjaGVkdWxlIGl0IGluIHRoZSBOZXR3b3JrUHJvY2Vzcy4KKyAgICBpZiAocmVzb3Vy
Y2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnNjaGVkdWxlQXJjaGl2ZUxvYWQocmVzb3VyY2VM
b2FkZXIsIHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCkpKSB7CisgICAgICAgIExPRyhOZXR3b3Jr
U2NoZWR1bGluZywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVk
dWxlTG9hZCwgdXJsICclcycgd2lsbCBiZSBoYW5kbGVkIGFzIGFuIGFyY2hpdmUgcmVzb3VyY2Uu
IiwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBtX3dlYlJlc291cmNlTG9hZGVycy5zZXQoaWRlbnRpZmllciwgV2ViUmVzb3VyY2VMb2FkZXI6
OmNyZWF0ZShyZXNvdXJjZUxvYWRlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCktPm1heWJlTG9hZFJlc291cmNlKHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxv
YWRlci0+cmVxdWVzdCgpLCByZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgeworICAg
ICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwgYmUgbG9hZGVkIGZyb20gYXBw
bGljYXRpb24gY2FjaGUuIiwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBtX3dlYlJlc291cmNlTG9hZGVycy5zZXQoaWRlbnRpZmllciwgV2Vi
UmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXNvdXJjZUxvYWRlcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkucHJvdG9j
b2xJc0RhdGEoKSkgeworICAgICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2Vz
cykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwg
YmUgbG9hZGVkIGFzIGRhdGEuIiwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBzdGFydExvY2FsTG9hZCgqcmVzb3VyY2VMb2FkZXIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAgaWYgKHJlc291
cmNlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJcyhRTFByZXZpZXdQcm90b2NvbCgp
KSkgeworICAgICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwgYmUgaGFuZGxl
ZCBhcyBhIFF1aWNrTG9vayByZXNvdXJjZS4iLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHN0YXJ0TG9jYWxMb2FkKCpyZXNvdXJjZUxvYWRl
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIExPRyhOZXR3b3JrU2No
ZWR1bGluZywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxl
TG9hZCwgdXJsICclcycgd2lsbCBiZSBzY2hlZHVsZWQgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3Mg
d2l0aCBwcmlvcml0eSAlZCIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCkucHJpb3Jp
dHkoKSkpOworCisgICAgQ29udGVudFNuaWZmaW5nUG9saWN5IGNvbnRlbnRTbmlmZmluZ1BvbGlj
eSA9IHJlc291cmNlTG9hZGVyLT5zaG91bGRTbmlmZkNvbnRlbnQoKSA/IFNuaWZmQ29udGVudCA6
IERvTm90U25pZmZDb250ZW50OworICAgIFN0b3JlZENyZWRlbnRpYWxzIGFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMgPSByZXNvdXJjZUxvYWRlci0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSA/
IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisK
KyAgICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBXZWJDb3JlIHVzZSBXZWJDb3JlJ3MgIkVt
cHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2YgaGF2aW5nIGEgcHJvcGVyIFdlYkZyYW1l
TG9hZGVyQ2xpZW50LgorICAgIC8vIEVtcHR5RnJhbWVMb2FkZXJDbGllbnQgc2hvdWxkbid0IGV4
aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2luZyBhIFdlYkZyYW1lTG9hZGVyQ2xpZW50
LAorICAgIC8vIGJ1dCBpbiB0aGUgbWVhbnRpbWUgd2UgaGF2ZSB0byBtYWtlIHN1cmUgbm90IHRv
IG1pcy1jYXN0LgorICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3ZWJGcmFtZUxvYWRlckNsaWVu
dCA9IHRvV2ViRnJhbWVMb2FkZXJDbGllbnQocmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCkt
PmNsaWVudCgpKTsKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3ZWJGcmFtZUxvYWRlckNsaWVu
dCA/IHdlYkZyYW1lTG9hZGVyQ2xpZW50LT53ZWJGcmFtZSgpIDogMDsKKyAgICBXZWJQYWdlKiB3
ZWJQYWdlID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+cGFnZSgpIDogMDsKKworICAgIE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIGxvYWRQYXJhbWV0ZXJzOworICAgIGxvYWRQYXJhbWV0ZXJz
LmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9
IHdlYlBhZ2UgPyB3ZWJQYWdlLT5wYWdlSUQoKSA6IDA7CisgICAgbG9hZFBhcmFtZXRlcnMud2Vi
RnJhbWVJRCA9IHdlYkZyYW1lID8gd2ViRnJhbWUtPmZyYW1lSUQoKSA6IDA7CisgICAgbG9hZFBh
cmFtZXRlcnMuc2Vzc2lvbklEID0gd2ViUGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vz
c2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCk7CisgICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9
IHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0KCk7CisgICAgbG9hZFBhcmFtZXRlcnMuY29udGVudFNu
aWZmaW5nUG9saWN5ID0gY29udGVudFNuaWZmaW5nUG9saWN5OworICAgIGxvYWRQYXJhbWV0ZXJz
LmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIC8v
IElmIHRoZXJlIGlzIG5vIFdlYkZyYW1lIHRoZW4gdGhpcyByZXNvdXJjZSBjYW5ub3QgYmUgYXV0
aGVudGljYXRlZCB3aXRoIHRoZSBjbGllbnQuCisgICAgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3Jl
ZGVudGlhbFBvbGljeSA9ICh3ZWJGcmFtZSAmJiB3ZWJQYWdlICYmIHJlc291cmNlTG9hZGVyLT5p
c0FsbG93ZWRUb0Fza1VzZXJGb3JDcmVkZW50aWFscygpKSA/IEFza0NsaWVudEZvckFsbENyZWRl
bnRpYWxzIDogRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFsczsKKyAgICBsb2FkUGFyYW1l
dGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsKKyAgICBsb2FkUGFyYW1ldGVycy5kZWZl
cnNMb2FkaW5nID0gcmVzb3VyY2VMb2FkZXItPmRlZmVyc0xvYWRpbmcoKTsKKyAgICBsb2FkUGFy
YW1ldGVycy5uZWVkc0NlcnRpZmljYXRlSW5mbyA9IHJlc291cmNlTG9hZGVyLT5zaG91bGRJbmNs
dWRlQ2VydGlmaWNhdGVJbmZvKCk7CisgICAgbG9hZFBhcmFtZXRlcnMubWF4aW11bUJ1ZmZlcmlu
Z1RpbWUgPSBtYXhpbXVtQnVmZmVyaW5nVGltZShyZXNvdXJjZSk7CisKKyAgICBBU1NFUlQoKGxv
YWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCAmJiBsb2FkUGFyYW1ldGVycy53ZWJGcmFtZUlEKSB8fCBs
b2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9y
QW55Q3JlZGVudGlhbHMpOworCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpTY2hlZHVsZVJlc291cmNlTG9hZChsb2FkUGFyYW1ldGVycyks
IDApKSB7CisgICAgICAgIC8vIFdlIHByb2JhYmx5IGZhaWxlZCB0byBzY2hlZHVsZSB0aGlzIGxv
YWQgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgYmVjYXVzZSBpdCBoYWQgY3Jhc2hlZC4KKyAgICAg
ICAgLy8gVGhpcyBsb2FkIHdpbGwgbmV2ZXIgc3VjY2VlZCBzbyB3ZSB3aWxsIHNjaGVkdWxlIGl0
IHRvIGZhaWwgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIHNjaGVkdWxlSW50ZXJuYWxseUZhaWxl
ZExvYWQocmVzb3VyY2VMb2FkZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IG1fd2ViUmVzb3VyY2VMb2FkZXJzLnNldChpZGVudGlmaWVyLCBXZWJSZXNvdXJjZUxvYWRlcjo6
Y3JlYXRlKHJlc291cmNlTG9hZGVyKSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZUludGVybmFsbHlGYWlsZWRMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
KiByZXNvdXJjZUxvYWRlcikKK3sKKyAgICBtX2ludGVybmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRl
cnMuYWRkKHJlc291cmNlTG9hZGVyKTsKKyAgICBtX2ludGVybmFsbHlGYWlsZWRMb2FkVGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6aW50
ZXJuYWxseUZhaWxlZExvYWRUaW1lckZpcmVkKCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFJlc291
cmNlTG9hZGVyPj4gaW50ZXJuYWxseUZhaWxlZFJlc291cmNlTG9hZGVyczsKKyAgICBjb3B5VG9W
ZWN0b3IobV9pbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzLCBpbnRlcm5hbGx5RmFpbGVk
UmVzb3VyY2VMb2FkZXJzKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGludGVy
bmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGludGVybmFs
bHlGYWlsZWRSZXNvdXJjZUxvYWRlcnNbaV0tPmRpZEZhaWwoaW50ZXJuYWxFcnJvcihpbnRlcm5h
bGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzW2ldLT51cmwoKSkpOworfQorCit2b2lkIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c3RhcnRMb2NhbExvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIm
IHJlc291cmNlTG9hZGVyKQoreworICAgIHJlc291cmNlTG9hZGVyLnN0YXJ0KCk7CisgICAgbV93
ZWJSZXNvdXJjZUxvYWRlcnMuc2V0KHJlc291cmNlTG9hZGVyLmlkZW50aWZpZXIoKSwgV2ViUmVz
b3VyY2VMb2FkZXI6OmNyZWF0ZSgmcmVzb3VyY2VMb2FkZXIpKTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIp
Cit7CisgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKKyAgICBMT0coTmV0d29ya1NjaGVkdWxp
bmcsICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUsIHVybCAn
JXMnIiwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgaWYgKG1faW50ZXJuYWxseUZhaWxlZFJlc291cmNlTG9hZGVycy5jb250YWlucyhyZXNvdXJj
ZUxvYWRlcikpIHsKKyAgICAgICAgbV9pbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzLnJl
bW92ZShyZXNvdXJjZUxvYWRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50
aWZpZXIoKTsKKyAgICBpZiAoIWlkZW50aWZpZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIgcmVtb3ZpbmcgYSBSZXNvdXJjZUxvYWRlciB0aGF0IGhhcyBu
byBpZGVudGlmaWVyLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJlZlB0
cjxXZWJSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gbV93ZWJSZXNvdXJjZUxvYWRlcnMudGFrZShp
ZGVudGlmaWVyKTsKKyAgICAvLyBMb2FkZXIgbWF5IG5vdCBiZSByZWdpc3RlcmVkIGlmIHdlIGNy
ZWF0ZWQgaXQsIGJ1dCBoYXZlbid0IHNjaGVkdWxlZCB5ZXQgKGEgYnVuZGxlIGNsaWVudCBjYW4g
ZGVjaWRlIHRvIGNhbmNlbCBzdWNoIHJlcXVlc3QgdmlhIHdpbGxTZW5kUmVxdWVzdCkuCisgICAg
aWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbW92ZUxvYWRJZGVudGlmaWVyKGlkZW50aWZp
ZXIpLCAwKTsKKworICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIFdlYlJlc291cmNlTG9h
ZGVyIG1pZ2h0IGJlIGp1c3QgYWJvdXQgdG8gbWVzc2FnZSBiYWNrIHRvIHRoZSBOZXR3b3JrUHJv
Y2VzcyAoZS5nLiBDb250aW51ZVdpbGxTZW5kUmVxdWVzdCkKKyAgICAvLyBidXQgdGhlcmUncyBu
byBwb2ludCBpbiBkb2luZyBzbyBhbnltb3JlLgorICAgIGxvYWRlci0+ZGV0YWNoRnJvbUNvcmVM
b2FkZXIoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldERlZmVyc0xv
YWRpbmcoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBib29sIGRlZmVycykKK3sKKyAg
ICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRlci0+aWRl
bnRpZmllcigpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9u
KCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlNldERlZmVyc0xvYWRpbmcoaWRlbnRpZmllciwgZGVmZXJzKSwgMCk7Cit9CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQo
UmVzb3VyY2VMb2FkZXIqLCBjb25zdCBVUkwmKQoreworICAgIC8vIFdlIGhhbmRsZSBjcm9zcyBv
cmlnaW4gcmVkaXJlY3RzIGVudGlyZWx5IHdpdGhpbiB0aGUgTmV0d29ya1Byb2Nlc3MuCisgICAg
Ly8gV2Ugb3ZlcnJpZGUgdGhpcyBjYWxsIGluIHRoZSBXZWJQcm9jZXNzIHRvIG1ha2UgaXQgYSBu
by1vcC4KK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1Jl
cXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KQoreworICAgIC8vIFRoaXMgb3ZlcnJpZGVzIHRo
ZSBiYXNlIGNsYXNzIHZlcnNpb24uCisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGlu
ZyBhcyB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIG5ldHdvcmsgcHJvY2Vzcy4KK30KKwordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQoreworICAg
IC8vIE5ldHdvcmsgcHJvY2VzcyBkb2VzIGtlZXAgcmVxdWVzdHMgaW4gcGVuZGluZyBzdGF0ZS4K
K30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0
cygpCit7CisgICAgLy8gTmV0d29yayBwcm9jZXNzIGRvZXMga2VlcCByZXF1ZXN0cyBpbiBwZW5k
aW5nIHN0YXRlLgorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bmV0d29ya1By
b2Nlc3NDcmFzaGVkKCkKK3sKKyAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcsIFJlZlB0cjxXZWJS
ZXNvdXJjZUxvYWRlcj4+OjppdGVyYXRvciBlbmQgPSBtX3dlYlJlc291cmNlTG9hZGVycy5lbmQo
KTsKKyAgICBmb3IgKEhhc2hNYXA8dW5zaWduZWQgbG9uZywgUmVmUHRyPFdlYlJlc291cmNlTG9h
ZGVyPj46Oml0ZXJhdG9yIGkgPSBtX3dlYlJlc291cmNlTG9hZGVycy5iZWdpbigpOyBpICE9IGVu
ZDsgKytpKQorICAgICAgICBzY2hlZHVsZUludGVybmFsbHlGYWlsZWRMb2FkKGktPnZhbHVlLmdl
dCgpLT5yZXNvdXJjZUxvYWRlcigpKTsKKworICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJzLmNsZWFy
KCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHJlc291
cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xp
ZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQqPihjb250ZXh0KTsKKyAgICAvLyBGSVhNRTogU29tZSBlbnRpdGllcyBpbiBXZWJDb3Jl
IHVzZSBXZWJDb3JlJ3MgIkVtcHR5RnJhbWVMb2FkZXJDbGllbnQiIGluc3RlYWQgb2YgaGF2aW5n
IGEgcHJvcGVyIFdlYkZyYW1lTG9hZGVyQ2xpZW50LgorICAgIC8vIEVtcHR5RnJhbWVMb2FkZXJD
bGllbnQgc2hvdWxkbid0IGV4aXN0IGFuZCBldmVyeXRoaW5nIHNob3VsZCBiZSB1c2luZyBhIFdl
YkZyYW1lTG9hZGVyQ2xpZW50LAorICAgIC8vIGJ1dCBpbiB0aGUgbWVhbnRpbWUgd2UgaGF2ZSB0
byBtYWtlIHN1cmUgbm90IHRvIG1pcy1jYXN0LgorICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3
ZWJGcmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7
CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFt
ZUxvYWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IDA7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IHdl
YkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IDA7CisKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycyBsb2FkUGFyYW1ldGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVy
ID0gcmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKyAgICBsb2FkUGFyYW1ldGVycy53ZWJQYWdlSUQg
PSB3ZWJQYWdlID8gd2ViUGFnZS0+cGFnZUlEKCkgOiAwOworICAgIGxvYWRQYXJhbWV0ZXJzLndl
YkZyYW1lSUQgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwOworICAgIGxvYWRQ
YXJhbWV0ZXJzLnNlc3Npb25JRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5zZXNzaW9uSUQoKSA6IFNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOworICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3Qg
PSByZXF1ZXN0OworICAgIGxvYWRQYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9IFNu
aWZmQ29udGVudDsKKyAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0g
c3RvcmVkQ3JlZGVudGlhbHM7CisgICAgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBv
bGljeSA9IGNsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxk
Q2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IGNvbnRleHQtPnNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIGRhdGEucmVzaXplKDApOwor
CisgICAgSGFuZ0RldGVjdGlvbkRpc2FibGVyIGhhbmdEZXRlY3Rpb25EaXNhYmxlcjsKKworICAg
IGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVy
cm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CisgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VS
ZXNwb25zZSgpOworICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51cmwoKSk7
CisgICAgfQorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3JlYXRlUGluZ0hh
bmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkKK3sKKyAgICAvLyBJ
dCdzIHBvc3NpYmxlIHRoYXQgY2FsbCB0byBjcmVhdGVQaW5nSGFuZGxlIG1pZ2h0IGJlIG1hZGUg
ZHVyaW5nIGluaXRpYWwgZW1wdHkgRG9jdW1lbnQgY3JlYXRpb24gYmVmb3JlIGEgTmV0d29ya2lu
Z0NvbnRleHQgZXhpc3RzLgorICAgIC8vIEl0IGlzIG5vdCBjbGVhciB0aGF0IHdlIHNob3VsZCBz
ZW5kIHBpbmcgbG9hZHMgZHVyaW5nIHRoYXQgcHJvY2VzcyBhbnl3YXlzLgorICAgIGlmICghbmV0
d29ya2luZ0NvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0Kj4obmV0d29ya2luZ0NvbnRleHQpOworICAgIFdlYkZyYW1lTG9hZGVyQ2xpZW50KiB3ZWJG
cmFtZUxvYWRlckNsaWVudCA9IHdlYkNvbnRleHQtPndlYkZyYW1lTG9hZGVyQ2xpZW50KCk7Cisg
ICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFtZUxv
YWRlckNsaWVudC0+d2ViRnJhbWUoKSA6IG51bGxwdHI7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9
IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBhZ2UoKSA6IG51bGxwdHI7CisgICAgCisgICAgTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7CisgICAgbG9hZFBhcmFtZXRl
cnMucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgbG9hZFBhcmFtZXRlcnMuc2Vzc2lvbklEID0gd2Vi
UGFnZSA/IHdlYlBhZ2UtPnNlc3Npb25JRCgpIDogU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCk7CisgICAgbG9hZFBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dT
dG9yZWRDcmVkZW50aWFsczsKKyAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gbmV0d29ya2luZ0NvbnRleHQtPnNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvYWRQaW5nKGxvYWRQYXJhbWV0ZXJzKSwgMCk7
Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJT
dHJhdGVneS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisjaW5j
bHVkZSAiV2ViTG9hZGVyU3RyYXRlZ3kuaCIKIAogI2luY2x1ZGUgIkhhbmdEZXRlY3Rpb25EaXNh
Ymxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTU5LDE2ICs1OSwxNiBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKLSAgICA6IG1faW50ZXJuYWxs
eUZhaWxlZExvYWRUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OmludGVybmFsbHlGYWlsZWRMb2FkVGltZXJGaXJlZCkKK1dlYkxvYWRlclN0cmF0
ZWd5OjpXZWJMb2FkZXJTdHJhdGVneSgpCisgICAgOiBtX2ludGVybmFsbHlGYWlsZWRMb2FkVGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViTG9hZGVyU3RyYXRlZ3k6OmludGVybmFsbHlG
YWlsZWRMb2FkVGltZXJGaXJlZCkKIHsKIH0KIAotV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjp+
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKK1dlYkxvYWRlclN0cmF0ZWd5Ojp+V2ViTG9hZGVy
U3RyYXRlZ3koKQogewogfQogCi1SZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6bG9hZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
TG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gV2ViTG9h
ZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZShGcmFtZSogZnJhbWUsIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxv
YWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBs
b2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCByZXNvdXJjZSwgcmVxdWVz
dCwgb3B0aW9ucyk7CiAgICAgaWYgKGxvYWRlcikKQEAgLTc2LDcgKzc2LDcgQEAgUmVmUHRyPFN1
YnJlc291cmNlTG9hZGVyPiBXZWJSZXNvdXJjZUxvYQogICAgIHJldHVybiBsb2FkZXI7CiB9CiAK
LVJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqIGZyYW1lLCBOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCitSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IFdlYkxvYWRlclN0cmF0ZWd5
OjpzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqIGZyYW1lLCBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CiB7CiAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBsb2FkZXIgPSBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKGZyYW1lLCBjbGllbnQsIHJlcXVlc3QpOwog
ICAgIGlmIChsb2FkZXIpCkBAIC0xMTksNyArMTE5LDcgQEAgc3RhdGljIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMgbWF4aW11bQogICAgIHJldHVybiAwX21zOwogfQogCi12b2lkIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxv
YWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpCit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5OjpzY2hlZHVsZUxv
YWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKIHsKICAg
ICBBU1NFUlQocmVzb3VyY2VMb2FkZXIpOwogCkBAIC0xMzAsMzMgKzEzMCwzMyBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMCiAgICAgLy8gSWYgdGhlIERvY3VtZW50
TG9hZGVyIHNjaGVkdWxlcyB0aGlzIGFzIGFuIGFyY2hpdmUgcmVzb3VyY2UgbG9hZCwKICAgICAv
LyB0aGVuIHdlIHNob3VsZCByZW1lbWJlciB0aGUgUmVzb3VyY2VMb2FkZXIgaW4gb3VyIHJlY29y
ZHMgYnV0IG5vdCBzY2hlZHVsZSBpdCBpbiB0aGUgTmV0d29ya1Byb2Nlc3MuCiAgICAgaWYgKHJl
c291cmNlTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zY2hlZHVsZUFyY2hpdmVMb2FkKHJlc291
cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpKSkgewotICAgICAgICBMT0coTmV0
d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
Y2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwgYmUgaGFuZGxlZCBhcyBhbiBhcmNoaXZlIHJlc291
cmNlLiIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdlYkxvYWRlclN0cmF0
ZWd5OjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwgYmUgaGFuZGxlZCBhcyBhbiBhcmNoaXZl
IHJlc291cmNlLiIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgbV93ZWJSZXNvdXJjZUxvYWRlcnMuc2V0KGlkZW50aWZpZXIsIFdlYlJlc291
cmNlTG9hZGVyOjpjcmVhdGUocmVzb3VyY2VMb2FkZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNlbmRpZgogCiAgICAgaWYgKHJlc291cmNlTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5h
cHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRSZXNvdXJjZShyZXNvdXJjZUxvYWRlciwg
cmVzb3VyY2VMb2FkZXItPnJlcXVlc3QoKSwgcmVzb3VyY2VMb2FkZXItPnJlcXVlc3QoKS51cmwo
KSkpIHsKLSAgICAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkLCB1cmwgJyVzJyB3aWxsIGJlIGxvYWRl
ZCBmcm9tIGFwcGxpY2F0aW9uIGNhY2hlLiIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlBy
b2Nlc3MpIFdlYkxvYWRlclN0cmF0ZWd5OjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwgYmUg
bG9hZGVkIGZyb20gYXBwbGljYXRpb24gY2FjaGUuIiwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBtX3dlYlJlc291cmNlTG9hZGVycy5zZXQo
aWRlbnRpZmllciwgV2ViUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXNvdXJjZUxvYWRlcikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHJlc291cmNlTG9hZGVyLT5yZXF1ZXN0
KCkudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkgewotICAgICAgICBMT0coTmV0d29ya1NjaGVkdWxp
bmcsICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQs
IHVybCAnJXMnIHdpbGwgYmUgbG9hZGVkIGFzIGRhdGEuIiwgcmVzb3VyY2VMb2FkZXItPnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcs
ICIoV2ViUHJvY2VzcykgV2ViTG9hZGVyU3RyYXRlZ3k6OnNjaGVkdWxlTG9hZCwgdXJsICclcycg
d2lsbCBiZSBsb2FkZWQgYXMgZGF0YS4iLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHN0YXJ0TG9jYWxMb2FkKCpyZXNvdXJjZUxvYWRlcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICBpZiAo
cmVzb3VyY2VMb2FkZXItPnJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzKFFMUHJldmlld1Byb3Rv
Y29sKCkpKSB7Ci0gICAgICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihXZWJQcm9jZXNzKSBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCwgdXJsICclcycgd2lsbCBiZSBo
YW5kbGVkIGFzIGEgUXVpY2tMb29rIHJlc291cmNlLiIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAi
KFdlYlByb2Nlc3MpIFdlYkxvYWRlclN0cmF0ZWd5OjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdp
bGwgYmUgaGFuZGxlZCBhcyBhIFF1aWNrTG9vayByZXNvdXJjZS4iLCByZXNvdXJjZUxvYWRlci0+
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHN0YXJ0TG9jYWxMb2FkKCpy
ZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIExP
RyhOZXR3b3JrU2NoZWR1bGluZywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlTG9hZCwgdXJsICclcycgd2lsbCBiZSBzY2hlZHVsZWQgd2l0aCB0aGUgTmV0
d29ya1Byb2Nlc3Mgd2l0aCBwcmlvcml0eSAlZCIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlTG9hZGVyLT5yZXF1
ZXN0KCkucHJpb3JpdHkoKSkpOworICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihXZWJQcm9j
ZXNzKSBXZWJMb2FkZXJTdHJhdGVneTo6c2NoZWR1bGVMb2FkLCB1cmwgJyVzJyB3aWxsIGJlIHNj
aGVkdWxlZCB3aXRoIHRoZSBOZXR3b3JrUHJvY2VzcyB3aXRoIHByaW9yaXR5ICVkIiwgcmVzb3Vy
Y2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4o
cmVzb3VyY2VMb2FkZXItPnJlcXVlc3QoKS5wcmlvcml0eSgpKSk7CiAKICAgICBDb250ZW50U25p
ZmZpbmdQb2xpY3kgY29udGVudFNuaWZmaW5nUG9saWN5ID0gcmVzb3VyY2VMb2FkZXItPnNob3Vs
ZFNuaWZmQ29udGVudCgpID8gU25pZmZDb250ZW50IDogRG9Ob3RTbmlmZkNvbnRlbnQ7CiAgICAg
U3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHJlc291cmNlTG9hZGVy
LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6
IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKQEAgLTE5NSwxMyArMTk1LDEzIEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUwKICAgICBtX3dlYlJlc291cmNlTG9h
ZGVycy5zZXQoaWRlbnRpZmllciwgV2ViUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXNvdXJjZUxv
YWRlcikpOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVJbnRl
cm5hbGx5RmFpbGVkTG9hZChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIp
Cit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5OjpzY2hlZHVsZUludGVybmFsbHlGYWlsZWRMb2FkKFdl
YkNvcmU6OlJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKIHsKICAgICBtX2ludGVybmFs
bHlGYWlsZWRSZXNvdXJjZUxvYWRlcnMuYWRkKHJlc291cmNlTG9hZGVyKTsKICAgICBtX2ludGVy
bmFsbHlGYWlsZWRMb2FkVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6aW50ZXJuYWxseUZhaWxlZExvYWRUaW1lckZpcmVkKCkKK3ZvaWQg
V2ViTG9hZGVyU3RyYXRlZ3k6OmludGVybmFsbHlGYWlsZWRMb2FkVGltZXJGaXJlZCgpCiB7CiAg
ICAgVmVjdG9yPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IGludGVybmFsbHlGYWlsZWRSZXNvdXJj
ZUxvYWRlcnM7CiAgICAgY29weVRvVmVjdG9yKG1faW50ZXJuYWxseUZhaWxlZFJlc291cmNlTG9h
ZGVycywgaW50ZXJuYWxseUZhaWxlZFJlc291cmNlTG9hZGVycyk7CkBAIC0yMTAsMTYgKzIxMCwx
NiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6aW50ZXJuYWxsCiAgICAgICAgIGlu
dGVybmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRlcnNbaV0tPmRpZEZhaWwoaW50ZXJuYWxFcnJvcihp
bnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzW2ldLT51cmwoKSkpOwogfQogCi12b2lkIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3RhcnRMb2NhbExvYWQoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXImIHJlc291cmNlTG9hZGVyKQordm9pZCBXZWJMb2FkZXJTdHJhdGVneTo6c3RhcnRMb2Nh
bExvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQogewogICAgIHJl
c291cmNlTG9hZGVyLnN0YXJ0KCk7CiAgICAgbV93ZWJSZXNvdXJjZUxvYWRlcnMuc2V0KHJlc291
cmNlTG9hZGVyLmlkZW50aWZpZXIoKSwgV2ViUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSgmcmVzb3Vy
Y2VMb2FkZXIpKTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5Ojpy
ZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIEFTU0VSVChyZXNv
dXJjZUxvYWRlcik7Ci0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlLCB1cmwgJyVzJyIsIHJlc291cmNlTG9hZGVy
LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTmV0d29ya1NjaGVkdWxp
bmcsICIoV2ViUHJvY2VzcykgV2ViTG9hZGVyU3RyYXRlZ3k6OnJlbW92ZSwgdXJsICclcyciLCBy
ZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAo
bV9pbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzLmNvbnRhaW5zKHJlc291cmNlTG9hZGVy
KSkgewogICAgICAgICBtX2ludGVybmFsbHlGYWlsZWRSZXNvdXJjZUxvYWRlcnMucmVtb3ZlKHJl
c291cmNlTG9hZGVyKTsKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6cmVtb3ZlKFJlCiAgICAgCiAgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsKICAgICBpZiAoIWlkZW50aWZp
ZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgcmVtb3Zp
bmcgYSBSZXNvdXJjZUxvYWRlciB0aGF0IGhhcyBubyBpZGVudGlmaWVyLiIpOworICAgICAgICBM
T0dfRVJST1IoIldlYkxvYWRlclN0cmF0ZWd5IHJlbW92aW5nIGEgUmVzb3VyY2VMb2FkZXIgdGhh
dCBoYXMgbm8gaWRlbnRpZmllci4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAg
LTI0NCwzNSArMjQ0LDM1IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUo
UmUKICAgICBsb2FkZXItPmRldGFjaEZyb21Db3JlTG9hZGVyKCk7CiB9CiAKLXZvaWQgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiByZXNv
dXJjZUxvYWRlciwgYm9vbCBkZWZlcnMpCit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5OjpzZXREZWZl
cnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgYm9vbCBkZWZlcnMpCiB7
CiAgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXIt
PmlkZW50aWZpZXIoKTsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVj
dGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpTZXREZWZlcnNMb2FkaW5nKGlkZW50aWZpZXIsIGRlZmVycyksIDApOwogfQog
Ci12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2Vp
dmVkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgVVJMJikKK3ZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6
OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciosIGNvbnN0IFVSTCYp
CiB7CiAgICAgLy8gV2UgaGFuZGxlIGNyb3NzIG9yaWdpbiByZWRpcmVjdHMgZW50aXJlbHkgd2l0
aGluIHRoZSBOZXR3b3JrUHJvY2Vzcy4KICAgICAvLyBXZSBvdmVycmlkZSB0aGlzIGNhbGwgaW4g
dGhlIFdlYlByb2Nlc3MgdG8gbWFrZSBpdCBhIG5vLW9wLgogfQogCi12b2lkIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkp
Cit2b2lkIFdlYkxvYWRlclN0cmF0ZWd5OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxv
YWRQcmlvcml0eSkKIHsKICAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgYmFzZSBjbGFzcyB2ZXJz
aW9uLgogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYXMgdGhpcyBpcyBoYW5k
bGVkIGJ5IHRoZSBuZXR3b3JrIHByb2Nlc3MuCiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKK3ZvaWQgV2ViTG9hZGVyU3RyYXRlZ3k6
OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQogewogICAgIC8vIE5ldHdvcmsgcHJvY2VzcyBkb2Vz
IGtlZXAgcmVxdWVzdHMgaW4gcGVuZGluZyBzdGF0ZS4KIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpCit2b2lkIFdlYkxvYWRlclN0cmF0
ZWd5OjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQogewogICAgIC8vIE5ldHdvcmsgcHJvY2VzcyBk
b2VzIGtlZXAgcmVxdWVzdHMgaW4gcGVuZGluZyBzdGF0ZS4KIH0KIAotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCit2b2lkIFdlYkxvYWRlclN0
cmF0ZWd5OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQogewogICAgIEhhc2hNYXA8dW5zaWduZWQg
bG9uZywgUmVmUHRyPFdlYlJlc291cmNlTG9hZGVyPj46Oml0ZXJhdG9yIGVuZCA9IG1fd2ViUmVz
b3VyY2VMb2FkZXJzLmVuZCgpOwogICAgIGZvciAoSGFzaE1hcDx1bnNpZ25lZCBsb25nLCBSZWZQ
dHI8V2ViUmVzb3VyY2VMb2FkZXI+Pjo6aXRlcmF0b3IgaSA9IG1fd2ViUmVzb3VyY2VMb2FkZXJz
LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCkBAIC0yODEsNyArMjgxLDcgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcgogICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJzLmNs
ZWFyKCk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHJl
c291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3Rv
cmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3kg
Y2xpZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFdlYkxvYWRlclN0cmF0
ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVu
dENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7
CiAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCogd2ViQ29udGV4dCA9IHN0YXRpY19jYXN0
PFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqPihjb250ZXh0KTsKICAgICAvLyBGSVhNRTogU29t
ZSBlbnRpdGllcyBpbiBXZWJDb3JlIHVzZSBXZWJDb3JlJ3MgIkVtcHR5RnJhbWVMb2FkZXJDbGll
bnQiIGluc3RlYWQgb2YgaGF2aW5nIGEgcHJvcGVyIFdlYkZyYW1lTG9hZGVyQ2xpZW50LgpAQCAt
MzEyLDcgKzMxMiw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3UK
ICAgICB9CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcmVhdGVQaW5nSGFu
ZGxlKE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dCwgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQordm9pZCBXZWJMb2Fk
ZXJTdHJhdGVneTo6Y3JlYXRlUGluZ0hhbmRsZShOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2lu
Z0NvbnRleHQsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSkKIHsKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgY2FsbCB0byBjcmVhdGVQ
aW5nSGFuZGxlIG1pZ2h0IGJlIG1hZGUgZHVyaW5nIGluaXRpYWwgZW1wdHkgRG9jdW1lbnQgY3Jl
YXRpb24gYmVmb3JlIGEgTmV0d29ya2luZ0NvbnRleHQgZXhpc3RzLgogICAgIC8vIEl0IGlzIG5v
dCBjbGVhciB0aGF0IHdlIHNob3VsZCBzZW5kIHBpbmcgbG9hZHMgZHVyaW5nIHRoYXQgcHJvY2Vz
cyBhbnl3YXlzLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxv
YWRlclN0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHJldmlzaW9uIDE5Mjk5NSkJKGZyb20gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oOjE5
Mjk5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJh
dGVneS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjZGVmaW5lIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcl9oCisKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvTG9hZGVyU3RyYXRlZ3kuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOwor
Y2xhc3MgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwordHlwZWRlZiB1aW50NjRfdCBSZXNvdXJj
ZUxvYWRJZGVudGlmaWVyOworCitjbGFzcyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJs
aWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIHZpcnR1YWwgfldlYlJlc291
cmNlTG9hZFNjaGVkdWxlcigpOworICAgIAorICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OlN1
YnJlc291cmNlTG9hZGVyPiBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlTG9hZGVyT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0Kiwg
dW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q2xpZW50
Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92ZXJyaWRlOworCisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciopIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgYm9v
bCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZl
ZChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVkaXJlY3RV
UkwpIG92ZXJyaWRlOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpIG92ZXJyaWRl
OworCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4
dCosIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UpIG92ZXJyaWRlOworCisgICAgV2ViUmVzb3VyY2VMb2FkZXIqIHdlYlJlc291cmNlTG9h
ZGVyRm9ySWRlbnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0
IHsgcmV0dXJuIG1fd2ViUmVzb3VyY2VMb2FkZXJzLmdldChpZGVudGlmaWVyKTsgfQorICAgIFJl
ZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5T
dHJlYW1Mb2FkKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXJDbGllbnQqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIHZv
aWQgbmV0d29ya1Byb2Nlc3NDcmFzaGVkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzY2hlZHVs
ZUxvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSos
IGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisgICAgdm9p
ZCBzY2hlZHVsZUludGVybmFsbHlGYWlsZWRMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKik7
CisgICAgdm9pZCBpbnRlcm5hbGx5RmFpbGVkTG9hZFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHN0
YXJ0TG9jYWxMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyJik7CisKKyAgICBIYXNoU2V0PFJl
ZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcj4+IG1faW50ZXJuYWxseUZhaWxlZFJlc291cmNl
TG9hZGVyczsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI+IG1f
aW50ZXJuYWxseUZhaWxlZExvYWRUaW1lcjsKKyAgICAKKyAgICBIYXNoTWFwPHVuc2lnbmVkIGxv
bmcsIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4+IG1fd2ViUmVzb3VyY2VMb2FkZXJzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXJfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRl
clN0cmF0ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Myw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAotI2RlZmluZSBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXJfaAorI2lmbmRlZiBXZWJMb2FkZXJTdHJhdGVneV9oCisjZGVmaW5lIFdlYkxv
YWRlclN0cmF0ZWd5X2gKIAogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9Mb2FkZXJTdHJhdGVneS5oPgpAQCAtMzUsMjggKzM1LDI3IEBACiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOwotY2xhc3MgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOwogdHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyOwogCi1jbGFzcyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29y
ZTo6TG9hZGVyU3RyYXRlZ3kgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgV2ViTG9hZGVy
U3RyYXRlZ3kgOiBwdWJsaWMgV2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdlYkxvYWRlclN0cmF0ZWd5KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAgdmlydHVhbCB+
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgV2ViTG9hZGVyU3RyYXRlZ3koKTsKKyAg
ICB+V2ViTG9hZGVyU3RyYXRlZ3koKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIFJlZlB0
cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZFJlc291cmNlKFdlYkNvcmU6OkZyYW1l
KiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXZWJDb3JlOjpOZXR3b3Jr
aW5nQ29udGV4dCosIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdl
YkNvcmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3ksIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSBvdmVycmlkZTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRSZXNvdXJjZShXZWJD
b3JlOjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJPcHRpb25zJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdv
cmtpbmdDb250ZXh0KiwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywg
V2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYs
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciopIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyKiwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2lu
UmVkaXJlY3RSZWNlaXZlZChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6
OlVSTCYgcmVkaXJlY3RVUkwpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJl
c291cmNlTG9hZGVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKFdlYkNv
cmU6OlJlc291cmNlTG9hZGVyKiwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjcm9zc09yaWdp
blJlZGlyZWN0UmVjZWl2ZWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBjb25zdCBXZWJDb3Jl
OjpVUkwmIHJlZGlyZWN0VVJMKSBvdmVycmlkZTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2Vy
dmVQZW5kaW5nUmVxdWVzdHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVBy
aW9yaXR5KSBvdmVycmlkZTsKKyAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6
OlJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN1c3Bl
bmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1
ZXN0cygpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVBpbmdIYW5kbGUoV2Vi
Q29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNyZWF0ZVBp
bmdIYW5kbGUoV2ViQ29yZTo6TmV0d29ya2luZ0NvbnRleHQqLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSBvdmVycmlkZTsKIAogICAg
IFdlYlJlc291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxvYWRlckZvcklkZW50aWZpZXIoUmVzb3Vy
Y2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdCB7IHJldHVybiBtX3dlYlJlc291cmNl
TG9hZGVycy5nZXQoaWRlbnRpZmllcik7IH0KICAgICBSZWZQdHI8V2ViQ29yZTo6TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CkBAIC03MCwxMSArNjksMTEgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHN0YXJ0TG9jYWxMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyJik7CiAKICAgICBI
YXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcj4+IG1faW50ZXJuYWxseUZhaWxl
ZFJlc291cmNlTG9hZGVyczsKLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI+IG1faW50ZXJuYWxseUZhaWxlZExvYWRUaW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxX
ZWJMb2FkZXJTdHJhdGVneT4gbV9pbnRlcm5hbGx5RmFpbGVkTG9hZFRpbWVyOwogICAgIAogICAg
IEhhc2hNYXA8dW5zaWduZWQgbG9uZywgUmVmUHRyPFdlYlJlc291cmNlTG9hZGVyPj4gbV93ZWJS
ZXNvdXJjZUxvYWRlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8v
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwCShyZXZpc2lvbiAxOTI5OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwzMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKLQotI2luY2x1ZGUgIkhhbmdEZXRlY3Rp
b25EaXNhYmxlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCIK
LSNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgotI2luY2x1ZGUgIldlYkVycm9ycy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0j
aW5jbHVkZSAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
QXBwbGljYXRpb25DYWNoZUhvc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlZFJlc291cmNl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnRMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3RyYXRlZ2llcy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVmZXJyZXJQb2xpY3kuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdWJyZXNvdXJjZUxvYWRlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Oldl
YlJlc291cmNlTG9hZFNjaGVkdWxlcigpCi0gICAgOiBtX2ludGVybmFsbHlGYWlsZWRMb2FkVGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjppbnRl
cm5hbGx5RmFpbGVkTG9hZFRpbWVyRmlyZWQpCi17Ci19Ci0KLVdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6fldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpCi17Ci19Ci0KLVJlZlB0cjxTdWJyZXNv
dXJjZUxvYWRlcj4gV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpsb2FkUmVzb3VyY2UoRnJhbWUq
IGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJl
ZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0
ZShmcmFtZSwgcmVzb3VyY2UsIHJlcXVlc3QsIG9wdGlvbnMpOwotICAgIGlmIChsb2FkZXIpCi0g
ICAgICAgIHNjaGVkdWxlTG9hZChsb2FkZXIuZ2V0KCksIHJlc291cmNlLCBmcmFtZS0+ZG9jdW1l
bnQoKS0+cmVmZXJyZXJQb2xpY3koKSA9PSBSZWZlcnJlclBvbGljeURlZmF1bHQpOwotICAgIHJl
dHVybiBsb2FkZXI7Ci19Ci0KLVJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqIGZy
YW1lLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyPiBsb2FkZXIgPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKGZyYW1l
LCBjbGllbnQsIHJlcXVlc3QpOwotICAgIGlmIChsb2FkZXIpCi0gICAgICAgIHNjaGVkdWxlTG9h
ZChsb2FkZXIuZ2V0KCksIDAsIGZyYW1lLT5kb2N1bWVudCgpLT5yZWZlcnJlclBvbGljeSgpID09
IFJlZmVycmVyUG9saWN5RGVmYXVsdCk7Ci0gICAgcmV0dXJuIGxvYWRlcjsKLX0KLQotc3RhdGlj
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbWF4aW11bUJ1ZmZlcmluZ1RpbWUoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlKQotewotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiAw
X21zOwotCi0gICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdGb250
UmVzb3VyY2U6Ci0jZW5kaWYKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKTsKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgotICAgICAgICByZXR1cm4gNTAwX21z
OwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKLSAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpSYXdSZXNvdXJjZToKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1
bWVudFJlc291cmNlOgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3Vi
cmVzb3VyY2U6Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6Ci0jZW5kaWYKLSNpZiBFTkFCTEUoWFNMVCkK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotI2VuZGlmCi0gICAgICAg
IHJldHVybiAwX21zOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwX21zOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVM
b2FkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCi17Ci0g
ICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKLQotICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIg
aWRlbnRpZmllciA9IHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAgQVNTRVJUKGlk
ZW50aWZpZXIpOwotCi0jaWYgRU5BQkxFKFdFQl9BUkNISVZFKSB8fCBFTkFCTEUoTUhUTUwpCi0g
ICAgLy8gSWYgdGhlIERvY3VtZW50TG9hZGVyIHNjaGVkdWxlcyB0aGlzIGFzIGFuIGFyY2hpdmUg
cmVzb3VyY2UgbG9hZCwKLSAgICAvLyB0aGVuIHdlIHNob3VsZCByZW1lbWJlciB0aGUgUmVzb3Vy
Y2VMb2FkZXIgaW4gb3VyIHJlY29yZHMgYnV0IG5vdCBzY2hlZHVsZSBpdCBpbiB0aGUgTmV0d29y
a1Byb2Nlc3MuCi0gICAgaWYgKHJlc291cmNlTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zY2hl
ZHVsZUFyY2hpdmVMb2FkKHJlc291cmNlTG9hZGVyLCByZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgp
KSkgewotICAgICAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwgYmUgaGFuZGxl
ZCBhcyBhbiBhcmNoaXZlIHJlc291cmNlLiIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV93ZWJSZXNvdXJjZUxvYWRlcnMuc2V0KGlkZW50
aWZpZXIsIFdlYlJlc291cmNlTG9hZGVyOjpjcmVhdGUocmVzb3VyY2VMb2FkZXIpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKHJlc291cmNlTG9hZGVyLT5kb2N1
bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRSZXNvdXJjZShy
ZXNvdXJjZUxvYWRlciwgcmVzb3VyY2VMb2FkZXItPnJlcXVlc3QoKSwgcmVzb3VyY2VMb2FkZXIt
PnJlcXVlc3QoKS51cmwoKSkpIHsKLSAgICAgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdl
YlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkLCB1cmwgJyVz
JyB3aWxsIGJlIGxvYWRlZCBmcm9tIGFwcGxpY2F0aW9uIGNhY2hlLiIsIHJlc291cmNlTG9hZGVy
LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV93ZWJSZXNvdXJjZUxv
YWRlcnMuc2V0KGlkZW50aWZpZXIsIFdlYlJlc291cmNlTG9hZGVyOjpjcmVhdGUocmVzb3VyY2VM
b2FkZXIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyZXNvdXJjZUxvYWRl
ci0+cmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNEYXRhKCkpIHsKLSAgICAgICAgTE9HKE5ldHdv
cmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2No
ZWR1bGVMb2FkLCB1cmwgJyVzJyB3aWxsIGJlIGxvYWRlZCBhcyBkYXRhLiIsIHJlc291cmNlTG9h
ZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgc3RhcnRMb2NhbExv
YWQoKnJlc291cmNlTG9hZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFVTRShR
VUlDS19MT09LKQotICAgIGlmIChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpLnByb3Rv
Y29sSXMoUUxQcmV2aWV3UHJvdG9jb2woKSkpIHsKLSAgICAgICAgTE9HKE5ldHdvcmtTY2hlZHVs
aW5nLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2Fk
LCB1cmwgJyVzJyB3aWxsIGJlIGhhbmRsZWQgYXMgYSBRdWlja0xvb2sgcmVzb3VyY2UuIiwgcmVz
b3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBzdGFy
dExvY2FsTG9hZCgqcmVzb3VyY2VMb2FkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHdpbGwgYmUgc2NoZWR1bGVk
IHdpdGggdGhlIE5ldHdvcmtQcm9jZXNzIHdpdGggcHJpb3JpdHkgJWQiLCByZXNvdXJjZUxvYWRl
ci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJj
ZUxvYWRlci0+cmVxdWVzdCgpLnByaW9yaXR5KCkpKTsKLQotICAgIENvbnRlbnRTbmlmZmluZ1Bv
bGljeSBjb250ZW50U25pZmZpbmdQb2xpY3kgPSByZXNvdXJjZUxvYWRlci0+c2hvdWxkU25pZmZD
b250ZW50KCkgPyBTbmlmZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29udGVudDsKLSAgICBTdG9yZWRD
cmVkZW50aWFscyBhbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gcmVzb3VyY2VMb2FkZXItPnNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RB
bGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAgLy8gRklYTUU6IFNvbWUgZW50aXRpZXMgaW4g
V2ViQ29yZSB1c2UgV2ViQ29yZSdzICJFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IiBpbnN0ZWFkIG9m
IGhhdmluZyBhIHByb3BlciBXZWJGcmFtZUxvYWRlckNsaWVudC4KLSAgICAvLyBFbXB0eUZyYW1l
TG9hZGVyQ2xpZW50IHNob3VsZG4ndCBleGlzdCBhbmQgZXZlcnl0aGluZyBzaG91bGQgYmUgdXNp
bmcgYSBXZWJGcmFtZUxvYWRlckNsaWVudCwKLSAgICAvLyBidXQgaW4gdGhlIG1lYW50aW1lIHdl
IGhhdmUgdG8gbWFrZSBzdXJlIG5vdCB0byBtaXMtY2FzdC4KLSAgICBXZWJGcmFtZUxvYWRlckNs
aWVudCogd2ViRnJhbWVMb2FkZXJDbGllbnQgPSB0b1dlYkZyYW1lTG9hZGVyQ2xpZW50KHJlc291
cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigpLT5jbGllbnQoKSk7Ci0gICAgV2ViRnJhbWUqIHdlYkZy
YW1lID0gd2ViRnJhbWVMb2FkZXJDbGllbnQgPyB3ZWJGcmFtZUxvYWRlckNsaWVudC0+d2ViRnJh
bWUoKSA6IDA7Ci0gICAgV2ViUGFnZSogd2ViUGFnZSA9IHdlYkZyYW1lID8gd2ViRnJhbWUtPnBh
Z2UoKSA6IDA7Ci0KLSAgICBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBsb2FkUGFyYW1l
dGVyczsKLSAgICBsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBs
b2FkUGFyYW1ldGVycy53ZWJQYWdlSUQgPSB3ZWJQYWdlID8gd2ViUGFnZS0+cGFnZUlEKCkgOiAw
OwotICAgIGxvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5m
cmFtZUlEKCkgOiAwOwotICAgIGxvYWRQYXJhbWV0ZXJzLnNlc3Npb25JRCA9IHdlYlBhZ2UgPyB3
ZWJQYWdlLT5zZXNzaW9uSUQoKSA6IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwotICAg
IGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpOwotICAg
IGxvYWRQYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9IGNvbnRlbnRTbmlmZmluZ1Bv
bGljeTsKLSAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gYWxsb3dT
dG9yZWRDcmVkZW50aWFsczsKLSAgICAvLyBJZiB0aGVyZSBpcyBubyBXZWJGcmFtZSB0aGVuIHRo
aXMgcmVzb3VyY2UgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgY2xpZW50LgotICAg
IGxvYWRQYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSAod2ViRnJhbWUgJiYgd2Vi
UGFnZSAmJiByZXNvdXJjZUxvYWRlci0+aXNBbGxvd2VkVG9Bc2tVc2VyRm9yQ3JlZGVudGlhbHMo
KSkgPyBBc2tDbGllbnRGb3JBbGxDcmVkZW50aWFscyA6IERvTm90QXNrQ2xpZW50Rm9yQW55Q3Jl
ZGVudGlhbHM7Ci0gICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNU
b0hUVFBSZWRpcmVjdCA9IHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7
Ci0gICAgbG9hZFBhcmFtZXRlcnMuZGVmZXJzTG9hZGluZyA9IHJlc291cmNlTG9hZGVyLT5kZWZl
cnNMb2FkaW5nKCk7Ci0gICAgbG9hZFBhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8gPSBy
ZXNvdXJjZUxvYWRlci0+c2hvdWxkSW5jbHVkZUNlcnRpZmljYXRlSW5mbygpOwotICAgIGxvYWRQ
YXJhbWV0ZXJzLm1heGltdW1CdWZmZXJpbmdUaW1lID0gbWF4aW11bUJ1ZmZlcmluZ1RpbWUocmVz
b3VyY2UpOwotCi0gICAgQVNTRVJUKChsb2FkUGFyYW1ldGVycy53ZWJQYWdlSUQgJiYgbG9hZFBh
cmFtZXRlcnMud2ViRnJhbWVJRCkgfHwgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBv
bGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzKTsKLQotICAgIGlmICghV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2NoZWR1bGVSZXNv
dXJjZUxvYWQobG9hZFBhcmFtZXRlcnMpLCAwKSkgewotICAgICAgICAvLyBXZSBwcm9iYWJseSBm
YWlsZWQgdG8gc2NoZWR1bGUgdGhpcyBsb2FkIHdpdGggdGhlIE5ldHdvcmtQcm9jZXNzIGJlY2F1
c2UgaXQgaGFkIGNyYXNoZWQuCi0gICAgICAgIC8vIFRoaXMgbG9hZCB3aWxsIG5ldmVyIHN1Y2Nl
ZWQgc28gd2Ugd2lsbCBzY2hlZHVsZSBpdCB0byBmYWlsIGFzeW5jaHJvbm91c2x5LgotICAgICAg
ICBzY2hlZHVsZUludGVybmFsbHlGYWlsZWRMb2FkKHJlc291cmNlTG9hZGVyKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX3dlYlJlc291cmNlTG9hZGVycy5zZXQoaWRlbnRp
ZmllciwgV2ViUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXNvdXJjZUxvYWRlcikpOwotfQotCi12
b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVJbnRlcm5hbGx5RmFpbGVkTG9h
ZChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgbV9pbnRl
cm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzLmFkZChyZXNvdXJjZUxvYWRlcik7Ci0gICAgbV9p
bnRlcm5hbGx5RmFpbGVkTG9hZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmludGVybmFsbHlGYWlsZWRMb2FkVGltZXJGaXJlZCgpCi17
Ci0gICAgVmVjdG9yPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4+IGludGVybmFsbHlGYWlsZWRSZXNv
dXJjZUxvYWRlcnM7Ci0gICAgY29weVRvVmVjdG9yKG1faW50ZXJuYWxseUZhaWxlZFJlc291cmNl
TG9hZGVycywgaW50ZXJuYWxseUZhaWxlZFJlc291cmNlTG9hZGVycyk7Ci0gICAgCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzLnNpemUo
KTsgKytpKQotICAgICAgICBpbnRlcm5hbGx5RmFpbGVkUmVzb3VyY2VMb2FkZXJzW2ldLT5kaWRG
YWlsKGludGVybmFsRXJyb3IoaW50ZXJuYWxseUZhaWxlZFJlc291cmNlTG9hZGVyc1tpXS0+dXJs
KCkpKTsKLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN0YXJ0TG9jYWxMb2Fk
KFdlYkNvcmU6OlJlc291cmNlTG9hZGVyJiByZXNvdXJjZUxvYWRlcikKLXsKLSAgICByZXNvdXJj
ZUxvYWRlci5zdGFydCgpOwotICAgIG1fd2ViUmVzb3VyY2VMb2FkZXJzLnNldChyZXNvdXJjZUxv
YWRlci5pZGVudGlmaWVyKCksIFdlYlJlc291cmNlTG9hZGVyOjpjcmVhdGUoJnJlc291cmNlTG9h
ZGVyKSk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3Vy
Y2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQotewotICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7
Ci0gICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVtb3ZlLCB1cmwgJyVzJyIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChtX2ludGVybmFsbHlGYWlsZWRSZXNvdXJj
ZUxvYWRlcnMuY29udGFpbnMocmVzb3VyY2VMb2FkZXIpKSB7Ci0gICAgICAgIG1faW50ZXJuYWxs
eUZhaWxlZFJlc291cmNlTG9hZGVycy5yZW1vdmUocmVzb3VyY2VMb2FkZXIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmll
ciA9IHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAgaWYgKCFpZGVudGlmaWVyKSB7
Ci0gICAgICAgIExPR19FUlJPUigiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHJlbW92aW5nIGEg
UmVzb3VyY2VMb2FkZXIgdGhhdCBoYXMgbm8gaWRlbnRpZmllci4iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8V2ViUmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IG1f
d2ViUmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7Ci0gICAgLy8gTG9hZGVyIG1heSBu
b3QgYmUgcmVnaXN0ZXJlZCBpZiB3ZSBjcmVhdGVkIGl0LCBidXQgaGF2ZW4ndCBzY2hlZHVsZWQg
eWV0IChhIGJ1bmRsZSBjbGllbnQgY2FuIGRlY2lkZSB0byBjYW5jZWwgc3VjaCByZXF1ZXN0IHZp
YSB3aWxsU2VuZFJlcXVlc3QpLgotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZW1v
dmVMb2FkSWRlbnRpZmllcihpZGVudGlmaWVyKSwgMCk7Ci0KLSAgICAvLyBJdCdzIHBvc3NpYmxl
IHRoYXQgdGhpcyBXZWJSZXNvdXJjZUxvYWRlciBtaWdodCBiZSBqdXN0IGFib3V0IHRvIG1lc3Nh
Z2UgYmFjayB0byB0aGUgTmV0d29ya1Byb2Nlc3MgKGUuZy4gQ29udGludWVXaWxsU2VuZFJlcXVl
c3QpCi0gICAgLy8gYnV0IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZG9pbmcgc28gYW55bW9yZS4KLSAg
ICBsb2FkZXItPmRldGFjaEZyb21Db3JlTG9hZGVyKCk7Ci19Ci0KLXZvaWQgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxv
YWRlciwgYm9vbCBkZWZlcnMpCi17Ci0gICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlm
aWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXREZWZlcnNMb2FkaW5nKGlkZW50aWZp
ZXIsIGRlZmVycyksIDApOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jv
c3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgVVJMJikKLXsK
LSAgICAvLyBXZSBoYW5kbGUgY3Jvc3Mgb3JpZ2luIHJlZGlyZWN0cyBlbnRpcmVseSB3aXRoaW4g
dGhlIE5ldHdvcmtQcm9jZXNzLgotICAgIC8vIFdlIG92ZXJyaWRlIHRoaXMgY2FsbCBpbiB0aGUg
V2ViUHJvY2VzcyB0byBtYWtlIGl0IGEgbm8tb3AuCi19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSkKLXsK
LSAgICAvLyBUaGlzIG92ZXJyaWRlcyB0aGUgYmFzZSBjbGFzcyB2ZXJzaW9uLgotICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYXMgdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBuZXR3
b3JrIHByb2Nlc3MuCi19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5k
UGVuZGluZ1JlcXVlc3RzKCkKLXsKLSAgICAvLyBOZXR3b3JrIHByb2Nlc3MgZG9lcyBrZWVwIHJl
cXVlc3RzIGluIHBlbmRpbmcgc3RhdGUuCi19Ci0KLXZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQotewotICAgIC8vIE5ldHdvcmsgcHJvY2VzcyBk
b2VzIGtlZXAgcmVxdWVzdHMgaW4gcGVuZGluZyBzdGF0ZS4KLX0KLQotdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCi17Ci0gICAgSGFzaE1hcDx1
bnNpZ25lZCBsb25nLCBSZWZQdHI8V2ViUmVzb3VyY2VMb2FkZXI+Pjo6aXRlcmF0b3IgZW5kID0g
bV93ZWJSZXNvdXJjZUxvYWRlcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPHVuc2lnbmVkIGxv
bmcsIFJlZlB0cjxXZWJSZXNvdXJjZUxvYWRlcj4+OjppdGVyYXRvciBpID0gbV93ZWJSZXNvdXJj
ZUxvYWRlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKLSAgICAgICAgc2NoZWR1bGVJbnRlcm5h
bGx5RmFpbGVkTG9hZChpLT52YWx1ZS5nZXQoKS0+cmVzb3VyY2VMb2FkZXIoKSk7Ci0KLSAgICBt
X3dlYlJlc291cmNlTG9hZGVycy5jbGVhcigpOwotfQotCi12b2lkIFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCwgdW5zaWduZWQgbG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBD
bGllbnRDcmVkZW50aWFsUG9saWN5IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJy
b3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRh
KQotewotICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQqIHdlYkNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Kj4oY29udGV4dCk7Ci0gICAgLy8gRklYTUU6
IFNvbWUgZW50aXRpZXMgaW4gV2ViQ29yZSB1c2UgV2ViQ29yZSdzICJFbXB0eUZyYW1lTG9hZGVy
Q2xpZW50IiBpbnN0ZWFkIG9mIGhhdmluZyBhIHByb3BlciBXZWJGcmFtZUxvYWRlckNsaWVudC4K
LSAgICAvLyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IHNob3VsZG4ndCBleGlzdCBhbmQgZXZlcnl0
aGluZyBzaG91bGQgYmUgdXNpbmcgYSBXZWJGcmFtZUxvYWRlckNsaWVudCwKLSAgICAvLyBidXQg
aW4gdGhlIG1lYW50aW1lIHdlIGhhdmUgdG8gbWFrZSBzdXJlIG5vdCB0byBtaXMtY2FzdC4KLSAg
ICBXZWJGcmFtZUxvYWRlckNsaWVudCogd2ViRnJhbWVMb2FkZXJDbGllbnQgPSB3ZWJDb250ZXh0
LT53ZWJGcmFtZUxvYWRlckNsaWVudCgpOwotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYkZy
YW1lTG9hZGVyQ2xpZW50ID8gd2ViRnJhbWVMb2FkZXJDbGllbnQtPndlYkZyYW1lKCkgOiAwOwot
ICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5wYWdlKCkgOiAwOwot
Ci0gICAgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMgbG9hZFBhcmFtZXRlcnM7Ci0gICAg
bG9hZFBhcmFtZXRlcnMuaWRlbnRpZmllciA9IHJlc291cmNlTG9hZElkZW50aWZpZXI7Ci0gICAg
bG9hZFBhcmFtZXRlcnMud2ViUGFnZUlEID0gd2ViUGFnZSA/IHdlYlBhZ2UtPnBhZ2VJRCgpIDog
MDsKLSAgICBsb2FkUGFyYW1ldGVycy53ZWJGcmFtZUlEID0gd2ViRnJhbWUgPyB3ZWJGcmFtZS0+
ZnJhbWVJRCgpIDogMDsKLSAgICBsb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSB3ZWJQYWdlID8g
d2ViUGFnZS0+c2Vzc2lvbklEKCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKLSAg
ICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBsb2FkUGFyYW1ldGVycy5j
b250ZW50U25pZmZpbmdQb2xpY3kgPSBTbmlmZkNvbnRlbnQ7Ci0gICAgbG9hZFBhcmFtZXRlcnMu
YWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHN0b3JlZENyZWRlbnRpYWxzOwotICAgIGxvYWRQYXJh
bWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBjbGllbnRDcmVkZW50aWFsUG9saWN5Owot
ICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QgPSBjb250ZXh0LT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCk7
Ci0KLSAgICBkYXRhLnJlc2l6ZSgwKTsKLQotICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5n
RGV0ZWN0aW9uRGlzYWJsZXI7Ci0KLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5l
dHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkKGxvYWRQYXJh
bWV0ZXJzKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3Jt
U3luY2hyb25vdXNMb2FkOjpSZXBseShlcnJvciwgcmVzcG9uc2UsIGRhdGEpLCAwKSkgewotICAg
ICAgICByZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UoKTsKLSAgICAgICAgZXJyb3IgPSBpbnRl
cm5hbEVycm9yKHJlcXVlc3QudXJsKCkpOwotICAgIH0KLX0KLQotdm9pZCBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OmNyZWF0ZVBpbmdIYW5kbGUoTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtp
bmdDb250ZXh0LCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UpCi17Ci0gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGNhbGwgdG8gY3JlYXRl
UGluZ0hhbmRsZSBtaWdodCBiZSBtYWRlIGR1cmluZyBpbml0aWFsIGVtcHR5IERvY3VtZW50IGNy
ZWF0aW9uIGJlZm9yZSBhIE5ldHdvcmtpbmdDb250ZXh0IGV4aXN0cy4KLSAgICAvLyBJdCBpcyBu
b3QgY2xlYXIgdGhhdCB3ZSBzaG91bGQgc2VuZCBwaW5nIGxvYWRzIGR1cmluZyB0aGF0IHByb2Nl
c3MgYW55d2F5cy4KLSAgICBpZiAoIW5ldHdvcmtpbmdDb250ZXh0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KiB3ZWJDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCo+KG5ldHdvcmtpbmdDb250ZXh0KTsKLSAgICBX
ZWJGcmFtZUxvYWRlckNsaWVudCogd2ViRnJhbWVMb2FkZXJDbGllbnQgPSB3ZWJDb250ZXh0LT53
ZWJGcmFtZUxvYWRlckNsaWVudCgpOwotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYkZyYW1l
TG9hZGVyQ2xpZW50ID8gd2ViRnJhbWVMb2FkZXJDbGllbnQtPndlYkZyYW1lKCkgOiBudWxscHRy
OwotICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSB3ZWJGcmFtZSA/IHdlYkZyYW1lLT5wYWdlKCkgOiBu
dWxscHRyOwotICAgIAotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzIGxvYWRQYXJh
bWV0ZXJzOwotICAgIGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgIGxvYWRQ
YXJhbWV0ZXJzLnNlc3Npb25JRCA9IHdlYlBhZ2UgPyB3ZWJQYWdlLT5zZXNzaW9uSUQoKSA6IFNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpOwotICAgIGxvYWRQYXJhbWV0ZXJzLmFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMgPSBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA/IEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0gICAgbG9hZFBhcmFt
ZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IG5ldHdvcmtp
bmdDb250ZXh0LT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCk7Ci0K
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpMb2Fk
UGluZyhsb2FkUGFyYW1ldGVycyksIDApOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gMTkyOTk1KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcl9oCi0jZGVmaW5lIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcl9o
Ci0KLSNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTG9h
ZGVyU3RyYXRlZ3kuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOwotY2xhc3MgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOwotdHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyOwotCi1jbGFzcyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29y
ZTo6TG9hZGVyU3RyYXRlZ3kgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwotICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFNj
aGVkdWxlcigpOwotICAgIAotICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNl
TG9hZGVyPiBsb2FkUmVzb3VyY2UoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlTG9hZGVyT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KFdlYkNvcmU6Ok5ldHdvcmtpbmdDb250ZXh0KiwgdW5zaWduZWQg
bG9uZyByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlh
bFBvbGljeSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXREZWZlcnNMb2FkaW5nKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgYm9vbCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVkaXJlY3RVUkwpIG92ZXJy
aWRlOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpIG92ZXJyaWRlOwotCi0gICAg
dmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlUGluZ0hhbmRsZShXZWJDb3JlOjpOZXR3b3JraW5nQ29udGV4dCosIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIG92
ZXJyaWRlOwotCi0gICAgV2ViUmVzb3VyY2VMb2FkZXIqIHdlYlJlc291cmNlTG9hZGVyRm9ySWRl
bnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpIGNvbnN0IHsgcmV0dXJu
IG1fd2ViUmVzb3VyY2VMb2FkZXJzLmdldChpZGVudGlmaWVyKTsgfQotICAgIFJlZlB0cjxXZWJD
b3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2Fk
KFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGll
bnQqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLQotICAgIHZvaWQgbmV0d29y
a1Byb2Nlc3NDcmFzaGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzY2hlZHVsZUxvYWQoV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkZXIqLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSosIGJvb2wgc2hv
dWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7Ci0gICAgdm9pZCBzY2hlZHVs
ZUludGVybmFsbHlGYWlsZWRMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKik7Ci0gICAgdm9p
ZCBpbnRlcm5hbGx5RmFpbGVkTG9hZFRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHN0YXJ0TG9jYWxM
b2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyJik7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcj4+IG1faW50ZXJuYWxseUZhaWxlZFJlc291cmNlTG9hZGVyczsK
LSAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI+IG1faW50ZXJuYWxs
eUZhaWxlZExvYWRUaW1lcjsKLSAgICAKLSAgICBIYXNoTWFwPHVuc2lnbmVkIGxvbmcsIFJlZlB0
cjxXZWJSZXNvdXJjZUxvYWRlcj4+IG1fd2ViUmVzb3VyY2VMb2FkZXJzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAkocmV2aXNpb24gMTkyOTk1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKICNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgIldlYkxvYWRlclN0cmF0ZWd5
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Nocm9tZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CkBAIC0xNjAs
NyArMTYwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpTdHJlYW06OnN0YXJ0KCkKICAgICBGcmFtZSog
ZnJhbWUgPSBtX3BsdWdpblZpZXctPm1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgp
OwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBtX2xvYWRlciA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9h
ZChmcmFtZSwgdGhpcywgbV9yZXF1ZXN0KTsKKyAgICBtX2xvYWRlciA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLndlYkxvYWRlclN0cmF0ZWd5KCkuc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKGZy
YW1lLCB0aGlzLCBtX3JlcXVlc3QpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OlN0cmVhbTo6Y2Fu
Y2VsKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9u
IDE5Mjk5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDEyIEBA
CiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIldlYklEQkZhY3RvcnlCYWNrZW5kLmgiCisjaW5jbHVkZSAiV2ViTG9hZGVy
U3RyYXRlZ3kuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFzdGVib2Fy
ZE92ZXJyaWRlcy5oIgogI2luY2x1ZGUgIldlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg+CkBAIC05MSw3ICs5MSw3
IEBAIENvb2tpZXNTdHJhdGVneSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjoKIAogTG9hZGVyU3Ry
YXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlTG9hZGVyU3RyYXRlZ3koKQogewot
ICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCk7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJMb2FkZXJTdHJh
dGVneSgpOwogfQogCiBQYXN0ZWJvYXJkU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
Y3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>