<?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>215702</bug_id>
          
          <creation_ts>2020-08-20 09:52:28 -0700</creation_ts>
          <short_desc>[webkitcorepy] Add subprocess_utils.run</short_desc>
          <delta_ts>2020-08-20 12:42:56 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=214378</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>jlewis3</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1681716</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-20 09:52:28 -0700</bug_when>
    <thetext>Python 3&apos;s subprocess.run API is great. We should have it in Python 2 as well so we can write modern Python code compatible with both versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681717</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-20 09:52:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/67487751&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681719</commentid>
    <comment_count>2</comment_count>
      <attachid>406938</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-20 09:56:06 -0700</bug_when>
    <thetext>Created attachment 406938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681749</commentid>
    <comment_count>3</comment_count>
      <attachid>406938</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-08-20 11:32:56 -0700</bug_when>
    <thetext>Comment on attachment 406938
Patch

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

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/subprocess_utils.py:39
&gt; +        input = kwargs.pop(&apos;input&apos;, None)
&gt; +        capture_output = kwargs.pop(&apos;capture_output&apos;, False)
&gt; +        timeout = kwargs.pop(&apos;timeout&apos;, None)
&gt; +        check = kwargs.pop(&apos;check&apos;, False)

Other than timeout, is there any reason we want to extract other variables out of **kwargs? It looks like the same defaults in the subprocess.run

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/subprocess_utils.py:54
&gt; +                return subprocess.run(*popenargs, input=input, capture_output=capture_output, timeout=timeout, check=check, **kwargs)
&gt; +            return subprocess.run(
&gt; +                *popenargs,
&gt; +                input=input,
&gt; +                capture_output=capture_output,
&gt; +                timeout=min(timeout or sys.maxsize, int(math.ceil(difference))),
&gt; +                check=check,
&gt; +                **kwargs)

So the only difference is timeout, maybe we can simplify this by doing:
if difference:
    timeout = min(timeout or sys.maxsize, int(math.ceil(difference)))
return subprocess.run(*popenargs, input=input, capture_output=capture_output, timeout=timeout, check=check, **kwargs)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681754</commentid>
    <comment_count>4</comment_count>
      <attachid>406938</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-20 11:58:22 -0700</bug_when>
    <thetext>Comment on attachment 406938
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/subprocess_utils.py:39
&gt;&gt; +        check = kwargs.pop(&apos;check&apos;, False)
&gt; 
&gt; Other than timeout, is there any reason we want to extract other variables out of **kwargs? It looks like the same defaults in the subprocess.run

Was copying from the function subprocess.run declaration, turns out, no, we don&apos;t need to extract the other variables. I thought we needed it to get the correct defaults, for some reason, but we don&apos;t.

Will Remove.

&gt;&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/subprocess_utils.py:54
&gt;&gt; +                **kwargs)
&gt; 
&gt; So the only difference is timeout, maybe we can simplify this by doing:
&gt; if difference:
&gt;     timeout = min(timeout or sys.maxsize, int(math.ceil(difference)))
&gt; return subprocess.run(*popenargs, input=input, capture_output=capture_output, timeout=timeout, check=check, **kwargs)

Thanks for the suggestion! Much cleaner!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681759</commentid>
    <comment_count>5</comment_count>
      <attachid>406952</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-08-20 12:01:36 -0700</bug_when>
    <thetext>Created attachment 406952
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681767</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-20 12:32:08 -0700</bug_when>
    <thetext>Committed r265957: &lt;https://trac.webkit.org/changeset/265957&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406952.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681774</commentid>
    <comment_count>7</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2020-08-20 12:42:56 -0700</bug_when>
    <thetext>r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406938</attachid>
            <date>2020-08-20 09:56:06 -0700</date>
            <delta_ts>2020-08-20 12:01:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215702-20200820095605.patch</filename>
            <type>text/plain</type>
            <size>12176</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NTk1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3IEBACisyMDIwLTA4LTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgc3VicHJvY2Vzc191dGlscy5ydW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTcwMgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNjc0ODc3NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUHl0aG9uIDMncyBzdWJwcm9jZXNzLnJ1biBBUEkgaXMg
