<?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>131042</bug_id>
          
          <creation_ts>2014-04-01 09:26:00 -0700</creation_ts>
          <short_desc>[iOS] add missing QuickTime plug-in replacement API</short_desc>
          <delta_ts>2014-04-03 08:47:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>996315</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-04-01 09:26:00 -0700</bug_when>
    <thetext>Finish replacement plug-in scripting API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996326</commentid>
    <comment_count>1</comment_count>
      <attachid>228295</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-04-01 09:46:54 -0700</bug_when>
    <thetext>Created attachment 228295
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996327</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-01 09:49:55 -0700</bug_when>
    <thetext>Attachment 228295 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/MediaPlayer.cpp:644:  Declaration has space between type name and * in NSArray *MediaPlayer  [whitespace/declaration] [3]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996500</commentid>
    <comment_count>3</comment_count>
      <attachid>228334</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-04-01 16:07:12 -0700</bug_when>
    <thetext>Created attachment 228334
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996770</commentid>
    <comment_count>4</comment_count>
      <attachid>228408</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-04-02 12:03:56 -0700</bug_when>
    <thetext>Created attachment 228408
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996785</commentid>
    <comment_count>5</comment_count>
      <attachid>228408</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-04-02 12:30:54 -0700</bug_when>
    <thetext>Comment on attachment 228408
Updated patch

View in context: https://bugs.webkit.org/attachment.cgi?id=228408&amp;action=review

Weird. The patch includes QuickTimePluginReplacement.mm twice.

&gt; Source/WebCore/Modules/plugins/QuickTimePluginReplacement.mm:2
&gt; + * Copyright (C) 2013 Apple Inc. All rights reserved.

Maybe +2014?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996797</commentid>
    <comment_count>6</comment_count>
      <attachid>228414</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-04-02 12:57:15 -0700</bug_when>
    <thetext>Created attachment 228414
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997179</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-04-03 08:47:07 -0700</bug_when>
    <thetext>Committed r166719: https://trac.webkit.org/r166719</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228295</attachid>
            <date>2014-04-01 09:46:54 -0700</date>
            <delta_ts>2014-04-01 16:07:12 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>patch_8.txt</filename>
            <type>text/plain</type>
            <size>50033</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjU5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE0LTA0LTAxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIGFkZCBtaXNz
aW5nIFF1aWNrVGltZSBwbHVnLWluIHJlcGxhY2VtZW50IEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDQyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFF1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50LmNwcCB0byBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSB0byBtYWtlIGl0IHBv
c3NpYmxlCisgICAgICAgIHRvIHVzZSB0aGUgT2JqQyBKU0MgQVBJLgorICAgICAgICAqIE1vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAg
ICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbDoKKworICAg
ICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qczoKKyAg
ICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS50aW1lZE1ldGFkYXRhVXBkYXRlcyk6IEltcGxl
bWVudC4KKyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5hY2Nlc3NMb2cpOiBEaXR0by4K
KyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5lcnJvckxvZyk6IERpdHRvLgorCisgICAg
ICAgIFVzZSB0aGUgSlNDIE9iakMgQVBJIHRvIGNyZWF0ZSBhIEphdmFTY3JpcHQgb2JqZWN0IGZy
b20gYW4gYXJyYXkgb2YgQVZNZXRhZGF0YUl0ZW1zLiBUaGUKKyAgICAgICAgSlNDIE9iakMgQVBJ
IHN1cHBvcnRzIGJhc2ljIE5TVHlwZXMsIGJ1dCBhbiBBVk1ldGFkYXRhSXRlbSBjYW4gYWxzbyBj
b250YWluIE5TRGF0YSB3aGljaCAKKyAgICAgICAgdGhlIGV4aXN0aW5nIHBsdWctaW4gcmV0dXJu
cyBhcyBiYXNlLTY0IGVuY29kZWQgZGF0YSwgc28gY3JlYXRlIHdyYXBwZXJzIGZvciBOU0RpY3Rp
b25hcnkKKyAgICAgICAgYW5kIE5TQXJyYXkuCisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2Ny
aXB0SW5qZWN0ZWQpOiBEaXNhbWJpZ3VhdGUgd2l0aCAiSlNDOjoiCisgICAgICAgIChXZWJDb3Jl
OjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOiBDcmVhdGUgSlNW
YWx1ZSogZnJvbSBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFycmF5SW5D
b250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gTlNBcnJheS4KKyAgICAgICAgKFdlYkNvcmU6
OmpzVmFsdWVXaXRoRGljdGlvbmFyeUluQ29udGV4dCk6IENyZWF0ZSBKU1ZhbHVlKiBmcm9tIE5T
RGljdGlvbmFyeS4KKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQp
OiBDcmVhdGUgSlNWYWx1ZSogZnJvbSBiYXNpYyBOU1R5cGVzIHBsdXMgQVZNZXRhZGF0YUl0ZW0K
KyAgICAgICAgICAgIGFuZCBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFW
TWV0YWRhdGFJdGVtSW5Db250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gQVZNZXRhZGF0YUl0
ZW0uCisgICAgICAgIChXZWJDb3JlOjpKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1l
ZE1ldGFEYXRhKTogU2NyaXB0IGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkpTUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmFjY2Vzc0xvZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2cpOiBEaXR0by4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQuY3BwIC0+IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXI6OnRpbWVkTWV0YWRhdGEpOiBpT1Mgb25seSBhY2Nlc3Nvci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjphY2Nlc3NMb2cpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjplcnJvckxvZyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnRpbWVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YWNjZXNzTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmVycm9yTG9nKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1ldGFk
YXRhRGlkQXJyaXZlKToKKyAgICAgICAgKFdlYkNvcmU6Oml0ZW1LVk9Qcm9wZXJ0aWVzKToKKyAg
ICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDpv
Zk9iamVjdDpjaGFuZ2U6Y29udGV4dDpdKToKKwogMjAxNC0wNC0wMSAgWmFuIERvYmVyc2VrICA8
emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4aW5nIGRlYnVn
IGJ1aWxkcyBhZnRlciByMTY2NTg2LgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVn
aW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjY0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0KLSNpbmNs
dWRlICJRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgotCi0jaW5jbHVkZSAiRXZlbnQuaCIK
LSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9i
amVjdC5oIgotI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291
cmNlQ29kZS5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlwdHMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9BUElDYXN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU3RyaW5nIHF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50U2NyaXB0KCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzY3JpcHQsIChRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dEphdmFTY3JpcHQsIHNpemVvZihRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudEphdmFTY3JpcHQp
KSk7Ci0gICAgcmV0dXJuIHNjcmlwdDsKLX0KLQotdm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudDo6cmVnaXN0ZXJQbHVnaW5SZXBsYWNlbWVudChQbHVnaW5SZXBsYWNlbWVudFJlZ2lzdHJh
ciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKFJlcGxhY2VtZW50UGx1Z2luKGNyZWF0ZSwg
c3VwcG9ydHNNaW1lVHlwZSwgc3VwcG9ydHNGaWxlRXh0ZW5zaW9uKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8UGx1Z2luUmVwbGFjZW1lbnQ+IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpjcmVhdGUo
SFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50KHBsdWdpbiwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMpKTsKLX0KLQotYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6c3Vw
cG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIHN0YXRpYyBjb25z
dCBjaGFyKiB0eXBlc1tdID0gewotICAgICAgICAiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1
cmwiLCAiYXBwbGljYXRpb24veC1tcGVndXJsIiwgImF1ZGlvLzNncHAiLCAiYXVkaW8vM2dwcDIi
LCAiYXVkaW8vYWFjIiwgImF1ZGlvL2FpZmYiLAotICAgICAgICAiYXVkaW8vYW1yIiwgImF1ZGlv
L2Jhc2ljIiwgImF1ZGlvL21wMyIsICJhdWRpby9tcDQiLCAiYXVkaW8vbXBlZyIsICJhdWRpby9t
cGVnMyIsICJhdWRpby9tcGVndXJsIiwgImF1ZGlvL3NjcGxzIiwKLSAgICAgICAgImF1ZGlvL3dh
diIsICJhdWRpby94LWFhYyIsICJhdWRpby94LWFpZmYiLCAiYXVkaW8veC1jYWYiLCAiYXVkaW8v
eC1tNGEiLCAiYXVkaW8veC1tNGIiLCAiYXVkaW8veC1tNHAiLAotICAgICAgICAiYXVkaW8veC1t
NHIiLCAiYXVkaW8veC1tcDMiLCAiYXVkaW8veC1tcGVnIiwgImF1ZGlvL3gtbXBlZzMiLCAiYXVk
aW8veC1tcGVndXJsIiwgImF1ZGlvL3gtc2NwbHMiLCAiYXVkaW8veC13YXYiLAotICAgICAgICAi
dmlkZW8vM2dwcCIsICJ2aWRlby8zZ3BwMiIsICJ2aWRlby9tcDQiLCAidmlkZW8vcXVpY2t0aW1l
IiwgInZpZGVvL3gtbTR2IgotICAgIH07Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUhhc2gsICgpKTsKLSAgICBpZiAoIXR5cGVIYXNoLnNp
emUoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgo
dHlwZXMpOyArK2kpCi0gICAgICAgICAgICB0eXBlSGFzaC5hZGQodHlwZXNbaV0pOwotICAgIH0K
LQotICAgIHJldHVybiB0eXBlSGFzaC5jb250YWlucyhtaW1lVHlwZSk7Ci19Ci0KLWJvb2wgUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGV4dGVuc2lvbikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXh0ZW5zaW9uc1tdID0g
ewotICAgICAgICAiM2cyIiwgIjNncCIsICIzZ3AyIiwgIjNncHAiLCAiYWFjIiwgImFkdHMiLCAi
YWlmIiwgImFpZmMiLCAiYWlmZiIsICJBTVIiLCAiYXUiLCAiYndmIiwgImNhZiIsICJjZGRhIiwg
Im0zdSIsCi0gICAgICAgICJtM3U4IiwgIm00YSIsICJtNGIiLCAibTRwIiwgIm00ciIsICJtNHYi
LCAibW92IiwgIm1wMyIsICJtcDMiLCAibXA0IiwgIm1wZWciLCAibXBnIiwgIm1xdiIsICJwbHMi
LCAicXQiLAotICAgICAgICAic25kIiwgInN3YSIsICJ0cyIsICJ1bHciLCAid2F2IgotICAgIH07
Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgZXh0
ZW5zaW9uSGFzaCwgKCkpOwotICAgIGlmICghZXh0ZW5zaW9uSGFzaC5zaXplKCkpIHsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGV4dGVuc2lvbnMpOyAr
K2kpCi0gICAgICAgICAgICBleHRlbnNpb25IYXNoLmFkZChleHRlbnNpb25zW2ldKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZXh0ZW5zaW9uSGFzaC5jb250YWlucyhleHRlbnNpb24pOwotfQotCi1R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQoSFRN
TFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKLSAgICA6UGx1Z2luUmVwbGFjZW1l
bnQoKQotICAgICwgbV9wYXJlbnRFbGVtZW50KCZwbHVnaW4pCi0gICAgLCBtX25hbWVzKHBhcmFt
TmFtZXMpCi0gICAgLCBtX3ZhbHVlcyhwYXJhbVZhbHVlcykKLSAgICAsIG1fc2NyaXB0T2JqZWN0
KG51bGxwdHIpCi17Ci19Ci0KLVF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp+UXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQoKQotewotICAgIG1fcGFyZW50RWxlbWVudCA9IG51bGxwdHI7Ci0g
ICAgbV9zY3JpcHRPYmplY3QgPSBudWxscHRyOwotICAgIG1fbWVkaWFFbGVtZW50ID0gbnVsbHB0
cjsKLX0KLQotUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFF1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwbHVnaW4sIG1f
cGFyZW50RWxlbWVudCA9PSAmcGx1Z2luKTsKLQotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5jcmVhdGVFbGVtZW50UmVuZGVyZXIoc3RkOjpt
b3ZlKHN0eWxlKSk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotRE9NV3JhcHBlcldvcmxk
JiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aXNvbGF0ZWRXb3JsZCgpCi17Ci0gICAgc3Rh
dGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9ICpET01XcmFwcGVyV29ybGQ6OmNy
ZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1JlZigpOwotICAgIHJldHVybiBpc29s
YXRlZFdvcmxkOwotfQotCi1ib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVS
ZXBsYWNlbWVudFNjcmlwdEluamVjdGVkKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9wYXJlbnRF
bGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3Js
ZCgpOwotICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWlu
RnJhbWUoKS5zY3JpcHQoKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qo
d29ybGQpKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKLSAgICAKLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3Qt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsK
LSAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIAotICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlw
dFNvdXJjZUNvZGUocXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKSksIHdvcmxkKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgTE9HKFBsdWdpbnMsICIl
cCAtIEV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVu
dCBzY3JpcHQiLCB0aGlzKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KFNoYWRvd1Jv
b3QqIHJvb3QpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1fcGFyZW50RWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCk7Ci0KLSAgICBpZiAoIWVuc3VyZVJlcGxhY2VtZW50U2NyaXB0SW5qZWN0ZWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGlz
b2xhdGVkV29ybGQoKTsKLSAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0g
cGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCk7Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xv
YmFsT2JqZWN0KHdvcmxkKSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgCi0gICAgLy8g
TG9va3VwIHRoZSAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiIGZ1bmN0aW9uLgotICAgIEpTVmFs
dWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwotICAgIGlmIChyZXBsYWNlbWVu
dEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBsYWNlbWVudEZ1bmN0aW9uLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHJlcGxhY2Vt
ZW50T2JqZWN0LCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlz
dDsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcm9vdCkpOwot
ICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX3BhcmVudEVsZW1l
bnQpKTsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdGhpcykp
OwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1f
bmFtZXMpKTsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBtX3ZhbHVlcykpOwotICAgIEpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJl
cGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlz
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHZXQg
dGhlIDx2aWRlbz4gY3JlYXRlZCB0byByZXBsYWNlIHRoZSBwbHVnLWluLgotICAgIEpTVmFsdWUg
dmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidmlkZW8iKSk7
Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSB0b0hUTUxWaWRlb0VsZW1lbnQodmFsdWUp
OwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkgewotICAgICAgICBMT0coUGx1Z2lucywgIiVw
IC0gRmFpbGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBs
dWdpbiByZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgdGhl
IHNjcmlwdGluZyBpbnRlcmZhY2UuCi0gICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAic2NyaXB0T2JqZWN0IikpOwotICAgIGlmICghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIG1fc2NyaXB0
T2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0KLSAgICBpZiAoIW1fc2NyaXB0T2JqZWN0
KSB7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmluZCBzY3JpcHQgb2Jq
ZWN0IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudC4iLCB0aGlzKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6Om1vdmllU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbWVkaWFF
bGVtZW50KQotICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPmZpbGVTaXplKCk7Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cG9zdEV2
ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQotewotICAgIFJlZjxIVE1MUGx1Z0luRWxlbWVu
dD4gcHJvdGVjdCgqbV9wYXJlbnRFbGVtZW50KTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0g
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVlKTsKLSAgICBtX3BhcmVudEVsZW1l
bnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOwotfQotCi19Ci0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5oCShyZXZpc2lvbiAxNjY0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHdpbGxDcmVhdGVS
ZW5kZXJlcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50OyB9CiAgICAgdmlydHVh
bCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKEhUTUxQbHVn
SW5FbGVtZW50JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4pIG92ZXJyaWRlOwogCisgICAgSFRNTFZp
ZGVvRWxlbWVudCogcGFyZW50RWxlbWVudCgpIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgp
OyB9CisKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbW92aWVTaXplKCkgY29uc3Q7CiAgICAgdm9p
ZCBwb3N0RXZlbnQoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
LmlkbAkocmV2aXNpb24gMTY2NDEwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjksNSAr
MjksOCBAQAogICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0LAogXSBpbnRlcmZhY2UgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxvbmcgbW92aWVTaXplOworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBh
bnkgdGltZWRNZXRhRGF0YTsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUg
YW55IGFjY2Vzc0xvZzsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgYW55
IGVycm9yTG9nOwogICAgIHZvaWQgcG9zdEV2ZW50KERPTVN0cmluZyBldmVudE5hbWUpOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuanMJKHJldmlzaW9uIDE2NjQxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzIyLDE5ICszMjIsMjggQEAgUmVwbGFjZW1lbnQucHJvdG90eXBl
ID0gewogICAgIAogICAgIHRpbWVkTWV0YWRhdGFVcGRhdGVzOiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICAvLyBGSVhNRTogbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmhvc3QudGltZWRNZXRhRGF0YTsKKyAgICAgICAgfSBjYXRj
aChlKSB7IH0KKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9LAogICAgIAogICAgIGFjY2Vz
c0xvZzogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IG5vdCBpbXBsZW1lbnRl
ZCB5ZXQuCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ob3N0LmFjY2Vz
c0xvZzsKKyAgICAgICAgfSBjYXRjaChlKSB7IH0KKwogICAgICAgICByZXR1cm4gbnVsbDsKICAg
ICB9LAogICAgIAogICAgIGVycm9yTG9nOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICAvLyBG
SVhNRTogbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmhvc3QuZXJyb3JMb2c7CisgICAgICAgIH0gY2F0Y2goZSkgeyB9CisKICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgfSwKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
CShyZXZpc2lvbiAxNjY0MTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA6MTY2NDEwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9DT05U
Uk9MU19TQ1JJUFQpCisKKyNpbmNsdWRlICJRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgor
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlw
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1
ZUlubGluZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgU3RyaW5nIHF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50U2NyaXB0KCkKK3sK
KyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzY3JpcHQsIChRdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudEphdmFTY3JpcHQsIHNpemVvZihRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudEphdmFTY3JpcHQpKSk7CisgICAgcmV0dXJuIHNjcmlwdDsKK30KKwordm9pZCBR
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cmVnaXN0ZXJQbHVnaW5SZXBsYWNlbWVudChQbHVn
aW5SZXBsYWNlbWVudFJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKFJlcGxh
Y2VtZW50UGx1Z2luKGNyZWF0ZSwgc3VwcG9ydHNNaW1lVHlwZSwgc3VwcG9ydHNGaWxlRXh0ZW5z
aW9uKSk7Cit9CisKK1Bhc3NSZWZQdHI8UGx1Z2luUmVwbGFjZW1lbnQ+IFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50OjpjcmVhdGUoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVl
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
KHBsdWdpbiwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpKTsKK30KKworYm9vbCBRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlc1tdID0geworICAgICAgICAiYXBwbGlj
YXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLCAiYXBwbGljYXRpb24veC1tcGVndXJsIiwgImF1ZGlv
LzNncHAiLCAiYXVkaW8vM2dwcDIiLCAiYXVkaW8vYWFjIiwgImF1ZGlvL2FpZmYiLAorICAgICAg
ICAiYXVkaW8vYW1yIiwgImF1ZGlvL2Jhc2ljIiwgImF1ZGlvL21wMyIsICJhdWRpby9tcDQiLCAi
YXVkaW8vbXBlZyIsICJhdWRpby9tcGVnMyIsICJhdWRpby9tcGVndXJsIiwgImF1ZGlvL3NjcGxz
IiwKKyAgICAgICAgImF1ZGlvL3dhdiIsICJhdWRpby94LWFhYyIsICJhdWRpby94LWFpZmYiLCAi
YXVkaW8veC1jYWYiLCAiYXVkaW8veC1tNGEiLCAiYXVkaW8veC1tNGIiLCAiYXVkaW8veC1tNHAi
LAorICAgICAgICAiYXVkaW8veC1tNHIiLCAiYXVkaW8veC1tcDMiLCAiYXVkaW8veC1tcGVnIiwg
ImF1ZGlvL3gtbXBlZzMiLCAiYXVkaW8veC1tcGVndXJsIiwgImF1ZGlvL3gtc2NwbHMiLCAiYXVk
aW8veC13YXYiLAorICAgICAgICAidmlkZW8vM2dwcCIsICJ2aWRlby8zZ3BwMiIsICJ2aWRlby9t
cDQiLCAidmlkZW8vcXVpY2t0aW1lIiwgInZpZGVvL3gtbTR2IgorICAgIH07CisgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUhhc2gsICgpKTsK
KyAgICBpZiAoIXR5cGVIYXNoLnNpemUoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgodHlwZXMpOyArK2kpCisgICAgICAgICAgICB0eXBlSGFzaC5h
ZGQodHlwZXNbaV0pOworICAgIH0KKworICAgIHJldHVybiB0eXBlSGFzaC5jb250YWlucyhtaW1l
VHlwZSk7Cit9CisKK2Jvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmls
ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZXh0ZW5zaW9uc1tdID0geworICAgICAgICAiM2cyIiwgIjNncCIsICIzZ3AyIiwgIjNn
cHAiLCAiYWFjIiwgImFkdHMiLCAiYWlmIiwgImFpZmMiLCAiYWlmZiIsICJBTVIiLCAiYXUiLCAi
YndmIiwgImNhZiIsICJjZGRhIiwgIm0zdSIsCisgICAgICAgICJtM3U4IiwgIm00YSIsICJtNGIi
LCAibTRwIiwgIm00ciIsICJtNHYiLCAibW92IiwgIm1wMyIsICJtcDMiLCAibXA0IiwgIm1wZWci
LCAibXBnIiwgIm1xdiIsICJwbHMiLCAicXQiLAorICAgICAgICAic25kIiwgInN3YSIsICJ0cyIs
ICJ1bHciLCAid2F2IgorICAgIH07CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KEhhc2hTZXQ8U3RyaW5nPiwgZXh0ZW5zaW9uSGFzaCwgKCkpOworICAgIGlmICghZXh0ZW5zaW9u
SGFzaC5zaXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlf
TEVOR1RIKGV4dGVuc2lvbnMpOyArK2kpCisgICAgICAgICAgICBleHRlbnNpb25IYXNoLmFkZChl
eHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXh0ZW5zaW9uSGFzaC5jb250YWlu
cyhleHRlbnNpb24pOworfQorCitRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6UXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykK
KyAgICA6UGx1Z2luUmVwbGFjZW1lbnQoKQorICAgICwgbV9wYXJlbnRFbGVtZW50KCZwbHVnaW4p
CisgICAgLCBtX25hbWVzKHBhcmFtTmFtZXMpCisgICAgLCBtX3ZhbHVlcyhwYXJhbVZhbHVlcykK
KyAgICAsIG1fc2NyaXB0T2JqZWN0KG51bGxwdHIpCit7Cit9CisKK1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Ojp+UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQoKQoreworICAgIG1fcGFyZW50
RWxlbWVudCA9IG51bGxwdHI7CisgICAgbV9zY3JpcHRPYmplY3QgPSBudWxscHRyOworICAgIG1f
bWVkaWFFbGVtZW50ID0gbnVsbHB0cjsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoSFRNTFBsdWdJ
bkVsZW1lbnQmIHBsdWdpbiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCit7CisgICAgQVNT
RVJUX1VOVVNFRChwbHVnaW4sIG1fcGFyZW50RWxlbWVudCA9PSAmcGx1Z2luKTsKKworICAgIGlm
IChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5jcmVhdGVF
bGVtZW50UmVuZGVyZXIoc3RkOjptb3ZlKHN0eWxlKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworRE9NV3JhcHBlcldvcmxkJiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aXNvbGF0
ZWRXb3JsZCgpCit7CisgICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9
ICpET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1Jl
ZigpOworICAgIHJldHVybiBpc29sYXRlZFdvcmxkOworfQorCitib29sIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50OjplbnN1cmVSZXBsYWNlbWVudFNjcmlwdEluamVjdGVkKCkKK3sKKyAgICBQ
YWdlKiBwYWdlID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBET01XcmFwcGVyV29ybGQm
IHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOworICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENv
bnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUoKS5zY3JpcHQoKTsKKyAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29u
dHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHJlcGxhY2VtZW50RnVu
Y3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGVQ
bHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1bmN0
aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHNjcmlwdENvbnRyb2xsZXIu
ZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnRTY3JpcHQoKSksIHdvcmxkKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgUXVpY2tU
aW1lIHBsdWdpbiByZXBsYWNlbWVudCBzY3JpcHQiLCB0aGlzKTsKKyAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFs
bFJlcGxhY2VtZW50KFNoYWRvd1Jvb3QqIHJvb3QpCit7CisgICAgUGFnZSogcGFnZSA9IG1fcGFy
ZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCk7CisKKyAgICBpZiAoIWVuc3VyZVJlcGxhY2Vt
ZW50U2NyaXB0SW5qZWN0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKKyAgICBTY3JpcHRDb250cm9sbGVy
JiBzY3JpcHRDb250cm9sbGVyID0gcGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCk7CisgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CisgICAgCisgICAgLy8gTG9va3VwIHRoZSAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQi
IGZ1bmN0aW9uLgorICAgIEpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50Iikp
OworICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBs
YWNlbWVudEZ1bmN0aW9uLnRvT2JqZWN0KGV4ZWMpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOwor
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKKyAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgcm9vdCkpOworICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBtX3BhcmVudEVsZW1lbnQpKTsKKyAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgdGhpcykpOworICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihl
eGVjLCBnbG9iYWxPYmplY3QsIG1fbmFtZXMpKTsKKyAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0
cmluZz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX3ZhbHVlcykpOworICAgIEpTVmFsdWUgcmVwbGFj
ZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEs
IGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBHZXQgdGhlIDx2aWRlbz4gY3JlYXRlZCB0byByZXBsYWNlIHRoZSBw
bHVnLWluLgorICAgIEpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAidmlkZW8iKSk7CisgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSB0b0hU
TUxWaWRlb0VsZW1lbnQodmFsdWUpOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkgeworICAg
ICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFpbGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNy
ZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Cisg
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2UuCisgICAgdmFsdWUgPSBy
ZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAic2NyaXB0T2JqZWN0IikpOwor
ICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7CisKKyAg
ICBpZiAoIW1fc2NyaXB0T2JqZWN0KSB7CisgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWls
ZWQgdG8gZmluZCBzY3JpcHQgb2JqZWN0IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBs
YWNlbWVudC4iLCB0aGlzKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25l
ZCBsb25nIGxvbmcgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Om1vdmllU2l6ZSgpIGNvbnN0
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQtPmZpbGVTaXplKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBRdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudDo6cG9zdEV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQoreworICAg
IFJlZjxIVE1MUGx1Z0luRWxlbWVudD4gcHJvdGVjdCgqbV9wYXJlbnRFbGVtZW50KTsKKyAgICBS
ZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVl
KTsKKyAgICBtX3BhcmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworfQor
Cit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywzNCArMjMsNDYgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgImNvbmZpZy5oIgogCiAjaWYgRU5B
QkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIAotI2luY2x1ZGUgIlF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50LmgiCisjaW1wb3J0ICJRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgogCi0j
aW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVudC5o
IgotI2luY2x1ZGUgIkpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlwdHMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlu
bGluZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKKyNpbXBvcnQgIkV2ZW50LmgiCisjaW1w
b3J0ICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTFZpZGVvRWxlbWVudC5oIgor
I2ltcG9ydCAiSlNET01CaW5kaW5nLmgiCisjaW1wb3J0ICJKU0RPTUdsb2JhbE9iamVjdC5oIgor
I2ltcG9ydCAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJKU1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNYWluRnJhbWUu
aCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJlbmRlckVsZW1lbnQuaCIKKyNpbXBvcnQg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbXBv
cnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJVc2VyQWdlbnRTY3JpcHRzLmgiCisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxDb3JlTWVkaWEvQ29yZU1l
ZGlhLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+
CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQorU09GVF9MSU5LKENv
cmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAoQ01UaW1l
IHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3IpKQorCit0
eXBlZGVmIEFWTWV0YWRhdGFJdGVtIEFWTWV0YWRhdGFJdGVtVHlwZTsKK1NPRlRfTElOS19GUkFN
RVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlv
biwgQVZNZXRhZGF0YUl0ZW0pCisjZGVmaW5lIEFWTWV0YWRhdGFJdGVtIGdldEFWTWV0YWRhdGFJ
dGVtQ2xhc3MoKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBKU1ZhbHVlICpqc1Zh
bHVlV2l0aFZhbHVlSW5Db250ZXh0KGlkLCBKU0NvbnRleHQgKik7CitzdGF0aWMgSlNWYWx1ZSAq
anNWYWx1ZVdpdGhBVk1ldGFkYXRhSXRlbUluQ29udGV4dChBVk1ldGFkYXRhSXRlbVR5cGUgKiwg
SlNDb250ZXh0ICopOworCiBzdGF0aWMgU3RyaW5nIHF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
U2NyaXB0KCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBz
Y3JpcHQsIChRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudEphdmFTY3JpcHQsIHNpemVvZihRdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudEphdmFTY3JpcHQpKSk7CkBAIC0xNDEsMTAgKzE1MywxMCBA
QCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVSCiAgICAgCiAgICAgRE9N
V3JhcHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9s
bGVyJiBzY3JpcHRDb250cm9sbGVyID0gcGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCk7Ci0gICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Ci0gICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0
Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIAotICAgIEpTVmFsdWUgcmVwbGFj
ZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywg
ImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOworICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVu
dEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyKGV4ZWMs
ICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlv
bi5pc0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIApAQCAtMTY3LDM0ICsx
NzksMzQgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogCiAgICAg
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250
cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gcGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCk7Ci0g
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qo
d29ybGQpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgLy8g
TG9va3VwIHRoZSAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiIGZ1bmN0aW9uLgotICAgIEpTVmFs
dWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOworICAgIEpTQzo6SlNWYWx1ZSBy
ZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlm
aWVyKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFjZW1l
bnRGdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgSlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlvbi50b09i
amVjdChleGVjKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IHJlcGxhY2VtZW50T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShyZXBsYWNl
bWVudE9iamVjdCwgY2FsbERhdGEpOwotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUp
CisgICAgSlNDOjpKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBsYWNlbWVudEZ1bmN0
aW9uLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CisgICAgSlND
OjpDYWxsVHlwZSBjYWxsVHlwZSA9IHJlcGxhY2VtZW50T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5n
ZXRDYWxsRGF0YShyZXBsYWNlbWVudE9iamVjdCwgY2FsbERhdGEpOworICAgIGlmIChjYWxsVHlw
ZSA9PSBKU0M6OkNhbGxUeXBlTm9uZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ0xpc3Q7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHJv
b3QpKTsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9wYXJl
bnRFbGVtZW50KSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHRoaXMpKTsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBtX25hbWVzKSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGds
b2JhbE9iamVjdCwgbV92YWx1ZXMpKTsKLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50ID0gY2FsbChl
eGVjLCByZXBsYWNlbWVudE9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3Qs
IGFyZ0xpc3QpOworICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudCA9IGNhbGwoZXhlYywgcmVw
bGFjZW1lbnRPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEdldCB0
aGUgPHZpZGVvPiBjcmVhdGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCi0gICAgSlNWYWx1ZSB2
YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJ2aWRlbyIpKTsK
KyAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVu
dGlmaWVyKGV4ZWMsICJ2aWRlbyIpKTsKICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpICYm
ICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBtX21lZGlhRWxlbWVudCA9IHRv
SFRNTFZpZGVvRWxlbWVudCh2YWx1ZSk7CiAKQEAgLTIwNSw3ICsyMTcsNyBAQCBib29sIFF1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgfQogCiAgICAgLy8gR2V0IHRoZSBz
Y3JpcHRpbmcgaW50ZXJmYWNlLgotICAgIHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgInNjcmlwdE9iamVjdCIpKTsKKyAgICB2YWx1ZSA9IHJlcGxhY2VtZW50
LmdldChleGVjLCBKU0M6OklkZW50aWZpZXIoZXhlYywgInNjcmlwdE9iamVjdCIpKTsKICAgICBp
ZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICBtX3NjcmlwdE9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCkBAIC0yMzMs
NSArMjQ1LDE5MSBAQCB2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpwb3N0RXZlCiAg
ICAgbV9wYXJlbnRFbGVtZW50LT5kaXNwYXRjaEV2ZW50KGV2ZW50LmdldCgpKTsKIH0KIAorc3Rh
dGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoRGF0YUluQ29udGV4dChOU0RhdGEgKmRhdGEsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIEpTQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBWZWN0b3I8Y2hh
cj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5n
dGhdLCBiYXNlNjREYXRhKTsKKworICAgIFN0cmluZyBkYXRhNjQ7CisgICAgaWYgKCFtaW1lVHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgIGRhdGE2NCA9ICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFz
ZTY0LCIgKyBiYXNlNjREYXRhOworICAgIGVsc2UKKyAgICAgICAgZGF0YTY0ID0gImRhdGE6dGV4
dC9wbGFpbjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisKKyAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoT2JqZWN0OihpZClkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBpbkNvbnRleHQ6
Y29udGV4dF07Cit9CisKK3N0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFycmF5SW5Db250ZXh0
KE5TQXJyYXkgKmFycmF5LCBKU0NvbnRleHQgKmNvbnRleHQpCit7CisgICAgSlNWYWx1ZVJlZiBl
eGNlcHRpb24gPSAwOworICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5l
d0FycmF5SW5Db250ZXh0OmNvbnRleHRdOworICAgIEpTT2JqZWN0UmVmIHJlc3VsdE9iamVjdCA9
IEpTVmFsdWVUb09iamVjdChbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBbcmVzdWx0IEpT
VmFsdWVSZWZdLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1
cm4gW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OmNvbnRleHRdOworCisgICAg
TlNVSW50ZWdlciBjb3VudCA9IFthcnJheSBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBKU1ZhbHVlICp2YWx1ZSA9IGpzVmFsdWVX
aXRoVmFsdWVJbkNvbnRleHQoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0sIGNvbnRleHQpOworICAg
ICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgcmVzdWx0
T2JqZWN0LCAodW5zaWduZWQpaSwgW3ZhbHVlIEpTVmFsdWVSZWZdLCAmZXhjZXB0aW9uKTsKKyAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoRGljdGlv
bmFyeUluQ29udGV4dChOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnksIEpTQ29udGV4dCAqY29udGV4
dCkKK3sKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNWYWx1ZSAqcmVzdWx0
ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmNvbnRleHRdOworICAgIEpT
T2JqZWN0UmVmIHJlc3VsdE9iamVjdCA9IEpTVmFsdWVUb09iamVjdChbY29udGV4dCBKU0dsb2Jh
bENvbnRleHRSZWZdLCBbcmVzdWx0IEpTVmFsdWVSZWZdLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAo
ZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5D
b250ZXh0OmNvbnRleHRdOworCisgICAgZm9yIChpZCBrZXkgaW4gW2RpY3Rpb25hcnkga2V5RW51
bWVyYXRvcl0pIHsKKyAgICAgICAgaWYgKCFba2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU1ZhbHVlICp2YWx1ZSA9
IGpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQoW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OmtleV0s
IGNvbnRleHQpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChD
RlN0cmluZ1JlZilrZXkpOworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5KFtjb250ZXh0IEpT
R2xvYmFsQ29udGV4dFJlZl0sIHJlc3VsdE9iamVjdCwgbmFtZSwgW3ZhbHVlIEpTVmFsdWVSZWZd
LCAwLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
ICpqc1ZhbHVlV2l0aFZhbHVlSW5Db250ZXh0KGlkIHZhbHVlLCBKU0NvbnRleHQgKmNvbnRleHQp
Cit7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dIHx8IFt2
YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKQorICAgICAgICByZXR1cm4gW0pT
VmFsdWUgdmFsdWVXaXRoT2JqZWN0OnZhbHVlIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICBlbHNl
IGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNMb2NhbGUgY2xhc3NdXSkKKyAgICAgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpbdmFsdWUgbG9jYWxlSWRlbnRpZmllcl0gaW5D
b250ZXh0OmNvbnRleHRdOworICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0Rp
Y3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVXaXRoRGljdGlvbmFyeUlu
Q29udGV4dCh2YWx1ZSwgY29udGV4dCk7CisgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xh
c3M6W05TQXJyYXkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVXaXRoQXJyYXlJbkNv
bnRleHQodmFsdWUsIGNvbnRleHQpOworICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNz
OltOU0RhdGEgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVXaXRoRGF0YUluQ29udGV4
dCh2YWx1ZSwgZW1wdHlTdHJpbmcoKSwgY29udGV4dCk7CisgICAgZWxzZSBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W0FWTWV0YWRhdGFJdGVtIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBqc1Zh
bHVlV2l0aEFWTWV0YWRhdGFJdGVtSW5Db250ZXh0KHZhbHVlLCBjb250ZXh0KTsKKworICAgIHJl
dHVybiBuaWw7Cit9CisKK3N0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGVt
SW5Db250ZXh0KEFWTWV0YWRhdGFJdGVtVHlwZSAqaXRlbSwgSlNDb250ZXh0ICpjb250ZXh0KQor
eworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGRpY3Rpb25hcnkgPSBbTlNNdXRhYmxlRGljdGlv
bmFyeSBkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6W2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXV07CisK
KyAgICBpZiAoaXRlbS5rZXlTcGFjZSkKKyAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Oml0
ZW0ua2V5U3BhY2UgZm9yS2V5OkAia2V5c3BhY2UiXTsKKworICAgIGlmIChpdGVtLmtleSkKKyAg
ICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Oml0ZW0ua2V5IGZvcktleTpAImtleSJdOworCisg
ICAgaWYgKGl0ZW0ubG9jYWxlKQorICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6aXRlbS5s
b2NhbGUgZm9yS2V5OkAibG9jYWxlIl07CisKKyAgICBpZiAoQ01USU1FX0lTX1ZBTElEKGl0ZW0u
dGltZSkpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHRpbWVEaWN0ID0gQ01UaW1lQ29weUFz
RGljdGlvbmFyeShpdGVtLnRpbWUsIGtDRkFsbG9jYXRvckRlZmF1bHQpOworCisgICAgICAgIGlm
ICh0aW1lRGljdCkgeworICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OihpZCl0aW1l
RGljdCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKKyAgICAgICAgICAgIENGUmVsZWFzZSh0aW1lRGlj
dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGl0ZW0udmFsdWUpIHsKKyAgICAg
ICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOworICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xh
c3M6W05TRGF0YSBjbGFzc11dICYmIE5TU3RyaW5nICptaW1lVHlwZSA9IFtbaXRlbSBleHRyYUF0
dHJpYnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBlIl0pIHsKKyAgICAgICAgICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjREYXRhOworICAgICAgICAgICAgYmFzZTY0RW5jb2RlKFt2YWx1ZSBieXRl
c10sIFt2YWx1ZSBsZW5ndGhdLCBiYXNlNjREYXRhKTsKKyAgICAgICAgICAgIFN0cmluZyBkYXRh
NjQgPSAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICAg
ICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCkgZm9yS2V5OkAidmFsdWUiXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbZGlj
dGlvbmFyeSBzZXRPYmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKKyAgICB9CisKKyAgICBy
ZXR1cm4ganNWYWx1ZVdpdGhEaWN0aW9uYXJ5SW5Db250ZXh0KGRpY3Rpb25hcnksIGNvbnRleHQp
OworfQorCitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6dGltZWRN
ZXRhRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsK
KyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmRvY3VtZW50KCkuZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKwor
ICAgIE5TQXJyYXkgKm1ldGFEYXRhID0gcGFyZW50LT5wbGF5ZXIoKS0+dGltZWRNZXRhZGF0YSgp
OworICAgIGlmICghbWV0YURhdGEpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworCisg
ICAgSlNDb250ZXh0ICpqc0NvbnRleHQgPSBmcmFtZS0+c2NyaXB0KCkuamF2YVNjcmlwdENvbnRl
eHQoKTsKKyAgICBKU1ZhbHVlICptZXRhRGF0YVZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29u
dGV4dChtZXRhRGF0YSwganNDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gdG9KUyhleGVjLCBb
bWV0YURhdGFWYWx1ZSBKU1ZhbHVlUmVmXSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyNlbmRpZgorfQorCitKU0M6OkpTVmFsdWUg
SlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6YWNjZXNzTG9nKEpTQzo6RXhlY1N0YXRlKiBl
eGVjKSBjb25zdAoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICBIVE1MVmlkZW9FbGVtZW50KiBw
YXJlbnQgPSBpbXBsKCkucGFyZW50RWxlbWVudCgpOworICAgIGlmICghcGFyZW50IHx8ICFwYXJl
bnQtPnBsYXllcigpKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKworICAgIEZyYW1l
KiBmcmFtZSA9IHBhcmVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworCisgICAgSlNWYWx1ZSAqZGljdGlvbmFyeSA9
IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpmcmFtZS0+c2NyaXB0KCkuamF2
YVNjcmlwdENvbnRleHQoKV07CisgICAgU3RyaW5nIGFjY2Vzc0xvZ1N0cmluZyA9IHBhcmVudC0+
cGxheWVyKCktPmFjY2Vzc0xvZygpOworICAgIFtkaWN0aW9uYXJ5IHNldFZhbHVlOnN0YXRpY19j
YXN0PE5TU3RyaW5nICo+KGFjY2Vzc0xvZ1N0cmluZykgZm9yUHJvcGVydHk6KE5TU3RyaW5nICop
Q0ZTVFIoImV4dGVuZGVkTG9nIildOworCisgICAgcmV0dXJuIHRvSlMoZXhlYywgW2RpY3Rpb25h
cnkgSlNWYWx1ZVJlZl0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7CisjZW5kaWYKK30KKworSlNDOjpKU1ZhbHVlIEpTUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6OmVycm9yTG9nKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjb25zdAor
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICBIVE1MVmlkZW9FbGVtZW50KiBwYXJlbnQgPSBpbXBs
KCkucGFyZW50RWxlbWVudCgpOworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPnBsYXllcigp
KQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IHBh
cmVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOworCisgICAgSlNWYWx1ZSAqZGljdGlvbmFyeSA9IFtKU1ZhbHVlIHZh
bHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpmcmFtZS0+c2NyaXB0KCkuamF2YVNjcmlwdENvbnRl
eHQoKV07CisgICAgU3RyaW5nIGVycm9yTG9nU3RyaW5nID0gcGFyZW50LT5wbGF5ZXIoKS0+ZXJy
b3JMb2coKTsKKyAgICBbZGljdGlvbmFyeSBzZXRWYWx1ZTpzdGF0aWNfY2FzdDxOU1N0cmluZyAq
PihlcnJvckxvZ1N0cmluZykgZm9yUHJvcGVydHk6KE5TU3RyaW5nICopQ0ZTVFIoImV4dGVuZGVk
TG9nIildOworCisgICAgcmV0dXJuIHRvSlMoZXhlYywgW2RpY3Rpb25hcnkgSlNWYWx1ZVJlZl0p
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7CisjZW5kaWYKIH0KKworfQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2NjQxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJCTA3Mjc3RTU0MTdEMDE4Q0MwMDE1NTM0RCAv
KiBKU01lZGlhU3RyZWFtVHJhY2tFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI3N0U0ODE3RDAxOENDMDAxNTUzNEQgLyogSlNNZWRpYVN0
cmVhbVRyYWNrRXZlbnQuY3BwICovOyB9OwogCQkwNzI3N0U1NTE3RDAxOENDMDAxNTUzNEQgLyog
SlNNZWRpYVN0cmVhbVRyYWNrRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3Mjc3RTQ5MTdEMDE4Q0MwMDE1NTM0RCAvKiBKU01lZGlhU3RyZWFt
VHJhY2tFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTA3MkFFMUU1MTgzQzA3NDEwMDBBNTk4OCAvKiBQbHVnaW5SZXBsYWNlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyQUUxREYxODND
MDc0MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2VtZW50LmggKi87IH07Ci0JCTA3MkFFMUU2MTgz
QzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzJBRTFFMDE4M0MwNzQxMDAw
QTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwICovOyB9OworCQkwNzJBRTFF
NjE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzJBRTFFMDE4M0MwNzQx
MDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0gKi87IH07CiAJCTA3MkFF
MUU4MTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyQUUxRTIxODNDMDc0
MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmggKi87IH07CiAJCTA3MkM4
QjExMTMxQzUxODYwMEE0RkNFOSAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2RjBEMDkx
MkI4MTkyNzAwQzI2QUE0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAgKi87
IH07CiAJCTA3MkNBODYxMTZDQjREQzMwMDhBRTEzMSAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MkNB
ODYwMTZDQjREQzMwMDhBRTEzMSAvKiBDYXB0aW9uVXNlclByZWZlcmVuY2VzLmNwcCAqLzsgfTsK
QEAgLTcwMDgsNyArNzAwOCw3IEBACiAJCTA3MjlCMTRFMTdDRkNDQTAwMDRGMUQ2MCAvKiBNZWRp
YVN0cmVhbUNlbnRlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYVN0cmVhbUNlbnRlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA3MjlCMTRGMTdDRkNDQTAwMDRGMUQ2MCAvKiBNZWRpYVN0cmVhbUNlbnRlck1hYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUNlbnRlck1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzJBRTFERjE4M0MwNzQxMDAwQTU5ODggLyogUGx1
Z2luUmVwbGFjZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGx1Z2lu
UmVwbGFjZW1lbnQuaDsgcGF0aCA9IHBsdWdpbnMvUGx1Z2luUmVwbGFjZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcDsgcGF0aCA9IHBsdWdpbnMvUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwNzJBRTFFMDE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBRdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5tbTsgcGF0aCA9IHBsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MkFFMUUxMTgzQzA3NDEwMDBB
NTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jc3MgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNz
czsgbmFtZSA9IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNzczsgcGF0aCA9IHBsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwNzJBRTFFMjE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQuaDsgcGF0aCA9IHBsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyQUUxRTMxODNDMDc0MTAwMEE1OTg4IC8q
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBR
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGw7IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MjU5
LDcgKzE0MjU5LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJ
MDcyQUUxREYxODNDMDc0MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2VtZW50LmggKi8sCi0JCQkJ
MDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNw
cCAqLywKKwkJCQkwNzJBRTFFMDE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQubW0gKi8sCiAJCQkJMDcyQUUxRTExODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50LmNzcyAqLywKIAkJCQkwNzJBRTFFMjE4M0MwNzQxMDAwQTU5ODgg
LyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCAqLywKIAkJCQkwNzJBRTFFMzE4M0MwNzQx
MDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsICovLApAQCAtMjg1NTQs
NyArMjg1NTQsNyBAQAogCQkJCUU0RDY4Nzc3MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnZWFibGVC
dWZmZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQyQUY3QUExMDJDRERF
QTAwOEZENEQzIC8qIFF1aWNrTG9vay5tbSBpbiBTb3VyY2VzICovLAotCQkJCTA3MkFFMUU2MTgz
QzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwNzJBRTFFNjE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzNzlFMzcxNjEzNzM2QTY2MDBCOUU5MTkg
LyogUXVvdGVkUHJpbnRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVBNTc0RjI4MTMxREI5
NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzRENC
MTI1MUYxMkQwMDNFRjI2OSAvKiBSYWRpb0lucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAJKHJldmlzaW9uIDE2NjQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDYgKzY0MCwyMSBAQCB2b2lk
IE1lZGlhUGxheWVyOjpzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2CiB7CiAgICAgbV9wcml2YXRlLT5z
ZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KGdyYXZpdHkpOwogfQorCitOU0FycmF5ICpNZWRpYVBs
YXllcjo6dGltZWRNZXRhZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGlt
ZWRNZXRhZGF0YSgpOworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXI6OmFjY2Vzc0xvZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YWNjZXNzTG9nKCk7Cit9CisKK1N0cmluZyBNZWRp
YVBsYXllcjo6ZXJyb3JMb2coKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmVycm9y
TG9nKCk7Cit9CiAjZW5kaWYKIAogTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXll
cjo6bmV0d29ya1N0YXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMTY2NDEwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiAr
NjIsNyBAQAogCiBPQkpDX0NMQVNTIEFWQXNzZXQ7CiBPQkpDX0NMQVNTIEFWUGxheWVyOworT0JK
Q19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBRVE1vdmllOwogCiBjbGFzcyBBVkNGUGxheWVy
OwpAQCAtMzA4LDcgKzMwOSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWaWRlb0Z1bGxzY3Jl
ZW5GcmFtZShGbG9hdFJlY3QpOwogICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlkZW9HcmF2aXR5
UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dEZpbGwgfTsKICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkoVmlkZW9HcmF2aXR5
KTsKKworICAgIE5TQXJyYXkgKnRpbWVkTWV0YWRhdGEoKSBjb25zdDsKKyAgICBTdHJpbmcgYWNj
ZXNzTG9nKCkgY29uc3Q7CisgICAgU3RyaW5nIGVycm9yTG9nKCkgY29uc3Q7CiAjZW5kaWYKKwog
ICAgIEludFNpemUgbmF0dXJhbFNpemUoKTsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CiAg
ICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgJKHJldmlzaW9uIDE2NjQx
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUoRmxvYXRSZWN0KSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eShNZWRpYVBsYXllcjo6VmlkZW9H
cmF2aXR5KSB7IH0KKworICAgIHZpcnR1YWwgTlNBcnJheSAqdGltZWRNZXRhZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBhY2Nlc3NMb2coKSBjb25zdCB7IHJl
dHVybiBlbXB0eVN0cmluZygpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgZXJyb3JMb2coKSBjb25z
dCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CiAjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBw
bGF5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpID0gMDsgICAgCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLmgJKHJldmlzaW9uIDE2NjQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHByZXNlbnRhdGlvblNpemVEaWRDaGFuZ2UoRmxvYXRTaXplKTsKICAgICB2b2lk
IGR1cmF0aW9uRGlkQ2hhbmdlKGRvdWJsZSk7CiAgICAgdm9pZCByYXRlRGlkQ2hhbmdlKGRvdWJs
ZSk7CisgICAgdm9pZCBtZXRhZGF0YURpZEFycml2ZShSZXRhaW5QdHI8TlNBcnJheT4pOwogCiAj
aWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQogICAgIHZvaWQgb3V0cHV0TWVkaWFE
YXRhV2lsbENoYW5nZShBVlBsYXllckl0ZW1WaWRlb091dHB1dCopOwpAQCAtMTUyLDcgKzE1Mywx
MiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQ
bGF0Zm9ybUxheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkZyYW1l
KEZsb2F0UmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHko
TWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSk7CisKKyAgICB2aXJ0dWFsIE5TQXJyYXkgKnRpbWVk
TWV0YWRhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFN0cmluZyBhY2Nlc3NMb2co
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBlcnJvckxvZygpIGNvbnN0OwogI2VuZGlmCisK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG1lZGlhVGltZUZvclRpbWVWYWx1ZShm
bG9hdCkgY29uc3Q7CiAgICAgdmlydHVhbCBkb3VibGUgbWF4aW11bUR1cmF0aW9uVG9DYWNoZU1l
ZGlhVGltZSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KQEAgLTMwMSw2ICszMDcsNyBAQCBwcml2YXRl
OgogICAgIG11dGFibGUgUmV0YWluUHRyPE5TQXJyYXk+IG1fY2FjaGVkU2Vla2FibGVSYW5nZXM7
CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNBcnJheT4gbV9jYWNoZWRMb2FkZWRSYW5nZXM7CiAg
ICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fY2FjaGVkVHJhY2tzOworICAgIFJldGFpblB0cjxOU0Fy
cmF5PiBtX2N1cnJlbnRNZXRhRGF0YTsKICAgICBGbG9hdFNpemUgbV9jYWNoZWRQcmVzZW50YXRp
b25TaXplOwogICAgIGRvdWJsZSBtX2NhY2hlZER1cmF0aW9uOwogICAgIGRvdWJsZSBtX2NhY2hl
ZFJhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDE2NjQxMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk4LDYg
Kzk4LDggQEAgQGludGVyZmFjZSBBVlBsYXllckl0ZW0gKFdlYktpdEV4dGVuc2lvbgogQGVuZAog
I2VuZGlmCiAKK3R5cGVkZWYgQVZNZXRhZGF0YUl0ZW0gQVZNZXRhZGF0YUl0ZW1UeXBlOworCiBT
T0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKIFNPRlRfTElOS19GUkFN
RVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChD
b3JlSW1hZ2UpCkBAIC0xMzIsNiArMTM0LDggQEAgU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlv
biwgQVZQbGF5ZXJJdAogU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZQbGF5ZXJMYXll
cikKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWVVJMQXNzZXQpCiBTT0ZUX0xJTktf
Q0xBU1MoQVZGb3VuZGF0aW9uLCBBVkFzc2V0SW1hZ2VHZW5lcmF0b3IpCitTT0ZUX0xJTktfQ0xB
U1MoQVZGb3VuZGF0aW9uLCBBVk1ldGFkYXRhSXRlbSkKKwogU09GVF9MSU5LX0NMQVNTKENvcmVJ
bWFnZSwgQ0lDb250ZXh0KQogU09GVF9MSU5LX0NMQVNTKENvcmVJbWFnZSwgQ0lJbWFnZSkKIApA
QCAtMTU2LDYgKzE2MCw3IEBAIFNPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVRpbWVa
ZXIKICNkZWZpbmUgQVZQbGF5ZXJMYXllciBnZXRBVlBsYXllckxheWVyQ2xhc3MoKQogI2RlZmlu
ZSBBVlVSTEFzc2V0IGdldEFWVVJMQXNzZXRDbGFzcygpCiAjZGVmaW5lIEFWQXNzZXRJbWFnZUdl
bmVyYXRvciBnZXRBVkFzc2V0SW1hZ2VHZW5lcmF0b3JDbGFzcygpCisjZGVmaW5lIEFWTWV0YWRh
dGFJdGVtIGdldEFWTWV0YWRhdGFJdGVtQ2xhc3MoKQogCiAjZGVmaW5lIEFWTWVkaWFDaGFyYWN0
ZXJpc3RpY1Zpc3VhbCBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwoKQogI2RlZmluZSBB
Vk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGli
bGUoKQpAQCAtODQ3LDYgKzg1MiwzNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAKICAgICBbbV92aWRlb0xheWVyIHNldFZpZGVvR3Jhdml0eTp2aWRlb0dyYXZp
dHldOwogfQorCitOU0FycmF5ICpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0
aW1lZE1ldGFkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9jdXJyZW50TWV0YURhdGEpCisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRNZXRhRGF0YS5nZXQoKTsKKyAgICByZXR1cm4gbmlsOworfQor
CitTdHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YWNjZXNzTG9nKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtKQorICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKKyAgICAKKyAgICBBVlBsYXllckl0ZW1BY2Nlc3NMb2cgKmxvZyA9IFttX2F2UGxh
eWVySXRlbS5nZXQoKSBhY2Nlc3NMb2ddOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gbG9nU3Ry
aW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6W2xvZyBleHRlbmRl
ZExvZ0RhdGFdIGVuY29kaW5nOltsb2cgZXh0ZW5kZWRMb2dEYXRhU3RyaW5nRW5jb2RpbmddXSk7
CisKKyAgICByZXR1cm4gbG9nU3RyaW5nLmdldCgpOworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZXJyb3JMb2coKSBjb25zdAoreworICAgIGlmICghbV9h
dlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgQVZQbGF5
ZXJJdGVtRXJyb3JMb2cgKmxvZyA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBlcnJvckxvZ107Cisg
ICAgUmV0YWluUHRyPE5TU3RyaW5nPiBsb2dTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxs
b2NdIGluaXRXaXRoRGF0YTpbbG9nIGV4dGVuZGVkTG9nRGF0YV0gZW5jb2Rpbmc6W2xvZyBleHRl
bmRlZExvZ0RhdGFTdHJpbmdFbmNvZGluZ11dKTsKKworICAgIHJldHVybiBsb2dTdHJpbmcuZ2V0
KCk7Cit9CiAjZW5kaWYKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpwbGF0Zm9ybVNldFZpc2libGUoYm9vbCBpc1Zpc2libGUpCkBAIC0yMTkyLDYgKzIyMjYsMTQg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIHVwZGF0ZVN0
YXRlcygpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1l
dGFkYXRhRGlkQXJyaXZlKFJldGFpblB0cjxOU0FycmF5PiBtZXRhZGF0YSkKK3sKKyAgICBpZiAo
IW1ldGFkYXRhIHx8IFttZXRhZGF0YSBpc0tpbmRPZkNsYXNzOltOU051bGwgY2xhc3NdXSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50TWV0YURhdGEgPSBtZXRhZGF0YTsKK30KKwog
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0cmFja3NEaWRDaGFuZ2Uo
UmV0YWluUHRyPE5TQXJyYXk+IHRyYWNrcykKIHsKICAgICBtX2NhY2hlZFRyYWNrcyA9IHRyYWNr
czsKQEAgLTIyNzAsNiArMjMxMiw3IEBAIE5TQXJyYXkqIGl0ZW1LVk9Qcm9wZXJ0aWVzKCkKICAg
ICAgICAgICAgICAgICBAInBsYXliYWNrQnVmZmVyRW1wdHkiLAogICAgICAgICAgICAgICAgIEAi
ZHVyYXRpb24iLAogICAgICAgICAgICAgICAgIEAiaGFzRW5hYmxlZEF1ZGlvIiwKKyAgICAgICAg
ICAgICAgICBAInRpbWVkTWV0YWRhdGEiLAogICAgICAgICAgICAgICAgIG5pbF07CiAgICAgfQog
ICAgIHJldHVybiBrZXlzOwpAQCAtMjM1Nyw2ICsyNDAwLDggQEAgLSAodm9pZClvYnNlcnZlVmFs
dWVGb3JLZXlQYXRoOmtleVBhdGggbwogICAgICAgICAgICAgZnVuY3Rpb24gPSBXVEY6OmJpbmQo
Jk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnByZXNlbnRhdGlvblNpemVEaWRD
aGFuZ2UsIG1fY2FsbGJhY2ssIEZsb2F0U2l6ZShbbmV3VmFsdWUgc2l6ZVZhbHVlXSkpOwogICAg
ICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJkdXJhdGlvbiJdKQogICAg
ICAgICAgICAgZnVuY3Rpb24gPSBXVEY6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OmR1cmF0aW9uRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBDTVRpbWVHZXRTZWNvbmRz
KFtuZXdWYWx1ZSBDTVRpbWVWYWx1ZV0pKTsKKyAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNF
cXVhbFRvU3RyaW5nOkAidGltZWRNZXRhZGF0YSJdICYmIG5ld1ZhbHVlKQorICAgICAgICAgICAg
ZnVuY3Rpb24gPSBXVEY6OmJpbmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
Om1ldGFkYXRhRGlkQXJyaXZlLCBtX2NhbGxiYWNrLCBSZXRhaW5QdHI8TlNBcnJheT4obmV3VmFs
dWUpKTsKICAgICB9CiAKICAgICBpZiAoY29udGV4dCA9PSBNZWRpYVBsYXllckFWRm91bmRhdGlv
bk9ic2VydmF0aW9uQ29udGV4dFBsYXllciAmJiAhd2lsbENoYW5nZSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228334</attachid>
            <date>2014-04-01 16:07:12 -0700</date>
            <delta_ts>2014-04-02 12:03:56 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_9.txt</filename>
            <type>text/plain</type>
            <size>50146</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjU5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE0LTA0LTAxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIGFkZCBtaXNz
