<?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>5677</bug_id>
          
          <creation_ts>2005-11-09 07:50:45 -0800</creation_ts>
          <short_desc>speed up KWQ timers by using CFRunLoopTimer instead of NSTimer</short_desc>
          <delta_ts>2005-12-10 09:13:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>eric</cc>
    
    <cc>timo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>23847</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 07:50:45 -0800</bug_when>
    <thetext>I saw some NSTimer and Objective-C overhead when profiling benchmarks that can be eliminated. I&apos;m 
working on a patch that speeds things up and also simplifies how the back/forward cache suspends and 
resumes timers.

I landed this once, but it caused regressions so we have to work on this more and test a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23848</commentid>
    <comment_count>1</comment_count>
      <attachid>4640</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 08:09:34 -0800</bug_when>
    <thetext>Created attachment 4640
version that seems to work well

I&apos;m not sure exactly what to do about this. I can&apos;t reproduce any problems with
this version of the patch, but Tim said he had big problems with Dashboard. I
can&apos;t seem to test this with Dashboard successfully. Someone else may have to
test and land this.

I think the speedup and simplification is worth it, and there might even be
some bug fixes in the cleaned up back/forward code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23849</commentid>
    <comment_count>2</comment_count>
      <attachid>4640</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 08:14:06 -0800</bug_when>
    <thetext>Comment on attachment 4640
version that seems to work well

Tim already reviewed this once -- I think it&apos;s time to review, test, and land
this version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25456</commentid>
    <comment_count>3</comment_count>
      <attachid>4640</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-03 14:00:13 -0800</bug_when>
    <thetext>Comment on attachment 4640
version that seems to work well

Shouldn&apos;t PausedTimeouts create and destroy the actual array?  Or maybe it
should take them, but construction should be the last step in the fuction. 
Would be more obvious if we had PassRefPtr, but we don&apos;t yet.

Also, I&apos;m curious as to why you might wish to use a raw c array and length
pointer (for the paused timeouts array), instead of something like a QMemArray
which would hold the two together for you?

Wow.  That was a big patch.  And I don&apos;t feel like my brain managed to soak in
every line of code change, but in general it looke sane, besides the manual
memory management noted above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25467</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-03 16:38:15 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 4640 [edit])
&gt; Shouldn&apos;t PausedTimeouts create and destroy the actual array?  Or maybe it
&gt; should take them, but construction should be the last step in the fuction. 
&gt; Would be more obvious if we had PassRefPtr, but we don&apos;t yet.

The PausedTimeouts class&apos;s destructor does destroy the actual array, but the constructor doesn&apos;t create it -- instead it 
adopts it. That&apos;s for efficiency but maybe there&apos;s a better way to do it.

I&apos;m not sure I understand your question. PassRefPtr wouldn&apos;t help much since the array is not a reference-counted object.

&gt; Also, I&apos;m curious as to why you might wish to use a raw c array and length
&gt; pointer (for the paused timeouts array), instead of something like a QMemArray
&gt; which would hold the two together for you?

A QMemArray would be OK, but it has extra overhead to accomodate resizing the array. This is a fixed-size array and we 
don&apos;t have a class that implements that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25648</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-06 23:31:00 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; The PausedTimeouts class&apos;s destructor does destroy the actual array, but the constructor doesn&apos;t 
create it -- instead it 
&gt; adopts it. That&apos;s for efficiency but maybe there&apos;s a better way to do it.
&gt; 
&gt; I&apos;m not sure I understand your question. PassRefPtr wouldn&apos;t help much since the array is not a 
reference-counted object.

A momentary lapse of judgement. :)

&gt; &gt; Also, I&apos;m curious as to why you might wish to use a raw c array and length
&gt; &gt; pointer (for the paused timeouts array), instead of something like a QMemArray
&gt; &gt; which would hold the two together for you?
&gt; 
&gt; A QMemArray would be OK, but it has extra overhead to accomodate resizing the array. This is a 
fixed-size array and we 
&gt; don&apos;t have a class that implements that.

Yes, that&apos;s a shame.  The encapsulation may still be worth the overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25769</commentid>
    <comment_count>6</comment_count>
      <attachid>4640</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-10 09:06:59 -0800</bug_when>
    <thetext>Comment on attachment 4640
version that seems to work well

This patch was missing at least one required nil check.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4640</attachid>
            <date>2005-11-09 08:09:34 -0800</date>
            <delta_ts>2005-12-10 09:06:59 -0800</delta_ts>
            <desc>version that seems to work well</desc>
            <filename>CFTimerPatch.txt</filename>
            <type>text/plain</type>
            <size>63612</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xODcKZGlmZiAtcCAtdSAtcjEuMTg3IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAK
LS0tIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJOSBOb3YgMjAwNSAwMjo0NjoyNyAtMDAwMAkx
LjE4NworKysga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAk5IE5vdiAyMDA1IDE2OjA5OjI1IC0w
MDAwCkBAIC04MCwzMCArODAsMjUgQEAKIC8vIDxjbWF0aD4gYW5kIDxtYXRoLmg+IHRoZSBtYWNy
b3MgbmVjZXNzYXJ5IGZvciBmdW5jdGlvbnMgbGlrZQogLy8gaXNuYW4gYXJlIG5vdCBkZWZpbmVk
LgogI2luY2x1ZGUgPGNtYXRoPgordXNpbmcgc3RkOjppc25hbjsKIAotdXNpbmcgbmFtZXNwYWNl
IERPTTo6RXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBET007Cit1c2luZyBuYW1lc3BhY2Ug
RXZlbnROYW1lczsKIAotdXNpbmcgRE9NOjpBdG9taWNTdHJpbmc7Ci11c2luZyBET006OkRvY3Vt
ZW50SW1wbDsKLXVzaW5nIERPTTo6RE9NU3RyaW5nOwotdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsK
LXVzaW5nIERPTTo6RXZlbnRJbXBsOwotdXNpbmcgRE9NOjpIVE1MQ29sbGVjdGlvbkltcGw7Ci11
c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7Ci11c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsK
LXVzaW5nIERPTTo6Tm9kZUltcGw7Ci11c2luZyBET006OlBvc2l0aW9uOwotCi11c2luZyBraHRt
bDo6VHlwaW5nQ29tbWFuZDsKLQotdXNpbmcgS1BhcnRzOjpSZWFkT25seVBhcnQ7Ci11c2luZyBL
UGFydHM6OlVSTEFyZ3M7Ci11c2luZyBLUGFydHM6OldpbmRvd0FyZ3M7Cit1c2luZyBuYW1lc3Bh
Y2Uga2h0bWw7CiAKLXVzaW5nIHN0ZDo6aXNuYW47Cit1c2luZyBuYW1lc3BhY2UgS1BhcnRzOwog
CiBuYW1lc3BhY2UgS0pTIHsKIAorY2xhc3MgUGF1c2VkVGltZW91dCB7CitwdWJsaWM6CisgICAg
aW50IHRpbWVySWQ7CisgICAgaW50IG5leHRGaXJlSW50ZXJ2YWw7CisgICAgaW50IHJlcGVhdElu
dGVydmFsOworICAgIFNjaGVkdWxlZEFjdGlvbiAqYWN0aW9uOworfTsKKwogLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLyBIaXN0b3J5IE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogICBj
bGFzcyBIaXN0b3J5IDogcHVibGljIE9iamVjdEltcCB7CkBAIC0xMjYyLDQ3ICsxMjU3LDExIEBA
IGJvb2wgV2luZG93Ojp0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnMKICAgcmV0dXJuICFtX3Bh
cnQuaXNOdWxsKCk7CiB9CiAKLWludCBXaW5kb3c6Omluc3RhbGxUaW1lb3V0KGNvbnN0IFVTdHJp
bmcgJmhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpCi17Ci0gIHJldHVybiB3aW5xLT5p
bnN0YWxsVGltZW91dChoYW5kbGVyLCB0LCBzaW5nbGVTaG90KTsKLX0KLQotaW50IFdpbmRvdzo6
aW5zdGFsbFRpbWVvdXQoVmFsdWVJbXAgKmZ1bmN0aW9uLCBMaXN0ICZhcmdzLCBpbnQgdCwgYm9v
bCBzaW5nbGVTaG90KQotewotICByZXR1cm4gd2lucS0+aW5zdGFsbFRpbWVvdXQoZnVuY3Rpb24s
IGFyZ3MsIHQsIHNpbmdsZVNob3QpOwotfQotCi12b2lkIFdpbmRvdzo6Y2xlYXJUaW1lb3V0KGlu
dCB0aW1lcklkKQotewotICB3aW5xLT5jbGVhclRpbWVvdXQodGltZXJJZCk7Ci19Ci0KLSNpZiBB
UFBMRV9DSEFOR0VTCi1ib29sIFdpbmRvdzo6aGFzVGltZW91dHMoKQotewotICAgIHJldHVybiB3
aW5xLT5oYXNUaW1lb3V0cygpOwotfQotCi1RTWFwPGludCwgU2NoZWR1bGVkQWN0aW9uKj4gKldp
bmRvdzo6cGF1c2VUaW1lb3V0cyhjb25zdCB2b2lkICprZXkpCi17Ci0gICAgcmV0dXJuIHdpbnEt
PnBhdXNlVGltZW91dHMoa2V5KTsKLX0KLQotdm9pZCBXaW5kb3c6OnJlc3VtZVRpbWVvdXRzKFFN
YXA8aW50LCBTY2hlZHVsZWRBY3Rpb24qPiAqc2EsIGNvbnN0IHZvaWQgKmtleSkKLXsKLSAgICBy
ZXR1cm4gd2lucS0+cmVzdW1lVGltZW91dHMoc2EsIGtleSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBX
aW5kb3c6OnNjaGVkdWxlQ2xvc2UoKQogewogICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6OnNj
aGVkdWxlQ2xvc2Ugd2luZG93LmNsb3NlKCkgIiA8PCBtX3BhcnQgPDwgZW5kbDsKICAgUV9BU1NF
UlQod2lucSk7Ci0jaWYgQVBQTEVfQ0hBTkdFUwogICBLV1EobV9wYXJ0KS0+c2NoZWR1bGVDbG9z
ZSgpOwotI2Vsc2UKLSAgUVRpbWVyOjpzaW5nbGVTaG90KCAwLCB3aW5xLCBTTE9UKCB0aW1lb3V0
Q2xvc2UoKSApICk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkTG9hZEFzRW1wdHlE
b2N1bWVudChjb25zdCBLVVJMICZ1cmwpCkBAIC0yMDI3LDIwMCArMTk4NiwxNDEgQEAgdm9pZCBX
aW5kb3c6OnVwZGF0ZUxheW91dCgpIGNvbnN0CiAgICAgZG9jaW1wbC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiB9CiAKLQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBT
Y2hlZHVsZWRBY3Rpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLVNjaGVkdWxlZEFjdGlv
bjo6U2NoZWR1bGVkQWN0aW9uKE9iamVjdEltcCAqX2Z1bmMsIExpc3QgX2FyZ3MsIGJvb2wgX3Np
bmdsZVNob3QpCit2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShXaW5kb3cgKndpbmRvdykK
IHsKLSAgLy9rZERlYnVnKDYwNzApIDw8ICJTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlv
bihpc0Z1bmN0aW9uKSAiIDw8IHRoaXMgPDwgZW5kbDsKLSAgZnVuYyA9IF9mdW5jOwotICBhcmdz
ID0gX2FyZ3M7Ci0gIGlzRnVuY3Rpb24gPSB0cnVlOwotICBzaW5nbGVTaG90ID0gX3NpbmdsZVNo
b3Q7Ci19Ci0KLVNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKGNvbnN0IFFTdHJpbmcg
Jl9jb2RlLCBib29sIF9zaW5nbGVTaG90KQotewotICAvL2tkRGVidWcoNjA3MCkgPDwgIlNjaGVk
dWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKCFpc0Z1bmN0aW9uKSAiIDw8IHRoaXMgPDwgZW5k
bDsKLSAgLy9mdW5jID0gMDsKLSAgLy9hcmdzID0gMDsKLSAgY29kZSA9IF9jb2RlOwotICBpc0Z1
bmN0aW9uID0gZmFsc2U7Ci0gIHNpbmdsZVNob3QgPSBfc2luZ2xlU2hvdDsKLX0KKyAgICBpZiAo
IXdpbmRvdy0+bV9wYXJ0KQorICAgICAgICByZXR1cm47CiAKKyAgICBTY3JpcHRJbnRlcnByZXRl
ciAqaW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPihLSlNQcm94
eTo6cHJveHkod2luZG93LT5tX3BhcnQpLT5pbnRlcnByZXRlcigpKTsKIAotdm9pZCBTY2hlZHVs
ZWRBY3Rpb246OmV4ZWN1dGUoV2luZG93ICp3aW5kb3cpCi17Ci0gIFNjcmlwdEludGVycHJldGVy
ICppbnRlcnByZXRlciA9IHN0YXRpY19jYXN0PFNjcmlwdEludGVycHJldGVyICo+KEtKU1Byb3h5
Ojpwcm94eSh3aW5kb3ctPm1fcGFydCktPmludGVycHJldGVyKCkpOworICAgIGludGVycHJldGVy
LT5zZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayh0cnVlKTsKICAgCi0gIGludGVycHJldGVyLT5z
ZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayh0cnVlKTsKLSAgCi0gIC8va2REZWJ1Zyg2MDcwKSA8
PCAiU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlICIgPDwgdGhpcyA8PCBlbmRsOwotICBpZiAoaXNG
dW5jdGlvbikgewotICAgIGlmIChmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKSB7Ci0gICAgICAvLyAj
IyMjIGNoZWNrIHRoaXMKLSAgICAgIFFfQVNTRVJUKHdpbmRvdy0+bV9wYXJ0KTsKLSAgICAgIGlm
ICh3aW5kb3ctPm1fcGFydCkgewotICAgICAgICBJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBL
SlNQcm94eTo6cHJveHkod2luZG93LT5tX3BhcnQpLT5pbnRlcnByZXRlcigpOwotICAgICAgICBF
eGVjU3RhdGUgKmV4ZWMgPSBpbnRlcnByZXRlci0+Z2xvYmFsRXhlYygpOwotICAgICAgICBRX0FT
U0VSVCh3aW5kb3cgPT0gaW50ZXJwcmV0ZXItPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgT2Jq
ZWN0SW1wICpvYmood2luZG93KTsKLQlJbnRlcnByZXRlckxvY2sgbG9jazsKLSAgICAgICAgZnVu
Yy0+Y2FsbChleGVjLCBvYmosIGFyZ3MpOyAvLyBub3RlIHRoYXQgY2FsbCgpIGNyZWF0ZXMgaXRz
IG93biBleGVjdXRpb24gc3RhdGUgZm9yIHRoZSBmdW5jIGNhbGwKLQlpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgICBjaGFyICptZXNzYWdlID0gZXhlYy0+ZXhjZXB0aW9uKCkt
PnRvT2JqZWN0KGV4ZWMpLT5nZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFtZSktPnRvU3RyaW5n
KGV4ZWMpLmFzY2lpKCk7Ci0gICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBleGVjLT5leGNlcHRp
b24oKS0+dG9PYmplY3QoZXhlYyktPmdldChleGVjLCAibGluZSIpLT50b0ludDMyKGV4ZWMpOwot
CSAgaWYgKEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkgewotCSAgICBwcmlu
dGYoIih0aW1lcik6JXNcbiIsIG1lc3NhZ2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBL
V1Eod2luZG93LT5tX3BhcnQpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1i
ZXIsIFFTdHJpbmcoKSk7Ci0gICAgICAgICAgfQotCSAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICBpZiAobV9mdW5jKSB7CisgICAgICAgIGlmIChtX2Z1bmMtPmlzT2JqZWN0KCkgJiYgc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KG1fZnVuYy5nZXQoKSktPmltcGxlbWVudHNDYWxsKCkpIHsK
KyAgICAgICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7
CisgICAgICAgICAgICBhc3NlcnQod2luZG93ID09IGludGVycHJldGVyLT5nbG9iYWxPYmplY3Qo
KSk7CisgICAgICAgICAgICBJbnRlcnByZXRlckxvY2sgbG9jazsKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PE9iamVjdEltcCAqPihtX2Z1bmMuZ2V0KCkpLT5jYWxsKGV4ZWMsIHdpbmRvdywgbV9h
cmdzKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAg
ICAgICAgIE9iamVjdEltcCAqZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnRvT2JqZWN0
KGV4ZWMpOworICAgICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0gZXhjZXB0aW9uLT5nZXQoZXhlYywgbWVzc2FnZVBy
b3BlcnR5TmFtZSktPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBp
bnQgbGluZU51bWJlciA9IGV4Y2VwdGlvbi0+Z2V0KGV4ZWMsICJsaW5lIiktPnRvSW50MzIoZXhl
Yyk7CisgICAgICAgICAgICAgICAgaWYgKEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlv
bnMoKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIodGltZXIpOiVzXG4iLCBtZXNzYWdl
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIEtXUSh3aW5kb3ctPm1fcGFydCktPmFk
ZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgUVN0cmluZygpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfSBlbHNlCi0gICAgd2luZG93
LT5tX3BhcnQtPmV4ZWN1dGVTY3JpcHQoY29kZSk7CisgICAgfSBlbHNlCisgICAgICAgIHdpbmRv
dy0+bV9wYXJ0LT5leGVjdXRlU2NyaXB0KG1fY29kZSk7CiAgIAotICAvLyBVcGRhdGUgb3VyIGRv
Y3VtZW50J3MgcmVuZGVyaW5nIGZvbGxvd2luZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSB0aW1lb3V0
IGNhbGxiYWNrLgotICBpZiAoRG9jdW1lbnRJbXBsICpkb2MgPSB3aW5kb3ctPm1fcGFydC0+eG1s
RG9jSW1wbCgpKQotICAgIGRvYy0+dXBkYXRlUmVuZGVyaW5nKCk7CisgICAgLy8gVXBkYXRlIG91
ciBkb2N1bWVudCdzIHJlbmRlcmluZyBmb2xsb3dpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgdGlt
ZW91dCBjYWxsYmFjay4KKyAgICAvLyBGSVhNRTogV2h5PyBXaHkgbm90IG90aGVyIGRvY3VtZW50
cywgZm9yIGV4YW1wbGU/CisgICAgRG9jdW1lbnRJbXBsICpkb2MgPSB3aW5kb3ctPm1fcGFydC0+
eG1sRG9jSW1wbCgpOworICAgIGlmIChkb2MpCisgICAgICAgIGRvYy0+dXBkYXRlUmVuZGVyaW5n
KCk7CiAgIAotICBpbnRlcnByZXRlci0+c2V0UHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2soZmFsc2Up
OworICAgIGludGVycHJldGVyLT5zZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayhmYWxzZSk7CiB9
CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gV2luZG93UU9iamVjdCAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KIAogV2luZG93UU9iamVjdDo6V2luZG93UU9iamVjdChXaW5kb3cgKncpCi0gIDog
cGFyZW50KHcpCisgICAgOiBtX3BhcmVudCh3KQogewotICAvL2tkRGVidWcoNjA3MCkgPDwgIldp
bmRvd1FPYmplY3Q6OldpbmRvd1FPYmplY3QgIiA8PCB0aGlzIDw8IGVuZGw7Ci0gIHBhcnQgPSBw
YXJlbnQtPm1fcGFydDsKLSAgY29ubmVjdCggcGFyZW50LT5tX3BhcnQsIFNJR05BTCggZGVzdHJv
eWVkKCkgKSwKLSAgICAgICAgICAgdGhpcywgU0xPVCggcGFyZW50RGVzdHJveWVkKCkgKSApOwot
fQotCi1XaW5kb3dRT2JqZWN0Ojp+V2luZG93UU9iamVjdCgpCi17Ci0gIC8va2REZWJ1Zyg2MDcw
KSA8PCAiV2luZG93UU9iamVjdDo6fldpbmRvd1FPYmplY3QgIiA8PCB0aGlzIDw8IGVuZGw7Ci0g
IHBhcmVudERlc3Ryb3llZCgpOyAvLyByZXVzZSBzYW1lIGNvZGUKKyAgICBjb25uZWN0KHctPm1f
cGFydCwgU0lHTkFMKGRlc3Ryb3llZCgpKSwgdGhpcywgU0xPVChwYXJlbnREZXN0cm95ZWQoKSkp
OwogfQogCiB2b2lkIFdpbmRvd1FPYmplY3Q6OnBhcmVudERlc3Ryb3llZCgpCiB7Ci0gIC8va2RE
ZWJ1Zyg2MDcwKSA8PCAiV2luZG93UU9iamVjdDo6cGFyZW50RGVzdHJveWVkICIgPDwgdGhpcyA8
PCAiIHdlIGhhdmUgIiA8PCBzY2hlZHVsZWRBY3Rpb25zLmNvdW50KCkgPDwgIiBhY3Rpb25zIGlu
IHRoZSBtYXAiIDw8IGVuZGw7Ci0gIGtpbGxUaW1lcnMoKTsKLSAgUU1hcEl0ZXJhdG9yPGludCxT
Y2hlZHVsZWRBY3Rpb24qPiBpdDsKLSAgZm9yIChpdCA9IHNjaGVkdWxlZEFjdGlvbnMuYmVnaW4o
KTsgaXQgIT0gc2NoZWR1bGVkQWN0aW9ucy5lbmQoKTsgKytpdCkgewotICAgIFNjaGVkdWxlZEFj
dGlvbiAqYWN0aW9uID0gKml0OwotICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiV2luZG93UU9iamVj
dDo6cGFyZW50RGVzdHJveWVkIGRlbGV0aW5nIGFjdGlvbiAiIDw8IGFjdGlvbiA8PCBlbmRsOwot
ICAgIGRlbGV0ZSBhY3Rpb247Ci0gIH0KLSAgc2NoZWR1bGVkQWN0aW9ucy5jbGVhcigpOworICAg
IGtpbGxUaW1lcnMoKTsKKyAgICBmb3IgKFFNYXBJdGVyYXRvcjxpbnQsIFNjaGVkdWxlZEFjdGlv
biAqPiBpdCA9IG1fdGltZW91dHMuYmVnaW4oKTsgaXQgIT0gbV90aW1lb3V0cy5lbmQoKTsgKytp
dCkKKyAgICAgICAgZGVsZXRlICppdDsKKyAgICBtX3RpbWVvdXRzLmNsZWFyKCk7CiB9CiAKLWlu
dCBXaW5kb3dRT2JqZWN0OjppbnN0YWxsVGltZW91dChjb25zdCBVU3RyaW5nICZoYW5kbGVyLCBp
bnQgdCwgYm9vbCBzaW5nbGVTaG90KQoraW50IFdpbmRvd1FPYmplY3Q6Omluc3RhbGxUaW1lb3V0
KGNvbnN0IFVTdHJpbmcmIGhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpCiB7Ci0gIC8v
a2REZWJ1Zyg2MDcwKSA8PCAiV2luZG93UU9iamVjdDo6aW5zdGFsbFRpbWVvdXQgIiA8PCB0aGlz
IDw8ICIgIiA8PCBoYW5kbGVyLmFzY2lpKCkgPDwgZW5kbDsKLSAgaW50IGlkID0gc3RhcnRUaW1l
cih0KTsKLSAgU2NoZWR1bGVkQWN0aW9uICphY3Rpb24gPSBuZXcgU2NoZWR1bGVkQWN0aW9uKGhh
bmRsZXIucXN0cmluZygpLHNpbmdsZVNob3QpOwotICBzY2hlZHVsZWRBY3Rpb25zLmluc2VydChp
ZCwgYWN0aW9uKTsKLSAgLy9rZERlYnVnKDYwNzApIDw8IHRoaXMgPDwgIiBnb3QgaWQ9IiA8PCBp
ZCA8PCAiIGFjdGlvbj0iIDw8IGFjdGlvbiA8PCAiIC0gbm93IGhhdmluZyAiIDw8IHNjaGVkdWxl
ZEFjdGlvbnMuY291bnQoKSA8PCAiIGFjdGlvbnMiPDxlbmRsOwotICByZXR1cm4gaWQ7CisgICAg
aW50IGlkID0gc3RhcnRUaW1lcih0KTsKKyAgICBTY2hlZHVsZWRBY3Rpb24gKmFjdGlvbiA9IG5l
dyBTY2hlZHVsZWRBY3Rpb24oaGFuZGxlci5xc3RyaW5nKCksIHNpbmdsZVNob3QpOworICAgIG1f
dGltZW91dHMuaW5zZXJ0KGlkLCBhY3Rpb24pOworICAgIHJldHVybiBpZDsKIH0KIAotaW50IFdp
bmRvd1FPYmplY3Q6Omluc3RhbGxUaW1lb3V0KFZhbHVlSW1wICpmdW5jLCBMaXN0IGFyZ3MsIGlu
dCB0LCBib29sIHNpbmdsZVNob3QpCitpbnQgV2luZG93UU9iamVjdDo6aW5zdGFsbFRpbWVvdXQo
VmFsdWVJbXAgKmZ1bmMsIGNvbnN0IExpc3QmIGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3Qp
CiB7Ci0gIE9iamVjdEltcCAqb2JqRnVuYyA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihmdW5j
KTsKLSAgaW50IGlkID0gc3RhcnRUaW1lcih0KTsKLSAgc2NoZWR1bGVkQWN0aW9ucy5pbnNlcnQo
aWQsIG5ldyBTY2hlZHVsZWRBY3Rpb24ob2JqRnVuYyxhcmdzLHNpbmdsZVNob3QpKTsKLSAgcmV0
dXJuIGlkOworICAgIGludCBpZCA9IHN0YXJ0VGltZXIodCk7CisgICAgbV90aW1lb3V0cy5pbnNl
cnQoaWQsIG5ldyBTY2hlZHVsZWRBY3Rpb24oZnVuYywgYXJncywgc2luZ2xlU2hvdCkpOworICAg
IHJldHVybiBpZDsKIH0KIAotUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+ICpXaW5kb3dRT2Jq
ZWN0OjpwYXVzZVRpbWVvdXRzKGNvbnN0IHZvaWQgKmtleSkKK1BhdXNlZFRpbWVvdXRzICpXaW5k
b3dRT2JqZWN0OjpwYXVzZVRpbWVvdXRzKCkKIHsKLSAgICBRTWFwSXRlcmF0b3I8aW50LFNjaGVk
dWxlZEFjdGlvbio+IGl0OwotCi0gICAgUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+KnBhdXNl
ZEFjdGlvbnMgPSBuZXcgUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+OwotICAgIGZvciAoaXQg
PSBzY2hlZHVsZWRBY3Rpb25zLmJlZ2luKCk7IGl0ICE9IHNjaGVkdWxlZEFjdGlvbnMuZW5kKCk7
ICsraXQpIHsKKyAgICBzaXplX3QgY291bnQgPSBtX3RpbWVvdXRzLmNvdW50KCk7CisgICAgaWYg
KGNvdW50ID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIFBhdXNlZFRpbWVvdXQgKnQgPSBu
ZXcgUGF1c2VkVGltZW91dCBbY291bnRdOworICAgIFBhdXNlZFRpbWVvdXRzICpyZXN1bHQgPSBu
ZXcgUGF1c2VkVGltZW91dHModCwgY291bnQpOworICAgIGZvciAoUU1hcEl0ZXJhdG9yPGludCwg
U2NoZWR1bGVkQWN0aW9uICo+IGl0ID0gbV90aW1lb3V0cy5iZWdpbigpOyBpdCAhPSBtX3RpbWVv
dXRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGludCB0aW1lcklkID0gaXQua2V5KCk7Ci0gICAg
ICAgIHBhdXNlVGltZXIgKHRpbWVySWQsIGtleSk7Ci0gICAgICAgIHBhdXNlZEFjdGlvbnMtPmlu
c2VydCh0aW1lcklkLCBpdC5kYXRhKCkpOworICAgICAgICB0aW1lckludGVydmFscyh0aW1lcklk
LCB0LT5uZXh0RmlyZUludGVydmFsLCB0LT5yZXBlYXRJbnRlcnZhbCk7CisgICAgICAgIHQtPnRp
bWVySWQgPSB0aW1lcklkOworICAgICAgICB0LT5hY3Rpb24gPSBpdC5kYXRhKCk7CisgICAgICAg
ICsrdDsKKyAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwogICAgIH0KLSAgICBzY2hlZHVsZWRB
Y3Rpb25zLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHBhdXNlZEFjdGlvbnM7CisgICAgbV90aW1lb3V0
cy5jbGVhcigpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2luZG93UU9iamVjdDo6
cmVzdW1lVGltZW91dHMoUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+ICpzYSwgY29uc3Qgdm9p
ZCAqa2V5KQordm9pZCBXaW5kb3dRT2JqZWN0OjpyZXN1bWVUaW1lb3V0cyhQYXVzZWRUaW1lb3V0
cyAqdGltZW91dHMpCiB7Ci0gICAgUU1hcEl0ZXJhdG9yPGludCxTY2hlZHVsZWRBY3Rpb24qPiBp
dDsKLSAgICBmb3IgKGl0ID0gc2EtPmJlZ2luKCk7IGl0ICE9IHNhLT5lbmQoKTsgKytpdCkgewot
ICAgICAgICBpbnQgdGltZXJJZCA9IGl0LmtleSgpOwotICAgICAgICBzY2hlZHVsZWRBY3Rpb25z
Lmluc2VydCh0aW1lcklkLCBpdC5kYXRhKCkpOworICAgIGlmICghdGltZW91dHMpCisgICAgICAg
IHJldHVybjsKKyAgICBzaXplX3QgY291bnQgPSB0aW1lb3V0cy0+bnVtVGltZW91dHMoKTsKKyAg
ICBQYXVzZWRUaW1lb3V0ICphcnJheSA9IHRpbWVvdXRzLT50YWtlVGltZW91dHMoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsgKytpKSB7CisgICAgICAgIGludCB0aW1lcklk
ID0gYXJyYXlbaV0udGltZXJJZDsKKyAgICAgICAgbV90aW1lb3V0cy5pbnNlcnQodGltZXJJZCwg
YXJyYXlbaV0uYWN0aW9uKTsKKyAgICAgICAgcmVzdGFydFRpbWVyKHRpbWVySWQsIGFycmF5W2ld
Lm5leHRGaXJlSW50ZXJ2YWwsIGFycmF5W2ldLnJlcGVhdEludGVydmFsKTsKICAgICB9Ci0gICAg
c2EtPmNsZWFyKCk7Ci0gICAgcmVzdW1lVGltZXJzIChrZXksIHRoaXMpOworICAgIGRlbGV0ZSBb
XSBhcnJheTsKIH0KIAogdm9pZCBXaW5kb3dRT2JqZWN0OjpjbGVhclRpbWVvdXQoaW50IHRpbWVy
SWQsIGJvb2wgZGVsQWN0aW9uKQogewotICAvL2tkRGVidWcoNjA3MCkgPDwgIldpbmRvd1FPYmpl
Y3Q6OmNsZWFyVGltZW91dCAiIDw8IHRoaXMgPDwgIiB0aW1lcklkPSIgPDwgdGltZXJJZCA8PCAi
IGRlbEFjdGlvbj0iIDw8IGRlbEFjdGlvbiA8PCBlbmRsOwotICBraWxsVGltZXIodGltZXJJZCk7
Ci0gIGlmIChkZWxBY3Rpb24pIHsKLSAgICBRTWFwSXRlcmF0b3I8aW50LFNjaGVkdWxlZEFjdGlv
bio+IGl0ID0gc2NoZWR1bGVkQWN0aW9ucy5maW5kKHRpbWVySWQpOwotICAgIGlmIChpdCAhPSBz
Y2hlZHVsZWRBY3Rpb25zLmVuZCgpKSB7Ci0gICAgICBTY2hlZHVsZWRBY3Rpb24gKmFjdGlvbiA9
ICppdDsKLSAgICAgIHNjaGVkdWxlZEFjdGlvbnMucmVtb3ZlKGl0KTsKLSAgICAgIGRlbGV0ZSBh
Y3Rpb247CisgICAga2lsbFRpbWVyKHRpbWVySWQpOworICAgIGlmIChkZWxBY3Rpb24pIHsKKyAg
ICAgICAgUU1hcEl0ZXJhdG9yPGludCwgU2NoZWR1bGVkQWN0aW9uICo+IGl0ID0gbV90aW1lb3V0
cy5maW5kKHRpbWVySWQpOworICAgICAgICBpZiAoaXQgIT0gbV90aW1lb3V0cy5lbmQoKSkgewor
ICAgICAgICAgICAgZGVsZXRlICppdDsKKyAgICAgICAgICAgIG1fdGltZW91dHMucmVtb3ZlKGl0
KTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogfQogCiB2b2lkIFdpbmRvd1FPYmplY3Q6OnRpbWVy
RXZlbnQoUVRpbWVyRXZlbnQgKmUpCiB7Ci0gIFFNYXBJdGVyYXRvcjxpbnQsU2NoZWR1bGVkQWN0
aW9uKj4gaXQgPSBzY2hlZHVsZWRBY3Rpb25zLmZpbmQoZS0+dGltZXJJZCgpKTsKLSAgaWYgKGl0
ICE9IHNjaGVkdWxlZEFjdGlvbnMuZW5kKCkpIHsKKyAgICBRTWFwSXRlcmF0b3I8aW50LCBTY2hl
ZHVsZWRBY3Rpb24gKj4gaXQgPSBtX3RpbWVvdXRzLmZpbmQoZS0+dGltZXJJZCgpKTsKICAgICBT
Y2hlZHVsZWRBY3Rpb24gKmFjdGlvbiA9ICppdDsKLSAgICBib29sIHNpbmdsZVNob3QgPSBhY3Rp
b24tPnNpbmdsZVNob3Q7Ci0gICAgLy9rZERlYnVnKDYwNzApIDw8ICJXaW5kb3dRT2JqZWN0Ojp0
aW1lckV2ZW50ICIgPDwgdGhpcyA8PCAiIGFjdGlvbj0iIDw8IGFjdGlvbiA8PCAiIHNpbmdsZVNo
b3Q6IiA8PCBzaW5nbGVTaG90IDw8IGVuZGw7CisgICAgYm9vbCBzaW5nbGVTaG90ID0gYWN0aW9u
LT5zaW5nbGVTaG90KCk7CiAKLSAgICAvLyByZW1vdmUgc2luZ2xlIHNob3RzIGluc3RhbGxlZCBi
eSBzZXRUaW1lb3V0KCkKLSAgICBpZiAoc2luZ2xlU2hvdCkKLSAgICB7Ci0gICAgICBjbGVhclRp
bWVvdXQoZS0+dGltZXJJZCgpLGZhbHNlKTsKLSAgICAgIHNjaGVkdWxlZEFjdGlvbnMucmVtb3Zl
KGl0KTsKKyAgICAvLyByZW1vdmUgc2luZ2xlIHNob3RzIGJlZm9yZSBleGVjdXRpbmcKKyAgICBp
ZiAoc2luZ2xlU2hvdCkgeworICAgICAgICBjbGVhclRpbWVvdXQoZS0+dGltZXJJZCgpLCBmYWxz
ZSk7CisgICAgICAgIG1fdGltZW91dHMucmVtb3ZlKGl0KTsKICAgICB9Ci0gICAgICAgIAotICAg
IGlmICghcGFyZW50LT5wYXJ0KCkuaXNOdWxsKCkpCi0gICAgICBhY3Rpb24tPmV4ZWN1dGUocGFy
ZW50KTsKIAotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB0ZXN0IHNpbmdsZVNob3QgYW5kIG5v
dCBhY3Rpb24tPnNpbmdsZVNob3QgaGVyZSAtIHRoZQotICAgIC8vIGFjdGlvbiBjb3VsZCBoYXZl
IGJlZW4gZGVsZXRlZCBhbHJlYWR5IGlmIG5vdCBzaW5nbGUgc2hvdCBhbmQgaWYgdGhlCisgICAg
YWN0aW9uLT5leGVjdXRlKG1fcGFyZW50KTsKKworICAgIC8vIEl0IGlzIGltcG9ydGFudCBub3Qg
dG8gdXNlIGFjdGlvbi0+c2luZ2xlU2hvdCBoZXJlLgorICAgIC8vIFRoZSBhY3Rpb24gY291bGQg
aGF2ZSBiZWVuIGRlbGV0ZWQgYWxyZWFkeSBpZiBub3Qgc2luZ2xlIHNob3QgdGhlCiAgICAgLy8g
SlMgY29kZSBjYWxsZWQgYnkgZXhlY3V0ZSgpIGNhbGxzIGNsZWFyVGltZW91dCgpLgogICAgIGlm
IChzaW5nbGVTaG90KQotICAgICAgZGVsZXRlIGFjdGlvbjsKLSAgfSBlbHNlCi0gICAga2RXYXJu
aW5nKDYwNzApIDw8ICJXaW5kb3dRT2JqZWN0Ojp0aW1lckV2ZW50IHRoaXM9IiA8PCB0aGlzIDw8
ICIgdGltZXIgIiA8PCBlLT50aW1lcklkKCkKLSAgICAgICAgICAgICAgICAgICAgPDwgIiBub3Qg
Zm91bmQgKCIgPDwgc2NoZWR1bGVkQWN0aW9ucy5jb3VudCgpIDw8ICIgYWN0aW9ucyBpbiBtYXAp
IiA8PCBlbmRsOwotfQotCi12b2lkIFdpbmRvd1FPYmplY3Q6OnRpbWVvdXRDbG9zZSgpCi17Ci0g
IGlmICghcGFyZW50LT5wYXJ0KCkuaXNOdWxsKCkpCi0gIHsKLSAgICAvL2tkRGVidWcoNjA3MCkg
PDwgIldpbmRvd1FPYmplY3Q6OnRpbWVvdXRDbG9zZSAtPiBjbG9zaW5nIHdpbmRvdyIgPDwgZW5k
bDsKLSAgICBkZWxldGUgcGFyZW50LT5tX3BhcnQ7Ci0gIH0KLX0KLQotI2lmIEFQUExFX0NIQU5H
RVMKLWJvb2wgV2luZG93UU9iamVjdDo6aGFzVGltZW91dHMoKQotewotICAgIHJldHVybiBzY2hl
ZHVsZWRBY3Rpb25zLmNvdW50KCk7CisgICAgICAgIGRlbGV0ZSBhY3Rpb247CiB9Ci0jZW5kaWYK
LQogCiBjb25zdCBDbGFzc0luZm8gRnJhbWVBcnJheTo6aW5mbyA9IHsgIkZyYW1lQXJyYXkiLCAw
LCAmRnJhbWVBcnJheVRhYmxlLCAwIH07CiAKQEAgLTIyMzEsNyArMjEzMSw2IEBAIGxvY2F0aW9u
CUZyYW1lQXJyYXk6OkxvY2F0aW9uCURvbnREZWxldGUKIEBlbmQKICovCiAKLQogVmFsdWVJbXAg
KkZyYW1lQXJyYXk6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
CiB7CiAgIHN3aXRjaCAodG9rZW4pIHsKQEAgLTI4MDgsNiArMjcwNywxNyBAQCBWYWx1ZUltcCAq
SGlzdG9yeUZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAK
K1BhdXNlZFRpbWVvdXRzOjp+UGF1c2VkVGltZW91dHMoKQoreworICAgIFBhdXNlZFRpbWVvdXQg
KmFycmF5ID0gbV9hcnJheTsKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisgICAg
c2l6ZV90IGNvdW50ID0gbV9sZW5ndGg7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gY291
bnQ7ICsraSkKKyAgICAgICAgZGVsZXRlIGFycmF5W2ldLmFjdGlvbjsKKyAgICBkZWxldGUgW10g
YXJyYXk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEtKUwogCiAjaW5jbHVkZSAia2pzX3dpbmRvdy5t
b2MiCkluZGV4OiBraHRtbC9lY21hL2tqc193aW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41NgpkaWZmIC1wIC11IC1yMS41NiBraHRtbC9lY21hL2tqc193aW5kb3cuaAotLS0g
a2h0bWwvZWNtYS9ranNfd2luZG93LmgJOSBOb3YgMjAwNSAwMjo0NjoyNyAtMDAwMAkxLjU2Cisr
KyBraHRtbC9lY21hL2tqc193aW5kb3cuaAk5IE5vdiAyMDA1IDE2OjA5OjI1IC0wMDAwCkBAIC00
MCwxNyArNDAsNTcgQEAgbmFtZXNwYWNlIERPTSB7CiAKIG5hbWVzcGFjZSBLSlMgewogCi0gIGNs
YXNzIFdpbmRvd0Z1bmM7Ci0gIGNsYXNzIFdpbmRvd1FPYmplY3Q7Ci0gIGNsYXNzIExvY2F0aW9u
OwotICBjbGFzcyBTZWxlY3Rpb247Ci0gIGNsYXNzIEJhckluZm87Ci0gIGNsYXNzIEhpc3Rvcnk7
Ci0gIGNsYXNzIEZyYW1lQXJyYXk7Ci0gIGNsYXNzIEpTRXZlbnRMaXN0ZW5lcjsKLSAgY2xhc3Mg
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI7Ci0gIGNsYXNzIEpTTGF6eUV2ZW50TGlzdGVuZXI7
Ci0gIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKKyAgICBjbGFzcyBCYXJJbmZvOworICAgIGNsYXNz
IEZyYW1lQXJyYXk7CisgICAgY2xhc3MgSGlzdG9yeTsKKyAgICBjbGFzcyBKU0V2ZW50TGlzdGVu
ZXI7CisgICAgY2xhc3MgSlNMYXp5RXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBMb2NhdGlvbjsKKyAgICBjbGFzcyBQYXVzZWRU
aW1lb3V0OworICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKKyAgICBjbGFzcyBTZWxlY3Rpb247
CisgICAgY2xhc3MgV2luZG93OworICAgIGNsYXNzIFdpbmRvd0Z1bmM7CisKKyAgICBjbGFzcyBQ
YXVzZWRUaW1lb3V0cyB7CisgICAgcHVibGljOgorICAgICAgICBQYXVzZWRUaW1lb3V0cyhQYXVz
ZWRUaW1lb3V0ICphLCBzaXplX3QgbGVuZ3RoKSA6IG1fYXJyYXkoYSksIG1fbGVuZ3RoKGxlbmd0
aCkgeyB9CisgICAgICAgIH5QYXVzZWRUaW1lb3V0cygpOworCisgICAgICAgIHNpemVfdCBudW1U
aW1lb3V0cygpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgICAgIFBhdXNlZFRpbWVv
dXQgKnRha2VUaW1lb3V0cygpCisgICAgICAgICAgICB7IFBhdXNlZFRpbWVvdXQgKmEgPSBtX2Fy
cmF5OyBtX2FycmF5ID0gMDsgcmV0dXJuIGE7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFBh
dXNlZFRpbWVvdXQgKm1fYXJyYXk7CisgICAgICAgIHNpemVfdCBtX2xlbmd0aDsKKworICAgICAg
ICBQYXVzZWRUaW1lb3V0cyhjb25zdCBQYXVzZWRUaW1lb3V0cyYpOworICAgICAgICBQYXVzZWRU
aW1lb3V0cyYgb3BlcmF0b3I9KGNvbnN0IFBhdXNlZFRpbWVvdXRzJik7CisgICAgfTsKKworICAg
IGNsYXNzIFdpbmRvd1FPYmplY3QgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgICAgIFFfT0JKRUNU
CisgICAgcHVibGljOgorICAgICAgICBXaW5kb3dRT2JqZWN0KFdpbmRvdyAqKTsKKyAgICAgICAg
fldpbmRvd1FPYmplY3QoKSB7IHBhcmVudERlc3Ryb3llZCgpOyB9CisKKyAgICAgICAgaW50IGlu
c3RhbGxUaW1lb3V0KGNvbnN0IFVTdHJpbmcgJmhhbmRsZXIsIGludCBpbnRlcnZhbCwgYm9vbCBz
aW5nbGVTaG90KTsKKyAgICAgICAgaW50IGluc3RhbGxUaW1lb3V0KFZhbHVlSW1wICpmdW5jdGlv
biwgY29uc3QgTGlzdCAmLCBpbnQgaW50ZXJ2YWwsIGJvb2wgc2luZ2xlU2hvdCk7CisgICAgICAg
IHZvaWQgY2xlYXJUaW1lb3V0KGludCB0aW1lcklkLCBib29sIGRlbEFjdGlvbiA9IHRydWUpOwor
CisgICAgICAgIFBhdXNlZFRpbWVvdXRzICpwYXVzZVRpbWVvdXRzKCk7CisgICAgICAgIHZvaWQg
cmVzdW1lVGltZW91dHMoUGF1c2VkVGltZW91dHMgKik7CisKKyAgICBwcml2YXRlIHNsb3RzOgor
ICAgICAgICB2b2lkIHBhcmVudERlc3Ryb3llZCgpOworICAgIHByaXZhdGU6CisgICAgICAgIHZp
cnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50ICopOworCisgICAgICAgIFdpbmRvdyAq
bV9wYXJlbnQ7CisgICAgICAgIFFNYXA8aW50LCBTY2hlZHVsZWRBY3Rpb24gKj4gbV90aW1lb3V0
czsKKyAgfTsKIAogICBjbGFzcyBTY3JlZW4gOiBwdWJsaWMgT2JqZWN0SW1wIHsKICAgcHVibGlj
OgpAQCAtOTgsMjEgKzEzOCwxOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgVmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAgICBpbnQgaW5zdGFsbFRpbWVv
dXQoY29uc3QgVVN0cmluZyAmaGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAg
aW50IGluc3RhbGxUaW1lb3V0KFZhbHVlSW1wICpmdW5jdGlvbiwgTGlzdCAmYXJncywgaW50IHQs
IGJvb2wgc2luZ2xlU2hvdCk7Ci0gICAgdm9pZCBjbGVhclRpbWVvdXQoaW50IHRpbWVySWQpOwot
I2lmZGVmIEFQUExFX0NIQU5HRVMKLSAgICBib29sIGhhc1RpbWVvdXRzKCk7Ci0gICAgUU1hcDxp
bnQsIFNjaGVkdWxlZEFjdGlvbio+ICpwYXVzZVRpbWVvdXRzKGNvbnN0IHZvaWQgKmtleSk7Ci0g
ICAgdm9pZCByZXN1bWVUaW1lb3V0cyhRTWFwPGludCwgU2NoZWR1bGVkQWN0aW9uKj4qc2EsIGNv
bnN0IHZvaWQgKmtleSk7CisKKyAgICBpbnQgaW5zdGFsbFRpbWVvdXQoY29uc3QgVVN0cmluZyAm
aGFuZGxlciwgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkgeyByZXR1cm4gd2lucS0+aW5zdGFsbFRp
bWVvdXQoaGFuZGxlciwgdCwgc2luZ2xlU2hvdCk7IH0KKyAgICBpbnQgaW5zdGFsbFRpbWVvdXQo
VmFsdWVJbXAgKmZ1bmN0aW9uLCBMaXN0ICZhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KSB7
IHJldHVybiB3aW5xLT5pbnN0YWxsVGltZW91dChmdW5jdGlvbiwgYXJncywgdCwgc2luZ2xlU2hv
dCk7IH0KKyAgICB2b2lkIGNsZWFyVGltZW91dChpbnQgdGltZXJJZCkgeyB3aW5xLT5jbGVhclRp
bWVvdXQodGltZXJJZCk7IH0KKyAgICBQYXVzZWRUaW1lb3V0cyAqcGF1c2VUaW1lb3V0cygpIHsg
cmV0dXJuIHdpbnEtPnBhdXNlVGltZW91dHMoKTsgfQorICAgIHZvaWQgcmVzdW1lVGltZW91dHMo
UGF1c2VkVGltZW91dHMgKnQpIHsgd2lucS0+cmVzdW1lVGltZW91dHModCk7IH0KICAgICAKICAg
ICBLSlM6OkludGVycHJldGVyICppbnRlcnByZXRlcigpIGNvbnN0OwogCi0gICAgc3RhdGljIGJv
b2wgaXNTYWZlU2NyaXB0IChjb25zdCBLSlM6OlNjcmlwdEludGVycHJldGVyICpvcmlnaW4sIGNv
bnN0IEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXIgKnRhcmdldCk7Ci0jZW5kaWYKICAgICB2b2lkIHNj
aGVkdWxlQ2xvc2UoKTsKICAgICAgICAgCiAgICAgYm9vbCBpc1NhZmVTY3JpcHQoRXhlY1N0YXRl
ICpleGVjKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBpc1NhZmVTY3JpcHQoY29uc3QgU2NyaXB0
SW50ZXJwcmV0ZXIgKm9yaWdpbiwgY29uc3QgU2NyaXB0SW50ZXJwcmV0ZXIgKnRhcmdldCk7CiAg
ICAgTG9jYXRpb24gKmxvY2F0aW9uKCkgY29uc3Q7CiAgICAgU2VsZWN0aW9uICpzZWxlY3Rpb24o
KSBjb25zdDsKICAgICBCYXJJbmZvICpsb2NhdGlvbmJhcihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwpAQCAtMTg2LDQ0ICsyMjQsMjEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAqIHRpbWUgaW50ZXJ2
YWwsIGVpdGhlciBvbmNlIG9yIHJlcGVhdGVkbHkuIFVzZWQgZm9yIHdpbmRvdy5zZXRUaW1lb3V0
KCkKICAgICogYW5kIHdpbmRvdy5zZXRJbnRlcnZhbCgpCiAgICAqLwotICBjbGFzcyBTY2hlZHVs
ZWRBY3Rpb24gewotICBwdWJsaWM6Ci0gICAgU2NoZWR1bGVkQWN0aW9uKE9iamVjdEltcCAqX2Z1
bmMsIExpc3QgX2FyZ3MsIGJvb2wgX3NpbmdsZVNob3QpOwotICAgIFNjaGVkdWxlZEFjdGlvbihj
b25zdCBRU3RyaW5nICZfY29kZSwgYm9vbCBfc2luZ2xlU2hvdCk7Ci0gICAgdm9pZCBleGVjdXRl
KFdpbmRvdyAqd2luZG93KTsKLQotICAgIFByb3RlY3RlZFB0cjxPYmplY3RJbXA+IGZ1bmM7Ci0g
ICAgTGlzdCBhcmdzOwotICAgIFFTdHJpbmcgY29kZTsKLSAgICBib29sIGlzRnVuY3Rpb247Ci0g
ICAgYm9vbCBzaW5nbGVTaG90OwotICB9OwotCi0gIGNsYXNzIFdpbmRvd1FPYmplY3QgOiBwdWJs
aWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLSAgcHVibGljOgotICAgIFdpbmRvd1FPYmplY3Qo
V2luZG93ICp3KTsKLSAgICB+V2luZG93UU9iamVjdCgpOwotICAgIGludCBpbnN0YWxsVGltZW91
dChjb25zdCBVU3RyaW5nICZoYW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKLSAgICBp
bnQgaW5zdGFsbFRpbWVvdXQoVmFsdWVJbXAgKmZ1bmMsIExpc3QgYXJncywgaW50IHQsIGJvb2wg
c2luZ2xlU2hvdCk7Ci0gICAgdm9pZCBjbGVhclRpbWVvdXQoaW50IHRpbWVySWQsIGJvb2wgZGVs
QWN0aW9uID0gdHJ1ZSk7Ci0jaWZkZWYgQVBQTEVfQ0hBTkdFUwotICAgIGJvb2wgaGFzVGltZW91
dHMoKTsKLSAgICBRTWFwPGludCwgU2NoZWR1bGVkQWN0aW9uKj4gKldpbmRvd1FPYmplY3Q6OnBh
dXNlVGltZW91dHMoY29uc3Qgdm9pZCAqa2V5KTsKLSAgICB2b2lkIFdpbmRvd1FPYmplY3Q6OnJl
c3VtZVRpbWVvdXRzKFFNYXA8aW50LCBTY2hlZHVsZWRBY3Rpb24qPiAqc2EsIGNvbnN0IHZvaWQg
KmtleSk7Ci0jZW5kaWYKLQotICBwdWJsaWMgc2xvdHM6Ci0gICAgdm9pZCB0aW1lb3V0Q2xvc2Uo
KTsKLSAgcHJvdGVjdGVkIHNsb3RzOgotICAgIHZvaWQgcGFyZW50RGVzdHJveWVkKCk7Ci0gIHBy
b3RlY3RlZDoKLSAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQgKmUpOwotICBwcml2YXRl
OgotICAgIFdpbmRvdyAqcGFyZW50OwotICAgIEtIVE1MUGFydCAqcGFydDsgICAJCS8vIG5vdCBn
dWFyZGVkLCBtYXkgYmUgZGFuZ2xpbmcKLSAgICBRTWFwPGludCwgU2NoZWR1bGVkQWN0aW9uKj4g
c2NoZWR1bGVkQWN0aW9uczsKLSAgfTsKKyAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgU2NoZWR1bGVkQWN0aW9uKFZhbHVlSW1wICpmdW5jLCBjb25zdCBM
aXN0JiBhcmdzLCBib29sIHNpbmdsZVNob3QpCisgICAgICAgICAgICA6IG1fZnVuYyhmdW5jKSwg
bV9hcmdzKGFyZ3MpLCBtX3NpbmdsZVNob3Qoc2luZ2xlU2hvdCkgeyB9CisgICAgICAgIFNjaGVk
dWxlZEFjdGlvbihjb25zdCBRU3RyaW5nJiBjb2RlLCBib29sIHNpbmdsZVNob3QpCisgICAgICAg
ICAgICA6IG1fY29kZShjb2RlKSwgbV9zaW5nbGVTaG90KHNpbmdsZVNob3QpIHsgfQorICAgICAg
ICB2b2lkIGV4ZWN1dGUoV2luZG93ICopOworICAgICAgICBib29sIHNpbmdsZVNob3QoKSBjb25z
dCB7IHJldHVybiBtX3NpbmdsZVNob3Q7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFByb3Rl
Y3RlZFB0cjxWYWx1ZUltcD4gbV9mdW5jOworICAgICAgICBMaXN0IG1fYXJnczsKKyAgICAgICAg
UVN0cmluZyBtX2NvZGU7CisgICAgICAgIGJvb2wgbV9zaW5nbGVTaG90OworICAgIH07CiAKICAg
Y2xhc3MgTG9jYXRpb24gOiBwdWJsaWMgT2JqZWN0SW1wIHsKICAgcHVibGljOgpJbmRleDoga3dx
L0tXUUtIVE1MUGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3
cS9LV1FLSFRNTFBhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzIKZGlmZiAtcCAtdSAt
cjEuMjMyIGt3cS9LV1FLSFRNTFBhcnQuaAotLS0ga3dxL0tXUUtIVE1MUGFydC5oCTkgTm92IDIw
MDUgMDI6NDY6MjggLTAwMDAJMS4yMzIKKysrIGt3cS9LV1FLSFRNTFBhcnQuaAk5IE5vdiAyMDA1
IDE2OjA5OjI2IC0wMDAwCkBAIC02MSw2ICs2MSw3IEBAIG5hbWVzcGFjZSBraHRtbCB7CiB9CiAK
IG5hbWVzcGFjZSBLSlMgeworICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwogICAgIGNsYXNzIFNh
dmVkUHJvcGVydGllczsKICAgICBjbGFzcyBTYXZlZEJ1aWx0aW5zOwogICAgIGNsYXNzIFNjaGVk
dWxlZEFjdGlvbjsKQEAgLTE2MCw4ICsxNjEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVuZm9j
dXNXaW5kb3coKTsKIAotICAgIFFNYXA8aW50LCBLSlM6OlNjaGVkdWxlZEFjdGlvbio+ICpwYXVz
ZUFjdGlvbnMoY29uc3Qgdm9pZCAqa2V5KTsKLSAgICB2b2lkIHJlc3VtZUFjdGlvbnMoUU1hcDxp
bnQsIEtKUzo6U2NoZWR1bGVkQWN0aW9uKj4gKmFjdGlvbnMsIGNvbnN0IHZvaWQgKmtleSk7Cisg
ICAgS0pTOjpQYXVzZWRUaW1lb3V0cyAqcGF1c2VUaW1lb3V0cygpOworICAgIHZvaWQgcmVzdW1l
VGltZW91dHMoS0pTOjpQYXVzZWRUaW1lb3V0cyAqKTsKICAgICAKICAgICBib29sIGNhbkNhY2hl
UGFnZSgpOwogICAgIHZvaWQgc2F2ZVdpbmRvd1Byb3BlcnRpZXMoS0pTOjpTYXZlZFByb3BlcnRp
ZXMgKndpbmRvd1Byb3BlcnRpZXMpOwpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjY4NgpkaWZmIC1wIC11IC1yMS42ODYga3dxL0tXUUtIVE1MUGFy
dC5tbQotLS0ga3dxL0tXUUtIVE1MUGFydC5tbQk5IE5vdiAyMDA1IDAyOjQ2OjI4IC0wMDAwCTEu
Njg2CisrKyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTkgTm92IDIwMDUgMTY6MDk6MjkgLTAwMDAKQEAg
LTg4LDg3ICs4OCwxOCBAQAogCiAjdW5kZWYgX0tXUV9USU1JTkcKIAotdXNpbmcgbmFtZXNwYWNl
IERPTTo6RXZlbnROYW1lczsKLXVzaW5nIG5hbWVzcGFjZSBET006OkhUTUxOYW1lczsKK3VzaW5n
IG5hbWVzcGFjZSBET007Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLXVzaW5nIERPTTo6QXRvbWljU3RyaW5nOwotdXNpbmcgRE9NOjpD
bGlwYm9hcmRFdmVudEltcGw7Ci11c2luZyBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOwotdXNp
bmcgRE9NOjpEb2N1bWVudEltcGw7Ci11c2luZyBET006OkRvY3VtZW50TWFya2VyOwotdXNpbmcg
RE9NOjpET01TdHJpbmc7Ci11c2luZyBET006OkVsZW1lbnRJbXBsOwotdXNpbmcgRE9NOjpFdmVu
dEltcGw7Ci11c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7Ci11c2luZyBET006OkhUTUxFbGVt
ZW50SW1wbDsKLXVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKLXVzaW5nIERPTTo6SFRN
TEZyYW1lRWxlbWVudEltcGw7Ci11c2luZyBET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
OwotdXNpbmcgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGw7Ci11c2luZyBET006Ok5vZGU7
Ci11c2luZyBET006Ok5vZGVJbXBsOwotdXNpbmcgRE9NOjpQb3NpdGlvbjsKLXVzaW5nIERPTTo6
UmFuZ2U7Ci11c2luZyBET006OlJhbmdlSW1wbDsKLXVzaW5nIERPTTo6VGV4dEltcGw7Ci0KLXVz
aW5nIGtodG1sOjpDYWNoZTsKLXVzaW5nIGtodG1sOjpDaGFyYWN0ZXJJdGVyYXRvcjsKLXVzaW5n
IGtodG1sOjpDaGlsZEZyYW1lOwotdXNpbmcga2h0bWw6OkRlY29kZXI7Ci11c2luZyBraHRtbDo6
RGFzaGJvYXJkUmVnaW9uVmFsdWU7Ci11c2luZyBraHRtbDo6RWRpdENvbW1hbmRQdHI7Ci11c2lu
ZyBraHRtbDo6ZW5kT2ZXb3JkOwotdXNpbmcga2h0bWw6OmZpbmRQbGFpblRleHQ7Ci11c2luZyBr
aHRtbDo6Rm9jdXNTdGF0ZTsKLXVzaW5nIGtodG1sOjpJbmxpbmVUZXh0Qm94OwotdXNpbmcga2h0
bWw6OkxlZnRXb3JkSWZPbkJvdW5kYXJ5OwotdXNpbmcga2h0bWw6Ok1vdXNlRG91YmxlQ2xpY2tF
dmVudDsKLXVzaW5nIGtodG1sOjpNb3VzZU1vdmVFdmVudDsKLXVzaW5nIGtodG1sOjpNb3VzZVBy
ZXNzRXZlbnQ7Ci11c2luZyBraHRtbDo6TW91c2VSZWxlYXNlRXZlbnQ7Ci11c2luZyBraHRtbDo6
cGFyc2VVUkw7Ci11c2luZyBraHRtbDo6UFJFOwotdXNpbmcga2h0bWw6OlJlbmRlckNhbnZhczsK
LXVzaW5nIGtodG1sOjpSZW5kZXJJbWFnZTsKLXVzaW5nIGtodG1sOjpSZW5kZXJMYXllcjsKLXVz
aW5nIGtodG1sOjpSZW5kZXJMaXN0SXRlbTsKLXVzaW5nIGtodG1sOjpSZW5kZXJPYmplY3Q7Ci11
c2luZyBraHRtbDo6UmVuZGVyU3R5bGU7Ci11c2luZyBraHRtbDo6UmVuZGVyVGFibGVDZWxsOwot
dXNpbmcga2h0bWw6OlJlbmRlclRleHQ7Ci11c2luZyBraHRtbDo6dGhlbWU7Ci11c2luZyBraHRt
bDo6UmVuZGVyV2lkZ2V0OwotdXNpbmcga2h0bWw6OlJpZ2h0V29yZElmT25Cb3VuZGFyeTsKLXVz
aW5nIGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOwotdXNpbmcga2h0bWw6OlNFTEVDVF9JR05P
UkU7Ci11c2luZyBraHRtbDo6c2V0RW5kOwotdXNpbmcga2h0bWw6OnNldFN0YXJ0OwotdXNpbmcg
a2h0bWw6OlNoYWRvd0RhdGE7Ci11c2luZyBraHRtbDo6c3RhcnRPZldvcmQ7Ci11c2luZyBraHRt
bDo6c3RhcnRWaXNpYmxlUG9zaXRpb247Ci11c2luZyBraHRtbDo6U3R5bGVEYXNoYm9hcmRSZWdp
b247Ci11c2luZyBraHRtbDo6VGV4dEl0ZXJhdG9yOwotdXNpbmcga2h0bWw6OkRPV05TVFJFQU07
Ci11c2luZyBraHRtbDo6VlBfVVBTVFJFQU1fSUZfUE9TU0lCTEU7Ci11c2luZyBraHRtbDo6VklT
SUJMRTsKLXVzaW5nIGtodG1sOjpWaXNpYmxlUG9zaXRpb247Ci11c2luZyBraHRtbDo6V29yZEF3
YXJlSXRlcmF0b3I7Ci0KLXVzaW5nIEtJTzo6Sm9iOwotCi11c2luZyBLSlM6OkludGVycHJldGVy
OwotdXNpbmcgS0pTOjpJbnRlcnByZXRlckxvY2s7Ci11c2luZyBLSlM6OkxvY2F0aW9uOwotdXNp
bmcgS0pTOjpTYXZlZEJ1aWx0aW5zOwotdXNpbmcgS0pTOjpTYXZlZFByb3BlcnRpZXM7Ci11c2lu
ZyBLSlM6OlNjaGVkdWxlZEFjdGlvbjsKLXVzaW5nIEtKUzo6V2luZG93OwordXNpbmcgbmFtZXNw
YWNlIEtKUzsKK3VzaW5nIG5hbWVzcGFjZSBCaW5kaW5nczsKIAotdXNpbmcgS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2U7Cit1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKLXVzaW5nIEtQYXJ0czo6UmVh
ZE9ubHlQYXJ0OwotdXNpbmcgS1BhcnRzOjpVUkxBcmdzOwordXNpbmcgbmFtZXNwYWNlIEtJTzsK
KwordXNpbmcgbmFtZXNwYWNlIEtQYXJ0czsKIAogTlNFdmVudCAqS1dRS0hUTUxQYXJ0OjpfY3Vy
cmVudEV2ZW50ID0gbmlsOwogCkBAIC0xMTQ3LDExICsxMDc4LDEzIEBAIHZvaWQgS1dRS0hUTUxQ
YXJ0OjpyZWRpcmVjdGlvblRpbWVyU3RhcnQKICAgICAKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UzsKICAgICBpZiAoZC0+bV9yZWRpcmVjdGlvblRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
TlNEYXRlICpmaXJlRGF0ZSA9IFtbTlNEYXRlIGFsbG9jXSBpbml0V2l0aFRpbWVJbnRlcnZhbFNp
bmNlUmVmZXJlbmNlRGF0ZTpkLT5tX3JlZGlyZWN0aW9uVGltZXIuZmlyZURhdGUoKV07CiAgICAg
ICAgIFtfYnJpZGdlIHJlcG9ydENsaWVudFJlZGlyZWN0VG9VUkw6S1VSTChkLT5tX3JlZGlyZWN0
VVJMKS5nZXROU1VSTCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
YXk6ZC0+bV9kZWxheVJlZGlyZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlyZURhdGU6W2QtPm1fcmVkaXJlY3Rpb25UaW1lci5nZXROU1RpbWVyKCkgZmlyZURhdGVdCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyZURhdGU6ZmlyZURhdGUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrSGlzdG9yeTpkLT5tX3JlZGlyZWN0TG9ja0hp
c3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0phdmFTY3JpcHRGb3JtQWN0
aW9uOmQtPm1fZXhlY3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb25dOworICAgICAgICBbZmlyZURh
dGUgcmVsZWFzZV07CiAgICAgfSBlbHNlIHsKICAgICAgICAgW19icmlkZ2UgcmVwb3J0Q2xpZW50
UmVkaXJlY3RDYW5jZWxsZWQ6ZC0+bV9jYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3NdOwogICAgIH0K
QEAgLTE0NzIsMjQgKzE0MDUsMjIgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnBhcnRDbGVhcmVkSW5C
ZWdpbigpCiAgICAgW19icmlkZ2Ugd2luZG93T2JqZWN0Q2xlYXJlZF07CiB9CiAKLVFNYXA8aW50
LCBTY2hlZHVsZWRBY3Rpb24qPiAqS1dRS0hUTUxQYXJ0OjpwYXVzZUFjdGlvbnMoY29uc3Qgdm9p
ZCAqa2V5KQorUGF1c2VkVGltZW91dHMgKktXUUtIVE1MUGFydDo6cGF1c2VUaW1lb3V0cygpCiB7
CiAgICAgaWYgKGQtPm1fZG9jICYmIGQtPm1fanNjcmlwdCkgewogICAgICAgICBXaW5kb3cgKncg
PSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHRoaXMpOwotICAgICAgICBpZiAodyAmJiB3LT5oYXNU
aW1lb3V0cygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdy0+cGF1c2VUaW1lb3V0cyhrZXkpOwot
ICAgICAgICB9CisgICAgICAgIGlmICh3KQorICAgICAgICAgICAgcmV0dXJuIHctPnBhdXNlVGlt
ZW91dHMoKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0Ojpy
ZXN1bWVBY3Rpb25zKFFNYXA8aW50LCBTY2hlZHVsZWRBY3Rpb24qPiAqYWN0aW9ucywgY29uc3Qg
dm9pZCAqa2V5KQordm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3VtZVRpbWVvdXRzKFBhdXNlZFRpbWVv
dXRzICp0KQogewogICAgIGlmIChkLT5tX2RvYyAmJiBkLT5tX2pzY3JpcHQgJiYgZC0+bV9iSlNj
cmlwdEVuYWJsZWQpIHsKICAgICAgICAgV2luZG93ICp3ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRv
dyh0aGlzKTsKLSAgICAgICAgaWYgKHcpIHsKLSAgICAgICAgICAgIHctPnJlc3VtZVRpbWVvdXRz
KGFjdGlvbnMsIGtleSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHcpCisgICAgICAgICAgICB3
LT5yZXN1bWVUaW1lb3V0cyh0KTsKICAgICB9CiB9CiAKQEAgLTE1NzIsMTQgKzE1MDMsMTMgQEAg
dm9pZCBLV1FLSFRNTFBhcnQ6Om9wZW5VUkxGcm9tUGFnZUNhY2hlKAogICAgIFNhdmVkUHJvcGVy
dGllcyAqd2luZG93UHJvcGVydGllcyA9IFtzdGF0ZSB3aW5kb3dQcm9wZXJ0aWVzXTsKICAgICBT
YXZlZFByb3BlcnRpZXMgKmxvY2F0aW9uUHJvcGVydGllcyA9IFtzdGF0ZSBsb2NhdGlvblByb3Bl
cnRpZXNdOwogICAgIFNhdmVkQnVpbHRpbnMgKmludGVycHJldGVyQnVpbHRpbnMgPSBbc3RhdGUg
aW50ZXJwcmV0ZXJCdWlsdGluc107Ci0gICAgUU1hcDxpbnQsIFNjaGVkdWxlZEFjdGlvbio+ICph
Y3Rpb25zID0gW3N0YXRlIHBhdXNlZEFjdGlvbnNdOworICAgIFBhdXNlZFRpbWVvdXRzICp0aW1l
b3V0cyA9IFtzdGF0ZSBwYXVzZWRUaW1lb3V0c107CiAgICAgCiAgICAgY2FuY2VsUmVkaXJlY3Rp
b24oKTsKIAogICAgIC8vIFdlIHN0aWxsIGhhdmUgdG8gY2xvc2UgdGhlIHByZXZpb3VzIHBhcnQg
cGFnZS4KLSAgICBpZiAoIWQtPm1fcmVzdG9yZWQpeworICAgIGlmICghZC0+bV9yZXN0b3JlZCkK
ICAgICAgICAgY2xvc2VVUkwoKTsKLSAgICB9CiAgICAgICAgICAgICAKICAgICBkLT5tX2JDb21w
bGV0ZSA9IGZhbHNlOwogICAgIApAQCAtMTU4NywxMyArMTUxNywxMiBAQCB2b2lkIEtXUUtIVE1M
UGFydDo6b3BlblVSTEZyb21QYWdlQ2FjaGUoCiAgICAgZC0+bV9iTG9hZEV2ZW50RW1pdHRlZCA9
IHRydWU7CiAgICAgCiAgICAgLy8gZGVsZXRlIG9sZCBzdGF0dXMgYmFyIG1zZydzIGZyb20ga2pz
IChpZiBpdCBfd2FzXyBhY3RpdmF0ZWQgb24gbGFzdCBVUkwpCi0gICAgaWYoIGQtPm1fYkpTY3Jp
cHRFbmFibGVkICkKLSAgICB7CisgICAgaWYgKGQtPm1fYkpTY3JpcHRFbmFibGVkKSB7CiAgICAg
ICAgIGQtPm1fa2pzU3RhdHVzQmFyVGV4dCA9IFFTdHJpbmc6Om51bGw7CiAgICAgICAgIGQtPm1f
a2pzRGVmYXVsdFN0YXR1c0JhclRleHQgPSBRU3RyaW5nOjpudWxsOwogICAgIH0KIAotICAgIEFT
U0VSVCAodXJsKTsKKyAgICBBU1NFUlQodXJsKTsKICAgICAKICAgICBtX3VybCA9ICp1cmw7CiAg
ICAgCkBAIC0xNjI3LDI3ICsxNTU2LDI0IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpvcGVuVVJMRnJv
bVBhZ2VDYWNoZSgKICAgICBkLT5tX21vdXNlUHJlc3NOb2RlLnJlc2V0KG1vdXNlUHJlc3NOb2Rl
KTsKICAgICAKICAgICBEZWNvZGVyICpkZWNvZGVyID0gZG9jLT5kZWNvZGVyKCk7Ci0gICAgaWYg
KGRlY29kZXIpIHsKKyAgICBpZiAoZGVjb2RlcikKICAgICAgICAgZGVjb2Rlci0+cmVmKCk7Ci0g
ICAgfQotICAgIGlmIChkLT5tX2RlY29kZXIpIHsKKyAgICBpZiAoZC0+bV9kZWNvZGVyKQogICAg
ICAgICBkLT5tX2RlY29kZXItPmRlcmVmKCk7Ci0gICAgfQogICAgIGQtPm1fZGVjb2RlciA9IGRl
Y29kZXI7CiAKLSAgICBkb2MtPnNldFBhcnNlTW9kZSAoW3N0YXRlIHBhcnNlTW9kZV0pOworICAg
IGRvYy0+c2V0UGFyc2VNb2RlKFtzdGF0ZSBwYXJzZU1vZGVdKTsKICAgICAKICAgICB1cGRhdGVQ
b2xpY3lCYXNlVVJMKCk7CiAKICAgICB7IC8vIHNjb3BlIHRoZSBsb2NrCiAgICAgICAgIEludGVy
cHJldGVyTG9jayBsb2NrOwotICAgICAgICByZXN0b3JlV2luZG93UHJvcGVydGllcyAod2luZG93
UHJvcGVydGllcyk7Ci0gICAgICAgIHJlc3RvcmVMb2NhdGlvblByb3BlcnRpZXMgKGxvY2F0aW9u
UHJvcGVydGllcyk7Ci0gICAgICAgIHJlc3RvcmVJbnRlcnByZXRlckJ1aWx0aW5zICgqaW50ZXJw
cmV0ZXJCdWlsdGlucyk7CisgICAgICAgIHJlc3RvcmVXaW5kb3dQcm9wZXJ0aWVzKHdpbmRvd1By
b3BlcnRpZXMpOworICAgICAgICByZXN0b3JlTG9jYXRpb25Qcm9wZXJ0aWVzKGxvY2F0aW9uUHJv
cGVydGllcyk7CisgICAgICAgIHJlc3RvcmVJbnRlcnByZXRlckJ1aWx0aW5zKCppbnRlcnByZXRl
ckJ1aWx0aW5zKTsKICAgICB9CiAKLSAgICBpZiAoYWN0aW9ucykKLSAgICAgICAgcmVzdW1lQWN0
aW9ucyAoYWN0aW9ucywgc3RhdGUpOworICAgIHJlc3VtZVRpbWVvdXRzKHRpbWVvdXRzKTsKICAg
ICAKICAgICBjaGVja0NvbXBsZXRlZCgpOwogfQpAQCAtNDIzMiw3ICs0MTU4LDcgQEAgdm9pZCBL
V1FLSFRNTFBhcnQ6OnNldE1hcmtlZFRleHRSYW5nZShjbwogICAgIGludCBleGNlcHRpb24gPSAw
OwogCiAgICAgQVNTRVJUKCFyYW5nZSB8fCByYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9u
KSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghcmFuZ2Ug
fHwgcmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pIHx8IHJhbmdlLT5zdGFydENvbnRhaW5lcihl
eGNlcHRpb24pLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSk7CisgICAgQVNTRVJUKCFy
YW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgfHwgcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKGV4Y2VwdGlvbiktPm5vZGVUeXBlKCkgPT0gRE9NOjpOb2RlOjpURVhUX05PREUpOwogCiAg
ICAgaWYgKGF0dHJpYnV0ZXMgPT0gbmlsKSB7CiAgICAgICAgIG1fbWFya2VkVGV4dFVzZXNVbmRl
cmxpbmVzID0gZmFsc2U7CkluZGV4OiBrd3EvS1dRT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUU9iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjM4CmRpZmYgLXAgLXUgLXIxLjM4IGt3cS9LV1FPYmplY3QuaAotLS0ga3dxL0tXUU9iamVj
dC5oCTkgTm92IDIwMDUgMDI6NDY6MjkgLTAwMDAJMS4zOAorKysga3dxL0tXUU9iamVjdC5oCTkg
Tm92IDIwMDUgMTY6MDk6MjkgLTAwMDAKQEAgLTI2LDE0ICsyNiwxMCBAQAogI2lmbmRlZiBRT0JK
RUNUX0hfCiAjZGVmaW5lIFFPQkpFQ1RfSF8KIAotI2luY2x1ZGUgIktXUURlZi5oIgotI2luY2x1
ZGUgIktXUVNpZ25hbC5oIgotCi0jaW5jbHVkZSAiS1dRTmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAi
S1dRU3RyaW5nLmgiCiAjaW5jbHVkZSAiS1dRRXZlbnQuaCIKLSNpbmNsdWRlICJLV1FTdHJpbmdM
aXN0LmgiCiAjaW5jbHVkZSAiS1dRUHRyTGlzdC5oIgorI2luY2x1ZGUgIktXUVNpZ25hbC5oIgor
I2luY2x1ZGUgIktXUVN0cmluZ0xpc3QuaCIKIAogI2RlZmluZSBzbG90cyA6IHB1YmxpYwogI2Rl
ZmluZSBTTE9UKHgpICJTTE9UOiIgI3gKQEAgLTQzLDM2ICszOSwzMCBAQAogI2RlZmluZSBRX09C
SkVDVAogI2RlZmluZSBRX1BST1BFUlRZKHRleHQpCiAKK2NsYXNzIFFCaXRtYXA7CitjbGFzcyBR
QnJ1c2g7CitjbGFzcyBRQ29sb3I7CitjbGFzcyBRQ29sb3JHcm91cDsKIGNsYXNzIFFFdmVudDsK
K2NsYXNzIFFGb250OworY2xhc3MgUUZvbnRNZXRyaWNzOworY2xhc3MgUUltYWdlOworY2xhc3Mg
UU1vdmllOwogY2xhc3MgUVBhaW50RGV2aWNlOwogY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsK
LWNsYXNzIFFXaWRnZXQ7Ci1jbGFzcyBRQ29sb3I7Ci1jbGFzcyBRQ29sb3JHcm91cDsKLWNsYXNz
IFFQYWxldHRlOwogY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRUGFsZXR0ZTsKK2NsYXNzIFFSZWN0
OwogY2xhc3MgUVJlZ2lvbjsKIGNsYXNzIFFTaXplOwogY2xhc3MgUVNpemVQb2xpY3k7Ci1jbGFz
cyBRUmVjdDsKLWNsYXNzIFFGb250OwotY2xhc3MgUUZvbnRNZXRyaWNzOwotY2xhc3MgUUJydXNo
OwotY2xhc3MgUUJpdG1hcDsKLWNsYXNzIFFNb3ZpZTsKIGNsYXNzIFFUaW1lcjsKLWNsYXNzIFFJ
bWFnZTsKIGNsYXNzIFFWYXJpYW50OworY2xhc3MgUVdpZGdldDsKIAogY2xhc3MgS1dRR3VhcmRl
ZFB0ckJhc2U7CiBjbGFzcyBLV1FTaWduYWw7CiAKLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIE5T
VGltZXI7Ci0jZWxzZQotY2xhc3MgTlNUaW1lcjsKLSNlbmRpZgotCiBjbGFzcyBRT2JqZWN0IDog
cHVibGljIFF0IHsKIHB1YmxpYzoKICAgICBRT2JqZWN0KFFPYmplY3QgKnBhcmVudCA9IDAsIGNv
bnN0IGNoYXIgKm5hbWUgPSAwKTsKQEAgLTg1LDEyICs3NSwxMSBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGluaGVyaXRzKGNvbnN0IGNoYXIgKmNsYXNzTmFtZSkgY29uc3Q7CiAKLSAgICBpbnQgc3Rh
cnRUaW1lcihpbnQpOwotICAgIHZvaWQga2lsbFRpbWVyKGludCk7CisgICAgaW50IHN0YXJ0VGlt
ZXIoaW50IGludGVydmFsKTsKKyAgICB2b2lkIGtpbGxUaW1lcihpbnQgdGltZXJJZCk7CiAgICAg
dm9pZCBraWxsVGltZXJzKCk7Ci0gICAgdm9pZCBwYXVzZVRpbWVyKGludCBfdGltZXJJZCwgY29u
c3Qgdm9pZCAqa2V5KTsKLSAgICB2b2lkIHJlc3VtZVRpbWVycyhjb25zdCB2b2lkICprZXksIFFP
YmplY3QgKnRhcmdldCk7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJQYXVzZWRUaW1lcnMgKGNvbnN0
IHZvaWQgKmtleSk7CisgICAgdm9pZCB0aW1lckludGVydmFscyhpbnQgdGltZXJJZCwgaW50JiBu
ZXh0RmlyZUludGVydmFsLCBpbnQmIHJlcGVhdEludGVydmFsKSBjb25zdDsKKyAgICB2b2lkIHJl
c3RhcnRUaW1lcihpbnQgdGltZXJJZCwgaW50IG5leHRGaXJlSW50ZXJ2YWwsIGludCByZXBlYXRJ
bnRlcnZhbCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQg
Kik7CiAKQEAgLTExNyw4ICsxMDYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzUVNj
cm9sbFZpZXcoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIF9hZGRUaW1lcihOU1RpbWVy
ICp0aW1lciwgaW50IF90aW1lcklkKTsKLQogICAgIC8vIG5vIGNvcHlpbmcgb3IgYXNzaWdubWVu
dAogICAgIFFPYmplY3QoY29uc3QgUU9iamVjdCAmKTsKICAgICBRT2JqZWN0ICZvcGVyYXRvcj0o
Y29uc3QgUU9iamVjdCAmKTsKQEAgLTE0NSwxMSArMTMyLDExIEBAIHByaXZhdGU6CiBjbGFzcyBL
V1FPYmplY3RTZW5kZXJTY29wZQogewogcHVibGljOgotICAgIEtXUU9iamVjdFNlbmRlclNjb3Bl
KGNvbnN0IFFPYmplY3QgKik7Ci0gICAgfktXUU9iamVjdFNlbmRlclNjb3BlKCk7CisgICAgS1dR
T2JqZWN0U2VuZGVyU2NvcGUoY29uc3QgUU9iamVjdCAqbykgOiBtX3NhdmVkU2VuZGVyKFFPYmpl
Y3Q6Ol9zZW5kZXIpIHsgUU9iamVjdDo6X3NlbmRlciA9IG87IH0KKyAgICB+S1dRT2JqZWN0U2Vu
ZGVyU2NvcGUoKSB7IFFPYmplY3Q6Ol9zZW5kZXIgPSBtX3NhdmVkU2VuZGVyOyB9CiAKIHByaXZh
dGU6Ci0gICAgY29uc3QgUU9iamVjdCAqX3NhdmVkU2VuZGVyOworICAgIGNvbnN0IFFPYmplY3Qg
Km1fc2F2ZWRTZW5kZXI7CiB9OwogCiAjZW5kaWYKSW5kZXg6IGt3cS9LV1FPYmplY3QubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUU9iamVjdC5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS41MQpkaWZmIC1wIC11IC1yMS41MSBrd3EvS1dRT2JqZWN0Lm1t
Ci0tLSBrd3EvS1dRT2JqZWN0Lm1tCTkgTm92IDIwMDUgMDI6NDY6MjkgLTAwMDAJMS41MQorKysg
a3dxL0tXUU9iamVjdC5tbQk5IE5vdiAyMDA1IDE2OjA5OjMwIC0wMDAwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsNTAgKzI2LDUzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW1wb3J0ICJL
V1FPYmplY3QuaCIKIAotI2ltcG9ydCAiS1dRVmFyaWFudC5oIgogI2ltcG9ydCA8a3htbGNvcmUv
QXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8a3htbGNvcmUvRmFzdE1hbGxvYy5oPgogCi0vLyBUaGUg
Rm91bmRhdGlvbi1sZXZlbCBDb2NvYSBjYWxscyBoZXJlIChOU1RpbWVyLCBOU0RhdGUsIE5TQXJy
YXksCi0vLyBOU0RpY3Rpb25hcnkpIHNob3VsZCBiZSBleGNlcHRpb24tZnJlZSwgc28gbm8gbmVl
ZCB0byBibG9jawotLy8gZXhjZXB0aW9ucy4KK3N0cnVjdCBLV1FPYmplY3RUaW1lciB7CisgICAg
UU9iamVjdCAqdGFyZ2V0OworICAgIGludCB0aW1lcklkOworICAgIENGUnVuTG9vcFRpbWVyUmVm
IHJ1bkxvb3BUaW1lcjsgLy8gbm9uLTAgZm9yIHJ1bm5pbmcgdGltZXJzCisgICAgYm9vbCBkZWZl
cnJlZDsgLy8gdHJ1ZSBpZiB0aW1lciBpcyBpbiB0aGUgZGVmZXJyZWRUaW1lcnMgYXJyYXkKKyAg
ICBib29sIGRlbGV0ZWQ7Cit9OwogCiBjb25zdCBRT2JqZWN0ICpRT2JqZWN0Ojpfc2VuZGVyOwog
Ym9vbCBRT2JqZWN0OjpfZGVmZXJzVGltZXJzOwogCiBzdGF0aWMgQ0ZNdXRhYmxlRGljdGlvbmFy
eVJlZiB0aW1lckRpY3Rpb25hcmllczsKLXN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGFs
bFBhdXNlZFRpbWVyczsKLXN0YXRpYyBOU011dGFibGVBcnJheSAqZGVmZXJyZWRUaW1lcnM7Ci1z
dGF0aWMgYm9vbCBkZWZlcnJpbmdUaW1lcnM7CitzdGF0aWMgQ0ZNdXRhYmxlQXJyYXlSZWYgZGVm
ZXJyZWRUaW1lcnM7CitzdGF0aWMgQ0ZSdW5Mb29wVGltZXJSZWYgc2VuZERlZmVycmVkVGltZXJF
dmVudHNUaW1lcjsKK3N0YXRpYyBpbnQgbGFzdFRpbWVySWRVc2VkOwogCi1AaW50ZXJmYWNlIEtX
UU9iamVjdFRpbWVyVGFyZ2V0IDogTlNPYmplY3QKK1FPYmplY3Q6OlFPYmplY3QoUU9iamVjdCAq
cGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQorICAgIDogX3NpZ25hbExpc3RIZWFkKDApLCBfc2ln
bmFsc0Jsb2NrZWQoZmFsc2UpCisgICAgLCBfZGVzdHJveWVkKHRoaXMsIFNJR05BTChkZXN0cm95
ZWQoKSkpCisgICAgLCBfZXZlbnRGaWx0ZXJPYmplY3QoMCkKIHsKLUBwdWJsaWMKLSAgICBRT2Jq
ZWN0ICp0YXJnZXQ7Ci0gICAgaW50IHRpbWVySWQ7Ci0gICAgTlNUaW1lSW50ZXJ2YWwgcmVtYWlu
aW5nVGltZTsKKyAgICBfZ3VhcmRlZFB0ckR1bW15TGlzdC5hcHBlbmQodGhpcyk7CiB9CiAKLS0g
aW5pdFdpdGhRT2JqZWN0OihRT2JqZWN0ICopb2JqZWN0IHRpbWVySWQ6KGludCl0aW1lcklkOwot
LSAodm9pZCl0aW1lckZpcmVkOwotCi1AZW5kCitRT2JqZWN0Ojp+UU9iamVjdCgpCit7CisgICAg
X2Rlc3Ryb3llZC5jYWxsKCk7CisgICAgQVNTRVJUKF9zaWduYWxMaXN0SGVhZCA9PSAmX2Rlc3Ry
b3llZCk7CisgICAga2lsbFRpbWVycygpOworfQogCiBLV1FTaWduYWwgKlFPYmplY3Q6OmZpbmRT
aWduYWwoY29uc3QgY2hhciAqc2lnbmFsTmFtZSkgY29uc3QKIHsKLSAgICBmb3IgKEtXUVNpZ25h
bCAqc2lnbmFsID0gX3NpZ25hbExpc3RIZWFkOyBzaWduYWw7IHNpZ25hbCA9IHNpZ25hbC0+X25l
eHQpIHsKLSAgICAgICAgaWYgKEtXUU5hbWVzTWF0Y2goc2lnbmFsTmFtZSwgc2lnbmFsLT5fbmFt
ZSkpIHsKKyAgICBmb3IgKEtXUVNpZ25hbCAqc2lnbmFsID0gX3NpZ25hbExpc3RIZWFkOyBzaWdu
YWw7IHNpZ25hbCA9IHNpZ25hbC0+X25leHQpCisgICAgICAgIGlmIChLV1FOYW1lc01hdGNoKHNp
Z25hbE5hbWUsIHNpZ25hbC0+X25hbWUpKQogICAgICAgICAgICAgcmV0dXJuIHNpZ25hbDsKLSAg
ICAgICAgfQotICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBRT2JqZWN0Ojpjb25uZWN0
KGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29uc3QgY2hhciAqc2lnbmFsTmFtZSwgY29uc3QgUU9i
amVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlcikKIHsKLSAgICAvLyBGSVhNRTogQXNz
ZXJ0IHRoYXQgc2VuZGVyIGlzIG5vdCBOVUxMIHJhdGhlciB0aGFuIGRvaW5nIHRoZSBpZiBzdGF0
ZW1lbnQuCi0gICAgaWYgKCFzZW5kZXIpIHsKKyAgICAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgc2Vu
ZGVyIGlzIG5vdCAwIHJhdGhlciB0aGFuIGRvaW5nIHRoZSBpZiBzdGF0ZW1lbnQsIHRoZW4gZml4
IGNhbGxlcnMgd2hvIGNhbGwgd2l0aCAwLgorICAgIGlmICghc2VuZGVyKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogICAgIAogICAgIEtXUVNpZ25hbCAqc2lnbmFsID0gc2VuZGVyLT5maW5kU2ln
bmFsKHNpZ25hbE5hbWUpOwogICAgIGlmICghc2lnbmFsKSB7CkBAIC04Myw3ICs4Niw3IEBAIHZv
aWQgUU9iamVjdDo6Y29ubmVjdChjb25zdCBRT2JqZWN0ICpzZW4KICAgICAgICAgICAgICYmICFL
V1FOYW1lc01hdGNoKG1lbWJlciwgU0xPVChzbG90U2hvd0RvY3VtZW50KGNvbnN0IFFTdHJpbmcg
JiwgY29uc3QgUVN0cmluZyAmKSkpCiAgICAgICAgICAgICAmJiAhS1dRTmFtZXNNYXRjaChtZW1i
ZXIsIFNMT1Qoc2xvdFZpZXdDbGVhcmVkKCkpKSAvLyBGSVhNRTogU2hvdWxkIGltcGxlbWVudCB0
aGlzIG9uZSEKICAgICAgICAgICAgICkKLQlFUlJPUigiY29ubmVjdGluZyBtZW1iZXIgJXMgdG8g
c2lnbmFsICVzLCBidXQgdGhhdCBzaWduYWwgd2FzIG5vdCBmb3VuZCIsIG1lbWJlciwgc2lnbmFs
TmFtZSk7CisgICAgICAgIEVSUk9SKCJjb25uZWN0aW5nIG1lbWJlciAlcyB0byBzaWduYWwgJXMs
IGJ1dCB0aGF0IHNpZ25hbCB3YXMgbm90IGZvdW5kIiwgbWVtYmVyLCBzaWduYWxOYW1lKTsKICNl
bmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTIsMjc0ICs5NSwxOTEgQEAgdm9pZCBR
T2JqZWN0Ojpjb25uZWN0KGNvbnN0IFFPYmplY3QgKnNlbgogCiB2b2lkIFFPYmplY3Q6OmRpc2Nv
bm5lY3QoY29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWxOYW1lLCBjb25z
dCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVyKQogewotICAgIC8vIEZJWE1F
OiBBc3NlcnQgdGhhdCBzZW5kZXIgaXMgbm90IE5VTEwgcmF0aGVyIHRoYW4gZG9pbmcgdGhlIGlm
IHN0YXRlbWVudC4KKyAgICAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgc2VuZGVyIGlzIG5vdCAwIHJh
dGhlciB0aGFuIGRvaW5nIHRoZSBpZiBzdGF0ZW1lbnQsIHRoZW4gZml4IGNhbGxlcnMgd2hvIGNh
bGwgd2l0aCAwLgogICAgIGlmICghc2VuZGVyKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
S1dRU2lnbmFsICpzaWduYWwgPSBzZW5kZXItPmZpbmRTaWduYWwoc2lnbmFsTmFtZSk7CiAgICAg
aWYgKCFzaWduYWwpIHsKLSAgICAgICAgLy8gRklYTUU6IEVSUk9SCisgICAgICAgIC8vIEZJWE1F
OiBQdXQgYSBjYWxsIHRvIEVSUk9SIGhlcmUgYW5kIGNsZWFuIHVwIGNhbGxlcnMgd2hvIGRvIHRo
aXMuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgc2lnbmFsLT5kaXNjb25uZWN0KEtXUVNs
b3QoY29uc3RfY2FzdDxRT2JqZWN0ICo+KHJlY2VpdmVyKSwgbWVtYmVyKSk7CiB9CiAKLUtXUU9i
amVjdFNlbmRlclNjb3BlOjpLV1FPYmplY3RTZW5kZXJTY29wZShjb25zdCBRT2JqZWN0ICpvKQot
ICAgIDogX3NhdmVkU2VuZGVyKFFPYmplY3Q6Ol9zZW5kZXIpCi17Ci0gICAgUU9iamVjdDo6X3Nl
bmRlciA9IG87Ci19Ci0KLUtXUU9iamVjdFNlbmRlclNjb3BlOjp+S1dRT2JqZWN0U2VuZGVyU2Nv
cGUoKQordm9pZCBRT2JqZWN0Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50ICopCiB7Ci0gICAgUU9i
amVjdDo6X3NlbmRlciA9IF9zYXZlZFNlbmRlcjsKIH0KIAotUU9iamVjdDo6UU9iamVjdChRT2Jq
ZWN0ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCi0gICAgOiBfc2lnbmFsTGlzdEhlYWQoMCks
IF9zaWduYWxzQmxvY2tlZChmYWxzZSkKLSAgICAsIF9kZXN0cm95ZWQodGhpcywgU0lHTkFMKGRl
c3Ryb3llZCgpKSkKLSAgICAsIF9ldmVudEZpbHRlck9iamVjdCgwKQorYm9vbCBRT2JqZWN0Ojpl
dmVudChRRXZlbnQgKikKIHsKLSAgICBfZ3VhcmRlZFB0ckR1bW15TGlzdC5hcHBlbmQodGhpcyk7
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1RT2JqZWN0Ojp+UU9iamVjdCgpCitzdGF0aWMgdm9p
ZCB0aW1lckZpcmVkKENGUnVuTG9vcFRpbWVyUmVmIHJ1bkxvb3BUaW1lciwgdm9pZCAqaW5mbykK
IHsKLSAgICBfZGVzdHJveWVkLmNhbGwoKTsKLSAgICBBU1NFUlQoX3NpZ25hbExpc3RIZWFkID09
ICZfZGVzdHJveWVkKTsKLSAgICBraWxsVGltZXJzKCk7CisgICAgS1dRT2JqZWN0VGltZXIgKnRp
bWVyID0gc3RhdGljX2Nhc3Q8S1dRT2JqZWN0VGltZXIgKj4oaW5mbyk7CisgICAgaWYgKFFPYmpl
Y3Q6OmRlZmVyc1RpbWVycygpKSB7CisgICAgICAgIGlmICghdGltZXItPmRlZmVycmVkKSB7Cisg
ICAgICAgICAgICBpZiAoIWRlZmVycmVkVGltZXJzKQorICAgICAgICAgICAgICAgIGRlZmVycmVk
VGltZXJzID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgMCwgMCk7CisgICAgICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUoZGVmZXJyZWRUaW1lcnMsIHRpbWVyKTsKKyAgICAgICAgICAgIHRpbWVy
LT5kZWZlcnJlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBRVGlt
ZXJFdmVudCBldmVudCh0aW1lci0+dGltZXJJZCk7CisgICAgICAgIHRpbWVyLT50YXJnZXQtPnRp
bWVyRXZlbnQoJmV2ZW50KTsKKyAgICB9CiB9CiAKLXZvaWQgUU9iamVjdDo6dGltZXJFdmVudChR
VGltZXJFdmVudCAqdGUpCitpbnQgUU9iamVjdDo6c3RhcnRUaW1lcihpbnQgaW50ZXJ2YWwpCiB7
CisgICAgaW50IHRpbWVySWQgPSArK2xhc3RUaW1lcklkVXNlZDsKKyAgICByZXN0YXJ0VGltZXIo
dGltZXJJZCwgaW50ZXJ2YWwsIGludGVydmFsKTsKKyAgICByZXR1cm4gdGltZXJJZDsKIH0KIAot
Ym9vbCBRT2JqZWN0OjpldmVudChRRXZlbnQgKikKK3ZvaWQgUU9iamVjdDo6cmVzdGFydFRpbWVy
KGludCB0aW1lcklkLCBpbnQgbmV4dEZpcmVJbnRlcnZhbCwgaW50IHJlcGVhdEludGVydmFsKQog
ewotICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBBU1NFUlQodGltZXJJZCA+IDApOworICAgIEFT
U0VSVCh0aW1lcklkIDw9IGxhc3RUaW1lcklkVXNlZCk7CiAKLXZvaWQgUU9iamVjdDo6cGF1c2VU
aW1lciAoaW50IF90aW1lcklkLCBjb25zdCB2b2lkICprZXkpCi17Ci0gICAgTlNNdXRhYmxlRGlj
dGlvbmFyeSAqdGltZXJzID0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKilDRkRpY3Rpb25hcnlHZXRW
YWx1ZSh0aW1lckRpY3Rpb25hcmllcywgdGhpcyk7Ci0gICAgTlNOdW1iZXIgKnRpbWVySWQgPSBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpfdGltZXJJZF07Ci0gICAgTlNUaW1lciAqdGltZXIgPSAo
TlNUaW1lciAqKVt0aW1lcnMgb2JqZWN0Rm9yS2V5OnRpbWVySWRdOwotCi0gICAgaWYgKFt0aW1l
ciBpc1ZhbGlkXSl7Ci0gICAgICAgIEtXUU9iamVjdFRpbWVyVGFyZ2V0ICp0YXJnZXQgPSAoS1dR
T2JqZWN0VGltZXJUYXJnZXQgKilbdGltZXIgdXNlckluZm9dOwotCi0gICAgICAgIGlmICh0YXJn
ZXQpewotICAgICAgICAgICAgTlNEYXRlICpmaXJlRGF0ZSA9IFt0aW1lciBmaXJlRGF0ZV07Ci0g
ICAgICAgICAgICBOU1RpbWVJbnRlcnZhbCByZW1haW5pbmdUaW1lID0gW2ZpcmVEYXRlIHRpbWVJ
bnRlcnZhbFNpbmNlRGF0ZTogW05TRGF0ZSBkYXRlXV07Ci0gICAgICAgIAotICAgICAgICAgICAg
aWYgKHJlbWFpbmluZ1RpbWUgPCAwKQotICAgICAgICAgICAgICAgIHJlbWFpbmluZ1RpbWUgPSBE
QkxfRVBTSUxPTjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFsbFBhdXNlZFRpbWVy
cyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGdsb2JhbCB0YXJnZXRzIGRpY3Rp
b25hcnkgaXRzZWxmIGxlYWtzLCBidXQgdGhlIGNvbnRlbnRzIGFyZSByZW1vdmVkCi0gICAgICAg
ICAgICAgICAgLy8gd2hlbiBlYWNoIHRpbWVyIGZpcmVzIG9yIGlzIGtpbGxlZC4KLSAgICAgICAg
ICAgICAgICBhbGxQYXVzZWRUaW1lcnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKE5VTEws
IDAsIE5VTEwsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKLSAgICAgICAgICAg
IH0KLSAgICAKLSAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICpwYXVzZWRUaW1lcnMgPSAoTlNN
dXRhYmxlQXJyYXkgKilDRkRpY3Rpb25hcnlHZXRWYWx1ZShhbGxQYXVzZWRUaW1lcnMsIGtleSk7
Ci0gICAgICAgICAgICBpZiAocGF1c2VkVGltZXJzID09IG5pbCkgewotICAgICAgICAgICAgICAg
IHBhdXNlZFRpbWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgICAgICAg
ICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGFsbFBhdXNlZFRpbWVycywga2V5LCBwYXVzZWRU
aW1lcnMpOwotICAgICAgICAgICAgICAgIFtwYXVzZWRUaW1lcnMgcmVsZWFzZV07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRhcmdldC0+cmVtYWluaW5nVGltZSA9
IHJlbWFpbmluZ1RpbWU7Ci0gICAgICAgICAgICBbcGF1c2VkVGltZXJzIGFkZE9iamVjdDp0YXJn
ZXRdOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFt0aW1lciBpbnZhbGlkYXRl
XTsKLSAgICAgICAgICAgIFt0aW1lcnMgcmVtb3ZlT2JqZWN0Rm9yS2V5OnRpbWVySWRdOwotICAg
ICAgICB9Ci0gICAgfQotfQorICAgIGlmICghdGltZXJEaWN0aW9uYXJpZXMpCisgICAgICAgIHRp
bWVyRGljdGlvbmFyaWVzID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAwLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CiAKLXZvaWQgUU9iamVjdDo6X2FkZFRpbWVy
KE5TVGltZXIgKnRpbWVyLCBpbnQgX3RpbWVySWQpCi17Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFy
eSAqdGltZXJzID0gKE5TTXV0YWJsZURpY3Rpb25hcnkgKilDRkRpY3Rpb25hcnlHZXRWYWx1ZSh0
aW1lckRpY3Rpb25hcmllcywgdGhpcyk7Ci0gICAgaWYgKHRpbWVycyA9PSBuaWwpIHsKLSAgICAg
ICAgdGltZXJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIHRpbWVycyA9IChDRk11dGFibGVEaWN0aW9uYXJ5UmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKHRpbWVyRGljdGlvbmFyaWVzLCB0aGlzKTsKKyAgICBpZiAoIXRpbWVy
cykgeworICAgICAgICB0aW1lcnMgPSBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsIDAs
IDApOwogICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSh0aW1lckRpY3Rpb25hcmllcywgdGhp
cywgdGltZXJzKTsKLSAgICAgICAgW3RpbWVycyByZWxlYXNlXTsKKyAgICAgICAgQ0ZSZWxlYXNl
KHRpbWVycyk7CiAgICAgfQotICAgIFt0aW1lcnMgc2V0T2JqZWN0OnRpbWVyIGZvcktleTpbTlNO
dW1iZXIgbnVtYmVyV2l0aEludDpfdGltZXJJZF1dOwotfQogCi1zdGF0aWMgaW50IG5leHRUaW1l
cklEID0gMTsKKyAgICBBU1NFUlQoIUNGRGljdGlvbmFyeUdldFZhbHVlKHRpbWVycywgcmVpbnRl
cnByZXRfY2FzdDx2b2lkICo+KHRpbWVySWQpKSk7CiAKLXZvaWQgUU9iamVjdDo6Y2xlYXJQYXVz
ZWRUaW1lcnMgKGNvbnN0IHZvaWQgKmtleSkKLXsKLSAgICBpZiAoYWxsUGF1c2VkVGltZXJzKQot
ICAgICAgICBDRkRpY3Rpb25hcnlSZW1vdmVWYWx1ZShhbGxQYXVzZWRUaW1lcnMsIGtleSk7Cisg
ICAgS1dRT2JqZWN0VGltZXIgKnRpbWVyID0gc3RhdGljX2Nhc3Q8S1dRT2JqZWN0VGltZXIgKj4o
ZmFzdE1hbGxvYyhzaXplb2YoS1dRT2JqZWN0VGltZXIpKSk7CisgICAgdGltZXItPnRhcmdldCA9
IHRoaXM7CisgICAgdGltZXItPnRpbWVySWQgPSB0aW1lcklkOworICAgIENGUnVuTG9vcFRpbWVy
Q29udGV4dCBjb250ZXh0ID0geyAwLCB0aW1lciwgMCwgMCwgMCB9OworICAgIENGUnVuTG9vcFRp
bWVyUmVmIHJ1bkxvb3BUaW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKDAsIENGQWJzb2x1dGVU
aW1lR2V0Q3VycmVudCgpICsgbmV4dEZpcmVJbnRlcnZhbCAqIDAuMDAxLAorICAgICAgICByZXBl
YXRJbnRlcnZhbCAqIDAuMDAxLCAwLCAwLCB0aW1lckZpcmVkLCAmY29udGV4dCk7CisgICAgdGlt
ZXItPnJ1bkxvb3BUaW1lciA9IHJ1bkxvb3BUaW1lcjsKKyAgICB0aW1lci0+ZGVmZXJyZWQgPSBm
YWxzZTsKKyAgICB0aW1lci0+ZGVsZXRlZCA9IGZhbHNlOworCisgICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUodGltZXJzLCByZWludGVycHJldF9jYXN0PHZvaWQgKj4odGltZXJJZCksIHRpbWVyKTsK
KworICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgcnVuTG9vcFRp
bWVyLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwogfQogCi12b2lkIFFPYmplY3Q6OnJlc3VtZVRp
bWVycyAoY29uc3Qgdm9pZCAqa2V5LCBRT2JqZWN0ICpfdGFyZ2V0KQordm9pZCBRT2JqZWN0Ojp0
aW1lckludGVydmFscyhpbnQgdGltZXJJZCwgaW50JiBuZXh0RmlyZUludGVydmFsLCBpbnQmIHJl
cGVhdEludGVydmFsKSBjb25zdAogewotICAgIGlmIChhbGxQYXVzZWRUaW1lcnMgPT0gTlVMTCkg
eworICAgIG5leHRGaXJlSW50ZXJ2YWwgPSAtMTsKKyAgICByZXBlYXRJbnRlcnZhbCA9IC0xOwor
ICAgIGlmICghdGltZXJEaWN0aW9uYXJpZXMpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgaW50IG1heElkID0gTUFYKDAsIG5leHRUaW1lcklEKTsKLSAgICAgICAgCi0gICAgTlNN
dXRhYmxlQXJyYXkgKnBhdXNlZFRpbWVycyA9IChOU011dGFibGVBcnJheSAqKUNGRGljdGlvbmFy
eUdldFZhbHVlKGFsbFBhdXNlZFRpbWVycywga2V5KTsKLSAgICBpZiAocGF1c2VkVGltZXJzID09
IG5pbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGNvdW50ID0gW3BhdXNlZFRpbWVycyBj
b3VudF07Ci0gICAgd2hpbGUgKGNvdW50LS0pewotICAgICAgICBLV1FPYmplY3RUaW1lclRhcmdl
dCAqdGFyZ2V0ID0gW3BhdXNlZFRpbWVycyBvYmplY3RBdEluZGV4OiBjb3VudF07Ci0gICAgICAg
IHRhcmdldC0+dGFyZ2V0ID0gX3RhcmdldDsKLSAgICAgICAgTlNUaW1lciAqdGltZXIgPSBbTlNU
aW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6dGFyZ2V0LT5yZW1haW5pbmdUaW1l
Ci0gICAgICAgICAgICB0YXJnZXQ6dGFyZ2V0Ci0gICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0
b3IodGltZXJGaXJlZCkKLSAgICAgICAgICAgIHVzZXJJbmZvOnRhcmdldAotICAgICAgICAgICAg
cmVwZWF0czpZRVNdOwotICAgICAgICBbcGF1c2VkVGltZXJzIHJlbW92ZUxhc3RPYmplY3RdOwot
Ci0gICAgICAgIG1heElkID0gTUFYIChtYXhJZCwgdGFyZ2V0LT50aW1lcklkKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICBfYWRkVGltZXIgKHRpbWVyLCB0YXJnZXQtPnRpbWVy
SWQpOwotICAgIH0KLSAgICBuZXh0VGltZXJJRCA9IG1heElkKzE7Ci0gICAgCi0gICAgQ0ZEaWN0
aW9uYXJ5UmVtb3ZlVmFsdWUoYWxsUGF1c2VkVGltZXJzLCBrZXkpOworICAgIENGTXV0YWJsZURp
Y3Rpb25hcnlSZWYgdGltZXJzID0gKENGTXV0YWJsZURpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUodGltZXJEaWN0aW9uYXJpZXMsIHRoaXMpOworICAgIGlmICghdGltZXJzKQorICAg
ICAgICByZXR1cm47CisgICAgS1dRT2JqZWN0VGltZXIgKnRpbWVyID0gKEtXUU9iamVjdFRpbWVy
ICopQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUodGltZXJzLCByZWludGVycHJldF9jYXN0PHZvaWQgKj4o
dGltZXJJZCkpOworICAgIGlmICghdGltZXIpCisgICAgICAgIHJldHVybjsKKyAgICBuZXh0Rmly
ZUludGVydmFsID0gKGludCkoKENGUnVuTG9vcFRpbWVyR2V0TmV4dEZpcmVEYXRlKHRpbWVyLT5y
dW5Mb29wVGltZXIpIC0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkpICogMTAwMCk7CisgICAg
cmVwZWF0SW50ZXJ2YWwgPSAoaW50KShDRlJ1bkxvb3BUaW1lckdldEludGVydmFsKHRpbWVyLT5y
dW5Mb29wVGltZXIpICogMTAwMCk7CiB9CiAKLWludCBRT2JqZWN0OjpzdGFydFRpbWVyKGludCBt
aWxsaXNlY29uZHMpCitzdGF0aWMgdm9pZCBkZWxldGVUaW1lcihLV1FPYmplY3RUaW1lciAqdGlt
ZXIpCiB7Ci0gICAgaWYgKHRpbWVyRGljdGlvbmFyaWVzID09IE5VTEwpIHsKLSAgICAgICAgLy8g
VGhlIGdsb2JhbCB0aW1lcnMgZGljdGlvbmFyeSBpdHNlbGYgbGl2ZXMgZm9yZXZlciwgYnV0IHRo
ZSBjb250ZW50cyBhcmUgcmVtb3ZlZAotICAgICAgICAvLyB3aGVuIGVhY2ggdGltZXIgZmlyZXMg
b3IgaXMga2lsbGVkLgotICAgICAgICB0aW1lckRpY3Rpb25hcmllcyA9IENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGUoTlVMTCwgMCwgTlVMTCwgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpOwotICAgIH0KLSAgICAKLSAgICBOU011dGFibGVEaWN0aW9uYXJ5ICp0aW1lcnMgPSAoTlNN
dXRhYmxlRGljdGlvbmFyeSAqKUNGRGljdGlvbmFyeUdldFZhbHVlKHRpbWVyRGljdGlvbmFyaWVz
LCB0aGlzKTsKLSAgICBpZiAodGltZXJzID09IG5pbCkgewotICAgICAgICB0aW1lcnMgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZSh0aW1lckRpY3Rpb25hcmllcywgdGhpcywgdGltZXJzKTsKLSAgICAgICAgW3RpbWVycyBy
ZWxlYXNlXTsKLSAgICB9CisgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKHRpbWVyLT5ydW5M
b29wVGltZXIpOworICAgIENGUmVsZWFzZSh0aW1lci0+cnVuTG9vcFRpbWVyKTsKIAotICAgIEtX
UU9iamVjdFRpbWVyVGFyZ2V0ICp0YXJnZXQgPSBbW0tXUU9iamVjdFRpbWVyVGFyZ2V0IGFsbG9j
XSBpbml0V2l0aFFPYmplY3Q6dGhpcyB0aW1lcklkOm5leHRUaW1lcklEXTsKLSAgICBOU1RpbWVy
ICp0aW1lciA9IFtOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZhbDptaWxsaXNl
Y29uZHMgLyAxMDAwLjAKLSAgICAgICAgICB0YXJnZXQ6dGFyZ2V0Ci0gICAgICAgIHNlbGVjdG9y
OkBzZWxlY3Rvcih0aW1lckZpcmVkKQotICAgICAgICB1c2VySW5mbzp0YXJnZXQKLSAgICAgICAg
IHJlcGVhdHM6WUVTXTsKLSAgICBbdGFyZ2V0IHJlbGVhc2VdOwotICAgIAotICAgIF9hZGRUaW1l
ciAodGltZXIsIG5leHRUaW1lcklEKTsKLSAgICAKLSAgICByZXR1cm4gbmV4dFRpbWVySUQrKzsg
ICAgCisgICAgaWYgKHRpbWVyLT5kZWZlcnJlZCkKKyAgICAgICAgdGltZXItPmRlbGV0ZWQgPSB0
cnVlOworICAgIGVsc2UKKyAgICAgICAgZmFzdEZyZWUodGltZXIpOwogfQogCi12b2lkIFFPYmpl
Y3Q6OmtpbGxUaW1lcihpbnQgX3RpbWVySWQpCit2b2lkIFFPYmplY3Q6OmtpbGxUaW1lcihpbnQg
dGltZXJJZCkKIHsKLSAgICBpZiAoX3RpbWVySWQgPT0gMCkgeworICAgIGlmICghdGltZXJEaWN0
aW9uYXJpZXMpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRpbWVyRGljdGlvbmFy
aWVzID09IE5VTEwpIHsKKyAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHRpbWVycyA9IChDRk11
dGFibGVEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHRpbWVyRGljdGlvbmFyaWVz
LCB0aGlzKTsKKyAgICBpZiAoIXRpbWVycykKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBO
U011dGFibGVEaWN0aW9uYXJ5ICp0aW1lcnMgPSAoTlNNdXRhYmxlRGljdGlvbmFyeSAqKUNGRGlj
dGlvbmFyeUdldFZhbHVlKHRpbWVyRGljdGlvbmFyaWVzLCB0aGlzKTsKLSAgICBOU051bWJlciAq
dGltZXJJZCA9IFtOU051bWJlciBudW1iZXJXaXRoSW50Ol90aW1lcklkXTsKLSAgICBOU1RpbWVy
ICp0aW1lciA9IChOU1RpbWVyICopW3RpbWVycyBvYmplY3RGb3JLZXk6dGltZXJJZF07Ci0gICAg
Ly8gT25seSB0cnkgdG8gcmVtb3ZlIHRoZSB0aW1lciBpcyBpdCBoYXNuJ3QgZmlyZWQgKGFuZCBp
cyB0aGVyZWZvcmUgdmFsaWQpLiAgSXQgaXMgTk9UCi0gICAgLy8gcGVybWlzc2libGUgdG8gcmVm
ZXJlbmNlIGEgdGltZXIncyB1c2VySW5mbyBpZiBpdCBpcyBpbnZhbGlkLgotICAgIGlmIChbdGlt
ZXIgaXNWYWxpZF0pewotICAgICAgICBbZGVmZXJyZWRUaW1lcnMgcmVtb3ZlT2JqZWN0OihLV1FP
YmplY3RUaW1lclRhcmdldCAqKVt0aW1lciB1c2VySW5mb11dOwotICAgICAgICBbdGltZXIgaW52
YWxpZGF0ZV07Ci0gICAgfQotICAgIFt0aW1lcnMgcmVtb3ZlT2JqZWN0Rm9yS2V5OnRpbWVySWRd
OworICAgIEtXUU9iamVjdFRpbWVyICp0aW1lciA9IChLV1FPYmplY3RUaW1lciAqKUNGRGljdGlv
bmFyeUdldFZhbHVlKHRpbWVycywgcmVpbnRlcnByZXRfY2FzdDx2b2lkICo+KHRpbWVySWQpKTsK
KyAgICBpZiAoIXRpbWVyKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlVGltZXIodGltZXIp
OworICAgIENGRGljdGlvbmFyeVJlbW92ZVZhbHVlKHRpbWVycywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkICo+KHRpbWVySWQpKTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlT25lVGltZXIoY29uc3Qg
dm9pZCAqa2V5LCBjb25zdCB2b2lkICp2YWx1ZSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBkZWxl
dGVUaW1lcigoS1dRT2JqZWN0VGltZXIgKil2YWx1ZSk7CiB9CiAKIHZvaWQgUU9iamVjdDo6a2ls
bFRpbWVycygpCiB7Ci0gICAgaWYgKHRpbWVyRGljdGlvbmFyaWVzID09IE5VTEwpIHsKKyAgICBp
ZiAoIXRpbWVyRGljdGlvbmFyaWVzKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKnRpbWVycyA9IChOU011dGFibGVEaWN0aW9uYXJ5ICopQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUodGltZXJEaWN0aW9uYXJpZXMsIHRoaXMpOwotICAgIGlmICh0aW1lcnMgPT0g
bmlsKSB7CisgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiB0aW1lcnMgPSAoQ0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZSh0aW1lckRpY3Rpb25hcmllcywgdGhpcyk7
CisgICAgaWYgKCF0aW1lcnMpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTlNFbnVtZXJh
dG9yICplID0gW3RpbWVycyBrZXlFbnVtZXJhdG9yXTsKLSAgICBOU051bWJlciAqdGltZXJJZDsK
LSAgICB3aGlsZSAoKHRpbWVySWQgPSBbZSBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0Ja2lsbFRp
bWVyKFt0aW1lcklkIGludFZhbHVlXSk7Ci0gICAgfQotCisgICAgQ0ZEaWN0aW9uYXJ5QXBwbHlG
dW5jdGlvbih0aW1lcnMsIGRlbGV0ZU9uZVRpbWVyLCAwKTsKICAgICBDRkRpY3Rpb25hcnlSZW1v
dmVWYWx1ZSh0aW1lckRpY3Rpb25hcmllcywgdGhpcyk7CiB9CiAKLXZvaWQgUU9iamVjdDo6c2V0
RGVmZXJzVGltZXJzKGJvb2wgZGVmZXJzKQorc3RhdGljIHZvaWQgc2VuZERlZmVycmVkVGltZXJF
dmVudChjb25zdCB2b2lkICp2YWx1ZSwgdm9pZCAqY29udGV4dCkKIHsKLSAgICBpZiAoZGVmZXJz
KSB7Ci0gICAgICAgIF9kZWZlcnNUaW1lcnMgPSB0cnVlOwotICAgICAgICBkZWZlcnJpbmdUaW1l
cnMgPSB0cnVlOwotICAgICAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVz
dHNXaXRoVGFyZ2V0OltLV1FPYmplY3RUaW1lclRhcmdldCBjbGFzc11dOworICAgIEtXUU9iamVj
dFRpbWVyICp0aW1lciA9IChLV1FPYmplY3RUaW1lciAqKXZhbHVlOworICAgIGlmICghdGltZXIp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAodGltZXItPmRlbGV0ZWQpIHsKKyAgICAgICAgZmFz
dEZyZWUodGltZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIGlmIChfZGVm
ZXJzVGltZXJzKSB7Ci0gICAgICAgIF9kZWZlcnNUaW1lcnMgPSBmYWxzZTsKLSAgICAgICAgaWYg
KGRlZmVycmluZ1RpbWVycykgewotICAgICAgICAgICAgW0tXUU9iamVjdFRpbWVyVGFyZ2V0IHBl
cmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Ioc3RvcERlZmVycmluZ1RpbWVycykgd2l0aE9iamVjdDpu
aWwgYWZ0ZXJEZWxheTowXTsKLSAgICAgICAgfQorICAgIFFUaW1lckV2ZW50IGV2ZW50KHRpbWVy
LT50aW1lcklkKTsKKyAgICB0aW1lci0+dGFyZ2V0LT50aW1lckV2ZW50KCZldmVudCk7CisgICAg
aWYgKHRpbWVyLT5kZWxldGVkKSB7CisgICAgICAgIGZhc3RGcmVlKHRpbWVyKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICB0aW1lci0+ZGVmZXJyZWQgPSBmYWxzZTsKIH0KIAotQGltcGxl
bWVudGF0aW9uIEtXUU9iamVjdFRpbWVyVGFyZ2V0Ci0KLS0gaW5pdFdpdGhRT2JqZWN0OihRT2Jq
ZWN0ICopcW8gdGltZXJJZDooaW50KXQKK3N0YXRpYyB2b2lkIHNlbmREZWZlcnJlZFRpbWVyRXZl
bnRzKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkICopCiB7Ci0gICAgW3N1cGVyIGluaXRdOwotICAg
IHRhcmdldCA9IHFvOwotICAgIHRpbWVySWQgPSB0OwotICAgIHJldHVybiBzZWxmOwotfQorICAg
IENGUmVsZWFzZShzZW5kRGVmZXJyZWRUaW1lckV2ZW50c1RpbWVyKTsKKyAgICBzZW5kRGVmZXJy
ZWRUaW1lckV2ZW50c1RpbWVyID0gMDsKIAotLSAodm9pZClzZW5kVGltZXJFdmVudAotewotICAg
IFFUaW1lckV2ZW50IGV2ZW50KHRpbWVySWQpOwotICAgIHRhcmdldC0+dGltZXJFdmVudCgmZXZl
bnQpOworICAgIENGQXJyYXlSZWYgdGltZXJzID0gZGVmZXJyZWRUaW1lcnM7CisgICAgZGVmZXJy
ZWRUaW1lcnMgPSAwOworCisgICAgQ0ZBcnJheUFwcGx5RnVuY3Rpb24odGltZXJzLCBDRlJhbmdl
TWFrZSgwLCBDRkFycmF5R2V0Q291bnQodGltZXJzKSksIHNlbmREZWZlcnJlZFRpbWVyRXZlbnQs
IDApOworCisgICAgQ0ZSZWxlYXNlKHRpbWVycyk7CiB9CiAKLS0gKHZvaWQpdGltZXJGaXJlZAor
dm9pZCBRT2JqZWN0OjpzZXREZWZlcnNUaW1lcnMoYm9vbCBkZWZlcnMpCiB7Ci0gICAgaWYgKGRl
ZmVycmluZ1RpbWVycykgewotICAgICAgICBpZiAoZGVmZXJyZWRUaW1lcnMgPT0gbmlsKSB7Ci0g
ICAgICAgICAgICBkZWZlcnJlZFRpbWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRd
OworICAgIGlmIChkZWZlcnMpIHsKKyAgICAgICAgX2RlZmVyc1RpbWVycyA9IHRydWU7CisgICAg
ICAgIGlmIChzZW5kRGVmZXJyZWRUaW1lckV2ZW50c1RpbWVyKSB7CisgICAgICAgICAgICBDRlJ1
bkxvb3BUaW1lckludmFsaWRhdGUoc2VuZERlZmVycmVkVGltZXJFdmVudHNUaW1lcik7CisgICAg
ICAgICAgICBDRlJlbGVhc2Uoc2VuZERlZmVycmVkVGltZXJFdmVudHNUaW1lcik7CisgICAgICAg
ICAgICBzZW5kRGVmZXJyZWRUaW1lckV2ZW50c1RpbWVyID0gMDsKICAgICAgICAgfQotCWlmICgh
W2RlZmVycmVkVGltZXJzIGNvbnRhaW5zT2JqZWN0OnNlbGZdKSB7Ci0JICAgIFtkZWZlcnJlZFRp
bWVycyBhZGRPYmplY3Q6c2VsZl07Ci0JfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFtzZWxmIHNl
bmRUaW1lckV2ZW50XTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLX0KLQotKyAodm9pZClzdG9w
RGVmZXJyaW5nVGltZXJzCi17Ci0gICAgQVNTRVJUKGRlZmVycmluZ1RpbWVycyk7Ci0gICAgd2hp
bGUgKFtkZWZlcnJlZFRpbWVycyBjb3VudF0gIT0gMCkgewotCS8vIHJlbW92ZSBiZWZvcmUgc2Vu
ZGluZyB0aGUgdGltZXIgZXZlbnQsIGluIGNhc2UgdGhlIHRpbWVyCi0JLy8gY2FsbGJhY2sgY2Fu
Y2VscyB0aGUgdGltZXIgLSB3ZSBkb24ndCB3YW50IHRvIHJlbW92ZSB0b28KLQkvLyBtdWNoIGlu
IHRoYXQgY2FzZS4KLQlLV1FPYmplY3RUaW1lclRhcmdldCAqdGltZXJUYXJnZXQgPSBbZGVmZXJy
ZWRUaW1lcnMgb2JqZWN0QXRJbmRleDowXTsKLQlbdGltZXJUYXJnZXQgcmV0YWluXTsKLQlbZGVm
ZXJyZWRUaW1lcnMgcmVtb3ZlT2JqZWN0QXRJbmRleDowXTsKLSAgICAgICAgW3RpbWVyVGFyZ2V0
IHNlbmRUaW1lckV2ZW50XTsKLQlbdGltZXJUYXJnZXQgcmVsZWFzZV07CisgICAgCisgICAgaWYg
KF9kZWZlcnNUaW1lcnMpIHsKKyAgICAgICAgX2RlZmVyc1RpbWVycyA9IGZhbHNlOworICAgICAg
ICBBU1NFUlQoIXNlbmREZWZlcnJlZFRpbWVyRXZlbnRzVGltZXIpOworICAgICAgICBzZW5kRGVm
ZXJyZWRUaW1lckV2ZW50c1RpbWVyID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCksCisgICAgICAgICAgICAwLCAwLCAwLCBzZW5kRGVmZXJyZWRUaW1l
ckV2ZW50cywgMCk7CisgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJl
bnQoKSwgc2VuZERlZmVycmVkVGltZXJFdmVudHNUaW1lciwga0NGUnVuTG9vcERlZmF1bHRNb2Rl
KTsKICAgICB9Ci0KLSAgICBkZWZlcnJpbmdUaW1lcnMgPSBmYWxzZTsKIH0KIAotQGVuZAotCiBi
b29sIFFPYmplY3Q6OmluaGVyaXRzKGNvbnN0IGNoYXIgKmNsYXNzTmFtZSkgY29uc3QKIHsKICAg
ICBpZiAoc3RyY21wKGNsYXNzTmFtZSwgIktIVE1MUGFydCIpID09IDApIHsKSW5kZXg6IGt3cS9L
V1FQYWdlU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3Ev
S1dRUGFnZVN0YXRlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC1wIC11IC1yMS45
IGt3cS9LV1FQYWdlU3RhdGUuaAotLS0ga3dxL0tXUVBhZ2VTdGF0ZS5oCTkgTm92IDIwMDUgMDI6
NDY6MjkgLTAwMDAJMS45CisrKyBrd3EvS1dRUGFnZVN0YXRlLmgJOSBOb3YgMjAwNSAxNjowOToz
MCAtMDAwMApAQCAtMjUsMTkgKzI1LDEyIEBACiAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgogCi0jaW5jbHVkZSA8cW1hcC5oPgotCi0jaW5jbHVkZSAia2pzX3dpbmRvdy5oIgot
I2luY2x1ZGUgImRvbV9kb2NpbXBsLmgiCi0KLWNsYXNzIEtVUkw7Ci0KLW5hbWVzcGFjZSBET00g
ewotICAgIGNsYXNzIERvY3VtZW50SW1wbDsKLX0KKyNpbXBvcnQgImRvbV9kb2NpbXBsLmgiCiAK
IG5hbWVzcGFjZSBLSlMgeworICAgIGNsYXNzIFNhdmVkQnVpbHRpbnM7CiAgICAgY2xhc3MgU2F2
ZWRQcm9wZXJ0aWVzOworICAgIGNsYXNzIFBhdXNlZFRpbWVvdXRzOwogfQogCiBAaW50ZXJmYWNl
IEtXUVBhZ2VTdGF0ZSA6IE5TT2JqZWN0CkBAIC00OCwxMSArNDEsMTEgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgS0pTOjpTYXZlZFByb3BlcnRpZXMgKndpbmRvd1Byb3BlcnRpZXM7CiAgICAgS0pT
OjpTYXZlZFByb3BlcnRpZXMgKmxvY2F0aW9uUHJvcGVydGllczsKICAgICBLSlM6OlNhdmVkQnVp
bHRpbnMgKmludGVycHJldGVyQnVpbHRpbnM7Ci0gICAgUU1hcDxpbnQsIEtKUzo6U2NoZWR1bGVk
QWN0aW9uKj4gKnBhdXNlZEFjdGlvbnM7CisgICAgS0pTOjpQYXVzZWRUaW1lb3V0cyAqcGF1c2Vk
VGltZW91dHM7CiAgICAgRE9NOjpEb2N1bWVudEltcGw6OlBhcnNlTW9kZSBwYXJzZU1vZGU7CiB9
CiAKLS0gaW5pdFdpdGhEb2N1bWVudDooRE9NOjpEb2N1bWVudEltcGwgKilkb2MgVVJMOihjb25z
dCBLVVJMICYpdSB3aW5kb3dQcm9wZXJ0aWVzOihLSlM6OlNhdmVkUHJvcGVydGllcyAqKXdwIGxv
Y2F0aW9uUHJvcGVydGllczooS0pTOjpTYXZlZFByb3BlcnRpZXMgKilscCBpbnRlcnByZXRlckJ1
aWx0aW5zOihLSlM6OlNhdmVkQnVpbHRpbnMgKilpYjsKKy0gaW5pdFdpdGhEb2N1bWVudDooRE9N
OjpEb2N1bWVudEltcGwgKilkb2MgVVJMOihjb25zdCBLVVJMICYpdSB3aW5kb3dQcm9wZXJ0aWVz
OihLSlM6OlNhdmVkUHJvcGVydGllcyAqKXdwIGxvY2F0aW9uUHJvcGVydGllczooS0pTOjpTYXZl
ZFByb3BlcnRpZXMgKilscCBpbnRlcnByZXRlckJ1aWx0aW5zOihLSlM6OlNhdmVkQnVpbHRpbnMg
KilpYiBwYXVzZWRUaW1lb3V0czooS0pTOjpQYXVzZWRUaW1lb3V0cyAqKXB0OwogCiAtIChET006
OkRvY3VtZW50SW1wbCAqKWRvY3VtZW50OwogLSAoRE9NOjpEb2N1bWVudEltcGw6OlBhcnNlTW9k
ZSlwYXJzZU1vZGU7CkBAIC02MSw4ICs1NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogLSAoS0pTOjpT
YXZlZFByb3BlcnRpZXMgKil3aW5kb3dQcm9wZXJ0aWVzOwogLSAoS0pTOjpTYXZlZFByb3BlcnRp
ZXMgKilsb2NhdGlvblByb3BlcnRpZXM7CiAtIChLSlM6OlNhdmVkQnVpbHRpbnMgKilpbnRlcnBy
ZXRlckJ1aWx0aW5zOwotLSAodm9pZClzZXRQYXVzZWRBY3Rpb25zOiAoUU1hcDxpbnQsIEtKUzo6
U2NoZWR1bGVkQWN0aW9uKj4gKilwYTsKLS0gKFFNYXA8aW50LCBLSlM6OlNjaGVkdWxlZEFjdGlv
bio+ICopcGF1c2VkQWN0aW9uczsKKy0gKEtKUzo6UGF1c2VkVGltZW91dHMgKilwYXVzZWRUaW1l
b3V0czsKIC0gKHZvaWQpaW52YWxpZGF0ZTsKIAogQGVuZApJbmRleDoga3dxL0tXUVBhZ2VTdGF0
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRUGFnZVN0
YXRlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXAgLXUgLXIxLjIzIGt3cS9L
V1FQYWdlU3RhdGUubW0KLS0tIGt3cS9LV1FQYWdlU3RhdGUubW0JOSBOb3YgMjAwNSAwMjo0Njoy
OSAtMDAwMAkxLjIzCisrKyBrd3EvS1dRUGFnZVN0YXRlLm1tCTkgTm92IDIwMDUgMTY6MDk6MzAg
LTAwMDAKQEAgLTIzLDcgKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiS1dRUGFnZVN0YXRlLmgi
CiAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyLmg+CkBAIC0zNyw2NSArMzcs
NTAgQEAKICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIktXUUtIVE1M
UGFydC5oIgogCi11c2luZyBET006OkRvY3VtZW50SW1wbDsKK3VzaW5nIG5hbWVzcGFjZSBET007
CiAKLXVzaW5nIGtodG1sOjpSZW5kZXJPYmplY3Q7Cit1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAK
LXVzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Ci11c2luZyBLSlM6OkludGVycHJldGVyTG9jazsKLXVz
aW5nIEtKUzo6U2F2ZWRQcm9wZXJ0aWVzOwotdXNpbmcgS0pTOjpTYXZlZEJ1aWx0aW5zOwordXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogQGltcGxlbWVudGF0aW9uIEtXUVBhZ2VTdGF0ZQogCi0tIGlu
aXRXaXRoRG9jdW1lbnQ6KERvY3VtZW50SW1wbCAqKWRvYyBVUkw6KGNvbnN0IEtVUkwgJil1IHdp
bmRvd1Byb3BlcnRpZXM6KFNhdmVkUHJvcGVydGllcyAqKXdwIGxvY2F0aW9uUHJvcGVydGllczoo
U2F2ZWRQcm9wZXJ0aWVzICopbHAgaW50ZXJwcmV0ZXJCdWlsdGluczooU2F2ZWRCdWlsdGlucyAq
KWliCistIGluaXRXaXRoRG9jdW1lbnQ6KERvY3VtZW50SW1wbCAqKWRvYyBVUkw6KGNvbnN0IEtV
UkwgJil1IHdpbmRvd1Byb3BlcnRpZXM6KFNhdmVkUHJvcGVydGllcyAqKXdwIGxvY2F0aW9uUHJv
cGVydGllczooU2F2ZWRQcm9wZXJ0aWVzICopbHAgaW50ZXJwcmV0ZXJCdWlsdGluczooU2F2ZWRC
dWlsdGlucyAqKWliIHBhdXNlZFRpbWVvdXRzOihQYXVzZWRUaW1lb3V0cyAqKXB0CiB7CiAgICAg
W3N1cGVyIGluaXRdOworCiAgICAgZG9jLT5yZWYoKTsKICAgICBkb2N1bWVudCA9IGRvYzsKLSAg
ICBkb2N1bWVudC0+c2V0SW5QYWdlQ2FjaGUoWUVTKTsKLSAgICBwYXJzZU1vZGUgPSBkb2N1bWVu
dC0+cGFyc2VNb2RlKCk7Ci0gICAgZG9jdW1lbnQtPnZpZXcoKS0+cmVmKCk7Ci0gICAgbW91c2VQ
cmVzc05vZGUgPSBzdGF0aWNfY2FzdDxLV1FLSFRNTFBhcnQgKj4oZG9jdW1lbnQtPnBhcnQoKSkt
Pm1vdXNlUHJlc3NOb2RlKCk7Ci0gICAgaWYgKG1vdXNlUHJlc3NOb2RlKSB7CisgICAgZG9jLT5z
ZXRJblBhZ2VDYWNoZShZRVMpOworICAgIG1vdXNlUHJlc3NOb2RlID0gc3RhdGljX2Nhc3Q8S1dR
S0hUTUxQYXJ0ICo+KGRvYy0+cGFydCgpKS0+bW91c2VQcmVzc05vZGUoKTsKKyAgICBpZiAobW91
c2VQcmVzc05vZGUpCiAgICAgICAgIG1vdXNlUHJlc3NOb2RlLT5yZWYoKTsKLSAgICB9CiAgICAg
VVJMID0gbmV3IEtVUkwodSk7CiAgICAgd2luZG93UHJvcGVydGllcyA9IHdwOwogICAgIGxvY2F0
aW9uUHJvcGVydGllcyA9IGxwOwogICAgIGludGVycHJldGVyQnVpbHRpbnMgPSBpYjsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KKyAgICBwYXVzZWRUaW1lb3V0cyA9IHB0OworICAgIHBhcnNlTW9kZSA9
IGRvYy0+cGFyc2VNb2RlKCk7CiAKLS0gKERPTTo6RG9jdW1lbnRJbXBsOjpQYXJzZU1vZGUpcGFy
c2VNb2RlIHsgcmV0dXJuIHBhcnNlTW9kZTsgfQorICAgIGRvYy0+dmlldygpLT5yZWYoKTsKIAot
LSAodm9pZClzZXRQYXVzZWRBY3Rpb25zOiAoUU1hcDxpbnQsIEtKUzo6U2NoZWR1bGVkQWN0aW9u
Kj4gKilwYQotewotICAgIHBhdXNlZEFjdGlvbnMgPSBwYTsKKyAgICByZXR1cm4gc2VsZjsKIH0K
IAotLSAoUU1hcDxpbnQsIEtKUzo6U2NoZWR1bGVkQWN0aW9uKj4gKilwYXVzZWRBY3Rpb25zCist
IChEb2N1bWVudEltcGw6OlBhcnNlTW9kZSlwYXJzZU1vZGUKIHsKLSAgICByZXR1cm4gcGF1c2Vk
QWN0aW9uczsKKyAgICByZXR1cm4gcGFyc2VNb2RlOwogfQogCi0tICh2b2lkKV9jbGVhbnVwUGF1
c2VkQWN0aW9ucworLSAoUGF1c2VkVGltZW91dHMgKilwYXVzZWRUaW1lb3V0cwogewotICAgIGlm
IChwYXVzZWRBY3Rpb25zKXsKLSAgICAgICAgUU1hcEl0ZXJhdG9yPGludCxLSlM6OlNjaGVkdWxl
ZEFjdGlvbio+IGl0OwotICAgICAgICBmb3IgKGl0ID0gcGF1c2VkQWN0aW9ucy0+YmVnaW4oKTsg
aXQgIT0gcGF1c2VkQWN0aW9ucy0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIEtKUzo6U2No
ZWR1bGVkQWN0aW9uICphY3Rpb24gPSAqaXQ7Ci0gICAgICAgICAgICBkZWxldGUgYWN0aW9uOwot
ICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBwYXVzZWRBY3Rpb25zOwotICAgICAgICBwYXVzZWRB
Y3Rpb25zID0gMDsKLSAgICB9Ci0gICAgUU9iamVjdDo6Y2xlYXJQYXVzZWRUaW1lcnMoc2VsZik7
CisgICAgcmV0dXJuIHBhdXNlZFRpbWVvdXRzOwogfQogCiAtICh2b2lkKWNsZWFyCiB7Ci0gICAg
ZG9jdW1lbnQgPSAwOworICAgIGlmIChtb3VzZVByZXNzTm9kZSkKKyAgICAgICAgbW91c2VQcmVz
c05vZGUtPmRlcmVmKCk7ICAgICAgICAKICAgICBtb3VzZVByZXNzTm9kZSA9IDA7CiAKICAgICBk
ZWxldGUgVVJMOwpAQCAtMTEwLDcgKzk1LDggQEAgdXNpbmcgS0pTOjpTYXZlZEJ1aWx0aW5zOwog
ICAgIGRlbGV0ZSBpbnRlcnByZXRlckJ1aWx0aW5zOwogICAgIGludGVycHJldGVyQnVpbHRpbnMg
PSAwOwogCi0gICAgW3NlbGYgX2NsZWFudXBQYXVzZWRBY3Rpb25zXTsKKyAgICBkZWxldGUgcGF1
c2VkVGltZW91dHM7CisgICAgcGF1c2VkVGltZW91dHMgPSAwOwogfQogCiAtICh2b2lkKWludmFs
aWRhdGUKQEAgLTEyMCwxOSArMTA2LDIyIEBAIHVzaW5nIEtKUzo6U2F2ZWRCdWlsdGluczsKICAg
ICBBU1NFUlQoZG9jdW1lbnQtPnZpZXcoKSk7CiAgICAgQVNTRVJUKCFkb2N1bWVudC0+aW5QYWdl
Q2FjaGUoKSk7CiAKLSAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnZpZXcoKSkgewotICAg
ICAgICBkb2N1bWVudC0+dmlldygpLT5kZXJlZigpOworICAgIGlmIChkb2N1bWVudCkgeworICAg
ICAgICBLSFRNTFZpZXcgKnZpZXcgPSBkb2N1bWVudC0+dmlldygpOworICAgICAgICBpZiAodmll
dykKKyAgICAgICAgICAgIHZpZXctPmRlcmVmKCk7CiAgICAgICAgIGRvY3VtZW50LT5kZXJlZigp
OworICAgICAgICBkb2N1bWVudCA9IDA7CiAgICAgfQotICAgIAorCiAgICAgW3NlbGYgY2xlYXJd
OwogfQogCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBpZiAoZG9jdW1lbnQpIHsKLSAgICAgICAg
QVNTRVJUKGRvY3VtZW50LT5pblBhZ2VDYWNoZSgpKTsKICAgICAgICAgQVNTRVJUKGRvY3VtZW50
LT52aWV3KCkpOworICAgICAgICBBU1NFUlQoZG9jdW1lbnQtPmluUGFnZUNhY2hlKCkpOwogCiAg
ICAgICAgIEtIVE1MVmlldyAqdmlldyA9IGRvY3VtZW50LT52aWV3KCk7CiAKQEAgLTE0NSwxMCAr
MTM0LDcgQEAgdXNpbmcgS0pTOjpTYXZlZEJ1aWx0aW5zOwogICAgICAgICAgICAgZG9jdW1lbnQt
PnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzRnJvbUFsbE5vZGVzKCk7CiAgICAgICAgIH0KICAgICAg
ICAgZG9jdW1lbnQtPmRlcmVmKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobW91c2VQcmVzc05v
ZGUpIHsKLSAgICAgICAgICAgIG1vdXNlUHJlc3NOb2RlLT5kZXJlZigpOwotICAgICAgICB9Cisg
ICAgICAgIGRvY3VtZW50ID0gMDsKICAgICAgICAgCiAgICAgICAgIGlmICh2aWV3KSB7CiAgICAg
ICAgICAgICB2aWV3LT5jbGVhclBhcnQoKTsKQEAgLTE4MSw2ICsxNjcsNyBAQCB1c2luZyBLSlM6
OlNhdmVkQnVpbHRpbnM7CiAgICAgICAgICAgICBkb2N1bWVudC0+cmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnNGcm9tQWxsTm9kZXMoKTsKICAgICAgICAgfQogICAgICAgICBkb2N1bWVudC0+ZGVyZWYo
KTsKKyAgICAgICAgZG9jdW1lbnQgPSAwOwogICAgICAgICAKICAgICAgICAgaWYgKHZpZXcpIHsK
ICAgICAgICAgICAgIHZpZXctPmNsZWFyUGFydCgpOwpAQCAtMTk4LDcgKzE4NSw3IEBAIHVzaW5n
IEtKUzo6U2F2ZWRCdWlsdGluczsKICAgICByZXR1cm4gZG9jdW1lbnQ7CiB9CiAKLS0gKERPTTo6
Tm9kZUltcGwgKiltb3VzZVByZXNzTm9kZQorLSAoTm9kZUltcGwgKiltb3VzZVByZXNzTm9kZQog
ewogICAgIHJldHVybiBtb3VzZVByZXNzTm9kZTsKIH0KSW5kZXg6IGt3cS9LV1FUaW1lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUaW1lci5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXAgLXUgLXIxLjE0IGt3cS9LV1FUaW1lci5oCi0t
LSBrd3EvS1dRVGltZXIuaAk5IE5vdiAyMDA1IDAyOjQ2OjI5IC0wMDAwCTEuMTQKKysrIGt3cS9L
V1FUaW1lci5oCTkgTm92IDIwMDUgMTY6MDk6MzAgLTAwMDAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNywzOSArMjcsMzQgQEAKICNkZWZpbmUgUVRJTUVSX0hfCiAKICNpbmNsdWRlICJLV1FPYmpl
Y3QuaCIKLSNpbmNsdWRlICJLV1FTaWduYWwuaCIKLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3Mg
TlNUaW1lcjsKLSNlbHNlCi1jbGFzcyBOU1RpbWVyOwotI2VuZGlmCiAKIGNsYXNzIFFUaW1lciA6
IHB1YmxpYyBRT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBRVGltZXIoUU9iamVjdCAqcGFyZW50ID0g
MCk7CisgICAgUVRpbWVyKCkgOiBtX3J1bkxvb3BUaW1lcigwKSwgbV9tb25pdG9yRnVuY3Rpb24o
MCksIG1fdGltZW91dFNpZ25hbCh0aGlzLCBTSUdOQUwodGltZW91dCgpKSkgeyB9CiAgICAgflFU
aW1lcigpIHsgc3RvcCgpOyB9CiAgICAgCi0gICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAg
IGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3J1bkxvb3BUaW1lcjsgfQogICAgIHZv
aWQgc3RhcnQoaW50IG1zZWMsIGJvb2wgc2luZ2xlU2hvdCA9IGZhbHNlKTsKICAgICB2b2lkIHN0
b3AoKTsKICAgICB2b2lkIGZpcmUoKTsKICAgICAKICAgICBzdGF0aWMgdm9pZCBzaW5nbGVTaG90
KGludCBtc2VjLCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVyKTsKLSAgICAK
LSAgICBzdGF0aWMgdm9pZCBpbW1lZGlhdGVTaW5nbGVTaG90T25NYWluVGhyZWFkKHZvaWQgKCpm
dW5jKSgpKTsKIAogICAgIC8vIFRoaXMgaXMganVzdCBhIGhhY2sgdXNlZCBieSBLV1FLSFRNTFBh
cnQuIFRoZSBtb25pdG9yIGZ1bmN0aW9uCiAgICAgLy8gZ2V0cyBjYWxsZWQgd2hlbiB0aGUgdGlt
ZXIgc3RhcnRzIGFuZCB3aGVuIGl0IGlzIHN0b3BwZWQgYmVmb3JlIGZpcmluZywKICAgICAvLyBi
dXQgbm90IHdoZW4gdGhlIHRpbWVyIGZpcmVzLgogICAgIHZvaWQgc2V0TW9uaXRvcih2b2lkICgq
bW9uaXRvckZ1bmN0aW9uKSh2b2lkICpjb250ZXh0KSwgdm9pZCAqY29udGV4dCk7Ci0gICAgTlNU
aW1lciAqZ2V0TlNUaW1lcigpIHsgcmV0dXJuIG1fdGltZXI7IH0KIAotcHJpdmF0ZTogICAgCi0g
ICAgTlNUaW1lciAqbV90aW1lcjsKKyAgICBDRkFic29sdXRlVGltZSBmaXJlRGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIENGUnVuTG9vcFRpbWVyR2V0TmV4dEZpcmVEYXRlKG1fcnVuTG9vcFRpbWVyKTsg
fQorCitwcml2YXRlOgorICAgIENGUnVuTG9vcFRpbWVyUmVmIG1fcnVuTG9vcFRpbWVyOwogICAg
IHZvaWQgKCptX21vbml0b3JGdW5jdGlvbikodm9pZCAqY29udGV4dCk7CiAgICAgdm9pZCAqbV9t
b25pdG9yRnVuY3Rpb25Db250ZXh0OwogICAgIEtXUVNpZ25hbCBtX3RpbWVvdXRTaWduYWw7CisK
KyAgICBRVGltZXIoY29uc3QgUVRpbWVyJik7CisgICAgUVRpbWVyJiBvcGVyYXRvcj0oY29uc3Qg
UVRpbWVyJik7CiB9OwogCiAjZW5kaWYKSW5kZXg6IGt3cS9LV1FUaW1lci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRVGltZXIubW0sdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEga3dxL0tXUVRpbWVyLm1tCi0tLSBrd3Ev
S1dRVGltZXIubW0JOSBOb3YgMjAwNSAwMjo0NjoyOSAtMDAwMAkxLjIxCisrKyBrd3EvS1dRVGlt
ZXIubW0JOSBOb3YgMjAwNSAxNjowOTozMCAtMDAwMApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDExMSArMjcsMzcgQEAKICNpbXBvcnQgIktXUVRpbWVyLmgiCiAKICNpbXBvcnQgPGt4bWxjb3Jl
L0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgIktXUUxvZ2dpbmcuaCIKLSNpbXBvcnQgIktXUUZvdW5k
YXRpb25FeHRyYXMuaCIKIAotLy8gV2Uga25vdyB0aGUgQ29jb2EgY2FsbHMgaW4gdGhpcyBmaWxl
IGFyZSBzYWZlIGJlY2F1c2UgdGhleSBhcmUgYWxsCi0vLyB0byB0aGUgc2ltcGxlIE9iakMgY2xh
c3MgZGVmaW5lZCBoZXJlLCBvciBzaW1wbGUgTlNUaW1lciBjYWxscyB0aGF0Ci0vLyBjYW4ndCB0
aHJvdy4KLQotQGludGVyZmFjZSBLV1FUaW1lclRhcmdldCA6IE5TT2JqZWN0Ci17Ci0gICAgUVRp
bWVyICp0aW1lcjsKLX0KLSsgKEtXUVRpbWVyVGFyZ2V0ICopdGFyZ2V0V2l0aFFUaW1lcjooUVRp
bWVyICopdGltZXI7Ci0tICh2b2lkKXRpbWVyRmlyZWQ6KGlkKXVzZXJJbmZvOwotQGVuZAotCi1A
aW50ZXJmYWNlIEtXUVNpbmdsZVNob3RUaW1lclRhcmdldCA6IE5TT2JqZWN0Ci17Ci0gICAgS1dR
U2xvdCAqc2xvdDsKLX0KLSsgKEtXUVNpbmdsZVNob3RUaW1lclRhcmdldCAqKXRhcmdldFdpdGhR
T2JqZWN0OihRT2JqZWN0ICopb2JqZWN0IG1lbWJlcjooY29uc3QgY2hhciAqKW1lbWJlcjsKLS0g
KHZvaWQpdGltZXJGaXJlZDooaWQpdXNlckluZm87Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBL
V1FUaW1lclRhcmdldAotCi0rIChLV1FUaW1lclRhcmdldCAqKXRhcmdldFdpdGhRVGltZXI6KFFU
aW1lciAqKXQKLXsKLSAgICBLV1FUaW1lclRhcmdldCAqdGFyZ2V0ID0gW1tbc2VsZiBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIHRhcmdldC0+dGltZXIgPSB0OwotICAgIHJldHVybiB0
YXJnZXQ7Ci19Ci0KLS0gKHZvaWQpdGltZXJGaXJlZDooaWQpdXNlckluZm8KLXsKLSAgICB0aW1l
ci0+ZmlyZSgpOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBLV1FTaW5nbGVTaG90VGlt
ZXJUYXJnZXQKLQotKyAoS1dRU2luZ2xlU2hvdFRpbWVyVGFyZ2V0ICopdGFyZ2V0V2l0aFFPYmpl
Y3Q6KFFPYmplY3QgKilvYmplY3QgbWVtYmVyOihjb25zdCBjaGFyICopbWVtYmVyCi17Ci0gICAg
S1dRU2luZ2xlU2hvdFRpbWVyVGFyZ2V0ICp0YXJnZXQgPSBbW1tzZWxmIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07Ci0gICAgdGFyZ2V0LT5zbG90ID0gbmV3IEtXUVNsb3Qob2JqZWN0LCBtZW1i
ZXIpOwotICAgIHJldHVybiB0YXJnZXQ7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIGRl
bGV0ZSBzbG90OwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQot
ewotICAgIGRlbGV0ZSBzbG90OwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKHZvaWQp
dGltZXJGaXJlZDooaWQpdXNlckluZm8KK3N0YXRpYyB2b2lkIHRpbWVyRmlyZWQoQ0ZSdW5Mb29w
VGltZXJSZWYsIHZvaWQgKmluZm8pCiB7Ci0gICAgc2xvdC0+Y2FsbCgpOwotfQotCi1AZW5kCi0K
LVFUaW1lcjo6UVRpbWVyKFFPYmplY3QgKnBhcmVudCkKLSAgICA6IG1fdGltZXIobmlsKSwgbV9t
b25pdG9yRnVuY3Rpb24oMCksIG1fdGltZW91dFNpZ25hbCh0aGlzLCBTSUdOQUwodGltZW91dCgp
KSkKLXsKLSAgICBpZiAocGFyZW50KSBMT0coTm90WWV0SW1wbGVtZW50ZWQsICJQYXJlbnQgcG9p
bnRlciBpZ25vcmVkLiAgUVRpbWVyIHdpbGwgYmUgbGVha2VkIGFuZCBtYXkgZmlyZSBhZnRlciBw
YXJlbnQgZGVhbGxvYyBjYXVzaW5nIGNyYXNoLiIpOwotfQotCi1ib29sIFFUaW1lcjo6aXNBY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3RpbWVyOworICAgICgoUVRpbWVyICopaW5mbykt
PmZpcmUoKTsKIH0KIAogdm9pZCBRVGltZXI6OnN0YXJ0KGludCBtc2VjLCBib29sIHNpbmdsZVNo
b3QpCiB7CiAgICAgc3RvcCgpOwotICAgIG1fdGltZXIgPSBLV1FSZXRhaW4oW05TVGltZXIgc2No
ZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFsOihtc2VjIC8gMTAwMC4wKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OltLV1FUaW1lclRhcmdl
dCB0YXJnZXRXaXRoUVRpbWVyOnRoaXNdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKHRpbWVyRmlyZWQ6KQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOm5pbAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRzOiFzaW5nbGVT
aG90XSk7CiAKLSAgICBpZiAobV9tb25pdG9yRnVuY3Rpb24pIHsKKyAgICBDRlRpbWVJbnRlcnZh
bCBpbnRlcnZhbCA9IG1zZWMgKiAwLjAwMTsKKyAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29u
dGV4dCA9IHsgMCwgdGhpcywgMCwgMCwgMCB9OworICAgIG1fcnVuTG9vcFRpbWVyID0gQ0ZSdW5M
b29wVGltZXJDcmVhdGUoMCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyBpbnRlcnZhbCwK
KyAgICAgICAgc2luZ2xlU2hvdCA/IDAgOiBpbnRlcnZhbCwgMCwgMCwgdGltZXJGaXJlZCwgJmNv
bnRleHQpOworICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9y
dW5Mb29wVGltZXIsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisKKyAgICBpZiAobV9tb25pdG9y
RnVuY3Rpb24pCiAgICAgICAgIG1fbW9uaXRvckZ1bmN0aW9uKG1fbW9uaXRvckZ1bmN0aW9uQ29u
dGV4dCk7Ci0gICAgfQogfQogCiB2b2lkIFFUaW1lcjo6c3RvcCgpCiB7Ci0gICAgaWYgKG1fdGlt
ZXIgPT0gbmlsKSB7CisgICAgaWYgKCFtX3J1bkxvb3BUaW1lcikKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KICAgICAKLSAgICBbbV90aW1lciBpbnZhbGlkYXRlXTsKLSAgICBLV1FSZWxlYXNlKG1f
dGltZXIpOwotICAgIG1fdGltZXIgPSBuaWw7CisgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRl
KG1fcnVuTG9vcFRpbWVyKTsKKyAgICBDRlJlbGVhc2UobV9ydW5Mb29wVGltZXIpOworICAgIG1f
cnVuTG9vcFRpbWVyID0gMDsKIAotICAgIGlmIChtX21vbml0b3JGdW5jdGlvbikgeworICAgIGlm
IChtX21vbml0b3JGdW5jdGlvbikKICAgICAgICAgbV9tb25pdG9yRnVuY3Rpb24obV9tb25pdG9y
RnVuY3Rpb25Db250ZXh0KTsKLSAgICB9CiB9CiAKIHZvaWQgUVRpbWVyOjpzZXRNb25pdG9yKHZv
aWQgKCptb25pdG9yRnVuY3Rpb24pKHZvaWQgKmNvbnRleHQpLCB2b2lkICpjb250ZXh0KQpAQCAt
MTQzLDUyICs2OSwzMSBAQCB2b2lkIFFUaW1lcjo6c2V0TW9uaXRvcih2b2lkICgqbW9uaXRvckZ1
CiAKIHZvaWQgUVRpbWVyOjpmaXJlKCkKIHsKLSAgICAvLyBFbnN1cmUgdGhhdCBtX3RpbWVyIGlz
IGtlcHQgYXJvdW5kIGZvciBkdXJhdGlvbiBvZiBjYWxsYmFjay4KLSAgICAvLyBGaW5hbCByZWZl
cmVuY2Ugd2lsbCBldmVudHVhbGx5IGJlIHJlbGVhc2VkIGluIHN0b3AoKSwgd2hpY2ggbWF5IGJl
IGNhbGxlZCAKLSAgICAvLyBpbiB0aGlzIGZyYW1lLCBoZW5jZSB0aGUgbmVlZCB0byBlbnN1cmUg
dGhlIHRpbWVyIGlzIGtlcHQgYXJvdW5kIHVudGlsCi0gICAgLy8gdGhlIHBvb2wgaXMgcmVsZWFz
ZWQuIAotICAgIFtbbV90aW1lciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAobV9ydW5M
b29wVGltZXIgJiYgIUNGUnVuTG9vcFRpbWVySXNWYWxpZChtX3J1bkxvb3BUaW1lcikpIHsKKyAg
ICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fcnVuTG9vcFRpbWVyKTsKKyAgICAgICAg
Q0ZSZWxlYXNlKG1fcnVuTG9vcFRpbWVyKTsKKyAgICAgICAgbV9ydW5Mb29wVGltZXIgPSAwOwor
ICAgIH0KIAogICAgIC8vIE5vdGU6IFRoaXMgY2FsbCBtYXkgZGVzdHJveSB0aGUgUVRpbWVyLCBz
byBiZSBzdXJlIG5vdCB0byB0b3VjaCBhbnkgZmllbGRzIGFmdGVyd2FyZC4KICAgICBtX3RpbWVv
dXRTaWduYWwuY2FsbCgpOwogfQogCi12b2lkIFFUaW1lcjo6c2luZ2xlU2hvdChpbnQgbXNlYywg
UU9iamVjdCAqcmVjZWl2ZXIsIGNvbnN0IGNoYXIgKm1lbWJlcikKLXsKLSAgICBbTlNUaW1lciBz
Y2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6KG1zZWMgLyAxMDAwLjApCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OltLV1FTaW5nbGVTaG90VGltZXJUYXJn
ZXQgdGFyZ2V0V2l0aFFPYmplY3Q6cmVjZWl2ZXIgbWVtYmVyOm1lbWJlcl0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKHRpbWVyRmlyZWQ6KQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdHM6Tk9dOwotfQotCi1AaW50ZXJmYWNl
IEtXUU1haW5UaHJlYWRQZXJmb3JtVGFyZ2V0IDogTlNPYmplY3QKLXsKLSAgICB2b2lkICgqX2Z1
bmMpKCk7Ci19Ci0KLS0gKGlkKWluaXRXaXRoRnVuY3Rpb246KHZvaWQgKCopKCkpZnVuYzsKLS0g
KHZvaWQpY2FsbEZ1bmN0aW9uOihpZClpZ25vcmU7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBL
V1FNYWluVGhyZWFkUGVyZm9ybVRhcmdldAotLSAoaWQpaW5pdFdpdGhGdW5jdGlvbjoodm9pZCAo
KikoKSlmdW5jCitzdGF0aWMgdm9pZCBkZWxldGVLV1FTbG90KGNvbnN0IHZvaWQgKmluZm8pCiB7
Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgICAgICBfZnVuYyA9IGZ1bmM7
Ci0gICAgfQotICAgIHJldHVybiBzZWxmOworICAgIGRlbGV0ZSAoS1dRU2xvdCAqKWluZm87CiB9
CiAKLS0gKHZvaWQpY2FsbEZ1bmN0aW9uOihpZClpZ25vcmUKK3N0YXRpYyB2b2lkIHNpbmdsZVNo
b3RUaW1lckZpcmVkKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkICppbmZvKQogewotICAgIF9mdW5j
KCk7CisgICAgKChLV1FTbG90ICopaW5mbyktPmNhbGwoKTsKIH0KIAotQGVuZAotCi12b2lkIFFU
aW1lcjo6aW1tZWRpYXRlU2luZ2xlU2hvdE9uTWFpblRocmVhZCh2b2lkICgqZnVuYykoKSkKK3Zv
aWQgUVRpbWVyOjpzaW5nbGVTaG90KGludCBtc2VjLCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3Qg
Y2hhciAqbWVtYmVyKQogewotICAgIFtbW0tXUU1haW5UaHJlYWRQZXJmb3JtVGFyZ2V0IGFsbG9j
XSBpbml0V2l0aEZ1bmN0aW9uOmZ1bmNdIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2Vs
ZWN0b3IoY2FsbEZ1bmN0aW9uKSB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKKyAg
ICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4dCA9IHsgMCwgbmV3IEtXUVNsb3QocmVjZWl2
ZXIsIG1lbWJlciksIDAsIGRlbGV0ZUtXUVNsb3QsIDAgfTsKKyAgICBDRlJ1bkxvb3BUaW1lclJl
ZiB0aW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKDAsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVu
dCgpICsgbXNlYyAqIDAuMDAxLAorICAgICAgICAwLCAwLCAwLCBzaW5nbGVTaG90VGltZXJGaXJl
ZCwgJmNvbnRleHQpOworICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQo
KSwgdGltZXIsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgQ0ZSZWxlYXNlKHRpbWVyKTsK
IH0KLQpJbmRleDoga3dxL1dlYkNvcmVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNDI2CmRpZmYgLXAgLXUgLXIxLjQyNiBrd3EvV2ViQ29yZUJyaWRnZS5tbQotLS0ga3dxL1dl
YkNvcmVCcmlkZ2UubW0JOSBOb3YgMjAwNSAwMjo0NjoyOSAtMDAwMAkxLjQyNgorKysga3dxL1dl
YkNvcmVCcmlkZ2UubW0JOSBOb3YgMjAwNSAxNjowOTozMSAtMDAwMApAQCAtNDc2LDEzICs0NzYs
MTEgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRLSlMgPSBGQUxTRTsKIC0gKEJPT0wpc2F2ZURv
Y3VtZW50VG9QYWdlQ2FjaGUKIHsKICAgICBEb2N1bWVudEltcGwgKmRvYyA9IF9wYXJ0LT54bWxE
b2NJbXBsKCk7Ci0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAoIWRvYykKICAgICAgICAgcmV0dXJu
IE5POwotICAgIH0KLSAgICAKLSAgICBpZiAoIWRvYy0+dmlldygpKSB7CisgICAgaWYgKCFkb2Mt
PnZpZXcoKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgIH0KKwogICAgIF9wYXJ0LT5jbGVhclRp
bWVycygpOwogCiAgICAgSW50ZXJwcmV0ZXJMb2NrIGxvY2s7CkBAIC00OTYsMTQgKzQ5NCwxOCBA
QCBzdGF0aWMgYm9vbCBpbml0aWFsaXplZEtKUyA9IEZBTFNFOwogICAgIFNhdmVkQnVpbHRpbnMg
KmludGVycHJldGVyQnVpbHRpbnMgPSBuZXcgU2F2ZWRCdWlsdGluczsKICAgICBfcGFydC0+c2F2
ZUludGVycHJldGVyQnVpbHRpbnMoKmludGVycHJldGVyQnVpbHRpbnMpOwogCi0gICAgS1dRUGFn
ZVN0YXRlICpwYWdlU3RhdGUgPSBbW1tLV1FQYWdlU3RhdGUgYWxsb2NdIGluaXRXaXRoRG9jdW1l
bnQ6ZG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkw6X3BhcnQtPm1fdXJsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1Byb3BlcnRpZXM6d2luZG93UHJv
cGVydGllcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb25Qcm9wZXJ0aWVzOmxvY2F0aW9uUHJvcGVydGllcwotCQkJCSAgICAgICAgICAg
ICAgICAgIGludGVycHJldGVyQnVpbHRpbnM6aW50ZXJwcmV0ZXJCdWlsdGluc10gYXV0b3JlbGVh
c2VdOwotICAgIFtwYWdlU3RhdGUgc2V0UGF1c2VkQWN0aW9uczogX3BhcnQtPnBhdXNlQWN0aW9u
cygoY29uc3Qgdm9pZCAqKXBhZ2VTdGF0ZSldOworICAgIEtXUVBhZ2VTdGF0ZSAqcGFnZVN0YXRl
ID0gW1tLV1FQYWdlU3RhdGUgYWxsb2NdIGluaXRXaXRoRG9jdW1lbnQ6ZG9jCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TDpfcGFydC0+bV91cmwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aW5kb3dQcm9wZXJ0aWVzOndpbmRvd1Byb3BlcnRpZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25Qcm9wZXJ0aWVz
OmxvY2F0aW9uUHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVycHJldGVyQnVpbHRpbnM6aW50ZXJwcmV0ZXJCdWlsdGlucworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2Vk
VGltZW91dHM6X3BhcnQtPnBhdXNlVGltZW91dHMoKV07CisKKyAgICBCT09MIHJlc3VsdCA9IFtz
ZWxmIHNhdmVEb2N1bWVudFRvUGFnZUNhY2hlOnBhZ2VTdGF0ZV07CisKKyAgICBbcGFnZVN0YXRl
IHJlbGVhc2VdOwogCi0gICAgcmV0dXJuIFtzZWxmIHNhdmVEb2N1bWVudFRvUGFnZUNhY2hlOnBh
Z2VTdGF0ZV07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLSAoQk9PTCljYW5DYWNoZVBhZ2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>