<?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>130491</bug_id>
          
          <creation_ts>2014-03-19 18:06:55 -0700</creation_ts>
          <short_desc>Merge Misc. WebVTT Updates from Blink</short_desc>
          <delta_ts>2014-03-21 04:25:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>992345</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-19 18:06:55 -0700</bug_when>
    <thetext>This bug merges a set of WebVTT changes from Blink:

1. Remove virtual destructor for WebVTTParser
	fb62b2b54944bd19026192c049a1db250756fc12
	https://codereview.chromium.org/40323003
	
	ch.dumez@samsung.com

2. Make WebVTTParser::collectTimeStamp static
	29176fb0b394a97e85f4dabc07e18329f3ceae41
	https://codereview.chromium.org/54463002
	
	fs@opera.com

3. Handle empty lines in the &apos;TimingsAndSettings&apos; state in the WebVTTParser 
	29476f839a08cb17c5a3fc713f7e454e7cea9c60
	https://codereview.chromium.org/55853002

	fs@opera.com

4. Make metadata state local in the WebVTT parser
	ba2378ef873e786cf2937034e012669cdd37dfe8
	https://codereview.chromium.org/65343003

	fs@opera.com

5. The WebVTT parsing algorithm allows empty cue text
	1915b9aa1bba45aebf28531b40ae627ecf9a3d59
	https://codereview.chromium.org/62833005

	fs@opera.com

6. Update WebVTT parser spec references
	ea46dbd0f1f29779a1cd4f59b19361b803f09a9b
	https://codereview.chromium.org/64273013

	fs@opera.com
	
7. Add new helper VTTParser::collectDigitsToInt
	9eb4bb6b627357bb94d66386a4123ec004cccfc4
	https://codereview.chromium.org/101513002
	
	fs@opera.com
	
8. Make VTTParser::collectDigitsToInt non-copying
	192a843b32eafb77bf92c50ec50d334ba935028a
	https://codereview.chromium.org/102403002
	
	fs@opera.com

9. Simplify VTTParser::collectTimeStamp
	15f9efcc952fcf73184e28fb9db79633c1fa6653
	https://codereview.chromium.org/104443002
	
	fs@opera.com 
	
10. Replace character vectors with StringBuilders in the WebVTT tokenizer
	74fd66b451a464683f7cb748855b1740a54b2c16
	https://codereview.chromium.org/75243004

	fs@opera.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992346</commentid>
    <comment_count>1</comment_count>
      <attachid>227240</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-19 18:15:47 -0700</bug_when>
    <thetext>Created attachment 227240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992348</commentid>
    <comment_count>2</comment_count>
      <attachid>227240</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-03-19 18:29:25 -0700</bug_when>
    <thetext>Comment on attachment 227240
Patch

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

&gt; Source/WebCore/html/track/VTTCue.cpp:989
&gt;              // NOTE: toInt ignores trailing non-digit characters, such as &apos;%&apos;.

This comment is no longer necessary because we don&apos;t use toInt.

&gt; LayoutTests/ChangeLog:31
&gt; +        * media/track/track-webvtt-tc027-empty-cue-expected.txt: Marke one test as expected to fail, since

Nit: &quot;Marke&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992370</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-19 19:55:42 -0700</bug_when>
    <thetext>Committed r165942: &lt;http://trac.webkit.org/changeset/165942&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992441</commentid>
    <comment_count>4</comment_count>
      <attachid>227240</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2014-03-20 01:52:19 -0700</bug_when>
    <thetext>Comment on attachment 227240
Patch

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

I had a very quick look at the style without entering the contents and made a small comment

&gt; Source/WebCore/html/track/VTTCue.cpp:973
&gt; +            if (!WebVTTParser::collectDigitsToInt(input, &amp;position, number))

This API seems a bit incoherent to me because in a case you pass a pointer to a number and in the other case you pass a reference to a number. For my taste it is more logical and less error prone to stick to one. If you ask me, I&apos;d go for the pointer.

&gt; Source/WebCore/html/track/WebVTTParser.cpp:61
&gt; +unsigned WebVTTParser::collectDigitsToInt(const String&amp; input, unsigned* position, int&amp; number)

Me previous content refers to this API, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992506</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-03-20 07:56:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 227240 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=227240&amp;action=review
&gt; 
&gt; I had a very quick look at the style without entering the contents and made a small comment
&gt; 
&gt; &gt; Source/WebCore/html/track/VTTCue.cpp:973
&gt; &gt; +            if (!WebVTTParser::collectDigitsToInt(input, &amp;position, number))
&gt; 
&gt; This API seems a bit incoherent to me because in a case you pass a pointer to a number and in the other case you pass a reference to a number. For my taste it is more logical and less error prone to stick to one. If you ask me, I&apos;d go for the pointer.
&gt; 

  Good point, I should have thought of that!

  I vote for passing a reference for both position and value because neither can ever be NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993014</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2014-03-21 04:21:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 227240 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=227240&amp;action=review
&gt; &gt; 
&gt; &gt; I had a very quick look at the style without entering the contents and made a small comment
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/track/VTTCue.cpp:973
&gt; &gt; &gt; +            if (!WebVTTParser::collectDigitsToInt(input, &amp;position, number))
&gt; &gt; 
&gt; &gt; This API seems a bit incoherent to me because in a case you pass a pointer to a number and in the other case you pass a reference to a number. For my taste it is more logical and less error prone to stick to one. If you ask me, I&apos;d go for the pointer.
&gt; &gt; 
&gt; 
&gt;   Good point, I should have thought of that!
&gt; 
&gt;   I vote for passing a reference for both position and value because neither can ever be NULL.

Of course your vote weights more than mine, but I&apos;d prefer pointer because the in/out becomes completely clear without the need of specifying any const as parameters are passed as value by default. Maybe it&apos;s a reminiscence of my pure C programming skills ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993017</commentid>
    <comment_count>7</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2014-03-21 04:25:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; This API seems a bit incoherent to me because in a case you pass a pointer to a number and in the other case you pass a reference to a number. For my taste it is more logical and less error prone to stick to one. If you ask me, I&apos;d go for the pointer.
&gt; &gt; 
&gt; 
&gt;   Good point, I should have thought of that!

Btw, I don&apos;t know if Brent thinks of a small follow up patch to fix this nit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227240</attachid>
            <date>2014-03-19 18:15:47 -0700</date>
            <delta_ts>2014-03-20 01:52:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130491-20140319181525.patch</filename>
            <type>text/plain</type>
            <size>40965</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTkzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE0LTAzLTE5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIE1pc2MuIFdlYlZU
