<?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>43617</bug_id>
          
          <creation_ts>2010-08-06 04:12:34 -0700</creation_ts>
          <short_desc>Port PrettyPatch.rb to Python</short_desc>
          <delta_ts>2012-04-05 20:32:50 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hamaji</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261182</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-08-06 04:12:34 -0700</bug_when>
    <thetext>Port PrettyPatch.rb to Python in order to avoid ruby dependency</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261188</commentid>
    <comment_count>1</comment_count>
      <attachid>63713</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-08-06 04:25:40 -0700</bug_when>
    <thetext>Created attachment 63713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261229</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-08-06 06:57:34 -0700</bug_when>
    <thetext>Interesting. Is Ruby not available on some systems that need to use PrettyPatch?

I have no philosophical objection to rewriting in Python.

I think Python&apos;s difflib.SequenceMatcher could replace your DiffBuilder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261504</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-08-06 14:51:59 -0700</bug_when>
    <thetext>The WebKit project has a number of scripts that are written in Ruby.  Why is this suddenly a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261689</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-08-07 00:59:59 -0700</bug_when>
    <thetext>Ruby is used only for PrettyPatch on Chromium port.  Ruby is available on all Chromium platforms, but we&apos;d like to minimize dependency as possible.

We&apos;re setting up Chromium buildbots for tests.  The webkitpy-test step is failing because the buildbot machine has no ruby [1].  We can install ruby, but we&apos;d like to avoid to install it if possible.


&gt; I think Python&apos;s difflib.SequenceMatcher could replace your DiffBuilder.

Thanks. I&apos;ll try it after I confirm the Python version of PrettyPatch works.


[1] http://build.webkit.org/builders/Chromium%20Linux%20Release%20(Tests)/builds/3340/steps/webkitpy-test/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261691</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-08-07 01:17:50 -0700</bug_when>
    <thetext>I would prefer that Ruby be installed, since several recently-added scripts have been written in Ruby and it’s not out of the question that they may be used by the Chromium build in the future.  Rewriting in a different language for the sake of it seems like a bad idea to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597173</commentid>
    <comment_count>6</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-05 20:32:50 -0700</bug_when>
    <thetext>I won&apos;t work on it because of objections.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63713</attachid>
            <date>2010-08-06 04:25:40 -0700</date>
            <delta_ts>2010-08-06 04:25:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43617-20100806202538.patch</filename>
            <type>text/plain</type>
            <size>25055</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1ZTkwOTU4ZDA0MzQ0ODgzN2Y1YzJkM2NiZTc1ODYxNGMyMzBhNDgxLi4wODg3YTJl