bXVjaCBiZXR0ZXIgdGhhbiB0aGUgbXVsdGlwbGUgc3VicHJvY2VzcyBBUElzIHRoYXQgUHl0aG9u
IDIgcHJvdmlkZXMuIFJhdGhlciB0aGFuCisgICAgICAgIHJlcXVpcmluZyBuZXcgc2NyaXB0cyBh
bmQgbGlicmFyaWVzIHRvIGJlIGZ1bGx5IFB5dGhvbiAzLCB3ZSBzaG91bGQgcHJvdmlkZSBhIFB5
dGhvbiAyIEFQSSBpZGVudGljYWwgdG8gc3VicHJvY2Vzcy5ydW4uCisKKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvUkVBRE1FLm1kOiBEb2N1bWVudCB1c2FnZSBvZiBz
dWJwcm9jZXNzX3V0aWxzLnJ1bi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5OiBFeHBvcnQgc3VicHJvY2Vzc191dGlscywg
YnVtcCBtaW5vciB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvc3VicHJvY2Vzc191dGlscy5weTogQWRkZWQuCisgICAgICAgIChy
dW4pOiBEZWNsYXJlIFB5dGhvbiAyIHZlcnNpb24gb2YgUHl0aG9uIDMncyBzdWJwcm9jZXNzLnJ1
biBBUEkuCisgICAgICAgIChUaW1lb3V0RXhwaXJlZCk6IERpdHRvLgorICAgICAgICAoQ29tcGxl
dGVkUHJvY2Vzcyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvdGVzdHMvc3VicHJvY2Vzc191dGlsc191bml0dGVzdC5weTogQWRk
ZWQuCisgICAgICAgIChTdWJwcm9jZXNzVXRpbHMpOgorICAgICAgICAoU3VicHJvY2Vzc1V0aWxz
LnRlc3RfcnVuKToKKyAgICAgICAgKFN1YnByb2Nlc3NVdGlscy50ZXN0X3J1bl9leGl0KToKKyAg
ICAgICAgKFN1YnByb2Nlc3NVdGlscy50ZXN0X3J1bl90aW1lb3V0KToKKyAgICAgICAgKFN1YnBy
b2Nlc3NVdGlscy50ZXN0X3J1bl90aW1lb3V0X2NvbnRleHQpOgorCiAyMDIwLTA4LTIwICBKb25h
dGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0Y29yZXB5
XSBNb3ZlIFRpbWVvdXQgdG8gd2Via2l0Y29yZXB5IChQYXJ0IDEpCkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvUkVBRE1FLm1kCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHJldmlzaW9uIDI2NTk0
MykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9SRUFETUUubWQJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDMgKzY3LDEyIEBAIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBU
aW1lb3V0CiB3aXRoIFRpbWVvdXQoNSwgaGFuZGxlcj1SdW50aW1lRXJyb3IoJ0V4Y2VlZGVkIDUg
c2Vjb25kIHRpbWVvdXQnKSk6CiAgICAgdGltZS5zbGVlcCg0KQogYGBgCisKK3N1YnByb2Nlc3Mu
cnVuIHJlcGxhY2VtZW50OgorYGBgCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0Y29yZXB5IGlt
cG9ydCBydW4KKworcmVzdWx0ID0gcnVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3ByaW50KCJt
ZXNzYWdlIiknXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04JykKK2BgYApJ
bmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9f
X2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjU5NDMpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTEgQEAgbG9nLmFkZEhhbmRsZXIoTnVsbEhh
bmRsZXIoKSkKIAogZnJvbSB3ZWJraXRjb3JlcHkudmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJv
bSB3ZWJraXRjb3JlcHkuc3RyaW5nX3V0aWxzIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTywgVW5p
Y29kZUlPLCB1bmljb2RlCi1mcm9tIHdlYmtpdGNvcmVweS5vdXRwdXRfY2FwdHVyZSBpbXBvcnQg
TG9nZ2VyQ2FwdHVyZSwgT3V0cHV0Q2FwdHVyZSwgT3V0cHV0RHVwbGljYXRlCiBmcm9tIHdlYmtp
dGNvcmVweS50aW1lb3V0IGltcG9ydCBUaW1lb3V0Citmcm9tIHdlYmtpdGNvcmVweS5zdWJwcm9j
ZXNzX3V0aWxzIGltcG9ydCBUaW1lb3V0RXhwaXJlZCwgQ29tcGxldGVkUHJvY2VzcywgcnVuCitm
cm9tIHdlYmtpdGNvcmVweS5vdXRwdXRfY2FwdHVyZSBpbXBvcnQgTG9nZ2VyQ2FwdHVyZSwgT3V0
cHV0Q2FwdHVyZSwgT3V0cHV0RHVwbGljYXRlCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDIsIDEw
KQordmVyc2lvbiA9IFZlcnNpb24oMCwgMywgMCkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0b2lu
c3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZvID4g
KDMsIDApOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS9zdWJwcm9jZXNzX3V0aWxzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvc3VicHJvY2Vzc191dGlscy5weQko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L3N1YnByb2Nlc3NfdXRpbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG1hdGgK
K2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgVGltZW91dCwgc3RyaW5nX3V0aWxzCisKK2lmIHN5cy52ZXJzaW9uX2lu
Zm8gPiAoMywgMCk6CisgICAgVGltZW91dEV4cGlyZWQgPSBzdWJwcm9jZXNzLlRpbWVvdXRFeHBp
cmVkCisgICAgQ29tcGxldGVkUHJvY2VzcyA9IHN1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzcwor
CisgICAgIyBBbGxvd3MgbmF0aXZlIGludGVncmF0aW9uIHdpdGggdGhlIFRpbWVvdXQgY29udGV4
dAorICAgIGRlZiBydW4oKnBvcGVuYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpbnB1dCA9IGt3
YXJncy5wb3AoJ2lucHV0JywgTm9uZSkKKyAgICAgICAgY2FwdHVyZV9vdXRwdXQgPSBrd2FyZ3Mu
cG9wKCdjYXB0dXJlX291dHB1dCcsIEZhbHNlKQorICAgICAgICB0aW1lb3V0ID0ga3dhcmdzLnBv
cCgndGltZW91dCcsIE5vbmUpCisgICAgICAgIGNoZWNrID0ga3dhcmdzLnBvcCgnY2hlY2snLCBG
YWxzZSkKKworICAgICAgICB3aXRoIFRpbWVvdXQuRGlzYWJsZUFsYXJtKCk6CisgICAgICAgICAg
ICBjdXJyZW50X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgVGltZW91dC5jaGVjayhj
dXJyZW50X3RpbWU9Y3VycmVudF90aW1lKQorICAgICAgICAgICAgZGlmZmVyZW5jZSA9IFRpbWVv
dXQuZGlmZmVyZW5jZShjdXJyZW50X3RpbWU9Y3VycmVudF90aW1lKQorCisgICAgICAgICAgICBp
ZiBub3QgZGlmZmVyZW5jZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5ydW4o
KnBvcGVuYXJncywgaW5wdXQ9aW5wdXQsIGNhcHR1cmVfb3V0cHV0PWNhcHR1cmVfb3V0cHV0LCB0
aW1lb3V0PXRpbWVvdXQsIGNoZWNrPWNoZWNrLCAqKmt3YXJncykKKyAgICAgICAgICAgIHJldHVy
biBzdWJwcm9jZXNzLnJ1bigKKyAgICAgICAgICAgICAgICAqcG9wZW5hcmdzLAorICAgICAgICAg
ICAgICAgIGlucHV0PWlucHV0LAorICAgICAgICAgICAgICAgIGNhcHR1cmVfb3V0cHV0PWNhcHR1
cmVfb3V0cHV0LAorICAgICAgICAgICAgICAgIHRpbWVvdXQ9bWluKHRpbWVvdXQgb3Igc3lzLm1h
eHNpemUsIGludChtYXRoLmNlaWwoZGlmZmVyZW5jZSkpKSwKKyAgICAgICAgICAgICAgICBjaGVj
az1jaGVjaywKKyAgICAgICAgICAgICAgICAqKmt3YXJncykKKworZWxzZToKKyAgICBjbGFzcyBU
aW1lb3V0RXhwaXJlZChFeGNlcHRpb24pOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY21k
LCB0aW1lb3V0LCBvdXRwdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5j
bWQgPSBjbWQKKyAgICAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgICAg
IHNlbGYub3V0cHV0ID0gb3V0cHV0CisgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IHN0ZGVycgor
CisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJDb21tYW5k
ICd7fScgdGltZWQgb3V0IGFmdGVyIHt9IHNlY29uZHMiLmZvcm1hdChzZWxmLmNtZCwgc2VsZi50
aW1lb3V0KQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgc3Rkb3V0KHNlbGYpOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYub3V0cHV0CisKKyAgICAgICAgQHN0ZG91dC5zZXR0ZXIK
KyAgICAgICAgZGVmIHN0ZG91dChzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLm91dHB1
dCA9IHZhbHVlCisKKyAgICBjbGFzcyBDb21wbGV0ZWRQcm9jZXNzKG9iamVjdCk6CisgICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCByZXR1cm5jb2RlLCBzdGRvdXQ9Tm9uZSwgc3RkZXJy
PU5vbmUpOgorICAgICAgICAgICAgc2VsZi5hcmdzID0gYXJncworICAgICAgICAgICAgc2VsZi5y
ZXR1cm5jb2RlID0gcmV0dXJuY29kZQorICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBzdGRvdXQK
KyAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCisKKyAgICAgICAgZGVmIF9fcmVwcl9f
KHNlbGYpOgorICAgICAgICAgICAgYXJncyA9IFsnYXJncz17IXJ9Jy5mb3JtYXQoc2VsZi5hcmdz
KSwgJ3JldHVybmNvZGU9eyFyfScuZm9ybWF0KHNlbGYucmV0dXJuY29kZSldCisgICAgICAgICAg
ICBpZiBzZWxmLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVu
ZCgnc3Rkb3V0PXshcn0nLmZvcm1hdChzZWxmLnN0ZG91dCkpCisgICAgICAgICAgICBpZiBzZWxm
LnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZCgnc3RkZXJy
PXshcn0nLmZvcm1hdChzZWxmLnN0ZGVycikpCisgICAgICAgICAgICByZXR1cm4gInt9KHt9KSIu
Zm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sICcsICcuam9pbihhcmdzKSkKKworICAgICAgICBk
ZWYgY2hlY2tfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29k
ZToKKyAgICAgICAgICAgICAgICByYWlzZSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcihz
ZWxmLnJldHVybmNvZGUsIHNlbGYuYXJncywgc2VsZi5zdGRvdXQpCisKKyAgICAjIFRha2VuIGRp
cmVjdGx5IGZyb20gUHl0aG9uIDMncyBzdWJwcm9jZXNzIGxpYnJhcnksIHNpbmNlIHRoZSBydW4o
Li4uKSBBUEkgaXMgc3VwZXJpb3IgdG8gUHl0aG9uIDIncyBzdWJwcm9jZXNzIEFQSQorICAgIGRl
ZiBydW4oKnBvcGVuYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpbnB1dCA9IGt3YXJncy5wb3Ao
J2lucHV0JywgTm9uZSkKKyAgICAgICAgY2FwdHVyZV9vdXRwdXQgPSBrd2FyZ3MucG9wKCdjYXB0
dXJlX291dHB1dCcsIEZhbHNlKQorICAgICAgICB0aW1lb3V0ID0ga3dhcmdzLnBvcCgndGltZW91
dCcsIE5vbmUpCisgICAgICAgIGNoZWNrID0ga3dhcmdzLnBvcCgnY2hlY2snLCBGYWxzZSkKKwor
ICAgICAgICBlbmNvZGluZyA9IGt3YXJncy5wb3AoJ2VuY29kaW5nJywgTm9uZSkKKyAgICAgICAg
ZXJyb3JzID0ga3dhcmdzLnBvcCgnZXJyb3JzJywgTm9uZSkKKyAgICAgICAgaWYgZW5jb2Rpbmcg
b3IgZXJyb3JzOgorICAgICAgICAgICAgZGVmIGRlY29kZShzdHJpbmcpOgorICAgICAgICAgICAg
ICAgIHJldHVybiBzdHJpbmdfdXRpbHMuZGVjb2RlKHN0cmluZywgZW5jb2Rpbmc9ZW5jb2Rpbmcg
b3IgJ3V0Zi04JywgZXJyb3JzPWVycm9ycyBvciAnc3RyaWN0JykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGRlZiBkZWNvZGUoc3RyaW5nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Ry
aW5nCisKKyAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiAnc3Rk
aW4nIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRpbiBh
bmQgaW5wdXQgYXJndW1lbnRzIG1heSBub3QgYm90aCBiZSB1c2VkLicpCisgICAgICAgICAgICBr
d2FyZ3NbJ3N0ZGluJ10gPSBzdWJwcm9jZXNzLlBJUEUKKworICAgICAgICBpZiBjYXB0dXJlX291
dHB1dDoKKyAgICAgICAgICAgIGlmICgnc3Rkb3V0JyBpbiBrd2FyZ3MpIG9yICgnc3RkZXJyJyBp
biBrd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhbmQg
c3RkZXJyIGFyZ3VtZW50cyBtYXkgbm90IGJlIHVzZWQgd2l0aCBjYXB0dXJlX291dHB1dC4nKQor
ICAgICAgICAgICAga3dhcmdzWydzdGRvdXQnXSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICAg
ICAga3dhcmdzWydzdGRlcnInXSA9IHN1YnByb2Nlc3MuUElQRQorCisgICAgICAgIHByb2Nlc3Mg
PSBzdWJwcm9jZXNzLlBvcGVuKCpwb3BlbmFyZ3MsICoqa3dhcmdzKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpZiB0aW1lb3V0OgorICAgICAgICAgICAgICAgIHdpdGggVGltZW91dCh0aW1l
b3V0KToKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwcm9jZXNzLmNvbW11
bmljYXRlKGlucHV0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGRvdXQs
IHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQpCisKKyAgICAgICAgZXhjZXB0IFRp
bWVvdXQuRXhjZXB0aW9uOgorICAgICAgICAgICAgcHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAg
IHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICByYWlz
ZSBUaW1lb3V0RXhwaXJlZChwb3BlbmFyZ3NbMF0sIHRpbWVvdXQsIG91dHB1dD1kZWNvZGUoc3Rk
b3V0KSwgc3RkZXJyPWRlY29kZShzdGRlcnIpKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlv
bjoKKyAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICByYWlzZQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgcHJvY2Vzcy53YWl0KCkKKworICAgICAgICByZXRjb2Rl
ID0gcHJvY2Vzcy5wb2xsKCkKKyAgICAgICAgaWYgY2hlY2sgYW5kIHJldGNvZGU6CisgICAgICAg
ICAgICByYWlzZSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBwb3BlbmFy
Z3NbMF0sIG91dHB1dD1kZWNvZGUoc3Rkb3V0KSwgc3RkZXJyPWRlY29kZShzdGRlcnIpKQorICAg
ICAgICByZXR1cm4gQ29tcGxldGVkUHJvY2Vzcyhwb3BlbmFyZ3NbMF0sIHJldGNvZGUsIGRlY29k
ZShzdGRvdXQpLCBkZWNvZGUoc3RkZXJyKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvc3VicHJvY2Vzc191dGlsc191bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L3Rlc3RzL3N1YnByb2Nlc3NfdXRpbHNfdW5pdHRlc3QucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVw
eS90ZXN0cy9zdWJwcm9jZXNzX3V0aWxzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
IyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBPdXRwdXRD
YXB0dXJlLCBydW4sIFRpbWVvdXRFeHBpcmVkLCBUaW1lb3V0CisKKworY2xhc3MgU3VicHJvY2Vz
c1V0aWxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKKyAg
ICAgICAgcmVzdWx0ID0gcnVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3ByaW50KCJtZXNzYWdl
IiknXSwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgwLCByZXN1bHQucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChyZXN1bHQuc3Rkb3V0LCAnbWVzc2FnZVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZXN1bHQuc3RkZXJyLCAnJykKKworICAgIGRlZiB0ZXN0X3J1bl9leGl0KHNlbGYpOgorICAg
ICAgICByZXN1bHQgPSBydW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnaW1wb3J0IHN5cztzeXMu
ZXhpdCgxKSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlc3VsdC5yZXR1cm5jb2Rl
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGRvdXQsIE5vbmUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0ZGVyciwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3J1
bl90aW1lb3V0KHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSwgc2VsZi5hc3Nl
cnRSYWlzZXMoVGltZW91dEV4cGlyZWQpOgorICAgICAgICAgICAgcnVuKFtzeXMuZXhlY3V0YWJs
ZSwgJy1jJywgJ2ltcG9ydCB0aW1lO3RpbWUuc2xlZXAoMiknXSwgdGltZW91dD0xKQorCisgICAg
ZGVmIHRlc3RfcnVuX3RpbWVvdXRfY29udGV4dChzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRD
YXB0dXJlKCksIHNlbGYuYXNzZXJ0UmFpc2VzKFRpbWVvdXRFeHBpcmVkKToKKyAgICAgICAgICAg
IHdpdGggVGltZW91dCgxKToKKyAgICAgICAgICAgICAgICBydW4oW3N5cy5leGVjdXRhYmxlLCAn
LWMnLCAnaW1wb3J0IHRpbWU7dGltZS5zbGVlcCgyKSddKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406952</attachid>
            <date>2020-08-20 12:01:36 -0700</date>
            <delta_ts>2020-08-20 12:42:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-215702-20200820120135.patch</filename>
            <type>text/plain</type>
            <size>11758</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NTk1NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3IEBACisyMDIwLTA4LTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgc3VicHJvY2Vzc191dGlscy5ydW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTcwMgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNjc0ODc3NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV3
