<?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>175279</bug_id>
          
          <creation_ts>2017-08-07 12:51:54 -0700</creation_ts>
          <short_desc>[Tools] Add script to download a GitHub release</short_desc>
          <delta_ts>2017-08-18 09:08: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>
          
          
          <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>
          
          <blocked>175275</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ap</cc>
    
    <cc>bburg</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>pvollan</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1336088</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-08-07 12:51:54 -0700</bug_when>
    <thetext>Add a Python script for hitting the GitHub API and querying for the latest release of a project. Then the location should be passed in for downloading.

This will be important for WinCairoRequirements and for downloading something like vswhere for detection of Visual Studio instances.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337643</commentid>
    <comment_count>1</comment_count>
      <attachid>317863</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-10 15:42:03 -0700</bug_when>
    <thetext>Created attachment 317863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337657</commentid>
    <comment_count>2</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-08-10 15:59:04 -0700</bug_when>
    <thetext>The only thing I&apos;m not sure of is how we prevent multiple downloads. Maybe just a file with the same extension and a .version so like WinCairoRequirements.zip.version.

Think we would then need a force flag as well where it&apos;ll do the logic no matter what.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337807</commentid>
    <comment_count>3</comment_count>
      <attachid>317863</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-10 20:02:57 -0700</bug_when>
    <thetext>Comment on attachment 317863
Patch

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

&gt; Tools/Scripts/get-latest-github-release.py:59
&gt; +    data = json.loads(urllib2.urlopen(request).read())

Ugh, this must&apos;ve been a Cmd-Z fail. Should be response.read(), of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338556</commentid>
    <comment_count>4</comment_count>
      <attachid>318091</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-14 17:31:23 -0700</bug_when>
    <thetext>Created attachment 318091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338562</commentid>
    <comment_count>5</comment_count>
      <attachid>318091</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-14 17:40:55 -0700</bug_when>
    <thetext>Comment on attachment 318091
Patch

- Add functionality to save / check a .version file of JSON format:

  {&quot;tag_name&quot;: &quot;2.1.3&quot;, &quot;updated_at&quot;: &quot;2017-07-29T03:53:05Z&quot;}

- Add a --force/-f flag to skip this check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338737</commentid>
    <comment_count>6</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-08-15 10:35:58 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #4)
&gt; Created attachment 318091 [details]
&gt; Patch

I am by no means a Python expert, but I think this looks good. Brent, is this something you would like to weigh in on?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339676</commentid>
    <comment_count>7</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-08-17 12:20:17 -0700</bug_when>
    <thetext>Alexey or Alex, do you have a take on this? I think the patch looks good, but I thought I&apos;d run it by you before approving. The script will be used to download &apos;vswhere&apos; (detecting installation location of Visual Studio 2017), and to download WinCairo requirements (dlls and libs for building WinCairo).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339704</commentid>
    <comment_count>8</comment_count>
      <attachid>318091</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-17 13:00:59 -0700</bug_when>
    <thetext>Comment on attachment 318091
Patch

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

I&apos;m not an expert either. My only comment is about usability - with a somewhat generic name, the tool should probably better explain what it does. It&apos;s too easy to assume that it gets the source code for the latest Gtk release or something like that. Maybe some example invocations would help.

Also, if it&apos;s actually downloading something, it should be called &quot;download&quot;, not &quot;get&quot; I think.

&gt; Tools/Scripts/get-latest-github-release.py:39
&gt; +    parser.add_argument(&apos;--output&apos;, &apos;-o&apos;, default=&apos;.&apos;, help=&apos;output directory&apos;)

It is a little annoying that curl&apos;s &quot;-o&quot; option has a different meaning, but I don&apos;t have a proposal for how to improve this.

&gt; Tools/Scripts/get-latest-github-release.py:40
&gt; +    parser.add_argument(&apos;--endpoint&apos;, &apos;-e&apos;, default=PUBLIC_GITHUB_API_ENDPOINT, help=&apos;GitHub API endpoint (defaults to public)&apos;)

Do you envision a need to use a different endpoint? Will the users of the tool know how to make this choice?

&gt; Tools/Scripts/get-latest-github-release.py:41
&gt; +    parser.add_argument(&apos;--token&apos;, &apos;-t&apos;, default=None, help=&apos;GitHub API OAuth token (where applicable)&apos;)

Again, will the users know if it&apos;s applicable?

&gt; Tools/Scripts/get-latest-github-release.py:42
&gt; +    parser.add_argument(&apos;--force&apos;, &apos;-f&apos;, action=&apos;store_true&apos;, help=&apos;download latest release even if it already exists&apos;)