N2E1YTQzMDk1NTNhOTRhN2FkYmM2ZjIzNzZjMDQ4ZjA0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTAtMDgtMDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgUHJldHR5UGF0Y2gu
cmIgdG8gUHl0aG9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MzYxNworICAgICAgICAKKyAgICAgICAgKioqIHdvcmsgaW4gcHJvZ3Jlc3MgKE9PUFMh
KSAqKioKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ByZXR0eXBhdGNoL2Rp
ZmZidWlsZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9w
cmV0dHlwYXRjaC9kaWZmYnVpbGRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gvbGluZS5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gvbGluZV91bml0dGVzdC5weTog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gvcHJl
dHR5cGF0Y2gucHk6IEFkZGVkLgorCiAyMDEwLTA4LTA0ICBLZW50IFRhbXVyYSAgPHRrZW50QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC9k
aWZmYnVpbGRlci5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ByZXR0
eXBhdGNoL2RpZmZidWlsZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NjkyYWE1YTlmOGY1YmE3YjM2YTYy
NjI5MmU5ZGQzMTljOTNhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC9kaWZmYnVpbGRlci5weQpAQCAtMCwwICsxLDEz
NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitjbGFzcyBN
YXRjaDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRfaW5fb2xkLCBzdGFydF9pbl9uZXcs
IHNpemUpOgorICAgICAgICBzZWxmLnN0YXJ0X2luX29sZCA9IHN0YXJ0X2luX29sZAorICAgICAg
ICBzZWxmLnN0YXJ0X2luX25ldyA9IHN0YXJ0X2luX25ldworICAgICAgICBzZWxmLnNpemUgPSBz
aXplCisKKyAgICBkZWYgZW5kX2luX29sZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3Rh
cnRfaW5fb2xkICsgc2VsZi5zaXplCisKKyAgICBkZWYgZW5kX2luX25ldyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuc3RhcnRfaW5fbmV3ICsgc2VsZi5zaXplCisKKworY2xhc3MgT3BlcmF0
aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhY3Rpb24sIHN0YXJ0X2luX29sZCwgZW5kX2lu
X29sZCwgc3RhcnRfaW5fbmV3LCBlbmRfaW5fbmV3KToKKyAgICAgICAgc2VsZi5hY3Rpb24gPSBh
Y3Rpb24KKyAgICAgICAgc2VsZi5zdGFydF9pbl9vbGQgPSBzdGFydF9pbl9vbGQKKyAgICAgICAg
c2VsZi5lbmRfaW5fb2xkID0gZW5kX2luX29sZAorICAgICAgICBzZWxmLnN0YXJ0X2luX25ldyA9
IHN0YXJ0X2luX25ldworICAgICAgICBzZWxmLmVuZF9pbl9uZXcgPSBlbmRfaW5fbmV3CisKKwor
Y2xhc3MgRGlmZkJ1aWxkZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9sZF92ZXJzaW9uLCBu
ZXdfdmVyc2lvbik6CisgICAgICAgIHNlbGYuX29sZF92ZXJzaW9uID0gb2xkX3ZlcnNpb24KKyAg
ICAgICAgc2VsZi5fbmV3X3ZlcnNpb24gPSBuZXdfdmVyc2lvbgorICAgICAgICBzZWxmLl9pbmRl
eF9uZXdfd29yZHMoKQorCisgICAgZGVmIF9pbmRleF9uZXdfd29yZHMoc2VsZik6CisgICAgICAg
IHNlbGYuX3dvcmRfaW5kaWNlcyA9IHt9CisgICAgICAgIGZvciBpbmRleCwgd29yZCBpbiBlbnVt
ZXJhdGUoc2VsZi5fbmV3X3ZlcnNpb24pOgorICAgICAgICAgICAgaWYgbm90IHdvcmQgaW4gc2Vs
Zi5fd29yZF9pbmRpY2VzOgorICAgICAgICAgICAgICAgIHNlbGYuX3dvcmRfaW5kaWNlc1t3b3Jk
XSA9IFtdCisgICAgICAgICAgICBzZWxmLl93b3JkX2luZGljZXNbd29yZF0uYXBwZW5kKGluZGV4
KQorCisgICAgZGVmIG9wZXJhdGlvbnMoc2VsZik6CisgICAgICAgIHBvc2l0aW9uX2luX29sZCA9
IHBvc2l0aW9uX2luX25ldyA9IDAKKyAgICAgICAgb3BlcmF0aW9ucyA9IFtdCisKKyAgICAgICAg
bWF0Y2hlcyA9IHNlbGYuX21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIG1hdGNoZXMuYXBwZW5k
KE1hdGNoKGxlbihzZWxmLl9vbGRfdmVyc2lvbiksIGxlbihzZWxmLl9uZXdfdmVyc2lvbiksIDAp
KQorCisgICAgICAgIGZvciBpLCBtYXRjaCBpbiBlbnVtZXJhdGUobWF0Y2hlcyk6CisgICAgICAg
ICAgICBtYXRjaF9zdGFydHNfYXRfY3VycmVudF9wb3NpdGlvbl9pbl9vbGQgPSAocG9zaXRpb25f
aW5fb2xkID09IG1hdGNoLnN0YXJ0X2luX29sZCkKKyAgICAgICAgICAgIG1hdGNoX3N0YXJ0c19h
dF9jdXJyZW50X3Bvc2l0aW9uX2luX25ldyA9IChwb3NpdGlvbl9pbl9uZXcgPT0gbWF0Y2guc3Rh
cnRfaW5fbmV3KQorICAgICAgICAgICAgI3ByaW50IGksICIgIiwgbWF0Y2gsICIgIiwgbWF0Y2hf
c3RhcnRzX2F0X2N1cnJlbnRfcG9zaXRpb25faW5fb2xkLCAiICIsIG1hdGNoX3N0YXJ0c19hdF9j
dXJyZW50X3Bvc2l0aW9uX2luX25ldworCisgICAgICAgICAgICBpZiBub3QgbWF0Y2hfc3RhcnRz
X2F0X2N1cnJlbnRfcG9zaXRpb25faW5fb2xkIGFuZCBub3QgbWF0Y2hfc3RhcnRzX2F0X2N1cnJl
bnRfcG9zaXRpb25faW5fbmV3OgorICAgICAgICAgICAgICAgIGFjdGlvbl91cHRvX21hdGNoX3Bv
c2l0aW9ucyA9ICdyZXBsYWNlJworICAgICAgICAgICAgZWxpZiBtYXRjaF9zdGFydHNfYXRfY3Vy
cmVudF9wb3NpdGlvbl9pbl9vbGQgYW5kIG5vdCBtYXRjaF9zdGFydHNfYXRfY3VycmVudF9wb3Np
dGlvbl9pbl9uZXc6CisgICAgICAgICAgICAgICAgYWN0aW9uX3VwdG9fbWF0Y2hfcG9zaXRpb25z
ID0gJ2luc2VydCcKKyAgICAgICAgICAgIGVsaWYgbm90IG1hdGNoX3N0YXJ0c19hdF9jdXJyZW50
X3Bvc2l0aW9uX2luX29sZCBhbmQgbWF0Y2hfc3RhcnRzX2F0X2N1cnJlbnRfcG9zaXRpb25faW5f
bmV3OgorICAgICAgICAgICAgICAgIGFjdGlvbl91cHRvX21hdGNoX3Bvc2l0aW9ucyA9ICdkZWxl
dGUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdGlvbl91cHRvX21hdGNo
X3Bvc2l0aW9ucyA9ICdub25lJworCisgICAgICAgICAgICBpZiBhY3Rpb25fdXB0b19tYXRjaF9w
b3NpdGlvbnMgIT0gJ25vbmUnOgorICAgICAgICAgICAgICAgIG9wZXJhdGlvbl91cHRvX21hdGNo
X3Bvc2l0aW9ucyA9IE9wZXJhdGlvbihhY3Rpb25fdXB0b19tYXRjaF9wb3NpdGlvbnMsIHBvc2l0
aW9uX2luX29sZCwgbWF0Y2guc3RhcnRfaW5fb2xkLCBwb3NpdGlvbl9pbl9uZXcsIG1hdGNoLnN0
YXJ0X2luX25ldykKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChvcGVyYXRpb25f
dXB0b19tYXRjaF9wb3NpdGlvbnMpCisgICAgICAgICAgICBpZiBtYXRjaC5zaXplICE9IDA6Cisg
ICAgICAgICAgICAgICAgbWF0Y2hfb3BlcmF0aW9uID0gT3BlcmF0aW9uKCdlcXVhbCcsIG1hdGNo
LnN0YXJ0X2luX29sZCwgbWF0Y2guZW5kX2luX29sZCgpLCBtYXRjaC5zdGFydF9pbl9uZXcsIG1h
dGNoLmVuZF9pbl9uZXcoKSkKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChtYXRj
aF9vcGVyYXRpb24pCisKKyAgICAgICAgICAgIHBvc2l0aW9uX2luX29sZCA9IG1hdGNoLmVuZF9p
bl9vbGQoKQorICAgICAgICAgICAgcG9zaXRpb25faW5fbmV3ID0gbWF0Y2guZW5kX2luX25ldygp
CisKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbnMKKworICAgIGRlZiBfbWF0Y2hpbmdfYmxvY2tz
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVjdXJzaXZlbHlfZmluZF9tYXRjaGluZ19i
bG9ja3MoMCwgbGVuKHNlbGYuX29sZF92ZXJzaW9uKSwgMCwgbGVuKHNlbGYuX25ld192ZXJzaW9u
KSwgW10pCisKKyAgICBkZWYgX3JlY3Vyc2l2ZWx5X2ZpbmRfbWF0Y2hpbmdfYmxvY2tzKHNlbGYs
IHN0YXJ0X2luX29sZCwgZW5kX2luX29sZCwgc3RhcnRfaW5fbmV3LCBlbmRfaW5fbmV3LCBtYXRj
aGluZ19ibG9ja3MpOgorICAgICAgICBtYXRjaCA9IHNlbGYuX2ZpbmRfbWF0Y2goc3RhcnRfaW5f
b2xkLCBlbmRfaW5fb2xkLCBzdGFydF9pbl9uZXcsIGVuZF9pbl9uZXcpCisgICAgICAgIGlmIG1h
dGNoOgorICAgICAgICAgICAgaWYgc3RhcnRfaW5fb2xkIDwgbWF0Y2guc3RhcnRfaW5fb2xkIGFu
ZCBzdGFydF9pbl9uZXcgPCBtYXRjaC5zdGFydF9pbl9uZXc6CisgICAgICAgICAgICAgICAgbWF0
Y2hpbmdfYmxvY2tzID0gc2VsZi5fcmVjdXJzaXZlbHlfZmluZF9tYXRjaGluZ19ibG9ja3Moc3Rh
cnRfaW5fb2xkLCBtYXRjaC5zdGFydF9pbl9vbGQsIHN0YXJ0X2luX25ldywgbWF0Y2guc3RhcnRf
aW5fbmV3LCBtYXRjaGluZ19ibG9ja3MpCisgICAgICAgICAgICBtYXRjaGluZ19ibG9ja3MuYXBw
ZW5kKG1hdGNoKQorICAgICAgICAgICAgaWYgbWF0Y2guZW5kX2luX29sZCgpIDwgZW5kX2luX29s
ZCBhbmQgbWF0Y2guZW5kX2luX25ldygpIDwgZW5kX2luX25ldzoKKyAgICAgICAgICAgICAgICBt
YXRjaGluZ19ibG9ja3MgPSBzZWxmLl9yZWN1cnNpdmVseV9maW5kX21hdGNoaW5nX2Jsb2Nrcyht
YXRjaC5lbmRfaW5fb2xkKCksIGVuZF9pbl9vbGQsIG1hdGNoLmVuZF9pbl9uZXcoKSwgZW5kX2lu
X25ldywgbWF0Y2hpbmdfYmxvY2tzKQorICAgICAgICByZXR1cm4gbWF0Y2hpbmdfYmxvY2tzCisK
KyAgICBkZWYgX2ZpbmRfbWF0Y2goc2VsZiwgc3RhcnRfaW5fb2xkLCBlbmRfaW5fb2xkLCBzdGFy
dF9pbl9uZXcsIGVuZF9pbl9uZXcpOgorICAgICAgICBiZXN0X21hdGNoX2luX29sZCA9IHN0YXJ0
X2luX29sZAorICAgICAgICBiZXN0X21hdGNoX2luX25ldyA9IHN0YXJ0X2luX25ldworICAgICAg
ICBiZXN0X21hdGNoX3NpemUgPSAwCisKKyAgICAgICAgbWF0Y2hfbGVuZ3RoX2F0ID0ge30KKyAg
ICAgICAgZm9yIGluZGV4X2luX29sZCBpbiByYW5nZShzdGFydF9pbl9vbGQsIGVuZF9pbl9vbGQp
OgorICAgICAgICAgICAgbmV3X21hdGNoX2xlbmd0aF9hdCA9IHt9CisgICAgICAgICAgICBvbGRf
d29yZCA9IHNlbGYuX29sZF92ZXJzaW9uW2luZGV4X2luX29sZF0KKyAgICAgICAgICAgIGZvciBp
bmRleF9pbl9uZXcgaW4gc2VsZi5fd29yZF9pbmRpY2VzLmdldChvbGRfd29yZCwgW10pOgorICAg
ICAgICAgICAgICAgIGlmIGluZGV4X2luX25ldyA8IHN0YXJ0X2luX25ldzoKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBpbmRleF9pbl9uZXcgPj0gZW5k
X2luX25ldzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIG5l
d19tYXRjaF9sZW5ndGggPSBtYXRjaF9sZW5ndGhfYXQuZ2V0KGluZGV4X2luX25ldyAtIDEsIDAp
ICsgMQorICAgICAgICAgICAgICAgIG5ld19tYXRjaF9sZW5ndGhfYXRbaW5kZXhfaW5fbmV3XSA9
IG5ld19tYXRjaF9sZW5ndGgKKworICAgICAgICAgICAgICAgIGlmIG5ld19tYXRjaF9sZW5ndGgg
PiBiZXN0X21hdGNoX3NpemU6CisgICAgICAgICAgICAgICAgICAgIGJlc3RfbWF0Y2hfaW5fb2xk
ID0gaW5kZXhfaW5fb2xkIC0gbmV3X21hdGNoX2xlbmd0aCArIDEKKyAgICAgICAgICAgICAgICAg
ICAgYmVzdF9tYXRjaF9pbl9uZXcgPSBpbmRleF9pbl9uZXcgLSBuZXdfbWF0Y2hfbGVuZ3RoICsg
MQorICAgICAgICAgICAgICAgICAgICBiZXN0X21hdGNoX3NpemUgPSBuZXdfbWF0Y2hfbGVuZ3Ro
CisgICAgICAgICAgICBtYXRjaF9sZW5ndGhfYXQgPSBuZXdfbWF0Y2hfbGVuZ3RoX2F0CisgICAg
ICAgICNwcmludCAiZmluZF9tYXRjaCByZXN1bHQ6ICIsIGJlc3RfbWF0Y2hfaW5fb2xkLCBiZXN0
X21hdGNoX2luX25ldywgYmVzdF9tYXRjaF9zaXplCisgICAgICAgIHJldHVybiBNYXRjaChiZXN0
X21hdGNoX2luX29sZCwgYmVzdF9tYXRjaF9pbl9uZXcsIGJlc3RfbWF0Y2hfc2l6ZSkgaWYgYmVz
dF9tYXRjaF9zaXplICE9IDAgZWxzZSBOb25lCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC9kaWZmYnVpbGRlcl91bml0dGVzdC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ByZXR0eXBhdGNoL2RpZmZidWls
ZGVyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmOWJmZDIyNGZlMzk0MmNmNTI2YjdiM2E1YTRm
YTM3NDcwOGJlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9wcmV0dHlwYXRjaC9kaWZmYnVpbGRlcl91bml0dGVzdC5weQpAQCAtMCwwICsx
LDExOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBv
cnQgdW5pdHRlc3QKKworZnJvbSBkaWZmYnVpbGRlciBpbXBvcnQgRGlmZkJ1aWxkZXIKKworCitj
bGFzcyBEaWZmQnVpbGRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rf
aW5kZXhfbmV3X3dvcmRzKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gRGlmZkJ1aWxkZXIoJ29s
ZCAnLCAnIG5ld24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkZXIuX3dvcmRfaW5k
aWNlc1snICddLCBbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGRlci5fd29yZF9p
bmRpY2VzWyduJ10sIFsxLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZGVyLl93
b3JkX2luZGljZXNbJ2UnXSwgWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkZXIu
X3dvcmRfaW5kaWNlc1sndyddLCBbM10pCisKKyAgICBkZWYgdGVzdF9tYXRjaGluZ19ibG9ja3Mo
c2VsZik6CisgICAgICAgIGJsb2NrcyA9IERpZmZCdWlsZGVyKCcgICBPTEQgICAnLCAnICAgTkVX
ICAgJykuX21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJs
b2NrcyksIDIpCisgICAgICAgIG0gPSBibG9ja3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChtLnN0YXJ0X2luX29sZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnN0YXJ0X2lu
X25ldywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnNpemUsIDMpCisgICAgICAgIG0g
PSBibG9ja3NbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnN0YXJ0X2luX29sZCwgNikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnN0YXJ0X2luX25ldywgNikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChtLnNpemUsIDMpCisKKyAgICBkZWYgdGVzdF9lcXVhbF9vcGVyYXRpb24o
c2VsZik6CisgICAgICAgIG9wZXJhdGlvbnMgPSBEaWZmQnVpbGRlcignb2xkJywgJ29sZCcpLm9w
ZXJhdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcGVyYXRpb25zKSwgMSkK
KyAgICAgICAgb3AgPSBvcGVyYXRpb25zWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Au
YWN0aW9uLCAnZXF1YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wLnN0YXJ0X2luX29s
ZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcC5lbmRfaW5fb2xkLCAzKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKG9wLnN0YXJ0X2luX25ldywgMCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChvcC5lbmRfaW5fbmV3LCAzKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV9vcGVyYXRp
b24oc2VsZik6CisgICAgICAgIG9wZXJhdGlvbnMgPSBEaWZmQnVpbGRlcignICAgT0xEICAgJywg
JyAgIE5FVyAgICcpLm9wZXJhdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihv
cGVyYXRpb25zKSwgMykKKyAgICAgICAgb3AgPSBvcGVyYXRpb25zWzBdCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwob3AuYWN0aW9uLCAnZXF1YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG9wLnN0YXJ0X2luX29sZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcC5lbmRfaW5f
b2xkLCAzKQorICAgICAgICBvcCA9IG9wZXJhdGlvbnNbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChvcC5hY3Rpb24sICdyZXBsYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcC5z
dGFydF9pbl9vbGQsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3AuZW5kX2luX29sZCwg
NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcC5zdGFydF9pbl9uZXcsIDMpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwob3AuZW5kX2luX25ldywgNikKKyAgICAgICAgb3AgPSBvcGVyYXRp
b25zWzJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3AuYWN0aW9uLCAnZXF1YWwnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKG9wLnN0YXJ0X2luX29sZCwgNikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvcC5lbmRfaW5fb2xkLCA5KQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X29wZXJh
dGlvbihzZWxmKToKKyAgICAgICAgb3BlcmF0aW9ucyA9IERpZmZCdWlsZGVyKCcgICAgICAnLCAn
ICAgTkVXICAgJykub3BlcmF0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9w
ZXJhdGlvbnMpLCAzKQorICAgICAgICBvcCA9IG9wZXJhdGlvbnNbMF0KKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChvcC5hY3Rpb24sICdlcXVhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
b3Auc3RhcnRfaW5fb2xkLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wLmVuZF9pbl9v
bGQsIDMpCisgICAgICAgIG9wID0gb3BlcmF0aW9uc1sxXQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG9wLmFjdGlvbiwgJ2luc2VydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Auc3Rh
cnRfaW5fb2xkLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wLmVuZF9pbl9vbGQsIDMp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Auc3RhcnRfaW5fbmV3LCAzKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG9wLmVuZF9pbl9uZXcsIDYpCisgICAgICAgIG9wID0gb3BlcmF0aW9u
c1syXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wLmFjdGlvbiwgJ2VxdWFsJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChvcC5zdGFydF9pbl9vbGQsIDMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwob3Auc3RhcnRfaW5fbmV3LCA2KQorCisgICAgZGVmIHRlc3RfZGVsZXRlX29wZXJh
dGlvbihzZWxmKToKKyAgICAgICAgb3BlcmF0aW9ucyA9IERpZmZCdWlsZGVyKCdPTEQgJywgJyAn
KS5vcGVyYXRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3BlcmF0aW9ucyks
IDIpCisgICAgICAgIG9wID0gb3BlcmF0aW9uc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KG9wLmFjdGlvbiwgJ2RlbGV0ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Auc3RhcnRf
aW5fb2xkLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wLmVuZF9pbl9vbGQsIDMpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Auc3RhcnRfaW5fbmV3LCAwKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG9wLmVuZF9pbl9uZXcsIDApCisgICAgICAgIG9wID0gb3BlcmF0aW9uc1sx
XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wLmFjdGlvbiwgJ2VxdWFsJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChvcC5zdGFydF9pbl9vbGQsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwob3Auc3RhcnRfaW5fbmV3LCAwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vcHJldHR5cGF0Y2gvbGluZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3ByZXR0eXBhdGNoL2xpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM1ZDI2ZTBmOThh
NzY0MzFmNTQ1MTQxODdhODY3ZTFhZjdlNDRiYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ByZXR0eXBhdGNoL2xpbmUucHkKQEAgLTAsMCAr
MSw5MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB4
bWwuc2F4IGltcG9ydCBzYXh1dGlscworCisKK2NsYXNzIExpbmU6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGZyb21fbGluZSwgdG9fbGluZSwgdGV4dCk6CisgICAgICAgIHNlbGYuX2Zyb21fbGlu
ZV9udW1iZXIgPSBmcm9tX2xpbmUKKyAgICAgICAgc2VsZi5fdG9fbGluZV9udW1iZXIgPSB0b19s
aW5lCisgICAgICAgIHNlbGYuX3RleHQgPSB0ZXh0CisKKyAgICBkZWYgdGV4dF9hc19odG1sKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2F4dXRpbHMuZXNjYXBlKHNlbGYuX3RleHQpCisKKyAgICBk
ZWYgX2Nzc19jbGFzc2VzKHNlbGYpOgorICAgICAgICBsaW5lX2NsYXNzZXMgPSBbIkxpbmUiXQor
ICAgICAgICBpZiBub3QgKG5vdCBzZWxmLl90b19saW5lX251bWJlciBvciBzZWxmLl9mcm9tX2xp
bmVfbnVtYmVyKToKKyAgICAgICAgICAgIGxpbmVfY2xhc3Nlcy5hcHBlbmQoImFkZCIpCisgICAg
ICAgIGlmIG5vdCAobm90IHNlbGYuX2Zyb21fbGluZV9udW1iZXIgb3Igc2VsZi5fdG9fbGluZV9u
dW1iZXIpOgorICAgICAgICAgICAgbGluZV9jbGFzc2VzLmFwcGVuZCgicmVtb3ZlIikKKyAgICAg
ICAgcmV0dXJuIGxpbmVfY2xhc3NlcworCisgICAgZGVmIHRvX2h0bWwoc2VsZik6CisgICAgICAg
IHN0ciA9ICI8ZGl2IGNsYXNzPSclcyc+XG4iICUgJyAnLmpvaW4oc2VsZi5fY3NzX2NsYXNzZXMo
KSkKKyAgICAgICAgaWYgc2VsZi5fZnJvbV9saW5lX251bWJlciBvciBzZWxmLl90b19saW5lX251
bWJlcjoKKyAgICAgICAgICAgIHN0ciArPSAoIjxzcGFuIGNsYXNzPSdmcm9tIGxpbmVOdW1iZXIn
PiVzPC9zcGFuPjxzcGFuIGNsYXNzPSd0byBsaW5lTnVtYmVyJz4lczwvc3Bhbj5cbiIKKyAgICAg
ICAgICAgICAgICAlIChzYXh1dGlscy5lc2NhcGUoc2VsZi5fZnJvbV9saW5lX251bWJlcikgaWYg
c2VsZi5fZnJvbV9saW5lX251bWJlciBlbHNlICcmbmJzcDsnLAorICAgICAgICAgICAgICAgICAg
IHNheHV0aWxzLmVzY2FwZShzZWxmLl90b19saW5lX251bWJlcikgaWYgc2VsZi5fdG9fbGluZV9u
dW1iZXIgZWxzZSAnJm5ic3A7JykpCisgICAgICAgIHN0ciArPSAiPHNwYW4gY2xhc3M9J3RleHQn
PiVzPC9zcGFuPlxuIiAlIHNlbGYudGV4dF9hc19odG1sKCkKKyAgICAgICAgc3RyICs9ICI8L2Rp
dj5cbiIKKyAgICAgICAgcmV0dXJuIHN0cgorCisKK2NsYXNzIENvZGVMaW5lKExpbmUpOgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyb21fbGluZSwgdG9fbGluZSwgdGV4dCk6CisgICAgICAg
IExpbmUuX19pbml0X18oc2VsZiwgZnJvbV9saW5lLCB0b19saW5lLCB0ZXh0KQorICAgICAgICBz
ZWxmLm9wZXJhdGlvbnMgPSBOb25lCisKKyAgICBkZWYgdGV4dF9hc19odG1sKHNlbGYpOgorICAg
ICAgICBodG1sID0gW10KKyAgICAgICAgaWYgbm90IHNlbGYub3BlcmF0aW9ucyBvciBsZW4oc2Vs
Zi5vcGVyYXRpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHNheHV0aWxzLmVzY2FwZShz
ZWxmLl90ZXh0KQorICAgICAgICB0YWcgPSAiZGVsIiBpZiBzZWxmLl9mcm9tX2xpbmVfbnVtYmVy
IGVsc2UgImlucyIKKyAgICAgICAgZm9yIG9wZXJhdGlvbiBpbiBzZWxmLm9wZXJhdGlvbnM6Cisg
ICAgICAgICAgICBzdGFydCA9IG9wZXJhdGlvbi5zdGFydF9pbl9vbGQgaWYgc2VsZi5fZnJvbV9s
aW5lX251bWJlciBlbHNlIG9wZXJhdGlvbi5zdGFydF9pbl9uZXcKKyAgICAgICAgICAgIGVlbmQg
PSBvcGVyYXRpb24uZW5kX2luX29sZCBpZiBzZWxmLl9mcm9tX2xpbmVfbnVtYmVyIGVsc2Ugb3Bl
cmF0aW9uLmVuZF9pbl9uZXcKKyAgICAgICAgICAgIGVzY2FwZWRfdGV4dCA9IHNheHV0aWxzLmVz
Y2FwZShzZWxmLl90ZXh0W3N0YXJ0OmVlbmRdKQorICAgICAgICAgICAgaWYgZWVuZCAtIHN0YXJ0
ID09IDAgb3Igb3BlcmF0aW9uLmFjdGlvbiA9PSAnZXF1YWwnOgorICAgICAgICAgICAgICAgIGh0
bWwuYXBwZW5kKGVzY2FwZWRfdGV4dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgaHRtbC5hcHBlbmQoIjwlcz4lczwvJXM+IiAlICh0YWcsIGVzY2FwZWRfdGV4dCwgdGFnKSkK
KyAgICAgICAgcmV0dXJuICcnLmpvaW4oaHRtbCkKKworCitjbGFzcyBDb250ZXh0TGluZShMaW5l
KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0KToKKyAgICAgICAgTGluZS5fX2lu
aXRfXyhzZWxmLCAiQCIsICJAIiwgY29udGV4dCkKKworICAgIGRlZiBfY3NzX2NsYXNzZXMoc2Vs
Zik6CisgICAgICAgIGNsYXNzZXMgPSBMaW5lLl9jc3NfY2xhc3NlcyhzZWxmKQorICAgICAgICBj
bGFzc2VzLmFwcGVuZCgiY29udGV4dCIpCisgICAgICAgIHJldHVybiBjbGFzc2VzCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC9saW5l
X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5
cGF0Y2gvbGluZV91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNGZhMmEzMDFmZjA3ZmIzNjQ4MmNh
ZDllMjkzODY1MGJiOWU3MDhjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gvbGluZV91bml0dGVzdC5weQpAQCAtMCwwICsx
LDc3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
dW5pdHRlc3QKK2Zyb20gbGluZSBpbXBvcnQgKgorZnJvbSBkaWZmYnVpbGRlciBpbXBvcnQgT3Bl
cmF0aW9uCisKKworY2xhc3MgTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVm
IHRlc3RfdGV4dF9hc19odG1sKHNlbGYpOgorICAgICAgICBsaW5lID0gTGluZSgxLCAxLCAiYWJj
IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLnRleHRfYXNfaHRtbCgpLCAiYWJjIikK
KyAgICAgICAgbGluZSA9IExpbmUoMSwgMSwgIjxzY3JpcHQiKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGxpbmUudGV4dF9hc19odG1sKCksICImbHQ7c2NyaXB0IikKKworICAgIGRlZiB0ZXN0
X2Nzc19jbGFzc2VzKHNlbGYpOgorICAgICAgICBsaW5lID0gTGluZShOb25lLCBOb25lLCAiYWJj
IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLl9jc3NfY2xhc3NlcygpLCBbIkxpbmUi
XSkKKyAgICAgICAgbGluZSA9IExpbmUoMSwgTm9uZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobGluZS5fY3NzX2NsYXNzZXMoKSwgWyJMaW5lIiwgInJlbW92ZSJdKQorICAgICAg
ICBsaW5lID0gTGluZShOb25lLCAyLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChs
aW5lLl9jc3NfY2xhc3NlcygpLCBbIkxpbmUiLCAiYWRkIl0pCisgICAgICAgIGxpbmUgPSBMaW5l
KDEsIDIsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUuX2Nzc19jbGFzc2Vz
KCksIFsiTGluZSJdKQorCisgICAgZGVmIHRlc3RfdG9faHRtbChzZWxmKToKKyAgICAgICAgbGlu
ZSA9IExpbmUoTm9uZSwgTm9uZSwgImFiJmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxp
bmUudG9faHRtbCgpLCAiPGRpdiBjbGFzcz0nTGluZSc+XG48c3BhbiBjbGFzcz0ndGV4dCc+YWIm
YW1wO2M8L3NwYW4+XG48L2Rpdj5cbiIpCisgICAgICAgIGxpbmUgPSBMaW5lKCImIiwgTm9uZSwg
ImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZS50b19odG1sKCksICI8ZGl2IGNs
YXNzPSdMaW5lIHJlbW92ZSc+XG48c3BhbiBjbGFzcz0nZnJvbSBsaW5lTnVtYmVyJz4mYW1wOzwv
c3Bhbj48c3BhbiBjbGFzcz0ndG8gbGluZU51bWJlcic+Jm5ic3A7PC9zcGFuPlxuPHNwYW4gY2xh
c3M9J3RleHQnPmRlZjwvc3Bhbj5cbjwvZGl2PlxuIikKKworCitjbGFzcyBDb2RlTGluZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdGV4dF9hc19odG1sKHNlbGYpOgor
ICAgICAgICBsaW5lID0gQ29kZUxpbmUoTm9uZSwgTm9uZSwgImFiYyIpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGxpbmUudGV4dF9hc19odG1sKCksICJhYmMiKQorICAgICAgICBsaW5lID0g
Q29kZUxpbmUoMSwgTm9uZSwgImFiYyIpCisgICAgICAgIGxpbmUub3BlcmF0aW9ucyA9IFtPcGVy
YXRpb24oImRlbGV0ZSIsIDAsIDEsIDAsIDApLCBPcGVyYXRpb24oImVxdWFsIiwgMSwgMywgMCwg
MildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZS50ZXh0X2FzX2h0bWwoKSwgIjxkZWw+
YTwvZGVsPmJjIikKKworCitjbGFzcyBDb250ZXh0TGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorCisgICAgZGVmIHRlc3RfY3NzX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGxpbmUgPSBDb250
ZXh0TGluZSgiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLl9jc3NfY2xhc3Nl
cygpLCBbIkxpbmUiLCAiY29udGV4dCJdKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vcHJldHR5cGF0Y2gvcHJldHR5cGF0Y2gucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9wcmV0dHlwYXRjaC9wcmV0dHlwYXRjaC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMGJkNDg4MWYwNmQwYTg5Mzc1MmYzODc1NDVhMWU5ZDJhMDlhMTMxCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJldHR5cGF0Y2gvcHJl
dHR5cGF0Y2gucHkKQEAgLTAsMCArMSw5NCBAQAoraW1wb3J0IHJlCitmcm9tIGRpZmZidWlsZGVy
IGltcG9ydCBEaWZmQnVpbGRlcgorCisjZGVmIHByZXR0aWZ5KHN0cmluZyk6CisjICAgIGZpbGVf
ZGlmZnMgPSBGaWxlRGlmZi5wYXJzZShzdHJpbmcpCisjICAgIHJldHVybiBIRUFERVIgKyAiXG4i
ICsgZmlsZV9kaWZmcy4KKworU1RBUlRfT0ZfU0VDVElPTl9GT1JNQVQgPSByZS5jb21waWxlKCJe
QEAgLShcZCspKD86LFxkKyk/IFwrKFxkKykoPzosXGQrKT8gQEBccyooLiopIikKKworCitjbGFz
cyBEaWZmU2VjdGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZXMpOgorICAgICAgICBp
ZiBsZW4obGluZXMpIDwgMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRGlmZlNlY3Rp
b24oKSBvbmx5IHJlY2VpdmVkICVkIGxpbmVzJyAlIGxlbihsaW5lcykpCisKKyAgICAgICAgbWF0
Y2hlcyA9IFNUQVJUX09GX1NFQ1RJT05fRk9STUFULm1hdGNoKGxpbmVzWzBdKQorICAgICAgICBp
ZiBtYXRjaGVzOgorICAgICAgICAgICAgZnJvbSA9IGludChtYXRjaGVzLmdyb3VwKDEpKQorICAg
ICAgICAgICAgdG8gPSBpbnQobWF0Y2hlcy5ncm91cCgyKSkKKworICAgICAgICBzZWxmLl9saW5l
cyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgc3RhcnRfb2Zf
bGluZSA9IDEgaWYgIl5bLSsgXSIuY29tcGlsZSgpLnNlYXJjaChsaW5lKSBlbHNlIDAKKyAgICAg
ICAgICAgIHRleHQgPSBsaW5lW3N0YXJ0X29mX2xpbmU6XS5yc3RyaXAoIlxuIikKKyAgICAgICAg
ICAgIGZpcnN0X2NoYXIgPSBsaW5lWzBdCisgICAgICAgICAgICBpZiBmaXJzdF9jaGFyID09ICIt
IjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDb2RlTGluZShmcm9tLCBOb25lLCB0ZXh0KQor
ICAgICAgICAgICAgICAgIGlmIGZyb206CisgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gMQor
ICAgICAgICAgICAgZWxpZiBmaXJzdF9jaGFyID09ICIrIjoKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBDb2RlTGluZShOb25lLCB0bywgdGV4dCkKKyAgICAgICAgICAgICAgICBpZiB0bzoKKyAg
ICAgICAgICAgICAgICAgICAgdG8gKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBDb2RlTGluZShmcm9tLCB0bywgdGV4dCkKKyAgICAgICAgICAgICAgICBp
ZiBmcm9tOgorICAgICAgICAgICAgICAgICAgICBmcm9tICs9IDEKKyAgICAgICAgICAgICAgICBp
ZiB0bzoKKyAgICAgICAgICAgICAgICAgICAgdG8gKz0gMQorICAgICAgICAgICAgc2VsZi5fbGlu
ZXMuYXBwZW5kKHJlc3VsdCkKKworICAgICAgICBpZiBtYXRjaGVzIGFuZCBsZW4obWF0Y2hlcy5n
cm91cCgzKSkgPiAwOgorICAgICAgICAgICAgc2VsZi5fbGluZXMuaW5zZXJ0KDAsIENvbnRleHRM
aW5lKG1hdGNoZXMuZ3JvdXAoMykpKQorCisgICAgICAgIGNoYW5nZXMgPSBbW1tdLCBbXV1dCisg
ICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2xpbmVzOgorICAgICAgICAgICAgaWYgbGluZS5oYXNf
ZnJvbV9saW5lX251bWJlcigpIGFuZCBsaW5lLmhhc190b19saW5lX251bWJlcigpOgorICAgICAg
ICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKFtbXSwgW11dKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICBpZiBub3QgbGluZS5oYXNfb2h0b19saW5lX251bWJlcjoKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VzW2xlbihjaGFuZ2VzKSAtIDFdWzBdLmFwcGVuZChsaW5lKQorICAg
ICAgICAgICAgaWYgbm90IGxpbmUuaGFzX2Zyb21fbGluZV9udW1iZXI6CisgICAgICAgICAgICAg
ICAgY2hhbmdlc1tsZW4oY2hhbmdlcykgLSAxXVsxXS5hcHBlbmQobGluZSkKKworICAgICAgICBm
b3IgY2hhbmdlIGluIGNoYW5nZXM6CisgICAgICAgICAgICBpZiBsZW4oY2hhbmdlWzBdKSAhPSBs
ZW4oY2hhbmdlWzFdKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9y
IGkgaW4gcmFuZ2UoMCwgbGVuKGNoYW5nZVswXSkpOgorICAgICAgICAgICAgICAgIHJhd19vcGVy
YXRpb25zID0gRGlmZkJ1aWxkZXIoY2hhbmdlWzBdW2ldLnRleHQsIGNoYW5nZVsxXVtpXS50ZXh0
KS5vcGVyYXRpb25zCisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucyA9IFtdCisgICAgICAgICAg
ICAgICAgYmFjayA9IDAKKyAgICAgICAgICAgICAgICBmb3Igaiwgb3BlcmF0aW9uIGluIGVudW1l
cmF0ZShyYXdfb3BlcmF0aW9ucyk6CisgICAgICAgICAgICAgICAgICAgIGlmIG9wZXJhdGlvbi5h
Y3Rpb24gPT0gImVxdWFsIiBhbmQgaiA8IGxlbihyYXdfb3BlcmF0aW9ucykgLSAxOgorICAgICAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gb3BlcmF0aW9uLmVuZF9pbl9uZXcgLSBvcGVyYXRp
b24uc3RhcnRfaW5fbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW5ndGggPCBTTUFM
TEVTVF9FUVVBTF9PUEVSQVRJT046CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjayA9
IGxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbi5zdGFydF9pbl9vbGQgLT0gYmFjaworICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb24uc3RhcnRfaW5fbmV3IC09IGJhY2sKKyAgICAgICAgICAgICAgICAgICAg
YmFjayA9IDAKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQob3BlcmF0aW9u
KQorICAgICAgICAgICAgICAgIGNoYW5nZVswXVtpXS5vcGVyYXRpb25zID0gb3BlcmF0aW9ucwor
ICAgICAgICAgICAgICAgIGNoYW5nZVsxXVtpXS5vcGVyYXRpb25zID0gb3BlcmF0aW9ucworCisg
ICAgZGVmIHRvX2h0bWwoc2VsZik6CisgICAgICAgIHN0ciA9ICI8ZGl2IGNsYXNzPSdEaWZmU2Vj
dGlvbic+XG4iCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2xpbmVzOgorICAgICAgICAgICAg
c3RyICs9IGxpbmUudG9faHRtbCgpCisgICAgICAgIHN0ciArPSAiPC9kaXY+XG4iCisgICAgICAg
IHJldHVybiBzdHIKKworICAgIGRlZiBwYXJzZShsaW5lcyk6CisgICAgICAgIHNlY3Rpb25zID0g
W1tdXQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmICJeQEAiLmNv
bXBpbGUoKS5zZWFyY2gobGluZSk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFtd
KQorICAgICAgICAgICAgc2VjdGlvbnNbbGVuKHNlY3Rpb25zKSAtIDFdLmFwcGVuZChsaW5lKQor
CisgICAgICAgIGRpZmZfc2VjdGlvbnMgPSBbXQorICAgICAgICBmb3IgbGluZXMgaW4gc2VjdGlv
bnM6CisgICAgICAgICAgICBpZiBsZW4obGluZXMpIDw9IDA6CisgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgIGRpZmZfc2VjdGlvbnMuYXBwZW5kKERpZmZTZWN0aW9uKGxpbmVz
KSkKKyAgICAgICAgcmV0dXJuIGRpZmZfc2VjdGlvbgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>