aW5nIFF1aWNrVGltZSBwbHVnLWluIHJlcGxhY2VtZW50IEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDQyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFF1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50LmNwcCB0byBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSB0byBtYWtlIGl0IHBv
c3NpYmxlCisgICAgICAgIHRvIHVzZSB0aGUgT2JqQyBKU0MgQVBJLgorICAgICAgICAqIE1vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAg
ICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbDoKKworICAg
ICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qczoKKyAg
ICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS50aW1lZE1ldGFkYXRhVXBkYXRlcyk6IEltcGxl
bWVudC4KKyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5hY2Nlc3NMb2cpOiBEaXR0by4K
KyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5lcnJvckxvZyk6IERpdHRvLgorCisgICAg
ICAgIFVzZSB0aGUgSlNDIE9iakMgQVBJIHRvIGNyZWF0ZSBhIEphdmFTY3JpcHQgb2JqZWN0IGZy
b20gYW4gYXJyYXkgb2YgQVZNZXRhZGF0YUl0ZW1zLiBUaGUKKyAgICAgICAgSlNDIE9iakMgQVBJ
IHN1cHBvcnRzIGJhc2ljIE5TVHlwZXMsIGJ1dCBhbiBBVk1ldGFkYXRhSXRlbSBjYW4gYWxzbyBj
b250YWluIE5TRGF0YSB3aGljaCAKKyAgICAgICAgdGhlIGV4aXN0aW5nIHBsdWctaW4gcmV0dXJu
cyBhcyBiYXNlLTY0IGVuY29kZWQgZGF0YSwgc28gY3JlYXRlIHdyYXBwZXJzIGZvciBOU0RpY3Rp
b25hcnkKKyAgICAgICAgYW5kIE5TQXJyYXkuCisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2Ny
aXB0SW5qZWN0ZWQpOiBEaXNhbWJpZ3VhdGUgd2l0aCAiSlNDOjoiCisgICAgICAgIChXZWJDb3Jl
OjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOiBDcmVhdGUgSlNW
YWx1ZSogZnJvbSBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFycmF5SW5D
b250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gTlNBcnJheS4KKyAgICAgICAgKFdlYkNvcmU6
OmpzVmFsdWVXaXRoRGljdGlvbmFyeUluQ29udGV4dCk6IENyZWF0ZSBKU1ZhbHVlKiBmcm9tIE5T
RGljdGlvbmFyeS4KKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQp
OiBDcmVhdGUgSlNWYWx1ZSogZnJvbSBiYXNpYyBOU1R5cGVzIHBsdXMgQVZNZXRhZGF0YUl0ZW0K
KyAgICAgICAgICAgIGFuZCBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFW
TWV0YWRhdGFJdGVtSW5Db250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gQVZNZXRhZGF0YUl0
ZW0uCisgICAgICAgIChXZWJDb3JlOjpKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1l
ZE1ldGFEYXRhKTogU2NyaXB0IGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkpTUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmFjY2Vzc0xvZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2cpOiBEaXR0by4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQuY3BwIC0+IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXI6OnRpbWVkTWV0YWRhdGEpOiBpT1Mgb25seSBhY2Nlc3Nvci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjphY2Nlc3NMb2cpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjplcnJvckxvZyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnRpbWVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YWNjZXNzTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmVycm9yTG9nKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1ldGFk
YXRhRGlkQXJyaXZlKToKKyAgICAgICAgKFdlYkNvcmU6Oml0ZW1LVk9Qcm9wZXJ0aWVzKToKKyAg
ICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDpv
Zk9iamVjdDpjaGFuZ2U6Y29udGV4dDpdKToKKwogMjAxNC0wNC0wMSAgWmFuIERvYmVyc2VrICA8
emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4aW5nIGRlYnVn
IGJ1aWxkcyBhZnRlciByMTY2NTg2LgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVn
aW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjY0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCi0KLSNpbmNs
dWRlICJRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgotCi0jaW5jbHVkZSAiRXZlbnQuaCIK
LSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9i
amVjdC5oIgotI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0U291
cmNlQ29kZS5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlwdHMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9BUElDYXN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU3RyaW5nIHF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50U2NyaXB0KCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzY3JpcHQsIChRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dEphdmFTY3JpcHQsIHNpemVvZihRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudEphdmFTY3JpcHQp
KSk7Ci0gICAgcmV0dXJuIHNjcmlwdDsKLX0KLQotdm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudDo6cmVnaXN0ZXJQbHVnaW5SZXBsYWNlbWVudChQbHVnaW5SZXBsYWNlbWVudFJlZ2lzdHJh
ciByZWdpc3RyYXIpCi17Ci0gICAgcmVnaXN0cmFyKFJlcGxhY2VtZW50UGx1Z2luKGNyZWF0ZSwg
c3VwcG9ydHNNaW1lVHlwZSwgc3VwcG9ydHNGaWxlRXh0ZW5zaW9uKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8UGx1Z2luUmVwbGFjZW1lbnQ+IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpjcmVhdGUo
SFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50KHBsdWdpbiwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMpKTsKLX0KLQotYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6c3Vw
cG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIHN0YXRpYyBjb25z
dCBjaGFyKiB0eXBlc1tdID0gewotICAgICAgICAiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1
cmwiLCAiYXBwbGljYXRpb24veC1tcGVndXJsIiwgImF1ZGlvLzNncHAiLCAiYXVkaW8vM2dwcDIi
LCAiYXVkaW8vYWFjIiwgImF1ZGlvL2FpZmYiLAotICAgICAgICAiYXVkaW8vYW1yIiwgImF1ZGlv
L2Jhc2ljIiwgImF1ZGlvL21wMyIsICJhdWRpby9tcDQiLCAiYXVkaW8vbXBlZyIsICJhdWRpby9t
cGVnMyIsICJhdWRpby9tcGVndXJsIiwgImF1ZGlvL3NjcGxzIiwKLSAgICAgICAgImF1ZGlvL3dh
diIsICJhdWRpby94LWFhYyIsICJhdWRpby94LWFpZmYiLCAiYXVkaW8veC1jYWYiLCAiYXVkaW8v
eC1tNGEiLCAiYXVkaW8veC1tNGIiLCAiYXVkaW8veC1tNHAiLAotICAgICAgICAiYXVkaW8veC1t
NHIiLCAiYXVkaW8veC1tcDMiLCAiYXVkaW8veC1tcGVnIiwgImF1ZGlvL3gtbXBlZzMiLCAiYXVk
aW8veC1tcGVndXJsIiwgImF1ZGlvL3gtc2NwbHMiLCAiYXVkaW8veC13YXYiLAotICAgICAgICAi
dmlkZW8vM2dwcCIsICJ2aWRlby8zZ3BwMiIsICJ2aWRlby9tcDQiLCAidmlkZW8vcXVpY2t0aW1l
IiwgInZpZGVvL3gtbTR2IgotICAgIH07Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUhhc2gsICgpKTsKLSAgICBpZiAoIXR5cGVIYXNoLnNp
emUoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgo
dHlwZXMpOyArK2kpCi0gICAgICAgICAgICB0eXBlSGFzaC5hZGQodHlwZXNbaV0pOwotICAgIH0K
LQotICAgIHJldHVybiB0eXBlSGFzaC5jb250YWlucyhtaW1lVHlwZSk7Ci19Ci0KLWJvb2wgUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGV4dGVuc2lvbikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXh0ZW5zaW9uc1tdID0g
ewotICAgICAgICAiM2cyIiwgIjNncCIsICIzZ3AyIiwgIjNncHAiLCAiYWFjIiwgImFkdHMiLCAi
YWlmIiwgImFpZmMiLCAiYWlmZiIsICJBTVIiLCAiYXUiLCAiYndmIiwgImNhZiIsICJjZGRhIiwg
Im0zdSIsCi0gICAgICAgICJtM3U4IiwgIm00YSIsICJtNGIiLCAibTRwIiwgIm00ciIsICJtNHYi
LCAibW92IiwgIm1wMyIsICJtcDMiLCAibXA0IiwgIm1wZWciLCAibXBnIiwgIm1xdiIsICJwbHMi
LCAicXQiLAotICAgICAgICAic25kIiwgInN3YSIsICJ0cyIsICJ1bHciLCAid2F2IgotICAgIH07
Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgZXh0
ZW5zaW9uSGFzaCwgKCkpOwotICAgIGlmICghZXh0ZW5zaW9uSGFzaC5zaXplKCkpIHsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGV4dGVuc2lvbnMpOyAr
K2kpCi0gICAgICAgICAgICBleHRlbnNpb25IYXNoLmFkZChleHRlbnNpb25zW2ldKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZXh0ZW5zaW9uSGFzaC5jb250YWlucyhleHRlbnNpb24pOwotfQotCi1R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQoSFRN
TFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKLSAgICA6UGx1Z2luUmVwbGFjZW1l
bnQoKQotICAgICwgbV9wYXJlbnRFbGVtZW50KCZwbHVnaW4pCi0gICAgLCBtX25hbWVzKHBhcmFt
TmFtZXMpCi0gICAgLCBtX3ZhbHVlcyhwYXJhbVZhbHVlcykKLSAgICAsIG1fc2NyaXB0T2JqZWN0
KG51bGxwdHIpCi17Ci19Ci0KLVF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp+UXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQoKQotewotICAgIG1fcGFyZW50RWxlbWVudCA9IG51bGxwdHI7Ci0g
ICAgbV9zY3JpcHRPYmplY3QgPSBudWxscHRyOwotICAgIG1fbWVkaWFFbGVtZW50ID0gbnVsbHB0
cjsKLX0KLQotUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFF1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChwbHVnaW4sIG1f
cGFyZW50RWxlbWVudCA9PSAmcGx1Z2luKTsKLQotICAgIGlmIChtX21lZGlhRWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5jcmVhdGVFbGVtZW50UmVuZGVyZXIoc3RkOjpt
b3ZlKHN0eWxlKSk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotRE9NV3JhcHBlcldvcmxk
JiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aXNvbGF0ZWRXb3JsZCgpCi17Ci0gICAgc3Rh
dGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9ICpET01XcmFwcGVyV29ybGQ6OmNy
ZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1JlZigpOwotICAgIHJldHVybiBpc29s
YXRlZFdvcmxkOwotfQotCi1ib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVS
ZXBsYWNlbWVudFNjcmlwdEluamVjdGVkKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9wYXJlbnRF
bGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3Js
ZCgpOwotICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWlu
RnJhbWUoKS5zY3JpcHQoKTsKLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qo
d29ybGQpKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKLSAgICAKLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3Qt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsK
LSAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIAotICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlw
dFNvdXJjZUNvZGUocXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKSksIHdvcmxkKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgTE9HKFBsdWdpbnMsICIl
cCAtIEV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVu
dCBzY3JpcHQiLCB0aGlzKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KFNoYWRvd1Jv
b3QqIHJvb3QpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1fcGFyZW50RWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCk7Ci0KLSAgICBpZiAoIWVuc3VyZVJlcGxhY2VtZW50U2NyaXB0SW5qZWN0ZWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGlz
b2xhdGVkV29ybGQoKTsKLSAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0g
cGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCk7Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xv
YmFsT2JqZWN0KHdvcmxkKSk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgCi0gICAgLy8g
TG9va3VwIHRoZSAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiIGZ1bmN0aW9uLgotICAgIEpTVmFs
dWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwotICAgIGlmIChyZXBsYWNlbWVu
dEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBsYWNlbWVudEZ1bmN0aW9uLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHJlcGxhY2Vt
ZW50T2JqZWN0LCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlz
dDsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcm9vdCkpOwot
ICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX3BhcmVudEVsZW1l
bnQpKTsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdGhpcykp
OwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1f
bmFtZXMpKTsKLSAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBtX3ZhbHVlcykpOwotICAgIEpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJl
cGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlz
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHZXQg
dGhlIDx2aWRlbz4gY3JlYXRlZCB0byByZXBsYWNlIHRoZSBwbHVnLWluLgotICAgIEpTVmFsdWUg
dmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidmlkZW8iKSk7
Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSB0b0hUTUxWaWRlb0VsZW1lbnQodmFsdWUp
OwotCi0gICAgaWYgKCFtX21lZGlhRWxlbWVudCkgewotICAgICAgICBMT0coUGx1Z2lucywgIiVw
IC0gRmFpbGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBs
dWdpbiByZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgdGhl
IHNjcmlwdGluZyBpbnRlcmZhY2UuCi0gICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAic2NyaXB0T2JqZWN0IikpOwotICAgIGlmICghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIG1fc2NyaXB0
T2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0KLSAgICBpZiAoIW1fc2NyaXB0T2JqZWN0
KSB7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmluZCBzY3JpcHQgb2Jq
ZWN0IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudC4iLCB0aGlzKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6Om1vdmllU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbWVkaWFF
bGVtZW50KQotICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPmZpbGVTaXplKCk7Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cG9zdEV2
ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQotewotICAgIFJlZjxIVE1MUGx1Z0luRWxlbWVu
dD4gcHJvdGVjdCgqbV9wYXJlbnRFbGVtZW50KTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0g
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVlKTsKLSAgICBtX3BhcmVudEVsZW1l
bnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOwotfQotCi19Ci0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5oCShyZXZpc2lvbiAxNjY0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHdpbGxDcmVhdGVS
ZW5kZXJlcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50OyB9CiAgICAgdmlydHVh
bCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKEhUTUxQbHVn
SW5FbGVtZW50JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4pIG92ZXJyaWRlOwogCisgICAgSFRNTFZp
ZGVvRWxlbWVudCogcGFyZW50RWxlbWVudCgpIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgp
OyB9CisKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbW92aWVTaXplKCkgY29uc3Q7CiAgICAgdm9p
ZCBwb3N0RXZlbnQoY29uc3QgU3RyaW5nJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
LmlkbAkocmV2aXNpb24gMTY2NDEwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjksNSAr
MjksOCBAQAogICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0LAogXSBpbnRlcmZhY2UgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxvbmcgbW92aWVTaXplOworICAgIFtDdXN0b21HZXR0ZXJdIHJlYWRvbmx5IGF0dHJpYnV0ZSBh
bnkgdGltZWRNZXRhRGF0YTsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUg
YW55IGFjY2Vzc0xvZzsKKyAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgYW55
IGVycm9yTG9nOwogICAgIHZvaWQgcG9zdEV2ZW50KERPTVN0cmluZyBldmVudE5hbWUpOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMv
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuanMJKHJldmlzaW9uIDE2NjQxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzIyLDE5ICszMjIsMjggQEAgUmVwbGFjZW1lbnQucHJvdG90eXBl
ID0gewogICAgIAogICAgIHRpbWVkTWV0YWRhdGFVcGRhdGVzOiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICAvLyBGSVhNRTogbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLmhvc3QudGltZWRNZXRhRGF0YTsKKyAgICAgICAgfSBjYXRj
aChlKSB7IH0KKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9LAogICAgIAogICAgIGFjY2Vz
c0xvZzogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IG5vdCBpbXBsZW1lbnRl
ZCB5ZXQuCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5ob3N0LmFjY2Vz
c0xvZzsKKyAgICAgICAgfSBjYXRjaChlKSB7IH0KKwogICAgICAgICByZXR1cm4gbnVsbDsKICAg
ICB9LAogICAgIAogICAgIGVycm9yTG9nOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICAvLyBG
SVhNRTogbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmhvc3QuZXJyb3JMb2c7CisgICAgICAgIH0gY2F0Y2goZSkgeyB9CisKICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgfSwKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
CShyZXZpc2lvbiAxNjY0MTApCShmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA6MTY2NDEwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNRURJQV9DT05U
Uk9MU19TQ1JJUFQpCisKKyNpbmNsdWRlICJRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgor
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlw
dHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1
ZUlubGluZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgU3RyaW5nIHF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50U2NyaXB0KCkKK3sK
KyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzY3JpcHQsIChRdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudEphdmFTY3JpcHQsIHNpemVvZihRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudEphdmFTY3JpcHQpKSk7CisgICAgcmV0dXJuIHNjcmlwdDsKK30KKwordm9pZCBR
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cmVnaXN0ZXJQbHVnaW5SZXBsYWNlbWVudChQbHVn
aW5SZXBsYWNlbWVudFJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKFJlcGxh
Y2VtZW50UGx1Z2luKGNyZWF0ZSwgc3VwcG9ydHNNaW1lVHlwZSwgc3VwcG9ydHNGaWxlRXh0ZW5z
aW9uKSk7Cit9CisKK1Bhc3NSZWZQdHI8UGx1Z2luUmVwbGFjZW1lbnQ+IFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50OjpjcmVhdGUoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVl
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
KHBsdWdpbiwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpKTsKK30KKworYm9vbCBRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlc1tdID0geworICAgICAgICAiYXBwbGlj
YXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLCAiYXBwbGljYXRpb24veC1tcGVndXJsIiwgImF1ZGlv
LzNncHAiLCAiYXVkaW8vM2dwcDIiLCAiYXVkaW8vYWFjIiwgImF1ZGlvL2FpZmYiLAorICAgICAg
ICAiYXVkaW8vYW1yIiwgImF1ZGlvL2Jhc2ljIiwgImF1ZGlvL21wMyIsICJhdWRpby9tcDQiLCAi
YXVkaW8vbXBlZyIsICJhdWRpby9tcGVnMyIsICJhdWRpby9tcGVndXJsIiwgImF1ZGlvL3NjcGxz
IiwKKyAgICAgICAgImF1ZGlvL3dhdiIsICJhdWRpby94LWFhYyIsICJhdWRpby94LWFpZmYiLCAi
YXVkaW8veC1jYWYiLCAiYXVkaW8veC1tNGEiLCAiYXVkaW8veC1tNGIiLCAiYXVkaW8veC1tNHAi
LAorICAgICAgICAiYXVkaW8veC1tNHIiLCAiYXVkaW8veC1tcDMiLCAiYXVkaW8veC1tcGVnIiwg
ImF1ZGlvL3gtbXBlZzMiLCAiYXVkaW8veC1tcGVndXJsIiwgImF1ZGlvL3gtc2NwbHMiLCAiYXVk
aW8veC13YXYiLAorICAgICAgICAidmlkZW8vM2dwcCIsICJ2aWRlby8zZ3BwMiIsICJ2aWRlby9t
cDQiLCAidmlkZW8vcXVpY2t0aW1lIiwgInZpZGVvL3gtbTR2IgorICAgIH07CisgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgdHlwZUhhc2gsICgpKTsK
KyAgICBpZiAoIXR5cGVIYXNoLnNpemUoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgodHlwZXMpOyArK2kpCisgICAgICAgICAgICB0eXBlSGFzaC5h
ZGQodHlwZXNbaV0pOworICAgIH0KKworICAgIHJldHVybiB0eXBlSGFzaC5jb250YWlucyhtaW1l
VHlwZSk7Cit9CisKK2Jvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmls
ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZXh0ZW5zaW9uc1tdID0geworICAgICAgICAiM2cyIiwgIjNncCIsICIzZ3AyIiwgIjNn
cHAiLCAiYWFjIiwgImFkdHMiLCAiYWlmIiwgImFpZmMiLCAiYWlmZiIsICJBTVIiLCAiYXUiLCAi
YndmIiwgImNhZiIsICJjZGRhIiwgIm0zdSIsCisgICAgICAgICJtM3U4IiwgIm00YSIsICJtNGIi
LCAibTRwIiwgIm00ciIsICJtNHYiLCAibW92IiwgIm1wMyIsICJtcDMiLCAibXA0IiwgIm1wZWci
LCAibXBnIiwgIm1xdiIsICJwbHMiLCAicXQiLAorICAgICAgICAic25kIiwgInN3YSIsICJ0cyIs
ICJ1bHciLCAid2F2IgorICAgIH07CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KEhhc2hTZXQ8U3RyaW5nPiwgZXh0ZW5zaW9uSGFzaCwgKCkpOworICAgIGlmICghZXh0ZW5zaW9u
SGFzaC5zaXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlf
TEVOR1RIKGV4dGVuc2lvbnMpOyArK2kpCisgICAgICAgICAgICBleHRlbnNpb25IYXNoLmFkZChl
eHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXh0ZW5zaW9uSGFzaC5jb250YWlu
cyhleHRlbnNpb24pOworfQorCitRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6UXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQmIHBsdWdpbiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykK
KyAgICA6UGx1Z2luUmVwbGFjZW1lbnQoKQorICAgICwgbV9wYXJlbnRFbGVtZW50KCZwbHVnaW4p
CisgICAgLCBtX25hbWVzKHBhcmFtTmFtZXMpCisgICAgLCBtX3ZhbHVlcyhwYXJhbVZhbHVlcykK
KyAgICAsIG1fc2NyaXB0T2JqZWN0KG51bGxwdHIpCit7Cit9CisKK1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Ojp+UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQoKQoreworICAgIG1fcGFyZW50
RWxlbWVudCA9IG51bGxwdHI7CisgICAgbV9zY3JpcHRPYmplY3QgPSBudWxscHRyOworICAgIG1f
bWVkaWFFbGVtZW50ID0gbnVsbHB0cjsKK30KKworUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoSFRNTFBsdWdJ
bkVsZW1lbnQmIHBsdWdpbiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCit7CisgICAgQVNT
RVJUX1VOVVNFRChwbHVnaW4sIG1fcGFyZW50RWxlbWVudCA9PSAmcGx1Z2luKTsKKworICAgIGlm
IChtX21lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFFbGVtZW50LT5jcmVhdGVF
bGVtZW50UmVuZGVyZXIoc3RkOjptb3ZlKHN0eWxlKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworRE9NV3JhcHBlcldvcmxkJiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aXNvbGF0
ZWRXb3JsZCgpCit7CisgICAgc3RhdGljIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCA9
ICpET01XcmFwcGVyV29ybGQ6OmNyZWF0ZShKU0RPTVdpbmRvdzo6Y29tbW9uVk0oKSkubGVha1Jl
ZigpOworICAgIHJldHVybiBpc29sYXRlZFdvcmxkOworfQorCitib29sIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50OjplbnN1cmVSZXBsYWNlbWVudFNjcmlwdEluamVjdGVkKCkKK3sKKyAgICBQ
YWdlKiBwYWdlID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBET01XcmFwcGVyV29ybGQm
IHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOworICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENv
bnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUoKS5zY3JpcHQoKTsKKyAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29u
dHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHJlcGxhY2VtZW50RnVu
Y3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGVQ
bHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1bmN0
aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHNjcmlwdENvbnRyb2xsZXIu
ZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnRTY3JpcHQoKSksIHdvcmxkKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgUXVpY2tU
aW1lIHBsdWdpbiByZXBsYWNlbWVudCBzY3JpcHQiLCB0aGlzKTsKKyAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFs
bFJlcGxhY2VtZW50KFNoYWRvd1Jvb3QqIHJvb3QpCit7CisgICAgUGFnZSogcGFnZSA9IG1fcGFy
ZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCk7CisKKyAgICBpZiAoIWVuc3VyZVJlcGxhY2Vt
ZW50U2NyaXB0SW5qZWN0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKKyAgICBTY3JpcHRDb250cm9sbGVy
JiBzY3JpcHRDb250cm9sbGVyID0gcGFnZS0+bWFpbkZyYW1lKCkuc2NyaXB0KCk7CisgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CisgICAgCisgICAgLy8gTG9va3VwIHRoZSAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQi
IGZ1bmN0aW9uLgorICAgIEpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50Iikp
OworICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBs
YWNlbWVudEZ1bmN0aW9uLnRvT2JqZWN0KGV4ZWMpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOwor
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKKyAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgcm9vdCkpOworICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBtX3BhcmVudEVsZW1lbnQpKTsKKyAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgdGhpcykpOworICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihl
eGVjLCBnbG9iYWxPYmplY3QsIG1fbmFtZXMpKTsKKyAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0
cmluZz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX3ZhbHVlcykpOworICAgIEpTVmFsdWUgcmVwbGFj
ZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEs
IGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBHZXQgdGhlIDx2aWRlbz4gY3JlYXRlZCB0byByZXBsYWNlIHRoZSBw
bHVnLWluLgorICAgIEpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAidmlkZW8iKSk7CisgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSB0b0hU
TUxWaWRlb0VsZW1lbnQodmFsdWUpOworCisgICAgaWYgKCFtX21lZGlhRWxlbWVudCkgeworICAg
ICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFpbGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNy
ZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Cisg
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2UuCisgICAgdmFsdWUgPSBy
ZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAic2NyaXB0T2JqZWN0IikpOwor
ICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7CisKKyAg
ICBpZiAoIW1fc2NyaXB0T2JqZWN0KSB7CisgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWls
ZWQgdG8gZmluZCBzY3JpcHQgb2JqZWN0IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBs
YWNlbWVudC4iLCB0aGlzKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25l
ZCBsb25nIGxvbmcgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Om1vdmllU2l6ZSgpIGNvbnN0
Cit7CisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1l
bnQtPmZpbGVTaXplKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBRdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudDo6cG9zdEV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQoreworICAg
IFJlZjxIVE1MUGx1Z0luRWxlbWVudD4gcHJvdGVjdCgqbV9wYXJlbnRFbGVtZW50KTsKKyAgICBS
ZWZQdHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZhbHNlLCB0cnVl
KTsKKyAgICBtX3BhcmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOworfQor
Cit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywzNCArMjMsNDggQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKKyNpbXBvcnQgImNvbmZpZy5oIgogCiAjaWYgRU5B
QkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKIAotI2luY2x1ZGUgIlF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50LmgiCisjaW1wb3J0ICJRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgogCi0j
aW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTSFRNTFZpZGVvRWxlbWVudC5o
IgotI2luY2x1ZGUgIkpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlwdHMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNCYXNlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlu
bGluZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKKyNpbXBvcnQgIkV2ZW50LmgiCisjaW1w
b3J0ICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTFZpZGVvRWxlbWVudC5oIgor
I2ltcG9ydCAiSlNET01CaW5kaW5nLmgiCisjaW1wb3J0ICJKU0RPTUdsb2JhbE9iamVjdC5oIgor
I2ltcG9ydCAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJKU1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNYWluRnJhbWUu
aCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlJlbmRlckVsZW1lbnQuaCIKKyNpbXBvcnQg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbXBv
cnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJVc2VyQWdlbnRTY3JpcHRzLmgiCisjaW1wb3J0
IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNT
dHJpbmcuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQu
aD4KKworU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCitTT0ZUX0xJTkso
Q29yZU1lZGlhLCBDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5LCBDRkRpY3Rpb25hcnlSZWYsIChDTVRp
bWUgdGltZSwgQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yKSwgKHRpbWUsIGFsbG9jYXRvcikpCisK
K3R5cGVkZWYgQVZNZXRhZGF0YUl0ZW0gQVZNZXRhZGF0YUl0ZW1UeXBlOworU09GVF9MSU5LX0ZS
QU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0
aW9uLCBBVk1ldGFkYXRhSXRlbSkKKyNkZWZpbmUgQVZNZXRhZGF0YUl0ZW0gZ2V0QVZNZXRhZGF0
YUl0ZW1DbGFzcygpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIEpTVmFsdWUgKmpz
VmFsdWVXaXRoVmFsdWVJbkNvbnRleHQoaWQsIEpTQ29udGV4dCAqKTsKK3N0YXRpYyBKU1ZhbHVl
ICpqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGVtSW5Db250ZXh0KEFWTWV0YWRhdGFJdGVtVHlwZSAq
LCBKU0NvbnRleHQgKik7CisKIHN0YXRpYyBTdHJpbmcgcXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnRTY3JpcHQoKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHNjcmlwdCwgKFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCwgc2l6ZW9mKFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCkpKTsKQEAgLTE0MSwxMCArMTU1LDEw
IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVIKICAgICAKICAgICBE
T01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRy
b2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUoKS5zY3JpcHQoKTsKLSAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3Jp
cHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNWYWx1ZSByZXBs
YWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2Vt
ZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXIoZXhl
YywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0
aW9uLmlzRnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCkBAIC0xNjcsMzQg
KzE4MSwzNCBAQCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAKICAg
ICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENv
bnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUoKS5zY3JpcHQoKTsK
LSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVj
dCh3b3JsZCkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICAv
LyBMb29rdXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIgZnVuY3Rpb24uCi0gICAgSlNW
YWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CisgICAgSlNDOjpKU1ZhbHVl
IHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50
aWZpZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChyZXBsYWNl
bWVudEZ1bmN0aW9uLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSByZXBsYWNlbWVudEZ1bmN0aW9uLnRv
T2JqZWN0KGV4ZWMpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHJlcGxh
Y2VtZW50T2JqZWN0LCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKKyAgICBKU0M6OkpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVu
Y3Rpb24udG9PYmplY3QoZXhlYyk7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBK
U0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxU
eXBlID09IEpTQzo6Q2FsbFR5cGVOb25lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnTGlzdDsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
cm9vdCkpOwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX3Bh
cmVudEVsZW1lbnQpKTsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgdGhpcykpOwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxP
YmplY3QsIG1fbmFtZXMpKTsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBtX3ZhbHVlcykpOwotICAgIEpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxs
KGV4ZWMsIHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVj
dCwgYXJnTGlzdCk7CisgICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50ID0gY2FsbChleGVjLCBy
ZXBsYWNlbWVudE9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xp
c3QpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gR2V0
IHRoZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1pbi4KLSAgICBKU1ZhbHVl
IHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInZpZGVvIikp
OworICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBKU0M6Oklk
ZW50aWZpZXIoZXhlYywgInZpZGVvIikpOwogICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkg
JiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50ID0g
dG9IVE1MVmlkZW9FbGVtZW50KHZhbHVlKTsKIApAQCAtMjA1LDcgKzIxOSw3IEBAIGJvb2wgUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAgICB9CiAKICAgICAvLyBHZXQgdGhl
IHNjcmlwdGluZyBpbnRlcmZhY2UuCi0gICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCAic2NyaXB0T2JqZWN0IikpOworICAgIHZhbHVlID0gcmVwbGFjZW1l
bnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAic2NyaXB0T2JqZWN0IikpOwogICAg
IGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CiAgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7CiAKQEAgLTIz
Myw1ICsyNDcsMTk0IEBAIHZvaWQgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnBvc3RFdmUK
ICAgICBtX3BhcmVudEVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOwogfQogCisj
aWYgUExBVEZPUk0oSU9TKQorc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoRGF0YUluQ29udGV4
dChOU0RhdGEgKmRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEpTQ29udGV4dCAqY29udGV4
dCkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoW2Rh
dGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdLCBiYXNlNjREYXRhKTsKKworICAgIFN0cmluZyBkYXRh
NjQ7CisgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIGRhdGE2NCA9ICJkYXRh
OiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgIGVsc2UKKyAgICAg
ICAgZGF0YTY0ID0gImRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisKKyAg
ICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OihpZClkYXRhNjQuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSBpbkNvbnRleHQ6Y29udGV4dF07Cit9CisKK3N0YXRpYyBKU1ZhbHVlICpqc1Zh
bHVlV2l0aEFycmF5SW5Db250ZXh0KE5TQXJyYXkgKmFycmF5LCBKU0NvbnRleHQgKmNvbnRleHQp
Cit7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworICAgIEpTVmFsdWUgKnJlc3VsdCA9
IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld0FycmF5SW5Db250ZXh0OmNvbnRleHRdOworICAgIEpTT2Jq
ZWN0UmVmIHJlc3VsdE9iamVjdCA9IEpTVmFsdWVUb09iamVjdChbY29udGV4dCBKU0dsb2JhbENv
bnRleHRSZWZdLCBbcmVzdWx0IEpTVmFsdWVSZWZdLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250
ZXh0OmNvbnRleHRdOworCisgICAgTlNVSW50ZWdlciBjb3VudCA9IFthcnJheSBjb3VudF07Cisg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBKU1Zh
bHVlICp2YWx1ZSA9IGpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQoW2FycmF5IG9iamVjdEF0SW5k
ZXg6aV0sIGNvbnRleHQpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoW2NvbnRleHQgSlNHbG9i
YWxDb250ZXh0UmVmXSwgcmVzdWx0T2JqZWN0LCAodW5zaWduZWQpaSwgW3ZhbHVlIEpTVmFsdWVS
ZWZdLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CisKKworc3RhdGljIEpTVmFs
dWUgKmpzVmFsdWVXaXRoRGljdGlvbmFyeUluQ29udGV4dChOU0RpY3Rpb25hcnkgKmRpY3Rpb25h
cnksIEpTQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7
CisgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250
ZXh0OmNvbnRleHRdOworICAgIEpTT2JqZWN0UmVmIHJlc3VsdE9iamVjdCA9IEpTVmFsdWVUb09i
amVjdChbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBbcmVzdWx0IEpTVmFsdWVSZWZdLCAm
ZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gW0pTVmFsdWUg
dmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OmNvbnRleHRdOworCisgICAgZm9yIChpZCBrZXkg
aW4gW2RpY3Rpb25hcnkga2V5RW51bWVyYXRvcl0pIHsKKyAgICAgICAgaWYgKCFba2V5IGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBKU1ZhbHVlICp2YWx1ZSA9IGpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQoW2RpY3Rpb25h
cnkgb2JqZWN0Rm9yS2V5OmtleV0sIGNvbnRleHQpOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5n
Q3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilrZXkpOworICAgICAgICBKU09iamVjdFNl
dFByb3BlcnR5KFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHJlc3VsdE9iamVjdCwgbmFt
ZSwgW3ZhbHVlIEpTVmFsdWVSZWZdLCAwLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2Vw
dGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aFZhbHVlSW5Db250ZXh0KGlkIHZhbHVl
LCBKU0NvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U1N0cmluZyBjbGFzc11dIHx8IFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11d
KQorICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OnZhbHVlIGluQ29udGV4
dDpjb250ZXh0XTsKKyAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNMb2NhbGUg
Y2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpbdmFsdWUg
bG9jYWxlSWRlbnRpZmllcl0gaW5Db250ZXh0OmNvbnRleHRdOworICAgIGVsc2UgaWYgKFt2YWx1
ZSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIGpz
VmFsdWVXaXRoRGljdGlvbmFyeUluQ29udGV4dCh2YWx1ZSwgY29udGV4dCk7CisgICAgZWxzZSBp
ZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJu
IGpzVmFsdWVXaXRoQXJyYXlJbkNvbnRleHQodmFsdWUsIGNvbnRleHQpOworICAgIGVsc2UgaWYg
KFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIGpz
VmFsdWVXaXRoRGF0YUluQ29udGV4dCh2YWx1ZSwgZW1wdHlTdHJpbmcoKSwgY29udGV4dCk7Cisg
ICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W0FWTWV0YWRhdGFJdGVtIGNsYXNzXV0p
CisgICAgICAgIHJldHVybiBqc1ZhbHVlV2l0aEFWTWV0YWRhdGFJdGVtSW5Db250ZXh0KHZhbHVl
LCBjb250ZXh0KTsKKworICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyBKU1ZhbHVlICpqc1Zh
bHVlV2l0aEFWTWV0YWRhdGFJdGVtSW5Db250ZXh0KEFWTWV0YWRhdGFJdGVtVHlwZSAqaXRlbSwg
SlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkqIGRpY3Rpb25h
cnkgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aERpY3Rpb25hcnk6W2l0ZW0g
ZXh0cmFBdHRyaWJ1dGVzXV07CisKKyAgICBpZiAoaXRlbS5rZXlTcGFjZSkKKyAgICAgICAgW2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0Oml0ZW0ua2V5U3BhY2UgZm9yS2V5OkAia2V5c3BhY2UiXTsKKwor
ICAgIGlmIChpdGVtLmtleSkKKyAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Oml0ZW0ua2V5
IGZvcktleTpAImtleSJdOworCisgICAgaWYgKGl0ZW0ubG9jYWxlKQorICAgICAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6aXRlbS5sb2NhbGUgZm9yS2V5OkAibG9jYWxlIl07CisKKyAgICBpZiAo
Q01USU1FX0lTX1ZBTElEKGl0ZW0udGltZSkpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHRp
bWVEaWN0ID0gQ01UaW1lQ29weUFzRGljdGlvbmFyeShpdGVtLnRpbWUsIGtDRkFsbG9jYXRvckRl
ZmF1bHQpOworCisgICAgICAgIGlmICh0aW1lRGljdCkgeworICAgICAgICAgICAgW2RpY3Rpb25h
cnkgc2V0T2JqZWN0OihpZCl0aW1lRGljdCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKKyAgICAgICAg
ICAgIENGUmVsZWFzZSh0aW1lRGljdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYg
KGl0ZW0udmFsdWUpIHsKKyAgICAgICAgaWQgdmFsdWUgPSBpdGVtLnZhbHVlOworICAgICAgICBO
U1N0cmluZyAqbWltZVR5cGUgPSBbW2l0ZW0gZXh0cmFBdHRyaWJ1dGVzXSBvYmplY3RGb3JLZXk6
QCJNSU1FdHlwZSJdOworICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBj
bGFzc11dICYmIG1pbWVUeXBlKSB7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0
YTsKKyAgICAgICAgICAgIGJhc2U2NEVuY29kZShbdmFsdWUgYnl0ZXNdLCBbdmFsdWUgbGVuZ3Ro
XSwgYmFzZTY0RGF0YSk7CisgICAgICAgICAgICBTdHJpbmcgZGF0YTY0ID0gImRhdGE6IiArIFN0
cmluZyhtaW1lVHlwZSkgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKyAgICAgICAgICAgIFtk
aWN0aW9uYXJ5IHNldE9iamVjdDooaWQpZGF0YTY0LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkgZm9y
S2V5OkAidmFsdWUiXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbZGljdGlvbmFyeSBz
ZXRPYmplY3Q6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKKyAgICB9CisKKyAgICByZXR1cm4ganNW
YWx1ZVdpdGhEaWN0aW9uYXJ5SW5Db250ZXh0KGRpY3Rpb25hcnksIGNvbnRleHQpOworfQorI2Vu
ZGlmCisKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1lZE1l
dGFEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBIVE1MVmlkZW9FbGVtZW50KiBwYXJlbnQgPSBpbXBsKCkucGFyZW50RWxlbWVudCgpOwor
ICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPnBsYXllcigpKQorICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IHBhcmVudC0+ZG9jdW1lbnQoKS5mcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworCisg
ICAgTlNBcnJheSAqbWV0YURhdGEgPSBwYXJlbnQtPnBsYXllcigpLT50aW1lZE1ldGFkYXRhKCk7
CisgICAgaWYgKCFtZXRhRGF0YSkKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisKKyAg
ICBKU0NvbnRleHQgKmpzQ29udGV4dCA9IGZyYW1lLT5zY3JpcHQoKS5qYXZhU2NyaXB0Q29udGV4
dCgpOworICAgIEpTVmFsdWUgKm1ldGFEYXRhVmFsdWUgPSBqc1ZhbHVlV2l0aFZhbHVlSW5Db250
ZXh0KG1ldGFEYXRhLCBqc0NvbnRleHQpOworICAgIAorICAgIHJldHVybiB0b0pTKGV4ZWMsIFtt
ZXRhRGF0YVZhbHVlIEpTVmFsdWVSZWZdKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworI2VuZGlmCit9CisKK0pTQzo6SlNWYWx1ZSBK
U1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjphY2Nlc3NMb2coSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhUTUxWaWRlb0VsZW1lbnQqIHBh
cmVudCA9IGltcGwoKS5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVu
dC0+cGxheWVyKCkpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworCisgICAgRnJhbWUq
IGZyYW1lID0gcGFyZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisKKyAgICBKU1ZhbHVlICpkaWN0aW9uYXJ5ID0g
W0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmZyYW1lLT5zY3JpcHQoKS5qYXZh
U2NyaXB0Q29udGV4dCgpXTsKKyAgICBTdHJpbmcgYWNjZXNzTG9nU3RyaW5nID0gcGFyZW50LT5w
bGF5ZXIoKS0+YWNjZXNzTG9nKCk7CisgICAgW2RpY3Rpb25hcnkgc2V0VmFsdWU6c3RhdGljX2Nh
c3Q8TlNTdHJpbmcgKj4oYWNjZXNzTG9nU3RyaW5nKSBmb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilD
RlNUUigiZXh0ZW5kZWRMb2ciKV07CisKKyAgICByZXR1cm4gdG9KUyhleGVjLCBbZGljdGlvbmFy
eSBKU1ZhbHVlUmVmXSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKKyNlbmRpZgorfQorCitKU0M6OkpTVmFsdWUgSlNRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2coSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhUTUxWaWRlb0VsZW1lbnQqIHBhcmVudCA9IGltcGwo
KS5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGxheWVyKCkp
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworCisgICAgRnJhbWUqIGZyYW1lID0gcGFy
ZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CisKKyAgICBKU1ZhbHVlICpkaWN0aW9uYXJ5ID0gW0pTVmFsdWUgdmFs
dWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmZyYW1lLT5zY3JpcHQoKS5qYXZhU2NyaXB0Q29udGV4
dCgpXTsKKyAgICBTdHJpbmcgZXJyb3JMb2dTdHJpbmcgPSBwYXJlbnQtPnBsYXllcigpLT5lcnJv
ckxvZygpOworICAgIFtkaWN0aW9uYXJ5IHNldFZhbHVlOnN0YXRpY19jYXN0PE5TU3RyaW5nICo+
KGVycm9yTG9nU3RyaW5nKSBmb3JQcm9wZXJ0eTooTlNTdHJpbmcgKilDRlNUUigiZXh0ZW5kZWRM
b2ciKV07CisKKyAgICByZXR1cm4gdG9KUyhleGVjLCBbZGljdGlvbmFyeSBKU1ZhbHVlUmVmXSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKKyNlbmRpZgorfQorCit9CisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY2NDEwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJMDcyNzdFNTQxN0QwMThDQzAwMTU1MzREIC8q
IEpTTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mjc3RTQ4MTdEMDE4Q0MwMDE1NTM0RCAvKiBKU01lZGlhU3Ry
ZWFtVHJhY2tFdmVudC5jcHAgKi87IH07CiAJCTA3Mjc3RTU1MTdEMDE4Q0MwMDE1NTM0RCAvKiBK
U01lZGlhU3RyZWFtVHJhY2tFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDcyNzdFNDkxN0QwMThDQzAwMTU1MzREIC8qIEpTTWVkaWFTdHJlYW1U
cmFja0V2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMDcyQUUxRTUxODNDMDc0MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2VtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzJBRTFERjE4M0Mw
NzQxMDAwQTU5ODggLyogUGx1Z2luUmVwbGFjZW1lbnQuaCAqLzsgfTsKLQkJMDcyQUUxRTYxODND
MDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MkFFMUUwMTgzQzA3NDEwMDBB
NTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgKi87IH07CisJCTA3MkFFMUU2
MTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MkFFMUUwMTgzQzA3NDEw
MDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSAqLzsgfTsKIAkJMDcyQUUx
RTgxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzJBRTFFMjE4M0MwNzQx
MDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCAqLzsgfTsKIAkJMDcyQzhC
MTExMzFDNTE4NjAwQTRGQ0U5IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzZGMEQwOTEy
QjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCAqLzsg
fTsKIAkJMDcyQ0E4NjExNkNCNERDMzAwOEFFMTMxIC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyQ0E4
NjAxNkNCNERDMzAwOEFFMTMxIC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMuY3BwICovOyB9OwpA
QCAtNzAwOCw3ICs3MDA4LDcgQEAKIAkJMDcyOUIxNEUxN0NGQ0NBMDAwNEYxRDYwIC8qIE1lZGlh
U3RyZWFtQ2VudGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MDcyOUIxNEYxN0NGQ0NBMDAwNEYxRDYwIC8qIE1lZGlhU3RyZWFtQ2VudGVyTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtQ2VudGVyTWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MkFFMURGMTgzQzA3NDEwMDBBNTk4OCAvKiBQbHVn
aW5SZXBsYWNlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbHVnaW5S
ZXBsYWNlbWVudC5oOyBwYXRoID0gcGx1Z2lucy9QbHVnaW5SZXBsYWNlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwNzJBRTFFMDE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwOyBwYXRoID0gcGx1Z2lucy9RdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTA3MkFFMUUwMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50Lm1tOyBwYXRoID0gcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyQUUxRTExODNDMDc0MTAwMEE1
OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3Nz
OyBuYW1lID0gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3NzOyBwYXRoID0gcGx1Z2lucy9R
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3MkFFMUUyMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5oOyBwYXRoID0gcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzJBRTFFMzE4M0MwNzQxMDAwQTU5ODggLyog
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbDsgcGF0aCA9IHBsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQyNTks
NyArMTQyNTksNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkw
NzJBRTFERjE4M0MwNzQxMDAwQTU5ODggLyogUGx1Z2luUmVwbGFjZW1lbnQuaCAqLywKLQkJCQkw
NzJBRTFFMDE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3Bw
ICovLAorCQkJCTA3MkFFMUUwMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbSAqLywKIAkJCQkwNzJBRTFFMTE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQuY3NzICovLAogCQkJCTA3MkFFMUUyMTgzQzA3NDEwMDBBNTk4OCAv
KiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oICovLAogCQkJCTA3MkFFMUUzMTgzQzA3NDEw
MDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGwgKi8sCkBAIC0yODU1NCw3
ICsyODU1NCw3IEBACiAJCQkJRTRENjg3NzcwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1
ZmZlck1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYg
LyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDJBRjdBQTEwMkNEREVB
MDA4RkQ0RDMgLyogUXVpY2tMb29rLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMDcyQUUxRTYxODND
MDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTA3MkFFMUU2MTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3OUUzNzE2MTM3MzZBNjYwMEI5RTkxOSAv
KiBRdW90ZWRQcmludGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUE1NzRGMjgxMzFEQjk2
RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQ0Ix
MjUxRjEyRDAwM0VGMjY5IC8qIFJhZGlvSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNw
cAkocmV2aXNpb24gMTY2NDEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDAsNiArNjQwLDIxIEBAIHZvaWQg
TWVkaWFQbGF5ZXI6OnNldFZpZGVvRnVsbHNjcmVlbkdyYXYKIHsKICAgICBtX3ByaXZhdGUtPnNl
dFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkoZ3Jhdml0eSk7CiB9CisKK05TQXJyYXkqIE1lZGlhUGxh
eWVyOjp0aW1lZE1ldGFkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT50aW1l
ZE1ldGFkYXRhKCk7Cit9CisKK1N0cmluZyBNZWRpYVBsYXllcjo6YWNjZXNzTG9nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hY2Nlc3NMb2coKTsKK30KKworU3RyaW5nIE1lZGlh
UGxheWVyOjplcnJvckxvZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZXJyb3JM
b2coKTsKK30KICNlbmRpZgogCiBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVy
OjpuZXR3b3JrU3RhdGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllci5oCShyZXZpc2lvbiAxNjY0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2
Miw3IEBACiAKIE9CSkNfQ0xBU1MgQVZBc3NldDsKIE9CSkNfQ0xBU1MgQVZQbGF5ZXI7CitPQkpD
X0NMQVNTIE5TQXJyYXk7CiBPQkpDX0NMQVNTIFFUTW92aWU7CiAKIGNsYXNzIEFWQ0ZQbGF5ZXI7
CkBAIC0zMDgsNyArMzA5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVl
bkZyYW1lKEZsb2F0UmVjdCk7CiAgICAgZW51bSBWaWRlb0dyYXZpdHkgeyBWaWRlb0dyYXZpdHlS
ZXNpemUsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVjdCwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0
RmlsbCB9OwogICAgIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eShWaWRlb0dyYXZpdHkp
OworCisgICAgTlNBcnJheSAqdGltZWRNZXRhZGF0YSgpIGNvbnN0OworICAgIFN0cmluZyBhY2Nl
c3NMb2coKSBjb25zdDsKKyAgICBTdHJpbmcgZXJyb3JMb2coKSBjb25zdDsKICNlbmRpZgorCiAg
ICAgSW50U2l6ZSBuYXR1cmFsU2l6ZSgpOwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKICAg
ICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkocmV2aXNpb24gMTY2NDEw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciopIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShGbG9hdFJlY3QpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KE1lZGlhUGxheWVyOjpWaWRlb0dy
YXZpdHkpIHsgfQorCisgICAgdmlydHVhbCBOU0FycmF5ICp0aW1lZE1ldGFkYXRhKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGFjY2Vzc0xvZygpIGNvbnN0IHsgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBlcnJvckxvZygpIGNvbnN0
IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KICNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHBs
YXkoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkgPSAwOyAgICAKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMuaAkocmV2aXNpb24gMTY2NDEwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcHJlc2VudGF0aW9uU2l6ZURpZENoYW5nZShGbG9hdFNpemUpOwogICAgIHZvaWQg
ZHVyYXRpb25EaWRDaGFuZ2UoZG91YmxlKTsKICAgICB2b2lkIHJhdGVEaWRDaGFuZ2UoZG91Ymxl
KTsKKyAgICB2b2lkIG1ldGFkYXRhRGlkQXJyaXZlKFJldGFpblB0cjxOU0FycmF5Pik7CiAKICNp
ZiBIQVZFKEFWRk9VTkRBVElPTl9WSURFT19PVVRQVVQpCiAgICAgdm9pZCBvdXRwdXRNZWRpYURh
dGFXaWxsQ2hhbmdlKEFWUGxheWVySXRlbVZpZGVvT3V0cHV0Kik7CkBAIC0xNTIsNyArMTUzLDEy
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKFBs
YXRmb3JtTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUo
RmxvYXRSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eShN
ZWRpYVBsYXllcjo6VmlkZW9HcmF2aXR5KTsKKworICAgIHZpcnR1YWwgTlNBcnJheSAqdGltZWRN
ZXRhZGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgU3RyaW5nIGFjY2Vzc0xvZygp
IGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGVycm9yTG9nKCkgY29uc3Q7CiAjZW5kaWYKKwog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgZmxvYXQgbWVkaWFUaW1lRm9yVGltZVZhbHVlKGZs
b2F0KSBjb25zdDsKICAgICB2aXJ0dWFsIGRvdWJsZSBtYXhpbXVtRHVyYXRpb25Ub0NhY2hlTWVk
aWFUaW1lKCkgY29uc3QgeyByZXR1cm4gNTsgfQpAQCAtMzAxLDYgKzMwNyw3IEBAIHByaXZhdGU6
CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNBcnJheT4gbV9jYWNoZWRTZWVrYWJsZVJhbmdlczsK
ICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0FycmF5PiBtX2NhY2hlZExvYWRlZFJhbmdlczsKICAg
ICBSZXRhaW5QdHI8TlNBcnJheT4gbV9jYWNoZWRUcmFja3M7CisgICAgUmV0YWluUHRyPE5TQXJy
YXk+IG1fY3VycmVudE1ldGFEYXRhOwogICAgIEZsb2F0U2l6ZSBtX2NhY2hlZFByZXNlbnRhdGlv
blNpemU7CiAgICAgZG91YmxlIG1fY2FjaGVkRHVyYXRpb247CiAgICAgZG91YmxlIG1fY2FjaGVk
UmF0ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMTY2NDEwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTgsNiAr
OTgsOCBAQCBAaW50ZXJmYWNlIEFWUGxheWVySXRlbSAoV2ViS2l0RXh0ZW5zaW9uCiBAZW5kCiAj
ZW5kaWYKIAordHlwZWRlZiBBVk1ldGFkYXRhSXRlbSBBVk1ldGFkYXRhSXRlbVR5cGU7CisKIFNP
RlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQogU09GVF9MSU5LX0ZSQU1F
V09SS19PUFRJT05BTChDb3JlTWVkaWEpCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENv
cmVJbWFnZSkKQEAgLTEzMiw2ICsxMzQsOCBAQCBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9u
LCBBVlBsYXllckl0CiBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllckxheWVy
KQogU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZVUkxBc3NldCkKIFNPRlRfTElOS19D
TEFTUyhBVkZvdW5kYXRpb24sIEFWQXNzZXRJbWFnZUdlbmVyYXRvcikKK1NPRlRfTElOS19DTEFT
UyhBVkZvdW5kYXRpb24sIEFWTWV0YWRhdGFJdGVtKQorCiBTT0ZUX0xJTktfQ0xBU1MoQ29yZUlt
YWdlLCBDSUNvbnRleHQpCiBTT0ZUX0xJTktfQ0xBU1MoQ29yZUltYWdlLCBDSUltYWdlKQogCkBA
IC0xNTYsNiArMTYwLDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UKENvcmVNZWRpYSwga0NNVGltZVpl
cgogI2RlZmluZSBBVlBsYXllckxheWVyIGdldEFWUGxheWVyTGF5ZXJDbGFzcygpCiAjZGVmaW5l
IEFWVVJMQXNzZXQgZ2V0QVZVUkxBc3NldENsYXNzKCkKICNkZWZpbmUgQVZBc3NldEltYWdlR2Vu
ZXJhdG9yIGdldEFWQXNzZXRJbWFnZUdlbmVyYXRvckNsYXNzKCkKKyNkZWZpbmUgQVZNZXRhZGF0
YUl0ZW0gZ2V0QVZNZXRhZGF0YUl0ZW1DbGFzcygpCiAKICNkZWZpbmUgQVZNZWRpYUNoYXJhY3Rl
cmlzdGljVmlzdWFsIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbCgpCiAjZGVmaW5lIEFW
TWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJs
ZSgpCkBAIC04NDcsNiArODUyLDM1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzoKIAogICAgIFttX3ZpZGVvTGF5ZXIgc2V0VmlkZW9HcmF2aXR5OnZpZGVvR3Jhdml0
eV07CiB9CisKK05TQXJyYXkgKk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnRp
bWVkTWV0YWRhdGEoKSBjb25zdAoreworICAgIGlmIChtX2N1cnJlbnRNZXRhRGF0YSkKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudE1ldGFEYXRhLmdldCgpOworICAgIHJldHVybiBuaWw7Cit9CisK
K1N0cmluZyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphY2Nlc3NMb2coKSBj
b25zdAoreworICAgIGlmICghbV9hdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworICAgIAorICAgIEFWUGxheWVySXRlbUFjY2Vzc0xvZyAqbG9nID0gW21fYXZQbGF5
ZXJJdGVtLmdldCgpIGFjY2Vzc0xvZ107CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBsb2dTdHJp
bmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpbbG9nIGV4dGVuZGVk
TG9nRGF0YV0gZW5jb2Rpbmc6W2xvZyBleHRlbmRlZExvZ0RhdGFTdHJpbmdFbmNvZGluZ11dKTsK
KworICAgIHJldHVybiBsb2dTdHJpbmcuZ2V0KCk7Cit9CisKK1N0cmluZyBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjplcnJvckxvZygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2F2
UGxheWVySXRlbSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBBVlBsYXll
ckl0ZW1FcnJvckxvZyAqbG9nID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIGVycm9yTG9nXTsKKyAg
ICBSZXRhaW5QdHI8TlNTdHJpbmc+IGxvZ1N0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxv
Y10gaW5pdFdpdGhEYXRhOltsb2cgZXh0ZW5kZWRMb2dEYXRhXSBlbmNvZGluZzpbbG9nIGV4dGVu
ZGVkTG9nRGF0YVN0cmluZ0VuY29kaW5nXV0pOworCisgICAgcmV0dXJuIGxvZ1N0cmluZy5nZXQo
KTsKK30KICNlbmRpZgogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnBsYXRmb3JtU2V0VmlzaWJsZShib29sIGlzVmlzaWJsZSkKQEAgLTIxOTIsNiArMjIyNiwxNCBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgdXBkYXRlU3Rh
dGVzKCk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bWV0
YWRhdGFEaWRBcnJpdmUoUmV0YWluUHRyPE5TQXJyYXk+IG1ldGFkYXRhKQoreworICAgIGlmICgh
bWV0YWRhdGEgfHwgW21ldGFkYXRhIGlzS2luZE9mQ2xhc3M6W05TTnVsbCBjbGFzc11dKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRNZXRhRGF0YSA9IG1ldGFkYXRhOworfQorCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0RpZENoYW5nZShS
ZXRhaW5QdHI8TlNBcnJheT4gdHJhY2tzKQogewogICAgIG1fY2FjaGVkVHJhY2tzID0gdHJhY2tz
OwpAQCAtMjI3MCw2ICsyMzEyLDcgQEAgTlNBcnJheSogaXRlbUtWT1Byb3BlcnRpZXMoKQogICAg
ICAgICAgICAgICAgIEAicGxheWJhY2tCdWZmZXJFbXB0eSIsCiAgICAgICAgICAgICAgICAgQCJk
dXJhdGlvbiIsCiAgICAgICAgICAgICAgICAgQCJoYXNFbmFibGVkQXVkaW8iLAorICAgICAgICAg
ICAgICAgIEAidGltZWRNZXRhZGF0YSIsCiAgICAgICAgICAgICAgICAgbmlsXTsKICAgICB9CiAg
ICAgcmV0dXJuIGtleXM7CkBAIC0yMzU3LDYgKzI0MDAsOCBAQCAtICh2b2lkKW9ic2VydmVWYWx1
ZUZvcktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgICAgICBmdW5jdGlvbiA9IFdURjo6YmluZCgm
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cHJlc2VudGF0aW9uU2l6ZURpZENo
YW5nZSwgbV9jYWxsYmFjaywgRmxvYXRTaXplKFtuZXdWYWx1ZSBzaXplVmFsdWVdKSk7CiAgICAg
ICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAImR1cmF0aW9uIl0pCiAgICAg
ICAgICAgICBmdW5jdGlvbiA9IFdURjo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6ZHVyYXRpb25EaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIENNVGltZUdldFNlY29uZHMo
W25ld1ZhbHVlIENNVGltZVZhbHVlXSkpOworICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0Vx
dWFsVG9TdHJpbmc6QCJ0aW1lZE1ldGFkYXRhIl0gJiYgbmV3VmFsdWUpCisgICAgICAgICAgICBm
dW5jdGlvbiA9IFdURjo6YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
bWV0YWRhdGFEaWRBcnJpdmUsIG1fY2FsbGJhY2ssIFJldGFpblB0cjxOU0FycmF5PihuZXdWYWx1
ZSkpOwogICAgIH0KIAogICAgIGlmIChjb250ZXh0ID09IE1lZGlhUGxheWVyQVZGb3VuZGF0aW9u
T2JzZXJ2YXRpb25Db250ZXh0UGxheWVyICYmICF3aWxsQ2hhbmdlKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228408</attachid>
            <date>2014-04-02 12:03:56 -0700</date>
            <delta_ts>2014-04-03 08:47:24 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_10.txt</filename>
            <type>text/plain</type>
            <size>50223</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE0LTA0LTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIGFkZCBtaXNz
aW5nIFF1aWNrVGltZSBwbHVnLWluIHJlcGxhY2VtZW50IEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDQyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFF1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50LmNwcCB0byBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSB0byBtYWtlIGl0IHBv
c3NpYmxlCisgICAgICAgIHRvIHVzZSB0aGUgT2JqQyBKU0MgQVBJLgorICAgICAgICAqIE1vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAg
ICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbDoKKworICAg
ICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qczoKKyAg
ICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS50aW1lZE1ldGFkYXRhVXBkYXRlcyk6IEltcGxl
bWVudC4KKyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5hY2Nlc3NMb2cpOiBEaXR0by4K
KyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5lcnJvckxvZyk6IERpdHRvLgorCisgICAg
ICAgIFVzZSB0aGUgSlNDIE9iakMgQVBJIHRvIGNyZWF0ZSBhIEphdmFTY3JpcHQgb2JqZWN0IGZy
b20gYW4gYXJyYXkgb2YgQVZNZXRhZGF0YUl0ZW1zLiBUaGUKKyAgICAgICAgSlNDIE9iakMgQVBJ
IHN1cHBvcnRzIGJhc2ljIE5TVHlwZXMsIGJ1dCBhbiBBVk1ldGFkYXRhSXRlbSBjYW4gYWxzbyBj
b250YWluIE5TRGF0YSB3aGljaCAKKyAgICAgICAgdGhlIGV4aXN0aW5nIHBsdWctaW4gcmV0dXJu
cyBhcyBiYXNlLTY0IGVuY29kZWQgZGF0YSwgc28gY3JlYXRlIHdyYXBwZXJzIGZvciBOU0RpY3Rp
b25hcnkKKyAgICAgICAgYW5kIE5TQXJyYXkuCisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2Ny
aXB0SW5qZWN0ZWQpOiBEaXNhbWJpZ3VhdGUgd2l0aCAiSlNDOjoiCisgICAgICAgIChXZWJDb3Jl
OjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOiBDcmVhdGUgSlNW
YWx1ZSogZnJvbSBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFycmF5SW5D
b250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gTlNBcnJheS4KKyAgICAgICAgKFdlYkNvcmU6
OmpzVmFsdWVXaXRoRGljdGlvbmFyeUluQ29udGV4dCk6IENyZWF0ZSBKU1ZhbHVlKiBmcm9tIE5T
RGljdGlvbmFyeS4KKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQp
OiBDcmVhdGUgSlNWYWx1ZSogZnJvbSBiYXNpYyBOU1R5cGVzIHBsdXMgQVZNZXRhZGF0YUl0ZW0K
KyAgICAgICAgICAgIGFuZCBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFW
TWV0YWRhdGFJdGVtSW5Db250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gQVZNZXRhZGF0YUl0
ZW0uCisgICAgICAgIChXZWJDb3JlOjpKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1l
ZE1ldGFEYXRhKTogU2NyaXB0IGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkpTUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmFjY2Vzc0xvZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2cpOiBEaXR0by4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQuY3BwIC0+IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXI6OnRpbWVkTWV0YWRhdGEpOiBpT1Mgb25seSBhY2Nlc3Nvci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjphY2Nlc3NMb2cpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjplcnJvckxvZyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnRpbWVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YWNjZXNzTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmVycm9yTG9nKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1ldGFk
YXRhRGlkQXJyaXZlKToKKyAgICAgICAgKFdlYkNvcmU6Oml0ZW1LVk9Qcm9wZXJ0aWVzKToKKyAg
ICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDpv
Zk9iamVjdDpjaGFuZ2U6Y29udGV4dDpdKToKKwogMjAxNC0wNC0wMiAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBJbXByb3ZlIEFSSUEgbGl2ZSBy
ZWdpb24gcmVsaWFiaWxpdHkgYnkgc2VuZGluZyBub3RpZmljYXRpb25zIHdoZW4gbGl2ZSByZWdp
b25zIGFyZSBjcmVhdGVkL3Nob3duIGFuZCBoaWRkZW4vZGVzdHJveWVkCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5jcHAJKHJldmlzaW9uIDE2NjY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRS
T0xTX1NDUklQVCkKLQotI2luY2x1ZGUgIlF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgiCi0K
LSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2lu
Y2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50
LmgiCi0jaW5jbHVkZSAiSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U2NyaXB0
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0Jhc2UuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVl
SW5saW5lcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBTdHJpbmcgcXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKQotewot
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNjcmlwdCwgKFF1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCwgc2l6ZW9mKFF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50SmF2YVNjcmlwdCkpKTsKLSAgICByZXR1cm4gc2NyaXB0OwotfQotCi12b2lkIFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpyZWdpc3RlclBsdWdpblJlcGxhY2VtZW50KFBsdWdp
blJlcGxhY2VtZW50UmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICByZWdpc3RyYXIoUmVwbGFj
ZW1lbnRQbHVnaW4oY3JlYXRlLCBzdXBwb3J0c01pbWVUeXBlLCBzdXBwb3J0c0ZpbGVFeHRlbnNp
b24pKTsKLX0KLQotUGFzc1JlZlB0cjxQbHVnaW5SZXBsYWNlbWVudD4gUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQ6OmNyZWF0ZShIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQo
cGx1Z2luLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcykpOwotfQotCi1ib29sIFF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50OjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVzW10gPSB7Ci0gICAgICAgICJhcHBsaWNh
dGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwiLCAiYXVkaW8v
M2dwcCIsICJhdWRpby8zZ3BwMiIsICJhdWRpby9hYWMiLCAiYXVkaW8vYWlmZiIsCi0gICAgICAg
ICJhdWRpby9hbXIiLCAiYXVkaW8vYmFzaWMiLCAiYXVkaW8vbXAzIiwgImF1ZGlvL21wNCIsICJh
dWRpby9tcGVnIiwgImF1ZGlvL21wZWczIiwgImF1ZGlvL21wZWd1cmwiLCAiYXVkaW8vc2NwbHMi
LAotICAgICAgICAiYXVkaW8vd2F2IiwgImF1ZGlvL3gtYWFjIiwgImF1ZGlvL3gtYWlmZiIsICJh
dWRpby94LWNhZiIsICJhdWRpby94LW00YSIsICJhdWRpby94LW00YiIsICJhdWRpby94LW00cCIs
Ci0gICAgICAgICJhdWRpby94LW00ciIsICJhdWRpby94LW1wMyIsICJhdWRpby94LW1wZWciLCAi
YXVkaW8veC1tcGVnMyIsICJhdWRpby94LW1wZWd1cmwiLCAiYXVkaW8veC1zY3BscyIsICJhdWRp
by94LXdhdiIsCi0gICAgICAgICJ2aWRlby8zZ3BwIiwgInZpZGVvLzNncHAyIiwgInZpZGVvL21w
NCIsICJ2aWRlby9xdWlja3RpbWUiLCAidmlkZW8veC1tNHYiCi0gICAgfTsKLSAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCB0eXBlSGFzaCwgKCkpOwot
ICAgIGlmICghdHlwZUhhc2guc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV1RGX0FSUkFZX0xFTkdUSCh0eXBlcyk7ICsraSkKLSAgICAgICAgICAgIHR5cGVIYXNoLmFk
ZCh0eXBlc1tpXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVIYXNoLmNvbnRhaW5zKG1pbWVU
eXBlKTsKLX0KLQotYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNGaWxl
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQotewotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBleHRlbnNpb25zW10gPSB7Ci0gICAgICAgICIzZzIiLCAiM2dwIiwgIjNncDIiLCAiM2dw
cCIsICJhYWMiLCAiYWR0cyIsICJhaWYiLCAiYWlmYyIsICJhaWZmIiwgIkFNUiIsICJhdSIsICJi
d2YiLCAiY2FmIiwgImNkZGEiLCAibTN1IiwKLSAgICAgICAgIm0zdTgiLCAibTRhIiwgIm00YiIs
ICJtNHAiLCAibTRyIiwgIm00diIsICJtb3YiLCAibXAzIiwgIm1wMyIsICJtcDQiLCAibXBlZyIs
ICJtcGciLCAibXF2IiwgInBscyIsICJxdCIsCi0gICAgICAgICJzbmQiLCAic3dhIiwgInRzIiwg
InVsdyIsICJ3YXYiCi0gICAgfTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxTdHJpbmc+LCBleHRlbnNpb25IYXNoLCAoKSk7Ci0gICAgaWYgKCFleHRlbnNpb25I
YXNoLnNpemUoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9M
RU5HVEgoZXh0ZW5zaW9ucyk7ICsraSkKLSAgICAgICAgICAgIGV4dGVuc2lvbkhhc2guYWRkKGV4
dGVuc2lvbnNbaV0pOwotICAgIH0KLQotICAgIHJldHVybiBleHRlbnNpb25IYXNoLmNvbnRhaW5z
KGV4dGVuc2lvbik7Ci19Ci0KLVF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudChIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQot
ICAgIDpQbHVnaW5SZXBsYWNlbWVudCgpCi0gICAgLCBtX3BhcmVudEVsZW1lbnQoJnBsdWdpbikK
LSAgICAsIG1fbmFtZXMocGFyYW1OYW1lcykKLSAgICAsIG1fdmFsdWVzKHBhcmFtVmFsdWVzKQot
ICAgICwgbV9zY3JpcHRPYmplY3QobnVsbHB0cikKLXsKLX0KLQotUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQ6On5RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudCgpCi17Ci0gICAgbV9wYXJlbnRF
bGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NjcmlwdE9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9t
ZWRpYUVsZW1lbnQgPSBudWxscHRyOwotfQotCi1SZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihIVE1MUGx1Z0lu
RWxlbWVudCYgcGx1Z2luLCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKHBsdWdpbiwgbV9wYXJlbnRFbGVtZW50ID09ICZwbHVnaW4pOwotCi0gICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPmNyZWF0ZUVs
ZW1lbnRSZW5kZXJlcihzdGQ6Om1vdmUoc3R5bGUpKTsKLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1ET01XcmFwcGVyV29ybGQmIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojppc29sYXRl
ZFdvcmxkKCkKLXsKLSAgICBzdGF0aWMgRE9NV3JhcHBlcldvcmxkJiBpc29sYXRlZFdvcmxkID0g
KkRPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKS5sZWFrUmVm
KCk7Ci0gICAgcmV0dXJuIGlzb2xhdGVkV29ybGQ7Ci19Ci0KLWJvb2wgUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2NyaXB0SW5qZWN0ZWQoKQotewotICAgIFBh
Z2UqIHBhZ2UgPSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIERPTVdyYXBwZXJXb3JsZCYg
d29ybGQgPSBpc29sYXRlZFdvcmxkKCk7Ci0gICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29u
dHJvbGxlciA9IHBhZ2UtPm1haW5GcmFtZSgpLnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250
cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIAotICAgIEpTVmFsdWUgcmVwbGFjZW1lbnRGdW5j
dGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImNyZWF0ZVBs
dWdpblJlcGxhY2VtZW50IikpOwotICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uLmlzRnVuY3Rp
b24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgc2NyaXB0Q29udHJvbGxlci5l
dmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShxdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dFNjcmlwdCgpKSwgd29ybGQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBMT0coUGx1Z2lucywgIiVwIC0gRXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBRdWlja1Rp
bWUgcGx1Z2luIHJlcGxhY2VtZW50IHNjcmlwdCIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxs
UmVwbGFjZW1lbnQoU2hhZG93Um9vdCogcm9vdCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9wYXJl
bnRFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKLQotICAgIGlmICghZW5zdXJlUmVwbGFjZW1l
bnRTY3JpcHRJbmplY3RlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBET01XcmFw
cGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwotICAgIFNjcmlwdENvbnRyb2xsZXIm
IHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUoKS5zY3JpcHQoKTsKLSAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKLSAgICAKLSAgICAvLyBMb29rdXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIg
ZnVuY3Rpb24uCi0gICAgSlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7
Ci0gICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxh
Y2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0g
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdMaXN0OwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCByb290KSk7Ci0gICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIG1fcGFyZW50RWxlbWVudCkpOwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCB0aGlzKSk7Ci0gICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgbV9uYW1lcykpOwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3Ry
aW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7Ci0gICAgSlNWYWx1ZSByZXBsYWNl
bWVudCA9IGNhbGwoZXhlYywgcmVwbGFjZW1lbnRPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIEdldCB0aGUgPHZpZGVvPiBjcmVhdGVkIHRvIHJlcGxhY2UgdGhlIHBs
dWctaW4uCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmICF2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBtX21lZGlhRWxlbWVudCA9IHRvSFRN
TFZpZGVvRWxlbWVudCh2YWx1ZSk7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KSB7Ci0gICAg
ICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmluZCA8dmlkZW8+IGVsZW1lbnQgY3Jl
YXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50IHNjcmlwdC4iLCB0aGlzKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIEdldCB0aGUgc2NyaXB0aW5nIGludGVyZmFjZS4KLSAgICB2YWx1ZSA9IHJl
cGxhY2VtZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7Ci0g
ICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKLQotICAg
IGlmICghbV9zY3JpcHRPYmplY3QpIHsKLSAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxl
ZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxh
Y2VtZW50LiIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVk
IGxvbmcgbG9uZyBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6bW92aWVTaXplKCkgY29uc3QK
LXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dC0+ZmlsZVNpemUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50Ojpwb3N0RXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAg
UmVmPEhUTUxQbHVnSW5FbGVtZW50PiBwcm90ZWN0KCptX3BhcmVudEVsZW1lbnQpOwotICAgIFJl
ZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIHRydWUp
OwotICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Ci19Ci0K
LX0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgJKHJldmlzaW9uIDE2NjY0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgd2lsbENyZWF0ZVJlbmRlcmVyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9tZWRpYUVs
ZW1lbnQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVt
ZW50UmVuZGVyZXIoSFRNTFBsdWdJbkVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPikgb3Zl
cnJpZGU7CiAKKyAgICBIVE1MVmlkZW9FbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgeyByZXR1cm4g
bV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KKwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtb3ZpZVNp
emUoKSBjb25zdDsKICAgICB2b2lkIHBvc3RFdmVudChjb25zdCBTdHJpbmcmKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw1ICsyOSw4IEBACiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiBd
IGludGVyZmFjZSBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudCB7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBtb3ZpZVNpemU7CisgICAgW0N1c3RvbUdldHRlcl0g
cmVhZG9ubHkgYXR0cmlidXRlIGFueSB0aW1lZE1ldGFEYXRhOworICAgIFtDdXN0b21HZXR0ZXJd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgYWNjZXNzTG9nOworICAgIFtDdXN0b21HZXR0ZXJdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBhbnkgZXJyb3JMb2c7CiAgICAgdm9pZCBwb3N0RXZlbnQoRE9NU3Ry
aW5nIGV2ZW50TmFtZSk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qcwkocmV2aXNp
b24gMTY2NjQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsMTkgKzMyMiwyOCBAQCBS
ZXBsYWNlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgCiAgICAgdGltZWRNZXRhZGF0YVVwZGF0ZXM6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgeWV0
LgorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9zdC50aW1lZE1ldGFE
YXRhOworICAgICAgICB9IGNhdGNoKGUpIHsgfQorCiAgICAgICAgIHJldHVybiBudWxsOwogICAg
IH0sCiAgICAgCiAgICAgYWNjZXNzTG9nOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICAvLyBG
SVhNRTogbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmhvc3QuYWNjZXNzTG9nOworICAgICAgICB9IGNhdGNoKGUpIHsgfQorCiAgICAg
ICAgIHJldHVybiBudWxsOwogICAgIH0sCiAgICAgCiAgICAgZXJyb3JMb2c6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAgICB0
cnkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9zdC5lcnJvckxvZzsKKyAgICAgICAgfSBj
YXRjaChlKSB7IH0KKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9LAogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDE2NjY0OSkJKGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcDoxNjY2NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKKworI2luY2x1ZGUgIlF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkhUTUxQ
bHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSlNRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5j
bHVkZSAiVXNlckFnZW50U2NyaXB0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNh
c3QuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgcXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnRTY3JpcHQoKQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIHNjcmlwdCwgKFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCwgc2l6
ZW9mKFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCkpKTsKKyAgICByZXR1cm4g
c2NyaXB0OworfQorCit2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpyZWdpc3RlclBs
dWdpblJlcGxhY2VtZW50KFBsdWdpblJlcGxhY2VtZW50UmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sK
KyAgICByZWdpc3RyYXIoUmVwbGFjZW1lbnRQbHVnaW4oY3JlYXRlLCBzdXBwb3J0c01pbWVUeXBl
LCBzdXBwb3J0c0ZpbGVFeHRlbnNpb24pKTsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5SZXBsYWNl
bWVudD4gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmNyZWF0ZShIVE1MUGx1Z0luRWxlbWVu
dCYgcGx1Z2luLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQocGx1Z2luLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcykpOwor
fQorCitib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpzdXBwb3J0c01pbWVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVzW10g
PSB7CisgICAgICAgICJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlv
bi94LW1wZWd1cmwiLCAiYXVkaW8vM2dwcCIsICJhdWRpby8zZ3BwMiIsICJhdWRpby9hYWMiLCAi
YXVkaW8vYWlmZiIsCisgICAgICAgICJhdWRpby9hbXIiLCAiYXVkaW8vYmFzaWMiLCAiYXVkaW8v
bXAzIiwgImF1ZGlvL21wNCIsICJhdWRpby9tcGVnIiwgImF1ZGlvL21wZWczIiwgImF1ZGlvL21w
ZWd1cmwiLCAiYXVkaW8vc2NwbHMiLAorICAgICAgICAiYXVkaW8vd2F2IiwgImF1ZGlvL3gtYWFj
IiwgImF1ZGlvL3gtYWlmZiIsICJhdWRpby94LWNhZiIsICJhdWRpby94LW00YSIsICJhdWRpby94
LW00YiIsICJhdWRpby94LW00cCIsCisgICAgICAgICJhdWRpby94LW00ciIsICJhdWRpby94LW1w
MyIsICJhdWRpby94LW1wZWciLCAiYXVkaW8veC1tcGVnMyIsICJhdWRpby94LW1wZWd1cmwiLCAi
YXVkaW8veC1zY3BscyIsICJhdWRpby94LXdhdiIsCisgICAgICAgICJ2aWRlby8zZ3BwIiwgInZp
ZGVvLzNncHAyIiwgInZpZGVvL21wNCIsICJ2aWRlby9xdWlja3RpbWUiLCAidmlkZW8veC1tNHYi
CisgICAgfTsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJp
bmc+LCB0eXBlSGFzaCwgKCkpOworICAgIGlmICghdHlwZUhhc2guc2l6ZSgpKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh0eXBlcyk7ICsraSkKKyAg
ICAgICAgICAgIHR5cGVIYXNoLmFkZCh0eXBlc1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIHR5
cGVIYXNoLmNvbnRhaW5zKG1pbWVUeXBlKTsKK30KKworYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6c3VwcG9ydHNGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHRlbnNpb25zW10gPSB7CisgICAgICAgICIzZzIi
LCAiM2dwIiwgIjNncDIiLCAiM2dwcCIsICJhYWMiLCAiYWR0cyIsICJhaWYiLCAiYWlmYyIsICJh
aWZmIiwgIkFNUiIsICJhdSIsICJid2YiLCAiY2FmIiwgImNkZGEiLCAibTN1IiwKKyAgICAgICAg
Im0zdTgiLCAibTRhIiwgIm00YiIsICJtNHAiLCAibTRyIiwgIm00diIsICJtb3YiLCAibXAzIiwg
Im1wMyIsICJtcDQiLCAibXBlZyIsICJtcGciLCAibXF2IiwgInBscyIsICJxdCIsCisgICAgICAg
ICJzbmQiLCAic3dhIiwgInRzIiwgInVsdyIsICJ3YXYiCisgICAgfTsKKyAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBleHRlbnNpb25IYXNoLCAoKSk7
CisgICAgaWYgKCFleHRlbnNpb25IYXNoLnNpemUoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZXh0ZW5zaW9ucyk7ICsraSkKKyAgICAgICAgICAg
IGV4dGVuc2lvbkhhc2guYWRkKGV4dGVuc2lvbnNbaV0pOworICAgIH0KKworICAgIHJldHVybiBl
eHRlbnNpb25IYXNoLmNvbnRhaW5zKGV4dGVuc2lvbik7Cit9CisKK1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50OjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudChIVE1MUGx1Z0luRWxlbWVudCYg
cGx1Z2luLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzKQorICAgIDpQbHVnaW5SZXBsYWNlbWVudCgpCisgICAgLCBtX3Bh
cmVudEVsZW1lbnQoJnBsdWdpbikKKyAgICAsIG1fbmFtZXMocGFyYW1OYW1lcykKKyAgICAsIG1f
dmFsdWVzKHBhcmFtVmFsdWVzKQorICAgICwgbV9zY3JpcHRPYmplY3QobnVsbHB0cikKK3sKK30K
KworUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6On5RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dCgpCit7CisgICAgbV9wYXJlbnRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX3NjcmlwdE9iamVj
dCA9IG51bGxwdHI7CisgICAgbV9tZWRpYUVsZW1lbnQgPSBudWxscHRyOworfQorCitSZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmNyZWF0ZUVsZW1l
bnRSZW5kZXJlcihIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBQYXNzUmVmPFJlbmRlclN0eWxl
PiBzdHlsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBsdWdpbiwgbV9wYXJlbnRFbGVtZW50ID09
ICZwbHVnaW4pOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQtPmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihzdGQ6Om1vdmUoc3R5bGUpKTsKKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitET01XcmFwcGVyV29ybGQmIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50Ojppc29sYXRlZFdvcmxkKCkKK3sKKyAgICBzdGF0aWMgRE9NV3JhcHBlcldv
cmxkJiBpc29sYXRlZFdvcmxkID0gKkRPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGlzb2xhdGVkV29ybGQ7Cit9CisK
K2Jvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2NyaXB0
SW5qZWN0ZWQoKQoreworICAgIFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50
KCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBpc29sYXRlZFdvcmxkKCk7CisgICAgU2NyaXB0
Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IHBhZ2UtPm1haW5GcmFtZSgpLnNjcmlwdCgp
OworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIAorICAgIEpT
VmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOworICAgIGlmIChyZXBsYWNl
bWVudEZ1bmN0aW9uLmlzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShxdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudFNjcmlwdCgpKSwgd29ybGQpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgeworICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRXhjZXB0aW9uIHdo
ZW4gZXZhbHVhdGluZyBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50IHNjcmlwdCIsIHRoaXMp
OworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50OjppbnN0YWxsUmVwbGFjZW1lbnQoU2hhZG93Um9vdCogcm9vdCkKK3sKKyAg
ICBQYWdlKiBwYWdlID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKKworICAg
IGlmICghZW5zdXJlUmVwbGFjZW1lbnRTY3JpcHRJbmplY3RlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwor
ICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUo
KS5zY3JpcHQoKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQp
KTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAKKyAgICAvLyBMb29rdXAgdGhlICJjcmVh
dGVQbHVnaW5SZXBsYWNlbWVudCIgZnVuY3Rpb24uCisgICAgSlNWYWx1ZSByZXBsYWNlbWVudEZ1
bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiY3JlYXRl
UGx1Z2luUmVwbGFjZW1lbnQiKSk7CisgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTT2JqZWN0KiByZXBs
YWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7CisgICAg
Q2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxE
YXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OworICAgIGFyZ0xpc3Qu
YXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByb290KSk7CisgICAgYXJnTGlzdC5hcHBl
bmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG1fcGFyZW50RWxlbWVudCkpOworICAgIGFyZ0xp
c3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7CisgICAgYXJnTGlzdC5h
cHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9uYW1lcykpOworICAgIGFy
Z0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7
CisgICAgSlNWYWx1ZSByZXBsYWNlbWVudCA9IGNhbGwoZXhlYywgcmVwbGFjZW1lbnRPYmplY3Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdldCB0aGUgPHZpZGVvPiBjcmVh
dGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCisgICAgSlNWYWx1ZSB2YWx1ZSA9IHJlcGxhY2Vt
ZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJ2aWRlbyIpKTsKKyAgICBpZiAoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBt
X21lZGlhRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudCh2YWx1ZSk7CisKKyAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KSB7CisgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmlu
ZCA8dmlkZW8+IGVsZW1lbnQgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50
IHNjcmlwdC4iLCB0aGlzKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdldCB0aGUgc2NyaXB0aW5nIGludGVy
ZmFjZS4KKyAgICB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJzY3JpcHRPYmplY3QiKSk7CisgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50
b09iamVjdChleGVjKTsKKworICAgIGlmICghbV9zY3JpcHRPYmplY3QpIHsKKyAgICAgICAgTE9H
KFBsdWdpbnMsICIlcCAtIEZhaWxlZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBR
dWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50LiIsIHRoaXMpOworICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dDo6bW92aWVTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAg
IHJldHVybiBtX21lZGlhRWxlbWVudC0+ZmlsZVNpemUoKTsKKworICAgIHJldHVybiAwOworfQor
Cit2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpwb3N0RXZlbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUpCit7CisgICAgUmVmPEhUTUxQbHVnSW5FbGVtZW50PiBwcm90ZWN0KCptX3Bh
cmVudEVsZW1lbnQpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZSwgZmFsc2UsIHRydWUpOworICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVu
dChldmVudC5nZXQoKSk7Cit9CisKK30KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDM0ICsyMyw0OCBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAi
Y29uZmlnLmgiCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogCi0jaW5jbHVk
ZSAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKKyNpbXBvcnQgIlF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50LmgiCiAKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkhUTUxQbHVn
SW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAi
SlNIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVk
ZSAiVXNlckFnZW50U2NyaXB0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3Qu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOworI2lt
cG9ydCAiRXZlbnQuaCIKKyNpbXBvcnQgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW1wb3J0ICJI
VE1MVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJKU0RPTUJpbmRpbmcuaCIKKyNpbXBvcnQgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCisjaW1wb3J0ICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbXBv
cnQgIkpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIK
KyNpbXBvcnQgIk1haW5GcmFtZS5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmVuZGVy
RWxlbWVudC5oIgorI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiU2NyaXB0
U291cmNlQ29kZS5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlVzZXJBZ2Vu
dFNjcmlwdHMuaCIKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8QVZGb3VuZGF0
aW9uL0FWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NvcmVNZWRpYS5oPgorI2lt
cG9ydCA8Rm91bmRhdGlvbi9OU1N0cmluZy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBv
cnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENv
cmVNZWRpYSkKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnksIENG
RGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IpLCAo
dGltZSwgYWxsb2NhdG9yKSkKKwordHlwZWRlZiBBVk1ldGFkYXRhSXRlbSBBVk1ldGFkYXRhSXRl
bVR5cGU7CitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWTWV0YWRhdGFJdGVtKQorI2RlZmluZSBBVk1ldGFk
YXRhSXRlbSBnZXRBVk1ldGFkYXRhSXRlbUNsYXNzKCkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChpZCwgSlNDb250ZXh0
ICopOworc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQo
QVZNZXRhZGF0YUl0ZW1UeXBlICosIEpTQ29udGV4dCAqKTsKKwogc3RhdGljIFN0cmluZyBxdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudFNjcmlwdCgpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgc2NyaXB0LCAoUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRK
YXZhU2NyaXB0LCBzaXplb2YoUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRKYXZhU2NyaXB0KSkp
OwpAQCAtMTQxLDEwICsxNTUsMTAgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6
ZW5zdXJlUgogICAgIAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBpc29sYXRlZFdvcmxk
KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IHBhZ2UtPm1haW5G
cmFtZSgpLnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3
b3JsZCkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Cisg
ICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAg
ICAKLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBK
U0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMs
IEpTQzo6SWRlbnRpZmllcihleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAg
aWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAKQEAgLTE2NywzNCArMTgxLDM0IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQ6Omluc3RhbGwKIAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBpc29sYXRlZFdv
cmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IHBhZ2UtPm1h
aW5GcmFtZSgpLnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVj
dCh3b3JsZCkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENv
bnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIAogICAgIC8vIExvb2t1cCB0aGUgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50
IiBmdW5jdGlvbi4KLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmpl
Y3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIp
KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+
Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQi
KSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJl
cGxhY2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsKLSAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2Jq
ZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVjKTsKKyAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxE
YXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CisgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCByb290KSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIG1fcGFyZW50RWxlbWVudCkpOwogICAgIGFyZ0xpc3QuYXBwZW5kKHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxT
dHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9uYW1lcykpOwogICAgIGFyZ0xpc3QuYXBwZW5k
KHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7Ci0gICAgSlNWYWx1
ZSByZXBsYWNlbWVudCA9IGNhbGwoZXhlYywgcmVwbGFjZW1lbnRPYmplY3QsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFj
ZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEs
IGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICAvLyBHZXQgdGhlIDx2aWRlbz4gY3JlYXRlZCB0byByZXBsYWNlIHRoZSBw
bHVnLWluLgotICAgIEpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRp
ZmllcihleGVjLCAidmlkZW8iKSk7CisgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gcmVwbGFjZW1l
bnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAidmlkZW8iKSk7CiAgICAgaWYgKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQgPSB0b0hUTUxWaWRlb0VsZW1lbnQodmFsdWUpOwogCkBAIC0yMDUs
NyArMjE5LDcgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAg
IH0KIAogICAgIC8vIEdldCB0aGUgc2NyaXB0aW5nIGludGVyZmFjZS4KLSAgICB2YWx1ZSA9IHJl
cGxhY2VtZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7Cisg
ICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyKGV4ZWMsICJz
Y3JpcHRPYmplY3QiKSk7CiAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09i
amVjdChleGVjKTsKIApAQCAtMjMzLDUgKzI0NywxOTQgQEAgdm9pZCBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudDo6cG9zdEV2ZQogICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChl
dmVudC5nZXQoKSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgSlNWYWx1ZSAqanNW
YWx1ZVdpdGhEYXRhSW5Db250ZXh0KE5TRGF0YSAqZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwor
ICAgIGJhc2U2NEVuY29kZShbZGF0YSBieXRlc10sIFtkYXRhIGxlbmd0aF0sIGJhc2U2NERhdGEp
OworCisgICAgU3RyaW5nIGRhdGE2NDsKKyAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKKyAg
ICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERh
dGE7CisgICAgZWxzZQorICAgICAgICBkYXRhNjQgPSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwi
ICsgYmFzZTY0RGF0YTsKKworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6KGlk
KWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgpIGluQ29udGV4dDpjb250ZXh0XTsKK30KKwor
c3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQXJyYXlJbkNvbnRleHQoTlNBcnJheSAqYXJyYXks
IEpTQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Cisg
ICAgSlNWYWx1ZSAqcmVzdWx0ID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3QXJyYXlJbkNvbnRleHQ6
Y29udGV4dF07CisgICAgSlNPYmplY3RSZWYgcmVzdWx0T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0
KFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIFtyZXN1bHQgSlNWYWx1ZVJlZl0sICZleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1
ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6Y29udGV4dF07CisKKyAgICBOU1VJbnRlZ2VyIGNvdW50
ID0gW2FycmF5IGNvdW50XTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIEpTVmFsdWUgKnZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4
dChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSwgY29udGV4dCk7CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJ
bmRleChbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCByZXN1bHRPYmplY3QsICh1bnNpZ25l
ZClpLCBbdmFsdWUgSlNWYWx1ZVJlZl0sICZleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0
aW9uKQorICAgICAgICAgICAgY29udGludWU7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KKworCitzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEaWN0aW9uYXJ5SW5Db250ZXh0KE5T
RGljdGlvbmFyeSAqZGljdGlvbmFyeSwgSlNDb250ZXh0ICpjb250ZXh0KQoreworICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU1ZhbHVlICpyZXN1bHQgPSBbSlNWYWx1ZSB2YWx1
ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07CisgICAgSlNPYmplY3RSZWYgcmVzdWx0
T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIFty
ZXN1bHQgSlNWYWx1ZVJlZl0sICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAg
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6Y29udGV4dF07
CisKKyAgICBmb3IgKGlkIGtleSBpbiBbZGljdGlvbmFyeSBrZXlFbnVtZXJhdG9yXSkgeworICAg
ICAgICBpZiAoIVtrZXkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTVmFsdWUgKnZhbHVlID0ganNWYWx1ZVdpdGhWYWx1
ZUluQ29udGV4dChbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6a2V5XSwgY29udGV4dCk7CisgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU1N0cmlu
Z1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWtleSk7
CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVm
XSwgcmVzdWx0T2JqZWN0LCBuYW1lLCBbdmFsdWUgSlNWYWx1ZVJlZl0sIDAsICZleGNlcHRpb24p
OworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoVmFs
dWVJbkNvbnRleHQoaWQgdmFsdWUsIEpTQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoW3Zh
bHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xh
c3M6W05TTnVtYmVyIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhP
YmplY3Q6dmFsdWUgaW5Db250ZXh0OmNvbnRleHRdOworICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tp
bmRPZkNsYXNzOltOU0xvY2FsZSBjbGFzc11dKQorICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFs
dWVXaXRoT2JqZWN0Olt2YWx1ZSBsb2NhbGVJZGVudGlmaWVyXSBpbkNvbnRleHQ6Y29udGV4dF07
CisgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11d
KQorICAgICAgICByZXR1cm4ganNWYWx1ZVdpdGhEaWN0aW9uYXJ5SW5Db250ZXh0KHZhbHVlLCBj
b250ZXh0KTsKKyAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFz
c11dKQorICAgICAgICByZXR1cm4ganNWYWx1ZVdpdGhBcnJheUluQ29udGV4dCh2YWx1ZSwgY29u
dGV4dCk7CisgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11d
KQorICAgICAgICByZXR1cm4ganNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KHZhbHVlLCBlbXB0eVN0
cmluZygpLCBjb250ZXh0KTsKKyAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbQVZN
ZXRhZGF0YUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVXaXRoQVZNZXRhZGF0
YUl0ZW1JbkNvbnRleHQodmFsdWUsIGNvbnRleHQpOworCisgICAgcmV0dXJuIG5pbDsKK30KKwor
c3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQoQVZNZXRh
ZGF0YUl0ZW1UeXBlICppdGVtLCBKU0NvbnRleHQgKmNvbnRleHQpCit7CisgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSogZGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoRGljdGlvbmFyeTpbaXRlbSBleHRyYUF0dHJpYnV0ZXNdXTsKKworICAgIGlmIChpdGVtLmtl
eVNwYWNlKQorICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6aXRlbS5rZXlTcGFjZSBmb3JL
ZXk6QCJrZXlzcGFjZSJdOworCisgICAgaWYgKGl0ZW0ua2V5KQorICAgICAgICBbZGljdGlvbmFy
eSBzZXRPYmplY3Q6aXRlbS5rZXkgZm9yS2V5OkAia2V5Il07CisKKyAgICBpZiAoaXRlbS5sb2Nh
bGUpCisgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDppdGVtLmxvY2FsZSBmb3JLZXk6QCJs
b2NhbGUiXTsKKworICAgIGlmIChDTVRJTUVfSVNfVkFMSUQoaXRlbS50aW1lKSkgeworICAgICAg
ICBDRkRpY3Rpb25hcnlSZWYgdGltZURpY3QgPSBDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5KGl0ZW0u
dGltZSwga0NGQWxsb2NhdG9yRGVmYXVsdCk7CisKKyAgICAgICAgaWYgKHRpbWVEaWN0KSB7Cisg
ICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6KGlkKXRpbWVEaWN0IGZvcktleTpAInRp
bWVzdGFtcCJdOworICAgICAgICAgICAgQ0ZSZWxlYXNlKHRpbWVEaWN0KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBpZiAoaXRlbS52YWx1ZSkgeworICAgICAgICBpZCB2YWx1ZSA9IGl0
ZW0udmFsdWU7CisgICAgICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IFtbaXRlbSBleHRyYUF0dHJp
YnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBlIl07CisgICAgICAgIGlmIChbdmFsdWUgaXNL
aW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0gJiYgbWltZVR5cGUpIHsKKyAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgICAgICAgICAgYmFzZTY0RW5jb2RlKFt2YWx1ZSBi
eXRlc10sIFt2YWx1ZSBsZW5ndGhdLCBiYXNlNjREYXRhKTsKKyAgICAgICAgICAgIFN0cmluZyBk
YXRhNjQgPSAiZGF0YToiICsgU3RyaW5nKG1pbWVUeXBlKSArICI7YmFzZTY0LCIgKyBiYXNlNjRE
YXRhOworICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OihpZClkYXRhNjQuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1ZSJdOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworICAg
IH0KKworICAgIHJldHVybiBqc1ZhbHVlV2l0aERpY3Rpb25hcnlJbkNvbnRleHQoZGljdGlvbmFy
eSwgY29udGV4dCk7Cit9CisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIEpTUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQ6OnRpbWVkTWV0YURhdGEoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhUTUxWaWRlb0VsZW1lbnQqIHBhcmVudCA9IGltcGwo
KS5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGxheWVyKCkp
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworCisgICAgRnJhbWUqIGZyYW1lID0gcGFy
ZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CisKKyAgICBOU0FycmF5ICptZXRhRGF0YSA9IHBhcmVudC0+cGxheWVy
KCktPnRpbWVkTWV0YWRhdGEoKTsKKyAgICBpZiAoIW1ldGFEYXRhKQorICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKworICAgIEpTQ29udGV4dCAqanNDb250ZXh0ID0gZnJhbWUtPnNjcmlw
dCgpLmphdmFTY3JpcHRDb250ZXh0KCk7CisgICAgSlNWYWx1ZSAqbWV0YURhdGFWYWx1ZSA9IGpz
VmFsdWVXaXRoVmFsdWVJbkNvbnRleHQobWV0YURhdGEsIGpzQ29udGV4dCk7CisgICAgCisgICAg
cmV0dXJuIHRvSlMoZXhlYywgW21ldGFEYXRhVmFsdWUgSlNWYWx1ZVJlZl0pOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisjZW5kaWYK
K30KKworSlNDOjpKU1ZhbHVlIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmFjY2Vzc0xv
ZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAg
SFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsKKyAgICBp
ZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dWxsKCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKworICAgIEpT
VmFsdWUgKmRpY3Rpb25hcnkgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6
ZnJhbWUtPnNjcmlwdCgpLmphdmFTY3JpcHRDb250ZXh0KCldOworICAgIFN0cmluZyBhY2Nlc3NM
b2dTdHJpbmcgPSBwYXJlbnQtPnBsYXllcigpLT5hY2Nlc3NMb2coKTsKKyAgICBbZGljdGlvbmFy
eSBzZXRWYWx1ZTpzdGF0aWNfY2FzdDxOU1N0cmluZyAqPihhY2Nlc3NMb2dTdHJpbmcpIGZvclBy
b3BlcnR5OihOU1N0cmluZyAqKUNGU1RSKCJleHRlbmRlZExvZyIpXTsKKworICAgIHJldHVybiB0
b0pTKGV4ZWMsIFtkaWN0aW9uYXJ5IEpTVmFsdWVSZWZdKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOworICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworI2VuZGlmCit9CisKK0pTQzo6
SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplcnJvckxvZyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgSFRNTFZpZGVvRWxl
bWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5wbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisKKyAg
ICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZy
YW1lKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKworICAgIEpTVmFsdWUgKmRpY3Rp
b25hcnkgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6ZnJhbWUtPnNjcmlw
dCgpLmphdmFTY3JpcHRDb250ZXh0KCldOworICAgIFN0cmluZyBlcnJvckxvZ1N0cmluZyA9IHBh
cmVudC0+cGxheWVyKCktPmVycm9yTG9nKCk7CisgICAgW2RpY3Rpb25hcnkgc2V0VmFsdWU6c3Rh
dGljX2Nhc3Q8TlNTdHJpbmcgKj4oZXJyb3JMb2dTdHJpbmcpIGZvclByb3BlcnR5OihOU1N0cmlu
ZyAqKUNGU1RSKCJleHRlbmRlZExvZyIpXTsKKworICAgIHJldHVybiB0b0pTKGV4ZWMsIFtkaWN0
aW9uYXJ5IEpTVmFsdWVSZWZdKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOworI2VuZGlmCit9CisKK30KKwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBAQAogCQkwNzI3N0U1
NDE3RDAxOENDMDAxNTUzNEQgLyogSlNNZWRpYVN0cmVhbVRyYWNrRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyNzdFNDgxN0QwMThDQzAw
MTU1MzREIC8qIEpTTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcCAqLzsgfTsKIAkJMDcyNzdFNTUx
N0QwMThDQzAwMTU1MzREIC8qIEpTTWVkaWFTdHJlYW1UcmFja0V2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzI3N0U0OTE3RDAxOENDMDAxNTUz
NEQgLyogSlNNZWRpYVN0cmVhbVRyYWNrRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzJBRTFFNTE4M0MwNzQxMDAwQTU5ODggLyogUGx1
Z2luUmVwbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3MkFFMURGMTgzQzA3NDEwMDBBNTk4OCAvKiBQbHVnaW5SZXBsYWNlbWVudC5oICov
OyB9OwotCQkwNzJBRTFFNjE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNw
cCAqLzsgfTsKKwkJMDcyQUUxRTYxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
Lm1tICovOyB9OwogCQkwNzJBRTFFODE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3MkFFMUUyMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5oICovOyB9OwogCQkwNzJDOEIxMTEzMUM1MTg2MDBBNEZDRTkgLyogTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3NkYwRDA5MTJCODE5MjcwMEMyNkFBNCAvKiBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb24uY3BwICovOyB9OwogCQkwNzJDQTg2MTE2Q0I0REMzMDA4QUUxMzEgLyogQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzJDQTg2MDE2Q0I0REMzMDA4QUUxMzEgLyogQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlcy5jcHAgKi87IH07CkBAIC03MDE3LDcgKzcwMTcsNyBAQAogCQkwNzI5QjE0RTE3Q0ZD
Q0EwMDA0RjFENjAgLyogTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwNzI5QjE0RjE3Q0ZDQ0EwMDA0RjFENjAgLyogTWVkaWFTdHJl
YW1DZW50ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJl
YW1DZW50ZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyQUUxREYxODND
MDc0MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFBsdWdpblJlcGxhY2VtZW50Lmg7IHBhdGggPSBwbHVnaW5zL1BsdWdpblJl
cGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA3MkFFMUUwMTgzQzA3
NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA7
IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW07IHBhdGggPSBwbHVnaW5zL1F1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzJBRTFFMTE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3Nz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5jc3M7IG5hbWUgPSBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5j
c3M7IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNzczsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyQUUxRTIxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg7IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MkFFMUUz
MTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsOyBwYXRoID0g
cGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDI3OCw3ICsxNDI3OCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTA3MkFFMURGMTgzQzA3NDEwMDBBNTk4OCAvKiBQbHVnaW5SZXBs
YWNlbWVudC5oICovLAotCQkJCTA3MkFFMUUwMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5jcHAgKi8sCisJCQkJMDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8q
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tICovLAogCQkJCTA3MkFFMUUxMTgzQzA3NDEw
MDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jc3MgKi8sCiAJCQkJMDcyQUUx
RTIxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmggKi8sCiAJ
CQkJMDcyQUUxRTMxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
LmlkbCAqLywKQEAgLTI4NTkxLDcgKzI4NTkxLDcgQEAKIAkJCQlFNEQ2ODc3NzBFRDdBRTNEMDA2
RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU1MEEw
QkM5MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQ0MkFGN0FBMTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2subW0gaW4gU291cmNlcyAq
LywKLQkJCQkwNzJBRTFFNjE4M0MwNzQxMDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcyQUUxRTYxODNDMDc0MTAwMEE1OTg4IC8q
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5RTM3
MTYxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1QTU3NEYyODEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGNTVCM0RDQjEyNTFGMTJEMDAzRUYyNjkgLyogUmFkaW9JbnB1dFR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
MCw2ICs2NDAsMjEgQEAgdm9pZCBNZWRpYVBsYXllcjo6c2V0VmlkZW9GdWxsc2NyZWVuR3Jhdgog
ewogICAgIG1fcHJpdmF0ZS0+c2V0VmlkZW9GdWxsc2NyZWVuR3Jhdml0eShncmF2aXR5KTsKIH0K
KworTlNBcnJheSogTWVkaWFQbGF5ZXI6OnRpbWVkTWV0YWRhdGEoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPnRpbWVkTWV0YWRhdGEoKTsKK30KKworU3RyaW5nIE1lZGlhUGxheWVy
OjphY2Nlc3NMb2coKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmFjY2Vzc0xvZygp
OworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXI6OmVycm9yTG9nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5lcnJvckxvZygpOworfQogI2VuZGlmCiAKIE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGUgTWVkaWFQbGF5ZXI6Om5ldHdvcmtTdGF0ZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDE2NjY0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKIAogT0JKQ19DTEFTUyBBVkFzc2V0OwogT0JKQ19D
TEFTUyBBVlBsYXllcjsKK09CSkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgUVRNb3ZpZTsK
IAogY2xhc3MgQVZDRlBsYXllcjsKQEAgLTMwOCw3ICszMDksMTIgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUoRmxvYXRSZWN0KTsKICAgICBlbnVtIFZpZGVvR3Jh
dml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBWaWRl
b0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsIH07CiAgICAgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5H
cmF2aXR5KFZpZGVvR3Jhdml0eSk7CisKKyAgICBOU0FycmF5ICp0aW1lZE1ldGFkYXRhKCkgY29u
c3Q7CisgICAgU3RyaW5nIGFjY2Vzc0xvZygpIGNvbnN0OworICAgIFN0cmluZyBlcnJvckxvZygp
IGNvbnN0OwogI2VuZGlmCisKICAgICBJbnRTaXplIG5hdHVyYWxTaXplKCk7CiAgICAgYm9vbCBo
YXNWaWRlbygpIGNvbnN0OwogICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0
ZS5oCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9y
bUxheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZs
b2F0UmVjdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHko
TWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSkgeyB9CisKKyAgICB2aXJ0dWFsIE5TQXJyYXkgKnRp
bWVkTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBTdHJpbmcgYWNj
ZXNzTG9nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3Ry
aW5nIGVycm9yTG9nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQogI2VuZGlmCisK
ICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSA9
IDA7ICAgIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCShyZXZpc2lvbiAxNjY2NDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2
ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVzZW50YXRpb25TaXplRGlkQ2hhbmdlKEZs
b2F0U2l6ZSk7CiAgICAgdm9pZCBkdXJhdGlvbkRpZENoYW5nZShkb3VibGUpOwogICAgIHZvaWQg
cmF0ZURpZENoYW5nZShkb3VibGUpOworICAgIHZvaWQgbWV0YWRhdGFEaWRBcnJpdmUoUmV0YWlu
UHRyPE5TQXJyYXk+KTsKIAogI2lmIEhBVkUoQVZGT1VOREFUSU9OX1ZJREVPX09VVFBVVCkKICAg
ICB2b2lkIG91dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UoQVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXQq
KTsKQEAgLTE1Miw3ICsxNTMsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0Z1bGxzY3JlZW5GcmFtZShGbG9hdFJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRl
b0Z1bGxzY3JlZW5HcmF2aXR5KE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkpOworCisgICAgdmly
dHVhbCBOU0FycmF5ICp0aW1lZE1ldGFkYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBTdHJpbmcgYWNjZXNzTG9nKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZXJyb3JMb2co
KSBjb25zdDsKICNlbmRpZgorCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRS
ZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBmbG9hdCBtZWRp
YVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQpIGNvbnN0OwogICAgIHZpcnR1YWwgZG91YmxlIG1heGlt
dW1EdXJhdGlvblRvQ2FjaGVNZWRpYVRpbWUoKSBjb25zdCB7IHJldHVybiA1OyB9CkBAIC0zMDEs
NiArMzA3LDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0FycmF5PiBtX2Nh
Y2hlZFNlZWthYmxlUmFuZ2VzOwogICAgIG11dGFibGUgUmV0YWluUHRyPE5TQXJyYXk+IG1fY2Fj
aGVkTG9hZGVkUmFuZ2VzOwogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2NhY2hlZFRyYWNrczsK
KyAgICBSZXRhaW5QdHI8TlNBcnJheT4gbV9jdXJyZW50TWV0YURhdGE7CiAgICAgRmxvYXRTaXpl
IG1fY2FjaGVkUHJlc2VudGF0aW9uU2l6ZTsKICAgICBkb3VibGUgbV9jYWNoZWREdXJhdGlvbjsK
ICAgICBkb3VibGUgbV9jYWNoZWRSYXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShy
ZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw2ICs5OCw4IEBAIEBpbnRlcmZhY2UgQVZQbGF5ZXJJdGVtIChXZWJL
aXRFeHRlbnNpb24KIEBlbmQKICNlbmRpZgogCit0eXBlZGVmIEFWTWV0YWRhdGFJdGVtIEFWTWV0
YWRhdGFJdGVtVHlwZTsKKwogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRp
b24pCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENvcmVNZWRpYSkKIFNPRlRfTElOS19G
UkFNRVdPUktfT1BUSU9OQUwoQ29yZUltYWdlKQpAQCAtMTMyLDYgKzEzNCw4IEBAIFNPRlRfTElO
S19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVySXQKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5k
YXRpb24sIEFWUGxheWVyTGF5ZXIpCiBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlVS
TEFzc2V0KQogU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZBc3NldEltYWdlR2VuZXJh
dG9yKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZNZXRhZGF0YUl0ZW0pCisKIFNP
RlRfTElOS19DTEFTUyhDb3JlSW1hZ2UsIENJQ29udGV4dCkKIFNPRlRfTElOS19DTEFTUyhDb3Jl
SW1hZ2UsIENJSW1hZ2UpCiAKQEAgLTE1Niw2ICsxNjAsNyBAQCBTT0ZUX0xJTktfQ09OU1RBTlQo
Q29yZU1lZGlhLCBrQ01UaW1lWmVyCiAjZGVmaW5lIEFWUGxheWVyTGF5ZXIgZ2V0QVZQbGF5ZXJM
YXllckNsYXNzKCkKICNkZWZpbmUgQVZVUkxBc3NldCBnZXRBVlVSTEFzc2V0Q2xhc3MoKQogI2Rl
ZmluZSBBVkFzc2V0SW1hZ2VHZW5lcmF0b3IgZ2V0QVZBc3NldEltYWdlR2VuZXJhdG9yQ2xhc3Mo
KQorI2RlZmluZSBBVk1ldGFkYXRhSXRlbSBnZXRBVk1ldGFkYXRhSXRlbUNsYXNzKCkKIAogI2Rl
ZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGlj
VmlzdWFsKCkKICNkZWZpbmUgQVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZSBnZXRBVk1lZGlh
Q2hhcmFjdGVyaXN0aWNBdWRpYmxlKCkKQEAgLTg0Nyw2ICs4NTIsMzUgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgW21fdmlkZW9MYXllciBzZXRWaWRl
b0dyYXZpdHk6dmlkZW9HcmF2aXR5XTsKIH0KKworTlNBcnJheSAqTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6dGltZWRNZXRhZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1fY3Vy
cmVudE1ldGFEYXRhKQorICAgICAgICByZXR1cm4gbV9jdXJyZW50TWV0YURhdGEuZ2V0KCk7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmFjY2Vzc0xvZygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2F2UGxheWVySXRlbSkKKyAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgCisgICAgQVZQbGF5ZXJJdGVtQWNjZXNz
TG9nICpsb2cgPSBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWNjZXNzTG9nXTsKKyAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IGxvZ1N0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdp
dGhEYXRhOltsb2cgZXh0ZW5kZWRMb2dEYXRhXSBlbmNvZGluZzpbbG9nIGV4dGVuZGVkTG9nRGF0
YVN0cmluZ0VuY29kaW5nXV0pOworCisgICAgcmV0dXJuIGxvZ1N0cmluZy5nZXQoKTsKK30KKwor
U3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmVycm9yTG9nKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKworICAgIEFWUGxheWVySXRlbUVycm9yTG9nICpsb2cgPSBbbV9hdlBsYXllckl0ZW0u
Z2V0KCkgZXJyb3JMb2ddOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gbG9nU3RyaW5nID0gYWRv
cHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6W2xvZyBleHRlbmRlZExvZ0RhdGFd
IGVuY29kaW5nOltsb2cgZXh0ZW5kZWRMb2dEYXRhU3RyaW5nRW5jb2RpbmddXSk7CisKKyAgICBy
ZXR1cm4gbG9nU3RyaW5nLmdldCgpOworfQogI2VuZGlmCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1TZXRWaXNpYmxlKGJvb2wgaXNWaXNpYmxlKQpA
QCAtMjE5Miw2ICsyMjI2LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjptZXRhZGF0YURpZEFycml2ZShSZXRhaW5QdHI8TlNBcnJheT4gbWV0
YWRhdGEpCit7CisgICAgaWYgKCFtZXRhZGF0YSB8fCBbbWV0YWRhdGEgaXNLaW5kT2ZDbGFzczpb
TlNOdWxsIGNsYXNzXV0pCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudE1ldGFEYXRh
ID0gbWV0YWRhdGE7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6dHJhY2tzRGlkQ2hhbmdlKFJldGFpblB0cjxOU0FycmF5PiB0cmFja3MpCiB7CiAgICAgbV9j
YWNoZWRUcmFja3MgPSB0cmFja3M7CkBAIC0yMjcwLDYgKzIzMTIsNyBAQCBOU0FycmF5KiBpdGVt
S1ZPUHJvcGVydGllcygpCiAgICAgICAgICAgICAgICAgQCJwbGF5YmFja0J1ZmZlckVtcHR5IiwK
ICAgICAgICAgICAgICAgICBAImR1cmF0aW9uIiwKICAgICAgICAgICAgICAgICBAImhhc0VuYWJs
ZWRBdWRpbyIsCisgICAgICAgICAgICAgICAgQCJ0aW1lZE1ldGFkYXRhIiwKICAgICAgICAgICAg
ICAgICBuaWxdOwogICAgIH0KICAgICByZXR1cm4ga2V5czsKQEAgLTIzNTcsNiArMjQwMCw4IEBA
IC0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG8KICAgICAgICAgICAgIGZ1
bmN0aW9uID0gV1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpw
cmVzZW50YXRpb25TaXplRGlkQ2hhbmdlLCBtX2NhbGxiYWNrLCBGbG9hdFNpemUoW25ld1ZhbHVl
IHNpemVWYWx1ZV0pKTsKICAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5n
OkAiZHVyYXRpb24iXSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gV1RGOjpiaW5kKCZNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkdXJhdGlvbkRpZENoYW5nZSwgbV9jYWxsYmFj
aywgQ01UaW1lR2V0U2Vjb25kcyhbbmV3VmFsdWUgQ01UaW1lVmFsdWVdKSk7CisgICAgICAgIGVs
c2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInRpbWVkTWV0YWRhdGEiXSAmJiBuZXdW
YWx1ZSkKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gV1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjptZXRhZGF0YURpZEFycml2ZSwgbV9jYWxsYmFjaywgUmV0YWlu
UHRyPE5TQXJyYXk+KG5ld1ZhbHVlKSk7CiAgICAgfQogCiAgICAgaWYgKGNvbnRleHQgPT0gTWVk
aWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXIgJiYgIXdpbGxDaGFu
Z2UpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228414</attachid>
            <date>2014-04-02 12:57:15 -0700</date>
            <delta_ts>2014-04-02 12:57:15 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch_12.txt</filename>
            <type>text/plain</type>
            <size>50250</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE0LTA0LTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIGFkZCBtaXNz
aW5nIFF1aWNrVGltZSBwbHVnLWluIHJlcGxhY2VtZW50IEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxMDQyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFF1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50LmNwcCB0byBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5tbSB0byBtYWtlIGl0IHBv
c3NpYmxlCisgICAgICAgIHRvIHVzZSB0aGUgT2JqQyBKU0MgQVBJLgorICAgICAgICAqIE1vZHVs
ZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAg
ICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbDoKKworICAg
ICAgICAqIE1vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qczoKKyAg
ICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS50aW1lZE1ldGFkYXRhVXBkYXRlcyk6IEltcGxl
bWVudC4KKyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5hY2Nlc3NMb2cpOiBEaXR0by4K
KyAgICAgICAgKFJlcGxhY2VtZW50LnByb3RvdHlwZS5lcnJvckxvZyk6IERpdHRvLgorCisgICAg
ICAgIFVzZSB0aGUgSlNDIE9iakMgQVBJIHRvIGNyZWF0ZSBhIEphdmFTY3JpcHQgb2JqZWN0IGZy
b20gYW4gYXJyYXkgb2YgQVZNZXRhZGF0YUl0ZW1zLiBUaGUKKyAgICAgICAgSlNDIE9iakMgQVBJ
IHN1cHBvcnRzIGJhc2ljIE5TVHlwZXMsIGJ1dCBhbiBBVk1ldGFkYXRhSXRlbSBjYW4gYWxzbyBj
b250YWluIE5TRGF0YSB3aGljaCAKKyAgICAgICAgdGhlIGV4aXN0aW5nIHBsdWctaW4gcmV0dXJu
cyBhcyBiYXNlLTY0IGVuY29kZWQgZGF0YSwgc28gY3JlYXRlIHdyYXBwZXJzIGZvciBOU0RpY3Rp
b25hcnkKKyAgICAgICAgYW5kIE5TQXJyYXkuCisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2Ny
aXB0SW5qZWN0ZWQpOiBEaXNhbWJpZ3VhdGUgd2l0aCAiSlNDOjoiCisgICAgICAgIChXZWJDb3Jl
OjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFsbFJlcGxhY2VtZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQpOiBDcmVhdGUgSlNW
YWx1ZSogZnJvbSBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFycmF5SW5D
b250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gTlNBcnJheS4KKyAgICAgICAgKFdlYkNvcmU6
OmpzVmFsdWVXaXRoRGljdGlvbmFyeUluQ29udGV4dCk6IENyZWF0ZSBKU1ZhbHVlKiBmcm9tIE5T
RGljdGlvbmFyeS4KKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQp
OiBDcmVhdGUgSlNWYWx1ZSogZnJvbSBiYXNpYyBOU1R5cGVzIHBsdXMgQVZNZXRhZGF0YUl0ZW0K
KyAgICAgICAgICAgIGFuZCBOU0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpqc1ZhbHVlV2l0aEFW
TWV0YWRhdGFJdGVtSW5Db250ZXh0KTogQ3JlYXRlIEpTVmFsdWUqIGZyb20gQVZNZXRhZGF0YUl0
ZW0uCisgICAgICAgIChXZWJDb3JlOjpKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojp0aW1l
ZE1ldGFEYXRhKTogU2NyaXB0IGludGVyZmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkpTUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmFjY2Vzc0xvZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZXJyb3JMb2cpOiBEaXR0by4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQuY3BwIC0+IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXI6OnRpbWVkTWV0YWRhdGEpOiBpT1Mgb25seSBhY2Nlc3Nvci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjphY2Nlc3NMb2cpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjplcnJvckxvZyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnRpbWVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6YWNjZXNzTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmVycm9yTG9nKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1ldGFk
YXRhRGlkQXJyaXZlKToKKyAgICAgICAgKFdlYkNvcmU6Oml0ZW1LVk9Qcm9wZXJ0aWVzKToKKyAg
ICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDpv
Zk9iamVjdDpjaGFuZ2U6Y29udGV4dDpdKToKKwogMjAxNC0wNC0wMiAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBJbXByb3ZlIEFSSUEgbGl2ZSBy
ZWdpb24gcmVsaWFiaWxpdHkgYnkgc2VuZGluZyBub3RpZmljYXRpb25zIHdoZW4gbGl2ZSByZWdp
b25zIGFyZSBjcmVhdGVkL3Nob3duIGFuZCBoaWRkZW4vZGVzdHJveWVkCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudC5jcHAJKHJldmlzaW9uIDE2NjY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX0NPTlRS
T0xTX1NDUklQVCkKLQotI2luY2x1ZGUgIlF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgiCi0K
LSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2lu
Y2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50
LmgiCi0jaW5jbHVkZSAiSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiVXNlckFnZW50U2NyaXB0
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0Jhc2UuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVl
SW5saW5lcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBTdHJpbmcgcXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKQotewot
ICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNjcmlwdCwgKFF1aWNr
VGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCwgc2l6ZW9mKFF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50SmF2YVNjcmlwdCkpKTsKLSAgICByZXR1cm4gc2NyaXB0OwotfQotCi12b2lkIFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpyZWdpc3RlclBsdWdpblJlcGxhY2VtZW50KFBsdWdp
blJlcGxhY2VtZW50UmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICByZWdpc3RyYXIoUmVwbGFj
ZW1lbnRQbHVnaW4oY3JlYXRlLCBzdXBwb3J0c01pbWVUeXBlLCBzdXBwb3J0c0ZpbGVFeHRlbnNp
b24pKTsKLX0KLQotUGFzc1JlZlB0cjxQbHVnaW5SZXBsYWNlbWVudD4gUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQ6OmNyZWF0ZShIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQo
cGx1Z2luLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcykpOwotfQotCi1ib29sIFF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50OjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Ci17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVzW10gPSB7Ci0gICAgICAgICJhcHBsaWNh
dGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwiLCAiYXVkaW8v
M2dwcCIsICJhdWRpby8zZ3BwMiIsICJhdWRpby9hYWMiLCAiYXVkaW8vYWlmZiIsCi0gICAgICAg
ICJhdWRpby9hbXIiLCAiYXVkaW8vYmFzaWMiLCAiYXVkaW8vbXAzIiwgImF1ZGlvL21wNCIsICJh
dWRpby9tcGVnIiwgImF1ZGlvL21wZWczIiwgImF1ZGlvL21wZWd1cmwiLCAiYXVkaW8vc2NwbHMi
LAotICAgICAgICAiYXVkaW8vd2F2IiwgImF1ZGlvL3gtYWFjIiwgImF1ZGlvL3gtYWlmZiIsICJh
dWRpby94LWNhZiIsICJhdWRpby94LW00YSIsICJhdWRpby94LW00YiIsICJhdWRpby94LW00cCIs
Ci0gICAgICAgICJhdWRpby94LW00ciIsICJhdWRpby94LW1wMyIsICJhdWRpby94LW1wZWciLCAi
YXVkaW8veC1tcGVnMyIsICJhdWRpby94LW1wZWd1cmwiLCAiYXVkaW8veC1zY3BscyIsICJhdWRp
by94LXdhdiIsCi0gICAgICAgICJ2aWRlby8zZ3BwIiwgInZpZGVvLzNncHAyIiwgInZpZGVvL21w
NCIsICJ2aWRlby9xdWlja3RpbWUiLCAidmlkZW8veC1tNHYiCi0gICAgfTsKLSAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCB0eXBlSGFzaCwgKCkpOwot
ICAgIGlmICghdHlwZUhhc2guc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV1RGX0FSUkFZX0xFTkdUSCh0eXBlcyk7ICsraSkKLSAgICAgICAgICAgIHR5cGVIYXNoLmFk
ZCh0eXBlc1tpXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGVIYXNoLmNvbnRhaW5zKG1pbWVU
eXBlKTsKLX0KLQotYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNGaWxl
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQotewotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBleHRlbnNpb25zW10gPSB7Ci0gICAgICAgICIzZzIiLCAiM2dwIiwgIjNncDIiLCAiM2dw
cCIsICJhYWMiLCAiYWR0cyIsICJhaWYiLCAiYWlmYyIsICJhaWZmIiwgIkFNUiIsICJhdSIsICJi
d2YiLCAiY2FmIiwgImNkZGEiLCAibTN1IiwKLSAgICAgICAgIm0zdTgiLCAibTRhIiwgIm00YiIs
ICJtNHAiLCAibTRyIiwgIm00diIsICJtb3YiLCAibXAzIiwgIm1wMyIsICJtcDQiLCAibXBlZyIs
ICJtcGciLCAibXF2IiwgInBscyIsICJxdCIsCi0gICAgICAgICJzbmQiLCAic3dhIiwgInRzIiwg
InVsdyIsICJ3YXYiCi0gICAgfTsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxTdHJpbmc+LCBleHRlbnNpb25IYXNoLCAoKSk7Ci0gICAgaWYgKCFleHRlbnNpb25I
YXNoLnNpemUoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9M
RU5HVEgoZXh0ZW5zaW9ucyk7ICsraSkKLSAgICAgICAgICAgIGV4dGVuc2lvbkhhc2guYWRkKGV4
dGVuc2lvbnNbaV0pOwotICAgIH0KLQotICAgIHJldHVybiBleHRlbnNpb25IYXNoLmNvbnRhaW5z
KGV4dGVuc2lvbik7Ci19Ci0KLVF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudChIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQot
ICAgIDpQbHVnaW5SZXBsYWNlbWVudCgpCi0gICAgLCBtX3BhcmVudEVsZW1lbnQoJnBsdWdpbikK
LSAgICAsIG1fbmFtZXMocGFyYW1OYW1lcykKLSAgICAsIG1fdmFsdWVzKHBhcmFtVmFsdWVzKQot
ICAgICwgbV9zY3JpcHRPYmplY3QobnVsbHB0cikKLXsKLX0KLQotUXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQ6On5RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudCgpCi17Ci0gICAgbV9wYXJlbnRF
bGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NjcmlwdE9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9t
ZWRpYUVsZW1lbnQgPSBudWxscHRyOwotfQotCi1SZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihIVE1MUGx1Z0lu
RWxlbWVudCYgcGx1Z2luLCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKHBsdWdpbiwgbV9wYXJlbnRFbGVtZW50ID09ICZwbHVnaW4pOwotCi0gICAgaWYg
KG1fbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gbV9tZWRpYUVsZW1lbnQtPmNyZWF0ZUVs
ZW1lbnRSZW5kZXJlcihzdGQ6Om1vdmUoc3R5bGUpKTsKLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1ET01XcmFwcGVyV29ybGQmIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojppc29sYXRl
ZFdvcmxkKCkKLXsKLSAgICBzdGF0aWMgRE9NV3JhcHBlcldvcmxkJiBpc29sYXRlZFdvcmxkID0g
KkRPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93Ojpjb21tb25WTSgpKS5sZWFrUmVm
KCk7Ci0gICAgcmV0dXJuIGlzb2xhdGVkV29ybGQ7Ci19Ci0KLWJvb2wgUXVpY2tUaW1lUGx1Z2lu
UmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2NyaXB0SW5qZWN0ZWQoKQotewotICAgIFBh
Z2UqIHBhZ2UgPSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIERPTVdyYXBwZXJXb3JsZCYg
d29ybGQgPSBpc29sYXRlZFdvcmxkKCk7Ci0gICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29u
dHJvbGxlciA9IHBhZ2UtPm1haW5GcmFtZSgpLnNjcmlwdCgpOwotICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250
cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIAotICAgIEpTVmFsdWUgcmVwbGFjZW1lbnRGdW5j
dGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImNyZWF0ZVBs
dWdpblJlcGxhY2VtZW50IikpOwotICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uLmlzRnVuY3Rp
b24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgc2NyaXB0Q29udHJvbGxlci5l
dmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShxdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dFNjcmlwdCgpKSwgd29ybGQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBMT0coUGx1Z2lucywgIiVwIC0gRXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBRdWlja1Rp
bWUgcGx1Z2luIHJlcGxhY2VtZW50IHNjcmlwdCIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxs
UmVwbGFjZW1lbnQoU2hhZG93Um9vdCogcm9vdCkKLXsKLSAgICBQYWdlKiBwYWdlID0gbV9wYXJl
bnRFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKLQotICAgIGlmICghZW5zdXJlUmVwbGFjZW1l
bnRTY3JpcHRJbmplY3RlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBET01XcmFw
cGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwotICAgIFNjcmlwdENvbnRyb2xsZXIm
IHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUoKS5zY3JpcHQoKTsKLSAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKLSAgICAKLSAgICAvLyBMb29rdXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIg
ZnVuY3Rpb24uCi0gICAgSlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7
Ci0gICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIEpTT2JqZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxh
Y2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0g
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdMaXN0OwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCByb290KSk7Ci0gICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIG1fcGFyZW50RWxlbWVudCkpOwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCB0aGlzKSk7Ci0gICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgbV9uYW1lcykpOwotICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3Ry
aW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7Ci0gICAgSlNWYWx1ZSByZXBsYWNl
bWVudCA9IGNhbGwoZXhlYywgcmVwbGFjZW1lbnRPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIEdldCB0aGUgPHZpZGVvPiBjcmVhdGVkIHRvIHJlcGxhY2UgdGhlIHBs
dWctaW4uCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBJZGVudGlm
aWVyKGV4ZWMsICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmICF2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBtX21lZGlhRWxlbWVudCA9IHRvSFRN
TFZpZGVvRWxlbWVudCh2YWx1ZSk7Ci0KLSAgICBpZiAoIW1fbWVkaWFFbGVtZW50KSB7Ci0gICAg
ICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmluZCA8dmlkZW8+IGVsZW1lbnQgY3Jl
YXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50IHNjcmlwdC4iLCB0aGlzKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIEdldCB0aGUgc2NyaXB0aW5nIGludGVyZmFjZS4KLSAgICB2YWx1ZSA9IHJl
cGxhY2VtZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7Ci0g
ICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKLQotICAg
IGlmICghbV9zY3JpcHRPYmplY3QpIHsKLSAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxl
ZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxh
Y2VtZW50LiIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVk
IGxvbmcgbG9uZyBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6bW92aWVTaXplKCkgY29uc3QK
LXsKLSAgICBpZiAobV9tZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBtX21lZGlhRWxlbWVu
dC0+ZmlsZVNpemUoKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50Ojpwb3N0RXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCi17Ci0gICAg
UmVmPEhUTUxQbHVnSW5FbGVtZW50PiBwcm90ZWN0KCptX3BhcmVudEVsZW1lbnQpOwotICAgIFJl
ZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIHRydWUp
OwotICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7Ci19Ci0K
LX0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmgJKHJldmlzaW9uIDE2NjY0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgd2lsbENyZWF0ZVJlbmRlcmVyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9tZWRpYUVs
ZW1lbnQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVt
ZW50UmVuZGVyZXIoSFRNTFBsdWdJbkVsZW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPikgb3Zl
cnJpZGU7CiAKKyAgICBIVE1MVmlkZW9FbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgeyByZXR1cm4g
bV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0KKwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtb3ZpZVNp
emUoKSBjb25zdDsKICAgICB2b2lkIHBvc3RFdmVudChjb25zdCBTdHJpbmcmKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw1ICsyOSw4IEBACiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiBd
IGludGVyZmFjZSBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudCB7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBtb3ZpZVNpemU7CisgICAgW0N1c3RvbUdldHRlcl0g
cmVhZG9ubHkgYXR0cmlidXRlIGFueSB0aW1lZE1ldGFEYXRhOworICAgIFtDdXN0b21HZXR0ZXJd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgYWNjZXNzTG9nOworICAgIFtDdXN0b21HZXR0ZXJdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBhbnkgZXJyb3JMb2c7CiAgICAgdm9pZCBwb3N0RXZlbnQoRE9NU3Ry
aW5nIGV2ZW50TmFtZSk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5z
L1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5qcwkocmV2aXNp
b24gMTY2NjQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsMTkgKzMyMiwyOCBAQCBS
ZXBsYWNlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgCiAgICAgdGltZWRNZXRhZGF0YVVwZGF0ZXM6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgeWV0
LgorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9zdC50aW1lZE1ldGFE
YXRhOworICAgICAgICB9IGNhdGNoKGUpIHsgfQorCiAgICAgICAgIHJldHVybiBudWxsOwogICAg
IH0sCiAgICAgCiAgICAgYWNjZXNzTG9nOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICAvLyBG
SVhNRTogbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmhvc3QuYWNjZXNzTG9nOworICAgICAgICB9IGNhdGNoKGUpIHsgfQorCiAgICAg
ICAgIHJldHVybiBudWxsOwogICAgIH0sCiAgICAgCiAgICAgZXJyb3JMb2c6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAgICB0
cnkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9zdC5lcnJvckxvZzsKKyAgICAgICAgfSBj
YXRjaChlKSB7IH0KKwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9LAogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDE2NjY0OSkJKGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcDoxNjY2NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKE1FRElBX0NPTlRST0xTX1NDUklQVCkKKworI2luY2x1ZGUgIlF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkhUTUxQ
bHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSlNRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5j
bHVkZSAiVXNlckFnZW50U2NyaXB0cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNh
c3QuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgcXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnRTY3JpcHQoKQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIHNjcmlwdCwgKFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCwgc2l6
ZW9mKFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50SmF2YVNjcmlwdCkpKTsKKyAgICByZXR1cm4g
c2NyaXB0OworfQorCit2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpyZWdpc3RlclBs
dWdpblJlcGxhY2VtZW50KFBsdWdpblJlcGxhY2VtZW50UmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sK
KyAgICByZWdpc3RyYXIoUmVwbGFjZW1lbnRQbHVnaW4oY3JlYXRlLCBzdXBwb3J0c01pbWVUeXBl
LCBzdXBwb3J0c0ZpbGVFeHRlbnNpb24pKTsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5SZXBsYWNl
bWVudD4gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmNyZWF0ZShIVE1MUGx1Z0luRWxlbWVu
dCYgcGx1Z2luLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVpY2tU
aW1lUGx1Z2luUmVwbGFjZW1lbnQocGx1Z2luLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcykpOwor
fQorCitib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjpzdXBwb3J0c01pbWVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVzW10g
PSB7CisgICAgICAgICJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlv
bi94LW1wZWd1cmwiLCAiYXVkaW8vM2dwcCIsICJhdWRpby8zZ3BwMiIsICJhdWRpby9hYWMiLCAi
YXVkaW8vYWlmZiIsCisgICAgICAgICJhdWRpby9hbXIiLCAiYXVkaW8vYmFzaWMiLCAiYXVkaW8v
bXAzIiwgImF1ZGlvL21wNCIsICJhdWRpby9tcGVnIiwgImF1ZGlvL21wZWczIiwgImF1ZGlvL21w
ZWd1cmwiLCAiYXVkaW8vc2NwbHMiLAorICAgICAgICAiYXVkaW8vd2F2IiwgImF1ZGlvL3gtYWFj
IiwgImF1ZGlvL3gtYWlmZiIsICJhdWRpby94LWNhZiIsICJhdWRpby94LW00YSIsICJhdWRpby94
LW00YiIsICJhdWRpby94LW00cCIsCisgICAgICAgICJhdWRpby94LW00ciIsICJhdWRpby94LW1w
MyIsICJhdWRpby94LW1wZWciLCAiYXVkaW8veC1tcGVnMyIsICJhdWRpby94LW1wZWd1cmwiLCAi
YXVkaW8veC1zY3BscyIsICJhdWRpby94LXdhdiIsCisgICAgICAgICJ2aWRlby8zZ3BwIiwgInZp
ZGVvLzNncHAyIiwgInZpZGVvL21wNCIsICJ2aWRlby9xdWlja3RpbWUiLCAidmlkZW8veC1tNHYi
CisgICAgfTsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJp
bmc+LCB0eXBlSGFzaCwgKCkpOworICAgIGlmICghdHlwZUhhc2guc2l6ZSgpKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSCh0eXBlcyk7ICsraSkKKyAg
ICAgICAgICAgIHR5cGVIYXNoLmFkZCh0eXBlc1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIHR5
cGVIYXNoLmNvbnRhaW5zKG1pbWVUeXBlKTsKK30KKworYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudDo6c3VwcG9ydHNGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBleHRlbnNpb25zW10gPSB7CisgICAgICAgICIzZzIi
LCAiM2dwIiwgIjNncDIiLCAiM2dwcCIsICJhYWMiLCAiYWR0cyIsICJhaWYiLCAiYWlmYyIsICJh
aWZmIiwgIkFNUiIsICJhdSIsICJid2YiLCAiY2FmIiwgImNkZGEiLCAibTN1IiwKKyAgICAgICAg
Im0zdTgiLCAibTRhIiwgIm00YiIsICJtNHAiLCAibTRyIiwgIm00diIsICJtb3YiLCAibXAzIiwg
Im1wMyIsICJtcDQiLCAibXBlZyIsICJtcGciLCAibXF2IiwgInBscyIsICJxdCIsCisgICAgICAg
ICJzbmQiLCAic3dhIiwgInRzIiwgInVsdyIsICJ3YXYiCisgICAgfTsKKyAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBleHRlbnNpb25IYXNoLCAoKSk7
CisgICAgaWYgKCFleHRlbnNpb25IYXNoLnNpemUoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZXh0ZW5zaW9ucyk7ICsraSkKKyAgICAgICAgICAg
IGV4dGVuc2lvbkhhc2guYWRkKGV4dGVuc2lvbnNbaV0pOworICAgIH0KKworICAgIHJldHVybiBl
eHRlbnNpb25IYXNoLmNvbnRhaW5zKGV4dGVuc2lvbik7Cit9CisKK1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50OjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudChIVE1MUGx1Z0luRWxlbWVudCYg
cGx1Z2luLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzKQorICAgIDpQbHVnaW5SZXBsYWNlbWVudCgpCisgICAgLCBtX3Bh
cmVudEVsZW1lbnQoJnBsdWdpbikKKyAgICAsIG1fbmFtZXMocGFyYW1OYW1lcykKKyAgICAsIG1f
dmFsdWVzKHBhcmFtVmFsdWVzKQorICAgICwgbV9zY3JpcHRPYmplY3QobnVsbHB0cikKK3sKK30K
KworUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6On5RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dCgpCit7CisgICAgbV9wYXJlbnRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX3NjcmlwdE9iamVj
dCA9IG51bGxwdHI7CisgICAgbV9tZWRpYUVsZW1lbnQgPSBudWxscHRyOworfQorCitSZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmNyZWF0ZUVsZW1l
bnRSZW5kZXJlcihIVE1MUGx1Z0luRWxlbWVudCYgcGx1Z2luLCBQYXNzUmVmPFJlbmRlclN0eWxl
PiBzdHlsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHBsdWdpbiwgbV9wYXJlbnRFbGVtZW50ID09
ICZwbHVnaW4pOworCisgICAgaWYgKG1fbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gbV9t
ZWRpYUVsZW1lbnQtPmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihzdGQ6Om1vdmUoc3R5bGUpKTsKKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitET01XcmFwcGVyV29ybGQmIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50Ojppc29sYXRlZFdvcmxkKCkKK3sKKyAgICBzdGF0aWMgRE9NV3JhcHBlcldv
cmxkJiBpc29sYXRlZFdvcmxkID0gKkRPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKEpTRE9NV2luZG93
Ojpjb21tb25WTSgpKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIGlzb2xhdGVkV29ybGQ7Cit9CisK
K2Jvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2NyaXB0
SW5qZWN0ZWQoKQoreworICAgIFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50
KCkucGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBpc29sYXRlZFdvcmxkKCk7CisgICAgU2NyaXB0
Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IHBhZ2UtPm1haW5GcmFtZSgpLnNjcmlwdCgp
OworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIAorICAgIEpT
VmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOworICAgIGlmIChyZXBsYWNl
bWVudEZ1bmN0aW9uLmlzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShxdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudFNjcmlwdCgpKSwgd29ybGQpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgeworICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRXhjZXB0aW9uIHdo
ZW4gZXZhbHVhdGluZyBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50IHNjcmlwdCIsIHRoaXMp
OworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50OjppbnN0YWxsUmVwbGFjZW1lbnQoU2hhZG93Um9vdCogcm9vdCkKK3sKKyAg
ICBQYWdlKiBwYWdlID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKTsKKworICAg
IGlmICghZW5zdXJlUmVwbGFjZW1lbnRTY3JpcHRJbmplY3RlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwor
ICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBwYWdlLT5tYWluRnJhbWUo
KS5zY3JpcHQoKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQp
KTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAKKyAgICAvLyBMb29rdXAgdGhlICJjcmVh
dGVQbHVnaW5SZXBsYWNlbWVudCIgZnVuY3Rpb24uCisgICAgSlNWYWx1ZSByZXBsYWNlbWVudEZ1
bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiY3JlYXRl
UGx1Z2luUmVwbGFjZW1lbnQiKSk7CisgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTT2JqZWN0KiByZXBs
YWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7CisgICAg
Q2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxE
YXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OworICAgIGFyZ0xpc3Qu
YXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByb290KSk7CisgICAgYXJnTGlzdC5hcHBl
bmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG1fcGFyZW50RWxlbWVudCkpOworICAgIGFyZ0xp
c3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7CisgICAgYXJnTGlzdC5h
cHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9uYW1lcykpOworICAgIGFy
Z0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7
CisgICAgSlNWYWx1ZSByZXBsYWNlbWVudCA9IGNhbGwoZXhlYywgcmVwbGFjZW1lbnRPYmplY3Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdldCB0aGUgPHZpZGVvPiBjcmVh
dGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCisgICAgSlNWYWx1ZSB2YWx1ZSA9IHJlcGxhY2Vt
ZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJ2aWRlbyIpKTsKKyAgICBpZiAoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBt
X21lZGlhRWxlbWVudCA9IHRvSFRNTFZpZGVvRWxlbWVudCh2YWx1ZSk7CisKKyAgICBpZiAoIW1f
bWVkaWFFbGVtZW50KSB7CisgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmlu
ZCA8dmlkZW8+IGVsZW1lbnQgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50
IHNjcmlwdC4iLCB0aGlzKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEdldCB0aGUgc2NyaXB0aW5nIGludGVy
ZmFjZS4KKyAgICB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJzY3JpcHRPYmplY3QiKSk7CisgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50
b09iamVjdChleGVjKTsKKworICAgIGlmICghbV9zY3JpcHRPYmplY3QpIHsKKyAgICAgICAgTE9H
KFBsdWdpbnMsICIlcCAtIEZhaWxlZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBR
dWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50LiIsIHRoaXMpOworICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dDo6bW92aWVTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9tZWRpYUVsZW1lbnQpCisgICAgICAg
IHJldHVybiBtX21lZGlhRWxlbWVudC0+ZmlsZVNpemUoKTsKKworICAgIHJldHVybiAwOworfQor
Cit2b2lkIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Ojpwb3N0RXZlbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUpCit7CisgICAgUmVmPEhUTUxQbHVnSW5FbGVtZW50PiBwcm90ZWN0KCptX3Bh
cmVudEVsZW1lbnQpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZSwgZmFsc2UsIHRydWUpOworICAgIG1fcGFyZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVu
dChldmVudC5nZXQoKSk7Cit9CisKK30KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dC5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDM0ICsyMyw1MCBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAi
Y29uZmlnLmgiCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogCi0jaW5jbHVk
ZSAiUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKKyNpbXBvcnQgIlF1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50LmgiCiAKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkhUTUxQbHVn
SW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAi
SlNIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVk
ZSAiVXNlckFnZW50U2NyaXB0cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3Qu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOworI2lt
cG9ydCAiRXZlbnQuaCIKKyNpbXBvcnQgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW1wb3J0ICJI
VE1MVmlkZW9FbGVtZW50LmgiCisjaW1wb3J0ICJKU0RPTUJpbmRpbmcuaCIKKyNpbXBvcnQgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCisjaW1wb3J0ICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbXBv
cnQgIkpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIK
KyNpbXBvcnQgIk1haW5GcmFtZS5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCAiUmVuZGVy
RWxlbWVudC5oIgorI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiU2NyaXB0
U291cmNlQ29kZS5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKKyNpbXBvcnQgIlVzZXJBZ2Vu
dFNjcmlwdHMuaCIKKyNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8QVZGb3VuZGF0
aW9uL0FWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NvcmVNZWRpYS5oPgorI2lt
cG9ydCA8Rm91bmRhdGlvbi9OU1N0cmluZy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBv
cnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKENv
cmVNZWRpYSkKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnksIENG
RGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IpLCAo
dGltZSwgYWxsb2NhdG9yKSkKKwordHlwZWRlZiBBVk1ldGFkYXRhSXRlbSBBVk1ldGFkYXRhSXRl
bVR5cGU7CitTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKEFWRm91bmRhdGlvbikKK1NPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWTWV0YWRhdGFJdGVtKQorI2RlZmluZSBBVk1ldGFk
YXRhSXRlbSBnZXRBVk1ldGFkYXRhSXRlbUNsYXNzKCkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoVmFsdWVJbkNv
bnRleHQoaWQsIEpTQ29udGV4dCAqKTsKK3N0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aEFWTWV0
YWRhdGFJdGVtSW5Db250ZXh0KEFWTWV0YWRhdGFJdGVtVHlwZSAqLCBKU0NvbnRleHQgKik7Cisj
ZW5kaWYKKwogc3RhdGljIFN0cmluZyBxdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudFNjcmlwdCgp
CiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2NyaXB0LCAo
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRKYXZhU2NyaXB0LCBzaXplb2YoUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnRKYXZhU2NyaXB0KSkpOwpAQCAtMTQxLDEwICsxNTcsMTAgQEAgYm9vbCBR
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZW5zdXJlUgogICAgIAogICAgIERPTVdyYXBwZXJX
b3JsZCYgd29ybGQgPSBpc29sYXRlZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2Ny
aXB0Q29udHJvbGxlciA9IHBhZ2UtPm1haW5GcmFtZSgpLnNjcmlwdCgpOwotICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3Jp
cHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xs
ZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAgICBKU1ZhbHVlIHJlcGxhY2VtZW50RnVu
Y3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJjcmVhdGVQ
bHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlv
biA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAiY3JlYXRl
UGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNGdW5j
dGlvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKQEAgLTE2NywzNCArMTgzLDM0IEBA
IGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKIAogICAgIERPTVdyYXBw
ZXJXb3JsZCYgd29ybGQgPSBpc29sYXRlZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYg
c2NyaXB0Q29udHJvbGxlciA9IHBhZ2UtPm1haW5GcmFtZSgpLnNjcmlwdCgpOwotICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
Y3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOwotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7
CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
KyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIC8vIExvb2t1cCB0
aGUgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IiBmdW5jdGlvbi4KLSAgICBKU1ZhbHVlIHJlcGxh
Y2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1l
bnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVj
LCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rp
b24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTT2Jq
ZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhl
Yyk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSByZXBs
YWNlbWVudE9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmpl
Y3QsIGNhbGxEYXRhKTsKLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgIEpT
Qzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlvbi50b09i
amVjdChleGVjKTsKKyAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOworICAgIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gSlND
OjpDYWxsVHlwZU5vbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ0xpc3Q7CisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0
OwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByb290KSk7CiAg
ICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG1fcGFyZW50RWxlbWVu
dCkpOwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB0aGlzKSk7
CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9u
YW1lcykpOwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmpl
Y3QsIG1fdmFsdWVzKSk7Ci0gICAgSlNWYWx1ZSByZXBsYWNlbWVudCA9IGNhbGwoZXhlYywgcmVw
bGFjZW1lbnRPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0
KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2VtZW50
T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIDx2aWRl
bz4gY3JlYXRlZCB0byByZXBsYWNlIHRoZSBwbHVnLWluLgotICAgIEpTVmFsdWUgdmFsdWUgPSBy
ZXBsYWNlbWVudC5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidmlkZW8iKSk7CisgICAgSlND
OjpKU1ZhbHVlIHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihl
eGVjLCAidmlkZW8iKSk7CiAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgbV9tZWRpYUVsZW1lbnQgPSB0b0hUTUxWaWRl
b0VsZW1lbnQodmFsdWUpOwogCkBAIC0yMDUsNyArMjIxLDcgQEAgYm9vbCBRdWlja1RpbWVQbHVn
aW5SZXBsYWNlbWVudDo6aW5zdGFsbAogICAgIH0KIAogICAgIC8vIEdldCB0aGUgc2NyaXB0aW5n
IGludGVyZmFjZS4KLSAgICB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7CisgICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhl
YywgSlNDOjpJZGVudGlmaWVyKGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7CiAgICAgaWYgKCFleGVj
LT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
bV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKIApAQCAtMjMzLDUgKzI0OSwx
OTQgQEAgdm9pZCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6cG9zdEV2ZQogICAgIG1fcGFy
ZW50RWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCitzdGF0aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhEYXRhSW5Db250ZXh0KE5TRGF0YSAq
ZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgSlNDb250ZXh0ICpjb250ZXh0KQoreworICAg
IFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShbZGF0YSBieXRlc10s
IFtkYXRhIGxlbmd0aF0sIGJhc2U2NERhdGEpOworCisgICAgU3RyaW5nIGRhdGE2NDsKKyAgICBp
ZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgZGF0YTY0ID0gImRhdGE6IiArIG1pbWVU
eXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7CisgICAgZWxzZQorICAgICAgICBkYXRhNjQg
PSAiZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKKworICAgIHJldHVybiBb
SlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6KGlkKWRhdGE2NC5jcmVhdGVDRlN0cmluZygpLmdldCgp
IGluQ29udGV4dDpjb250ZXh0XTsKK30KKworc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQXJy
YXlJbkNvbnRleHQoTlNBcnJheSAqYXJyYXksIEpTQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW0pTVmFsdWUg
dmFsdWVXaXRoTmV3QXJyYXlJbkNvbnRleHQ6Y29udGV4dF07CisgICAgSlNPYmplY3RSZWYgcmVz
dWx0T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0s
IFtyZXN1bHQgSlNWYWx1ZVJlZl0sICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6Y29udGV4
dF07CisKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2FycmF5IGNvdW50XTsKKyAgICBmb3IgKE5T
VUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgKnZhbHVl
ID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChbYXJyYXkgb2JqZWN0QXRJbmRleDppXSwgY29u
dGV4dCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChbY29udGV4dCBKU0dsb2JhbENvbnRleHRS
ZWZdLCByZXN1bHRPYmplY3QsICh1bnNpZ25lZClpLCBbdmFsdWUgSlNWYWx1ZVJlZl0sICZleGNl
cHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgSlNWYWx1ZSAqanNWYWx1
ZVdpdGhEaWN0aW9uYXJ5SW5Db250ZXh0KE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSwgSlNDb250
ZXh0ICpjb250ZXh0KQoreworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICBKU1Zh
bHVlICpyZXN1bHQgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4
dF07CisgICAgSlNPYmplY3RSZWYgcmVzdWx0T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KFtjb250
ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIFtyZXN1bHQgSlNWYWx1ZVJlZl0sICZleGNlcHRpb24p
OworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhV
bmRlZmluZWRJbkNvbnRleHQ6Y29udGV4dF07CisKKyAgICBmb3IgKGlkIGtleSBpbiBbZGljdGlv
bmFyeSBrZXlFbnVtZXJhdG9yXSkgeworICAgICAgICBpZiAoIVtrZXkgaXNLaW5kT2ZDbGFzczpb
TlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTVmFs
dWUgKnZhbHVlID0ganNWYWx1ZVdpdGhWYWx1ZUluQ29udGV4dChbZGljdGlvbmFyeSBvYmplY3RG
b3JLZXk6a2V5XSwgY29udGV4dCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRo
Q0ZTdHJpbmcoKENGU3RyaW5nUmVmKWtleSk7CisgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHko
W2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgcmVzdWx0T2JqZWN0LCBuYW1lLCBbdmFsdWUg
SlNWYWx1ZVJlZl0sIDAsICZleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQoaWQgdmFsdWUsIEpTQ29udGV4
dCAqY29udGV4dCkKK3sKKyAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCisgICAgICAg
IHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6dmFsdWUgaW5Db250ZXh0OmNvbnRleHRd
OworICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU0xvY2FsZSBjbGFzc11dKQor
ICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0Olt2YWx1ZSBsb2NhbGVJZGVu
dGlmaWVyXSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgZWxzZSBpZiAoW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKQorICAgICAgICByZXR1cm4ganNWYWx1ZVdpdGhE
aWN0aW9uYXJ5SW5Db250ZXh0KHZhbHVlLCBjb250ZXh0KTsKKyAgICBlbHNlIGlmIChbdmFsdWUg
aXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICByZXR1cm4ganNWYWx1ZVdp
dGhBcnJheUluQ29udGV4dCh2YWx1ZSwgY29udGV4dCk7CisgICAgZWxzZSBpZiAoW3ZhbHVlIGlz
S2luZE9mQ2xhc3M6W05TRGF0YSBjbGFzc11dKQorICAgICAgICByZXR1cm4ganNWYWx1ZVdpdGhE
YXRhSW5Db250ZXh0KHZhbHVlLCBlbXB0eVN0cmluZygpLCBjb250ZXh0KTsKKyAgICBlbHNlIGlm
IChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbQVZNZXRhZGF0YUl0ZW0gY2xhc3NdXSkKKyAgICAgICAg
cmV0dXJuIGpzVmFsdWVXaXRoQVZNZXRhZGF0YUl0ZW1JbkNvbnRleHQodmFsdWUsIGNvbnRleHQp
OworCisgICAgcmV0dXJuIG5pbDsKK30KKworc3RhdGljIEpTVmFsdWUgKmpzVmFsdWVXaXRoQVZN
ZXRhZGF0YUl0ZW1JbkNvbnRleHQoQVZNZXRhZGF0YUl0ZW1UeXBlICppdGVtLCBKU0NvbnRleHQg
KmNvbnRleHQpCit7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IFtOU011
dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTpbaXRlbSBleHRyYUF0dHJp
YnV0ZXNdXTsKKworICAgIGlmIChpdGVtLmtleVNwYWNlKQorICAgICAgICBbZGljdGlvbmFyeSBz
ZXRPYmplY3Q6aXRlbS5rZXlTcGFjZSBmb3JLZXk6QCJrZXlzcGFjZSJdOworCisgICAgaWYgKGl0
ZW0ua2V5KQorICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6aXRlbS5rZXkgZm9yS2V5OkAi
a2V5Il07CisKKyAgICBpZiAoaXRlbS5sb2NhbGUpCisgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9i
amVjdDppdGVtLmxvY2FsZSBmb3JLZXk6QCJsb2NhbGUiXTsKKworICAgIGlmIChDTVRJTUVfSVNf
VkFMSUQoaXRlbS50aW1lKSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgdGltZURpY3QgPSBD
TVRpbWVDb3B5QXNEaWN0aW9uYXJ5KGl0ZW0udGltZSwga0NGQWxsb2NhdG9yRGVmYXVsdCk7CisK
KyAgICAgICAgaWYgKHRpbWVEaWN0KSB7CisgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6KGlkKXRpbWVEaWN0IGZvcktleTpAInRpbWVzdGFtcCJdOworICAgICAgICAgICAgQ0ZSZWxl
YXNlKHRpbWVEaWN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoaXRlbS52YWx1
ZSkgeworICAgICAgICBpZCB2YWx1ZSA9IGl0ZW0udmFsdWU7CisgICAgICAgIE5TU3RyaW5nICpt
aW1lVHlwZSA9IFtbaXRlbSBleHRyYUF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpAIk1JTUV0eXBl
Il07CisgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0gJiYg
bWltZVR5cGUpIHsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgICAg
ICAgICAgYmFzZTY0RW5jb2RlKFt2YWx1ZSBieXRlc10sIFt2YWx1ZSBsZW5ndGhdLCBiYXNlNjRE
YXRhKTsKKyAgICAgICAgICAgIFN0cmluZyBkYXRhNjQgPSAiZGF0YToiICsgU3RyaW5nKG1pbWVU
eXBlKSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworICAgICAgICAgICAgW2RpY3Rpb25hcnkg
c2V0T2JqZWN0OihpZClkYXRhNjQuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSBmb3JLZXk6QCJ2YWx1
ZSJdOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDp2
YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworICAgIH0KKworICAgIHJldHVybiBqc1ZhbHVlV2l0aERp
Y3Rpb25hcnlJbkNvbnRleHQoZGljdGlvbmFyeSwgY29udGV4dCk7Cit9CisjZW5kaWYKKworSlND
OjpKU1ZhbHVlIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OnRpbWVkTWV0YURhdGEoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIEhUTUxW
aWRlb0VsZW1lbnQqIHBhcmVudCA9IGltcGwoKS5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+cGxheWVyKCkpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworCisgICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisKKyAgICBOU0FycmF5
ICptZXRhRGF0YSA9IHBhcmVudC0+cGxheWVyKCktPnRpbWVkTWV0YWRhdGEoKTsKKyAgICBpZiAo
IW1ldGFEYXRhKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKworICAgIEpTQ29udGV4
dCAqanNDb250ZXh0ID0gZnJhbWUtPnNjcmlwdCgpLmphdmFTY3JpcHRDb250ZXh0KCk7CisgICAg
SlNWYWx1ZSAqbWV0YURhdGFWYWx1ZSA9IGpzVmFsdWVXaXRoVmFsdWVJbkNvbnRleHQobWV0YURh
dGEsIGpzQ29udGV4dCk7CisgICAgCisgICAgcmV0dXJuIHRvSlMoZXhlYywgW21ldGFEYXRhVmFs
dWUgSlNWYWx1ZVJlZl0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7CisjZW5kaWYKK30KKworSlNDOjpKU1ZhbHVlIEpTUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6OmFjY2Vzc0xvZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1w
bCgpLnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wbGF5ZXIo
KSkKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBw
YXJlbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKKworICAgIEpTVmFsdWUgKmRpY3Rpb25hcnkgPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6ZnJhbWUtPnNjcmlwdCgpLmphdmFTY3JpcHRDb250
ZXh0KCldOworICAgIFN0cmluZyBhY2Nlc3NMb2dTdHJpbmcgPSBwYXJlbnQtPnBsYXllcigpLT5h
Y2Nlc3NMb2coKTsKKyAgICBbZGljdGlvbmFyeSBzZXRWYWx1ZTpzdGF0aWNfY2FzdDxOU1N0cmlu
ZyAqPihhY2Nlc3NMb2dTdHJpbmcpIGZvclByb3BlcnR5OihOU1N0cmluZyAqKUNGU1RSKCJleHRl
bmRlZExvZyIpXTsKKworICAgIHJldHVybiB0b0pTKGV4ZWMsIFtkaWN0aW9uYXJ5IEpTVmFsdWVS
ZWZdKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworI2VuZGlmCit9CisKK0pTQzo6SlNWYWx1ZSBKU1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50OjplcnJvckxvZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgSFRNTFZpZGVvRWxlbWVudCogcGFyZW50ID0gaW1wbCgpLnBhcmVudEVs
ZW1lbnQoKTsKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wbGF5ZXIoKSkKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdWxsKCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBwYXJlbnQtPmRvY3Vt
ZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKKworICAgIEpTVmFsdWUgKmRpY3Rpb25hcnkgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdP
YmplY3RJbkNvbnRleHQ6ZnJhbWUtPnNjcmlwdCgpLmphdmFTY3JpcHRDb250ZXh0KCldOworICAg
IFN0cmluZyBlcnJvckxvZ1N0cmluZyA9IHBhcmVudC0+cGxheWVyKCktPmVycm9yTG9nKCk7Cisg
ICAgW2RpY3Rpb25hcnkgc2V0VmFsdWU6c3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4oZXJyb3JMb2dT
dHJpbmcpIGZvclByb3BlcnR5OihOU1N0cmluZyAqKUNGU1RSKCJleHRlbmRlZExvZyIpXTsKKwor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIFtkaWN0aW9uYXJ5IEpTVmFsdWVSZWZdKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworI2VuZGlm
CiB9CisKK30KKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE0OSw3ICsxNDksNyBAQAogCQkwNzI3N0U1NDE3RDAxOENDMDAxNTUzNEQgLyogSlNNZWRpYVN0
cmVhbVRyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDcyNzdFNDgxN0QwMThDQzAwMTU1MzREIC8qIEpTTWVkaWFTdHJlYW1UcmFja0V2
ZW50LmNwcCAqLzsgfTsKIAkJMDcyNzdFNTUxN0QwMThDQzAwMTU1MzREIC8qIEpTTWVkaWFTdHJl
YW1UcmFja0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzI3N0U0OTE3RDAxOENDMDAxNTUzNEQgLyogSlNNZWRpYVN0cmVhbVRyYWNrRXZlbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzJB
RTFFNTE4M0MwNzQxMDAwQTU5ODggLyogUGx1Z2luUmVwbGFjZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MkFFMURGMTgzQzA3NDEwMDBBNTk4
OCAvKiBQbHVnaW5SZXBsYWNlbWVudC5oICovOyB9OwotCQkwNzJBRTFFNjE4M0MwNzQxMDAwQTU5
ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1
aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmNwcCAqLzsgfTsKKwkJMDcyQUUxRTYxODNDMDc0MTAw
MEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8q
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tICovOyB9OwogCQkwNzJBRTFFODE4M0MwNzQx
MDAwQTU5ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MkFFMUUyMTgzQzA3NDEwMDBBNTk4OCAv
KiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5oICovOyB9OwogCQkwNzJDOEIxMTEzMUM1MTg2
MDBBNEZDRTkgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NkYwRDA5MTJCODE5MjcwMEMy
NkFBNCAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwICovOyB9OwogCQkwNzJD
QTg2MTE2Q0I0REMzMDA4QUUxMzEgLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzJDQTg2MDE2Q0I0REMz
MDA4QUUxMzEgLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5jcHAgKi87IH07CkBAIC03MDE3LDcg
KzcwMTcsNyBAQAogCQkwNzI5QjE0RTE3Q0ZDQ0EwMDA0RjFENjAgLyogTWVkaWFTdHJlYW1DZW50
ZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJl
YW1DZW50ZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzI5QjE0RjE3
Q0ZDQ0EwMDA0RjFENjAgLyogTWVkaWFTdHJlYW1DZW50ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1DZW50ZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDcyQUUxREYxODNDMDc0MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2Vt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsdWdpblJlcGxhY2VtZW50
Lmg7IHBhdGggPSBwbHVnaW5zL1BsdWdpblJlcGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTA3MkFFMUUwMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5S
ZXBsYWNlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBRdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHA7IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcyQUUxRTAx
ODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQubW07IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzJBRTFFMTE4M0MwNzQxMDAwQTU5ODggLyogUXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IG5hbWUgPSBR
dWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jc3M7IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50LmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyQUUx
RTIxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg7
IHBhdGggPSBwbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3MkFFMUUzMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQuaWRsOyBwYXRoID0gcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDI3OCw3ICsxNDI3OCw3
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTA3MkFFMURGMTgz
QzA3NDEwMDBBNTk4OCAvKiBQbHVnaW5SZXBsYWNlbWVudC5oICovLAotCQkJCTA3MkFFMUUwMTgz
QzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudC5jcHAgKi8sCisJCQkJ
MDcyQUUxRTAxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
ICovLAogCQkJCTA3MkFFMUUxMTgzQzA3NDEwMDBBNTk4OCAvKiBRdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5jc3MgKi8sCiAJCQkJMDcyQUUxRTIxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50LmggKi8sCiAJCQkJMDcyQUUxRTMxODNDMDc0MTAwMEE1OTg4IC8q
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50LmlkbCAqLywKQEAgLTI4NTkxLDcgKzI4NTkxLDcg
QEAKIAkJCQlFNEQ2ODc3NzBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZp
ZWROYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0MkFGN0FBMTAyQ0RERUEwMDhGRDREMyAv
KiBRdWlja0xvb2subW0gaW4gU291cmNlcyAqLywKLQkJCQkwNzJBRTFFNjE4M0MwNzQxMDAwQTU5
ODggLyogUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MDcyQUUxRTYxODNDMDc0MTAwMEE1OTg4IC8qIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5RTM3MTYxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFBy
aW50YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QTU3NEYyODEzMURCOTZEMDA0NzFCODgg
LyogUXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RDQjEyNTFGMTJEMDAz
RUYyNjkgLyogUmFkaW9JbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lv
biAxNjY2NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MCw2ICs2NDAsMjEgQEAgdm9pZCBNZWRpYVBsYXll
cjo6c2V0VmlkZW9GdWxsc2NyZWVuR3JhdgogewogICAgIG1fcHJpdmF0ZS0+c2V0VmlkZW9GdWxs
c2NyZWVuR3Jhdml0eShncmF2aXR5KTsKIH0KKworTlNBcnJheSogTWVkaWFQbGF5ZXI6OnRpbWVk
TWV0YWRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnRpbWVkTWV0YWRhdGEo
KTsKK30KKworU3RyaW5nIE1lZGlhUGxheWVyOjphY2Nlc3NMb2coKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmFjY2Vzc0xvZygpOworfQorCitTdHJpbmcgTWVkaWFQbGF5ZXI6OmVy
cm9yTG9nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5lcnJvckxvZygpOworfQog
I2VuZGlmCiAKIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXI6Om5ldHdvcmtT
dGF0ZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgJKHJldmlzaW9uIDE2NjY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKIAog
T0JKQ19DTEFTUyBBVkFzc2V0OwogT0JKQ19DTEFTUyBBVlBsYXllcjsKK09CSkNfQ0xBU1MgTlNB
cnJheTsKIE9CSkNfQ0xBU1MgUVRNb3ZpZTsKIAogY2xhc3MgQVZDRlBsYXllcjsKQEAgLTMwOCw3
ICszMDksMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUoRmxv
YXRSZWN0KTsKICAgICBlbnVtIFZpZGVvR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSwgVmlk
ZW9HcmF2aXR5UmVzaXplQXNwZWN0LCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3RGaWxsIH07CiAg
ICAgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KFZpZGVvR3Jhdml0eSk7CisKKyAgICBO
U0FycmF5ICp0aW1lZE1ldGFkYXRhKCkgY29uc3Q7CisgICAgU3RyaW5nIGFjY2Vzc0xvZygpIGNv
bnN0OworICAgIFN0cmluZyBlcnJvckxvZygpIGNvbnN0OwogI2VuZGlmCisKICAgICBJbnRTaXpl
IG5hdHVyYWxTaXplKCk7CiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0OwogICAgIGJvb2wgaGFz
QXVkaW8oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZsb2F0UmVjdCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldFZpZGVvRnVsbHNjcmVlbkdyYXZpdHkoTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSkgeyB9
CisKKyAgICB2aXJ0dWFsIE5TQXJyYXkgKnRpbWVkTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBTdHJpbmcgYWNjZXNzTG9nKCkgY29uc3QgeyByZXR1cm4gZW1wdHlT
dHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGVycm9yTG9nKCkgY29uc3QgeyByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsgfQogI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSA9IDA7ICAgIAogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5oCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
cmVzZW50YXRpb25TaXplRGlkQ2hhbmdlKEZsb2F0U2l6ZSk7CiAgICAgdm9pZCBkdXJhdGlvbkRp
ZENoYW5nZShkb3VibGUpOwogICAgIHZvaWQgcmF0ZURpZENoYW5nZShkb3VibGUpOworICAgIHZv
aWQgbWV0YWRhdGFEaWRBcnJpdmUoUmV0YWluUHRyPE5TQXJyYXk+KTsKIAogI2lmIEhBVkUoQVZG
T1VOREFUSU9OX1ZJREVPX09VVFBVVCkKICAgICB2b2lkIG91dHB1dE1lZGlhRGF0YVdpbGxDaGFu
Z2UoQVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXQqKTsKQEAgLTE1Miw3ICsxNTMsMTIgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXll
ciopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5GcmFtZShGbG9hdFJlY3Qp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KE1lZGlhUGxheWVy
OjpWaWRlb0dyYXZpdHkpOworCisgICAgdmlydHVhbCBOU0FycmF5ICp0aW1lZE1ldGFkYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgYWNjZXNzTG9nKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZXJyb3JMb2coKSBjb25zdDsKICNlbmRpZgorCiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCBmbG9hdCBtZWRpYVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQpIGNvbnN0
OwogICAgIHZpcnR1YWwgZG91YmxlIG1heGltdW1EdXJhdGlvblRvQ2FjaGVNZWRpYVRpbWUoKSBj
b25zdCB7IHJldHVybiA1OyB9CkBAIC0zMDEsNiArMzA3LDcgQEAgcHJpdmF0ZToKICAgICBtdXRh
YmxlIFJldGFpblB0cjxOU0FycmF5PiBtX2NhY2hlZFNlZWthYmxlUmFuZ2VzOwogICAgIG11dGFi
bGUgUmV0YWluUHRyPE5TQXJyYXk+IG1fY2FjaGVkTG9hZGVkUmFuZ2VzOwogICAgIFJldGFpblB0
cjxOU0FycmF5PiBtX2NhY2hlZFRyYWNrczsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gbV9jdXJy
ZW50TWV0YURhdGE7CiAgICAgRmxvYXRTaXplIG1fY2FjaGVkUHJlc2VudGF0aW9uU2l6ZTsKICAg
ICBkb3VibGUgbV9jYWNoZWREdXJhdGlvbjsKICAgICBkb3VibGUgbV9jYWNoZWRSYXRlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZpc2lvbiAxNjY2NDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw4IEBAIEBp
bnRlcmZhY2UgQVZQbGF5ZXJJdGVtIChXZWJLaXRFeHRlbnNpb24KIEBlbmQKICNlbmRpZgogCit0
eXBlZGVmIEFWTWV0YWRhdGFJdGVtIEFWTWV0YWRhdGFJdGVtVHlwZTsKKwogU09GVF9MSU5LX0ZS
QU1FV09SS19PUFRJT05BTChBVkZvdW5kYXRpb24pCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElP
TkFMKENvcmVNZWRpYSkKIFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZUltYWdlKQpA
QCAtMTMyLDYgKzEzNCw4IEBAIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVy
SXQKIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCiBTT0ZUX0xJ
TktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0KQogU09GVF9MSU5LX0NMQVNTKEFWRm91
bmRhdGlvbiwgQVZBc3NldEltYWdlR2VuZXJhdG9yKQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRh
dGlvbiwgQVZNZXRhZGF0YUl0ZW0pCisKIFNPRlRfTElOS19DTEFTUyhDb3JlSW1hZ2UsIENJQ29u
dGV4dCkKIFNPRlRfTElOS19DTEFTUyhDb3JlSW1hZ2UsIENJSW1hZ2UpCiAKQEAgLTE1Niw2ICsx
NjAsNyBAQCBTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lWmVyCiAjZGVmaW5l
IEFWUGxheWVyTGF5ZXIgZ2V0QVZQbGF5ZXJMYXllckNsYXNzKCkKICNkZWZpbmUgQVZVUkxBc3Nl
dCBnZXRBVlVSTEFzc2V0Q2xhc3MoKQogI2RlZmluZSBBVkFzc2V0SW1hZ2VHZW5lcmF0b3IgZ2V0
QVZBc3NldEltYWdlR2VuZXJhdG9yQ2xhc3MoKQorI2RlZmluZSBBVk1ldGFkYXRhSXRlbSBnZXRB
Vk1ldGFkYXRhSXRlbUNsYXNzKCkKIAogI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1
YWwgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsKCkKICNkZWZpbmUgQVZNZWRpYUNoYXJh
Y3RlcmlzdGljQXVkaWJsZSBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlKCkKQEAgLTg0
Nyw2ICs4NTIsMzUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
CiAgICAgW21fdmlkZW9MYXllciBzZXRWaWRlb0dyYXZpdHk6dmlkZW9HcmF2aXR5XTsKIH0KKwor
TlNBcnJheSAqTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dGltZWRNZXRhZGF0
YSgpIGNvbnN0Cit7CisgICAgaWYgKG1fY3VycmVudE1ldGFEYXRhKQorICAgICAgICByZXR1cm4g
bV9jdXJyZW50TWV0YURhdGEuZ2V0KCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworU3RyaW5nIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmFjY2Vzc0xvZygpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2F2UGxheWVySXRlbSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cisg
ICAgCisgICAgQVZQbGF5ZXJJdGVtQWNjZXNzTG9nICpsb2cgPSBbbV9hdlBsYXllckl0ZW0uZ2V0
KCkgYWNjZXNzTG9nXTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGxvZ1N0cmluZyA9IGFkb3B0
TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOltsb2cgZXh0ZW5kZWRMb2dEYXRhXSBl
bmNvZGluZzpbbG9nIGV4dGVuZGVkTG9nRGF0YVN0cmluZ0VuY29kaW5nXV0pOworCisgICAgcmV0
dXJuIGxvZ1N0cmluZy5nZXQoKTsKK30KKworU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmVycm9yTG9nKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYXZQbGF5ZXJJdGVt
KQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIEFWUGxheWVySXRlbUVycm9y
TG9nICpsb2cgPSBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgZXJyb3JMb2ddOworICAgIFJldGFpblB0
cjxOU1N0cmluZz4gbG9nU3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aERhdGE6W2xvZyBleHRlbmRlZExvZ0RhdGFdIGVuY29kaW5nOltsb2cgZXh0ZW5kZWRMb2dEYXRh
U3RyaW5nRW5jb2RpbmddXSk7CisKKyAgICByZXR1cm4gbG9nU3RyaW5nLmdldCgpOworfQogI2Vu
ZGlmCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1T
ZXRWaXNpYmxlKGJvb2wgaXNWaXNpYmxlKQpAQCAtMjE5Miw2ICsyMjI2LDE0IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0K
IAordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjptZXRhZGF0YURpZEFy
cml2ZShSZXRhaW5QdHI8TlNBcnJheT4gbWV0YWRhdGEpCit7CisgICAgaWYgKCFtZXRhZGF0YSB8
fCBbbWV0YWRhdGEgaXNLaW5kT2ZDbGFzczpbTlNOdWxsIGNsYXNzXV0pCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY3VycmVudE1ldGFEYXRhID0gbWV0YWRhdGE7Cit9CisKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dHJhY2tzRGlkQ2hhbmdlKFJldGFpblB0cjxO
U0FycmF5PiB0cmFja3MpCiB7CiAgICAgbV9jYWNoZWRUcmFja3MgPSB0cmFja3M7CkBAIC0yMjcw
LDYgKzIzMTIsNyBAQCBOU0FycmF5KiBpdGVtS1ZPUHJvcGVydGllcygpCiAgICAgICAgICAgICAg
ICAgQCJwbGF5YmFja0J1ZmZlckVtcHR5IiwKICAgICAgICAgICAgICAgICBAImR1cmF0aW9uIiwK
ICAgICAgICAgICAgICAgICBAImhhc0VuYWJsZWRBdWRpbyIsCisgICAgICAgICAgICAgICAgQCJ0
aW1lZE1ldGFkYXRhIiwKICAgICAgICAgICAgICAgICBuaWxdOwogICAgIH0KICAgICByZXR1cm4g
a2V5czsKQEAgLTIzNTcsNiArMjQwMCw4IEBAIC0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0
aDprZXlQYXRoIG8KICAgICAgICAgICAgIGZ1bmN0aW9uID0gV1RGOjpiaW5kKCZNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcmVzZW50YXRpb25TaXplRGlkQ2hhbmdlLCBtX2Nh
bGxiYWNrLCBGbG9hdFNpemUoW25ld1ZhbHVlIHNpemVWYWx1ZV0pKTsKICAgICAgICAgZWxzZSBp
ZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiZHVyYXRpb24iXSkKICAgICAgICAgICAgIGZ1
bmN0aW9uID0gV1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpk
dXJhdGlvbkRpZENoYW5nZSwgbV9jYWxsYmFjaywgQ01UaW1lR2V0U2Vjb25kcyhbbmV3VmFsdWUg
Q01UaW1lVmFsdWVdKSk7CisgICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAInRpbWVkTWV0YWRhdGEiXSAmJiBuZXdWYWx1ZSkKKyAgICAgICAgICAgIGZ1bmN0aW9uID0g
V1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjptZXRhZGF0YURp
ZEFycml2ZSwgbV9jYWxsYmFjaywgUmV0YWluUHRyPE5TQXJyYXk+KG5ld1ZhbHVlKSk7CiAgICAg
fQogCiAgICAgaWYgKGNvbnRleHQgPT0gTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlv
bkNvbnRleHRQbGF5ZXIgJiYgIXdpbGxDaGFuZ2UpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>