Exists where? Will this overwrite an existing file with the same name? Why is this option needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339726</commentid>
    <comment_count>9</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-17 13:35:45 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #8)
&gt; I&apos;m not an expert either. My only comment is about usability - with a
&gt; somewhat generic name, the tool should probably better explain what it does.
&gt; It&apos;s too easy to assume that it gets the source code for the latest Gtk
&gt; release or something like that. Maybe some example invocations would help.

This script can be used to download any binary asset included in the latest release of a GitHub repo to an arbitrary output directory, so it actually *is* extremely generic. I can certainly add a docblock with example usage though.

&gt; Also, if it&apos;s actually downloading something, it should be called
&gt; &quot;download&quot;, not &quot;get&quot; I think.

Can do.

&gt; &gt; Tools/Scripts/get-latest-github-release.py:39
&gt; &gt; +    parser.add_argument(&apos;--output&apos;, &apos;-o&apos;, default=&apos;.&apos;, help=&apos;output directory&apos;)
&gt; 
&gt; It is a little annoying that curl&apos;s &quot;-o&quot; option has a different meaning, but
&gt; I don&apos;t have a proposal for how to improve this.

This is the same sort of &quot;-o&quot; as GCC though.

&gt; &gt; Tools/Scripts/get-latest-github-release.py:40
&gt; &gt; +    parser.add_argument(&apos;--endpoint&apos;, &apos;-e&apos;, default=PUBLIC_GITHUB_API_ENDPOINT, help=&apos;GitHub API endpoint (defaults to public)&apos;)
&gt; 
&gt; Do you envision a need to use a different endpoint? Will the users of the
&gt; tool know how to make this choice?
&gt; 
&gt; &gt; Tools/Scripts/get-latest-github-release.py:41
&gt; &gt; +    parser.add_argument(&apos;--token&apos;, &apos;-t&apos;, default=None, help=&apos;GitHub API OAuth token (where applicable)&apos;)
&gt; 
&gt; Again, will the users know if it&apos;s applicable?

These ensure that the script is able to target private repositories or private GitHub (Enterprise) instances. Whether or not these options are used upstream, they are necessary for completeness.

&gt; &gt; Tools/Scripts/get-latest-github-release.py:42
&gt; &gt; +    parser.add_argument(&apos;--force&apos;, &apos;-f&apos;, action=&apos;store_true&apos;, help=&apos;download latest release even if it already exists&apos;)
&gt; 
&gt; Exists where? Will this overwrite an existing file with the same name? Why
&gt; is this option needed?

The need is explained in the thread above (i.e. &quot;downloads are time-consuming so avoid doing so unnecessarily by default&quot;), but we can be explicit about it existing &quot;in the specified output directory&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339736</commentid>
    <comment_count>10</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-17 13:49:58 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Tools/Scripts/get-latest-github-release.py:39
&gt; &gt; &gt; +    parser.add_argument(&apos;--output&apos;, &apos;-o&apos;, default=&apos;.&apos;, help=&apos;output directory&apos;)
&gt; &gt; 
&gt; &gt; It is a little annoying that curl&apos;s &quot;-o&quot; option has a different meaning, but
&gt; &gt; I don&apos;t have a proposal for how to improve this.
&gt; 
&gt; This is the same sort of &quot;-o&quot; as GCC though.

Well, I guess I take this back; I suppose your point was that you expected it to specify the output file and not just the output directory. Still, we already know the asset&apos;s filename, and I thought it would be most convenient to have an option that defaults to the working directory instead of a third positional argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339866</commentid>
    <comment_count>11</comment_count>
      <attachid>318446</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-17 17:20:34 -0700</bug_when>
    <thetext>Created attachment 318446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339869</commentid>
    <comment_count>12</comment_count>
      <attachid>318446</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2017-08-17 17:24:34 -0700</bug_when>
    <thetext>Comment on attachment 318446
Patch

- Change &quot;get&quot; to &quot;download&quot; in script name.

- Make help page more descriptive about the purpose and usage of this script.

