<?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>142493</bug_id>
          
          <creation_ts>2015-03-09 08:05:28 -0700</creation_ts>
          <short_desc>[EFL] Move DispatchQueue to WTF</short_desc>
          <delta_ts>2015-03-09 10:49:48 -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>WebKit EFL</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>
          
          <blocked>142473</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075602</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-03-09 08:05:28 -0700</bug_when>
    <thetext>Now that WorkQueue has moved to WTF, it makes sense that DispatchQueue should move there as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075603</commentid>
    <comment_count>1</comment_count>
      <attachid>248244</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-03-09 08:11:09 -0700</bug_when>
    <thetext>Created attachment 248244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075604</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-09 08:13:39 -0700</bug_when>
    <thetext>Attachment 248244 did not pass style-queue:


ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.cpp:119:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.cpp:214:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:37:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 8 in 6 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>1075620</commentid>
    <comment_count>3</comment_count>
      <attachid>248244</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-09 09:30:10 -0700</bug_when>
    <thetext>Comment on attachment 248244
Patch

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

rs=me with the buildfix included.

&gt; Source/WTF/wtf/PlatformEfl.cmake:-26
&gt; -    &quot;${WEBKIT2_DIR}/Platform/efl&quot;

&quot;${WTF_DIR}/wtf/efl&quot; should be added and EFL will build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075622</commentid>
    <comment_count>4</comment_count>
      <attachid>248248</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-03-09 09:36:51 -0700</bug_when>
    <thetext>Created attachment 248248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075623</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-09 09:38:56 -0700</bug_when>
    <thetext>Attachment 248248 did not pass style-queue:


ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.cpp:119:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.cpp:214:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueEfl.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:37:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 8 in 6 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>1075625</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-09 09:43:56 -0700</bug_when>
    <thetext>ninja: error: &apos;../../Source/WebKit2/Platform/efl/DispatchQueueWorkItemEfl.h&apos;, needed by &apos;WebKit2-forwarding-headers.stamp&apos;, missing and no known rule to make it

Maybe we need some hint mechanism to make GTK build force 
rerun cmake to avoid this kind of incremental build issues.

What about adding a dummy file which would trigger cmake
rerun if you touch it? It would solve this problesm for
buildbots, EWS bots and all developers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075626</commentid>
    <comment_count>7</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-03-09 09:44:29 -0700</bug_when>
    <thetext>Is DispatchQueue an implementation detail of WTF or is it its own thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075631</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-03-09 09:56:47 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Is DispatchQueue an implementation detail of WTF or is it its own thing?

It&apos;s an implementation detail of the WorkQueue. I couldn&apos;t find any uses apart from WorkQueue, but perhaps ossy can correct me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075635</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-09 10:04:34 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Is DispatchQueue an implementation detail of WTF or is it its own thing?
&gt; 
&gt; It&apos;s an implementation detail of the WorkQueue. I couldn&apos;t find any uses
&gt; apart from WorkQueue, but perhaps ossy can correct me.