VCBVcGRhdGVzIGZyb20gQmxpbmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzA0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0OiBtZWRpYS90cmFjay90cmFjay13ZWJ2dHQtdGMwMzAtaW50ZXJz
cGVyc2VkLW5vbi1jdWUuaHRtbAorCisgICAgICAgIE1lcmdlZCBmcm9tIEJsaW5rIChwYXRjaCBi
eSB2Y2FyYnVuZUBjaHJvbWl1bS5vcmcpOgorICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9mYjYyYjJiNTQ5NDRiZDE5MDI2MTkyYzA0OWEx
ZGIyNTA3NTZmYzEyCisgICAgICAgIGh0dHA6Ly9jcmJ1Zy5jb20vNDAzMjMwMDMKKyAgICAgICAg
aHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvMjkxNzZm
YjBiMzk0YTk3ZTg1ZjRkYWJjMDdlMTgzMjlmM2NlYWU0MQorICAgICAgICBodHRwOi8vY3JidWcu
Y29tLzU0NDYzMDAyCisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9ibGluay8rLzI5NDc2ZjgzOWEwOGNiMTdjNWEzZmM3MTNmN2U0NTRlN2NlYTljNjAK
KyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS81NTg1MzAwMgorICAgICAgICBodHRwczovL2Nocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9iYTIzNzhlZjg3M2U3ODZjZjI5
MzcwMzRlMDEyNjY5Y2RkMzdkZmU4CisgICAgICAgIGh0dHA6Ly9jcmJ1Zy5jb20vNjUzNDMwMDMK
KyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5r
LysvMTkxNWI5YWExYmJhNDVhZWJmMjg1MzFiNDBhZTYyN2VjZjlhM2Q1OQorICAgICAgICBodHRw
Oi8vY3JidWcuY29tLzYyODMzMDA1CisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL2VhNDZkYmQwZjFmMjk3NzlhMWNkNGY1OWIxOTM2MWI4
MDNmMDlhOWIKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS82NDI3MzAxMworICAgICAgICBodHRw
czovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy85ZWI0YmI2YjYy
NzM1N2JiOTRkNjYzODZhNDEyM2VjMDA0Y2NjZmM0CisgICAgICAgIGh0dHA6Ly9jcmJ1Zy5jb20v
MTAxNTEzMDAyCisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9ibGluay8rLzE5MmE4NDNiMzJlYWZiNzdiZjkyYzUwZWM1MGQzMzRiYTkzNTAyOGEKKyAg
ICAgICAgaHR0cDovL2NyYnVnLmNvbS8xMDI0MDMwMDIKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvMTVmOWVmY2M5NTJmY2Y3MzE4NGUy
OGZiOWRiNzk2MzNjMWZhNjY1MworICAgICAgICBodHRwOi8vY3JidWcuY29tLzEwNDQ0MzAwMgor
ICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsv
Ky83NGZkNjZiNDUxYTQ2NDY4M2Y3Y2I3NDg4NTViMTc0MGE1NGIyYzE2CisgICAgICAgIGh0dHA6
Ly9jcmJ1Zy5jb20vNzUyNDMwMDQKKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrUmVn
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja1JlZ2lvbjo6cGFyc2VTZXR0aW5n
VmFsdWUpOgorICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlZUVEN1ZTo6bWFya0Z1dHVyZUFuZFBhc3ROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpW
VFRDdWU6OnNldEN1ZVNldHRpbmdzKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRGlnaXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYlZUVFBhcnNlcjo6Y29sbGVjdERpZ2l0c1RvSW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlZUVFBhcnNlcjo6cGFyc2VGbG9hdFBlcmNlbnRhZ2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFy
c2VyOjpjb2xsZWN0TWV0YWRhdGFIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFy
c2VyOjpjb2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlZU
VFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZyb21DdWVUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYlZUVFBhcnNlcjo6Y3JlYXRlTmV3Q3VlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlZUVFBhcnNlcjo6Y3JlYXRlTmV3UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFBh
cnNlcjo6Y29sbGVjdFRpbWVTdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjp0b2tlblRvTm9kZVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpjb25zdHJ1Y3RUcmVlRnJvbVRv
a2VuKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oOgorICAgICAgICAqIGh0
bWwvdHJhY2svV2ViVlRUVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFRva2VuOjpu
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlZUVFRva2VuOjpjaGFyYWN0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlZUVFRva2VuOjphcHBlbmRUb0NoYXJhY3Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJWVFRUb2tlbjo6YWRkTmV3Q2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
VlRUVG9rZW46OmNsYXNzZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUVG9rZW46OmFkZE5l
d0Fubm90YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUVG9rZW46OmFubm90YXRpb24p
OgorICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVxdWFsTGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRUb2tlbml6ZXI6
OldlYlZUVFRva2VuaXplcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRUb2tlbml6ZXI6Om5l
eHRUb2tlbik6CisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuaDoKKwogMjAx
NC0wMy0xOSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRo
ZSBpT1MgYnVpbGQgYWZ0ZXIgcjE2NTkxNy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja1JlZ2lvbi5jcHAJKHJldmlzaW9uIDE2NTg5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrUmVnaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY1LDcgKzI2NSw2IEBAIHZvaWQgVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZSgK
ICAgICBib29sIGlzVmFsaWRTZXR0aW5nOwogICAgIFN0cmluZyBudW1iZXJBc1N0cmluZzsKICAg
ICBpbnQgbnVtYmVyOwotICAgIHVuc2lnbmVkIHBvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgYW5j
aG9yUG9zaXRpb247CiAKICAgICBzd2l0Y2ggKHNldHRpbmcpIHsKQEAgLTI4MCwxNyArMjc5LDE0
IEBAIHZvaWQgVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdWYWx1ZSgKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrUmVnaW9uOjpwYXJzZVNldHRpbmdW
YWx1ZSwgaW52YWxpZCBXaWR0aCIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEhlaWdodDoK
LSAgICAgICAgcG9zaXRpb24gPSAwOwotCi0gICAgICAgIG51bWJlckFzU3RyaW5nID0gV2ViVlRU
UGFyc2VyOjpjb2xsZWN0RGlnaXRzKHZhbHVlLCAmcG9zaXRpb24pOwotICAgICAgICBudW1iZXIg
PSB2YWx1ZS50b0ludCgmaXNWYWxpZFNldHRpbmcpOwotCi0gICAgICAgIGlmIChpc1ZhbGlkU2V0
dGluZyAmJiBudW1iZXIgPj0gMCkKKyAgICBjYXNlIEhlaWdodDogeworICAgICAgICB1bnNpZ25l
ZCBwb3NpdGlvbiA9IDA7CisgICAgICAgIGlmIChXZWJWVFRQYXJzZXI6OmNvbGxlY3REaWdpdHNU
b0ludCh2YWx1ZSwgJnBvc2l0aW9uLCBudW1iZXIpICYmIHBvc2l0aW9uID09IHZhbHVlLmxlbmd0
aCgpKQogICAgICAgICAgICAgbV9oZWlnaHRJbkxpbmVzID0gbnVtYmVyOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBMT0coTWVkaWEsICJUZXh0VHJhY2tSZWdpb246OnBhcnNlU2V0dGluZ1Zh
bHVlLCBpbnZhbGlkIEhlaWdodCIpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBS
ZWdpb25BbmNob3I6CiAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gV2ViVlRUUGFyc2VyOjpwYXJz
ZUZsb2F0UGVyY2VudGFnZVZhbHVlUGFpcih2YWx1ZSwgJywnLCBpc1ZhbGlkU2V0dGluZyk7CiAg
ICAgICAgIGlmIChpc1ZhbGlkU2V0dGluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVlRUQ3VlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZU
VEN1ZS5jcHAJKHJldmlzaW9uIDE2NTkwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VlRUQ3VlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk2LDcgKzY5Niw3IEBAIHZvaWQgVlRUQ3Vl
OjptYXJrRnV0dXJlQW5kUGFzdE5vZGVzKENvbnQKICAgICAgICAgaWYgKGNoaWxkLT5ub2RlTmFt
ZSgpID09IHRpbWVzdGFtcFRhZykgewogICAgICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gPSAw
OwogICAgICAgICAgICAgU3RyaW5nIHRpbWVzdGFtcCA9IGNoaWxkLT5ub2RlVmFsdWUoKTsKLSAg
ICAgICAgICAgIGRvdWJsZSBjdXJyZW50VGltZXN0YW1wID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJW
VFRQYXJzZXI+KG51bGxwdHIsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPmNvbGxlY3RUaW1l
U3RhbXAodGltZXN0YW1wLCAmcG9zaXRpb24pOworICAgICAgICAgICAgZG91YmxlIGN1cnJlbnRU
aW1lc3RhbXAgPSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RUaW1lU3RhbXAodGltZXN0YW1wLCAmcG9z
aXRpb24pOwogICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRUaW1lc3RhbXAgIT0gLTEpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoY3VycmVudFRpbWVzdGFtcCA+IG1vdmllVGltZSkK
QEAgLTk2OSw4ICs5NjksOCBAQCB2b2lkIFZUVEN1ZTo6c2V0Q3VlU2V0dGluZ3MoY29uc3QgU3Ry
aW5nCiAgICAgICAgICAgICAvLyAgICBVKzAwMzAgRElHSVQgWkVSTyAoMCkgdG8gVSswMDM5IERJ
R0lUIE5JTkUgKDkpLCB0aGVuIGp1bXAgdG8gdGhlIHN0ZXAgbGFiZWxlZCBuZXh0IHNldHRpbmcu
CiAgICAgICAgICAgICAvLyAyLiBJZiB2YWx1ZSBkb2VzIG5vdCBjb250YWluIGF0IGxlYXN0IG9u
ZSBjaGFyYWN0ZXIgaW4gdGhlIHJhbmdlIFUrMDAzMCBESUdJVCBaRVJPICgwKSB0byBVKzAwMzkg
RElHSVQgTklORSAoOSksCiAgICAgICAgICAgICAvLyAgICB0aGVuIGp1bXAgdG8gdGhlIHN0ZXAg
bGFiZWxlZCBuZXh0IHNldHRpbmcuCi0gICAgICAgICAgICBTdHJpbmcgdGV4dFBvc2l0aW9uID0g
V2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKGlucHV0LCAmcG9zaXRpb24pOwotICAgICAgICAg
ICAgaWYgKHRleHRQb3NpdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBpbnQgbnVtYmVyOwor
ICAgICAgICAgICAgaWYgKCFXZWJWVFRQYXJzZXI6OmNvbGxlY3REaWdpdHNUb0ludChpbnB1dCwg
JnBvc2l0aW9uLCBudW1iZXIpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
aWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtOTg3LDEwICs5ODcsNiBAQCB2b2lkIFZUVEN1ZTo6c2V0Q3VlU2V0dGluZ3MoY29uc3QgU3Ry
aW5nCiAgICAgICAgICAgICAvLyA1LiBJZ25vcmluZyB0aGUgdHJhaWxpbmcgcGVyY2VudCBzaWdu
LCBpbnRlcnByZXQgdmFsdWUgYXMgYW4gaW50ZWdlciwgYW5kIGxldCBudW1iZXIgYmUgdGhhdCBu
dW1iZXIuCiAgICAgICAgICAgICAvLyA2LiBJZiBudW1iZXIgaXMgbm90IGluIHRoZSByYW5nZSAw
IOKJpCBudW1iZXIg4omkIDEwMCwgdGhlbiBqdW1wIHRvIHRoZSBzdGVwIGxhYmVsZWQgbmV4dCBz
ZXR0aW5nLgogICAgICAgICAgICAgLy8gTk9URTogdG9JbnQgaWdub3JlcyB0cmFpbGluZyBub24t
ZGlnaXQgY2hhcmFjdGVycywgc3VjaCBhcyAnJScuCi0gICAgICAgICAgICBib29sIHZhbGlkTnVt
YmVyOwotICAgICAgICAgICAgaW50IG51bWJlciA9IHRleHRQb3NpdGlvbi50b0ludCgmdmFsaWRO
dW1iZXIpOwotICAgICAgICAgICAgaWYgKCF2YWxpZE51bWJlcikKLSAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGlmIChudW1iZXIgPCAwIHx8IG51bWJlciA+IDEwMCkKICAgICAg
ICAgICAgICAgICBicmVhazsKIApAQCAtMTAwNCw4ICsxMDAwLDggQEAgdm9pZCBWVFRDdWU6OnNl
dEN1ZVNldHRpbmdzKGNvbnN0IFN0cmluZwogICAgICAgICAgICAgLy8gICAgcmFuZ2UgVSswMDMw
IERJR0lUIFpFUk8gKDApIHRvIFUrMDAzOSBESUdJVCBOSU5FICg5KSwgdGhlbiBqdW1wIHRvIHRo
ZSBzdGVwIGxhYmVsZWQgbmV4dCBzZXR0aW5nLgogICAgICAgICAgICAgLy8gMi4gSWYgdmFsdWUg
ZG9lcyBub3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGluIHRoZSByYW5nZSBVKzAw
MzAgRElHSVQgWkVSTyAoMCkgdG8gVSswMDM5IERJR0lUIAogICAgICAgICAgICAgLy8gICAgTklO
RSAoOSksIHRoZW4ganVtcCB0byB0aGUgc3RlcCBsYWJlbGVkIG5leHQgc2V0dGluZy4KLSAgICAg
ICAgICAgIFN0cmluZyBjdWVTaXplID0gV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKGlucHV0
LCAmcG9zaXRpb24pOwotICAgICAgICAgICAgaWYgKGN1ZVNpemUuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgaW50IG51bWJlcjsKKyAgICAgICAgICAgIGlmICghV2ViVlRUUGFyc2VyOjpjb2xsZWN0
RGlnaXRzVG9JbnQoaW5wdXQsICZwb3NpdGlvbiwgbnVtYmVyKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTEwMjEsMTAgKzEwMTcsNiBAQCB2b2lkIFZUVEN1ZTo6c2V0
Q3VlU2V0dGluZ3MoY29uc3QgU3RyaW5nCiAKICAgICAgICAgICAgIC8vIDUuIElnbm9yaW5nIHRo
ZSB0cmFpbGluZyBwZXJjZW50IHNpZ24sIGludGVycHJldCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLCBh
bmQgbGV0IG51bWJlciBiZSB0aGF0IG51bWJlci4KICAgICAgICAgICAgIC8vIDYuIElmIG51bWJl
ciBpcyBub3QgaW4gdGhlIHJhbmdlIDAg4omkIG51bWJlciDiiaQgMTAwLCB0aGVuIGp1bXAgdG8g
dGhlIHN0ZXAgbGFiZWxlZCBuZXh0IHNldHRpbmcuCi0gICAgICAgICAgICBib29sIHZhbGlkTnVt
YmVyOwotICAgICAgICAgICAgaW50IG51bWJlciA9IGN1ZVNpemUudG9JbnQoJnZhbGlkTnVtYmVy
KTsKLSAgICAgICAgICAgIGlmICghdmFsaWROdW1iZXIpCi0gICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBpZiAobnVtYmVyIDwgMCB8fCBudW1iZXIgPiAxMDApCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBh
cnNlci5jcHAJKHJldmlzaW9uIDE2NTg5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRUUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTIgKzUwLDM2IEBAIGNvbnN0
IFVDaGFyIGJvbSA9IDB4RkVGRjsKIGNvbnN0IGNoYXIqIGZpbGVJZGVudGlmaWVyID0gIldFQlZU
VCI7CiBjb25zdCB1bnNpZ25lZCBmaWxlSWRlbnRpZmllckxlbmd0aCA9IDY7CiAKLVN0cmluZyBX
ZWJWVFRQYXJzZXI6OmNvbGxlY3REaWdpdHMoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQq
IHBvc2l0aW9uKQorc3RhdGljIHVuc2lnbmVkIHNjYW5EaWdpdHMoY29uc3QgU3RyaW5nJiBpbnB1
dCwgdW5zaWduZWQqIHBvc2l0aW9uKQogewotICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOworICAg
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAqcG9zaXRpb247CiAgICAgd2hpbGUgKCpwb3NpdGlv
biA8IGlucHV0Lmxlbmd0aCgpICYmIGlzQVNDSUlEaWdpdChpbnB1dFsqcG9zaXRpb25dKSkKLSAg
ICAgICAgZGlnaXRzLmFwcGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7Ci0gICAgcmV0dXJuIGRp
Z2l0cy50b1N0cmluZygpOworICAgICAgICAoKnBvc2l0aW9uKSsrOworICAgIHJldHVybiAqcG9z
aXRpb24gLSBzdGFydFBvc2l0aW9uOworfQorICAgIAordW5zaWduZWQgV2ViVlRUUGFyc2VyOjpj
b2xsZWN0RGlnaXRzVG9JbnQoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9u
LCBpbnQmIG51bWJlcikKK3sKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gKnBvc2l0aW9u
OworICAgIHVuc2lnbmVkIG51bURpZ2l0cyA9IHNjYW5EaWdpdHMoaW5wdXQsIHBvc2l0aW9uKTsK
KyAgICBpZiAoIW51bURpZ2l0cykgeworICAgICAgICBudW1iZXIgPSAwOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBib29sIHZhbGlkTnVtYmVyOworICAgIGlmIChpbnB1dC5pczhC
aXQoKSkKKyAgICAgICAgbnVtYmVyID0gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGlucHV0LmNoYXJh
Y3RlcnM4KCkgKyBzdGFydFBvc2l0aW9uLCBudW1EaWdpdHMsICZ2YWxpZE51bWJlcik7CisgICAg
ZWxzZQorICAgICAgICBudW1iZXIgPSBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoaW5wdXQuY2hhcmFj
dGVyczE2KCkgKyBzdGFydFBvc2l0aW9uLCBudW1EaWdpdHMsICZ2YWxpZE51bWJlcik7CisKKyAg
ICAvLyBTaW5jZSB3ZSBrbm93IHRoYXQgc2NhbkRpZ2l0cyBvbmx5IHNjYW5uZWQgdmFsaWQgKEFT
Q0lJKSBkaWdpdHMgKGFuZAorICAgIC8vIGhlbmNlIHRoYXQncyB3aGF0IGdvdCBwYXNzZWQgdG8g
Y2hhcmFjdGVyc1RvSW50KCkpLCB0aGUgcmVtYWluaW5nCisgICAgLy8gZmFpbHVyZSBtb2RlIGZv
ciBjaGFyYWN0ZXJzVG9JbnQoKSBpcyBvdmVyZmxvdywgc28gaWYgfHZhbGlkTnVtYmVyfCBpcwor
ICAgIC8vIG5vdCB0cnVlLCB0aGVuIHNldCB8bnVtYmVyfCB0byB0aGUgbWF4aW11bSBpbnQgdmFs
dWUuCisgICAgaWYgKCF2YWxpZE51bWJlcikKKyAgICAgICAgbnVtYmVyID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICByZXR1cm4gbnVtRGlnaXRzOwogfQogCiBTdHJpbmcg
V2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCog
cG9zaXRpb24pCkBAIC03NiwyMSArMTAwLDIyIEBAIGZsb2F0IFdlYlZUVFBhcnNlcjo6cGFyc2VG
bG9hdFBlcmNlbnRhZ2UKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0KLSAg
ICBTdHJpbmdCdWlsZGVyIGZsb2F0TnVtYmVyQXNTdHJpbmc7Ci0gICAgZmxvYXROdW1iZXJBc1N0
cmluZy5hcHBlbmQoV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKHZhbHVlLCAmcG9zaXRpb24p
KTsKLQorICAgIHVuc2lnbmVkIGRpZ2l0c0JlZm9yZURvdCA9IHNjYW5EaWdpdHModmFsdWUsICZw
b3NpdGlvbik7CisgICAgdW5zaWduZWQgZGlnaXRzQWZ0ZXJEb3QgPSAwOwogICAgIGlmICh2YWx1
ZVtwb3NpdGlvbl0gPT0gJy4nKSB7Ci0gICAgICAgIGZsb2F0TnVtYmVyQXNTdHJpbmcuYXBwZW5k
KCIuIik7CiAgICAgICAgIHBvc2l0aW9uKys7CiAKLSAgICAgICAgZmxvYXROdW1iZXJBc1N0cmlu
Zy5hcHBlbmQoV2ViVlRUUGFyc2VyOjpjb2xsZWN0RGlnaXRzKHZhbHVlLCAmcG9zaXRpb24pKTsK
KyAgICAgICAgZGlnaXRzQWZ0ZXJEb3QgPSBzY2FuRGlnaXRzKHZhbHVlLCAmcG9zaXRpb24pOwog
ICAgIH0KLSAgICBmbG9hdCBudW1iZXIgPSBmbG9hdE51bWJlckFzU3RyaW5nLnRvU3RyaW5nKCku
dG9GbG9hdCgmaXNWYWxpZFNldHRpbmcpOwogCi0gICAgaWYgKGlzVmFsaWRTZXR0aW5nICYmIChu
dW1iZXIgPD0gMCB8fCBudW1iZXIgPj0gMTAwKSkKKyAgICAvLyBBdCBsZWFzdCBvbmUgZGlnaXQg
aXMgcmVxdWlyZWQKKyAgICBpZiAoIWRpZ2l0c0JlZm9yZURvdCAmJiAhZGlnaXRzQWZ0ZXJEb3Qp
IHsKICAgICAgICAgaXNWYWxpZFNldHRpbmcgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCisgICAgZmxvYXQgbnVtYmVyID0gdmFsdWUudG9GbG9hdCgpOworICAgIGlzVmFsaWRT
ZXR0aW5nID0gbnVtYmVyID49IDAgJiYgbnVtYmVyIDw9IDEwMDsKICAgICByZXR1cm4gbnVtYmVy
OwogfQogCkBAIC0xNDIsOCArMTY3LDggQEAgdm9pZCBXZWJWVFRQYXJzZXI6OmdldE5ld1JlZ2lv
bnMoVmVjdG9yPAogCiB2b2lkIFdlYlZUVFBhcnNlcjo6cGFyc2VCeXRlcyhjb25zdCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgLy8gNC44LjEwLjEzLjMgV0hBVFdHIFdlYlZU
VCBQYXJzZXIgYWxnb3JpdGhtLgotICAgIC8vIDEtMyAtIEluaXRpYWwgc2V0dXAuCisgICAgLy8g
V2ViVlRUIHBhcnNlciBhbGdvcml0aG0uICg1LjEgV2ViVlRUIGZpbGUgcGFyc2luZy4pCisgICAg
Ly8gU3RlcHMgMSAtIDMgLSBJbml0aWFsIHNldHVwLgogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0g
MDsKIAogICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewpAQCAtMTU1LDggKzE4MCw3IEBA
IHZvaWQgV2ViVlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIKIAogICAgICAgICBzd2l0
Y2ggKG1fc3RhdGUpIHsKICAgICAgICAgY2FzZSBJbml0aWFsOgotCi0gICAgICAgICAgICAvLyA0
LTEyIC0gQ29sbGVjdCB0aGUgZmlyc3QgbGluZSBhbmQgY2hlY2sgZm9yICJXRUJWVFQiLgorICAg
ICAgICAgICAgLy8gU3RlcHMgNCAtIDkgLSBDaGVjayBmb3IgYSB2YWxpZCBXZWJWVFQgc2lnbmF0
dXJlLgogICAgICAgICAgICAgaWYgKCFoYXNSZXF1aXJlZEZpbGVJZGVudGlmaWVyKGxpbmUpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+ZmlsZUZhaWxlZFRvUGFyc2UoKTsKQEAgLTE3MSwzNyArMTk1LDQ2IEBAIHZvaWQgV2Vi
VlRUUGFyc2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIKIAogICAgICAgICAgICAgaWYgKGxpbmUu
aXNFbXB0eSgpKSB7CiAjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQotICAgICAgICAgICAgICAg
IC8vIDEzLTE4IC0gQWxsb3cgYSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdFQlZU
VCBsaW5lLgorICAgICAgICAgICAgICAgIC8vIFN0ZXBzIDEwLTE0IC0gQWxsb3cgYSBoZWFkZXIg
KGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdFQlZUVCBsaW5lLgogICAgICAgICAgICAgICAgIGlm
IChtX2NsaWVudCAmJiBtX3JlZ2lvbkxpc3Quc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICBt
X2NsaWVudC0+bmV3UmVnaW9uc1BhcnNlZCgpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IElkOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gU3RlcCAxNiAtIExpbmUgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcgYW5kIGRvZXMg
bm90IGNvbnRhaW4gIi0tPiIuCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIElk
OgotICAgICAgICAgICAgLy8gMTktMjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWlu
YXRvcnMsIHRoZW4gaW5pdGlhbGl6ZSBuZXcgY3VlIHZhbHVlcy4KKyAgICAgICAgICAgIC8vIFN0
ZXAgMTctMjAgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRoZW4gaW5p
dGlhbGl6ZSBuZXcgY3VlIHZhbHVlcy4KICAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gU3RlcCAyMSAtIEN1ZSBj
cmVhdGlvbiAoc3RhcnQgYSBuZXcgY3VlKS4KICAgICAgICAgICAgIHJlc2V0Q3VlVmFsdWVzKCk7
CiAKLSAgICAgICAgICAgIC8vIDMwLTM5IC0gQ2hlY2sgaWYgdGhpcyBsaW5lIGNvbnRhaW5zIGFu
IG9wdGlvbmFsIGlkZW50aWZpZXIgb3IgdGltaW5nIGRhdGEuCisgICAgICAgICAgICAvLyBTdGVw
cyAyMiAtIDI1IC0gQ2hlY2sgaWYgdGhpcyBsaW5lIGNvbnRhaW5zIGFuIG9wdGlvbmFsIGlkZW50
aWZpZXIgb3IgdGltaW5nIGRhdGEuCiAgICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZUlk
KGxpbmUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBUaW1pbmdzQW5kU2V0
dGluZ3M6Ci0gICAgICAgICAgICAvLyA0MCAtIENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRp
bmdzLgorICAgICAgICAgICAgLy8gU3RlcHMgMjYgLSAyNyAtIERpc2NhcmQgY3VycmVudCBjdWUg
aWYgdGhlIGxpbmUgaXMgZW1wdHkuCisgICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBtX3N0YXRlID0gSWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0ZXBzIDI4IC0gMjkgLSBDb2xsZWN0IGN1
ZSB0aW1pbmdzIGFuZCBzZXR0aW5ncy4KICAgICAgICAgICAgIG1fc3RhdGUgPSBjb2xsZWN0VGlt
aW5nc0FuZFNldHRpbmdzKGxpbmUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBDdWVUZXh0OgotICAgICAgICAgICAgLy8gNDEtNTMgLSBDb2xsZWN0IHRoZSBjdWUgdGV4dCwg
Y3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRvIHRoZSBvdXRwdXQuCisgICAgICAgICAgICAvLyBT
dGVwcyAzMSAtIDQxIC0gQ29sbGVjdCB0aGUgY3VlIHRleHQsIGNyZWF0ZSBhIGN1ZSwgYW5kIGFk
ZCBpdCB0byB0aGUgb3V0cHV0LgogICAgICAgICAgICAgbV9zdGF0ZSA9IGNvbGxlY3RDdWVUZXh0
KGxpbmUpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCYWRDdWU6Ci0gICAg
ICAgICAgICAvLyA1NC02MiAtIENvbGxlY3QgYW5kIGRpc2NhcmQgdGhlIHJlbWFpbmluZyBjdWUu
CisgICAgICAgICAgICAvLyBTdGVwcyA0MiAtIDQ4IC0gRGlzY2FyZCBsaW5lcyB1bnRpbCBhbiBl
bXB0eSBsaW5lIG9yIGEgcG90ZW50aWFsIHRpbWluZyBsaW5lIGlzIHNlZW4uCiAgICAgICAgICAg
ICBtX3N0YXRlID0gaWdub3JlQmFkQ3VlKGxpbmUpOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAg
LTI0OCwyMyArMjgxLDIzIEBAIGJvb2wgV2ViVlRUUGFyc2VyOjpoYXNSZXF1aXJlZEZpbGVJZGVu
dGkKIHZvaWQgV2ViVlRUUGFyc2VyOjpjb2xsZWN0TWV0YWRhdGFIZWFkZXIoY29uc3QgU3RyaW5n
JiBsaW5lKQogewogI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKLSAgICAvLyA0LjEgRXh0ZW5z
aW9uIG9mIFdlYlZUVCBoZWFkZXIgcGFyc2luZyAoMTEgLSAxNSkKKyAgICAvLyBXZWJWVFQgaGVh
ZGVyIHBhcnNpbmcgKFdlYlZUVCBwYXJzZXIgYWxnb3JpdGhtIHN0ZXAgMTIpCiAgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcmVnaW9uSGVhZGVy
TmFtZSwgKCJSZWdpb24iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAK
LSAgICAvLyAxNS40IElmIGxpbmUgY29udGFpbnMgdGhlIGNoYXJhY3RlciAiOiIgKEEgVSswMDNB
IENPTE9OKSwgdGhlbiBzZXQgbWV0YWRhdGEncworICAgIC8vIFN0ZXAgMTIuNCBJZiBsaW5lIGNv
bnRhaW5zIHRoZSBjaGFyYWN0ZXIgIjoiIChBIFUrMDAzQSBDT0xPTiksIHRoZW4gc2V0IG1ldGFk
YXRhJ3MKICAgICAvLyBuYW1lIHRvIHRoZSBzdWJzdHJpbmcgb2YgbGluZSBiZWZvcmUgdGhlIGZp
cnN0ICI6IiBjaGFyYWN0ZXIgYW5kCiAgICAgLy8gbWV0YWRhdGEncyB2YWx1ZSB0byB0aGUgc3Vi
c3RyaW5nIGFmdGVyIHRoaXMgY2hhcmFjdGVyLgogICAgIGlmICghbGluZS5jb250YWlucygiOiIp
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBjb2xvblBvc2l0aW9uID0gbGluZS5m
aW5kKCI6Iik7Ci0gICAgbV9jdXJyZW50SGVhZGVyTmFtZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGNv
bG9uUG9zaXRpb24pOworICAgIFN0cmluZyBoZWFkZXJOYW1lID0gbGluZS5zdWJzdHJpbmcoMCwg
Y29sb25Qb3NpdGlvbik7CiAKLSAgICAvLyAxNS41IElmIG1ldGFkYXRhJ3MgbmFtZSBlcXVhbHMg
IlJlZ2lvbiI6Ci0gICAgaWYgKG1fY3VycmVudEhlYWRlck5hbWUgPT0gcmVnaW9uSGVhZGVyTmFt
ZSkgewotICAgICAgICBtX2N1cnJlbnRIZWFkZXJWYWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGNvbG9u
UG9zaXRpb24gKyAxLCBsaW5lLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgIC8vIDE1LjUuMSAtIDE1
LjUuOCBSZWdpb24gY3JlYXRpb246IExldCByZWdpb24gYmUgYSBuZXcgdGV4dCB0cmFjayByZWdp
b24gWy4uLl0KLSAgICAgICAgY3JlYXRlTmV3UmVnaW9uKCk7CisgICAgLy8gU3RlcCAxMi41IElm
IG1ldGFkYXRhJ3MgbmFtZSBlcXVhbHMgIlJlZ2lvbiI6CisgICAgaWYgKGhlYWRlck5hbWUgPT0g
cmVnaW9uSGVhZGVyTmFtZSkgeworICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSBsaW5lLnN1
YnN0cmluZyhjb2xvblBvc2l0aW9uICsgMSwgbGluZS5sZW5ndGgoKSAtIDEpOworICAgICAgICAv
LyBTdGVwcyAxMi41LjEgLSAxMi41LjExIFJlZ2lvbiBjcmVhdGlvbjogTGV0IHJlZ2lvbiBiZSBh
IG5ldyB0ZXh0IHRyYWNrIHJlZ2lvbiBbLi4uXQorICAgICAgICBjcmVhdGVOZXdSZWdpb24oaGVh
ZGVyVmFsdWUpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxpbmUpOwpAQCAtMjgx
LDEyICszMTQsMTIgQEAgV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Ywog
CiBXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjb2xsZWN0VGltaW5nc0Fu
ZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgbGluZSkKIHsKLSAgICAvLyA0LjguMTAuMTMuMyBDb2xs
ZWN0IFdlYlZUVCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MuCi0gICAgLy8gMS0zIC0gTGV0IGlu
cHV0IGJlIHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkIGFuZCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIg
aW50byBpbnB1dAorICAgIC8vIENvbGxlY3QgV2ViVlRUIGN1ZSB0aW1pbmdzIGFuZCBzZXR0aW5n
cy4gKDUuMyBXZWJWVFQgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdzIHBhcnNpbmcuKQorICAgIC8v
IFN0ZXBzIDEgLSAzIC0gTGV0IGlucHV0IGJlIHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkIGFuZCBw
b3NpdGlvbiBiZSBhIHBvaW50ZXIgaW50byBpbnB1dAogICAgIHVuc2lnbmVkIHBvc2l0aW9uID0g
MDsKICAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOwogCi0gICAgLy8gNC01IC0g
Q29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAuIElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5k
IHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBzdGFy
dCB0aW1lIGJlIHRoZSBjb2xsZWN0ZWQgdGltZS4KKyAgICAvLyBTdGVwcyA0IC0gNSAtIENvbGxl
Y3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0aGF0IGZhaWxzLCB0aGVuIGFib3J0IGFuZCByZXR1
cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQgY3VlJ3MgdGV4dCB0cmFjayBjdWUgc3RhcnQgdGlt
ZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUuCiAgICAgbV9jdXJyZW50U3RhcnRUaW1lID0gY29sbGVj
dFRpbWVTdGFtcChsaW5lLCAmcG9zaXRpb24pOwogICAgIGlmIChtX2N1cnJlbnRTdGFydFRpbWUg
PT0gbWFsZm9ybWVkVGltZSkKICAgICAgICAgcmV0dXJuIEJhZEN1ZTsKQEAgLTI5NSw3ICszMjgs
NyBAQCBXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjCiAgICAgCiAgICAg
c2tpcFdoaXRlU3BhY2UobGluZSwgJnBvc2l0aW9uKTsKIAotICAgIC8vIDYtOSAtIElmIHRoZSBu
ZXh0IHRocmVlIGNoYXJhY3RlcnMgYXJlIG5vdCAiLS0+IiwgYWJvcnQgYW5kIHJldHVybiBmYWls
dXJlLgorICAgIC8vIFN0ZXBzIDYgLSA5IC0gSWYgdGhlIG5leHQgdGhyZWUgY2hhcmFjdGVycyBh
cmUgbm90ICItLT4iLCBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUuCiAgICAgaWYgKGxpbmUuZmlu
ZCgiLS0+IiwgcG9zaXRpb24pID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm4gQmFkQ3VlOwog
ICAgIHBvc2l0aW9uICs9IDM7CkBAIC0zMDQsMTMgKzMzNywxMyBAQCBXZWJWVFRQYXJzZXI6OlBh
cnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpjCiAgICAgCiAgICAgc2tpcFdoaXRlU3BhY2UobGluZSwg
JnBvc2l0aW9uKTsKIAotICAgIC8vIDEwLTExIC0gQ29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAu
IElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5kIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2Us
IGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBlbmQgdGltZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUu
CisgICAgLy8gU3RlcHMgMTAgLSAxMSAtIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0
aGF0IGZhaWxzLCB0aGVuIGFib3J0IGFuZCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQg
Y3VlJ3MgdGV4dCB0cmFjayBjdWUgZW5kIHRpbWUgYmUgdGhlIGNvbGxlY3RlZCB0aW1lLgogICAg
IG1fY3VycmVudEVuZFRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKGxpbmUsICZwb3NpdGlvbik7CiAg
ICAgaWYgKG1fY3VycmVudEVuZFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKICAgICAgICAgcmV0dXJu
IEJhZEN1ZTsKICAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOwogCi0gICAgLy8g
MTIgLSBQYXJzZSB0aGUgV2ViVlRUIHNldHRpbmdzIGZvciB0aGUgY3VlIChjb25kdWN0ZWQgaW4g
VGV4dFRyYWNrQ3VlKS4KKyAgICAvLyBTdGVwIDEyIC0gUGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5n
cyBmb3IgdGhlIGN1ZSAoY29uZHVjdGVkIGluIFRleHRUcmFja0N1ZSkuCiAgICAgbV9jdXJyZW50
U2V0dGluZ3MgPSBsaW5lLnN1YnN0cmluZyhwb3NpdGlvbiwgbGluZS5sZW5ndGgoKS0xKTsKICAg
ICByZXR1cm4gQ3VlVGV4dDsKIH0KQEAgLTMzOCw4ICszNzEsOCBAQCBXZWJWVFRQYXJzZXI6OlBh
cnNlU3RhdGUgV2ViVlRUUGFyc2VyOjppCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFdl
YlZUVFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZyb21DdWVUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCkKIHsKICAgICAvLyBDdWUgdGV4dCBwcm9jZXNzaW5nIGJhc2VkIG9uCi0gICAgLy8g
NC44LjEwLjEzLjQgV2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMgYW5kCi0gICAgLy8gNC44
LjEwLjEzLjUgV2ViVlRUIGN1ZSB0ZXh0IERPTSBjb25zdHJ1Y3Rpb24gcnVsZXMuCisgICAgLy8g
NS40IFdlYlZUVCBjdWUgdGV4dCBwYXJzaW5nIHJ1bGVzLCBhbmQKKyAgICAvLyA1LjUgV2ViVlRU
IGN1ZSB0ZXh0IERPTSBjb25zdHJ1Y3Rpb24gcnVsZXMuCiAKICAgICBBU1NFUlQobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHRvRG9jdW1lbnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKQEAgLTM2NSw5ICszOTgsNiBA
QCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFdlYlZUVFBhcnNlCiAKIHZvaWQgV2ViVlRU
UGFyc2VyOjpjcmVhdGVOZXdDdWUoKQogewotICAgIGlmICghbV9jdXJyZW50Q29udGVudC5sZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUmVmUHRyPFdlYlZUVEN1ZURhdGE+IGN1ZSA9
IFdlYlZUVEN1ZURhdGE6OmNyZWF0ZSgpOwogICAgIGN1ZS0+c2V0U3RhcnRUaW1lKG1fY3VycmVu
dFN0YXJ0VGltZSk7CiAgICAgY3VlLT5zZXRFbmRUaW1lKG1fY3VycmVudEVuZFRpbWUpOwpAQCAt
MzkwLDE1ICs0MjAsMTYgQEAgdm9pZCBXZWJWVFRQYXJzZXI6OnJlc2V0Q3VlVmFsdWVzKCkKIH0K
IAogI2lmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKLXZvaWQgV2ViVlRUUGFyc2VyOjpjcmVhdGVO
ZXdSZWdpb24oKQordm9pZCBXZWJWVFRQYXJzZXI6OmNyZWF0ZU5ld1JlZ2lvbihjb25zdCBTdHJp
bmcmIGhlYWRlclZhbHVlKQogewotICAgIGlmICghbV9jdXJyZW50SGVhZGVyVmFsdWUubGVuZ3Ro
KCkpCisgICAgaWYgKGhlYWRlclZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gU3RlcHMgMTIuNS4xIC0gMTIuNS45IC0gQ29uc3RydWN0IGFuZCBpbml0aWFsaXplIGEg
V2ViVlRUIFJlZ2lvbiBvYmplY3QuCiAgICAgUmVmUHRyPFRleHRUcmFja1JlZ2lvbj4gcmVnaW9u
ID0gVGV4dFRyYWNrUmVnaW9uOjpjcmVhdGUoKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0g
ICAgcmVnaW9uLT5zZXRSZWdpb25TZXR0aW5ncyhtX2N1cnJlbnRIZWFkZXJWYWx1ZSk7CisgICAg
cmVnaW9uLT5zZXRSZWdpb25TZXR0aW5ncyhoZWFkZXJWYWx1ZSk7CiAKLSAgICAvLyAxNS41LjEw
IElmIHRoZSB0ZXh0IHRyYWNrIGxpc3Qgb2YgcmVnaW9ucyByZWdpb25zIGNvbnRhaW5zIGEgcmVn
aW9uCisgICAgLy8gU3RlcCAxMi41LjEwIElmIHRoZSB0ZXh0IHRyYWNrIGxpc3Qgb2YgcmVnaW9u
cyByZWdpb25zIGNvbnRhaW5zIGEgcmVnaW9uCiAgICAgLy8gd2l0aCB0aGUgc2FtZSByZWdpb24g
aWRlbnRpZmllciB2YWx1ZSBhcyByZWdpb24sIHJlbW92ZSB0aGF0IHJlZ2lvbi4KICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fcmVnaW9uTGlzdC5zaXplKCk7ICsraSkKICAgICAgICAgaWYg
KG1fcmVnaW9uTGlzdFtpXS0+aWQoKSA9PSByZWdpb24tPmlkKCkpIHsKQEAgLTQwNiw3MyArNDM3
LDYzIEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpjcmVhdGVOZXdSZWdpb24oKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgIC8vIFN0ZXAgMTIuNS4xMQogICAgIG1fcmVnaW9uTGlz
dC5hcHBlbmQocmVnaW9uKTsKIH0KICNlbmRpZgogCiBkb3VibGUgV2ViVlRUUGFyc2VyOjpjb2xs
ZWN0VGltZVN0YW1wKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQogewot
ICAgIC8vIDQuOC4xMC4xMy4zIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLgotICAgIC8vIDEt
NCAtIEluaXRpYWwgY2hlY2tzLCBsZXQgbW9zdCBzaWduaWZpY2FudCB1bml0cyBiZSBtaW51dGVz
LgorICAgIC8vIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wICg1LjMgV2ViVlRUIGN1ZSB0aW1p
bmdzIGFuZCBzZXR0aW5ncyBwYXJzaW5nLikKKyAgICAvLyBTdGVwcyAxIC0gNCAtIEluaXRpYWwg
Y2hlY2tzLCBsZXQgbW9zdCBzaWduaWZpY2FudCB1bml0cyBiZSBtaW51dGVzLgogICAgIGVudW0g
TW9kZSB7IG1pbnV0ZXMsIGhvdXJzIH07CiAgICAgTW9kZSBtb2RlID0gbWludXRlczsKLSAgICBp
ZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWypwb3Np
dGlvbl0pKQotICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKIAotICAgIC8vIDUtNiAtIENv
bGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIDAtOS4KLSAgICBTdHJpbmcg
ZGlnaXRzMSA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9zaXRpb24pOwotICAgIGludCB2YWx1ZTEg
PSBkaWdpdHMxLnRvSW50KCk7Ci0KLSAgICAvLyA3IC0gSWYgbm90IDIgY2hhcmFjdGVycyBvciB2
YWx1ZSBpcyBncmVhdGVyIHRoYW4gNTksIGludGVycHJldCBhcyBob3Vycy4KLSAgICBpZiAoZGln
aXRzMS5sZW5ndGgoKSAhPSAyIHx8IHZhbHVlMSA+IDU5KQorICAgIC8vIFN0ZXBzIDUgLSA3IC0g
Q29sbGVjdCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgMC05LgorICAgIC8vIElm
IG5vdCAyIGNoYXJhY3RlcnMgb3IgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDU5LCBpbnRlcnByZXQg
YXMgaG91cnMuCisgICAgaW50IHZhbHVlMTsKKyAgICB1bnNpZ25lZCB2YWx1ZTFEaWdpdHMgPSBj
b2xsZWN0RGlnaXRzVG9JbnQobGluZSwgcG9zaXRpb24sIHZhbHVlMSk7CisgICAgaWYgKCF2YWx1
ZTFEaWdpdHMpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgIGlmICh2YWx1ZTFE
aWdpdHMgIT0gMiB8fCB2YWx1ZTEgPiA1OSkKICAgICAgICAgbW9kZSA9IGhvdXJzOwogCi0gICAg
Ly8gOC0xMiAtIENvbGxlY3QgdGhlIG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICc6JyAobXVz
dCBiZSAyIGNoYXJzKS4KKyAgICAvLyBTdGVwcyA4IC0gMTEgLSBDb2xsZWN0IHRoZSBuZXh0IHNl
cXVlbmNlIG9mIDAtOSBhZnRlciAnOicgKG11c3QgYmUgMiBjaGFycykuCiAgICAgaWYgKCpwb3Np
dGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0gJzonKQogICAg
ICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKLSAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVu
Z3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWygqcG9zaXRpb24pXSkpCi0gICAgICAgIHJldHVy
biBtYWxmb3JtZWRUaW1lOwotICAgIFN0cmluZyBkaWdpdHMyID0gY29sbGVjdERpZ2l0cyhsaW5l
LCBwb3NpdGlvbik7Ci0gICAgaW50IHZhbHVlMiA9IGRpZ2l0czIudG9JbnQoKTsKLSAgICBpZiAo
ZGlnaXRzMi5sZW5ndGgoKSAhPSAyKSAKKyAgICBpbnQgdmFsdWUyOworICAgIGlmIChjb2xsZWN0
RGlnaXRzVG9JbnQobGluZSwgcG9zaXRpb24sIHZhbHVlMikgIT0gMikKICAgICAgICAgcmV0dXJu
IG1hbGZvcm1lZFRpbWU7CiAKLSAgICAvLyAxMyAtIERldGVjdCB3aGV0aGVyIHRoaXMgdGltZXN0
YW1wIGluY2x1ZGVzIGhvdXJzLgorICAgIC8vIFN0ZXAgMTIgLSBEZXRlY3Qgd2hldGhlciB0aGlz
IHRpbWVzdGFtcCBpbmNsdWRlcyBob3Vycy4KICAgICBpbnQgdmFsdWUzOwogICAgIGlmIChtb2Rl
ID09IGhvdXJzIHx8ICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGxpbmVbKnBvc2l0aW9u
XSA9PSAnOicpKSB7CiAgICAgICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBs
aW5lWygqcG9zaXRpb24pKytdICE9ICc6JykKICAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRU
aW1lOwotICAgICAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlE
aWdpdChsaW5lWypwb3NpdGlvbl0pKQorICAgICAgICBpZiAoY29sbGVjdERpZ2l0c1RvSW50KGxp
bmUsIHBvc2l0aW9uLCB2YWx1ZTMpICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVk
VGltZTsKLSAgICAgICAgU3RyaW5nIGRpZ2l0czMgPSBjb2xsZWN0RGlnaXRzKGxpbmUsIHBvc2l0
aW9uKTsKLSAgICAgICAgaWYgKGRpZ2l0czMubGVuZ3RoKCkgIT0gMikKLSAgICAgICAgICAgIHJl
dHVybiBtYWxmb3JtZWRUaW1lOwotICAgICAgICB2YWx1ZTMgPSBkaWdpdHMzLnRvSW50KCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgdmFsdWUzID0gdmFsdWUyOwogICAgICAgICB2YWx1ZTIgPSB2
YWx1ZTE7CiAgICAgICAgIHZhbHVlMSA9IDA7CiAgICAgfQogCi0gICAgLy8gMTQtMTkgLSBDb2xs
ZWN0IG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICcuJyAobXVzdCBiZSAzIGNoYXJzKS4KKyAg
ICAvLyBTdGVwcyAxMyAtIDE3IC0gQ29sbGVjdCBuZXh0IHNlcXVlbmNlIG9mIDAtOSBhZnRlciAn
LicgKG11c3QgYmUgMyBjaGFycykuCiAgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgp
IHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0gJy4nKQogICAgICAgICByZXR1cm4gbWFsZm9ybWVk
VGltZTsKLSAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdp
dChsaW5lWypwb3NpdGlvbl0pKQotICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKLSAgICBT
dHJpbmcgZGlnaXRzNCA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9zaXRpb24pOwotICAgIGlmIChk
aWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgaW50IHZhbHVlNDsKKyAgICBpZiAoY29sbGVjdERp
Z2l0c1RvSW50KGxpbmUsIHBvc2l0aW9uLCB2YWx1ZTQpICE9IDMpCiAgICAgICAgIHJldHVybiBt
YWxmb3JtZWRUaW1lOwotICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7CiAgICAgaWYg
KHZhbHVlMiA+IDU5IHx8IHZhbHVlMyA+IDU5KQogICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGlt
ZTsKIAotICAgIC8vIDIwLTIxIC0gQ2FsY3VsYXRlIHJlc3VsdC4KKyAgICAvLyBTdGVwcyAxOCAt
IDE5IC0gQ2FsY3VsYXRlIHJlc3VsdC4KICAgICByZXR1cm4gKHZhbHVlMSAqIHNlY29uZHNQZXJI
b3VyKSArICh2YWx1ZTIgKiBzZWNvbmRzUGVyTWludXRlKSArIHZhbHVlMyArICh2YWx1ZTQgKiBz
ZWNvbmRzUGVyTWlsbGlzZWNvbmQpOwogfQogCiBzdGF0aWMgV2ViVlRUTm9kZVR5cGUgdG9rZW5U
b05vZGVUeXBlKFdlYlZUVFRva2VuJiB0b2tlbikKIHsKLSAgICBzd2l0Y2ggKHRva2VuLm5hbWUo
KS5zaXplKCkpIHsKKyAgICBzd2l0Y2ggKHRva2VuLm5hbWUoKS5sZW5ndGgoKSkgewogICAgIGNh
c2UgMToKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKVswXSA9PSAnYycpCiAgICAgICAgICAgICBy
ZXR1cm4gV2ViVlRUTm9kZVR5cGVDbGFzczsKQEAgLTUwMSwxMyArNTIyLDExIEBAIHN0YXRpYyBX
ZWJWVFROb2RlVHlwZSB0b2tlblRvTm9kZVR5cGUoV2UKIAogdm9pZCBXZWJWVFRQYXJzZXI6OmNv
bnN0cnVjdFRyZWVGcm9tVG9rZW4oRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIFF1YWxpZmll
ZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgQXRvbWljU3RyaW5nKG1fdG9rZW4ubmFtZSgpKSwgeGh0
bWxOYW1lc3BhY2VVUkkpOwotCiAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvaHRtbDUvd2VidnR0
LyN3ZWJ2dHQtY3VlLXRleHQtZG9tLWNvbnN0cnVjdGlvbi1ydWxlcwogCiAgICAgc3dpdGNoICht
X3Rva2VuLnR5cGUoKSkgewogICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBlczo6Q2hhcmFjdGVyOiB7
Ci0gICAgICAgIFN0cmluZyBjb250ZW50KG1fdG9rZW4uY2hhcmFjdGVycygpKTsgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIDhiaXQgaWYgcG9zc2libGUuCisgICAgICAgIFN0cmluZyBjb250ZW50
ID0gbV90b2tlbi5jaGFyYWN0ZXJzKCkudG9TdHJpbmcoKTsKICAgICAgICAgUmVmUHRyPFRleHQ+
IGNoaWxkID0gVGV4dDo6Y3JlYXRlKCpkb2N1bWVudCwgY29udGVudCk7CiAgICAgICAgIG1fY3Vy
cmVudE5vZGUtPnBhcnNlckFwcGVuZENoaWxkKGNoaWxkKTsKICAgICAgICAgYnJlYWs7CkBAIC01
MTgsMTMgKzUzNywxMyBAQCB2b2lkIFdlYlZUVFBhcnNlcjo6Y29uc3RydWN0VHJlZUZyb21Ub2tl
CiAgICAgICAgIGlmIChub2RlVHlwZSAhPSBXZWJWVFROb2RlVHlwZU5vbmUpCiAgICAgICAgICAg
ICBjaGlsZCA9IFdlYlZUVEVsZW1lbnQ6OmNyZWF0ZShub2RlVHlwZSwgKmRvY3VtZW50KTsKICAg
ICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBpZiAobV90b2tlbi5jbGFzc2VzKCkuc2l6
ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwg
QXRvbWljU3RyaW5nKG1fdG9rZW4uY2xhc3NlcygpKSk7CisgICAgICAgICAgICBpZiAoIW1fdG9r
ZW4uY2xhc3NlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmli
dXRlKGNsYXNzQXR0ciwgbV90b2tlbi5jbGFzc2VzKCkudG9BdG9taWNTdHJpbmcoKSk7CiAKICAg
ICAgICAgICAgIGlmIChjaGlsZC0+d2ViVlRUTm9kZVR5cGUoKSA9PSBXZWJWVFROb2RlVHlwZVZv
aWNlKQotICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRBdHRyaWJ1dGUoV2ViVlRURWxlbWVudDo6
dm9pY2VBdHRyaWJ1dGVOYW1lKCksIEF0b21pY1N0cmluZyhtX3Rva2VuLmFubm90YXRpb24oKSkp
OworICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRBdHRyaWJ1dGUoV2ViVlRURWxlbWVudDo6dm9p
Y2VBdHRyaWJ1dGVOYW1lKCksIG1fdG9rZW4uYW5ub3RhdGlvbigpLnRvQXRvbWljU3RyaW5nKCkp
OwogICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPndlYlZUVE5vZGVUeXBlKCkgPT0gV2ViVlRU
Tm9kZVR5cGVMYW5ndWFnZSkgewotICAgICAgICAgICAgICAgIG1fbGFuZ3VhZ2VTdGFjay5hcHBl
bmQoQXRvbWljU3RyaW5nKG1fdG9rZW4uYW5ub3RhdGlvbigpKSk7CisgICAgICAgICAgICAgICAg
bV9sYW5ndWFnZVN0YWNrLmFwcGVuZChtX3Rva2VuLmFubm90YXRpb24oKS50b0F0b21pY1N0cmlu
ZygpKTsKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmlidXRlKFdlYlZUVEVsZW1lbnQ6
OmxhbmdBdHRyaWJ1dGVOYW1lKCksIG1fbGFuZ3VhZ2VTdGFjay5sYXN0KCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKCFtX2xhbmd1YWdlU3RhY2suaXNFbXB0eSgpKQpAQCAtNTQ2
LDcgKzU2NSw3IEBAIHZvaWQgV2ViVlRUUGFyc2VyOjpjb25zdHJ1Y3RUcmVlRnJvbVRva2UKICAg
ICB9CiAgICAgY2FzZSBXZWJWVFRUb2tlblR5cGVzOjpUaW1lc3RhbXBUYWc6IHsKICAgICAgICAg
dW5zaWduZWQgcG9zaXRpb24gPSAwOwotICAgICAgICBTdHJpbmcgY2hhcmFjdGVyc1N0cmluZyhT
dHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShtX3Rva2VuLmNoYXJhY3RlcnMoKSkpOwor
ICAgICAgICBTdHJpbmcgY2hhcmFjdGVyc1N0cmluZyA9IG1fdG9rZW4uY2hhcmFjdGVycygpLnRv
U3RyaW5nKCk7CiAgICAgICAgIGRvdWJsZSB0aW1lID0gY29sbGVjdFRpbWVTdGFtcChjaGFyYWN0
ZXJzU3RyaW5nLCAmcG9zaXRpb24pOwogICAgICAgICBpZiAodGltZSAhPSBtYWxmb3JtZWRUaW1l
KQogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQXBwZW5kQ2hpbGQoUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpjcmVhdGUoKmRvY3VtZW50LCAidGltZXN0YW1wIiwgY2hhcmFjdGVyc1N0
cmluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCShy
ZXZpc2lvbiAxNjU4OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMyBDYWJsZSBUZWxldmlzaW9uIExhYnMsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtOTMsMTAgKzk0LDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9zZXR0aW5nczsKIH07CiAKLWNsYXNzIFdlYlZUVFBhcnNlciB7CitjbGFzcyBXZWJWVFRQYXJz
ZXIgZmluYWwgewogcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZUVFBhcnNlcigpIHsgfQotCiAg
ICAgZW51bSBQYXJzZVN0YXRlIHsKICAgICAgICAgSW5pdGlhbCwKICAgICAgICAgSGVhZGVyLApA
QCAtMTI5LDggKzEyOCw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8gVSswMDIwIFNQQUNFIGNoYXJh
Y3RlcnMgb3IgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OICh0YWIpIGNoYXJhY3RlcnMuCiAg
ICAgICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCc7CiAgICAgfQotICAgIHN0YXRpYyBT
dHJpbmcgY29sbGVjdERpZ2l0cyhjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOworICAgIHN0YXRp
YyB1bnNpZ25lZCBjb2xsZWN0RGlnaXRzVG9JbnQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqIHBv
c2l0aW9uLCBpbnQmIG51bWJlcik7CiAgICAgc3RhdGljIFN0cmluZyBjb2xsZWN0V29yZChjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCopOworICAgIHN0YXRpYyBkb3VibGUgY29sbGVjdFRpbWVTdGFt
cChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwogCiAjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05T
KQogICAgIC8vIFVzZWZ1bCBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgcGVyY2VudGFnZSBzZXR0aW5n
cy4KQEAgLTE0OSw3ICsxNDksNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRG9jdW1lbnRGcmFnbWVudEZyb21DdWVUZXh0KGNvbnN0
IFN0cmluZyYpOwotICAgIGRvdWJsZSBjb2xsZWN0VGltZVN0YW1wKGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkKik7CiAKIHByb3RlY3RlZDoKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CkBAIC0xNjcsMTcgKzE2NiwxNSBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBjb2xsZWN0TWV0YWRhdGFIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAjaWYgRU5BQkxF
KFdFQlZUVF9SRUdJT05TKQotICAgIHZvaWQgY3JlYXRlTmV3UmVnaW9uKCk7CisgICAgdm9pZCBj
cmVhdGVOZXdSZWdpb24oY29uc3QgU3RyaW5nJiBoZWFkZXJWYWx1ZSk7CiAjZW5kaWYKIAotICAg
IHZvaWQgc2tpcFdoaXRlU3BhY2UoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKKyAgICBzdGF0
aWMgdm9pZCBza2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOworCiAgICAg
U3RyaW5nIGNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkKik7CiAKICAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tVG9rZW4oRG9jdW1lbnQq
KTsKIAotICAgIFN0cmluZyBtX2N1cnJlbnRIZWFkZXJOYW1lOwotICAgIFN0cmluZyBtX2N1cnJl
bnRIZWFkZXJWYWx1ZTsKLQogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKICAgICBTdHJpbmcg
bV9jdXJyZW50SWQ7CiAgICAgZG91YmxlIG1fY3VycmVudFN0YXJ0VGltZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuLmgJKHJldmlzaW9uIDE2NTg5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTMzLDYgKzM0LDggQEAKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBXZWJWVFRUb2tlblR5cGVzIHsKQEAgLTUyLDcgKzU1LDYgQEAgY2xhc3MgV2ViVlRUVG9rZW4g
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHR5cGVkZWYgV2Vi
VlRUVG9rZW5UeXBlcyBUeXBlOwotICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8VUNoYXIsIDEwMjQ+
IERhdGFWZWN0b3I7IC8vIEZJWE1FOiBJcyB0aGlzIHRvbyBsYXJnZSBmb3IgV2ViVlRUPwogCiAg
ICAgV2ViVlRUVG9rZW4oKSB7IGNsZWFyKCk7IH0KIApAQCAtNjUsMTIgKzY3LDEyIEBAIHB1Ymxp
YzoKIAogICAgIFR5cGU6OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCi0g
ICAgY29uc3QgRGF0YVZlY3RvciYgbmFtZSgpIGNvbnN0CisgICAgU3RyaW5nQnVpbGRlciYgbmFt
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9kYXRhOwogICAgIH0KIAotICAgIGNvbnN0IERh
dGFWZWN0b3ImIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIFN0cmluZ0J1aWxkZXImIGNoYXJhY3Rl
cnMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpDaGFyYWN0ZXIgfHwg
bV90eXBlID09IFR5cGU6OlRpbWVzdGFtcFRhZyk7CiAgICAgICAgIHJldHVybiBtX2RhdGE7CkBA
IC05NiwxMCArOTgsMTAgQEAgcHVibGljOgogICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rl
cik7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRUb0NoYXJhY3Rlcihjb25zdCBWZWN0b3I8TENo
YXIsIDMyPiYgY2hhcmFjdGVycykKKyAgICB2b2lkIGFwcGVuZFRvQ2hhcmFjdGVyKGNvbnN0IFN0
cmluZ0J1aWxkZXImIGNoYXJhY3RlcnMpCiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09
IFR5cGU6OkNoYXJhY3Rlcik7Ci0gICAgICAgIG1fZGF0YS5hcHBlbmRWZWN0b3IoY2hhcmFjdGVy
cyk7CisgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVycyk7CiAgICAgfQogCiAgICAgdm9p
ZCBiZWdpbkVtcHR5U3RhcnRUYWcoKQpAQCAtMTQ5LDExICsxNTEsMTEgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0YXJ0VGFnKTsKICAgICAgICAgaWYgKCFtX2Ns
YXNzZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9jbGFzc2VzLmFwcGVuZCgnICcpOwotICAg
ICAgICBtX2NsYXNzZXMuYXBwZW5kVmVjdG9yKG1fY3VycmVudEJ1ZmZlcik7CisgICAgICAgIG1f
Y2xhc3Nlcy5hcHBlbmQobV9jdXJyZW50QnVmZmVyKTsKICAgICAgICAgbV9jdXJyZW50QnVmZmVy
LmNsZWFyKCk7CiAgICAgfQogICAgIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIGNsYXNzZXMoKSBj
b25zdAorICAgIFN0cmluZ0J1aWxkZXImIGNsYXNzZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fY2xhc3NlczsKICAgICB9CkBAIC0xNjcsMTEgKzE2OSwxMSBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0YXJ0VGFnKTsKICAgICAgICAgbV9hbm5v
dGF0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1fYW5ub3RhdGlvbi5hcHBlbmRWZWN0b3IobV9jdXJy
ZW50QnVmZmVyKTsKKyAgICAgICAgbV9hbm5vdGF0aW9uLmFwcGVuZChtX2N1cnJlbnRCdWZmZXIp
OwogICAgICAgICBtX2N1cnJlbnRCdWZmZXIuY2xlYXIoKTsKICAgICB9CiAgICAgCi0gICAgY29u
c3QgRGF0YVZlY3RvciYgYW5ub3RhdGlvbigpIGNvbnN0CisgICAgU3RyaW5nQnVpbGRlciYgYW5u
b3RhdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9hbm5vdGF0aW9uOwogICAgIH0KQEAg
LTIwMCwxMCArMjAyLDEwIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgVHlwZTo6VHlwZSBtX3R5
cGU7Ci0gICAgRGF0YVZlY3RvciBtX2RhdGE7Ci0gICAgRGF0YVZlY3RvciBtX2Fubm90YXRpb247
Ci0gICAgRGF0YVZlY3RvciBtX2NsYXNzZXM7Ci0gICAgRGF0YVZlY3RvciBtX2N1cnJlbnRCdWZm
ZXI7CisgICAgU3RyaW5nQnVpbGRlciBtX2RhdGE7CisgICAgU3RyaW5nQnVpbGRlciBtX2Fubm90
YXRpb247CisgICAgU3RyaW5nQnVpbGRlciBtX2NsYXNzZXM7CisgICAgU3RyaW5nQnVpbGRlciBt
X2N1cnJlbnRCdWZmZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1dlYlZUVFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxNjU4OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC00MiwyMiArNDMsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2RlZmluZSBXRUJWVFRfQkVH
SU5fU1RBVEUoc3RhdGVOYW1lKSBCRUdJTl9TVEFURShXZWJWVFRUb2tlbml6ZXJTdGF0ZSwgc3Rh
dGVOYW1lKQogI2RlZmluZSBXRUJWVFRfQURWQU5DRV9UTyhzdGF0ZU5hbWUpIEFEVkFOQ0VfVE8o
V2ViVlRUVG9rZW5pemVyU3RhdGUsIHN0YXRlTmFtZSkKIAotV2ViVlRUVG9rZW5pemVyOjpXZWJW
VFRUb2tlbml6ZXIoKQotICAgIDogbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvcih0aGlzKQordGVt
cGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgorQUxXQVlTX0lOTElORSBib29sIGVxdWFs
TGl0ZXJhbChjb25zdCBTdHJpbmdCdWlsZGVyJiBzLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylb
Y2hhcmFjdGVyc0NvdW50XSkKIHsKLSAgICByZXNldCgpOworICAgIHJldHVybiBXVEY6OmVxdWFs
KHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwgY2hhcmFjdGVy
c0NvdW50IC0gMSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5s
aW5lIGJvb2wgdmVjdG9yRXF1YWxzU3RyaW5nKGNvbnN0IFZlY3RvcjxDaGFyYWN0ZXJUeXBlLCAz
Mj4mIHZlY3RvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCitXZWJWVFRUb2tlbml6ZXI6OldlYlZU
VFRva2VuaXplcigpCisgICAgOiBtX2lucHV0U3RyZWFtUHJlcHJvY2Vzc29yKHRoaXMpCiB7Ci0g
ICAgaWYgKHZlY3Rvci5zaXplKCkgIT0gc3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICByZXR1cm4gZXF1YWwoc3RyaW5nLmltcGwoKSwgdmVjdG9yLmRhdGEoKSwgdmVjdG9y
LnNpemUoKSk7CisgICAgcmVzZXQoKTsKIH0KIAogdm9pZCBXZWJWVFRUb2tlbml6ZXI6OnJlc2V0
KCkKQEAgLTg2LDggKzgxLDcgQEAgYm9vbCBXZWJWVFRUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdt
ZW50ZQogICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjYykp
OwogICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRXNjYXBlU3RhdGUpOwogICAgICAgICB9
IGVsc2UgaWYgKGNjID09ICc8JykgewotICAgICAgICAgICAgaWYgKG1fdG9rZW4tPnR5cGUoKSA9
PSBXZWJWVFRUb2tlblR5cGVzOjpVbmluaXRpYWxpemVkCi0gICAgICAgICAgICAgICAgfHwgdmVj
dG9yRXF1YWxzU3RyaW5nPFVDaGFyPihtX3Rva2VuLT5jaGFyYWN0ZXJzKCksIGVtcHR5U3RyaW5n
KCkpKQorICAgICAgICAgICAgaWYgKG1fdG9rZW4tPnR5cGUoKSA9PSBXZWJWVFRUb2tlblR5cGVz
OjpVbmluaXRpYWxpemVkIHx8IG1fdG9rZW4tPmNoYXJhY3RlcnMoKS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oVGFnU3RhdGUpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRU
b2tlbml6ZXJTdGF0ZTo6VGFnU3RhdGUpOwpAQCAtMTAyLDE3ICs5NiwxNyBAQCBib29sIFdlYlZU
VFRva2VuaXplcjo6bmV4dFRva2VuKFNlZ21lbnRlCiAKICAgICBXRUJWVFRfQkVHSU5fU1RBVEUo
RXNjYXBlU3RhdGUpIHsKICAgICAgICAgaWYgKGNjID09ICc7JykgewotICAgICAgICAgICAgaWYg
KHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiZhbXAiKSkKKyAgICAgICAgICAgIGlmIChl
cXVhbExpdGVyYWwobV9idWZmZXIsICImYW1wIikpCiAgICAgICAgICAgICAgICAgYnVmZmVyQ2hh
cmFjdGVyKCcmJyk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2ZWN0b3JFcXVhbHNTdHJpbmcobV9i
dWZmZXIsICImbHQiKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsTGl0ZXJhbChtX2J1ZmZl
ciwgIiZsdCIpKQogICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3RlcignPCcpOwotICAgICAg
ICAgICAgZWxzZSBpZiAodmVjdG9yRXF1YWxzU3RyaW5nKG1fYnVmZmVyLCAiJmd0IikpCisgICAg
ICAgICAgICBlbHNlIGlmIChlcXVhbExpdGVyYWwobV9idWZmZXIsICImZ3QiKSkKICAgICAgICAg
ICAgICAgICBidWZmZXJDaGFyYWN0ZXIoJz4nKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZlY3Rv
ckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiZscm0iKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGVx
dWFsTGl0ZXJhbChtX2J1ZmZlciwgIiZscm0iKSkKICAgICAgICAgICAgICAgICBidWZmZXJDaGFy
YWN0ZXIobGVmdFRvUmlnaHRNYXJrKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZlY3RvckVxdWFs
c1N0cmluZyhtX2J1ZmZlciwgIiZybG0iKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsTGl0
ZXJhbChtX2J1ZmZlciwgIiZybG0iKSkKICAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIo
cmlnaHRUb0xlZnRNYXJrKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZlY3RvckVxdWFsc1N0cmlu
ZyhtX2J1ZmZlciwgIiZuYnNwIikpCisgICAgICAgICAgICBlbHNlIGlmIChlcXVhbExpdGVyYWwo
bV9idWZmZXIsICImbmJzcCIpKQogICAgICAgICAgICAgICAgIGJ1ZmZlckNoYXJhY3Rlcihub0Jy
ZWFrU3BhY2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKHN0YXRpY19jYXN0PExDaGFyPihjYykpOwpAQCAtMTI3LDcgKzEyMSw3IEBAIGJvb2wg
V2ViVlRUVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVudGUKICAgICAgICAgICAgIG1fdG9rZW4t
PmFwcGVuZFRvQ2hhcmFjdGVyKG1fYnVmZmVyKTsKICAgICAgICAgICAgIHJldHVybiBlbWl0RW5k
T2ZGaWxlKHNvdXJjZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXZlY3Rv
ckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiYiKSkKKyAgICAgICAgICAgIGlmICghZXF1YWxMaXRl
cmFsKG1fYnVmZmVyLCAiJiIpKQogICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hh
cmFjdGVyKG1fYnVmZmVyKTsKICAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CiAgICAgICAg
ICAgICBXRUJWVFRfQURWQU5DRV9UTyhEYXRhU3RhdGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5oCShyZXZpc2lvbiAxNjU4OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQpAQCAtMzUsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3Iu
aCIKICNpbmNsdWRlICJXZWJWVFRUb2tlbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDMsNyArMTA1LDcgQEAgcHJp
dmF0ZToKICAgICBXZWJWVFRUb2tlbiogbV90b2tlbjsKICAgICBXZWJWVFRUb2tlbml6ZXJTdGF0
ZTo6U3RhdGUgbV9zdGF0ZTsKIAotICAgIFZlY3RvcjxMQ2hhciwgMzI+IG1fYnVmZmVyOworICAg
IFN0cmluZ0J1aWxkZXIgbV9idWZmZXI7CiAKICAgICAvLyA6Ly93d3cud2hhdHdnLm9yZy9zcGVj
cy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbQog
ICAgIElucHV0U3RyZWFtUHJlcHJvY2Vzc29yPFdlYlZUVFRva2VuaXplcj4gbV9pbnB1dFN0cmVh
bVByZXByb2Nlc3NvcjsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTkzNikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTAzLTE5ICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIE1pc2Mu
IFdlYlZUVCBVcGRhdGVzIGZyb20gQmxpbmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNZXJnZWQgZnJvbSBCbGluayAocGF0Y2ggYnkgdmNhcmJ1bmVA
Y2hyb21pdW0ub3JnKToKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL2JsaW5rLysvZmI2MmIyYjU0OTQ0YmQxOTAyNjE5MmMwNDlhMWRiMjUwNzU2ZmMx
MgorICAgICAgICBodHRwOi8vY3JidWcuY29tLzQwMzIzMDAzCisgICAgICAgIGh0dHBzOi8vY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzI5MTc2ZmIwYjM5NGE5N2U4
NWY0ZGFiYzA3ZTE4MzI5ZjNjZWFlNDEKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS81NDQ2MzAw
MgorICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxp
bmsvKy8yOTQ3NmY4MzlhMDhjYjE3YzVhM2ZjNzEzZjdlNDU0ZTdjZWE5YzYwCisgICAgICAgIGh0
dHA6Ly9jcmJ1Zy5jb20vNTU4NTMwMDIKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvYmEyMzc4ZWY4NzNlNzg2Y2YyOTM3MDM0ZTAxMjY2
OWNkZDM3ZGZlOAorICAgICAgICBodHRwOi8vY3JidWcuY29tLzY1MzQzMDAzCisgICAgICAgIGh0
dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzE5MTViOWFh
MWJiYTQ1YWViZjI4NTMxYjQwYWU2MjdlY2Y5YTNkNTkKKyAgICAgICAgaHR0cDovL2NyYnVnLmNv
bS82MjgzMzAwNQorICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vYmxpbmsvKy9lYTQ2ZGJkMGYxZjI5Nzc5YTFjZDRmNTliMTkzNjFiODAzZjA5YTliCisg
ICAgICAgIGh0dHA6Ly9jcmJ1Zy5jb20vNjQyNzMwMTMKKyAgICAgICAgaHR0cHM6Ly9jaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvOWViNGJiNmI2MjczNTdiYjk0ZDY2
Mzg2YTQxMjNlYzAwNGNjY2ZjNAorICAgICAgICBodHRwOi8vY3JidWcuY29tLzEwMTUxMzAwMgor
ICAgICAgICBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsv
Ky8xOTJhODQzYjMyZWFmYjc3YmY5MmM1MGVjNTBkMzM0YmE5MzUwMjhhCisgICAgICAgIGh0dHA6
Ly9jcmJ1Zy5jb20vMTAyNDAzMDAyCisgICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzE1ZjllZmNjOTUyZmNmNzMxODRlMjhmYjlkYjc5NjMz
YzFmYTY2NTMKKyAgICAgICAgaHR0cDovL2NyYnVnLmNvbS8xMDQ0NDMwMDIKKyAgICAgICAgaHR0
cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvNzRmZDY2YjQ1
MWE0NjQ2ODNmN2NiNzQ4ODU1YjE3NDBhNTRiMmMxNgorICAgICAgICBodHRwOi8vY3JidWcuY29t
Lzc1MjQzMDA0CisKKyAgICAgICAgKiBtZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2dHQvdGMwMzAt
aW50ZXJzcGVyc2VkLW5vbi1jdWUudnR0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS90cmFjay90
cmFjay13ZWJ2dHQtdGMwMjctZW1wdHktY3VlLWV4cGVjdGVkLnR4dDogTWFya2Ugb25lIHRlc3Qg
YXMgZXhwZWN0ZWQgdG8gZmFpbCwgc2luY2UKKyAgICAgICAgdGhlIHRlc3QgKGluY29ycmVjdGx5
KSBleHBlY3RzIHRvIGZhaWwgb24gZW1wdHkgY3Vlcy4gVGhlIHRlc3Qgd2lsbCBiZSB1cGRhdGVk
IGluIGEgZnV0dXJlIHBhdGNoLgorICAgICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0dC10
YzAzMC1pbnRlcnNwZXJzZWQtbm9uLWN1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IG1lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0dC10YzAzMC1pbnRlcnNwZXJzZWQtbm9uLWN1ZS5odG1s
OiBBZGRlZC4KKwogMjAxNC0wMy0xOSAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgog
CiAgICAgICAgIEltcGxlbWVudCBpc1BvaW50SW5QYXRoIGFuZCBpc1BvaW50SW5TdHJva2Ugd2l0
aCBQYXRoMkQgYXJndW1lbnQKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLXdl
YnZ0dC10YzAyNy1lbXB0eS1jdWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0dC10YzAyNy1lbXB0eS1jdWUtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxNjU4OTgpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2
dHQtdGMwMjctZW1wdHktY3VlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIFRlc3RzIHRoYXQgZW1wdHkgY3VlcyBhcmUgZGlzY2FyZGVkLgogCiAKLUVYUEVDVEVE
ICh2aWRlby50ZXh0VHJhY2tzWzBdLmN1ZXMubGVuZ3RoID09ICcwJykgT0sKK0VYUEVDVEVEICh2
aWRlby50ZXh0VHJhY2tzWzBdLmN1ZXMubGVuZ3RoID09ICcwJyksIE9CU0VSVkVEICczJyBGQUlM
CiBFTkQgT0YgVEVTVAogCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2
dHQtdGMwMzAtaW50ZXJzcGVyc2VkLW5vbi1jdWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLXdlYnZ0dC10YzAzMC1pbnRlcnNwZXJzZWQt
bm9uLWN1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90
cmFjay90cmFjay13ZWJ2dHQtdGMwMzAtaW50ZXJzcGVyc2VkLW5vbi1jdWUtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIHRoYXQgYW4gZW1wdHkgbGlu
ZSBhZnRlciBhbiBpZGVudGlmaWVyIGxpbmUgZGlzY2FyZHMgdGhlIGN1cnJlbnQgY3VlIGFuZCBy
ZXN0YXJ0cyB0aGUgY3VlIGxvb3AuCisKKworCisqKiogVGVzdGluZyB0ZXh0IHRyYWNrIDAKK0VY
UEVDVEVEIChjdWVzLmxlbmd0aCA9PSAnMicpIE9LCitFWFBFQ1RFRCAoY3Vlc1swXS50ZXh0ID09
ICdGaXJzdCcpIE9LCitFWFBFQ1RFRCAoY3Vlc1sxXS50ZXh0ID09ICdTZWNvbmQnKSBPSworRU5E
IE9GIFRFU1QKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2std2VidnR0LXRj
MDMwLWludGVyc3BlcnNlZC1ub24tY3VlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
bWVkaWEvdHJhY2svdHJhY2std2VidnR0LXRjMDMwLWludGVyc3BlcnNlZC1ub24tY3VlLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay13ZWJ2dHQtdGMw
MzAtaW50ZXJzcGVyc2VkLW5vbi1jdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUw
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYt
OCIgLz4KKworICAgICAgICA8c2NyaXB0IHNyYz0uLi9tZWRpYS1maWxlLmpzPjwvc2NyaXB0Pgor
ICAgICAgICA8c2NyaXB0IHNyYz0uLi92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgorICAgICAgICA8
c2NyaXB0PgorCisgICAgICAgICAgICBudW1iZXJPZlRyYWNrVGVzdHMgPSAxOworCisgICAgICAg
ICAgICBmdW5jdGlvbiB0cmFja0xvYWRlZCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZUcmFja3NMb2FkZWQrKzsKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZU
cmFja3NMb2FkZWQgPT0gbnVtYmVyT2ZUcmFja1Rlc3RzKSB7CisgICAgICAgICAgICAgICAgICAg
IHRlc3RUcmFjazAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIHRlc3RUcmFjazAoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAyLAorICAgICAg
ICAgICAgICAgICAgICB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAidGV4
dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpcnN0JywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NlY29uZCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB0ZXN0Q3Vl
cygwLCBleHBlY3RlZCk7CisKKyAgICAgICAgICAgICAgICBhbGxUZXN0c0VuZGVkKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxv
YWQ9ImVuYWJsZUFsbFRleHRUcmFja3MoKSI+CisgICAgICA8cD5UZXN0cyB0aGF0IGFuIGVtcHR5
IGxpbmUgYWZ0ZXIgYW4gaWRlbnRpZmllciBsaW5lIGRpc2NhcmRzIHRoZSBjdXJyZW50IGN1ZSBh
bmQgcmVzdGFydHMgdGhlIGN1ZSBsb29wLjwvcD4KKyAgICAgICAgPHZpZGVvPgorICAgICAgICAg
ICAgPHRyYWNrIHNyYz0iY2FwdGlvbnMtd2VidnR0L3RjMDMwLWludGVyc3BlcnNlZC1ub24tY3Vl
LnZ0dCIgb25sb2FkPSJ0cmFja0xvYWRlZCgpIj4KKyAgICAgICAgPC92aWRlbz4KKyAgICA8L2Jv
ZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVz
dHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L3RjMDMwLWludGVyc3BlcnNlZC1ub24tY3Vl
LnZ0dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay9jYXB0aW9ucy13ZWJ2
dHQvdGMwMzAtaW50ZXJzcGVyc2VkLW5vbi1jdWUudnR0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvbWVkaWEvdHJhY2svY2FwdGlvbnMtd2VidnR0L3RjMDMwLWludGVyc3BlcnNlZC1ub24t
Y3VlLnZ0dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK1dFQlZUVAorCiswMDowMC4w
MDAgLS0+IDAwOjAxLjAwMAorRmlyc3QKKworU3RyYXkgSWQgb3Igb3RoZXIgbm9uLWN1ZSBjb250
ZW50CisKKzAwOjAyLjAwMCAtLT4gMDA6MDMuMDAwCitTZWNvbmQK
</data>
<flag name="review"
          id="251482"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>