- Remove -f/--force option after all. (Don and I discussed this further and decided that we&apos;re not specifically expecting a case for this to be used anyway.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340076</commentid>
    <comment_count>13</comment_count>
      <attachid>318446</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-08-18 09:00:51 -0700</bug_when>
    <thetext>Comment on attachment 318446
Patch

I assume this new script will be used in &apos;update-webkit&apos; or something?

I think this patch looks fine, and seems like a good idea. We have a number of things this could be useful for retrieving.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340079</commentid>
    <comment_count>14</comment_count>
      <attachid>318446</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-18 09:08:18 -0700</bug_when>
    <thetext>Comment on attachment 318446
Patch

Clearing flags on attachment: 318446

Committed r220918: &lt;http://trac.webkit.org/changeset/220918&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340080</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-18 09:08:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340083</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-18 09:08:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/33963620&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317863</attachid>
            <date>2017-08-10 15:42:03 -0700</date>
            <delta_ts>2017-08-14 17:31:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175279-20170810154210.patch</filename>
            <type>text/plain</type>
            <size>4625</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNTM4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmJjNmRkN2U3MjMyNGIyNjYyYjE5NjJhZTFiOWExMjI3
YTVkMDNlYS4uMjU2NTdlNGYxOTIzZTQzYjk5OTYzMGNkMDU0ZmM5ZTM0MGM2YTQ5MCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDE3LTA4LTEwICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4K
KworICAgICAgICBbVG9vbHNdIEFkZCBzY3JpcHQgdG8gZG93bmxvYWQgYSBHaXRIdWIgcmVsZWFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1Mjc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3Jp
cHRzL2dldC1sYXRlc3QtZ2l0aHViLXJlbGVhc2UucHk6IEFkZGVkLgorICAgICAgICAocGFyc2Vf
YXJncyk6CisgICAgICAgIChnZXRfbGF0ZXN0X3JlbGVhc2VfdXJsKToKKyAgICAgICAgKGRvd25s
b2FkX3JlbGVhc2UpOgorICAgICAgICAobWFpbik6CisKIDIwMTctMDgtMTAgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2Vk
IGxhbWJkYSBjYXB0dXJlcyBzbyB0aGF0IFdlYktpdCBidWlsZHMgd2l0aCAtV3VudXNlZC1sYW1i
ZGEtY2FwdHVyZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9nZXQtbGF0ZXN0LWdpdGh1Yi1y
ZWxlYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy9nZXQtbGF0ZXN0LWdpdGh1Yi1yZWxlYXNlLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjllZThjOGRiYmJhNjlkODVhM2E4NmQ4Y2JkYmVkNzk4NGYzNzY5YzUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2dldC1sYXRlc3QtZ2l0aHViLXJlbGVhc2UucHkK
QEAgLTAsMCArMSw5MSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQg
KEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQganNvbgoraW1w
b3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdXJsbGliMgorCitQVUJMSUNfR0lUSFVCX0FQSV9F
TkRQT0lOVCA9ICdodHRwczovL2FwaS5naXRodWIuY29tLycKKworCitkZWYgcGFyc2VfYXJncygp
OgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdEb3du
bG9hZHMgdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gYSBHaXRIdWIgcmVwb3NpdG9yeS4nKQorICAg
IHBhcnNlci5hZGRfYXJndW1lbnQoJ3JlcG8nLCBoZWxwPSdHaXRIdWIgcmVwb3NpdG9yeSBzbHVn
JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlbmFtZScsIGhlbHA9J2ZpbGVuYW1lIG9m
IHRoZSByZWxlYXNlIHRvIGRvd25sb2FkJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91
dHB1dCcsICctbycsIGRlZmF1bHQ9Jy4nLCBoZWxwPSdvdXRwdXQgZGlyZWN0b3J5JykKKyAgICBw
YXJzZXIuYWRkX2FyZ3VtZW50KCctLWVuZHBvaW50JywgJy1lJywgZGVmYXVsdD1QVUJMSUNfR0lU
SFVCX0FQSV9FTkRQT0lOVCwgaGVscD0nR2l0SHViIEFQSSBlbmRwb2ludCAoZGVmYXVsdHMgdG8g
cHVibGljKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10b2tlbicsICctdCcsIGRlZmF1
bHQ9Tm9uZSwgaGVscD0nR2l0SHViIEFQSSBPQXV0aCB0b2tlbiAod2hlcmUgYXBwbGljYWJsZSkn
KQorICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCisKKworZGVmIGdldF9sYXRlc3RfcmVs
ZWFzZV91cmwoYXJncyk6CisgICAgdXJsID0gJ3t9L3JlcG9zL3t9L3JlbGVhc2VzL2xhdGVzdCcu
Zm9ybWF0KGFyZ3MuZW5kcG9pbnQucnN0cmlwKCcvJyksIGFyZ3MucmVwbykKKworICAgIHJlcXVl
c3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsKQorICAgIHJlcXVlc3QuYWRkX2hlYWRlcignQWNjZXB0
JywgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicpCisgICAgaWYgYXJncy50b2tlbjoK
KyAgICAgICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ3Rva2VuIHt9Jy5m
b3JtYXQoYXJncy50b2tlbikpCisKKyAgICB0cnk6CisgICAgICAgIHJlc3BvbnNlID0gdXJsbGli
Mi51cmxvcGVuKHJlcXVlc3QpCisgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBlcnJvcjoK
KyAgICAgICAgaWYgZXJyb3IuY29kZSA9PSA0MDQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgZGF0YSA9IGpzb24ubG9hZHModXJsbGliMi51cmxvcGVuKHJlcXVlc3QpLnJlYWQoKSkK
KyAgICBmb3IgYXNzZXQgaW4gZGF0YVsnYXNzZXRzJ106CisgICAgICAgIGlmIGFzc2V0WyduYW1l
J10gPT0gYXJncy5maWxlbmFtZToKKyAgICAgICAgICAgIHJldHVybiBhc3NldFsnYnJvd3Nlcl9k
b3dubG9hZF91cmwnXQorICAgIHJldHVybiBOb25lCisKKworZGVmIGRvd25sb2FkX3JlbGVhc2Uo
c291cmNlX3VybCwgdGFyZ2V0X3BhdGgpOgorICAgIHJlbGVhc2VfYmluYXJ5ID0gdXJsbGliMi51
cmxvcGVuKHNvdXJjZV91cmwpCisgICAgd2l0aCBvcGVuKHRhcmdldF9wYXRoLCAnd2InKSBhcyBm
aWxlOgorICAgICAgICBmaWxlLndyaXRlKHJlbGVhc2VfYmluYXJ5LnJlYWQoKSkKKworCitkZWYg
bWFpbigpOgorICAgIGFyZ3MgPSBwYXJzZV9hcmdzKCkKKworICAgIHByaW50ICdTZWVraW5nIGxh
dGVzdCByZWxlYXNlIG9mIHt9IGZyb20ge30uLi4nLmZvcm1hdChhcmdzLmZpbGVuYW1lLCBhcmdz
LnJlcG8pCisgICAgcmVsZWFzZV91cmwgPSBnZXRfbGF0ZXN0X3JlbGVhc2VfdXJsKGFyZ3MpCisK
KyAgICBpZiBub3QgcmVsZWFzZV91cmw6CisgICAgICAgIHByaW50ICdObyByZWxlYXNlIGZvdW5k
IScKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdz
Lm91dHB1dCk6CisgICAgICAgIG9zLm1ha2VkaXJzKGFyZ3Mub3V0cHV0KQorCisgICAgcHJpbnQg
J0Rvd25sb2FkaW5nIGxhdGVzdCByZWxlYXNlIG9mIHt9IHRvIHt9Li4uJy5mb3JtYXQoYXJncy5m
aWxlbmFtZSwgb3MucGF0aC5hYnNwYXRoKGFyZ3Mub3V0cHV0KSkKKyAgICBkb3dubG9hZF9yZWxl
YXNlKHJlbGVhc2VfdXJsLCBvcy5wYXRoLmpvaW4oYXJncy5vdXRwdXQsIGFyZ3MuZmlsZW5hbWUp
KQorICAgIHByaW50ICdEb25lIScKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IG1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318091</attachid>
            <date>2017-08-14 17:31:23 -0700</date>
            <delta_ts>2017-08-17 17:20:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175279-20170814173122.patch</filename>
            <type>text/plain</type>
            <size>5333</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNTM4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmJjNmRkN2U3MjMyNGIyNjYyYjE5NjJhZTFiOWExMjI3
YTVkMDNlYS4uYWNlNmE4ZWI3NzMxNzQxZmU2OWFlYTI3NzVhOWE2ODlmYjA1YTYzYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDE3LTA4LTE0ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4K
KworICAgICAgICBbVG9vbHNdIEFkZCBzY3JpcHQgdG8gZG93bmxvYWQgYSBHaXRIdWIgcmVsZWFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1Mjc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3Jp
cHRzL2dldC1sYXRlc3QtZ2l0aHViLXJlbGVhc2UucHk6IEFkZGVkLgorCiAyMDE3LTA4LTEwICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBz
b21lIHVudXNlZCBsYW1iZGEgY2FwdHVyZXMgc28gdGhhdCBXZWJLaXQgYnVpbGRzIHdpdGggLVd1
bnVzZWQtbGFtYmRhLWNhcHR1cmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZ2V0LWxhdGVz
dC1naXRodWItcmVsZWFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvZ2V0LWxhdGVzdC1naXRodWItcmVs
ZWFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZjIwYTg5NzZmMzNjYTQ5MzBkYzQzMzgxM2MyZmNjMzczZjY3
MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9nZXQtbGF0ZXN0LWdpdGh1Yi1y
ZWxlYXNlLnB5CkBAIC0wLDAgKzEsMTEzIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisj
IENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisjIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9y
dCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1cmxsaWIyCisKK1BVQkxJQ19H
SVRIVUJfQVBJX0VORFBPSU5UID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vJworCisKK2RlZiBw
YXJzZV9hcmdzKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3Jp
cHRpb249J0Rvd25sb2FkcyB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBhIEdpdEh1YiByZXBvc2l0
b3J5LicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncmVwbycsIGhlbHA9J0dpdEh1YiByZXBv
c2l0b3J5IHNsdWcnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGVuYW1lJywgaGVscD0n
ZmlsZW5hbWUgb2YgdGhlIHJlbGVhc2UgdG8gZG93bmxvYWQnKQorICAgIHBhcnNlci5hZGRfYXJn
dW1lbnQoJy0tb3V0cHV0JywgJy1vJywgZGVmYXVsdD0nLicsIGhlbHA9J291dHB1dCBkaXJlY3Rv
cnknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZW5kcG9pbnQnLCAnLWUnLCBkZWZhdWx0
PVBVQkxJQ19HSVRIVUJfQVBJX0VORFBPSU5ULCBoZWxwPSdHaXRIdWIgQVBJIGVuZHBvaW50IChk
ZWZhdWx0cyB0byBwdWJsaWMpJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXRva2VuJywg
Jy10JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdHaXRIdWIgQVBJIE9BdXRoIHRva2VuICh3aGVyZSBh
cHBsaWNhYmxlKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb3JjZScsICctZicsIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2Rvd25sb2FkIGxhdGVzdCByZWxlYXNlIGV2ZW4gaWYg
aXQgYWxyZWFkeSBleGlzdHMnKQorICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCisKKwor
ZGVmIGZpbmRfbGF0ZXN0X3JlbGVhc2UoYXJncyk6CisgICAgdXJsID0gJ3t9L3JlcG9zL3t9L3Jl
bGVhc2VzL2xhdGVzdCcuZm9ybWF0KGFyZ3MuZW5kcG9pbnQucnN0cmlwKCcvJyksIGFyZ3MucmVw
bykKKworICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsKQorICAgIHJlcXVlc3QuYWRk
X2hlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicpCisgICAg
aWYgYXJncy50b2tlbjoKKyAgICAgICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdBdXRob3JpemF0aW9u
JywgJ3Rva2VuIHt9Jy5mb3JtYXQoYXJncy50b2tlbikpCisKKyAgICB0cnk6CisgICAgICAgIHJl
c3BvbnNlID0gdXJsbGliMi51cmxvcGVuKHJlcXVlc3QpCisgICAgZXhjZXB0IHVybGxpYjIuSFRU
UEVycm9yLCBlcnJvcjoKKyAgICAgICAgaWYgZXJyb3IuY29kZSA9PSA0MDQ6CisgICAgICAgICAg
ICByZXR1cm4gTm9uZSwgTm9uZQorCisgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UucmVh
ZCgpKQorICAgIGZvciBhc3NldCBpbiBkYXRhWydhc3NldHMnXToKKyAgICAgICAgaWYgYXNzZXRb
J25hbWUnXSA9PSBhcmdzLmZpbGVuYW1lOgorICAgICAgICAgICAgdmVyc2lvbl9pbmZvID0geyd0
YWdfbmFtZSc6IGRhdGFbJ3RhZ19uYW1lJ10sICd1cGRhdGVkX2F0JzogYXNzZXRbJ3VwZGF0ZWRf
YXQnXX0KKyAgICAgICAgICAgIHJldHVybiBhc3NldFsnYnJvd3Nlcl9kb3dubG9hZF91cmwnXSwg
dmVyc2lvbl9pbmZvCisgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworCitkZWYgaGFzX2xhdGVzdF9y
ZWxlYXNlKHZlcnNpb25faW5mb19wYXRoLCB2ZXJzaW9uX2luZm8pOgorICAgIGlmIG5vdCBvcy5w
YXRoLmV4aXN0cyh2ZXJzaW9uX2luZm9fcGF0aCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgd2l0aCBvcGVuKHZlcnNpb25faW5mb19wYXRoKSBhcyBmaWxlOgorICAgICAgICByZXR1cm4g
anNvbi5sb2FkKGZpbGUpID09IHZlcnNpb25faW5mbworCisKK2RlZiBkb3dubG9hZF9yZWxlYXNl
KHNvdXJjZV91cmwsIHRhcmdldF9wYXRoKToKKyAgICB3aXRoIG9wZW4odGFyZ2V0X3BhdGgsICd3
YicpIGFzIGZpbGU6CisgICAgICAgIGZpbGUud3JpdGUodXJsbGliMi51cmxvcGVuKHNvdXJjZV91
cmwpLnJlYWQoKSkKKworCitkZWYgc2F2ZV92ZXJzaW9uX2luZm8odmVyc2lvbl9pbmZvX3BhdGgs
IHZlcnNpb25faW5mbyk6CisgICAgd2l0aCBvcGVuKHZlcnNpb25faW5mb19wYXRoLCAndycpIGFz
IGZpbGU6CisgICAgICAgIGpzb24uZHVtcCh2ZXJzaW9uX2luZm8sIGZpbGUpCisKKworZGVmIG1h
aW4oKToKKyAgICBhcmdzID0gcGFyc2VfYXJncygpCisKKyAgICBwcmludCAnU2Vla2luZyBsYXRl
c3QgcmVsZWFzZSBvZiB7fSBmcm9tIHt9Li4uJy5mb3JtYXQoYXJncy5maWxlbmFtZSwgYXJncy5y
ZXBvKQorICAgIHJlbGVhc2VfdXJsLCB2ZXJzaW9uX2luZm8gPSBmaW5kX2xhdGVzdF9yZWxlYXNl
KGFyZ3MpCisKKyAgICBpZiBub3QgcmVsZWFzZV91cmw6CisgICAgICAgIHByaW50ICdObyByZWxl
YXNlIGZvdW5kIScKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGJpbmFyeV9wYXRoID0gb3Mu
cGF0aC5qb2luKGFyZ3Mub3V0cHV0LCBhcmdzLmZpbGVuYW1lKQorICAgIHZlcnNpb25faW5mb19w
YXRoID0gYmluYXJ5X3BhdGggKyAnLnZlcnNpb24nCisKKyAgICBpZiBub3QgYXJncy5mb3JjZSBh
bmQgaGFzX2xhdGVzdF9yZWxlYXNlKHZlcnNpb25faW5mb19wYXRoLCB2ZXJzaW9uX2luZm8pOgor
ICAgICAgICBwcmludCAnQWxyZWFkeSB1cC10by1kYXRlIScKKyAgICAgICAgc3lzLmV4aXQoMCkK
KworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLm91dHB1dCk6CisgICAgICAgIG9zLm1h
a2VkaXJzKGFyZ3Mub3V0cHV0KQorCisgICAgcHJpbnQgJ0Rvd25sb2FkaW5nIHRvIHt9Li4uJy5m
b3JtYXQob3MucGF0aC5hYnNwYXRoKGFyZ3Mub3V0cHV0KSkKKyAgICBkb3dubG9hZF9yZWxlYXNl
KHJlbGVhc2VfdXJsLCBiaW5hcnlfcGF0aCkKKyAgICBzYXZlX3ZlcnNpb25faW5mbyh2ZXJzaW9u
X2luZm9fcGF0aCwgdmVyc2lvbl9pbmZvKQorICAgIHByaW50ICdEb25lIScKKworCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318446</attachid>
            <date>2017-08-17 17:20:34 -0700</date>
            <delta_ts>2017-08-18 09:08:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175279-20170817172040.patch</filename>
            <type>text/plain</type>
            <size>5726</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwODcwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDlmMjVhMGM1ZjE3OWY3MDU1M2JjMjJmNGYyNzdjYmQw
NTM2NGQ4MS4uZGY3NGJjMDVlYWMwZjVkZTM1ZGJkYmEzNTdmM2U4MDU2NWY3MDBjNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDE3LTA4LTE3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4K
KworICAgICAgICBbVG9vbHNdIEFkZCBzY3JpcHQgdG8gZG93bmxvYWQgYSBHaXRIdWIgcmVsZWFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1Mjc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3Jp
cHRzL2Rvd25sb2FkLWxhdGVzdC1naXRodWItcmVsZWFzZS5weTogQWRkZWQuCisKIDIwMTctMDgt
MTcgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUg
Q1NTIHJlZ2lvbnMgYXQgY29tcGlsZSB0aW1lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2Rv
d25sb2FkLWxhdGVzdC1naXRodWItcmVsZWFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvZG93bmxvYWQt
bGF0ZXN0LWdpdGh1Yi1yZWxlYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyZDViMDQ5MzkxMTU2YTVlMjRj
Yjk1MjgzOTQyMzg1MjAxMDE2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2Rv
d25sb2FkLWxhdGVzdC1naXRodWItcmVsZWFzZS5weQpAQCAtMCwwICsxLDEyMiBAQAorIyEgL3Vz
ci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBv
cnQgdXJsbGliMgorCitQVUJMSUNfR0lUSFVCX0FQSV9FTkRQT0lOVCA9ICdodHRwczovL2FwaS5n
aXRodWIuY29tLycKKworREVTQ1JJUFRJT04gPSAnJydEb3dubG9hZHMgdGhlIGxhdGVzdCByZWxl
YXNlIGJpbmFyeSBmcm9tIGEgR2l0SHViIHJlcG9zaXRvcnkuCisKK0ludGVuZGVkIGZvciBkb3du
bG9hZCBvZiB2c3doZXJlLmV4ZSBhbmQgV2luQ2Fpcm9SZXF1aXJlbWVudHMuemlwLAorYnV0IG1h
eSBiZSB1c2VkIGZvciBhcmJpdHJhcnkgYmluYXJpZXMgLyByZXBvc2l0b3JpZXMuCisKK0NoZWNr
cyB3aGV0aGVyIHRoZSBsYXRlc3QgdmVyc2lvbiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb3V0cHV0
IGRpcmVjdG9yeQorKGJ5IGxvb2tpbmcgZm9yIGEgLnZlcnNpb24gZmlsZSBzYXZlZCBhbG9uZ3Np
ZGUgdGhlIHJlbGVhc2UgYmluYXJ5KSAtLQoraWYgc28sIGRvd25sb2FkIGlzIHNraXBwZWQ7IG90
aGVyd2lzZSBhbnkgZXhpc3RpbmcgdmVyc2lvbiBpcyBvdmVyd3JpdHRlbi4KKycnJworCisKK2Rl
ZiBwYXJzZV9hcmdzKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVz
Y3JpcHRpb249REVTQ1JJUFRJT04sIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlw
dGlvbkhlbHBGb3JtYXR0ZXIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncmVwbycsIGhlbHA9
J0dpdEh1YiByZXBvc2l0b3J5IHNsdWcgKGUuZy4sICJvcmcvcmVwbyIpJykKKyAgICBwYXJzZXIu
YWRkX2FyZ3VtZW50KCdmaWxlbmFtZScsIGhlbHA9J2ZpbGVuYW1lIG9mIHJlbGVhc2UgYmluYXJ5
IHRvIGRvd25sb2FkIChlLmcuLCAiZm9vLmV4ZSIsICJiYXIuemlwIiknKQorICAgIHBhcnNlci5h
ZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0cHV0LWRpcicsIGRlZmF1bHQ9Jy4nLCBoZWxwPSdvdXRw
dXQgZGlyZWN0b3J5IChkZWZhdWx0cyB0byB3b3JraW5nIGRpcmVjdG9yeSknKQorICAgIHBhcnNl
ci5hZGRfYXJndW1lbnQoJy1lJywgJy0tZW5kcG9pbnQnLCBkZWZhdWx0PVBVQkxJQ19HSVRIVUJf
QVBJX0VORFBPSU5ULCBoZWxwPSdHaXRIdWIgQVBJIGVuZHBvaW50IChkZWZhdWx0cyB0byBhcGku
Z2l0aHViLmNvbSknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdG9rZW4nLCBk
ZWZhdWx0PU5vbmUsIGhlbHA9J0dpdEh1YiBBUEkgT0F1dGggdG9rZW4gKGZvciBwcml2YXRlIHJl
cG9zL2VuZHBvaW50cyknKQorICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCisKKworZGVm
IGZpbmRfbGF0ZXN0X3JlbGVhc2UoYXJncyk6CisgICAgdXJsID0gJ3t9L3JlcG9zL3t9L3JlbGVh
c2VzL2xhdGVzdCcuZm9ybWF0KGFyZ3MuZW5kcG9pbnQucnN0cmlwKCcvJyksIGFyZ3MucmVwbykK
KworICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsKQorICAgIHJlcXVlc3QuYWRkX2hl
YWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicpCisgICAgaWYg
YXJncy50b2tlbjoKKyAgICAgICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdBdXRob3JpemF0aW9uJywg
J3Rva2VuIHt9Jy5mb3JtYXQoYXJncy50b2tlbikpCisKKyAgICB0cnk6CisgICAgICAgIHJlc3Bv
bnNlID0gdXJsbGliMi51cmxvcGVuKHJlcXVlc3QpCisgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVy
cm9yLCBlcnJvcjoKKyAgICAgICAgaWYgZXJyb3IuY29kZSA9PSA0MDQ6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZSwgTm9uZQorCisgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UucmVhZCgp
KQorICAgIGZvciBhc3NldCBpbiBkYXRhWydhc3NldHMnXToKKyAgICAgICAgaWYgYXNzZXRbJ25h
bWUnXSA9PSBhcmdzLmZpbGVuYW1lOgorICAgICAgICAgICAgdmVyc2lvbl9pbmZvID0geyd0YWdf
bmFtZSc6IGRhdGFbJ3RhZ19uYW1lJ10sICd1cGRhdGVkX2F0JzogYXNzZXRbJ3VwZGF0ZWRfYXQn
XX0KKyAgICAgICAgICAgIHJldHVybiBhc3NldFsnYnJvd3Nlcl9kb3dubG9hZF91cmwnXSwgdmVy
c2lvbl9pbmZvCisgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworCitkZWYgaGFzX2xhdGVzdF9yZWxl
YXNlKHZlcnNpb25faW5mb19wYXRoLCB2ZXJzaW9uX2luZm8pOgorICAgIGlmIG5vdCBvcy5wYXRo
LmV4aXN0cyh2ZXJzaW9uX2luZm9fcGF0aCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
d2l0aCBvcGVuKHZlcnNpb25faW5mb19wYXRoKSBhcyBmaWxlOgorICAgICAgICByZXR1cm4ganNv
bi5sb2FkKGZpbGUpID09IHZlcnNpb25faW5mbworCisKK2RlZiBkb3dubG9hZF9yZWxlYXNlKHNv
dXJjZV91cmwsIHRhcmdldF9wYXRoKToKKyAgICB3aXRoIG9wZW4odGFyZ2V0X3BhdGgsICd3Yicp
IGFzIGZpbGU6CisgICAgICAgIGZpbGUud3JpdGUodXJsbGliMi51cmxvcGVuKHNvdXJjZV91cmwp
LnJlYWQoKSkKKworCitkZWYgc2F2ZV92ZXJzaW9uX2luZm8odmVyc2lvbl9pbmZvX3BhdGgsIHZl
cnNpb25faW5mbyk6CisgICAgd2l0aCBvcGVuKHZlcnNpb25faW5mb19wYXRoLCAndycpIGFzIGZp
bGU6CisgICAgICAgIGpzb24uZHVtcCh2ZXJzaW9uX2luZm8sIGZpbGUpCisKKworZGVmIG1haW4o
KToKKyAgICBhcmdzID0gcGFyc2VfYXJncygpCisKKyAgICBwcmludCAnU2Vla2luZyBsYXRlc3Qg
cmVsZWFzZSBvZiB7fSBmcm9tIHt9Li4uJy5mb3JtYXQoYXJncy5maWxlbmFtZSwgYXJncy5yZXBv
KQorICAgIHJlbGVhc2VfdXJsLCB2ZXJzaW9uX2luZm8gPSBmaW5kX2xhdGVzdF9yZWxlYXNlKGFy
Z3MpCisKKyAgICBpZiBub3QgcmVsZWFzZV91cmw6CisgICAgICAgIHByaW50ICdObyByZWxlYXNl
IGZvdW5kIScKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGJpbmFyeV9wYXRoID0gb3MucGF0
aC5qb2luKGFyZ3Mub3V0cHV0X2RpciwgYXJncy5maWxlbmFtZSkKKyAgICB2ZXJzaW9uX2luZm9f
cGF0aCA9IGJpbmFyeV9wYXRoICsgJy52ZXJzaW9uJworCisgICAgaWYgaGFzX2xhdGVzdF9yZWxl
YXNlKHZlcnNpb25faW5mb19wYXRoLCB2ZXJzaW9uX2luZm8pOgorICAgICAgICBwcmludCAnQWxy
ZWFkeSB1cC10by1kYXRlIScKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGlmIG5vdCBvcy5w
YXRoLmV4aXN0cyhhcmdzLm91dHB1dF9kaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhhcmdzLm91
dHB1dF9kaXIpCisKKyAgICBwcmludCAnRG93bmxvYWRpbmcgdG8ge30uLi4nLmZvcm1hdChvcy5w
YXRoLmFic3BhdGgoYXJncy5vdXRwdXRfZGlyKSkKKyAgICBkb3dubG9hZF9yZWxlYXNlKHJlbGVh
c2VfdXJsLCBiaW5hcnlfcGF0aCkKKyAgICBzYXZlX3ZlcnNpb25faW5mbyh2ZXJzaW9uX2luZm9f
cGF0aCwgdmVyc2lvbl9pbmZvKQorICAgIHByaW50ICdEb25lIScKKworCitpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgorICAgIG1haW4oKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>