ZWkgWmh1LgorCisgICAgICAgIFB5dGhvbiAzJ3Mgc3VicHJvY2Vzcy5ydW4gQVBJIGlzIG11Y2gg
YmV0dGVyIHRoYW4gdGhlIG11bHRpcGxlIHN1YnByb2Nlc3MgQVBJcyB0aGF0IFB5dGhvbiAyIHBy
b3ZpZGVzLiBSYXRoZXIgdGhhbgorICAgICAgICByZXF1aXJpbmcgbmV3IHNjcmlwdHMgYW5kIGxp
YnJhcmllcyB0byBiZSBmdWxseSBQeXRob24gMywgd2Ugc2hvdWxkIHByb3ZpZGUgYSBQeXRob24g
MiBBUEkgaWRlbnRpY2FsIHRvIHN1YnByb2Nlc3MucnVuLgorCisgICAgICAgICogU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L1JFQURNRS5tZDogRG9jdW1lbnQgdXNhZ2Ugb2Ygc3VicHJv
Y2Vzc191dGlscy5ydW4uCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5
L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogRXhwb3J0IHN1YnByb2Nlc3NfdXRpbHMsIGJ1bXAg
bWlub3IgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L3N1YnByb2Nlc3NfdXRpbHMucHk6IEFkZGVkLgorICAgICAgICAocnVuKTog
RGVjbGFyZSBQeXRob24gMiB2ZXJzaW9uIG9mIFB5dGhvbiAzJ3Mgc3VicHJvY2Vzcy5ydW4gQVBJ
LgorICAgICAgICAoVGltZW91dEV4cGlyZWQpOiBEaXR0by4KKyAgICAgICAgKENvbXBsZXRlZFBy
b2Nlc3MpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L3Rlc3RzL3N1YnByb2Nlc3NfdXRpbHNfdW5pdHRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAoU3VicHJvY2Vzc1V0aWxzKToKKyAgICAgICAgKFN1YnByb2Nlc3NVdGlscy50ZXN0
X3J1bik6CisgICAgICAgIChTdWJwcm9jZXNzVXRpbHMudGVzdF9ydW5fZXhpdCk6CisgICAgICAg
IChTdWJwcm9jZXNzVXRpbHMudGVzdF9ydW5fdGltZW91dCk6CisgICAgICAgIChTdWJwcm9jZXNz
VXRpbHMudGVzdF9ydW5fdGltZW91dF9jb250ZXh0KToKKwogMjAyMC0wOC0yMCAgSm9uYXRoYW4g
QmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdGNvcmVweV0gTW92
ZSBUaW1lb3V0IHRvIHdlYmtpdGNvcmVweSAoUGFydCAxKQpJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0Y29yZXB5L1JFQURNRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvUkVBRE1FLm1kCShyZXZpc2lvbiAyNjU5NTYpCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvUkVBRE1FLm1kCSh3b3JraW5n
IGNvcHkpCkBAIC02NywzICs2NywxMiBAQCBmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgVGltZW91
dAogd2l0aCBUaW1lb3V0KDUsIGhhbmRsZXI9UnVudGltZUVycm9yKCdFeGNlZWRlZCA1IHNlY29u
ZCB0aW1lb3V0JykpOgogICAgIHRpbWUuc2xlZXAoNCkKIGBgYAorCitzdWJwcm9jZXNzLnJ1biBy
ZXBsYWNlbWVudDoKK2BgYAoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQg
cnVuCisKK3Jlc3VsdCA9IHJ1bihbc3lzLmV4ZWN1dGFibGUsICctYycsICdwcmludCgibWVzc2Fn
ZSIpJ10sIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcpCitgYGAKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0
X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5
L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQkocmV2aXNpb24gMjY1OTU2KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDExIEBAIGxvZy5hZGRIYW5kbGVyKE51bGxIYW5kbGVy
KCkpCiAKIGZyb20gd2Via2l0Y29yZXB5LnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Vi
a2l0Y29yZXB5LnN0cmluZ191dGlscyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8sIFVuaWNvZGVJ
TywgdW5pY29kZQotZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dl
ckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogZnJvbSB3ZWJraXRjb3Jl
cHkudGltZW91dCBpbXBvcnQgVGltZW91dAorZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vzc191
dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nlc3MsIHJ1bgorZnJvbSB3
ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENh
cHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAyLCAxMCkKK3Zl
cnNpb24gPSBWZXJzaW9uKDAsIDMsIDApCiAKIGZyb20gd2Via2l0Y29yZXB5LmF1dG9pbnN0YWxs
IGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFsbAogaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAw
KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3Jl
cHkvc3VicHJvY2Vzc191dGlscy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3N1YnByb2Nlc3NfdXRpbHMucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS9zdWJwcm9jZXNzX3V0aWxzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBtYXRoCitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRjb3Jl
cHkgaW1wb3J0IFRpbWVvdXQsIHN0cmluZ191dGlscworCitpZiBzeXMudmVyc2lvbl9pbmZvID4g
KDMsIDApOgorICAgIFRpbWVvdXRFeHBpcmVkID0gc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZAor
ICAgIENvbXBsZXRlZFByb2Nlc3MgPSBzdWJwcm9jZXNzLkNvbXBsZXRlZFByb2Nlc3MKKworICAg
ICMgQWxsb3dzIG5hdGl2ZSBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBUaW1lb3V0IGNvbnRleHQKKyAg
ICBkZWYgcnVuKCpwb3BlbmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdGltZW91dCA9IGt3YXJn
cy5wb3AoJ3RpbWVvdXQnLCBOb25lKQorCisgICAgICAgIHdpdGggVGltZW91dC5EaXNhYmxlQWxh
cm0oKToKKyAgICAgICAgICAgIGN1cnJlbnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAg
ICBUaW1lb3V0LmNoZWNrKGN1cnJlbnRfdGltZT1jdXJyZW50X3RpbWUpCisgICAgICAgICAgICBk
aWZmZXJlbmNlID0gVGltZW91dC5kaWZmZXJlbmNlKGN1cnJlbnRfdGltZT1jdXJyZW50X3RpbWUp
CisKKyAgICAgICAgICAgIGlmIGRpZmZlcmVuY2U6CisgICAgICAgICAgICAgICAgdGltZW91dCA9
IG1pbih0aW1lb3V0IG9yIHN5cy5tYXhzaXplLCBpbnQobWF0aC5jZWlsKGRpZmZlcmVuY2UpKSkK
KyAgICAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLnJ1bigqcG9wZW5hcmdzLCB0aW1lb3V0PXRp
bWVvdXQsICoqa3dhcmdzKQorCitlbHNlOgorICAgIGNsYXNzIFRpbWVvdXRFeHBpcmVkKEV4Y2Vw
dGlvbik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWQsIHRpbWVvdXQsIG91dHB1dD1O
b25lLCBzdGRlcnI9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICAg
ICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRw
dXQKKyAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCisKKyAgICAgICAgZGVmIF9fc3Ry
X18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIkNvbW1hbmQgJ3t9JyB0aW1lZCBvdXQgYWZ0
ZXIge30gc2Vjb25kcyIuZm9ybWF0KHNlbGYuY21kLCBzZWxmLnRpbWVvdXQpCisKKyAgICAgICAg
QHByb3BlcnR5CisgICAgICAgIGRlZiBzdGRvdXQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5vdXRwdXQKKworICAgICAgICBAc3Rkb3V0LnNldHRlcgorICAgICAgICBkZWYgc3Rkb3V0
KHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHNlbGYub3V0cHV0ID0gdmFsdWUKKworICAgIGNs
YXNzIENvbXBsZXRlZFByb2Nlc3Mob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGFyZ3MsIHJldHVybmNvZGUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSk6CisgICAgICAgICAg
ICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSByZXR1cm5j
b2RlCisgICAgICAgICAgICBzZWxmLnN0ZG91dCA9IHN0ZG91dAorICAgICAgICAgICAgc2VsZi5z
dGRlcnIgPSBzdGRlcnIKKworICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAg
ICBhcmdzID0gWydhcmdzPXshcn0nLmZvcm1hdChzZWxmLmFyZ3MpLCAncmV0dXJuY29kZT17IXJ9
Jy5mb3JtYXQoc2VsZi5yZXR1cm5jb2RlKV0KKyAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0IGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdzdGRvdXQ9eyFyfScuZm9y
bWF0KHNlbGYuc3Rkb3V0KSkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdzdGRlcnI9eyFyfScuZm9ybWF0KHNlbGYu
c3RkZXJyKSkKKyAgICAgICAgICAgIHJldHVybiAie30oe30pIi5mb3JtYXQodHlwZShzZWxmKS5f
X25hbWVfXywgJywgJy5qb2luKGFyZ3MpKQorCisgICAgICAgIGRlZiBjaGVja19yZXR1cm5jb2Rl
KHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlOgorICAgICAgICAgICAgICAg
IHJhaXNlIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKHNlbGYucmV0dXJuY29kZSwgc2Vs
Zi5hcmdzLCBzZWxmLnN0ZG91dCkKKworICAgICMgVGFrZW4gZGlyZWN0bHkgZnJvbSBQeXRob24g
MydzIHN1YnByb2Nlc3MgbGlicmFyeSwgc2luY2UgdGhlIHJ1biguLi4pIEFQSSBpcyBzdXBlcmlv
ciB0byBQeXRob24gMidzIHN1YnByb2Nlc3MgQVBJCisgICAgZGVmIHJ1bigqcG9wZW5hcmdzLCAq
Kmt3YXJncyk6CisgICAgICAgIGlucHV0ID0ga3dhcmdzLnBvcCgnaW5wdXQnLCBOb25lKQorICAg
ICAgICBjYXB0dXJlX291dHB1dCA9IGt3YXJncy5wb3AoJ2NhcHR1cmVfb3V0cHV0JywgRmFsc2Up
CisgICAgICAgIHRpbWVvdXQgPSBrd2FyZ3MucG9wKCd0aW1lb3V0JywgTm9uZSkKKyAgICAgICAg
Y2hlY2sgPSBrd2FyZ3MucG9wKCdjaGVjaycsIEZhbHNlKQorCisgICAgICAgIGVuY29kaW5nID0g
a3dhcmdzLnBvcCgnZW5jb2RpbmcnLCBOb25lKQorICAgICAgICBlcnJvcnMgPSBrd2FyZ3MucG9w
KCdlcnJvcnMnLCBOb25lKQorICAgICAgICBpZiBlbmNvZGluZyBvciBlcnJvcnM6CisgICAgICAg
ICAgICBkZWYgZGVjb2RlKHN0cmluZyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ191
dGlscy5kZWNvZGUoc3RyaW5nLCBlbmNvZGluZz1lbmNvZGluZyBvciAndXRmLTgnLCBlcnJvcnM9
ZXJyb3JzIG9yICdzdHJpY3QnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmIGRlY29k
ZShzdHJpbmcpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmcKKworICAgICAgICBpZiBp
bnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmICdzdGRpbicgaW4ga3dhcmdzOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZGluIGFuZCBpbnB1dCBhcmd1bWVudHMg
bWF5IG5vdCBib3RoIGJlIHVzZWQuJykKKyAgICAgICAgICAgIGt3YXJnc1snc3RkaW4nXSA9IHN1
YnByb2Nlc3MuUElQRQorCisgICAgICAgIGlmIGNhcHR1cmVfb3V0cHV0OgorICAgICAgICAgICAg
aWYgKCdzdGRvdXQnIGluIGt3YXJncykgb3IgKCdzdGRlcnInIGluIGt3YXJncyk6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3Rkb3V0IGFuZCBzdGRlcnIgYXJndW1lbnRzIG1h
eSBub3QgYmUgdXNlZCB3aXRoIGNhcHR1cmVfb3V0cHV0LicpCisgICAgICAgICAgICBrd2FyZ3Nb
J3N0ZG91dCddID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgICAgICBrd2FyZ3NbJ3N0ZGVycidd
ID0gc3VicHJvY2Vzcy5QSVBFCisKKyAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4o
KnBvcGVuYXJncywgKiprd2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRpbWVv
dXQ6CisgICAgICAgICAgICAgICAgd2l0aCBUaW1lb3V0KHRpbWVvdXQpOgorICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5j
b21tdW5pY2F0ZShpbnB1dCkKKworICAgICAgICBleGNlcHQgVGltZW91dC5FeGNlcHRpb246Cisg
ICAgICAgICAgICBwcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBw
cm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHBv
cGVuYXJnc1swXSwgdGltZW91dCwgb3V0cHV0PWRlY29kZShzdGRvdXQpLCBzdGRlcnI9ZGVjb2Rl
KHN0ZGVycikpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgcHJv
Y2Vzcy5raWxsKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBwcm9jZXNzLndhaXQoKQorCisgICAgICAgIHJldGNvZGUgPSBwcm9jZXNzLnBvbGwoKQor
ICAgICAgICBpZiBjaGVjayBhbmQgcmV0Y29kZToKKyAgICAgICAgICAgIHJhaXNlIHN1YnByb2Nl
c3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKHJldGNvZGUsIHBvcGVuYXJnc1swXSwgb3V0cHV0PWRlY29k
ZShzdGRvdXQpLCBzdGRlcnI9ZGVjb2RlKHN0ZGVycikpCisgICAgICAgIHJldHVybiBDb21wbGV0
ZWRQcm9jZXNzKHBvcGVuYXJnc1swXSwgcmV0Y29kZSwgZGVjb2RlKHN0ZG91dCksIGRlY29kZShz
dGRlcnIpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS90ZXN0cy9zdWJwcm9jZXNzX3V0aWxzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMv
c3VicHJvY2Vzc191dGlsc191bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL3N1YnByb2Nlc3Nf
dXRpbHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRl
c3QKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUsIHJ1biwgVGltZW91
dEV4cGlyZWQsIFRpbWVvdXQKKworCitjbGFzcyBTdWJwcm9jZXNzVXRpbHModW5pdHRlc3QuVGVz
dENhc2UpOgorCisgICAgZGVmIHRlc3RfcnVuKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW4o
W3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncHJpbnQoIm1lc3NhZ2UiKSddLCBjYXB0dXJlX291dHB1
dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJl
c3VsdC5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGRvdXQs
ICdtZXNzYWdlXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGRlcnIsICcn
KQorCisgICAgZGVmIHRlc3RfcnVuX2V4aXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bihb
c3lzLmV4ZWN1dGFibGUsICctYycsICdpbXBvcnQgc3lzO3N5cy5leGl0KDEpJ10pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzdWx0LnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocmVzdWx0LnN0ZG91dCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChy
ZXN1bHQuc3RkZXJyLCBOb25lKQorCisgICAgZGVmIHRlc3RfcnVuX3RpbWVvdXQoc2VsZik6Cisg
ICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpLCBzZWxmLmFzc2VydFJhaXNlcyhUaW1lb3V0RXhw
aXJlZCk6CisgICAgICAgICAgICBydW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnaW1wb3J0IHRp
bWU7dGltZS5zbGVlcCgyKSddLCB0aW1lb3V0PTEpCisKKyAgICBkZWYgdGVzdF9ydW5fdGltZW91
dF9jb250ZXh0KHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSwgc2VsZi5hc3Nl
cnRSYWlzZXMoVGltZW91dEV4cGlyZWQpOgorICAgICAgICAgICAgd2l0aCBUaW1lb3V0KDEpOgor
ICAgICAgICAgICAgICAgIHJ1bihbc3lzLmV4ZWN1dGFibGUsICctYycsICdpbXBvcnQgdGltZTt0
aW1lLnNsZWVwKDIpJ10pCg==
</data>
<flag name="review"
          id="422324"
          type_id="1"
          status="+"
          setter="dewei_zhu"
    />
          </attachment>
      

    </bug>

</bugzilla>