I think you&apos;re right, I couldn&apos;t find any other use. ( Just a note, DispatchQueue
was separated from WorkQueue by http://trac.webkit.org/changeset/157289 )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075636</commentid>
    <comment_count>10</comment_count>
      <attachid>248248</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-09 10:05:38 -0700</bug_when>
    <thetext>Comment on attachment 248248
Patch

still r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075637</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-03-09 10:07:19 -0700</bug_when>
    <thetext>Okay. I&apos;ll land this and trigger a clean build on the GTK+ bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075653</commentid>
    <comment_count>12</comment_count>
      <attachid>248248</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-09 10:49:45 -0700</bug_when>
    <thetext>Comment on attachment 248248
Patch

Clearing flags on attachment: 248248

Committed r181271: &lt;http://trac.webkit.org/changeset/181271&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075654</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-09 10:49:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248244</attachid>
            <date>2015-03-09 08:11:09 -0700</date>
            <delta_ts>2015-03-09 09:36:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142493-20150309081045.patch</filename>
            <type>text/plain</type>
            <size>32242</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJlOTM4MWQ1ZDE3ZDkzYjllNGNlYWRm
MTI1OGM1ODhhOWY0MmJlZmYuLmJmNmQ0ZjYyZTUxMWYwY2NmM2I2ZmE1MjBlY2M1NDQyZDM5Mzg1
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDMtMDkgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtFRkxdIE1vdmUgRGlzcGF0Y2hRdWV1ZSB0
byBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MjQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtRWZsLmNtYWtlOiBBZGQgRGlzcGF0Y2hRdWV1ZSB0byB0aGUgc291cmNlIGxp
c3QuCisgICAgICAgICogd3RmL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcC4KKyAgICAg
ICAgKiB3dGYvZWZsL0Rpc3BhdGNoUXVldWVFZmwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmguCisgICAgICAgICogd3RmL2VmbC9E
aXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmwuaC4KKwogMjAxNS0wMy0wNyAgQnJl
bnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBSZXZpdmUg
V1RGOjpXb3JrUXVldWUgb24gV2luZG93cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDQ5ZmFlMmZjMzIwM2I3YzYz
ZWVhNTkxZTViMDFmNzZiNzFlMGIyMDcuLjZkYWM1YmEzODFjN2U5OTA5ZjU4NzMwYTY4NTY1Zjlj
NTFhNTQyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wMy0wOSAgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0VGTF0gTW92ZSBE
aXNwYXRjaFF1ZXVlIHRvIFdURgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQyNDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogUmVtb3ZlIERpc3BhdGNoUXVldWUgZnJv
bSB0aGUgc291cmNlIGxpc3QuCisKIDIwMTUtMDMtMDggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBBZGQgc2NhZmZvbGRpbmcgZm9y
IHRoZSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggMDhhOWRhY2I0NzFiMDI5NWI0ZWI1ZjI3MGJhN2QxMjgwYWI1ZmE0My4uM2ZmZjgxZGY4
OTRhMGJjYzY4NTVlMzI4NzM0ZWVmMWIyYmQ2MzRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTEsNCArMSw1IEBACiBsaXN0KEFQUEVORCBXVEZfU09VUkNFUworICAgIGVmbC9EaXNw
YXRjaFF1ZXVlRWZsLmNwcAogICAgIGVmbC9NYWluVGhyZWFkRWZsLmNwcAogICAgIGVmbC9SdW5M
b29wRWZsLmNwcAogICAgIGVmbC9Xb3JrUXVldWVFZmwuY3BwCkBAIC0yMyw3ICsyNCw2IEBAIGxp
c3QoQVBQRU5EIFdURl9MSUJSQVJJRVMKICkKIAogbGlzdChBUFBFTkQgV1RGX0lOQ0xVREVfRElS
RUNUT1JJRVMKLSAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vZWZsIgogICAgICR7RUNPUkVf
RVZBU19JTkNMVURFX0RJUlN9CiAgICAgJHtFQ09SRV9JTkNMVURFX0RJUlN9CiAgICAgJHtFQ09S
RV9JTUZfSU5DTFVERV9ESVJTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZWZsL0Rpc3Bh
dGNoUXVldWVFZmwuY3BwIGIvU291cmNlL1dURi93dGYvZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ1NDdhYzIxYWEwMTRhNWEyOWEzY2Y0ZDM2NDU3MGJlNDY3ZTY5Y2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAK
QEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVj
dHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRpc3BhdGNoUXVldWVFZmwuaCIKKworI2luY2x1ZGUgPERpc3BhdGNo
UXVldWVXb3JrSXRlbUVmbC5oPgorI2luY2x1ZGUgPHN5cy90aW1lcmZkLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK3N0YXRpYyBjb25zdCBp
bnQgbWljcm9TZWNvbmRzUGVyU2Vjb25kID0gMTAwMDAwMDsKK3N0YXRpYyBjb25zdCBpbnQgbmFu
b1NlY29uZHNQZXJTZWNvbmQgPSAxMDAwMDAwMDAwOworc3RhdGljIGNvbnN0IGludCBpbnZhbGlk
U29ja2V0RGVzY3JpcHRvciA9IC0xOworc3RhdGljIGNvbnN0IGNoYXIgd2FrZVVwVGhyZWFkTWVz
c2FnZSA9ICdXJzsKKworY2xhc3MgRGlzcGF0Y2hRdWV1ZTo6VGhyZWFkQ29udGV4dCB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgc3RhcnQoY29uc3QgY2hhciogbmFtZSwgUGFzc1JlZlB0cjxE
aXNwYXRjaFF1ZXVlPiBkaXNwYXRjaFF1ZXVlKQorICAgIHsKKyAgICAgICAgLy8gVGhlIERpc3Bh
dGNoUXVldWVUaHJlYWRDb250ZXh0IGluc3RhbmNlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSB0aHJl
YWQgZnVuY3Rpb24gYW5kIGRlbGV0ZWQgaW4gaXQuCisgICAgICAgIGRldGFjaFRocmVhZChjcmVh
dGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmVGhyZWFkQ29u
dGV4dDo6ZnVuY3Rpb24pLCBuZXcgVGhyZWFkQ29udGV4dChkaXNwYXRjaFF1ZXVlKSwgbmFtZSkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBUaHJlYWRDb250ZXh0KFBhc3NSZWZQdHI8RGlzcGF0
Y2hRdWV1ZT4gZGlzcGF0Y2hRdWV1ZSkKKyAgICAgICAgOiBtX2Rpc3BhdGNoUXVldWUoZGlzcGF0
Y2hRdWV1ZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGZ1bmN0aW9uKFRocmVh
ZENvbnRleHQqIHRocmVhZENvbnRleHQpCisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGhyZWFkQ29udGV4dD4odGhyZWFkQ29udGV4dCktPm1fZGlzcGF0Y2hRdWV1ZS0+ZGlzcGF0Y2hR
dWV1ZVRocmVhZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8RGlz
cGF0Y2hRdWV1ZT4gbV9kaXNwYXRjaFF1ZXVlOworfTsKKworUGFzc1JlZlB0cjxEaXNwYXRjaFF1
ZXVlPiBEaXNwYXRjaFF1ZXVlOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBSZWZQ
dHI8RGlzcGF0Y2hRdWV1ZT4gZGlzcGF0Y2hRdWV1ZSA9IGFkb3B0UmVmPERpc3BhdGNoUXVldWU+
KG5ldyBEaXNwYXRjaFF1ZXVlKCkpOworCisgICAgVGhyZWFkQ29udGV4dDo6c3RhcnQobmFtZSwg
ZGlzcGF0Y2hRdWV1ZSk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hRdWV1ZS5yZWxlYXNlKCk7Cit9
CisKK0Rpc3BhdGNoUXVldWU6OkRpc3BhdGNoUXVldWUoKQorICAgIDogbV9pc1RocmVhZFJ1bm5p
bmcodHJ1ZSkKK3sKKyAgICBpbnQgZmRzWzJdOworICAgIGlmIChwaXBlKGZkcykpCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0g
ZmRzWzBdOworICAgIG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFdOworICAgIEZEX1pF
Uk8oJm1fZmlsZURlc2NyaXB0b3JTZXQpOworICAgIEZEX1NFVChtX3JlYWRGcm9tUGlwZURlc2Ny
aXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBtX21heEZpbGVEZXNjcmlwdG9yID0g
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworCisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52
YWxpZFNvY2tldERlc2NyaXB0b3I7Cit9CisKK0Rpc3BhdGNoUXVldWU6On5EaXNwYXRjaFF1ZXVl
KCkKK3sKKyAgICBjbG9zZShtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOworICAgIGNsb3NlKG1f
d3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpkaXNwYXRj
aChzdGQ6OnVuaXF1ZV9wdHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV93b3JrSXRlbXNMb2NrKTsKKyAgICAgICAgbV93b3JrSXRlbXMuYXBw
ZW5kKFdURjo6bW92ZShpdGVtKSk7CisgICAgfQorCisgICAgd2FrZVVwVGhyZWFkKCk7Cit9CisK
K3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2goc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0
ZW0+IGl0ZW0pCit7CisgICAgaW5zZXJ0VGltZXJXb3JrSXRlbShXVEY6Om1vdmUoaXRlbSkpOwor
ICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OnN0b3BUaHJlYWQo
KQoreworICAgIEFTU0VSVChtX3NvY2tldERlc2NyaXB0b3IgPT0gaW52YWxpZFNvY2tldERlc2Ny
aXB0b3IpOworCisgICAgbV9pc1RocmVhZFJ1bm5pbmcgPSBmYWxzZTsKKyAgICB3YWtlVXBUaHJl
YWQoKTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpzZXRTb2NrZXRFdmVudEhhbmRsZXIoaW50
IGZpbGVEZXNjcmlwdG9yLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQoreworICAg
IEFTU0VSVChtX3NvY2tldERlc2NyaXB0b3IgPT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOwor
CisgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgbV9zb2NrZXRF
dmVudEhhbmRsZXIgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworCisgICAgaWYgKGZpbGVEZXNjcmlw
dG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9
IGZpbGVEZXNjcmlwdG9yOworICAgIEZEX1NFVChmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2Ny
aXB0b3JTZXQpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmNsZWFyU29ja2V0RXZlbnRIYW5k
bGVyKCkKK3sKKyAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yKTsKKworICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgPT0gbV9tYXhGaWxlRGVz
Y3JpcHRvcikKKyAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVz
Y3JpcHRvcjsKKworICAgIEZEX0NMUihtX3NvY2tldERlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlw
dG9yU2V0KTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlw
dG9yOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OnBlcmZvcm1Xb3JrKCkKK3sKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdvcmtJdGVtPj4gd29y
a0l0ZW1zOworCisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dv
cmtJdGVtc0xvY2spOworICAgICAgICAgICAgaWYgKG1fd29ya0l0ZW1zLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG1fd29ya0l0ZW1zLnN3YXAod29y
a0l0ZW1zKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29y
a0l0ZW1zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgd29ya0l0ZW1zW2ldLT5kaXNwYXRjaCgp
OworICAgIH0KK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtVGltZXJXb3JrKCkKK3sK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+PiB0aW1lcldvcmtJdGVt
czsKKworICAgIHsKKyAgICAgICAgLy8gUHJvdGVjdHMgbV90aW1lcldvcmtJdGVtcy4KKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKKyAgICAgICAgaWYg
KG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIC8vIENvcGllcyBhbGwgdGhlIHRpbWVyIHdvcmsgaXRlbXMgaW4gbV90aW1lcldvcmtJdGVt
cyB0byBsb2NhbCB2ZWN0b3IuCisgICAgICAgIG1fdGltZXJXb3JrSXRlbXMuc3dhcCh0aW1lcldv
cmtJdGVtcyk7CisgICAgfQorCisgICAgZG91YmxlIGN1cnJlbnRUaW1lTmFub1NlY29uZHMgPSBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAqIG5hbm9TZWNvbmRzUGVyU2Vjb25kOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lcldvcmtJdGVtcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoIXRpbWVyV29ya0l0ZW1zW2ldLT5oYXNFeHBpcmVkKGN1cnJlbnRUaW1lTmFu
b1NlY29uZHMpKSB7CisgICAgICAgICAgICBpbnNlcnRUaW1lcldvcmtJdGVtKFdURjo6bW92ZSh0
aW1lcldvcmtJdGVtc1tpXSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBJZiBhIHRpbWVyIHdvcmsgaXRlbSBoYXMgZXhwaXJlZCwgZGlzcGF0Y2ggdGhl
IGZ1bmN0aW9uIG9mIHRoZSB3b3JrIGl0ZW0uCisgICAgICAgIHRpbWVyV29ya0l0ZW1zW2ldLT5k
aXNwYXRjaCgpOworICAgIH0KK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtRmlsZURl
c2NyaXB0b3JXb3JrKCkKK3sKKyAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9m
aWxlRGVzY3JpcHRvclNldDsKKworICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciAr
IDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIGdldE5leHRUaW1lT3V0KCkpID49IDAp
IHsKKyAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRG
aWxlRGVzY3JpcHRvclNldCkpIHsKKyAgICAgICAgICAgIGNoYXIgbWVzc2FnZTsKKyAgICAgICAg
ICAgIGlmIChyZWFkKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1lc3NhZ2UsIDEpID09IC0x
KQorICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZnJvbSBEaXNwYXRj
aFF1ZXVlIFRocmVhZCBwaXBlIik7CisKKyAgICAgICAgICAgIEFTU0VSVChtZXNzYWdlID09IHdh
a2VVcFRocmVhZE1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fc29ja2V0RGVz
Y3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3NvY2tldERl
c2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQorICAgICAgICAgICAgbV9zb2NrZXRF
dmVudEhhbmRsZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6aW5zZXJ0VGlt
ZXJXb3JrSXRlbShzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBB
U1NFUlQoaXRlbSk7CisKKyAgICBzaXplX3QgcG9zaXRpb24gPSAwOworCisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2NrKTsKKyAgICAvLyBUaGUgaXRlbXMgc2hvdWxk
IGJlIG9yZGVyZWQgYnkgZXhwaXJlIHRpbWUuCisgICAgZm9yICg7IHBvc2l0aW9uIDwgbV90aW1l
cldvcmtJdGVtcy5zaXplKCk7ICsrcG9zaXRpb24pCisgICAgICAgIGlmIChpdGVtLT5leHBpcmF0
aW9uVGltZU5hbm9TZWNvbmRzKCkgPCBtX3RpbWVyV29ya0l0ZW1zW3Bvc2l0aW9uXS0+ZXhwaXJh
dGlvblRpbWVOYW5vU2Vjb25kcygpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBtX3RpbWVy
V29ya0l0ZW1zLmluc2VydChwb3NpdGlvbiwgV1RGOjptb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBE
aXNwYXRjaFF1ZXVlOjpkaXNwYXRjaFF1ZXVlVGhyZWFkKCkKK3sKKyAgICB3aGlsZSAobV9pc1Ro
cmVhZFJ1bm5pbmcpIHsKKyAgICAgICAgcGVyZm9ybVdvcmsoKTsKKyAgICAgICAgcGVyZm9ybVRp
bWVyV29yaygpOworICAgICAgICBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAgfQor
fQorCit2b2lkIERpc3BhdGNoUXVldWU6Ondha2VVcFRocmVhZCgpCit7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yTG9jayk7CisgICAgaWYgKHdyaXRlKG1f
d3JpdGVUb1BpcGVEZXNjcmlwdG9yLCAmd2FrZVVwVGhyZWFkTWVzc2FnZSwgc2l6ZW9mKGNoYXIp
KSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBEaXNwYXRjaFF1
ZXVlIFRocmVhZCIpOworfQorCit0aW1ldmFsKiBEaXNwYXRjaFF1ZXVlOjpnZXROZXh0VGltZU91
dCgpIGNvbnN0Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGltZXJXb3JrSXRlbXNMb2Nr
KTsKKyAgICBpZiAobV90aW1lcldvcmtJdGVtcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgc3RhdGljIHRpbWV2YWwgdGltZVZhbHVlOworICAgIHRpbWVWYWx1ZS50dl9zZWMg
PSAwOworICAgIHRpbWVWYWx1ZS50dl91c2VjID0gMDsKKyAgICBkb3VibGUgdGltZU91dFNlY29u
ZHMgPSAobV90aW1lcldvcmtJdGVtc1swXS0+ZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcygpIC0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKiBuYW5vU2Vjb25kc1BlclNlY29uZCkgLyBu
YW5vU2Vjb25kc1BlclNlY29uZDsKKyAgICBpZiAodGltZU91dFNlY29uZHMgPiAwKSB7CisgICAg
ICAgIHRpbWVWYWx1ZS50dl9zZWMgPSBzdGF0aWNfY2FzdDxsb25nPih0aW1lT3V0U2Vjb25kcyk7
CisgICAgICAgIHRpbWVWYWx1ZS50dl91c2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4oKHRpbWVPdXRT
ZWNvbmRzIC0gdGltZVZhbHVlLnR2X3NlYykgKiBtaWNyb1NlY29uZHNQZXJTZWNvbmQpOworICAg
IH0KKworICAgIHJldHVybiAmdGltZVZhbHVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvZWZsL0Rpc3BhdGNoUXVldWVFZmwuaCBiL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1
ZXVlRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNmOGUzNzczYTFkZDZiMGE0ZWY4OTJiMzE4NjM0NDEzOGIy
ODY0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVl
RWZsLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERp
c3BhdGNoUXVldWVFZmxfaAorI2RlZmluZSBEaXNwYXRjaFF1ZXVlRWZsX2gKKworI2luY2x1ZGUg
PHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitjbGFzcyBUaW1lcldvcmtJdGVt
OworY2xhc3MgV29ya0l0ZW07CisKK2NsYXNzIERpc3BhdGNoUXVldWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8RGlzcGF0Y2hRdWV1ZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERpc3BhdGNoUXVldWU+IGNyZWF0ZShjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+RGlz
cGF0Y2hRdWV1ZSgpOworCisgICAgdm9pZCBkaXNwYXRjaChzdGQ6OnVuaXF1ZV9wdHI8V29ya0l0
ZW0+KTsKKyAgICB2b2lkIGRpc3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPik7
CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisgICAgdm9pZCBzZXRTb2NrZXRFdmVudEhhbmRsZXIo
aW50LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KTsKKyAgICB2b2lkIGNsZWFyU29ja2V0RXZlbnRI
YW5kbGVyKCk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgVGhyZWFkQ29udGV4dDsKKworICAgIERp
c3BhdGNoUXVldWUoKTsKKworICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKKyAgICB2b2lkIHBlcmZv
cm1UaW1lcldvcmsoKTsKKyAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKKyAg
ICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0oc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+
KTsKKyAgICB2b2lkIGRpc3BhdGNoUXVldWVUaHJlYWQoKTsKKyAgICB2b2lkIHdha2VVcFRocmVh
ZCgpOworICAgIHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCkgY29uc3Q7CisKKyAgICBmZF9zZXQg
bV9maWxlRGVzY3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKKyAgICBp
bnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3Jp
cHRvcjsKKyAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxvY2s7CisKKyAgICBib29s
IG1faXNUaHJlYWRSdW5uaW5nOworCisgICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKKyAgICBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOworCisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4+IG1fd29ya0l0ZW1zOworICAgIE11dGV4IG1fd29y
a0l0ZW1zTG9jazsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4+
IG1fdGltZXJXb3JrSXRlbXM7CisgICAgbXV0YWJsZSBNdXRleCBtX3RpbWVyV29ya0l0ZW1zTG9j
azsKK307CisKKyNlbmRpZiAvLyBEaXNwYXRjaFF1ZXVlRWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmwuaCBiL1NvdXJjZS9XVEYvd3Rm
L2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOGQ4N2IzNjI5YjBk
Yjk2NzlhM2E4OWVmZmNjYTk2YmQ0NDQ0MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvZWZsL0Rpc3BhdGNoUXVldWVXb3JrSXRlbUVmbC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmxfaAor
I2RlZmluZSBEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmxfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dv
cmtRdWV1ZS5oPgorCitjbGFzcyBXb3JrSXRlbSB7CitwdWJsaWM6CisgICAgV29ya0l0ZW0oUGFz
c1JlZlB0cjxXb3JrUXVldWU+IHdvcmtRdWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5j
dGlvbikKKyAgICAgICAgOiBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9mdW5j
dGlvbihXVEY6Om1vdmUoZnVuY3Rpb24pKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGRpc3Bh
dGNoKCkgeyBtX2Z1bmN0aW9uKCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8V29ya1F1ZXVl
PiBtX3dvcmtRdWV1ZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVuY3Rpb247Cit9
OworCitjbGFzcyBUaW1lcldvcmtJdGVtIDogcHVibGljIFdvcmtJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShQYXNzUmVmUHRy
PFdvcmtRdWV1ZT4gd29ya1F1ZXVlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBz
dGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZGVsYXlOYW5vU2Vjb25kcykKKyAgICB7CisgICAgICAg
IEFTU0VSVChkZWxheU5hbm9TZWNvbmRzLmNvdW50KCkgPj0gMCk7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4obmV3IFRpbWVyV29ya0l0ZW0od29ya1F1ZXVl
LCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAqIDEw
MDAwMDAwMDAuMCArIGRlbGF5TmFub1NlY29uZHMuY291bnQoKSkpOworICAgIH0KKyAgICBkb3Vi
bGUgZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwaXJhdGlv
blRpbWVOYW5vU2Vjb25kczsgfQorICAgIGJvb2wgaGFzRXhwaXJlZChkb3VibGUgY3VycmVudFRp
bWVOYW5vU2Vjb25kcykgY29uc3QgeyByZXR1cm4gY3VycmVudFRpbWVOYW5vU2Vjb25kcyA+PSBt
X2V4cGlyYXRpb25UaW1lTmFub1NlY29uZHM7IH0KKworcHJvdGVjdGVkOgorICAgIFRpbWVyV29y
a0l0ZW0oUGFzc1JlZlB0cjxXb3JrUXVldWU+IHdvcmtRdWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMpCisgICAgICAg
IDogV29ya0l0ZW0od29ya1F1ZXVlLCBXVEY6Om1vdmUoZnVuY3Rpb24pKQorICAgICAgICAsIG1f
ZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcyhleHBpcmF0aW9uVGltZU5hbm9TZWNvbmRzKQorICAg
IHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fZXhwaXJhdGlvblRpbWVOYW5vU2Vj
b25kczsKK307CisKKyNlbmRpZiAvLyBEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmxfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTQ3YWMyMWFhMDE0YTVhMjlhM2NmNGQzNjQ1NzBiZTQ2
N2U2OWNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJEaXNwYXRjaFF1ZXVlRWZsLmgiCi0KLSNpbmNsdWRlIDxEaXNw
YXRjaFF1ZXVlV29ya0l0ZW1FZmwuaD4KLSNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPgotI2luY2x1
ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1zdGF0aWMgY29u
c3QgaW50IG1pY3JvU2Vjb25kc1BlclNlY29uZCA9IDEwMDAwMDA7Ci1zdGF0aWMgY29uc3QgaW50
IG5hbm9TZWNvbmRzUGVyU2Vjb25kID0gMTAwMDAwMDAwMDsKLXN0YXRpYyBjb25zdCBpbnQgaW52
YWxpZFNvY2tldERlc2NyaXB0b3IgPSAtMTsKLXN0YXRpYyBjb25zdCBjaGFyIHdha2VVcFRocmVh
ZE1lc3NhZ2UgPSAnVyc7Ci0KLWNsYXNzIERpc3BhdGNoUXVldWU6OlRocmVhZENvbnRleHQgewot
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIHN0YXJ0KGNvbnN0IGNoYXIqIG5hbWUsIFBhc3NSZWZQ
dHI8RGlzcGF0Y2hRdWV1ZT4gZGlzcGF0Y2hRdWV1ZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBE
aXNwYXRjaFF1ZXVlVGhyZWFkQ29udGV4dCBpbnN0YW5jZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUg
dGhyZWFkIGZ1bmN0aW9uIGFuZCBkZWxldGVkIGluIGl0LgotICAgICAgICBkZXRhY2hUaHJlYWQo
Y3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJlRocmVh
ZENvbnRleHQ6OmZ1bmN0aW9uKSwgbmV3IFRocmVhZENvbnRleHQoZGlzcGF0Y2hRdWV1ZSksIG5h
bWUpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVGhyZWFkQ29udGV4dChQYXNzUmVmUHRyPERp
c3BhdGNoUXVldWU+IGRpc3BhdGNoUXVldWUpCi0gICAgICAgIDogbV9kaXNwYXRjaFF1ZXVlKGRp
c3BhdGNoUXVldWUpCi0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkKiBmdW5jdGlvbihU
aHJlYWRDb250ZXh0KiB0aHJlYWRDb250ZXh0KQotICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFRocmVhZENvbnRleHQ+KHRocmVhZENvbnRleHQpLT5tX2Rpc3BhdGNoUXVldWUtPmRpc3Bh
dGNoUXVldWVUaHJlYWQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRy
PERpc3BhdGNoUXVldWU+IG1fZGlzcGF0Y2hRdWV1ZTsKLX07Ci0KLVBhc3NSZWZQdHI8RGlzcGF0
Y2hRdWV1ZT4gRGlzcGF0Y2hRdWV1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAg
UmVmUHRyPERpc3BhdGNoUXVldWU+IGRpc3BhdGNoUXVldWUgPSBhZG9wdFJlZjxEaXNwYXRjaFF1
ZXVlPihuZXcgRGlzcGF0Y2hRdWV1ZSgpKTsKLQotICAgIFRocmVhZENvbnRleHQ6OnN0YXJ0KG5h
bWUsIGRpc3BhdGNoUXVldWUpOwotCi0gICAgcmV0dXJuIGRpc3BhdGNoUXVldWUucmVsZWFzZSgp
OwotfQotCi1EaXNwYXRjaFF1ZXVlOjpEaXNwYXRjaFF1ZXVlKCkKLSAgICA6IG1faXNUaHJlYWRS
dW5uaW5nKHRydWUpCi17Ci0gICAgaW50IGZkc1syXTsKLSAgICBpZiAocGlwZShmZHMpKQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRv
ciA9IGZkc1swXTsKLSAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKLSAgICBG
RF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLSAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVE
ZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Ci0gICAgbV9tYXhGaWxlRGVzY3JpcHRv
ciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9
IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwotfQotCi1EaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hR
dWV1ZSgpCi17Ci0gICAgY2xvc2UobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsKLSAgICBjbG9z
ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7Ci19Ci0KLXZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlz
cGF0Y2goc3RkOjp1bmlxdWVfcHRyPFdvcmtJdGVtPiBpdGVtKQotewotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1zTG9jayk7Ci0gICAgICAgIG1fd29ya0l0ZW1z
LmFwcGVuZChXVEY6Om1vdmUoaXRlbSkpOwotICAgIH0KLQotICAgIHdha2VVcFRocmVhZCgpOwot
fQotCi12b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldv
cmtJdGVtPiBpdGVtKQotewotICAgIGluc2VydFRpbWVyV29ya0l0ZW0oV1RGOjptb3ZlKGl0ZW0p
KTsKLSAgICB3YWtlVXBUaHJlYWQoKTsKLX0KLQotdm9pZCBEaXNwYXRjaFF1ZXVlOjpzdG9wVGhy
ZWFkKCkKLXsKLSAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXRE
ZXNjcmlwdG9yKTsKLQotICAgIG1faXNUaHJlYWRSdW5uaW5nID0gZmFsc2U7Ci0gICAgd2FrZVVw
VGhyZWFkKCk7Ci19Ci0KLXZvaWQgRGlzcGF0Y2hRdWV1ZTo6c2V0U29ja2V0RXZlbnRIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKLXsK
LSAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXREZXNjcmlwdG9y
KTsKLQotICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIG1fc29j
a2V0RXZlbnRIYW5kbGVyID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLQotICAgIGlmIChmaWxlRGVz
Y3JpcHRvciA+IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0
b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBGRF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVE
ZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBEaXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50
SGFuZGxlcigpCi17Ci0gICAgQVNTRVJUKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29j
a2V0RGVzY3JpcHRvcik7Ci0KLSAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yID09IG1fbWF4Rmls
ZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlw
ZURlc2NyaXB0b3I7Ci0KLSAgICBGRF9DTFIobV9zb2NrZXREZXNjcmlwdG9yLCAmbV9maWxlRGVz
Y3JpcHRvclNldCk7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVz
Y3JpcHRvcjsKLX0KLQotdm9pZCBEaXNwYXRjaFF1ZXVlOjpwZXJmb3JtV29yaygpCi17Ci0gICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4+
IHdvcmtJdGVtczsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV93b3JrSXRlbXNMb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3dvcmtJdGVtcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX3dvcmtJdGVtcy5zd2Fw
KHdvcmtJdGVtcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHdvcmtJdGVtcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHdvcmtJdGVtc1tpXS0+ZGlzcGF0
Y2goKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybVRpbWVyV29yaygp
Ci17Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPj4gdGltZXJXb3Jr
SXRlbXM7Ci0KLSAgICB7Ci0gICAgICAgIC8vIFByb3RlY3RzIG1fdGltZXJXb3JrSXRlbXMuCi0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAgICAg
IGlmIChtX3RpbWVyV29ya0l0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAvLyBDb3BpZXMgYWxsIHRoZSB0aW1lciB3b3JrIGl0ZW1zIGluIG1fdGltZXJXb3Jr
SXRlbXMgdG8gbG9jYWwgdmVjdG9yLgotICAgICAgICBtX3RpbWVyV29ya0l0ZW1zLnN3YXAodGlt
ZXJXb3JrSXRlbXMpOwotICAgIH0KLQotICAgIGRvdWJsZSBjdXJyZW50VGltZU5hbm9TZWNvbmRz
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKiBuYW5vU2Vjb25kc1BlclNlY29uZDsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKCF0aW1lcldvcmtJdGVtc1tpXS0+aGFzRXhwaXJlZChjdXJyZW50VGlt
ZU5hbm9TZWNvbmRzKSkgewotICAgICAgICAgICAgaW5zZXJ0VGltZXJXb3JrSXRlbShXVEY6Om1v
dmUodGltZXJXb3JrSXRlbXNbaV0pKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gSWYgYSB0aW1lciB3b3JrIGl0ZW0gaGFzIGV4cGlyZWQsIGRpc3BhdGNo
IHRoZSBmdW5jdGlvbiBvZiB0aGUgd29yayBpdGVtLgotICAgICAgICB0aW1lcldvcmtJdGVtc1tp
XS0+ZGlzcGF0Y2goKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybUZp
bGVEZXNjcmlwdG9yV29yaygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9
IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0
b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0LCAwLCAwLCBnZXROZXh0VGltZU91dCgpKSA+
PSAwKSB7Ci0gICAgICAgIGlmIChGRF9JU1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZy
ZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7Ci0gICAgICAgICAgICBjaGFyIG1lc3NhZ2U7Ci0gICAg
ICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtZXNzYWdlLCAxKSA9
PSAtMSkKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gRGlz
cGF0Y2hRdWV1ZSBUaHJlYWQgcGlwZSIpOwotCi0gICAgICAgICAgICBBU1NFUlQobWVzc2FnZSA9
PSB3YWtlVXBUaHJlYWRNZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX3NvY2tl
dERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2Nr
ZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAgICAgICAgIG1fc29j
a2V0RXZlbnRIYW5kbGVyKCk7Ci0gICAgfQotfQotCi12b2lkIERpc3BhdGNoUXVldWU6Omluc2Vy
dFRpbWVyV29ya0l0ZW0oc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCi17Ci0g
ICAgQVNTRVJUKGl0ZW0pOwotCi0gICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKLQotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7Ci0gICAgLy8gVGhlIGl0ZW1zIHNo
b3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0aW1lLgotICAgIGZvciAoOyBwb3NpdGlvbiA8IG1f
dGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bvc2l0aW9uKQotICAgICAgICBpZiAoaXRlbS0+ZXhw
aXJhdGlvblRpbWVOYW5vU2Vjb25kcygpIDwgbV90aW1lcldvcmtJdGVtc1twb3NpdGlvbl0tPmV4
cGlyYXRpb25UaW1lTmFub1NlY29uZHMoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgbV90
aW1lcldvcmtJdGVtcy5pbnNlcnQocG9zaXRpb24sIFdURjo6bW92ZShpdGVtKSk7Ci19Ci0KLXZv
aWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hRdWV1ZVRocmVhZCgpCi17Ci0gICAgd2hpbGUgKG1f
aXNUaHJlYWRSdW5uaW5nKSB7Ci0gICAgICAgIHBlcmZvcm1Xb3JrKCk7Ci0gICAgICAgIHBlcmZv
cm1UaW1lcldvcmsoKTsKLSAgICAgICAgcGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAg
IH0KLX0KLQotdm9pZCBEaXNwYXRjaFF1ZXVlOjp3YWtlVXBUaHJlYWQoKQotewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxvY2spOwotICAgIGlmICh3cml0
ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgJndha2VVcFRocmVhZE1lc3NhZ2UsIHNpemVvZihj
aGFyKSkgPT0gLTEpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdha2UgdXAgRGlzcGF0
Y2hRdWV1ZSBUaHJlYWQiKTsKLX0KLQotdGltZXZhbCogRGlzcGF0Y2hRdWV1ZTo6Z2V0TmV4dFRp
bWVPdXQoKSBjb25zdAotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1z
TG9jayk7Ci0gICAgaWYgKG1fdGltZXJXb3JrSXRlbXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHN0YXRpYyB0aW1ldmFsIHRpbWVWYWx1ZTsKLSAgICB0aW1lVmFsdWUudHZf
c2VjID0gMDsKLSAgICB0aW1lVmFsdWUudHZfdXNlYyA9IDA7Ci0gICAgZG91YmxlIHRpbWVPdXRT
ZWNvbmRzID0gKG1fdGltZXJXb3JrSXRlbXNbMF0tPmV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMo
KSAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpICogbmFub1NlY29uZHNQZXJTZWNvbmQp
IC8gbmFub1NlY29uZHNQZXJTZWNvbmQ7Ci0gICAgaWYgKHRpbWVPdXRTZWNvbmRzID4gMCkgewot
ICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0gc3RhdGljX2Nhc3Q8bG9uZz4odGltZU91dFNlY29u
ZHMpOwotICAgICAgICB0aW1lVmFsdWUudHZfdXNlYyA9IHN0YXRpY19jYXN0PGxvbmc+KCh0aW1l
T3V0U2Vjb25kcyAtIHRpbWVWYWx1ZS50dl9zZWMpICogbWljcm9TZWNvbmRzUGVyU2Vjb25kKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gJnRpbWVWYWx1ZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkY2Y4ZTM3NzNhMWRkNmIwYTRlZjg5MmIzMTg2MzQ0MTM4YjI4NjQ0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGlzcGF0Y2hRdWV1ZUVmbF9oCi0jZGVm
aW5lIERpc3BhdGNoUXVldWVFZmxfaAotCi0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLWNsYXNzIFRpbWVyV29ya0l0ZW07Ci1jbGFzcyBXb3JrSXRlbTsKLQot
Y2xhc3MgRGlzcGF0Y2hRdWV1ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEaXNwYXRj
aFF1ZXVlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4g
Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUpOwotICAgIH5EaXNwYXRjaFF1ZXVlKCk7Ci0KLSAgICB2
b2lkIGRpc3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4pOwotICAgIHZvaWQgZGlzcGF0
Y2goc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+KTsKLSAgICB2b2lkIHN0b3BUaHJlYWQo
KTsKLSAgICB2b2lkIHNldFNvY2tldEV2ZW50SGFuZGxlcihpbnQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4pOwotICAgIHZvaWQgY2xlYXJTb2NrZXRFdmVudEhhbmRsZXIoKTsKLQotcHJpdmF0ZToK
LSAgICBjbGFzcyBUaHJlYWRDb250ZXh0OwotCi0gICAgRGlzcGF0Y2hRdWV1ZSgpOwotCi0gICAg
dm9pZCBwZXJmb3JtV29yaygpOwotICAgIHZvaWQgcGVyZm9ybVRpbWVyV29yaygpOwotICAgIHZv
aWQgcGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwotICAgIHZvaWQgaW5zZXJ0VGltZXJXb3Jr
SXRlbShzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4pOwotICAgIHZvaWQgZGlzcGF0Y2hR
dWV1ZVRocmVhZCgpOwotICAgIHZvaWQgd2FrZVVwVGhyZWFkKCk7Ci0gICAgdGltZXZhbCogZ2V0
TmV4dFRpbWVPdXQoKSBjb25zdDsKLQotICAgIGZkX3NldCBtX2ZpbGVEZXNjcmlwdG9yU2V0Owot
ICAgIGludCBtX21heEZpbGVEZXNjcmlwdG9yOwotICAgIGludCBtX3JlYWRGcm9tUGlwZURlc2Ny
aXB0b3I7Ci0gICAgaW50IG1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yOwotICAgIE11dGV4IG1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yTG9jazsKLQotICAgIGJvb2wgbV9pc1RocmVhZFJ1bm5pbmc7Ci0K
LSAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4g
bV9zb2NrZXRFdmVudEhhbmRsZXI7Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdvcmtJ
dGVtPj4gbV93b3JrSXRlbXM7Ci0gICAgTXV0ZXggbV93b3JrSXRlbXNMb2NrOwotCi0gICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPj4gbV90aW1lcldvcmtJdGVtczsKLSAg
ICBtdXRhYmxlIE11dGV4IG1fdGltZXJXb3JrSXRlbXNMb2NrOwotfTsKLQotI2VuZGlmIC8vIERp
c3BhdGNoUXVldWVFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZs
L0Rpc3BhdGNoUXVldWVXb3JrSXRlbUVmbC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZs
L0Rpc3BhdGNoUXVldWVXb3JrSXRlbUVmbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlOGQ4N2IzNjI5YjBkYjk2NzlhM2E4OWVmZmNjYTk2YmQ0NDQ0MDk1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEaXNwYXRjaFF1ZXVlV29ya0l0
ZW1FZmxfaAotI2RlZmluZSBEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmxfaAotCi0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRl
IDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgotCi1jbGFzcyBXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgV29y
a0l0ZW0oUGFzc1JlZlB0cjxXb3JrUXVldWU+IHdvcmtRdWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiBmdW5jdGlvbikKLSAgICAgICAgOiBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0gICAgICAg
ICwgbV9mdW5jdGlvbihXVEY6Om1vdmUoZnVuY3Rpb24pKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
b2lkIGRpc3BhdGNoKCkgeyBtX2Z1bmN0aW9uKCk7IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8
V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVu
Y3Rpb247Ci19OwotCi1jbGFzcyBUaW1lcldvcmtJdGVtIDogcHVibGljIFdvcmtJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShQ
YXNzUmVmUHRyPFdvcmtRdWV1ZT4gd29ya1F1ZXVlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1
bmN0aW9uLCBzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZGVsYXlOYW5vU2Vjb25kcykKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChkZWxheU5hbm9TZWNvbmRzLmNvdW50KCkgPj0gMCk7Ci0gICAgICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4obmV3IFRpbWVyV29ya0l0ZW0o
d29ya1F1ZXVlLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKSAqIDEwMDAwMDAwMDAuMCArIGRlbGF5TmFub1NlY29uZHMuY291bnQoKSkpOwotICAgIH0K
LSAgICBkb3VibGUgZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kczsgfQotICAgIGJvb2wgaGFzRXhwaXJlZChkb3VibGUg
Y3VycmVudFRpbWVOYW5vU2Vjb25kcykgY29uc3QgeyByZXR1cm4gY3VycmVudFRpbWVOYW5vU2Vj
b25kcyA+PSBtX2V4cGlyYXRpb25UaW1lTmFub1NlY29uZHM7IH0KLQotcHJvdGVjdGVkOgotICAg
IFRpbWVyV29ya0l0ZW0oUGFzc1JlZlB0cjxXb3JrUXVldWU+IHdvcmtRdWV1ZSwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgZG91YmxlIGV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMp
Ci0gICAgICAgIDogV29ya0l0ZW0od29ya1F1ZXVlLCBXVEY6Om1vdmUoZnVuY3Rpb24pKQotICAg
ICAgICAsIG1fZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcyhleHBpcmF0aW9uVGltZU5hbm9TZWNv
bmRzKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIG1fZXhwaXJhdGlvblRp
bWVOYW5vU2Vjb25kczsKLX07Ci0KLSNlbmRpZiAvLyBEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBlNTUzMmZkYmJjYWEyOWE3YWE5ODViOTY1
ZTczYjQyY2M5MDAxYjVmLi5mMTk3Njk2NGM5Y2IzZGVkMjg1ZjVhNDY1ZDhlZGJjYzcxOGEwYzBi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtOCw3ICs4LDYgQEAgbGlzdChBUFBFTkQg
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZvcm0vSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3Bw
CiAgICAgUGxhdGZvcm0vSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCiAKLSAgICBQbGF0Zm9y
bS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAKICAgICBQbGF0Zm9ybS9lZmwvTG9nZ2luZ0VmbC5j
cHAKICAgICBQbGF0Zm9ybS9lZmwvTW9kdWxlRWZsLmNwcAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248248</attachid>
            <date>2015-03-09 09:36:51 -0700</date>
            <delta_ts>2015-03-09 10:49:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142493-20150309093627.patch</filename>
            <type>text/plain</type>
            <size>32276</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMjU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJlOTM4MWQ1ZDE3ZDkzYjllNGNlYWRm
MTI1OGM1ODhhOWY0MmJlZmYuLjFkNDIzOTlkYTdlNjU4NzE2ZDY5YzYxMzc1ZDM5NDk4MTRkZjM5
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDMtMDkgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtFRkxdIE1vdmUgRGlzcGF0Y2hRdWV1ZSB0
byBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MjQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KKworICAgICAg
ICAqIHd0Zi9QbGF0Zm9ybUVmbC5jbWFrZTogQWRkIERpc3BhdGNoUXVldWUgdG8gdGhlIHNvdXJj
ZSBsaXN0LgorICAgICAgICAqIHd0Zi9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAuCisg
ICAgICAgICogd3RmL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oLgorICAgICAgICAqIHd0Zi9l
ZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmguCisKIDIwMTUtMDMtMDcg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gUmV2
aXZlIFdURjo6V29ya1F1ZXVlIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0OWZhZTJmYzMyMDNi
N2M2M2VlYTU5MWU1YjAxZjc2YjcxZTBiMjA3Li5lNmU1ZWY4N2MxY2ZmZDU5YWUwZDNkMTYwMDBk
ZmMxNDBmMWE4Y2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDMtMDkgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtFRkxdIE1v
dmUgRGlzcGF0Y2hRdWV1ZSB0byBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MjQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRy
b2dvbsOhYy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOiBSZW1vdmUgRGlzcGF0Y2hR
dWV1ZSBmcm9tIHRoZSBzb3VyY2UgbGlzdC4KKwogMjAxNS0wMy0wOCAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIEFkZCBzY2FmZm9s
ZGluZyBmb3IgdGhlIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCAwOGE5ZGFjYjQ3MWIwMjk1YjRlYjVmMjcwYmE3ZDEyODBhYjVmYTQzLi5l
YWZhYjAxODhlODJjODY4OWFhMDZjMWI2ZDdkZGM2OWI5YzJmNzRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtMSw0ICsxLDUgQEAKIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCisgICAg
ZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwCiAgICAgZWZsL01haW5UaHJlYWRFZmwuY3BwCiAgICAg
ZWZsL1J1bkxvb3BFZmwuY3BwCiAgICAgZWZsL1dvcmtRdWV1ZUVmbC5jcHAKQEAgLTIzLDcgKzI0
LDcgQEAgbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwogKQogCiBsaXN0KEFQUEVORCBXVEZfSU5D
TFVERV9ESVJFQ1RPUklFUwotICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9lZmwiCisgICAg
IiR7V1RGX0RJUn0vd3RmL2VmbCIKICAgICAke0VDT1JFX0VWQVNfSU5DTFVERV9ESVJTfQogICAg
ICR7RUNPUkVfSU5DTFVERV9ESVJTfQogICAgICR7RUNPUkVfSU1GX0lOQ0xVREVfRElSU30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTQ3YWMyMWFh
MDE0YTVhMjlhM2NmNGQzNjQ1NzBiZTQ2N2U2OWNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvZWZsL0Rpc3BhdGNoUXVldWVFZmwuY3BwCkBAIC0wLDAgKzEsMjUzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwYXRj
aFF1ZXVlRWZsLmgiCisKKyNpbmNsdWRlIDxEaXNwYXRjaFF1ZXVlV29ya0l0ZW1FZmwuaD4KKyNp
bmNsdWRlIDxzeXMvdGltZXJmZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorCitzdGF0aWMgY29uc3QgaW50IG1pY3JvU2Vjb25kc1BlclNlY29u
ZCA9IDEwMDAwMDA7CitzdGF0aWMgY29uc3QgaW50IG5hbm9TZWNvbmRzUGVyU2Vjb25kID0gMTAw
MDAwMDAwMDsKK3N0YXRpYyBjb25zdCBpbnQgaW52YWxpZFNvY2tldERlc2NyaXB0b3IgPSAtMTsK
K3N0YXRpYyBjb25zdCBjaGFyIHdha2VVcFRocmVhZE1lc3NhZ2UgPSAnVyc7CisKK2NsYXNzIERp
c3BhdGNoUXVldWU6OlRocmVhZENvbnRleHQgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHN0
YXJ0KGNvbnN0IGNoYXIqIG5hbWUsIFBhc3NSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gZGlzcGF0Y2hR
dWV1ZSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBEaXNwYXRjaFF1ZXVlVGhyZWFkQ29udGV4dCBp
bnN0YW5jZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGhyZWFkIGZ1bmN0aW9uIGFuZCBkZWxldGVk
IGluIGl0LgorICAgICAgICBkZXRhY2hUaHJlYWQoY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nh
c3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJlRocmVhZENvbnRleHQ6OmZ1bmN0aW9uKSwgbmV3IFRo
cmVhZENvbnRleHQoZGlzcGF0Y2hRdWV1ZSksIG5hbWUpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVGhyZWFkQ29udGV4dChQYXNzUmVmUHRyPERpc3BhdGNoUXVldWU+IGRpc3BhdGNoUXVldWUp
CisgICAgICAgIDogbV9kaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUpCisgICAgeworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkKiBmdW5jdGlvbihUaHJlYWRDb250ZXh0KiB0aHJlYWRDb250ZXh0
KQorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZENvbnRleHQ+KHRocmVhZENv
bnRleHQpLT5tX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNoUXVldWVUaHJlYWQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPERpc3BhdGNoUXVldWU+IG1fZGlzcGF0Y2hR
dWV1ZTsKK307CisKK1Bhc3NSZWZQdHI8RGlzcGF0Y2hRdWV1ZT4gRGlzcGF0Y2hRdWV1ZTo6Y3Jl
YXRlKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgUmVmUHRyPERpc3BhdGNoUXVldWU+IGRpc3Bh
dGNoUXVldWUgPSBhZG9wdFJlZjxEaXNwYXRjaFF1ZXVlPihuZXcgRGlzcGF0Y2hRdWV1ZSgpKTsK
KworICAgIFRocmVhZENvbnRleHQ6OnN0YXJ0KG5hbWUsIGRpc3BhdGNoUXVldWUpOworCisgICAg
cmV0dXJuIGRpc3BhdGNoUXVldWUucmVsZWFzZSgpOworfQorCitEaXNwYXRjaFF1ZXVlOjpEaXNw
YXRjaFF1ZXVlKCkKKyAgICA6IG1faXNUaHJlYWRSdW5uaW5nKHRydWUpCit7CisgICAgaW50IGZk
c1syXTsKKyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KworICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9Q
aXBlRGVzY3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0
KTsKKyAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRv
clNldCk7CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRv
cjsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwor
fQorCitEaXNwYXRjaFF1ZXVlOjp+RGlzcGF0Y2hRdWV1ZSgpCit7CisgICAgY2xvc2UobV9yZWFk
RnJvbVBpcGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcik7
Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2goc3RkOjp1bmlxdWVfcHRyPFdvcmtJ
dGVtPiBpdGVtKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0
ZW1zTG9jayk7CisgICAgICAgIG1fd29ya0l0ZW1zLmFwcGVuZChXVEY6Om1vdmUoaXRlbSkpOwor
ICAgIH0KKworICAgIHdha2VVcFRocmVhZCgpOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmRp
c3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQoreworICAgIGluc2Vy
dFRpbWVyV29ya0l0ZW0oV1RGOjptb3ZlKGl0ZW0pKTsKKyAgICB3YWtlVXBUaHJlYWQoKTsKK30K
Kwordm9pZCBEaXNwYXRjaFF1ZXVlOjpzdG9wVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQobV9zb2Nr
ZXREZXNjcmlwdG9yID09IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKTsKKworICAgIG1faXNUaHJl
YWRSdW5uaW5nID0gZmFsc2U7CisgICAgd2FrZVVwVGhyZWFkKCk7Cit9CisKK3ZvaWQgRGlzcGF0
Y2hRdWV1ZTo6c2V0U29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9zb2NrZXREZXNjcmlw
dG9yID09IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRv
ciA9IGZpbGVEZXNjcmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gV1RGOjptb3Zl
KGZ1bmN0aW9uKTsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2NyaXB0
b3IpCisgICAgICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKKyAgICBG
RF9TRVQoZmlsZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKK30KKwordm9pZCBE
aXNwYXRjaFF1ZXVlOjpjbGVhclNvY2tldEV2ZW50SGFuZGxlcigpCit7CisgICAgQVNTRVJUKG1f
c29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7CisKKyAgICBpZiAo
bV9zb2NrZXREZXNjcmlwdG9yID09IG1fbWF4RmlsZURlc2NyaXB0b3IpCisgICAgICAgIG1fbWF4
RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7CisKKyAgICBGRF9DTFIo
bV9zb2NrZXREZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisKKyAgICBtX3NvY2tl
dERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKK30KKwordm9pZCBEaXNwYXRj
aFF1ZXVlOjpwZXJmb3JtV29yaygpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4+IHdvcmtJdGVtczsKKworICAgICAgICB7Cisg
ICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrSXRlbXNMb2NrKTsKKyAgICAgICAg
ICAgIGlmIChtX3dvcmtJdGVtcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBtX3dvcmtJdGVtcy5zd2FwKHdvcmtJdGVtcyk7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIHdvcmtJdGVtc1tpXS0+ZGlzcGF0Y2goKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlz
cGF0Y2hRdWV1ZTo6cGVyZm9ybVRpbWVyV29yaygpCit7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxUaW1lcldvcmtJdGVtPj4gdGltZXJXb3JrSXRlbXM7CisKKyAgICB7CisgICAgICAgIC8v
IFByb3RlY3RzIG1fdGltZXJXb3JrSXRlbXMuCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgICAgIGlmIChtX3RpbWVyV29ya0l0ZW1zLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb3BpZXMgYWxsIHRoZSB0
aW1lciB3b3JrIGl0ZW1zIGluIG1fdGltZXJXb3JrSXRlbXMgdG8gbG9jYWwgdmVjdG9yLgorICAg
ICAgICBtX3RpbWVyV29ya0l0ZW1zLnN3YXAodGltZXJXb3JrSXRlbXMpOworICAgIH0KKworICAg
IGRvdWJsZSBjdXJyZW50VGltZU5hbm9TZWNvbmRzID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkgKiBuYW5vU2Vjb25kc1BlclNlY29uZDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF0aW1lcldvcmtJ
dGVtc1tpXS0+aGFzRXhwaXJlZChjdXJyZW50VGltZU5hbm9TZWNvbmRzKSkgeworICAgICAgICAg
ICAgaW5zZXJ0VGltZXJXb3JrSXRlbShXVEY6Om1vdmUodGltZXJXb3JrSXRlbXNbaV0pKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgYSB0aW1lciB3
b3JrIGl0ZW0gaGFzIGV4cGlyZWQsIGRpc3BhdGNoIHRoZSBmdW5jdGlvbiBvZiB0aGUgd29yayBp
dGVtLgorICAgICAgICB0aW1lcldvcmtJdGVtc1tpXS0+ZGlzcGF0Y2goKTsKKyAgICB9Cit9CisK
K3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpCit7CisgICAg
ZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9IG1fZmlsZURlc2NyaXB0b3JTZXQ7CisKKyAg
ICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAxLCAmcmVhZEZpbGVEZXNjcmlwdG9y
U2V0LCAwLCAwLCBnZXROZXh0VGltZU91dCgpKSA+PSAwKSB7CisgICAgICAgIGlmIChGRF9JU1NF
VChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7Cisg
ICAgICAgICAgICBjaGFyIG1lc3NhZ2U7CisgICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9t
UGlwZURlc2NyaXB0b3IsICZtZXNzYWdlLCAxKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gRGlzcGF0Y2hRdWV1ZSBUaHJlYWQgcGlwZSIpOwor
CisgICAgICAgICAgICBBU1NFUlQobWVzc2FnZSA9PSB3YWtlVXBUaHJlYWRNZXNzYWdlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tl
dERlc2NyaXB0b3IgJiYgRkRfSVNTRVQobV9zb2NrZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNj
cmlwdG9yU2V0KSkKKyAgICAgICAgICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyKCk7CisgICAgfQor
fQorCit2b2lkIERpc3BhdGNoUXVldWU6Omluc2VydFRpbWVyV29ya0l0ZW0oc3RkOjp1bmlxdWVf
cHRyPFRpbWVyV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgQVNTRVJUKGl0ZW0pOworCisgICAgc2l6
ZV90IHBvc2l0aW9uID0gMDsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0
ZW1zTG9jayk7CisgICAgLy8gVGhlIGl0ZW1zIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGV4cGlyZSB0
aW1lLgorICAgIGZvciAoOyBwb3NpdGlvbiA8IG1fdGltZXJXb3JrSXRlbXMuc2l6ZSgpOyArK3Bv
c2l0aW9uKQorICAgICAgICBpZiAoaXRlbS0+ZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcygpIDwg
bV90aW1lcldvcmtJdGVtc1twb3NpdGlvbl0tPmV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMoKSkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgbV90aW1lcldvcmtJdGVtcy5pbnNlcnQocG9zaXRp
b24sIFdURjo6bW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hRdWV1ZTo6ZGlzcGF0Y2hR
dWV1ZVRocmVhZCgpCit7CisgICAgd2hpbGUgKG1faXNUaHJlYWRSdW5uaW5nKSB7CisgICAgICAg
IHBlcmZvcm1Xb3JrKCk7CisgICAgICAgIHBlcmZvcm1UaW1lcldvcmsoKTsKKyAgICAgICAgcGVy
Zm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOworICAgIH0KK30KKwordm9pZCBEaXNwYXRjaFF1ZXVl
Ojp3YWtlVXBUaHJlYWQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dyaXRlVG9QaXBl
RGVzY3JpcHRvckxvY2spOworICAgIGlmICh3cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwg
Jndha2VVcFRocmVhZE1lc3NhZ2UsIHNpemVvZihjaGFyKSkgPT0gLTEpCisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHdha2UgdXAgRGlzcGF0Y2hRdWV1ZSBUaHJlYWQiKTsKK30KKwordGlt
ZXZhbCogRGlzcGF0Y2hRdWV1ZTo6Z2V0TmV4dFRpbWVPdXQoKSBjb25zdAoreworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3RpbWVyV29ya0l0ZW1zTG9jayk7CisgICAgaWYgKG1fdGltZXJXb3Jr
SXRlbXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN0YXRpYyB0aW1ldmFs
IHRpbWVWYWx1ZTsKKyAgICB0aW1lVmFsdWUudHZfc2VjID0gMDsKKyAgICB0aW1lVmFsdWUudHZf
dXNlYyA9IDA7CisgICAgZG91YmxlIHRpbWVPdXRTZWNvbmRzID0gKG1fdGltZXJXb3JrSXRlbXNb
MF0tPmV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMoKSAtIG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpICogbmFub1NlY29uZHNQZXJTZWNvbmQpIC8gbmFub1NlY29uZHNQZXJTZWNvbmQ7Cisg
ICAgaWYgKHRpbWVPdXRTZWNvbmRzID4gMCkgeworICAgICAgICB0aW1lVmFsdWUudHZfc2VjID0g
c3RhdGljX2Nhc3Q8bG9uZz4odGltZU91dFNlY29uZHMpOworICAgICAgICB0aW1lVmFsdWUudHZf
dXNlYyA9IHN0YXRpY19jYXN0PGxvbmc+KCh0aW1lT3V0U2Vjb25kcyAtIHRpbWVWYWx1ZS50dl9z
ZWMpICogbWljcm9TZWNvbmRzUGVyU2Vjb25kKTsKKyAgICB9CisKKyAgICByZXR1cm4gJnRpbWVW
YWx1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVlRWZs
LmggYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRj
ZjhlMzc3M2ExZGQ2YjBhNGVmODkyYjMxODYzNDQxMzhiMjg2NDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hRdWV1ZUVmbC5oCkBAIC0wLDAgKzEsNzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaXNwYXRjaFF1ZXVlRWZsX2gKKyNkZWZp
bmUgRGlzcGF0Y2hRdWV1ZUVmbF9oCisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworY2xhc3MgVGltZXJXb3JrSXRlbTsKK2NsYXNzIFdvcmtJdGVtOworCitj
bGFzcyBEaXNwYXRjaFF1ZXVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERpc3BhdGNo
UXVldWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaXNwYXRjaFF1ZXVlPiBj
cmVhdGUoY29uc3QgY2hhciogbmFtZSk7CisgICAgfkRpc3BhdGNoUXVldWUoKTsKKworICAgIHZv
aWQgZGlzcGF0Y2goc3RkOjp1bmlxdWVfcHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCBkaXNwYXRj
aChzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4pOworICAgIHZvaWQgc3RvcFRocmVhZCgp
OworICAgIHZvaWQgc2V0U29ja2V0RXZlbnRIYW5kbGVyKGludCwgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPik7CisgICAgdm9pZCBjbGVhclNvY2tldEV2ZW50SGFuZGxlcigpOworCitwcml2YXRlOgor
ICAgIGNsYXNzIFRocmVhZENvbnRleHQ7CisKKyAgICBEaXNwYXRjaFF1ZXVlKCk7CisKKyAgICB2
b2lkIHBlcmZvcm1Xb3JrKCk7CisgICAgdm9pZCBwZXJmb3JtVGltZXJXb3JrKCk7CisgICAgdm9p
ZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7CisgICAgdm9pZCBpbnNlcnRUaW1lcldvcmtJ
dGVtKHN0ZDo6dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPik7CisgICAgdm9pZCBkaXNwYXRjaFF1
ZXVlVGhyZWFkKCk7CisgICAgdm9pZCB3YWtlVXBUaHJlYWQoKTsKKyAgICB0aW1ldmFsKiBnZXRO
ZXh0VGltZU91dCgpIGNvbnN0OworCisgICAgZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7Cisg
ICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7CisgICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3Jp
cHRvcjsKKyAgICBpbnQgbV93cml0ZVRvUGlwZURlc2NyaXB0b3I7CisgICAgTXV0ZXggbV93cml0
ZVRvUGlwZURlc2NyaXB0b3JMb2NrOworCisgICAgYm9vbCBtX2lzVGhyZWFkUnVubmluZzsKKwor
ICAgIGludCBtX3NvY2tldERlc2NyaXB0b3I7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBt
X3NvY2tldEV2ZW50SGFuZGxlcjsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V29ya0l0
ZW0+PiBtX3dvcmtJdGVtczsKKyAgICBNdXRleCBtX3dvcmtJdGVtc0xvY2s7CisKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+PiBtX3RpbWVyV29ya0l0ZW1zOworICAg
IG11dGFibGUgTXV0ZXggbV90aW1lcldvcmtJdGVtc0xvY2s7Cit9OworCisjZW5kaWYgLy8gRGlz
cGF0Y2hRdWV1ZUVmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hR
dWV1ZVdvcmtJdGVtRWZsLmggYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJ
dGVtRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZThkODdiMzYyOWIwZGI5Njc5YTNhODllZmZjY2E5NmJkNDQ0
NDA5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVl
V29ya0l0ZW1FZmwuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsX2gKKyNkZWZpbmUgRGlzcGF0Y2hRdWV1ZVdv
cmtJdGVtRWZsX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworY2xhc3MgV29y
a0l0ZW0geworcHVibGljOgorICAgIFdvcmtJdGVtKFBhc3NSZWZQdHI8V29ya1F1ZXVlPiB3b3Jr
UXVldWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCisgICAgICAgIDogbV93b3Jr
UXVldWUod29ya1F1ZXVlKQorICAgICAgICAsIG1fZnVuY3Rpb24oV1RGOjptb3ZlKGZ1bmN0aW9u
KSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkaXNwYXRjaCgpIHsgbV9mdW5jdGlvbigpOyB9
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBtX2Z1bmN0aW9uOworfTsKKworY2xhc3MgVGltZXJXb3JrSXRl
bSA6IHB1YmxpYyBXb3JrSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxUaW1lcldvcmtJdGVtPiBjcmVhdGUoUGFzc1JlZlB0cjxXb3JrUXVldWU+IHdvcmtRdWV1ZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRz
IGRlbGF5TmFub1NlY29uZHMpCisgICAgeworICAgICAgICBBU1NFUlQoZGVsYXlOYW5vU2Vjb25k
cy5jb3VudCgpID49IDApOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29y
a0l0ZW0+KG5ldyBUaW1lcldvcmtJdGVtKHdvcmtRdWV1ZSwgV1RGOjptb3ZlKGZ1bmN0aW9uKSwg
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKiAxMDAwMDAwMDAwLjAgKyBkZWxheU5hbm9T
ZWNvbmRzLmNvdW50KCkpKTsKKyAgICB9CisgICAgZG91YmxlIGV4cGlyYXRpb25UaW1lTmFub1Nl
Y29uZHMoKSBjb25zdCB7IHJldHVybiBtX2V4cGlyYXRpb25UaW1lTmFub1NlY29uZHM7IH0KKyAg
ICBib29sIGhhc0V4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1lTmFub1NlY29uZHMpIGNvbnN0IHsg
cmV0dXJuIGN1cnJlbnRUaW1lTmFub1NlY29uZHMgPj0gbV9leHBpcmF0aW9uVGltZU5hbm9TZWNv
bmRzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBUaW1lcldvcmtJdGVtKFBhc3NSZWZQdHI8V29ya1F1
ZXVlPiB3b3JrUXVldWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIGRvdWJsZSBl
eHBpcmF0aW9uVGltZU5hbm9TZWNvbmRzKQorICAgICAgICA6IFdvcmtJdGVtKHdvcmtRdWV1ZSwg
V1RGOjptb3ZlKGZ1bmN0aW9uKSkKKyAgICAgICAgLCBtX2V4cGlyYXRpb25UaW1lTmFub1NlY29u
ZHMoZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcykKKyAgICB7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGRvdWJsZSBtX2V4cGlyYXRpb25UaW1lTmFub1NlY29uZHM7Cit9OworCisjZW5kaWYgLy8g
RGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2VmbC9EaXNwYXRjaFF1ZXVlRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDU0N2FjMjFhYTAxNGE1YTI5YTNjZjRkMzY0NTcwYmU0NjdlNjljZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9l
ZmwvRGlzcGF0Y2hRdWV1ZUVmbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGlz
cGF0Y2hRdWV1ZUVmbC5oIgotCi0jaW5jbHVkZSA8RGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmg+
Ci0jaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotc3RhdGljIGNvbnN0IGludCBtaWNyb1NlY29uZHNQZXJT
ZWNvbmQgPSAxMDAwMDAwOwotc3RhdGljIGNvbnN0IGludCBuYW5vU2Vjb25kc1BlclNlY29uZCA9
IDEwMDAwMDAwMDA7Ci1zdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0g
LTE7Ci1zdGF0aWMgY29uc3QgY2hhciB3YWtlVXBUaHJlYWRNZXNzYWdlID0gJ1cnOwotCi1jbGFz
cyBEaXNwYXRjaFF1ZXVlOjpUaHJlYWRDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBzdGFydChjb25zdCBjaGFyKiBuYW1lLCBQYXNzUmVmUHRyPERpc3BhdGNoUXVldWU+IGRpc3Bh
dGNoUXVldWUpCi0gICAgewotICAgICAgICAvLyBUaGUgRGlzcGF0Y2hRdWV1ZVRocmVhZENvbnRl
eHQgaW5zdGFuY2Ugd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHRocmVhZCBmdW5jdGlvbiBhbmQgZGVs
ZXRlZCBpbiBpdC4KLSAgICAgICAgZGV0YWNoVGhyZWFkKGNyZWF0ZVRocmVhZChyZWludGVycHJl
dF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZUaHJlYWRDb250ZXh0OjpmdW5jdGlvbiksIG5l
dyBUaHJlYWRDb250ZXh0KGRpc3BhdGNoUXVldWUpLCBuYW1lKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIFRocmVhZENvbnRleHQoUGFzc1JlZlB0cjxEaXNwYXRjaFF1ZXVlPiBkaXNwYXRjaFF1
ZXVlKQotICAgICAgICA6IG1fZGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCogZnVuY3Rpb24oVGhyZWFkQ29udGV4dCogdGhyZWFkQ29u
dGV4dCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRDb250ZXh0Pih0aHJl
YWRDb250ZXh0KS0+bV9kaXNwYXRjaFF1ZXVlLT5kaXNwYXRjaFF1ZXVlVGhyZWFkKCk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVlPiBtX2Rpc3Bh
dGNoUXVldWU7Ci19OwotCi1QYXNzUmVmUHRyPERpc3BhdGNoUXVldWU+IERpc3BhdGNoUXVldWU6
OmNyZWF0ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVlPiBk
aXNwYXRjaFF1ZXVlID0gYWRvcHRSZWY8RGlzcGF0Y2hRdWV1ZT4obmV3IERpc3BhdGNoUXVldWUo
KSk7Ci0KLSAgICBUaHJlYWRDb250ZXh0OjpzdGFydChuYW1lLCBkaXNwYXRjaFF1ZXVlKTsKLQot
ICAgIHJldHVybiBkaXNwYXRjaFF1ZXVlLnJlbGVhc2UoKTsKLX0KLQotRGlzcGF0Y2hRdWV1ZTo6
RGlzcGF0Y2hRdWV1ZSgpCi0gICAgOiBtX2lzVGhyZWFkUnVubmluZyh0cnVlKQotewotICAgIGlu
dCBmZHNbMl07Ci0gICAgaWYgKHBpcGUoZmRzKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0KLSAgICBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNbMF07Ci0gICAgbV93cml0
ZVRvUGlwZURlc2NyaXB0b3IgPSBmZHNbMV07Ci0gICAgRkRfWkVSTygmbV9maWxlRGVzY3JpcHRv
clNldCk7Ci0gICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmlsZURlc2Ny
aXB0b3JTZXQpOwotICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2Ny
aXB0b3I7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRv
cjsKLX0KLQotRGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUoKQotewotICAgIGNsb3NlKG1f
cmVhZEZyb21QaXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2UobV93cml0ZVRvUGlwZURlc2NyaXB0
b3IpOwotfQotCi12b2lkIERpc3BhdGNoUXVldWU6OmRpc3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxX
b3JrSXRlbT4gaXRlbSkKLXsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dv
cmtJdGVtc0xvY2spOwotICAgICAgICBtX3dvcmtJdGVtcy5hcHBlbmQoV1RGOjptb3ZlKGl0ZW0p
KTsKLSAgICB9Ci0KLSAgICB3YWtlVXBUaHJlYWQoKTsKLX0KLQotdm9pZCBEaXNwYXRjaFF1ZXVl
OjpkaXNwYXRjaChzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gaXRlbSkKLXsKLSAgICBp
bnNlcnRUaW1lcldvcmtJdGVtKFdURjo6bW92ZShpdGVtKSk7Ci0gICAgd2FrZVVwVGhyZWFkKCk7
Ci19Ci0KLXZvaWQgRGlzcGF0Y2hRdWV1ZTo6c3RvcFRocmVhZCgpCi17Ci0gICAgQVNTRVJUKG1f
c29ja2V0RGVzY3JpcHRvciA9PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7Ci0KLSAgICBtX2lz
VGhyZWFkUnVubmluZyA9IGZhbHNlOwotICAgIHdha2VVcFRocmVhZCgpOwotfQotCi12b2lkIERp
c3BhdGNoUXVldWU6OnNldFNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fc29ja2V0RGVz
Y3JpcHRvciA9PSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcik7Ci0KLSAgICBtX3NvY2tldERlc2Ny
aXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9IFdURjo6
bW92ZShmdW5jdGlvbik7Ci0KLSAgICBpZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNj
cmlwdG9yKQotICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7Ci0g
ICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Ci19Ci0KLXZv
aWQgRGlzcGF0Y2hRdWV1ZTo6Y2xlYXJTb2NrZXRFdmVudEhhbmRsZXIoKQotewotICAgIEFTU0VS
VChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IpOwotCi0gICAg
aWYgKG1fc29ja2V0RGVzY3JpcHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQotICAgICAgICBt
X21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotCi0gICAgRkRf
Q0xSKG1fc29ja2V0RGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQpOwotCi0gICAgbV9z
b2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci19Ci0KLXZvaWQgRGlz
cGF0Y2hRdWV1ZTo6cGVyZm9ybVdvcmsoKQotewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V29ya0l0ZW0+PiB3b3JrSXRlbXM7Ci0KLSAgICAgICAg
ewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1zTG9jayk7Ci0gICAg
ICAgICAgICBpZiAobV93b3JrSXRlbXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgbV93b3JrSXRlbXMuc3dhcCh3b3JrSXRlbXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JrSXRlbXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICB3b3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7Ci0gICAgfQotfQotCi12b2lk
IERpc3BhdGNoUXVldWU6OnBlcmZvcm1UaW1lcldvcmsoKQotewotICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4+IHRpbWVyV29ya0l0ZW1zOwotCi0gICAgewotICAgICAg
ICAvLyBQcm90ZWN0cyBtX3RpbWVyV29ya0l0ZW1zLgotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwotICAgICAgICBpZiAobV90aW1lcldvcmtJdGVtcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29waWVzIGFsbCB0
aGUgdGltZXIgd29yayBpdGVtcyBpbiBtX3RpbWVyV29ya0l0ZW1zIHRvIGxvY2FsIHZlY3Rvci4K
LSAgICAgICAgbV90aW1lcldvcmtJdGVtcy5zd2FwKHRpbWVyV29ya0l0ZW1zKTsKLSAgICB9Ci0K
LSAgICBkb3VibGUgY3VycmVudFRpbWVOYW5vU2Vjb25kcyA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpICogbmFub1NlY29uZHNQZXJTZWNvbmQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRpbWVyV29ya0l0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghdGltZXJX
b3JrSXRlbXNbaV0tPmhhc0V4cGlyZWQoY3VycmVudFRpbWVOYW5vU2Vjb25kcykpIHsKLSAgICAg
ICAgICAgIGluc2VydFRpbWVyV29ya0l0ZW0oV1RGOjptb3ZlKHRpbWVyV29ya0l0ZW1zW2ldKSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIGEgdGlt
ZXIgd29yayBpdGVtIGhhcyBleHBpcmVkLCBkaXNwYXRjaCB0aGUgZnVuY3Rpb24gb2YgdGhlIHdv
cmsgaXRlbS4KLSAgICAgICAgdGltZXJXb3JrSXRlbXNbaV0tPmRpc3BhdGNoKCk7Ci0gICAgfQot
fQotCi12b2lkIERpc3BhdGNoUXVldWU6OnBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKQotewot
ICAgIGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2ZpbGVEZXNjcmlwdG9yU2V0Owot
Ci0gICAgaWYgKHNlbGVjdChtX21heEZpbGVEZXNjcmlwdG9yICsgMSwgJnJlYWRGaWxlRGVzY3Jp
cHRvclNldCwgMCwgMCwgZ2V0TmV4dFRpbWVPdXQoKSkgPj0gMCkgewotICAgICAgICBpZiAoRkRf
SVNTRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkg
ewotICAgICAgICAgICAgY2hhciBtZXNzYWdlOwotICAgICAgICAgICAgaWYgKHJlYWQobV9yZWFk
RnJvbVBpcGVEZXNjcmlwdG9yLCAmbWVzc2FnZSwgMSkgPT0gLTEpCi0gICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9tIERpc3BhdGNoUXVldWUgVGhyZWFkIHBpcGUi
KTsKLQotICAgICAgICAgICAgQVNTRVJUKG1lc3NhZ2UgPT0gd2FrZVVwVGhyZWFkTWVzc2FnZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRT
b2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxl
RGVzY3JpcHRvclNldCkpCi0gICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxlcigpOwotICAg
IH0KLX0KLQotdm9pZCBEaXNwYXRjaFF1ZXVlOjppbnNlcnRUaW1lcldvcmtJdGVtKHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcldvcmtJdGVtPiBpdGVtKQotewotICAgIEFTU0VSVChpdGVtKTsKLQotICAg
IHNpemVfdCBwb3NpdGlvbiA9IDA7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90aW1lcldv
cmtJdGVtc0xvY2spOwotICAgIC8vIFRoZSBpdGVtcyBzaG91bGQgYmUgb3JkZXJlZCBieSBleHBp
cmUgdGltZS4KLSAgICBmb3IgKDsgcG9zaXRpb24gPCBtX3RpbWVyV29ya0l0ZW1zLnNpemUoKTsg
Kytwb3NpdGlvbikKLSAgICAgICAgaWYgKGl0ZW0tPmV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMo
KSA8IG1fdGltZXJXb3JrSXRlbXNbcG9zaXRpb25dLT5leHBpcmF0aW9uVGltZU5hbm9TZWNvbmRz
KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgIG1fdGltZXJXb3JrSXRlbXMuaW5zZXJ0KHBv
c2l0aW9uLCBXVEY6Om1vdmUoaXRlbSkpOwotfQotCi12b2lkIERpc3BhdGNoUXVldWU6OmRpc3Bh
dGNoUXVldWVUaHJlYWQoKQotewotICAgIHdoaWxlIChtX2lzVGhyZWFkUnVubmluZykgewotICAg
ICAgICBwZXJmb3JtV29yaygpOwotICAgICAgICBwZXJmb3JtVGltZXJXb3JrKCk7Ci0gICAgICAg
IHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGlzcGF0Y2hR
dWV1ZTo6d2FrZVVwVGhyZWFkKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV93cml0ZVRv
UGlwZURlc2NyaXB0b3JMb2NrKTsKLSAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0
b3IsICZ3YWtlVXBUaHJlYWRNZXNzYWdlLCBzaXplb2YoY2hhcikpID09IC0xKQotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIERpc3BhdGNoUXVldWUgVGhyZWFkIik7Ci19Ci0K
LXRpbWV2YWwqIERpc3BhdGNoUXVldWU6OmdldE5leHRUaW1lT3V0KCkgY29uc3QKLXsKLSAgICBN
dXRleExvY2tlciBsb2NrZXIobV90aW1lcldvcmtJdGVtc0xvY2spOwotICAgIGlmIChtX3RpbWVy
V29ya0l0ZW1zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzdGF0aWMgdGlt
ZXZhbCB0aW1lVmFsdWU7Ci0gICAgdGltZVZhbHVlLnR2X3NlYyA9IDA7Ci0gICAgdGltZVZhbHVl
LnR2X3VzZWMgPSAwOwotICAgIGRvdWJsZSB0aW1lT3V0U2Vjb25kcyA9IChtX3RpbWVyV29ya0l0
ZW1zWzBdLT5leHBpcmF0aW9uVGltZU5hbm9TZWNvbmRzKCkgLSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSAqIG5hbm9TZWNvbmRzUGVyU2Vjb25kKSAvIG5hbm9TZWNvbmRzUGVyU2Vjb25k
OwotICAgIGlmICh0aW1lT3V0U2Vjb25kcyA+IDApIHsKLSAgICAgICAgdGltZVZhbHVlLnR2X3Nl
YyA9IHN0YXRpY19jYXN0PGxvbmc+KHRpbWVPdXRTZWNvbmRzKTsKLSAgICAgICAgdGltZVZhbHVl
LnR2X3VzZWMgPSBzdGF0aWNfY2FzdDxsb25nPigodGltZU91dFNlY29uZHMgLSB0aW1lVmFsdWUu
dHZfc2VjKSAqIG1pY3JvU2Vjb25kc1BlclNlY29uZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICZ0
aW1lVmFsdWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlz
cGF0Y2hRdWV1ZUVmbC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVl
dWVFZmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNmOGUzNzczYTFkZDZiMGE0
ZWY4OTJiMzE4NjM0NDEzOGIyODY0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZUVm
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIERpc3BhdGNoUXVldWVFZmxfaAotI2RlZmluZSBEaXNwYXRjaFF1ZXVlRWZsX2gK
LQotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1jbGFzcyBU
aW1lcldvcmtJdGVtOwotY2xhc3MgV29ya0l0ZW07Ci0KLWNsYXNzIERpc3BhdGNoUXVldWUgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RGlzcGF0Y2hRdWV1ZT4gewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERpc3BhdGNoUXVldWU+IGNyZWF0ZShjb25zdCBjaGFyKiBuYW1l
KTsKLSAgICB+RGlzcGF0Y2hRdWV1ZSgpOwotCi0gICAgdm9pZCBkaXNwYXRjaChzdGQ6OnVuaXF1
ZV9wdHI8V29ya0l0ZW0+KTsKLSAgICB2b2lkIGRpc3BhdGNoKHN0ZDo6dW5pcXVlX3B0cjxUaW1l
cldvcmtJdGVtPik7Ci0gICAgdm9pZCBzdG9wVGhyZWFkKCk7Ci0gICAgdm9pZCBzZXRTb2NrZXRF
dmVudEhhbmRsZXIoaW50LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+KTsKLSAgICB2b2lkIGNsZWFy
U29ja2V0RXZlbnRIYW5kbGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgVGhyZWFkQ29udGV4
dDsKLQotICAgIERpc3BhdGNoUXVldWUoKTsKLQotICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKLSAg
ICB2b2lkIHBlcmZvcm1UaW1lcldvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRv
cldvcmsoKTsKLSAgICB2b2lkIGluc2VydFRpbWVyV29ya0l0ZW0oc3RkOjp1bmlxdWVfcHRyPFRp
bWVyV29ya0l0ZW0+KTsKLSAgICB2b2lkIGRpc3BhdGNoUXVldWVUaHJlYWQoKTsKLSAgICB2b2lk
IHdha2VVcFRocmVhZCgpOwotICAgIHRpbWV2YWwqIGdldE5leHRUaW1lT3V0KCkgY29uc3Q7Ci0K
LSAgICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKLSAgICBpbnQgbV9tYXhGaWxlRGVzY3Jp
cHRvcjsKLSAgICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIGludCBtX3dyaXRl
VG9QaXBlRGVzY3JpcHRvcjsKLSAgICBNdXRleCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvckxvY2s7
Ci0KLSAgICBib29sIG1faXNUaHJlYWRSdW5uaW5nOwotCi0gICAgaW50IG1fc29ja2V0RGVzY3Jp
cHRvcjsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fc29ja2V0RXZlbnRIYW5kbGVyOwot
Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXb3JrSXRlbT4+IG1fd29ya0l0ZW1zOwotICAg
IE11dGV4IG1fd29ya0l0ZW1zTG9jazsKLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VGlt
ZXJXb3JrSXRlbT4+IG1fdGltZXJXb3JrSXRlbXM7Ci0gICAgbXV0YWJsZSBNdXRleCBtX3RpbWVy
V29ya0l0ZW1zTG9jazsKLX07Ci0KLSNlbmRpZiAvLyBEaXNwYXRjaFF1ZXVlRWZsX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1F
ZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1F
ZmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkODdiMzYyOWIwZGI5Njc5YTNh
ODllZmZjY2E5NmJkNDQ0NDA5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJ
dGVtRWZsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsX2gKLSNkZWZpbmUgRGlzcGF0
Y2hRdWV1ZVdvcmtJdGVtRWZsX2gKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLQot
Y2xhc3MgV29ya0l0ZW0gewotcHVibGljOgotICAgIFdvcmtJdGVtKFBhc3NSZWZQdHI8V29ya1F1
ZXVlPiB3b3JrUXVldWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCi0gICAgICAg
IDogbV93b3JrUXVldWUod29ya1F1ZXVlKQotICAgICAgICAsIG1fZnVuY3Rpb24oV1RGOjptb3Zl
KGZ1bmN0aW9uKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkaXNwYXRjaCgpIHsgbV9mdW5j
dGlvbigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7
Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX2Z1bmN0aW9uOwotfTsKLQotY2xhc3MgVGlt
ZXJXb3JrSXRlbSA6IHB1YmxpYyBXb3JrSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxUaW1lcldvcmtJdGVtPiBjcmVhdGUoUGFzc1JlZlB0cjxXb3JrUXVldWU+IHdv
cmtRdWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om5h
bm9zZWNvbmRzIGRlbGF5TmFub1NlY29uZHMpCi0gICAgewotICAgICAgICBBU1NFUlQoZGVsYXlO
YW5vU2Vjb25kcy5jb3VudCgpID49IDApOwotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PFRpbWVyV29ya0l0ZW0+KG5ldyBUaW1lcldvcmtJdGVtKHdvcmtRdWV1ZSwgV1RGOjptb3ZlKGZ1
bmN0aW9uKSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKiAxMDAwMDAwMDAwLjAgKyBk
ZWxheU5hbm9TZWNvbmRzLmNvdW50KCkpKTsKLSAgICB9Ci0gICAgZG91YmxlIGV4cGlyYXRpb25U
aW1lTmFub1NlY29uZHMoKSBjb25zdCB7IHJldHVybiBtX2V4cGlyYXRpb25UaW1lTmFub1NlY29u
ZHM7IH0KLSAgICBib29sIGhhc0V4cGlyZWQoZG91YmxlIGN1cnJlbnRUaW1lTmFub1NlY29uZHMp
IGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRUaW1lTmFub1NlY29uZHMgPj0gbV9leHBpcmF0aW9uVGlt
ZU5hbm9TZWNvbmRzOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBUaW1lcldvcmtJdGVtKFBhc3NSZWZQ
dHI8V29ya1F1ZXVlPiB3b3JrUXVldWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24s
IGRvdWJsZSBleHBpcmF0aW9uVGltZU5hbm9TZWNvbmRzKQotICAgICAgICA6IFdvcmtJdGVtKHdv
cmtRdWV1ZSwgV1RGOjptb3ZlKGZ1bmN0aW9uKSkKLSAgICAgICAgLCBtX2V4cGlyYXRpb25UaW1l
TmFub1NlY29uZHMoZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcykKLSAgICB7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIGRvdWJsZSBtX2V4cGlyYXRpb25UaW1lTmFub1NlY29uZHM7Ci19OwotCi0j
ZW5kaWYgLy8gRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKaW5kZXggZTU1MzJmZGJiY2FhMjlhN2FhOTg1Yjk2NWU3M2I0MmNjOTAwMWI1Zi4uZjE5NzY5
NjRjOWNiM2RlZDI4NWY1YTQ2NWQ4ZWRiY2M3MThhMGMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTgsNyArOCw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFBs
YXRmb3JtL0lQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAogICAgIFBsYXRmb3JtL0lQQy91bml4
L0Nvbm5lY3Rpb25Vbml4LmNwcAogCi0gICAgUGxhdGZvcm0vZWZsL0Rpc3BhdGNoUXVldWVFZmwu
Y3BwCiAgICAgUGxhdGZvcm0vZWZsL0xvZ2dpbmdFZmwuY3BwCiAgICAgUGxhdGZvcm0vZWZsL01v
ZHVsZUVmbC5jcHAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>