<?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>72351</bug_id>
          
          <creation_ts>2011-11-14 21:10:57 -0800</creation_ts>
          <short_desc>Implement edit-distance based reviewer recognition algorithm</short_desc>
          <delta_ts>2011-11-15 22:41:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>72340</dependson>
          <blocked>72243</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>502620</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-14 21:10:57 -0800</bug_when>
    <thetext>Now that we have fixed the bug 72340, we&apos;re in the place to dramatically improve the recognizability of reviewer names.

Be hold!, this algorithm can understand names like &quot;Adam Barth.:w&quot; and Sammy Weinig.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502622</commentid>
    <comment_count>1</comment_count>
      <attachid>115093</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-14 21:26:29 -0800</bug_when>
    <thetext>Created attachment 115093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502623</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 21:30:09 -0800</bug_when>
    <thetext>Attachment 115093 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy...&quot; exit_code: 1

Tools/Scripts/webkitpy/common/edit_distance_unittest.py:33:  expected 2 blank lines, found 1  [pep8/E302] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502624</commentid>
    <comment_count>3</comment_count>
      <attachid>115094</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-14 21:39:06 -0800</bug_when>
    <thetext>Created attachment 115094
Fixed style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502627</commentid>
    <comment_count>4</comment_count>
      <attachid>115095</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-14 21:46:54 -0800</bug_when>
    <thetext>Created attachment 115095
Removed unsed argument in edit_distance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502722</commentid>
    <comment_count>5</comment_count>
      <attachid>115095</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-15 01:27:24 -0800</bug_when>
    <thetext>Comment on attachment 115095
Removed unsed argument in edit_distance

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

&gt; Tools/Scripts/webkitpy/common/config/committers_unittest.py:97
&gt; +        self.assertEqual(committers.contributors_by_fuzzy_match(&apos;Geoff Garen&apos;), ([committers.contributor_by_name(&apos;Geoffrey Garen&apos;)], 3))

I would have used an _assert_fuzzy_match helper here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502727</commentid>
    <comment_count>6</comment_count>
      <attachid>115095</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 01:30:28 -0800</bug_when>
    <thetext>Comment on attachment 115095
Removed unsed argument in edit_distance

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

&gt;&gt; Tools/Scripts/webkitpy/common/config/committers_unittest.py:97
&gt;&gt; +        self.assertEqual(committers.contributors_by_fuzzy_match(&apos;Geoff Garen&apos;), ([committers.contributor_by_name(&apos;Geoffrey Garen&apos;)], 3))
&gt; 
&gt; I would have used an _assert_fuzzy_match helper here.

So the problem I had with that approach is that when the assertion fails, the first thing I see is:
self.assertEqual(&lt;whatever&gt;, expected).

This approach has an advantage that committers.contributors_by_fuzzy_match(&apos;Geoff Garen&apos;) and ([committers.contributor_by_name(&apos;Geoffrey Garen&apos;)], 3) both show up on the last line when the assertion fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502745</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-15 02:01:58 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 115095 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115095&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/common/config/committers_unittest.py:97
&gt; &gt;&gt; +        self.assertEqual(committers.contributors_by_fuzzy_match(&apos;Geoff Garen&apos;), ([committers.contributor_by_name(&apos;Geoffrey Garen&apos;)], 3))
&gt; &gt; 
&gt; &gt; I would have used an _assert_fuzzy_match helper here.
&gt; 
&gt; So the problem I had with that approach is that when the assertion fails, the first thing I see is:
&gt; self.assertEqual(&lt;whatever&gt;, expected).

Sure... but hte second to-last frame would have the arguments you want. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502783</commentid>
    <comment_count>8</comment_count>
      <attachid>115095</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-15 03:18:26 -0800</bug_when>
    <thetext>Comment on attachment 115095
Removed unsed argument in edit_distance

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

&gt; Tools/Scripts/webkitpy/common/edit_distance.py:38
&gt; +    distances = [array(&apos;h&apos;, (0,) * (len(str2) + 1)) for i in range(0, len(str1) + 1)]
&gt; +    for i in range(1, len(str1) + 1):
&gt; +        distances[i][0] = i
&gt; +
&gt; +    for j in range(1, len(str2) + 1):
&gt; +        distances[0][j] = j

I&apos;m really not a big fan of one letter variable names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503042</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 10:40:42 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 115095 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115095&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/edit_distance.py:38
&gt; &gt; +    distances = [array(&apos;h&apos;, (0,) * (len(str2) + 1)) for i in range(0, len(str1) + 1)]
&gt; &gt; +    for i in range(1, len(str1) + 1):
&gt; &gt; +        distances[i][0] = i
&gt; &gt; +
&gt; &gt; +    for j in range(1, len(str2) + 1):
&gt; &gt; +        distances[0][j] = j
&gt; 
&gt; I&apos;m really not a big fan of one letter variable names.

Do you have a suggestion on what to call them? I mean they&apos;re indexes in str1 and str2 so I could call it index1 and index2 but I don&apos;t think that clarify anything here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503044</commentid>
    <comment_count>10</comment_count>
      <attachid>115198</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 10:44:40 -0800</bug_when>
    <thetext>Created attachment 115198
Added _assert_fuzz_match</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503122</commentid>
    <comment_count>11</comment_count>
      <attachid>115198</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-15 12:03:25 -0800</bug_when>
    <thetext>Comment on attachment 115198
Added _assert_fuzz_match

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

I think this needs another round.  Mostly for aesthetics.

&gt; Tools/Scripts/webkitpy/common/edit_distance.py:32
&gt; +def edit_distance(str1, str2):

Did you write this yourself?  It doesn&apos;t qutie feel like your style.

&gt; Tools/Scripts/webkitpy/common/edit_distance.py:33
&gt; +    distances = [array(&apos;h&apos;, (0,) * (len(str2) + 1)) for i in range(0, len(str1) + 1)]

I&apos;m confused what the &quot;h&quot; is for?

&gt; Tools/Scripts/webkitpy/common/edit_distance.py:38
&gt; +    for i in range(1, len(str1) + 1):
&gt; +        distances[i][0] = i
&gt; +
&gt; +    for j in range(1, len(str2) + 1):
&gt; +        distances[0][j] = j

Why is this all 1-based?

&gt; Tools/Scripts/webkitpy/common/edit_distance.py:44
&gt; +            distances[i][j] = min(distances[i][j - 1] + 1, distances[i - 1][j] + 1, distances[i - 1][j - 1] + diff)

It seems like we have more -1 than we do plain usage of i/j.  I assuem that&apos;s because the above array&apos;s are one-based?

&gt; Tools/Scripts/webkitpy/common/edit_distance_unittest.py:36
&gt; +        self.assertEqual(edit_distance(&apos;&apos;, &apos;aa&apos;), 2)

I even write things like self._assert_edit_distance(&apos;&apos;, &apos;aa&apos;, 2) here.  But this is also OK.

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:163
&gt; +        if self._reviewers_text_list:
&gt; +            list_of_reviewers = [self._committer_list.contributors_by_fuzzy_match(reviewer)[0] for reviewer in self._reviewers_text_list]
&gt; +            self._reviewers = [reviewers[0] for reviewers in list_of_reviewers if len(reviewers) == 1]
&gt; +        else:
&gt; +            self._reviewers = []

I think this if empty-string check makes more sense inside contributors_by_fuzzy_match?

I&apos;m also not sure why you&apos;re stripping the list container off of _reviewers in the case where there is only one reviewer?

&gt; Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py:420
&gt; +    def _contributors(self, names):
&gt; +        return [CommitterList().contributor_by_name(name) for name in names]

I&apos;m not sure we want to make this test depend on our ContributorList directly.  If we don&apos;t have to test that part using real names, we should avoid it.  But it&apos;s also OK, since 1.  the contributor list is very static data, and 2 lots of other tests aready depend on it, sadly.

&gt; Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py:429
&gt; +        self.assertEquals(ChangeLogEntry._parse_reviewer_text(&apos;Reviewed by Mac build fix&apos;)[1], [&apos;Mac build fix&apos;])

Likewise you could use an _assert_reviewer_text(&quot;Reviewed by Mac build fix&quot;, &quot;Mac build fix&quot;) here, although obviously that wouldn&apos;t work for all the cases you&apos;re testing, but a few such helpers could make this wall of text more readable.

&gt; Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py:454
&gt; +        self.assertEqual(self._entry_with_reviewer(&quot;Reviewed by Eric Seidel.&quot;).has_valid_reviewer(), True)

Wow, this would be much clearer with a helper.

self._assert_has_valid_reviewer(&quot;Reviewed by Eric Seidel&quot;, True)

I&apos;m not sure why you&apos;re opposed to helper functions in test cases? :p

&gt; Tools/Scripts/webkitpy/common/config/committers.py:32
&gt; +from webkitpy.common.edit_distance import edit_distance

Historically we&apos;ve avoided having _ in module names to match python style (outputcapture.py, filesystem.py, etc.)

&gt; Tools/Scripts/webkitpy/common/config/committers.py:536
&gt; +        # First path, optimitically match for fullname, email and irc_nicknames
&gt; +        for contributor in self.contributors():
&gt; +            if string in [email.lower() for email in contributor.emails] or string == contributor.full_name.lower():

I would consider breaking these blocks into helper functions.  1.  to make the management of hte return tuple-easier.  (The first helpr doesn&apos;t have to care about the tuple-ness).  2. to make it easier to test (or pref-test) halves of it.

&gt; Tools/Scripts/webkitpy/common/config/committers.py:553
&gt; +            if len(tokens):

You can use &quot;if tokens&quot; to accomplish the same with 5 fewer chars if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503202</commentid>
    <comment_count>12</comment_count>
      <attachid>115198</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 13:33:57 -0800</bug_when>
    <thetext>Comment on attachment 115198
Added _assert_fuzz_match

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

&gt;&gt; Tools/Scripts/webkitpy/common/edit_distance.py:32
&gt;&gt; +def edit_distance(str1, str2):
&gt; 
&gt; Did you write this yourself?  It doesn&apos;t qutie feel like your style.

Yup.

&gt;&gt; Tools/Scripts/webkitpy/common/edit_distance.py:33
&gt;&gt; +    distances = [array(&apos;h&apos;, (0,) * (len(str2) + 1)) for i in range(0, len(str1) + 1)]
&gt; 
&gt; I&apos;m confused what the &quot;h&quot; is for?

Stands for unsigned short. http://docs.python.org/library/array.html

&gt;&gt; Tools/Scripts/webkitpy/common/edit_distance.py:38
&gt;&gt; +        distances[0][j] = j
&gt; 
&gt; Why is this all 1-based?

The reason I&apos;m starting from 1 is to avoid doing distances[0][0]=0 twice (and thrice if we include the initialization).

But we need to initialize distances[len(str1)][0] and distances[0][len(str2)].

&gt;&gt; Tools/Scripts/webkitpy/common/edit_distance.py:44

&gt; 
&gt; It seems like we have more -1 than we do plain usage of i/j.  I assuem that&apos;s because the above array&apos;s are one-based?

The matrix is 0-based. I need len(str1) + 1 columns and len(str2) + 1 rows.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:163
&gt;&gt; +            self._reviewers = []
&gt; 
&gt; I think this if empty-string check makes more sense inside contributors_by_fuzzy_match?
&gt; 
&gt; I&apos;m also not sure why you&apos;re stripping the list container off of _reviewers in the case where there is only one reviewer?

When there are multiple reviewers that are same distance away, it&apos;s inconclusive as to who should be the best match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503216</commentid>
    <comment_count>13</comment_count>
      <attachid>115198</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-15 13:40:38 -0800</bug_when>
    <thetext>Comment on attachment 115198
Added _assert_fuzz_match

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/edit_distance.py:33
&gt;&gt;&gt; +    distances = [array(&apos;h&apos;, (0,) * (len(str2) + 1)) for i in range(0, len(str1) + 1)]
&gt;&gt; 
&gt;&gt; I&apos;m confused what the &quot;h&quot; is for?
&gt; 
&gt; Stands for unsigned short. http://docs.python.org/library/array.html

Wow.  Amazing that they don&apos;t have constants on Array for that. :)

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:163

&gt;&gt; 
&gt;&gt; I think this if empty-string check makes more sense inside contributors_by_fuzzy_match?
&gt;&gt; 
&gt;&gt; I&apos;m also not sure why you&apos;re stripping the list container off of _reviewers in the case where there is only one reviewer?
&gt; 
&gt; When there are multiple reviewers that are same distance away, it&apos;s inconclusive as to who should be the best match.

I see.  You&apos;re only flattening the array of arrays by one in the case where there is one reviewer in any one of the reviewer lists?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503252</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 14:11:03 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I see.  You&apos;re only flattening the array of arrays by one in the case where there is one reviewer in any one of the reviewer lists?

Right. Perhaps I should have a helper function for this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503381</commentid>
    <comment_count>15</comment_count>
      <attachid>115269</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 16:00:38 -0800</bug_when>
    <thetext>Created attachment 115269
Fixed per Eric&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503386</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 16:03:27 -0800</bug_when>
    <thetext>Attachment 115269 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy...&quot; exit_code: 1

Traceback (most recent call last):
  File &quot;Tools/Scripts/check-webkit-style&quot;, line 51, in &lt;module&gt;
    from webkitpy.common.checkout.scm import detect_scm_system
  File &quot;/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/common/checkout/__init__.py&quot;, line 3, in &lt;module&gt;
    from .checkout import Checkout
  File &quot;/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/common/checkout/checkout.py&quot;, line 32, in &lt;module&gt;
    from webkitpy.common.checkout.changelog import ChangeLog, parse_bug_id_from_changelog
  File &quot;/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/common/checkout/changelog.py&quot;, line 37, in &lt;module&gt;
    from webkitpy.common.config.committers import CommitterList
  File &quot;/mnt/git/webkit-style-queue/Tools/Scripts/webkitpy/common/config/committers.py&quot;, line 32, in &lt;module&gt;
    from webkitpy.common.editdistance import edit_distance
ImportError: No module named editdistance


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503398</commentid>
    <comment_count>17</comment_count>
      <attachid>115270</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 16:12:14 -0800</bug_when>
    <thetext>Created attachment 115270
Brought back forgotten editdistance.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503420</commentid>
    <comment_count>18</comment_count>
      <attachid>115270</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-15 16:31:07 -0800</bug_when>
    <thetext>Comment on attachment 115270
Brought back forgotten editdistance.py

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

Looks great, as long as the reviewer() comment below isn&apos;t a bug.

&gt; Tools/Scripts/webkitpy/common/editdistance.py:36
&gt; +def edit_distance(str1, str2):
&gt; +    unsignedShort = &apos;h&apos;
&gt; +    distances = [array(unsignedShort, (0,) * (len(str2) + 1)) for i in range(0, len(str1) + 1)]
&gt; +    for i in range(1, len(str1) + 1):
&gt; +        distances[i][0] = i

You might want to add a comment here to explain what you&apos;re doing.  In my 3rd reading it&apos;s still not immediately clear what this does.  A link to a wiki page describing the algorithm might also be helpful.

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:150
&gt; +    def _fuzz_match_reviewers(self, reviewers_text_list):
&gt; +        if not reviewers_text_list:

Much nicer!

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:186
&gt; -        return self._reviewer  # Might be None, might also not be a Reviewer!
&gt; +        return self._reviewers[0] if len(self._reviewers) &gt; 0 else None

So won&apos;t this sometimes return an array?  If your flattening fails because there are some lists of reviewers with more than one reviewer?

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:199
&gt; +        if re.search(&quot;unreviewed&quot;, self._contents, re.IGNORECASE):
&gt; +            return True
&gt; +        return False

Isn&apos;t this just bool(re.search...?

&gt; Tools/Scripts/webkitpy/common/checkout/changelog_unittest.py:430
&gt; +    def test_fuzzy_reviewer_match(self):
&gt; +        self._assert_fuzzy_reviewer_match(&apos;Reviewed by Dimitri Glazkov, build fix&apos;, [&apos;Dimitri Glazkov&apos;, &apos;build fix&apos;], [&apos;Dimitri Glazkov&apos;])
&gt; +        self._assert_fuzzy_reviewer_match(&apos;Reviewed by BUILD FIX&apos;, [&apos;BUILD FIX&apos;], [])
&gt; +        self._assert_fuzzy_reviewer_match(&apos;Reviewed by Mac build fix&apos;, [&apos;Mac build fix&apos;], [])

Thank you. :)

&gt; Tools/Scripts/webkitpy/common/config/committers.py:524
&gt; +            #FIXME: This should do case-insensitive comparison or assert that all IRC nicknames are in lowercase

I think there is normaly a space between # and FIXME

&gt; Tools/Scripts/webkitpy/common/config/committers.py:539
&gt; +    def contributors_by_fuzzy_match(self, string):

MIND.  BLOWN.  sheriff-bot whois is drooling. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503458</commentid>
    <comment_count>19</comment_count>
      <attachid>115270</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 17:11:35 -0800</bug_when>
    <thetext>Comment on attachment 115270
Brought back forgotten editdistance.py

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

Thanks for the review. I&apos;m very excited to land this patch!

&gt;&gt; Tools/Scripts/webkitpy/common/editdistance.py:36
&gt;&gt; +        distances[i][0] = i
&gt; 
&gt; You might want to add a comment here to explain what you&apos;re doing.  In my 3rd reading it&apos;s still not immediately clear what this does.  A link to a wiki page describing the algorithm might also be helpful.

I&apos;ve added some comments here but I didn&apos;t include a link to wiki page because the pseudocode listed on wikipedia has a bug if I understand it correctly.

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:153
&gt; +        return [reviewers[0] for reviewers in list_of_reviewers if len(reviewers) == 1]

I added a comment:
# Flatten lists and get rid of any reviewers with more than one candidate.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:186
&gt;&gt; +        return self._reviewers[0] if len(self._reviewers) &gt; 0 else None
&gt; 
&gt; So won&apos;t this sometimes return an array?  If your flattening fails because there are some lists of reviewers with more than one reviewer?

No. reviewers is always flattened. flatten always succeeds. I just trim reviewers with more than one candidate. Clarified in _fuzz_match_reviewers by adding a comment.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:199
&gt;&gt; +        return False
&gt; 
&gt; Isn&apos;t this just bool(re.search...?

Yes. Fixed.

&gt;&gt; Tools/Scripts/webkitpy/common/config/committers.py:524
&gt;&gt; +            #FIXME: This should do case-insensitive comparison or assert that all IRC nicknames are in lowercase
&gt; 
&gt; I think there is normaly a space between # and FIXME

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503602</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-15 22:41:22 -0800</bug_when>
    <thetext>Committed r100407: &lt;http://trac.webkit.org/changeset/100407&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115093</attachid>
            <date>2011-11-14 21:26:29 -0800</date>
            <delta_ts>2011-11-14 21:39:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72351-20111114212628.patch</filename>
            <type>text/plain</type>
            <size>28476</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDIzNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDExLTExLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEltcGxlbWVudCBlZGl0LWRpc3RhbmNlIGJhc2VkIHJldmlld2VyIHJlY29nbml0
aW9uIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgYW4gYWxnb3JpdGhtIHRvIHJlY29nbml6ZSByZXZpZXdlcidzIG5hbWUg
YmFzZWQgb24gaXRzIGVkaXQgZGlzdGFuY2UgKG9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGl0
cyBMZXZlbnNodGVpbiBkaXN0YW5jZSkgdG8gZWFjaCByZXZpZXdlcidzIGZ1bGwgbmFtZSwgZmly
c3QsIGxhc3QgYW5kIG1pZGRsZSBuYW1lcywgYW5kIElSQyBuaWNrbmFtZXMuCisgICAgICAgIEZ1
cnRoZXJtb3JlLCB3ZSBjYXAgdGhlIG1heGltdW0gZWRpdCBkaXN0YW5jZSBhdCBsZW4obmFtZSkg
LSAxIHRvIGF2b2lkIG1hdGNoaW5nIGEgYm9ndXMgc3RyaW5nIGxpa2UKKyAgICAgICAgImJ1aWxk
IGZpeCIgdG8gYSByZXZpZXdlcidzIG5hbWUgKGUuZy4gd2l0aCB3aXRoIGVkaXQgZGlzdGFuY2Ug
OSkuCisKKyAgICAgICAgVGhpcyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgaW4gQ29tbWl0dGVy
TGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2guIFRoZSBmdW5jdGlvbiB0byBjb21wdXRl
CisgICAgICAgIHRoZSBlZGl0IGRpc3RhbmNlIGlzIGltcGxlbWVudGVkIGluIGVkaXRfZGlzdGFu
Y2UucHkuCisKKyAgICAgICAgQWxzbyBtb3ZlZCBfaGFzX3ZhbGlkX3Jldmlld2VyIGZyb20gVmFs
aWRhdGVSZXZpZXdlciB0byBDaGFuZ2VMb2dFbnRyeSBiZWNhdXNlIHdlIGNhbiBubyBsb25nZXIg
cmVseQorICAgICAgICBvbiB0aGUgcHJlc2VuY2Ugb2YgQ2hhbmdlTG9nRW50cnkucmV2aWV3ZXIo
KSB0byB2ZXJpZnkgdGhhdCByZXZpZXdlciBzdHJpbmcgaXMgbmljZWx5IGZvcm1hdHRlZC4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
ZWRpdF9kaXN0YW5jZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQu
CisKIDIwMTEtMTEtMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgSW1wcm92ZSBDaGFuZ2VMb2dFbnRyeSdzIHJldmlld2VyIHBhcnNpbmcgYWxnb3JpdGhtIHBh
cnQgMgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdF9kaXN0YW5jZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3Rh
bmNlLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQg
KGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5CisKKworZGVmIGVkaXRfZGlzdGFuY2Uoc3Ry
MSwgc3RyMiwgdGhyZWRzaG9sZD1Ob25lKToKKyAgICBkaXN0YW5jZXMgPSBbYXJyYXkoJ2gnLCAo
MCwpICogKGxlbihzdHIyKSArIDEpKSBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc3RyMSkgKyAxKV0K
KyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc3RyMSkgKyAxKToKKyAgICAgICAgZGlzdGFuY2Vz
W2ldWzBdID0gaQorCisgICAgZm9yIGogaW4gcmFuZ2UoMSwgbGVuKHN0cjIpICsgMSk6CisgICAg
ICAgIGRpc3RhbmNlc1swXVtqXSA9IGoKKworICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihzdHIx
KSArIDEpOgorICAgICAgICBmb3IgaiBpbiByYW5nZSgxLCBsZW4oc3RyMikgKyAxKToKKyAgICAg
ICAgICAgIGRpZmYgPSAwIGlmIHN0cjFbaSAtIDFdID09IHN0cjJbaiAtIDFdIGVsc2UgMQorICAg
ICAgICAgICAgIyBEZWxldGlvbiwgSW5zZXJ0aW9uLCBJZGVudGljYWwgLyBSZXBsYWNlbWVudAor
ICAgICAgICAgICAgZGlzdGFuY2VzW2ldW2pdID0gbWluKGRpc3RhbmNlc1tpXVtqIC0gMV0gKyAx
LCBkaXN0YW5jZXNbaSAtIDFdW2pdICsgMSwgZGlzdGFuY2VzW2kgLSAxXVtqIC0gMV0gKyBkaWZm
KQorICAgIHJldHVybiBkaXN0YW5jZXNbbGVuKHN0cjEpXVtsZW4oc3RyMildCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3RhbmNlX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2VkaXRfZGlzdGFuY2VfdW5p
dHRlc3QucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9l
ZGl0X2Rpc3RhbmNlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisj
IENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9u
LmVkaXRfZGlzdGFuY2UgaW1wb3J0IGVkaXRfZGlzdGFuY2UKKworY2xhc3MgRWRpdERpc3RhbmNl
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZWRpdF9kaXN0YW5jZShzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCcnLCAnYWEnKSwgMikK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYScsICcnKSwgMikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhJywgJ2FiJyksIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWInLCAnYScpLCAxKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJ2FiJywgJ2FhJyksIDEpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWEnLCAnYWInKSwgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYmQnLCAnYWJjZGVmJyksIDMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWJjZGVmJywgJ2FiZCcpLCAzKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2No
YW5nZWxvZy5weQkocmV2aXNpb24gMTAwMjMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOCArMTU1
LDEyIEBAIGNsYXNzIENoYW5nZUxvZ0VudHJ5KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2F1dGhv
cl9uYW1lID0gbWF0Y2guZ3JvdXAoIm5hbWUiKSBpZiBtYXRjaCBlbHNlIE5vbmUKICAgICAgICAg
c2VsZi5fYXV0aG9yX2VtYWlsID0gbWF0Y2guZ3JvdXAoImVtYWlsIikgaWYgbWF0Y2ggZWxzZSBO
b25lCiAKLSAgICAgICAgc2VsZi5fcmV2aWV3ZXJfdGV4dCwgc2VsZi5fcmV2aWV3ZXJfbGlzdCA9
IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KHNlbGYuX2NvbnRlbnRzKQotICAg
ICAgICBzZWxmLl9yZXZpZXdlciA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbW1pdHRlcl9ieV9u
YW1lKHNlbGYuX3Jldmlld2VyX2xpc3RbMF0pIGlmIHNlbGYuX3Jldmlld2VyX2xpc3QgZWxzZSBO
b25lCisgICAgICAgIHNlbGYuX3Jldmlld2VyX3RleHQsIHNlbGYuX3Jldmlld2Vyc190ZXh0X2xp
c3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dChzZWxmLl9jb250ZW50cykK
KyAgICAgICAgaWYgc2VsZi5fcmV2aWV3ZXJzX3RleHRfbGlzdDoKKyAgICAgICAgICAgIGxpc3Rf
b2ZfcmV2aWV3ZXJzID0gW3NlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9mdXp6
eV9tYXRjaChyZXZpZXdlcilbMF0gZm9yIHJldmlld2VyIGluIHNlbGYuX3Jldmlld2Vyc190ZXh0
X2xpc3RdCisgICAgICAgICAgICBzZWxmLl9yZXZpZXdlcnMgPSBbcmV2aWV3ZXJzWzBdIGZvciBy
ZXZpZXdlcnMgaW4gbGlzdF9vZl9yZXZpZXdlcnMgaWYgbGVuKHJldmlld2VycykgPT0gMV0KKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Jldmlld2VycyA9IFtdCiAgICAgICAgIHNl
bGYuX2F1dGhvciA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yX2J5X2VtYWlsKHNl
bGYuX2F1dGhvcl9lbWFpbCkgb3Igc2VsZi5fY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JfYnlf
bmFtZShzZWxmLl9hdXRob3JfbmFtZSkKIAogICAgICAgICBzZWxmLl90b3VjaGVkX2ZpbGVzID0g
cmUuZmluZGFsbChzZWxmLnRvdWNoZWRfZmlsZXNfcmVnZXhwLCBzZWxmLl9jb250ZW50cywgcmUu
TVVMVElMSU5FKQpAQCAtMTc1LDggKzE3OSwyMiBAQCBjbGFzcyBDaGFuZ2VMb2dFbnRyeShvYmpl
Y3QpOgogICAgIGRlZiByZXZpZXdlcl90ZXh0KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
cmV2aWV3ZXJfdGV4dAogCisgICAgIyBNaWdodCBiZSBOb25lLCBtaWdodCBhbHNvIG5vdCBiZSBh
IFJldmlld2VyIQogICAgIGRlZiByZXZpZXdlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
X3Jldmlld2VyICAjIE1pZ2h0IGJlIE5vbmUsIG1pZ2h0IGFsc28gbm90IGJlIGEgUmV2aWV3ZXIh
CisgICAgICAgIHJldHVybiBzZWxmLl9yZXZpZXdlcnNbMF0gaWYgbGVuKHNlbGYuX3Jldmlld2Vy
cykgPiAwIGVsc2UgTm9uZQorCisgICAgZGVmIHJldmlld2VycyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3Jldmlld2VycworCisgICAgZGVmIGhhc192YWxpZF9yZXZpZXdlcihzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5fcmV2aWV3ZXJzX3RleHRfbGlzdDoKKyAgICAgICAgICAgIGZvciBy
ZXZpZXdlciBpbiBzZWxmLl9yZXZpZXdlcnNfdGV4dF9saXN0OgorICAgICAgICAgICAgICAgIHJl
dmlld2VyID0gc2VsZi5fY29tbWl0dGVyX2xpc3QuY29tbWl0dGVyX2J5X25hbWUocmV2aWV3ZXIp
CisgICAgICAgICAgICAgICAgaWYgcmV2aWV3ZXI6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgIGlmIHJlLnNlYXJjaCgidW5yZXZpZXdlZCIsIHNlbGYuX2NvbnRlbnRz
LCByZS5JR05PUkVDQVNFKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVy
biBGYWxzZQogCiAgICAgZGVmIGNvbnRlbnRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
Y29udGVudHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2No
YW5nZWxvZ191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwMDIzMykK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzc3LDQwICszNzcsMTUgQEAgY2xhc3MgQ2hhbmdl
TG9nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmll
d2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQg
YnkgU2FtIFdlaW5pZyB3aXRoIG5vIGhlc2l0YXRpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhyZXZpZXdlcl9saXN0LCBbJ1NhbSBXZWluaWcnXSkKIAotICAgICAgICAjIEZvciBub3cs
IHdlIGxldCB1bm9mZmljaWFsIHJldmlld2VycyByZWNvZ25pemVkIGFzIHJldmlld2VycwotICAg
ICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNl
X3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IFNhbSBXZWluaWcsIEFuZGVycyBDYXJsc3Nvbiwg
YW5kICh1bm9mZmljaWFsbHkpIEFkYW0gQmFydGguJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMocmV2aWV3ZXJfbGlzdCwgWydTYW0gV2VpbmlnJywgJ0FuZGVycyBDYXJsc3NvbicsICdBZGFt
IEJhcnRoJ10pCi0KLSAgICAgICAgIyBJdCdzIG9rYXkgdG8gaGF2ZSAnYnVpbGQgZml4JyBhbmQg
J290aGVycycsIGV0Yy4uLiBhcyBhIHJldmlld2VyIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMgYmVj
YXVzZSBmdXp6eS1tYXRjaCB3b3VsZCByZWplY3QgaXQKLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwg
cmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YsIGJ1aWxkIGZpeCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnRGltaXRyaSBHbGF6a292JywgJ2J1aWxkIGZpeCddKQot
Ci0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5f
cGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgQlVJTEQgRklYJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydCVUlMRCBGSVgnXSkKLQotICAgICAgICBy
ZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmll
d2VyX3RleHQoJ1Jldmlld2VkIGJ5IE1hYyBidWlsZCBmaXgnKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ01hYyBidWlsZCBmaXgnXSkKLQotICAgICAgICByZXZp
ZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2Vy
X3RleHQoJ1Jldmlld2VkIGJ5IERhcmluIEFkbGVyLCBEYW4gQmVybnN0ZWluLCBBZGVsZSBQZXRl
cnNvbiwgYW5kIG90aGVycy4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl90
ZXh0LCAnRGFyaW4gQWRsZXIsIERhbiBCZXJuc3RlaW4sIEFkZWxlIFBldGVyc29uLCBhbmQgb3Ro
ZXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydEYXJpbiBB
ZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0FkZWxlIFBldGVyc29uJywgJ290aGVycyddKQotCi0g
ICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFy
c2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MgKGFuZCBvdGhlcnMp
JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydHZW9yZ2UgU3Rh
aWtvcycsICdvdGhlcnMnXSkKLQogICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0
ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IE9saXZl
ciBIdW50LCBva2F5ZWQgYnkgRGFyaW4gQWRsZXIuJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMocmV2aWV3ZXJfbGlzdCwgWydPbGl2ZXIgSHVudCddKQogCi0gICAgICAgIHJldmlld2VyX3Rl
eHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgn
UmV2aWV3ZWQgYnkgTWFyayBSb3dlLCBidXQgRGFuIEJlcm5zdGVpbiBhbHNvIHJldmlld2VkIGFu
ZCBhc2tlZCB0aG91Z2h0ZnVsIHF1ZXN0aW9ucy4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhyZXZpZXdlcl9saXN0LCBbJ01hcmsgUm93ZScsICdidXQgRGFuIEJlcm5zdGVpbiBhbHNvIHJl
dmlld2VkJywgJ2Fza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zJ10pCi0KLSAgICAgICAgIyBJdCdz
IG9rYXkgdG8gaGF2ZSAiIGluIiBhbmQgImJ5ICIsIGV0Yy4uLiBpbiB0aGUgZm9sbG93aW5nIGNh
c2VzIGJlY2F1c2Ugd2UncmUgZ29pbmcgdG8gZnV6enktbWF0Y2ggdGhlbSBsYXRlcgotICAgICAg
ICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jl
dmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IERhcmluIEFkbGVyIGluIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc3MzY+LicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHJldmlld2VyX3RleHQsICdEYXJpbiBBZGxlciBpbicpCi0gICAgICAgIHJldmlld2VyX3Rl
eHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgn
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC46dycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJl
dmlld2VyX3RleHQsICdBZGFtIEJhcnRoLjp3JykKICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2
aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlcikuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJf
dGV4dCwgJ0RhcmluIEFkbGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJf
bGlzdCwgWydEYXJpbiBBZGxlciddKQorCisgICAgICAgICMgRm9yIG5vdywgd2UgbGV0IHVub2Zm
aWNpYWwgcmV2aWV3ZXJzIHJlY29nbml6ZWQgYXMgcmV2aWV3ZXJzCisgICAgICAgIHJldmlld2Vy
X3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4
dCgnUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZywgQW5kZXJzIENhcmxzc29uLCBhbmQgKHVub2ZmaWNp
YWxseSkgQWRhbSBCYXJ0aC4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9s
aXN0LCBbJ1NhbSBXZWluaWcnLCAnQW5kZXJzIENhcmxzc29uJywgJ0FkYW0gQmFydGgnXSkKIAog
ICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3Bh
cnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IE5PQk9EWS4nKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhyZXZpZXdlcl90ZXh0LCBOb25lKQpAQCAtNDMzLDYgKzQwOCw1OSBAQCBjbGFz
cyBDaGFuZ2VMb2dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV2aWV3ZXJfdGV4
dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdS
ZXZpZXdlZCBieSBub2JvZHkgKHRyaXZpYWwgZm9sbG93IHVwIGZpeCksIEpvc2VwaCBQZWNvcmFy
byBMR1RNLWVkLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsIE5v
bmUpCiAKKyAgICBkZWYgX2VudHJ5X3dpdGhfcmV2aWV3ZXIoc2VsZiwgcmV2aWV3ZXJfbGluZSk6
CisgICAgICAgIHJldHVybiBDaGFuZ2VMb2dFbnRyeSgnJycyMDA5LTA4LTE5ICBFcmljIFNlaWRl
bCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICAgICAgUkVWSUVXX0xJTkUKKworICAgICAg
ICAgICAgKiBTY3JpcHRzL2J1Z3ppbGxhLXRvb2w6CisnJycucmVwbGFjZSgiUkVWSUVXX0xJTkUi
LCByZXZpZXdlcl9saW5lKSkKKworICAgIGRlZiBfY29udHJpYnV0b3JzKHNlbGYsIG5hbWVzKToK
KyAgICAgICAgcmV0dXJuIFtDb21taXR0ZXJMaXN0KCkuY29udHJpYnV0b3JfYnlfbmFtZShuYW1l
KSBmb3IgbmFtZSBpbiBuYW1lc10KKworICAgIGRlZiB0ZXN0X2Z1enp5X3Jldmlld2VyX21hdGNo
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2Vf
cmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LCBidWlsZCBmaXgnKVsx
XSwgWydEaW1pdHJpIEdsYXprb3YnLCAnYnVpbGQgZml4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoJ1Jldmlld2VkIGJ5IERpbWl0cmkgR2xh
emtvdiwgYnVpbGQgZml4JykucmV2aWV3ZXJzKCksIHNlbGYuX2NvbnRyaWJ1dG9ycyhbJ0RpbWl0
cmkgR2xhemtvdiddKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRy
eS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgQlVJTEQgRklYJylbMV0sIFsnQlVJ
TEQgRklYJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2VudHJ5X3dpdGhfcmV2
aWV3ZXIoJ1Jldmlld2VkIGJ5IEJVSUxEIEZJWCcpLnJldmlld2VycygpLCBbXSkKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgn
UmV2aWV3ZWQgYnkgTWFjIGJ1aWxkIGZpeCcpWzFdLCBbJ01hYyBidWlsZCBmaXgnXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQg
YnkgTWFjIGJ1aWxkIGZpeCcpLnJldmlld2VycygpLCBbXSkKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIsIERhbiBCZXJuc3RlaW4sIEFkZWxlIFBldGVyc29uLCBhbmQgb3RoZXJzLicp
WzFdLAorICAgICAgICAgICAgWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0FkZWxl
IFBldGVyc29uJywgJ290aGVycyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9l
bnRyeV93aXRoX3Jldmlld2VyKCdSZXZpZXdlZCBieSBEYXJpbiBBZGxlciwgRGFuIEJlcm5zdGVp
biwgQWRlbGUgUGV0ZXJzb24sIGFuZCBvdGhlcnMuJykucmV2aWV3ZXJzKCksCisgICAgICAgICAg
ICBzZWxmLl9jb250cmlidXRvcnMoWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0Fk
ZWxlIFBldGVyc29uJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0Vu
dHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcyAoYW5k
IG90aGVycyknKVsxXSwgWydHZW9yZ2UgU3RhaWtvcycsICdvdGhlcnMnXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgR2Vv
cmdlIFN0YWlrb3MgKGFuZCBvdGhlcnMpJykucmV2aWV3ZXJzKCksIHNlbGYuX2NvbnRyaWJ1dG9y
cyhbJ0dlb3JnZSBTdGFpa29zJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5n
ZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBNYXJrIFJvd2UsIGJ1
dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQgYW5kIGFza2VkIHRob3VnaHRmdWwgcXVlc3Rp
b25zLicpWzFdLAorICAgICAgICAgICAgWydNYXJrIFJvd2UnLCAnYnV0IERhbiBCZXJuc3RlaW4g
YWxzbyByZXZpZXdlZCcsICdhc2tlZCB0aG91Z2h0ZnVsIHF1ZXN0aW9ucyddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCdSZXZpZXdlZCBieSBN
YXJrIFJvd2UsIGJ1dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQgYW5kIGFza2VkIHRob3Vn
aHRmdWwgcXVlc3Rpb25zLicpLnJldmlld2VycygpLAorICAgICAgICAgICAgc2VsZi5fY29udHJp
YnV0b3JzKFsnTWFyayBSb3dlJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5n
ZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBp
biA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzM2Pi4nKVsxXSwK
KyAgICAgICAgICAgIFsnRGFyaW4gQWRsZXIgaW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgaW4g
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzczNj4uJykucmV2aWV3
ZXJzKCksCisgICAgICAgICAgICBzZWxmLl9jb250cmlidXRvcnMoWydEYXJpbiBBZGxlciddKSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3
ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC46dycpWzFdLCBbJ0FkYW0gQmFydGguOncn
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcign
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC46dycpLnJldmlld2VycygpLCBzZWxmLl9jb250cmlidXRv
cnMoWydBZGFtIEJhcnRoJ10pKQorCisgICAgZGVmIHRlc3RfaGFzX3ZhbGlkX3Jldmlld2VyKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIo
IlJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLiIpLmhhc192YWxpZF9yZXZpZXdlcigpLCBUcnVlKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoIlJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpICAjIE5vdCBw
aWNreSBhYm91dCB0aGUgJy4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlf
d2l0aF9yZXZpZXdlcigiUmV2aWV3ZWQgYnkgRXJpYy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwg
RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdl
cigiUmV2aWV3ZWQgYnkgRXJpYyBDIFNlaWRlbC4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFs
c2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigi
UnViYmVyLXN0YW1wZWQgYnkgRXJpYy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVy
LXN0YW1wZWQgYnkgRXJpYyBTZWlkZWwuIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVy
IHN0YW1wZWQgYnkgRXJpYy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyIHN0YW1w
ZWQgYnkgRXJpYyBTZWlkZWwuIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiVW5yZXZpZXdlZCBi
dWlsZCBmaXguIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisKICAgICBkZWYgdGVzdF9s
YXRlc3RfZW50cnlfcGFyc2Uoc2VsZik6CiAgICAgICAgIGNoYW5nZWxvZ19jb250ZW50cyA9IHUi
JXNcbiVzIiAlIChzZWxmLl9leGFtcGxlX2VudHJ5LCBzZWxmLl9leGFtcGxlX2NoYW5nZWxvZykK
ICAgICAgICAgY2hhbmdlbG9nX2ZpbGUgPSBTdHJpbmdJTyhjaGFuZ2Vsb2dfY29udGVudHMpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVycy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0
dGVycy5weQkocmV2aXNpb24gMTAwMjMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY29uZmlnL2NvbW1pdHRlcnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICMKICMgV2ViS2l0J3MgUHl0aG9uIG1vZHVsZSBmb3IgY29tbWl0dGVyIGFuZCByZXZpZXdlciB2
YWxpZGF0aW9uLgogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5lZGl0X2Rpc3RhbmNlIGltcG9ydCBl
ZGl0X2Rpc3RhbmNlCiAKIGNsYXNzIEFjY291bnQob2JqZWN0KToKICAgICBkZWYgX19pbml0X18o
c2VsZiwgbmFtZSwgZW1haWxfb3JfZW1haWxzLCBpcmNfbmlja25hbWVfb3Jfbmlja25hbWVzPU5v
bmUpOgpAQCAtNDQ5LDcgKzQ1MCw2IEBAIHJldmlld2Vyc19saXN0ID0gWwogICAgIFJldmlld2Vy
KCJab2x0YW4gSGVyY3plZyIsIFsiemhlcmN6ZWdAd2Via2l0Lm9yZyIsICJ6aGVyY3plZ0BpbmYu
dS1zemVnZWQuaHUiXSwgInpoZXJjemVnIiksCiBdCiAKLQogY2xhc3MgQ29tbWl0dGVyTGlzdChv
YmplY3QpOgogCiAgICAgIyBDb21taXR0ZXJzIGFuZCByZXZpZXdlcnMgYXJlIHBhc3NlZCBpbiB0
byBhbGxvdyBlYXN5IHRlc3RpbmcKQEAgLTUyOCw2ICs1MjgsMzkgQEAgY2xhc3MgQ29tbWl0dGVy
TGlzdChvYmplY3QpOgogICAgIGRlZiBjb250cmlidXRvcnNfYnlfc2VhcmNoX3N0cmluZyhzZWxm
LCBzdHJpbmcpOgogICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBjb250cmlidXRvcjogY29u
dHJpYnV0b3IuY29udGFpbnNfc3RyaW5nKHN0cmluZyksIHNlbGYuY29udHJpYnV0b3JzKCkpCiAK
KyAgICBkZWYgY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKHNlbGYsIHN0cmluZyk6CisgICAg
ICAgIHN0cmluZyA9IHN0cmluZy5sb3dlcigpCisKKyAgICAgICAgIyBGaXJzdCBwYXRoLCBvcHRp
bWl0aWNhbGx5IG1hdGNoIGZvciBmdWxsbmFtZSwgZW1haWwgYW5kIGlyY19uaWNrbmFtZXMKKyAg
ICAgICAgZm9yIGNvbnRyaWJ1dG9yIGluIHNlbGYuY29udHJpYnV0b3JzKCk6CisgICAgICAgICAg
ICBpZiBzdHJpbmcgaW4gW2VtYWlsLmxvd2VyKCkgZm9yIGVtYWlsIGluIGNvbnRyaWJ1dG9yLmVt
YWlsc10gb3Igc3RyaW5nID09IGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZS5sb3dlcigpOgorICAgICAg
ICAgICAgICAgIHJldHVybiBbY29udHJpYnV0b3JdLCAwCisgICAgICAgICAgICBpZiBjb250cmli
dXRvci5pcmNfbmlja25hbWVzOgorICAgICAgICAgICAgICAgIG5pY2tuYW1lc19pbl9sb3dlcmNh
c2UgPSBbbmlja25hbWUubG93ZXIoKSBmb3Igbmlja25hbWUgaW4gY29udHJpYnV0b3IuaXJjX25p
Y2tuYW1lc10KKyAgICAgICAgICAgICAgICBpZiBzdHJpbmcgaW4gbmlja25hbWVzX2luX2xvd2Vy
Y2FzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtjb250cmlidXRvcl0sIDAKKworICAg
ICAgICAjIFNlY29uZCBwYXRoLCBtdWNoIHNsb3dlciBzZWFyY2ggdXNpbmcgZWRpdC1kaXN0YW5j
ZQorICAgICAgICBjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSA9IFtdCisgICAgICAgIG1pbkRp
c3RhbmNlID0gbGVuKHN0cmluZykgLyAyIC0gMQorICAgICAgICBmb3IgY29udHJpYnV0b3IgaW4g
c2VsZi5jb250cmlidXRvcnMoKToKKyAgICAgICAgICAgIGZ1bGxfbmFtZV9pbl9sb3dlcmNhc2Ug
PSBjb250cmlidXRvci5mdWxsX25hbWUubG93ZXIoKQorICAgICAgICAgICAgdG9rZW5zID0gW2Z1
bGxfbmFtZV9pbl9sb3dlcmNhc2VdICsgZnVsbF9uYW1lX2luX2xvd2VyY2FzZS5zcGxpdCgpCisg
ICAgICAgICAgICBpZiBjb250cmlidXRvci5pcmNfbmlja25hbWVzOgorICAgICAgICAgICAgICAg
IHRva2VucyArPSBbbmlja25hbWUubG93ZXIoKSBmb3Igbmlja25hbWUgaW4gY29udHJpYnV0b3Iu
aXJjX25pY2tuYW1lcyBpZiBsZW4obmlja25hbWUpID4gNV0KKworICAgICAgICAgICAgdG9rZW5z
ID0gW2VkaXRfZGlzdGFuY2UodG9rZW4sIHN0cmluZykgZm9yIHRva2VuIGluIHRva2VucyBpZiBh
YnMobGVuKHRva2VuKSAtIGxlbihzdHJpbmcpKSA8PSBtaW5EaXN0YW5jZV0KKyAgICAgICAgICAg
IGlmIGxlbih0b2tlbnMpOgorICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gbWluKHRva2VucykK
KyAgICAgICAgICAgICAgICBpZiBkaXN0YW5jZSA9PSBtaW5EaXN0YW5jZToKKyAgICAgICAgICAg
ICAgICAgICAgY29udHJpYnV0b3JXaXRoTWluRGlzdGFuY2UuYXBwZW5kKGNvbnRyaWJ1dG9yKQor
ICAgICAgICAgICAgICAgIGVsaWYgZGlzdGFuY2UgPCBtaW5EaXN0YW5jZToKKyAgICAgICAgICAg
ICAgICAgICAgY29udHJpYnV0b3JXaXRoTWluRGlzdGFuY2UgPSBbY29udHJpYnV0b3JdCisgICAg
ICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2UKKyAgICAgICAgaWYgbm90IGxl
bihjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSk6CisgICAgICAgICAgICByZXR1cm4gW10sIGxl
bihzdHJpbmcpCisgICAgICAgIHJldHVybiBjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSwgbWlu
RGlzdGFuY2UKKwogICAgIGRlZiBhY2NvdW50X2J5X2xvZ2luKHNlbGYsIGxvZ2luKToKICAgICAg
ICAgcmV0dXJuIHNlbGYuX2xvZ2luX3RvX2FjY291bnRfbWFwKCkuZ2V0KGxvZ2luLmxvd2VyKCkp
CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJz
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NvbmZpZy9jb21taXR0ZXJzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMDAyMzMpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVyc191bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtOTEsMyArOTEsMzEgQEAgY2xhc3MgQ29tbWl0dGVyc1Rlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0
LmNvbnRyaWJ1dG9yc19ieV9zZWFyY2hfc3RyaW5nKCd0ZXN0JyksIFtjb250cmlidXRvciwgY29t
bWl0dGVyLCByZXZpZXdlcl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVyX2xp
c3QuY29udHJpYnV0b3JzX2J5X3NlYXJjaF9zdHJpbmcoJ3JhZCcpLCBbcmV2aWV3ZXJdKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9zZWFy
Y2hfc3RyaW5nKCdUd28nKSwgW3Jldmlld2VyXSkKKworICAgIGRlZiB0ZXN0X2NvbnRyaWJ1dG9y
c19ieV9mdXp6eV9tYXRjaChzZWxmKToKKyAgICAgICAgY29tbWl0dGVycyA9IENvbW1pdHRlckxp
c3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5
X2Z1enp5X21hdGNoKCdHZW9mZiBHYXJlbicpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlf
bmFtZSgnR2VvZmZyZXkgR2FyZW4nKV0sIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNv
bW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdLZW5uZXRoIENocmlzdGlhbnNl
bicpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4nKV0sIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29u
dHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdLZW4gUnVzc2VsbCcpLCAoW2NvbW1pdHRlcnMuY29u
dHJpYnV0b3JfYnlfbmFtZSgnS2VubmV0aCBSdXNzZWxsJyldLCA0KSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnRGF2ZSBI
eWF0dCcpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGF2aWQgSHlhdHQnKV0s
IDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5
X2Z1enp5X21hdGNoKCdEYXZlIEtpbHplcicpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlf
bmFtZSgnRGF2aWQgS2lsemVyJyldLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnQW50dGkgInByaW50ZiIgS29pdmlz
dG8nKSwgKFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUoJ0FudHRpIEtvaXZpc3RvJyld
LCA5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19i
eV9mdXp6eV9tYXRjaCgnU2FtbXkgV2VpbmlnJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9i
eV9uYW1lKCdTYW0gV2VpbmlnJyldLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnQW5kcmVzIEtsaW5nJyksIChbY29t
bWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdBbmRyZWFzIEtsaW5nJyldLCAxKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRj
aCgnRGFyaW4gQWRsZXJcJycpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGFy
aW4gQWRsZXInKV0sIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29u
dHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdKb2UgUGVjb3Jhcm8nKSwgKFtjb21taXR0ZXJzLmNv
bnRyaWJ1dG9yX2J5X25hbWUoJ0pvc2VwaCBQZWNvcmFybycpXSwgMykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ0RyIERh
biBCZXJuc3RlaW4nKSwgKFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUoJ0RhbiBCZXJu
c3RlaW4nKV0sIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJp
YnV0b3JzX2J5X2Z1enp5X21hdGNoKCdNaXR6cGV0dGVsJyksIChbY29tbWl0dGVycy5jb250cmli
dXRvcl9ieV9uYW1lKCdEYW4gQmVybnN0ZWluJyldLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgncm5pd2FAd2Via2l0
Lm9yZycpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnUnlvc3VrZSBOaXdhJyld
LCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19i
eV9mdXp6eV9tYXRjaCgnQXAnKSwgKFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUoJ0Fs
ZXhleSBQcm9za3VyeWFrb3YnKV0sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1p
dHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdTYW0nKSwgKFtjb21taXR0ZXJzLmNv
bnRyaWJ1dG9yX2J5X25hbWUoJ1NhbSBXZWluaWcnKV0sIDApKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdkYXJpbicpLCAo
W2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGFyaW4gQWRsZXInKV0sIDApKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21h
dGNoKCdoYXJyaXNvbicpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGF2aWQg
SGFycmlzb24nKV0sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29u
dHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdvdGhlcnMnKSwgKFtdLCA2KSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnQlVJ
TEQgRklYJyksIChbXSwgOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5j
b250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ2J1dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3
ZWQnKSwgKFtdLCAzMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250
cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ2Fza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zJyksIChb
XSwgMjYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3Jz
X2J5X2Z1enp5X21hdGNoKCdidWlsZCBmaXggb2YgbWFjJyksIChbXSwgMTYpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdh
IHNwZWxsIGNoZWNrZXInKSwgKFtdLCAxNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29t
bWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ25vYm9keSwgYnVpbGQgZml4Jyks
IChbXSwgMTcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0
b3JzX2J5X2Z1enp5X21hdGNoKCdOT0JPRFkgKGNocm9taXVtIGJ1aWxkIGZpeCknKSwgKFtdLCAy
NykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZp
ZXdlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMv
dmFsaWRhdGVyZXZpZXdlci5weQkocmV2aXNpb24gMTAwMjMzKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHkJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDE2ICs0Myw2IEBAIGNsYXNzIFZhbGlkYXRlUmV2aWV3ZXIoQWJzdHJhY3RTdGVwKToKICAg
ICAgICAgICAgIE9wdGlvbnMubm9uX2ludGVyYWN0aXZlLAogICAgICAgICBdCiAKLSAgICAjIEZJ
WE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBtb3ZlIG9udG8gQ2hhbmdlTG9nRW50cnkKLSAgICBk
ZWYgX2hhc192YWxpZF9yZXZpZXdlcihzZWxmLCBjaGFuZ2Vsb2dfZW50cnkpOgotICAgICAgICBp
ZiBjaGFuZ2Vsb2dfZW50cnkucmV2aWV3ZXIoKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0g
ICAgICAgIGlmIHJlLnNlYXJjaCgidW5yZXZpZXdlZCIsIGNoYW5nZWxvZ19lbnRyeS5jb250ZW50
cygpLCByZS5JR05PUkVDQVNFKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGlm
IHJlLnNlYXJjaCgicnViYmVyWyAtXXN0YW1wIiwgY2hhbmdlbG9nX2VudHJ5LmNvbnRlbnRzKCks
IHJlLklHTk9SRUNBU0UpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJu
IEZhbHNlCi0KICAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKICAgICAgICAgIyBGSVhNRTogRm9y
IG5vdyB3ZSBkaXNhYmxlIHRoaXMgY2hlY2sgd2hlbiBhIHVzZXIgaXMgZHJpdmluZyB0aGUgc2Ny
aXB0CiAgICAgICAgICMgdGhpcyBjaGVjayBpcyB0b28gZHJhY29uaWFuIChhbmQgdG9vIHBvb3Js
eSB0ZXN0ZWQpIHRvIGZvaXN0IHVwb24gdXNlcnMuCkBAIC02MCw3ICs1MCw3IEBAIGNsYXNzIFZh
bGlkYXRlUmV2aWV3ZXIoQWJzdHJhY3RTdGVwKToKICAgICAgICAgICAgIHJldHVybgogICAgICAg
ICBmb3IgY2hhbmdlbG9nX3BhdGggaW4gc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiY2hhbmdl
bG9ncyIpOgogICAgICAgICAgICAgY2hhbmdlbG9nX2VudHJ5ID0gQ2hhbmdlTG9nKGNoYW5nZWxv
Z19wYXRoKS5sYXRlc3RfZW50cnkoKQotICAgICAgICAgICAgaWYgc2VsZi5faGFzX3ZhbGlkX3Jl
dmlld2VyKGNoYW5nZWxvZ19lbnRyeSk6CisgICAgICAgICAgICBpZiBjaGFuZ2Vsb2dfZW50cnku
aGFzX3ZhbGlkX3Jldmlld2VyKCk6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAg
ICAgIHJldmlld2VyX3RleHQgPSBjaGFuZ2Vsb2dfZW50cnkucmV2aWV3ZXJfdGV4dCgpCiAgICAg
ICAgICAgICBpZiByZXZpZXdlcl90ZXh0OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDEwMDIzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVw
cy92YWxpZGF0ZXJldmlld2VyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICsw
LDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5j
b21tb24uY2hlY2tvdXQuY2hhbmdlbG9nIGltcG9ydCBDaGFuZ2VMb2dFbnRyeQotZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZy
b20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMsIE1vY2tUb29sCi1m
cm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMudmFsaWRhdGVyZXZpZXdlciBpbXBvcnQgVmFsaWRhdGVS
ZXZpZXdlcgotCi1jbGFzcyBWYWxpZGF0ZVJldmlld2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
Ci0gICAgX2JvaWxlcnBsYXRlX2VudHJ5ID0gJycnMjAwOS0wOC0xOSAgRXJpYyBTZWlkZWwgIDxl
cmljQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUkVWSUVXX0xJTkUKLQotICAgICAgICAqIFNjcmlw
dHMvYnVnemlsbGEtdG9vbDoKLScnJwotCi0gICAgZGVmIF90ZXN0X3Jldmlld190ZXh0KHNlbGYs
IHN0ZXAsIHRleHQsIGV4cGVjdGVkKToKLSAgICAgICAgY29udGVudHMgPSBzZWxmLl9ib2lsZXJw
bGF0ZV9lbnRyeS5yZXBsYWNlKCJSRVZJRVdfTElORSIsIHRleHQpCi0gICAgICAgIGVudHJ5ID0g
Q2hhbmdlTG9nRW50cnkoY29udGVudHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RlcC5f
aGFzX3ZhbGlkX3Jldmlld2VyKGVudHJ5KSwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9oYXNf
dmFsaWRfcmV2aWV3ZXIoc2VsZik6Ci0gICAgICAgIHN0ZXAgPSBWYWxpZGF0ZVJldmlld2VyKE1v
Y2tUb29sKCksIE1vY2tPcHRpb25zKCkpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQo
c3RlcCwgIlJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLiIsIFRydWUpCi0gICAgICAgIHNlbGYuX3Rl
c3RfcmV2aWV3X3RleHQoc3RlcCwgIlJldmlld2VkIGJ5IEVyaWMgU2VpZGVsIiwgVHJ1ZSkgIyBO
b3QgcGlja3kgYWJvdXQgdGhlICcuJwotICAgICAgICBzZWxmLl90ZXN0X3Jldmlld190ZXh0KHN0
ZXAsICJSZXZpZXdlZCBieSBFcmljLiIsIEZhbHNlKQotICAgICAgICBzZWxmLl90ZXN0X3Jldmll
d190ZXh0KHN0ZXAsICJSZXZpZXdlZCBieSBFcmljIEMgU2VpZGVsLiIsIEZhbHNlKQotICAgICAg
ICBzZWxmLl90ZXN0X3Jldmlld190ZXh0KHN0ZXAsICJSdWJiZXItc3RhbXBlZCBieSBFcmljLiIs
IFRydWUpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQoc3RlcCwgIlJ1YmJlciBzdGFt
cGVkIGJ5IEVyaWMuIiwgVHJ1ZSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVw
LCAiVW5yZXZpZXdlZCBidWlsZCBmaXguIiwgVHJ1ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115094</attachid>
            <date>2011-11-14 21:39:06 -0800</date>
            <delta_ts>2011-11-14 21:46:48 -0800</delta_ts>
            <desc>Fixed style</desc>
            <filename>bug-72351-20111114213905.patch</filename>
            <type>text/plain</type>
            <size>28478</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDIzNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDExLTExLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEltcGxlbWVudCBlZGl0LWRpc3RhbmNlIGJhc2VkIHJldmlld2VyIHJlY29nbml0
aW9uIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgYW4gYWxnb3JpdGhtIHRvIHJlY29nbml6ZSByZXZpZXdlcidzIG5hbWUg
YmFzZWQgb24gaXRzIGVkaXQgZGlzdGFuY2UgKG9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGl0
cyBMZXZlbnNodGVpbiBkaXN0YW5jZSkgdG8gZWFjaCByZXZpZXdlcidzIGZ1bGwgbmFtZSwgZmly
c3QsIGxhc3QgYW5kIG1pZGRsZSBuYW1lcywgYW5kIElSQyBuaWNrbmFtZXMuCisgICAgICAgIEZ1
cnRoZXJtb3JlLCB3ZSBjYXAgdGhlIG1heGltdW0gZWRpdCBkaXN0YW5jZSBhdCBsZW4obmFtZSkg
LSAxIHRvIGF2b2lkIG1hdGNoaW5nIGEgYm9ndXMgc3RyaW5nIGxpa2UKKyAgICAgICAgImJ1aWxk
IGZpeCIgdG8gYSByZXZpZXdlcidzIG5hbWUgKGUuZy4gd2l0aCB3aXRoIGVkaXQgZGlzdGFuY2Ug
OSkuCisKKyAgICAgICAgVGhpcyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgaW4gQ29tbWl0dGVy
TGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2guIFRoZSBmdW5jdGlvbiB0byBjb21wdXRl
CisgICAgICAgIHRoZSBlZGl0IGRpc3RhbmNlIGlzIGltcGxlbWVudGVkIGluIGVkaXRfZGlzdGFu
Y2UucHkuCisKKyAgICAgICAgQWxzbyBtb3ZlZCBfaGFzX3ZhbGlkX3Jldmlld2VyIGZyb20gVmFs
aWRhdGVSZXZpZXdlciB0byBDaGFuZ2VMb2dFbnRyeSBiZWNhdXNlIHdlIGNhbiBubyBsb25nZXIg
cmVseQorICAgICAgICBvbiB0aGUgcHJlc2VuY2Ugb2YgQ2hhbmdlTG9nRW50cnkucmV2aWV3ZXIo
KSB0byB2ZXJpZnkgdGhhdCByZXZpZXdlciBzdHJpbmcgaXMgbmljZWx5IGZvcm1hdHRlZC4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
ZWRpdF9kaXN0YW5jZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQu
CisKIDIwMTEtMTEtMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgSW1wcm92ZSBDaGFuZ2VMb2dFbnRyeSdzIHJldmlld2VyIHBhcnNpbmcgYWxnb3JpdGhtIHBh
cnQgMgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdF9kaXN0YW5jZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3Rh
bmNlLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQg
KGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5CisKKworZGVmIGVkaXRfZGlzdGFuY2Uoc3Ry
MSwgc3RyMiwgdGhyZWRzaG9sZD1Ob25lKToKKyAgICBkaXN0YW5jZXMgPSBbYXJyYXkoJ2gnLCAo
MCwpICogKGxlbihzdHIyKSArIDEpKSBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc3RyMSkgKyAxKV0K
KyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc3RyMSkgKyAxKToKKyAgICAgICAgZGlzdGFuY2Vz
W2ldWzBdID0gaQorCisgICAgZm9yIGogaW4gcmFuZ2UoMSwgbGVuKHN0cjIpICsgMSk6CisgICAg
ICAgIGRpc3RhbmNlc1swXVtqXSA9IGoKKworICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihzdHIx
KSArIDEpOgorICAgICAgICBmb3IgaiBpbiByYW5nZSgxLCBsZW4oc3RyMikgKyAxKToKKyAgICAg
ICAgICAgIGRpZmYgPSAwIGlmIHN0cjFbaSAtIDFdID09IHN0cjJbaiAtIDFdIGVsc2UgMQorICAg
ICAgICAgICAgIyBEZWxldGlvbiwgSW5zZXJ0aW9uLCBJZGVudGljYWwgLyBSZXBsYWNlbWVudAor
ICAgICAgICAgICAgZGlzdGFuY2VzW2ldW2pdID0gbWluKGRpc3RhbmNlc1tpXVtqIC0gMV0gKyAx
LCBkaXN0YW5jZXNbaSAtIDFdW2pdICsgMSwgZGlzdGFuY2VzW2kgLSAxXVtqIC0gMV0gKyBkaWZm
KQorICAgIHJldHVybiBkaXN0YW5jZXNbbGVuKHN0cjEpXVtsZW4oc3RyMildCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3RhbmNlX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2VkaXRfZGlzdGFuY2VfdW5p
dHRlc3QucHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9l
ZGl0X2Rpc3RhbmNlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisj
IENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9u
LmVkaXRfZGlzdGFuY2UgaW1wb3J0IGVkaXRfZGlzdGFuY2UKKworCitjbGFzcyBFZGl0RGlzdGFu
Y2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9lZGl0X2Rpc3RhbmNlKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJycsICdhYScpLCAy
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJ2FhJywgJycpLCAyKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJ2EnLCAnYWInKSwgMSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYicsICdhJyksIDEpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWInLCAnYWEnKSwgMSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYScsICdhYicpLCAxKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJ2FiZCcsICdhYmNkZWYnKSwgMykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYmNkZWYnLCAnYWJkJyksIDMp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2cu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
Y2hhbmdlbG9nLnB5CShyZXZpc2lvbiAxMDAyMzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2cucHkJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw4ICsx
NTUsMTIgQEAgY2xhc3MgQ2hhbmdlTG9nRW50cnkob2JqZWN0KToKICAgICAgICAgc2VsZi5fYXV0
aG9yX25hbWUgPSBtYXRjaC5ncm91cCgibmFtZSIpIGlmIG1hdGNoIGVsc2UgTm9uZQogICAgICAg
ICBzZWxmLl9hdXRob3JfZW1haWwgPSBtYXRjaC5ncm91cCgiZW1haWwiKSBpZiBtYXRjaCBlbHNl
IE5vbmUKIAotICAgICAgICBzZWxmLl9yZXZpZXdlcl90ZXh0LCBzZWxmLl9yZXZpZXdlcl9saXN0
ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoc2VsZi5fY29udGVudHMpCi0g
ICAgICAgIHNlbGYuX3Jldmlld2VyID0gc2VsZi5fY29tbWl0dGVyX2xpc3QuY29tbWl0dGVyX2J5
X25hbWUoc2VsZi5fcmV2aWV3ZXJfbGlzdFswXSkgaWYgc2VsZi5fcmV2aWV3ZXJfbGlzdCBlbHNl
IE5vbmUKKyAgICAgICAgc2VsZi5fcmV2aWV3ZXJfdGV4dCwgc2VsZi5fcmV2aWV3ZXJzX3RleHRf
bGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KHNlbGYuX2NvbnRlbnRz
KQorICAgICAgICBpZiBzZWxmLl9yZXZpZXdlcnNfdGV4dF9saXN0OgorICAgICAgICAgICAgbGlz
dF9vZl9yZXZpZXdlcnMgPSBbc2VsZi5fY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JzX2J5X2Z1
enp5X21hdGNoKHJldmlld2VyKVswXSBmb3IgcmV2aWV3ZXIgaW4gc2VsZi5fcmV2aWV3ZXJzX3Rl
eHRfbGlzdF0KKyAgICAgICAgICAgIHNlbGYuX3Jldmlld2VycyA9IFtyZXZpZXdlcnNbMF0gZm9y
IHJldmlld2VycyBpbiBsaXN0X29mX3Jldmlld2VycyBpZiBsZW4ocmV2aWV3ZXJzKSA9PSAxXQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmV2aWV3ZXJzID0gW10KICAgICAgICAg
c2VsZi5fYXV0aG9yID0gc2VsZi5fY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JfYnlfZW1haWwo
c2VsZi5fYXV0aG9yX2VtYWlsKSBvciBzZWxmLl9jb21taXR0ZXJfbGlzdC5jb250cmlidXRvcl9i
eV9uYW1lKHNlbGYuX2F1dGhvcl9uYW1lKQogCiAgICAgICAgIHNlbGYuX3RvdWNoZWRfZmlsZXMg
PSByZS5maW5kYWxsKHNlbGYudG91Y2hlZF9maWxlc19yZWdleHAsIHNlbGYuX2NvbnRlbnRzLCBy
ZS5NVUxUSUxJTkUpCkBAIC0xNzUsOCArMTc5LDIyIEBAIGNsYXNzIENoYW5nZUxvZ0VudHJ5KG9i
amVjdCk6CiAgICAgZGVmIHJldmlld2VyX3RleHQoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxm
Ll9yZXZpZXdlcl90ZXh0CiAKKyAgICAjIE1pZ2h0IGJlIE5vbmUsIG1pZ2h0IGFsc28gbm90IGJl
IGEgUmV2aWV3ZXIhCiAgICAgZGVmIHJldmlld2VyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5fcmV2aWV3ZXIgICMgTWlnaHQgYmUgTm9uZSwgbWlnaHQgYWxzbyBub3QgYmUgYSBSZXZpZXdl
ciEKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jldmlld2Vyc1swXSBpZiBsZW4oc2VsZi5fcmV2aWV3
ZXJzKSA+IDAgZWxzZSBOb25lCisKKyAgICBkZWYgcmV2aWV3ZXJzKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fcmV2aWV3ZXJzCisKKyAgICBkZWYgaGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl9yZXZpZXdlcnNfdGV4dF9saXN0OgorICAgICAgICAgICAgZm9y
IHJldmlld2VyIGluIHNlbGYuX3Jldmlld2Vyc190ZXh0X2xpc3Q6CisgICAgICAgICAgICAgICAg
cmV2aWV3ZXIgPSBzZWxmLl9jb21taXR0ZXJfbGlzdC5jb21taXR0ZXJfYnlfbmFtZShyZXZpZXdl
cikKKyAgICAgICAgICAgICAgICBpZiByZXZpZXdlcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgaWYgcmUuc2VhcmNoKCJ1bnJldmlld2VkIiwgc2VsZi5fY29udGVu
dHMsIHJlLklHTk9SRUNBU0UpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0
dXJuIEZhbHNlCiAKICAgICBkZWYgY29udGVudHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxm
Ll9jb250ZW50cwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
Y2hhbmdlbG9nX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVzdC5weQkocmV2aXNpb24gMTAwMjMz
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzcsNDAgKzM3NywxNSBAQCBjbGFzcyBDaGFu
Z2VMb2dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2
aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnIHdpdGggbm8gaGVzaXRhdGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnU2FtIFdlaW5pZyddKQogCi0gICAgICAgICMgRm9yIG5v
dywgd2UgbGV0IHVub2ZmaWNpYWwgcmV2aWV3ZXJzIHJlY29nbml6ZWQgYXMgcmV2aWV3ZXJzCi0g
ICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFy
c2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZywgQW5kZXJzIENhcmxzc29u
LCBhbmQgKHVub2ZmaWNpYWxseSkgQWRhbSBCYXJ0aC4nKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhyZXZpZXdlcl9saXN0LCBbJ1NhbSBXZWluaWcnLCAnQW5kZXJzIENhcmxzc29uJywgJ0Fk
YW0gQmFydGgnXSkKLQotICAgICAgICAjIEl0J3Mgb2theSB0byBoYXZlICdidWlsZCBmaXgnIGFu
ZCAnb3RoZXJzJywgZXRjLi4uIGFzIGEgcmV2aWV3ZXIgaW4gdGhlIGZvbGxvd2luZyBjYXNlcyBi
ZWNhdXNlIGZ1enp5LW1hdGNoIHdvdWxkIHJlamVjdCBpdAotICAgICAgICByZXZpZXdlcl90ZXh0
LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jl
dmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdiwgYnVpbGQgZml4JykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydEaW1pdHJpIEdsYXprb3YnLCAnYnVpbGQgZml4J10p
Ci0KLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5
Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBCVUlMRCBGSVgnKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ0JVSUxEIEZJWCddKQotCi0gICAgICAg
IHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2
aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgTWFjIGJ1aWxkIGZpeCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnTWFjIGJ1aWxkIGZpeCddKQotCi0gICAgICAgIHJl
dmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3
ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIsIERhbiBCZXJuc3RlaW4sIEFkZWxlIFBl
dGVyc29uLCBhbmQgb3RoZXJzLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2Vy
X3RleHQsICdEYXJpbiBBZGxlciwgRGFuIEJlcm5zdGVpbiwgQWRlbGUgUGV0ZXJzb24sIGFuZCBv
dGhlcnMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ0Rhcmlu
IEFkbGVyJywgJ0RhbiBCZXJuc3RlaW4nLCAnQWRlbGUgUGV0ZXJzb24nLCAnb3RoZXJzJ10pCi0K
LSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9w
YXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcyAoYW5kIG90aGVy
cyknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ0dlb3JnZSBT
dGFpa29zJywgJ290aGVycyddKQotCiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xp
c3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgT2xp
dmVyIEh1bnQsIG9rYXllZCBieSBEYXJpbiBBZGxlci4nKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhyZXZpZXdlcl9saXN0LCBbJ09saXZlciBIdW50J10pCiAKLSAgICAgICAgcmV2aWV3ZXJf
dGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0
KCdSZXZpZXdlZCBieSBNYXJrIFJvd2UsIGJ1dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQg
YW5kIGFza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHJldmlld2VyX2xpc3QsIFsnTWFyayBSb3dlJywgJ2J1dCBEYW4gQmVybnN0ZWluIGFsc28g
cmV2aWV3ZWQnLCAnYXNrZWQgdGhvdWdodGZ1bCBxdWVzdGlvbnMnXSkKLQotICAgICAgICAjIEl0
J3Mgb2theSB0byBoYXZlICIgaW4iIGFuZCAiYnkgIiwgZXRjLi4uIGluIHRoZSBmb2xsb3dpbmcg
Y2FzZXMgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBmdXp6eS1tYXRjaCB0aGVtIGxhdGVyCi0gICAg
ICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2Vf
cmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgaW4gPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzczNj4uJykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMocmV2aWV3ZXJfdGV4dCwgJ0RhcmluIEFkbGVyIGluJykKLSAgICAgICAgcmV2aWV3ZXJf
dGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0
KCdSZXZpZXdlZCBieSBBZGFtIEJhcnRoLjp3JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
cmV2aWV3ZXJfdGV4dCwgJ0FkYW0gQmFydGguOncnKQogICAgICAgICByZXZpZXdlcl90ZXh0LCBy
ZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmll
d2VkIGJ5IERhcmluIEFkbGVyKS4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdl
cl90ZXh0LCAnRGFyaW4gQWRsZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdl
cl9saXN0LCBbJ0RhcmluIEFkbGVyJ10pCisKKyAgICAgICAgIyBGb3Igbm93LCB3ZSBsZXQgdW5v
ZmZpY2lhbCByZXZpZXdlcnMgcmVjb2duaXplZCBhcyByZXZpZXdlcnMKKyAgICAgICAgcmV2aWV3
ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90
ZXh0KCdSZXZpZXdlZCBieSBTYW0gV2VpbmlnLCBBbmRlcnMgQ2FybHNzb24sIGFuZCAodW5vZmZp
Y2lhbGx5KSBBZGFtIEJhcnRoLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2Vy
X2xpc3QsIFsnU2FtIFdlaW5pZycsICdBbmRlcnMgQ2FybHNzb24nLCAnQWRhbSBCYXJ0aCddKQog
CiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5f
cGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgTk9CT0RZLicpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsIE5vbmUpCkBAIC00MzMsNiArNDA4LDU5IEBAIGNs
YXNzIENoYW5nZUxvZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICByZXZpZXdlcl90
ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQo
J1Jldmlld2VkIGJ5IG5vYm9keSAodHJpdmlhbCBmb2xsb3cgdXAgZml4KSwgSm9zZXBoIFBlY29y
YXJvIExHVE0tZWQuJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfdGV4dCwg
Tm9uZSkKIAorICAgIGRlZiBfZW50cnlfd2l0aF9yZXZpZXdlcihzZWxmLCByZXZpZXdlcl9saW5l
KToKKyAgICAgICAgcmV0dXJuIENoYW5nZUxvZ0VudHJ5KCcnJzIwMDktMDgtMTkgIEVyaWMgU2Vp
ZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgICAgICBSRVZJRVdfTElORQorCisgICAg
ICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9vbDoKKycnJy5yZXBsYWNlKCJSRVZJRVdfTElO
RSIsIHJldmlld2VyX2xpbmUpKQorCisgICAgZGVmIF9jb250cmlidXRvcnMoc2VsZiwgbmFtZXMp
OgorICAgICAgICByZXR1cm4gW0NvbW1pdHRlckxpc3QoKS5jb250cmlidXRvcl9ieV9uYW1lKG5h
bWUpIGZvciBuYW1lIGluIG5hbWVzXQorCisgICAgZGVmIHRlc3RfZnV6enlfcmV2aWV3ZXJfbWF0
Y2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJz
ZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YsIGJ1aWxkIGZpeCcp
WzFdLCBbJ0RpbWl0cmkgR2xhemtvdicsICdidWlsZCBmaXgnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgRGltaXRyaSBH
bGF6a292LCBidWlsZCBmaXgnKS5yZXZpZXdlcnMoKSwgc2VsZi5fY29udHJpYnV0b3JzKFsnRGlt
aXRyaSBHbGF6a292J10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0Vu
dHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBCVUlMRCBGSVgnKVsxXSwgWydC
VUlMRCBGSVgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlfd2l0aF9y
ZXZpZXdlcignUmV2aWV3ZWQgYnkgQlVJTEQgRklYJykucmV2aWV3ZXJzKCksIFtdKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0
KCdSZXZpZXdlZCBieSBNYWMgYnVpbGQgZml4JylbMV0sIFsnTWFjIGJ1aWxkIGZpeCddKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCdSZXZpZXdl
ZCBieSBNYWMgYnVpbGQgZml4JykucmV2aWV3ZXJzKCksIFtdKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlciwgRGFuIEJlcm5zdGVpbiwgQWRlbGUgUGV0ZXJzb24sIGFuZCBvdGhlcnMu
JylbMV0sCisgICAgICAgICAgICBbJ0RhcmluIEFkbGVyJywgJ0RhbiBCZXJuc3RlaW4nLCAnQWRl
bGUgUGV0ZXJzb24nLCAnb3RoZXJzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu
X2VudHJ5X3dpdGhfcmV2aWV3ZXIoJ1Jldmlld2VkIGJ5IERhcmluIEFkbGVyLCBEYW4gQmVybnN0
ZWluLCBBZGVsZSBQZXRlcnNvbiwgYW5kIG90aGVycy4nKS5yZXZpZXdlcnMoKSwKKyAgICAgICAg
ICAgIHNlbGYuX2NvbnRyaWJ1dG9ycyhbJ0RhcmluIEFkbGVyJywgJ0RhbiBCZXJuc3RlaW4nLCAn
QWRlbGUgUGV0ZXJzb24nXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoQ2hhbmdlTG9n
RW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zIChh
bmQgb3RoZXJzKScpWzFdLCBbJ0dlb3JnZSBTdGFpa29zJywgJ290aGVycyddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCdSZXZpZXdlZCBieSBH
ZW9yZ2UgU3RhaWtvcyAoYW5kIG90aGVycyknKS5yZXZpZXdlcnMoKSwgc2VsZi5fY29udHJpYnV0
b3JzKFsnR2VvcmdlIFN0YWlrb3MnXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoQ2hh
bmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IE1hcmsgUm93ZSwg
YnV0IERhbiBCZXJuc3RlaW4gYWxzbyByZXZpZXdlZCBhbmQgYXNrZWQgdGhvdWdodGZ1bCBxdWVz
dGlvbnMuJylbMV0sCisgICAgICAgICAgICBbJ01hcmsgUm93ZScsICdidXQgRGFuIEJlcm5zdGVp
biBhbHNvIHJldmlld2VkJywgJ2Fza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zJ10pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoJ1Jldmlld2VkIGJ5
IE1hcmsgUm93ZSwgYnV0IERhbiBCZXJuc3RlaW4gYWxzbyByZXZpZXdlZCBhbmQgYXNrZWQgdGhv
dWdodGZ1bCBxdWVzdGlvbnMuJykucmV2aWV3ZXJzKCksCisgICAgICAgICAgICBzZWxmLl9jb250
cmlidXRvcnMoWydNYXJrIFJvd2UnXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoQ2hh
bmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IERhcmluIEFkbGVy
IGluIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc3MzY+LicpWzFd
LAorICAgICAgICAgICAgWydEYXJpbiBBZGxlciBpbiddKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCdSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBp
biA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzM2Pi4nKS5yZXZp
ZXdlcnMoKSwKKyAgICAgICAgICAgIHNlbGYuX2NvbnRyaWJ1dG9ycyhbJ0RhcmluIEFkbGVyJ10p
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZp
ZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBBZGFtIEJhcnRoLjp3JylbMV0sIFsnQWRhbSBCYXJ0aC46
dyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9lbnRyeV93aXRoX3Jldmlld2Vy
KCdSZXZpZXdlZCBieSBBZGFtIEJhcnRoLjp3JykucmV2aWV3ZXJzKCksIHNlbGYuX2NvbnRyaWJ1
dG9ycyhbJ0FkYW0gQmFydGgnXSkpCisKKyAgICBkZWYgdGVzdF9oYXNfdmFsaWRfcmV2aWV3ZXIo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdl
cigiUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwiKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgVHJ1ZSkgICMgTm90
IHBpY2t5IGFib3V0IHRoZSAnLicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbnRy
eV93aXRoX3Jldmlld2VyKCJSZXZpZXdlZCBieSBFcmljLiIpLmhhc192YWxpZF9yZXZpZXdlcigp
LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbnRyeV93aXRoX3Jldmll
d2VyKCJSZXZpZXdlZCBieSBFcmljIEMgU2VpZGVsLiIpLmhhc192YWxpZF9yZXZpZXdlcigpLCBG
YWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbnRyeV93aXRoX3Jldmlld2Vy
KCJSdWJiZXItc3RhbXBlZCBieSBFcmljLiIpLmhhc192YWxpZF9yZXZpZXdlcigpLCBGYWxzZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCJSdWJi
ZXItc3RhbXBlZCBieSBFcmljIFNlaWRlbC4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgVHJ1ZSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCJSdWJi
ZXIgc3RhbXBlZCBieSBFcmljLiIpLmhhc192YWxpZF9yZXZpZXdlcigpLCBGYWxzZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCJSdWJiZXIgc3Rh
bXBlZCBieSBFcmljIFNlaWRlbC4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgVHJ1ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCJVbnJldmlld2Vk
IGJ1aWxkIGZpeC4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgVHJ1ZSkKKwogICAgIGRlZiB0ZXN0
X2xhdGVzdF9lbnRyeV9wYXJzZShzZWxmKToKICAgICAgICAgY2hhbmdlbG9nX2NvbnRlbnRzID0g
dSIlc1xuJXMiICUgKHNlbGYuX2V4YW1wbGVfZW50cnksIHNlbGYuX2V4YW1wbGVfY2hhbmdlbG9n
KQogICAgICAgICBjaGFuZ2Vsb2dfZmlsZSA9IFN0cmluZ0lPKGNoYW5nZWxvZ19jb250ZW50cykK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21t
aXR0ZXJzLnB5CShyZXZpc2lvbiAxMDAyMzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jb25maWcvY29tbWl0dGVycy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogIwogIyBXZWJLaXQncyBQeXRob24gbW9kdWxlIGZvciBjb21taXR0ZXIgYW5kIHJldmlld2Vy
IHZhbGlkYXRpb24uCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLmVkaXRfZGlzdGFuY2UgaW1wb3J0
IGVkaXRfZGlzdGFuY2UKIAogY2xhc3MgQWNjb3VudChvYmplY3QpOgogICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBuYW1lLCBlbWFpbF9vcl9lbWFpbHMsIGlyY19uaWNrbmFtZV9vcl9uaWNrbmFtZXM9
Tm9uZSk6CkBAIC00NDksNyArNDUwLDYgQEAgcmV2aWV3ZXJzX2xpc3QgPSBbCiAgICAgUmV2aWV3
ZXIoIlpvbHRhbiBIZXJjemVnIiwgWyJ6aGVyY3plZ0B3ZWJraXQub3JnIiwgInpoZXJjemVnQGlu
Zi51LXN6ZWdlZC5odSJdLCAiemhlcmN6ZWciKSwKIF0KIAotCiBjbGFzcyBDb21taXR0ZXJMaXN0
KG9iamVjdCk6CiAKICAgICAjIENvbW1pdHRlcnMgYW5kIHJldmlld2VycyBhcmUgcGFzc2VkIGlu
IHRvIGFsbG93IGVhc3kgdGVzdGluZwpAQCAtNTI4LDYgKzUyOCwzOSBAQCBjbGFzcyBDb21taXR0
ZXJMaXN0KG9iamVjdCk6CiAgICAgZGVmIGNvbnRyaWJ1dG9yc19ieV9zZWFyY2hfc3RyaW5nKHNl
bGYsIHN0cmluZyk6CiAgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGNvbnRyaWJ1dG9yOiBj
b250cmlidXRvci5jb250YWluc19zdHJpbmcoc3RyaW5nKSwgc2VsZi5jb250cmlidXRvcnMoKSkK
IAorICAgIGRlZiBjb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goc2VsZiwgc3RyaW5nKToKKyAg
ICAgICAgc3RyaW5nID0gc3RyaW5nLmxvd2VyKCkKKworICAgICAgICAjIEZpcnN0IHBhdGgsIG9w
dGltaXRpY2FsbHkgbWF0Y2ggZm9yIGZ1bGxuYW1lLCBlbWFpbCBhbmQgaXJjX25pY2tuYW1lcwor
ICAgICAgICBmb3IgY29udHJpYnV0b3IgaW4gc2VsZi5jb250cmlidXRvcnMoKToKKyAgICAgICAg
ICAgIGlmIHN0cmluZyBpbiBbZW1haWwubG93ZXIoKSBmb3IgZW1haWwgaW4gY29udHJpYnV0b3Iu
ZW1haWxzXSBvciBzdHJpbmcgPT0gY29udHJpYnV0b3IuZnVsbF9uYW1lLmxvd2VyKCk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFtjb250cmlidXRvcl0sIDAKKyAgICAgICAgICAgIGlmIGNvbnRy
aWJ1dG9yLmlyY19uaWNrbmFtZXM6CisgICAgICAgICAgICAgICAgbmlja25hbWVzX2luX2xvd2Vy
Y2FzZSA9IFtuaWNrbmFtZS5sb3dlcigpIGZvciBuaWNrbmFtZSBpbiBjb250cmlidXRvci5pcmNf
bmlja25hbWVzXQorICAgICAgICAgICAgICAgIGlmIHN0cmluZyBpbiBuaWNrbmFtZXNfaW5fbG93
ZXJjYXNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2NvbnRyaWJ1dG9yXSwgMAorCisg
ICAgICAgICMgU2Vjb25kIHBhdGgsIG11Y2ggc2xvd2VyIHNlYXJjaCB1c2luZyBlZGl0LWRpc3Rh
bmNlCisgICAgICAgIGNvbnRyaWJ1dG9yV2l0aE1pbkRpc3RhbmNlID0gW10KKyAgICAgICAgbWlu
RGlzdGFuY2UgPSBsZW4oc3RyaW5nKSAvIDIgLSAxCisgICAgICAgIGZvciBjb250cmlidXRvciBp
biBzZWxmLmNvbnRyaWJ1dG9ycygpOgorICAgICAgICAgICAgZnVsbF9uYW1lX2luX2xvd2VyY2Fz
ZSA9IGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZS5sb3dlcigpCisgICAgICAgICAgICB0b2tlbnMgPSBb
ZnVsbF9uYW1lX2luX2xvd2VyY2FzZV0gKyBmdWxsX25hbWVfaW5fbG93ZXJjYXNlLnNwbGl0KCkK
KyAgICAgICAgICAgIGlmIGNvbnRyaWJ1dG9yLmlyY19uaWNrbmFtZXM6CisgICAgICAgICAgICAg
ICAgdG9rZW5zICs9IFtuaWNrbmFtZS5sb3dlcigpIGZvciBuaWNrbmFtZSBpbiBjb250cmlidXRv
ci5pcmNfbmlja25hbWVzIGlmIGxlbihuaWNrbmFtZSkgPiA1XQorCisgICAgICAgICAgICB0b2tl
bnMgPSBbZWRpdF9kaXN0YW5jZSh0b2tlbiwgc3RyaW5nKSBmb3IgdG9rZW4gaW4gdG9rZW5zIGlm
IGFicyhsZW4odG9rZW4pIC0gbGVuKHN0cmluZykpIDw9IG1pbkRpc3RhbmNlXQorICAgICAgICAg
ICAgaWYgbGVuKHRva2Vucyk6CisgICAgICAgICAgICAgICAgZGlzdGFuY2UgPSBtaW4odG9rZW5z
KQorICAgICAgICAgICAgICAgIGlmIGRpc3RhbmNlID09IG1pbkRpc3RhbmNlOgorICAgICAgICAg
ICAgICAgICAgICBjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZS5hcHBlbmQoY29udHJpYnV0b3Ip
CisgICAgICAgICAgICAgICAgZWxpZiBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlOgorICAgICAgICAg
ICAgICAgICAgICBjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSA9IFtjb250cmlidXRvcl0KKyAg
ICAgICAgICAgICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZQorICAgICAgICBpZiBub3Qg
bGVuKGNvbnRyaWJ1dG9yV2l0aE1pbkRpc3RhbmNlKToKKyAgICAgICAgICAgIHJldHVybiBbXSwg
bGVuKHN0cmluZykKKyAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9yV2l0aE1pbkRpc3RhbmNlLCBt
aW5EaXN0YW5jZQorCiAgICAgZGVmIGFjY291bnRfYnlfbG9naW4oc2VsZiwgbG9naW4pOgogICAg
ICAgICByZXR1cm4gc2VsZi5fbG9naW5fdG9fYWNjb3VudF9tYXAoKS5nZXQobG9naW4ubG93ZXIo
KSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRl
cnNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY29uZmlnL2NvbW1pdHRlcnNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwMDIzMykKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC05MSwzICs5MSwzMSBAQCBjbGFzcyBDb21taXR0ZXJzVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVyX2xp
c3QuY29udHJpYnV0b3JzX2J5X3NlYXJjaF9zdHJpbmcoJ3Rlc3QnKSwgW2NvbnRyaWJ1dG9yLCBj
b21taXR0ZXIsIHJldmlld2VyXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJf
bGlzdC5jb250cmlidXRvcnNfYnlfc2VhcmNoX3N0cmluZygncmFkJyksIFtyZXZpZXdlcl0pCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JzX2J5X3Nl
YXJjaF9zdHJpbmcoJ1R3bycpLCBbcmV2aWV3ZXJdKQorCisgICAgZGVmIHRlc3RfY29udHJpYnV0
b3JzX2J5X2Z1enp5X21hdGNoKHNlbGYpOgorICAgICAgICBjb21taXR0ZXJzID0gQ29tbWl0dGVy
TGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNf
YnlfZnV6enlfbWF0Y2goJ0dlb2ZmIEdhcmVuJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9i
eV9uYW1lKCdHZW9mZnJleSBHYXJlbicpXSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Y29tbWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ0tlbm5ldGggQ2hyaXN0aWFu
c2VuJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbicpXSwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5j
b250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ0tlbiBSdXNzZWxsJyksIChbY29tbWl0dGVycy5j
b250cmlidXRvcl9ieV9uYW1lKCdLZW5uZXRoIFJ1c3NlbGwnKV0sIDQpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdEYXZl
IEh5YXR0JyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdEYXZpZCBIeWF0dCcp
XSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNf
YnlfZnV6enlfbWF0Y2goJ0RhdmUgS2lsemVyJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9i
eV9uYW1lKCdEYXZpZCBLaWx6ZXInKV0sIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNv
bW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdBbnR0aSAicHJpbnRmIiBLb2l2
aXN0bycpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnQW50dGkgS29pdmlzdG8n
KV0sIDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3Jz
X2J5X2Z1enp5X21hdGNoKCdTYW1teSBXZWluaWcnKSwgKFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9y
X2J5X25hbWUoJ1NhbSBXZWluaWcnKV0sIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNv
bW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdBbmRyZXMgS2xpbmcnKSwgKFtj
b21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUoJ0FuZHJlYXMgS2xpbmcnKV0sIDEpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21h
dGNoKCdEYXJpbiBBZGxlclwnJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdE
YXJpbiBBZGxlcicpXSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5j
b250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ0pvZSBQZWNvcmFybycpLCAoW2NvbW1pdHRlcnMu
Y29udHJpYnV0b3JfYnlfbmFtZSgnSm9zZXBoIFBlY29yYXJvJyldLCAzKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnRHIg
RGFuIEJlcm5zdGVpbicpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGFuIEJl
cm5zdGVpbicpXSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250
cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ01pdHpwZXR0ZWwnKSwgKFtjb21taXR0ZXJzLmNvbnRy
aWJ1dG9yX2J5X25hbWUoJ0RhbiBCZXJuc3RlaW4nKV0sIDApKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdybml3YUB3ZWJr
aXQub3JnJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdSeW9zdWtlIE5pd2En
KV0sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3Jz
X2J5X2Z1enp5X21hdGNoKCdBcCcpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgn
QWxleGV5IFByb3NrdXJ5YWtvdicpXSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29t
bWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ1NhbScpLCAoW2NvbW1pdHRlcnMu
Y29udHJpYnV0b3JfYnlfbmFtZSgnU2FtIFdlaW5pZycpXSwgMCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ2RhcmluJyks
IChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdEYXJpbiBBZGxlcicpXSwgMCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlf
bWF0Y2goJ2hhcnJpc29uJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdEYXZp
ZCBIYXJyaXNvbicpXSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5j
b250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ290aGVycycpLCAoW10sIDYpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdC
VUlMRCBGSVgnKSwgKFtdLCA5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJz
LmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnYnV0IERhbiBCZXJuc3RlaW4gYWxzbyByZXZp
ZXdlZCcpLCAoW10sIDMxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNv
bnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnYXNrZWQgdGhvdWdodGZ1bCBxdWVzdGlvbnMnKSwg
KFtdLCAyNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRv
cnNfYnlfZnV6enlfbWF0Y2goJ2J1aWxkIGZpeCBvZiBtYWMnKSwgKFtdLCAxNikpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2go
J2Egc3BlbGwgY2hlY2tlcicpLCAoW10sIDE1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
b21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnbm9ib2R5LCBidWlsZCBmaXgn
KSwgKFtdLCAxNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmli
dXRvcnNfYnlfZnV6enlfbWF0Y2goJ05PQk9EWSAoY2hyb21pdW0gYnVpbGQgZml4KScpLCAoW10s
IDI3KSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJl
dmlld2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVw
cy92YWxpZGF0ZXJldmlld2VyLnB5CShyZXZpc2lvbiAxMDAyMzMpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlci5weQkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTYgKzQzLDYgQEAgY2xhc3MgVmFsaWRhdGVSZXZpZXdlcihBYnN0cmFjdFN0ZXApOgog
ICAgICAgICAgICAgT3B0aW9ucy5ub25faW50ZXJhY3RpdmUsCiAgICAgICAgIF0KIAotICAgICMg
RklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG1vdmUgb250byBDaGFuZ2VMb2dFbnRyeQotICAg
IGRlZiBfaGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYsIGNoYW5nZWxvZ19lbnRyeSk6Ci0gICAgICAg
IGlmIGNoYW5nZWxvZ19lbnRyeS5yZXZpZXdlcigpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUK
LSAgICAgICAgaWYgcmUuc2VhcmNoKCJ1bnJldmlld2VkIiwgY2hhbmdlbG9nX2VudHJ5LmNvbnRl
bnRzKCksIHJlLklHTk9SRUNBU0UpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAg
aWYgcmUuc2VhcmNoKCJydWJiZXJbIC1dc3RhbXAiLCBjaGFuZ2Vsb2dfZW50cnkuY29udGVudHMo
KSwgcmUuSUdOT1JFQ0FTRSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1
cm4gRmFsc2UKLQogICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgogICAgICAgICAjIEZJWE1FOiBG
b3Igbm93IHdlIGRpc2FibGUgdGhpcyBjaGVjayB3aGVuIGEgdXNlciBpcyBkcml2aW5nIHRoZSBz
Y3JpcHQKICAgICAgICAgIyB0aGlzIGNoZWNrIGlzIHRvbyBkcmFjb25pYW4gKGFuZCB0b28gcG9v
cmx5IHRlc3RlZCkgdG8gZm9pc3QgdXBvbiB1c2Vycy4KQEAgLTYwLDcgKzUwLDcgQEAgY2xhc3Mg
VmFsaWRhdGVSZXZpZXdlcihBYnN0cmFjdFN0ZXApOgogICAgICAgICAgICAgcmV0dXJuCiAgICAg
ICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiBzZWxmLmNhY2hlZF9sb29rdXAoc3RhdGUsICJjaGFu
Z2Vsb2dzIik6CiAgICAgICAgICAgICBjaGFuZ2Vsb2dfZW50cnkgPSBDaGFuZ2VMb2coY2hhbmdl
bG9nX3BhdGgpLmxhdGVzdF9lbnRyeSgpCi0gICAgICAgICAgICBpZiBzZWxmLl9oYXNfdmFsaWRf
cmV2aWV3ZXIoY2hhbmdlbG9nX2VudHJ5KToKKyAgICAgICAgICAgIGlmIGNoYW5nZWxvZ19lbnRy
eS5oYXNfdmFsaWRfcmV2aWV3ZXIoKToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAg
ICAgICAgcmV2aWV3ZXJfdGV4dCA9IGNoYW5nZWxvZ19lbnRyeS5yZXZpZXdlcl90ZXh0KCkKICAg
ICAgICAgICAgIGlmIHJldmlld2VyX3RleHQ6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlcl91bml0dGVz
dC5weQkocmV2aXNpb24gMTAwMjMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0
ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcg
KzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmli
dXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0IENoYW5nZUxvZ0VudHJ5Ci1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQot
ZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucywgTW9ja1Rvb2wK
LWZyb20gd2Via2l0cHkudG9vbC5zdGVwcy52YWxpZGF0ZXJldmlld2VyIGltcG9ydCBWYWxpZGF0
ZVJldmlld2VyCi0KLWNsYXNzIFZhbGlkYXRlUmV2aWV3ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKLSAgICBfYm9pbGVycGxhdGVfZW50cnkgPSAnJycyMDA5LTA4LTE5ICBFcmljIFNlaWRlbCAg
PGVyaWNAd2Via2l0Lm9yZz4KLQotICAgICAgICBSRVZJRVdfTElORQotCi0gICAgICAgICogU2Ny
aXB0cy9idWd6aWxsYS10b29sOgotJycnCi0KLSAgICBkZWYgX3Rlc3RfcmV2aWV3X3RleHQoc2Vs
Ziwgc3RlcCwgdGV4dCwgZXhwZWN0ZWQpOgotICAgICAgICBjb250ZW50cyA9IHNlbGYuX2JvaWxl
cnBsYXRlX2VudHJ5LnJlcGxhY2UoIlJFVklFV19MSU5FIiwgdGV4dCkKLSAgICAgICAgZW50cnkg
PSBDaGFuZ2VMb2dFbnRyeShjb250ZW50cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGVw
Ll9oYXNfdmFsaWRfcmV2aWV3ZXIoZW50cnkpLCBleHBlY3RlZCkKLQotICAgIGRlZiB0ZXN0X2hh
c192YWxpZF9yZXZpZXdlcihzZWxmKToKLSAgICAgICAgc3RlcCA9IFZhbGlkYXRlUmV2aWV3ZXIo
TW9ja1Rvb2woKSwgTW9ja09wdGlvbnMoKSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4
dChzdGVwLCAiUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuIiwgVHJ1ZSkKLSAgICAgICAgc2VsZi5f
dGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwiLCBUcnVlKSAj
IE5vdCBwaWNreSBhYm91dCB0aGUgJy4nCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQo
c3RlcCwgIlJldmlld2VkIGJ5IEVyaWMuIiwgRmFsc2UpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2
aWV3X3RleHQoc3RlcCwgIlJldmlld2VkIGJ5IEVyaWMgQyBTZWlkZWwuIiwgRmFsc2UpCi0gICAg
ICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQoc3RlcCwgIlJ1YmJlci1zdGFtcGVkIGJ5IEVyaWMu
IiwgVHJ1ZSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUnViYmVyIHN0
YW1wZWQgYnkgRXJpYy4iLCBUcnVlKQotICAgICAgICBzZWxmLl90ZXN0X3Jldmlld190ZXh0KHN0
ZXAsICJVbnJldmlld2VkIGJ1aWxkIGZpeC4iLCBUcnVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115095</attachid>
            <date>2011-11-14 21:46:54 -0800</date>
            <delta_ts>2011-11-15 10:44:37 -0800</delta_ts>
            <desc>Removed unsed argument in edit_distance</desc>
            <filename>bug-72351-20111114214653.patch</filename>
            <type>text/plain</type>
            <size>28461</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDIzNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDExLTExLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEltcGxlbWVudCBlZGl0LWRpc3RhbmNlIGJhc2VkIHJldmlld2VyIHJlY29nbml0
aW9uIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgYW4gYWxnb3JpdGhtIHRvIHJlY29nbml6ZSByZXZpZXdlcidzIG5hbWUg
YmFzZWQgb24gaXRzIGVkaXQgZGlzdGFuY2UgKG9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGl0
cyBMZXZlbnNodGVpbiBkaXN0YW5jZSkgdG8gZWFjaCByZXZpZXdlcidzIGZ1bGwgbmFtZSwgZmly
c3QsIGxhc3QgYW5kIG1pZGRsZSBuYW1lcywgYW5kIElSQyBuaWNrbmFtZXMuCisgICAgICAgIEZ1
cnRoZXJtb3JlLCB3ZSBjYXAgdGhlIG1heGltdW0gZWRpdCBkaXN0YW5jZSBhdCBsZW4obmFtZSkg
LSAxIHRvIGF2b2lkIG1hdGNoaW5nIGEgYm9ndXMgc3RyaW5nIGxpa2UKKyAgICAgICAgImJ1aWxk
IGZpeCIgdG8gYSByZXZpZXdlcidzIG5hbWUgKGUuZy4gd2l0aCB3aXRoIGVkaXQgZGlzdGFuY2Ug
OSkuCisKKyAgICAgICAgVGhpcyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgaW4gQ29tbWl0dGVy
TGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2guIFRoZSBmdW5jdGlvbiB0byBjb21wdXRl
CisgICAgICAgIHRoZSBlZGl0IGRpc3RhbmNlIGlzIGltcGxlbWVudGVkIGluIGVkaXRfZGlzdGFu
Y2UucHkuCisKKyAgICAgICAgQWxzbyBtb3ZlZCBfaGFzX3ZhbGlkX3Jldmlld2VyIGZyb20gVmFs
aWRhdGVSZXZpZXdlciB0byBDaGFuZ2VMb2dFbnRyeSBiZWNhdXNlIHdlIGNhbiBubyBsb25nZXIg
cmVseQorICAgICAgICBvbiB0aGUgcHJlc2VuY2Ugb2YgQ2hhbmdlTG9nRW50cnkucmV2aWV3ZXIo
KSB0byB2ZXJpZnkgdGhhdCByZXZpZXdlciBzdHJpbmcgaXMgbmljZWx5IGZvcm1hdHRlZC4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
ZWRpdF9kaXN0YW5jZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQu
CisKIDIwMTEtMTEtMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgSW1wcm92ZSBDaGFuZ2VMb2dFbnRyeSdzIHJldmlld2VyIHBhcnNpbmcgYWxnb3JpdGhtIHBh
cnQgMgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdF9kaXN0YW5jZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3Rh
bmNlLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQg
KGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5CisKKworZGVmIGVkaXRfZGlzdGFuY2Uoc3Ry
MSwgc3RyMik6CisgICAgZGlzdGFuY2VzID0gW2FycmF5KCdoJywgKDAsKSAqIChsZW4oc3RyMikg
KyAxKSkgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHN0cjEpICsgMSldCisgICAgZm9yIGkgaW4gcmFu
Z2UoMSwgbGVuKHN0cjEpICsgMSk6CisgICAgICAgIGRpc3RhbmNlc1tpXVswXSA9IGkKKworICAg
IGZvciBqIGluIHJhbmdlKDEsIGxlbihzdHIyKSArIDEpOgorICAgICAgICBkaXN0YW5jZXNbMF1b
al0gPSBqCisKKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc3RyMSkgKyAxKToKKyAgICAgICAg
Zm9yIGogaW4gcmFuZ2UoMSwgbGVuKHN0cjIpICsgMSk6CisgICAgICAgICAgICBkaWZmID0gMCBp
ZiBzdHIxW2kgLSAxXSA9PSBzdHIyW2ogLSAxXSBlbHNlIDEKKyAgICAgICAgICAgICMgRGVsZXRp
b24sIEluc2VydGlvbiwgSWRlbnRpY2FsIC8gUmVwbGFjZW1lbnQKKyAgICAgICAgICAgIGRpc3Rh
bmNlc1tpXVtqXSA9IG1pbihkaXN0YW5jZXNbaV1baiAtIDFdICsgMSwgZGlzdGFuY2VzW2kgLSAx
XVtqXSArIDEsIGRpc3RhbmNlc1tpIC0gMV1baiAtIDFdICsgZGlmZikKKyAgICByZXR1cm4gZGlz
dGFuY2VzW2xlbihzdHIxKV1bbGVuKHN0cjIpXQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vZWRpdF9kaXN0YW5jZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3RhbmNlX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdF9kaXN0YW5jZV91bml0
dGVzdC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5lZGl0X2Rpc3RhbmNlIGlt
cG9ydCBlZGl0X2Rpc3RhbmNlCisKKworY2xhc3MgRWRpdERpc3RhbmNlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZWRpdF9kaXN0YW5jZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCcnLCAnYWEnKSwgMikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYScsICcnKSwgMikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhJywgJ2FiJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWInLCAnYScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGVkaXRfZGlzdGFuY2UoJ2FiJywgJ2FhJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZWRpdF9kaXN0YW5jZSgnYWEnLCAnYWInKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChlZGl0X2Rpc3RhbmNlKCdhYmQnLCAnYWJjZGVmJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWJjZGVmJywgJ2FiZCcpLCAzKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weQkocmV2
aXNpb24gMTAwMjMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
Y2hhbmdlbG9nLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOCArMTU1LDEyIEBAIGNsYXNzIENo
YW5nZUxvZ0VudHJ5KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2F1dGhvcl9uYW1lID0gbWF0Y2gu
Z3JvdXAoIm5hbWUiKSBpZiBtYXRjaCBlbHNlIE5vbmUKICAgICAgICAgc2VsZi5fYXV0aG9yX2Vt
YWlsID0gbWF0Y2guZ3JvdXAoImVtYWlsIikgaWYgbWF0Y2ggZWxzZSBOb25lCiAKLSAgICAgICAg
c2VsZi5fcmV2aWV3ZXJfdGV4dCwgc2VsZi5fcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5
Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KHNlbGYuX2NvbnRlbnRzKQotICAgICAgICBzZWxmLl9yZXZp
ZXdlciA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbW1pdHRlcl9ieV9uYW1lKHNlbGYuX3Jldmll
d2VyX2xpc3RbMF0pIGlmIHNlbGYuX3Jldmlld2VyX2xpc3QgZWxzZSBOb25lCisgICAgICAgIHNl
bGYuX3Jldmlld2VyX3RleHQsIHNlbGYuX3Jldmlld2Vyc190ZXh0X2xpc3QgPSBDaGFuZ2VMb2dF
bnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dChzZWxmLl9jb250ZW50cykKKyAgICAgICAgaWYgc2Vs
Zi5fcmV2aWV3ZXJzX3RleHRfbGlzdDoKKyAgICAgICAgICAgIGxpc3Rfb2ZfcmV2aWV3ZXJzID0g
W3NlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaChyZXZpZXdl
cilbMF0gZm9yIHJldmlld2VyIGluIHNlbGYuX3Jldmlld2Vyc190ZXh0X2xpc3RdCisgICAgICAg
ICAgICBzZWxmLl9yZXZpZXdlcnMgPSBbcmV2aWV3ZXJzWzBdIGZvciByZXZpZXdlcnMgaW4gbGlz
dF9vZl9yZXZpZXdlcnMgaWYgbGVuKHJldmlld2VycykgPT0gMV0KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuX3Jldmlld2VycyA9IFtdCiAgICAgICAgIHNlbGYuX2F1dGhvciA9IHNl
bGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yX2J5X2VtYWlsKHNlbGYuX2F1dGhvcl9lbWFp
bCkgb3Igc2VsZi5fY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JfYnlfbmFtZShzZWxmLl9hdXRo
b3JfbmFtZSkKIAogICAgICAgICBzZWxmLl90b3VjaGVkX2ZpbGVzID0gcmUuZmluZGFsbChzZWxm
LnRvdWNoZWRfZmlsZXNfcmVnZXhwLCBzZWxmLl9jb250ZW50cywgcmUuTVVMVElMSU5FKQpAQCAt
MTc1LDggKzE3OSwyMiBAQCBjbGFzcyBDaGFuZ2VMb2dFbnRyeShvYmplY3QpOgogICAgIGRlZiBy
ZXZpZXdlcl90ZXh0KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcmV2aWV3ZXJfdGV4dAog
CisgICAgIyBNaWdodCBiZSBOb25lLCBtaWdodCBhbHNvIG5vdCBiZSBhIFJldmlld2VyIQogICAg
IGRlZiByZXZpZXdlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jldmlld2VyICAjIE1p
Z2h0IGJlIE5vbmUsIG1pZ2h0IGFsc28gbm90IGJlIGEgUmV2aWV3ZXIhCisgICAgICAgIHJldHVy
biBzZWxmLl9yZXZpZXdlcnNbMF0gaWYgbGVuKHNlbGYuX3Jldmlld2VycykgPiAwIGVsc2UgTm9u
ZQorCisgICAgZGVmIHJldmlld2VycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jldmll
d2VycworCisgICAgZGVmIGhhc192YWxpZF9yZXZpZXdlcihzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fcmV2aWV3ZXJzX3RleHRfbGlzdDoKKyAgICAgICAgICAgIGZvciByZXZpZXdlciBpbiBzZWxm
Ll9yZXZpZXdlcnNfdGV4dF9saXN0OgorICAgICAgICAgICAgICAgIHJldmlld2VyID0gc2VsZi5f
Y29tbWl0dGVyX2xpc3QuY29tbWl0dGVyX2J5X25hbWUocmV2aWV3ZXIpCisgICAgICAgICAgICAg
ICAgaWYgcmV2aWV3ZXI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAg
IGlmIHJlLnNlYXJjaCgidW5yZXZpZXdlZCIsIHNlbGYuX2NvbnRlbnRzLCByZS5JR05PUkVDQVNF
KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAg
ZGVmIGNvbnRlbnRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fY29udGVudHMKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9jaGFuZ2Vsb2dfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwMDIzMykKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzc3LDQwICszNzcsMTUgQEAgY2xhc3MgQ2hhbmdlTG9nVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFu
Z2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZyB3
aXRoIG5vIGhlc2l0YXRpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9s
aXN0LCBbJ1NhbSBXZWluaWcnXSkKIAotICAgICAgICAjIEZvciBub3csIHdlIGxldCB1bm9mZmlj
aWFsIHJldmlld2VycyByZWNvZ25pemVkIGFzIHJldmlld2VycwotICAgICAgICByZXZpZXdlcl90
ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQo
J1Jldmlld2VkIGJ5IFNhbSBXZWluaWcsIEFuZGVycyBDYXJsc3NvbiwgYW5kICh1bm9mZmljaWFs
bHkpIEFkYW0gQmFydGguJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlz
dCwgWydTYW0gV2VpbmlnJywgJ0FuZGVycyBDYXJsc3NvbicsICdBZGFtIEJhcnRoJ10pCi0KLSAg
ICAgICAgIyBJdCdzIG9rYXkgdG8gaGF2ZSAnYnVpbGQgZml4JyBhbmQgJ290aGVycycsIGV0Yy4u
LiBhcyBhIHJldmlld2VyIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMgYmVjYXVzZSBmdXp6eS1tYXRj
aCB3b3VsZCByZWplY3QgaXQKLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9
IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YsIGJ1aWxkIGZpeCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2Vy
X2xpc3QsIFsnRGltaXRyaSBHbGF6a292JywgJ2J1aWxkIGZpeCddKQotCi0gICAgICAgIHJldmll
d2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJf
dGV4dCgnUmV2aWV3ZWQgYnkgQlVJTEQgRklYJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
cmV2aWV3ZXJfbGlzdCwgWydCVUlMRCBGSVgnXSkKLQotICAgICAgICByZXZpZXdlcl90ZXh0LCBy
ZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmll
d2VkIGJ5IE1hYyBidWlsZCBmaXgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdl
cl9saXN0LCBbJ01hYyBidWlsZCBmaXgnXSkKLQotICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZp
ZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2Vk
IGJ5IERhcmluIEFkbGVyLCBEYW4gQmVybnN0ZWluLCBBZGVsZSBQZXRlcnNvbiwgYW5kIG90aGVy
cy4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl90ZXh0LCAnRGFyaW4gQWRs
ZXIsIERhbiBCZXJuc3RlaW4sIEFkZWxlIFBldGVyc29uLCBhbmQgb3RoZXJzJykKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydEYXJpbiBBZGxlcicsICdEYW4gQmVy
bnN0ZWluJywgJ0FkZWxlIFBldGVyc29uJywgJ290aGVycyddKQotCi0gICAgICAgIHJldmlld2Vy
X3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4
dCgnUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MgKGFuZCBvdGhlcnMpJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydHZW9yZ2UgU3RhaWtvcycsICdvdGhlcnMn
XSkKLQogICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50
cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IE9saXZlciBIdW50LCBva2F5ZWQg
YnkgRGFyaW4gQWRsZXIuJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlz
dCwgWydPbGl2ZXIgSHVudCddKQogCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xp
c3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgTWFy
ayBSb3dlLCBidXQgRGFuIEJlcm5zdGVpbiBhbHNvIHJldmlld2VkIGFuZCBhc2tlZCB0aG91Z2h0
ZnVsIHF1ZXN0aW9ucy4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0
LCBbJ01hcmsgUm93ZScsICdidXQgRGFuIEJlcm5zdGVpbiBhbHNvIHJldmlld2VkJywgJ2Fza2Vk
IHRob3VnaHRmdWwgcXVlc3Rpb25zJ10pCi0KLSAgICAgICAgIyBJdCdzIG9rYXkgdG8gaGF2ZSAi
IGluIiBhbmQgImJ5ICIsIGV0Yy4uLiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzIGJlY2F1c2Ugd2Un
cmUgZ29pbmcgdG8gZnV6enktbWF0Y2ggdGhlbSBsYXRlcgotICAgICAgICByZXZpZXdlcl90ZXh0
LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jl
dmlld2VkIGJ5IERhcmluIEFkbGVyIGluIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDc3MzY+LicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3Rl
eHQsICdEYXJpbiBBZGxlciBpbicpCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xp
c3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC46dycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsICdB
ZGFtIEJhcnRoLjp3JykKICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENo
YW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEYXJpbiBBZGxl
cikuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfdGV4dCwgJ0RhcmluIEFk
bGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydEYXJpbiBB
ZGxlciddKQorCisgICAgICAgICMgRm9yIG5vdywgd2UgbGV0IHVub2ZmaWNpYWwgcmV2aWV3ZXJz
IHJlY29nbml6ZWQgYXMgcmV2aWV3ZXJzCisgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2Vy
X2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkg
U2FtIFdlaW5pZywgQW5kZXJzIENhcmxzc29uLCBhbmQgKHVub2ZmaWNpYWxseSkgQWRhbSBCYXJ0
aC4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ1NhbSBXZWlu
aWcnLCAnQW5kZXJzIENhcmxzc29uJywgJ0FkYW0gQmFydGgnXSkKIAogICAgICAgICByZXZpZXdl
cl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3Rl
eHQoJ1Jldmlld2VkIGJ5IE5PQk9EWS4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZp
ZXdlcl90ZXh0LCBOb25lKQpAQCAtNDMzLDYgKzQwOCw1OSBAQCBjbGFzcyBDaGFuZ2VMb2dUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlz
dCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBub2Jv
ZHkgKHRyaXZpYWwgZm9sbG93IHVwIGZpeCksIEpvc2VwaCBQZWNvcmFybyBMR1RNLWVkLicpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsIE5vbmUpCiAKKyAgICBkZWYg
X2VudHJ5X3dpdGhfcmV2aWV3ZXIoc2VsZiwgcmV2aWV3ZXJfbGluZSk6CisgICAgICAgIHJldHVy
biBDaGFuZ2VMb2dFbnRyeSgnJycyMDA5LTA4LTE5ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0
Lm9yZz4KKworICAgICAgICAgICAgUkVWSUVXX0xJTkUKKworICAgICAgICAgICAgKiBTY3JpcHRz
L2J1Z3ppbGxhLXRvb2w6CisnJycucmVwbGFjZSgiUkVWSUVXX0xJTkUiLCByZXZpZXdlcl9saW5l
KSkKKworICAgIGRlZiBfY29udHJpYnV0b3JzKHNlbGYsIG5hbWVzKToKKyAgICAgICAgcmV0dXJu
IFtDb21taXR0ZXJMaXN0KCkuY29udHJpYnV0b3JfYnlfbmFtZShuYW1lKSBmb3IgbmFtZSBpbiBu
YW1lc10KKworICAgIGRlZiB0ZXN0X2Z1enp5X3Jldmlld2VyX21hdGNoKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgn
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LCBidWlsZCBmaXgnKVsxXSwgWydEaW1pdHJpIEds
YXprb3YnLCAnYnVpbGQgZml4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2Vu
dHJ5X3dpdGhfcmV2aWV3ZXIoJ1Jldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdiwgYnVpbGQgZml4
JykucmV2aWV3ZXJzKCksIHNlbGYuX2NvbnRyaWJ1dG9ycyhbJ0RpbWl0cmkgR2xhemtvdiddKSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3
ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgQlVJTEQgRklYJylbMV0sIFsnQlVJTEQgRklYJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoJ1Jldmlld2Vk
IGJ5IEJVSUxEIEZJWCcpLnJldmlld2VycygpLCBbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgTWFj
IGJ1aWxkIGZpeCcpWzFdLCBbJ01hYyBidWlsZCBmaXgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgTWFjIGJ1aWxkIGZp
eCcpLnJldmlld2VycygpLCBbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VM
b2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIsIERh
biBCZXJuc3RlaW4sIEFkZWxlIFBldGVyc29uLCBhbmQgb3RoZXJzLicpWzFdLAorICAgICAgICAg
ICAgWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0FkZWxlIFBldGVyc29uJywgJ290
aGVycyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9lbnRyeV93aXRoX3Jldmll
d2VyKCdSZXZpZXdlZCBieSBEYXJpbiBBZGxlciwgRGFuIEJlcm5zdGVpbiwgQWRlbGUgUGV0ZXJz
b24sIGFuZCBvdGhlcnMuJykucmV2aWV3ZXJzKCksCisgICAgICAgICAgICBzZWxmLl9jb250cmli
dXRvcnMoWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0FkZWxlIFBldGVyc29uJ10p
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZp
ZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcyAoYW5kIG90aGVycyknKVsxXSwg
WydHZW9yZ2UgU3RhaWtvcycsICdvdGhlcnMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MgKGFu
ZCBvdGhlcnMpJykucmV2aWV3ZXJzKCksIHNlbGYuX2NvbnRyaWJ1dG9ycyhbJ0dlb3JnZSBTdGFp
a29zJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJz
ZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBNYXJrIFJvd2UsIGJ1dCBEYW4gQmVybnN0ZWlu
IGFsc28gcmV2aWV3ZWQgYW5kIGFza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zLicpWzFdLAorICAg
ICAgICAgICAgWydNYXJrIFJvd2UnLCAnYnV0IERhbiBCZXJuc3RlaW4gYWxzbyByZXZpZXdlZCcs
ICdhc2tlZCB0aG91Z2h0ZnVsIHF1ZXN0aW9ucyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCdSZXZpZXdlZCBieSBNYXJrIFJvd2UsIGJ1dCBE
YW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQgYW5kIGFza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25z
LicpLnJldmlld2VycygpLAorICAgICAgICAgICAgc2VsZi5fY29udHJpYnV0b3JzKFsnTWFyayBS
b3dlJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJz
ZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBpbiA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzM2Pi4nKVsxXSwKKyAgICAgICAgICAgIFsn
RGFyaW4gQWRsZXIgaW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlf
d2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgaW4gPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzczNj4uJykucmV2aWV3ZXJzKCksCisgICAgICAg
ICAgICBzZWxmLl9jb250cmlidXRvcnMoWydEYXJpbiBBZGxlciddKSkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC46dycpWzFdLCBbJ0FkYW0gQmFydGguOncnXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC46dycpLnJldmlld2VycygpLCBzZWxmLl9jb250cmlidXRvcnMoWydBZGFtIEJhcnRo
J10pKQorCisgICAgZGVmIHRlc3RfaGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoIlJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLiIpLmhhc192YWxpZF9yZXZpZXdlcigpLCBUcnVlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoIlJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpICAjIE5vdCBwaWNreSBhYm91dCB0aGUg
Jy4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigi
UmV2aWV3ZWQgYnkgRXJpYy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUmV2aWV3ZWQgYnkg
RXJpYyBDIFNlaWRlbC4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyLXN0YW1wZWQg
YnkgRXJpYy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyLXN0YW1wZWQgYnkgRXJp
YyBTZWlkZWwuIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyIHN0YW1wZWQgYnkgRXJp
Yy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyIHN0YW1wZWQgYnkgRXJpYyBTZWlk
ZWwuIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiVW5yZXZpZXdlZCBidWlsZCBmaXguIikuaGFz
X3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisKICAgICBkZWYgdGVzdF9sYXRlc3RfZW50cnlfcGFy
c2Uoc2VsZik6CiAgICAgICAgIGNoYW5nZWxvZ19jb250ZW50cyA9IHUiJXNcbiVzIiAlIChzZWxm
Ll9leGFtcGxlX2VudHJ5LCBzZWxmLl9leGFtcGxlX2NoYW5nZWxvZykKICAgICAgICAgY2hhbmdl
bG9nX2ZpbGUgPSBTdHJpbmdJTyhjaGFuZ2Vsb2dfY29udGVudHMpCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVycy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVycy5weQkocmV2aXNp
b24gMTAwMjMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICMKICMgV2ViS2l0J3Mg
UHl0aG9uIG1vZHVsZSBmb3IgY29tbWl0dGVyIGFuZCByZXZpZXdlciB2YWxpZGF0aW9uLgogCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5lZGl0X2Rpc3RhbmNlIGltcG9ydCBlZGl0X2Rpc3RhbmNlCiAK
IGNsYXNzIEFjY291bnQob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZW1h
aWxfb3JfZW1haWxzLCBpcmNfbmlja25hbWVfb3Jfbmlja25hbWVzPU5vbmUpOgpAQCAtNDQ5LDcg
KzQ1MCw2IEBAIHJldmlld2Vyc19saXN0ID0gWwogICAgIFJldmlld2VyKCJab2x0YW4gSGVyY3pl
ZyIsIFsiemhlcmN6ZWdAd2Via2l0Lm9yZyIsICJ6aGVyY3plZ0BpbmYudS1zemVnZWQuaHUiXSwg
InpoZXJjemVnIiksCiBdCiAKLQogY2xhc3MgQ29tbWl0dGVyTGlzdChvYmplY3QpOgogCiAgICAg
IyBDb21taXR0ZXJzIGFuZCByZXZpZXdlcnMgYXJlIHBhc3NlZCBpbiB0byBhbGxvdyBlYXN5IHRl
c3RpbmcKQEAgLTUyOCw2ICs1MjgsMzkgQEAgY2xhc3MgQ29tbWl0dGVyTGlzdChvYmplY3QpOgog
ICAgIGRlZiBjb250cmlidXRvcnNfYnlfc2VhcmNoX3N0cmluZyhzZWxmLCBzdHJpbmcpOgogICAg
ICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBjb250cmlidXRvcjogY29udHJpYnV0b3IuY29udGFp
bnNfc3RyaW5nKHN0cmluZyksIHNlbGYuY29udHJpYnV0b3JzKCkpCiAKKyAgICBkZWYgY29udHJp
YnV0b3JzX2J5X2Z1enp5X21hdGNoKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHN0cmluZyA9IHN0
cmluZy5sb3dlcigpCisKKyAgICAgICAgIyBGaXJzdCBwYXRoLCBvcHRpbWl0aWNhbGx5IG1hdGNo
IGZvciBmdWxsbmFtZSwgZW1haWwgYW5kIGlyY19uaWNrbmFtZXMKKyAgICAgICAgZm9yIGNvbnRy
aWJ1dG9yIGluIHNlbGYuY29udHJpYnV0b3JzKCk6CisgICAgICAgICAgICBpZiBzdHJpbmcgaW4g
W2VtYWlsLmxvd2VyKCkgZm9yIGVtYWlsIGluIGNvbnRyaWJ1dG9yLmVtYWlsc10gb3Igc3RyaW5n
ID09IGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZS5sb3dlcigpOgorICAgICAgICAgICAgICAgIHJldHVy
biBbY29udHJpYnV0b3JdLCAwCisgICAgICAgICAgICBpZiBjb250cmlidXRvci5pcmNfbmlja25h
bWVzOgorICAgICAgICAgICAgICAgIG5pY2tuYW1lc19pbl9sb3dlcmNhc2UgPSBbbmlja25hbWUu
bG93ZXIoKSBmb3Igbmlja25hbWUgaW4gY29udHJpYnV0b3IuaXJjX25pY2tuYW1lc10KKyAgICAg
ICAgICAgICAgICBpZiBzdHJpbmcgaW4gbmlja25hbWVzX2luX2xvd2VyY2FzZToKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFtjb250cmlidXRvcl0sIDAKKworICAgICAgICAjIFNlY29uZCBw
YXRoLCBtdWNoIHNsb3dlciBzZWFyY2ggdXNpbmcgZWRpdC1kaXN0YW5jZQorICAgICAgICBjb250
cmlidXRvcldpdGhNaW5EaXN0YW5jZSA9IFtdCisgICAgICAgIG1pbkRpc3RhbmNlID0gbGVuKHN0
cmluZykgLyAyIC0gMQorICAgICAgICBmb3IgY29udHJpYnV0b3IgaW4gc2VsZi5jb250cmlidXRv
cnMoKToKKyAgICAgICAgICAgIGZ1bGxfbmFtZV9pbl9sb3dlcmNhc2UgPSBjb250cmlidXRvci5m
dWxsX25hbWUubG93ZXIoKQorICAgICAgICAgICAgdG9rZW5zID0gW2Z1bGxfbmFtZV9pbl9sb3dl
cmNhc2VdICsgZnVsbF9uYW1lX2luX2xvd2VyY2FzZS5zcGxpdCgpCisgICAgICAgICAgICBpZiBj
b250cmlidXRvci5pcmNfbmlja25hbWVzOgorICAgICAgICAgICAgICAgIHRva2VucyArPSBbbmlj
a25hbWUubG93ZXIoKSBmb3Igbmlja25hbWUgaW4gY29udHJpYnV0b3IuaXJjX25pY2tuYW1lcyBp
ZiBsZW4obmlja25hbWUpID4gNV0KKworICAgICAgICAgICAgdG9rZW5zID0gW2VkaXRfZGlzdGFu
Y2UodG9rZW4sIHN0cmluZykgZm9yIHRva2VuIGluIHRva2VucyBpZiBhYnMobGVuKHRva2VuKSAt
IGxlbihzdHJpbmcpKSA8PSBtaW5EaXN0YW5jZV0KKyAgICAgICAgICAgIGlmIGxlbih0b2tlbnMp
OgorICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gbWluKHRva2VucykKKyAgICAgICAgICAgICAg
ICBpZiBkaXN0YW5jZSA9PSBtaW5EaXN0YW5jZToKKyAgICAgICAgICAgICAgICAgICAgY29udHJp
YnV0b3JXaXRoTWluRGlzdGFuY2UuYXBwZW5kKGNvbnRyaWJ1dG9yKQorICAgICAgICAgICAgICAg
IGVsaWYgZGlzdGFuY2UgPCBtaW5EaXN0YW5jZToKKyAgICAgICAgICAgICAgICAgICAgY29udHJp
YnV0b3JXaXRoTWluRGlzdGFuY2UgPSBbY29udHJpYnV0b3JdCisgICAgICAgICAgICAgICAgICAg
IG1pbkRpc3RhbmNlID0gZGlzdGFuY2UKKyAgICAgICAgaWYgbm90IGxlbihjb250cmlidXRvcldp
dGhNaW5EaXN0YW5jZSk6CisgICAgICAgICAgICByZXR1cm4gW10sIGxlbihzdHJpbmcpCisgICAg
ICAgIHJldHVybiBjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSwgbWluRGlzdGFuY2UKKwogICAg
IGRlZiBhY2NvdW50X2J5X2xvZ2luKHNlbGYsIGxvZ2luKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X2xvZ2luX3RvX2FjY291bnRfbWFwKCkuZ2V0KGxvZ2luLmxvd2VyKCkpCiAKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0
ZXJzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMDAyMzMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVyc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtOTEsMyArOTEsMzEgQEAgY2xhc3MgQ29tbWl0dGVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19i
eV9zZWFyY2hfc3RyaW5nKCd0ZXN0JyksIFtjb250cmlidXRvciwgY29tbWl0dGVyLCByZXZpZXdl
cl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3Jz
X2J5X3NlYXJjaF9zdHJpbmcoJ3JhZCcpLCBbcmV2aWV3ZXJdKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9zZWFyY2hfc3RyaW5nKCdUd28n
KSwgW3Jldmlld2VyXSkKKworICAgIGRlZiB0ZXN0X2NvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRj
aChzZWxmKToKKyAgICAgICAgY29tbWl0dGVycyA9IENvbW1pdHRlckxpc3QoKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdH
ZW9mZiBHYXJlbicpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnR2VvZmZyZXkg
R2FyZW4nKV0sIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJp
YnV0b3JzX2J5X2Z1enp5X21hdGNoKCdLZW5uZXRoIENocmlzdGlhbnNlbicpLCAoW2NvbW1pdHRl
cnMuY29udHJpYnV0b3JfYnlfbmFtZSgnS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4nKV0sIDYp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1
enp5X21hdGNoKCdLZW4gUnVzc2VsbCcpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFt
ZSgnS2VubmV0aCBSdXNzZWxsJyldLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnRGF2ZSBIeWF0dCcpLCAoW2NvbW1p
dHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGF2aWQgSHlhdHQnKV0sIDIpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdE
YXZlIEtpbHplcicpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGF2aWQgS2ls
emVyJyldLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1
dG9yc19ieV9mdXp6eV9tYXRjaCgnQW50dGkgInByaW50ZiIgS29pdmlzdG8nKSwgKFtjb21taXR0
ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUoJ0FudHRpIEtvaXZpc3RvJyldLCA5KSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgn
U2FtbXkgV2VpbmlnJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdTYW0gV2Vp
bmlnJyldLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1
dG9yc19ieV9mdXp6eV9tYXRjaCgnQW5kcmVzIEtsaW5nJyksIChbY29tbWl0dGVycy5jb250cmli
dXRvcl9ieV9uYW1lKCdBbmRyZWFzIEtsaW5nJyldLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnRGFyaW4gQWRsZXJc
JycpLCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGFyaW4gQWRsZXInKV0sIDEp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1
enp5X21hdGNoKCdKb2UgUGVjb3Jhcm8nKSwgKFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25h
bWUoJ0pvc2VwaCBQZWNvcmFybycpXSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29t
bWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goJ0RyIERhbiBCZXJuc3RlaW4nKSwg
KFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUoJ0RhbiBCZXJuc3RlaW4nKV0sIDMpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5
X21hdGNoKCdNaXR6cGV0dGVsJyksIChbY29tbWl0dGVycy5jb250cmlidXRvcl9ieV9uYW1lKCdE
YW4gQmVybnN0ZWluJyldLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJz
LmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgncm5pd2FAd2Via2l0Lm9yZycpLCAoW2NvbW1p
dHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnUnlvc3VrZSBOaXdhJyldLCAwKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgn
QXAnKSwgKFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUoJ0FsZXhleSBQcm9za3VyeWFr
b3YnKV0sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0
b3JzX2J5X2Z1enp5X21hdGNoKCdTYW0nKSwgKFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25h
bWUoJ1NhbSBXZWluaWcnKV0sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRl
cnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdkYXJpbicpLCAoW2NvbW1pdHRlcnMuY29u
dHJpYnV0b3JfYnlfbmFtZSgnRGFyaW4gQWRsZXInKV0sIDApKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdoYXJyaXNvbicp
LCAoW2NvbW1pdHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZSgnRGF2aWQgSGFycmlzb24nKV0sIDAp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1
enp5X21hdGNoKCdvdGhlcnMnKSwgKFtdLCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
b21taXR0ZXJzLmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaCgnQlVJTEQgRklYJyksIChbXSwg
OSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNfYnlf
ZnV6enlfbWF0Y2goJ2J1dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQnKSwgKFtdLCAzMSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6
enlfbWF0Y2goJ2Fza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zJyksIChbXSwgMjYpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNo
KCdidWlsZCBmaXggb2YgbWFjJyksIChbXSwgMTYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKCdhIHNwZWxsIGNoZWNrZXIn
KSwgKFtdLCAxNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmli
dXRvcnNfYnlfZnV6enlfbWF0Y2goJ25vYm9keSwgYnVpbGQgZml4JyksIChbXSwgMTcpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21h
dGNoKCdOT0JPRFkgKGNocm9taXVtIGJ1aWxkIGZpeCknKSwgKFtdLCAyNykpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlci5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdl
ci5weQkocmV2aXNpb24gMTAwMjMzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0
ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBA
IGNsYXNzIFZhbGlkYXRlUmV2aWV3ZXIoQWJzdHJhY3RTdGVwKToKICAgICAgICAgICAgIE9wdGlv
bnMubm9uX2ludGVyYWN0aXZlLAogICAgICAgICBdCiAKLSAgICAjIEZJWE1FOiBUaGlzIHNob3Vs
ZCBwcm9iYWJseSBtb3ZlIG9udG8gQ2hhbmdlTG9nRW50cnkKLSAgICBkZWYgX2hhc192YWxpZF9y
ZXZpZXdlcihzZWxmLCBjaGFuZ2Vsb2dfZW50cnkpOgotICAgICAgICBpZiBjaGFuZ2Vsb2dfZW50
cnkucmV2aWV3ZXIoKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGlmIHJlLnNl
YXJjaCgidW5yZXZpZXdlZCIsIGNoYW5nZWxvZ19lbnRyeS5jb250ZW50cygpLCByZS5JR05PUkVD
QVNFKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGlmIHJlLnNlYXJjaCgicnVi
YmVyWyAtXXN0YW1wIiwgY2hhbmdlbG9nX2VudHJ5LmNvbnRlbnRzKCksIHJlLklHTk9SRUNBU0Up
OgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KICAgICBk
ZWYgcnVuKHNlbGYsIHN0YXRlKToKICAgICAgICAgIyBGSVhNRTogRm9yIG5vdyB3ZSBkaXNhYmxl
IHRoaXMgY2hlY2sgd2hlbiBhIHVzZXIgaXMgZHJpdmluZyB0aGUgc2NyaXB0CiAgICAgICAgICMg
dGhpcyBjaGVjayBpcyB0b28gZHJhY29uaWFuIChhbmQgdG9vIHBvb3JseSB0ZXN0ZWQpIHRvIGZv
aXN0IHVwb24gdXNlcnMuCkBAIC02MCw3ICs1MCw3IEBAIGNsYXNzIFZhbGlkYXRlUmV2aWV3ZXIo
QWJzdHJhY3RTdGVwKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmb3IgY2hhbmdlbG9n
X3BhdGggaW4gc2VsZi5jYWNoZWRfbG9va3VwKHN0YXRlLCAiY2hhbmdlbG9ncyIpOgogICAgICAg
ICAgICAgY2hhbmdlbG9nX2VudHJ5ID0gQ2hhbmdlTG9nKGNoYW5nZWxvZ19wYXRoKS5sYXRlc3Rf
ZW50cnkoKQotICAgICAgICAgICAgaWYgc2VsZi5faGFzX3ZhbGlkX3Jldmlld2VyKGNoYW5nZWxv
Z19lbnRyeSk6CisgICAgICAgICAgICBpZiBjaGFuZ2Vsb2dfZW50cnkuaGFzX3ZhbGlkX3Jldmll
d2VyKCk6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJldmlld2VyX3Rl
eHQgPSBjaGFuZ2Vsb2dfZW50cnkucmV2aWV3ZXJfdGV4dCgpCiAgICAgICAgICAgICBpZiByZXZp
ZXdlcl90ZXh0OgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlk
YXRlcmV2aWV3ZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEw
MDIzMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJldmll
d2VyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU3ICswLDAgQEAKLSMgQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQu
Y2hhbmdlbG9nIGltcG9ydCBDaGFuZ2VMb2dFbnRyeQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKLWZyb20gd2Via2l0cHkudG9v
bC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMsIE1vY2tUb29sCi1mcm9tIHdlYmtpdHB5LnRv
b2wuc3RlcHMudmFsaWRhdGVyZXZpZXdlciBpbXBvcnQgVmFsaWRhdGVSZXZpZXdlcgotCi1jbGFz
cyBWYWxpZGF0ZVJldmlld2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgX2JvaWxlcnBs
YXRlX2VudHJ5ID0gJycnMjAwOS0wOC0xOSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+
Ci0KLSAgICAgICAgUkVWSUVXX0xJTkUKLQotICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9v
bDoKLScnJwotCi0gICAgZGVmIF90ZXN0X3Jldmlld190ZXh0KHNlbGYsIHN0ZXAsIHRleHQsIGV4
cGVjdGVkKToKLSAgICAgICAgY29udGVudHMgPSBzZWxmLl9ib2lsZXJwbGF0ZV9lbnRyeS5yZXBs
YWNlKCJSRVZJRVdfTElORSIsIHRleHQpCi0gICAgICAgIGVudHJ5ID0gQ2hhbmdlTG9nRW50cnko
Y29udGVudHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RlcC5faGFzX3ZhbGlkX3Jldmll
d2VyKGVudHJ5KSwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9oYXNfdmFsaWRfcmV2aWV3ZXIo
c2VsZik6Ci0gICAgICAgIHN0ZXAgPSBWYWxpZGF0ZVJldmlld2VyKE1vY2tUb29sKCksIE1vY2tP
cHRpb25zKCkpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQoc3RlcCwgIlJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLiIsIFRydWUpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQo
c3RlcCwgIlJldmlld2VkIGJ5IEVyaWMgU2VpZGVsIiwgVHJ1ZSkgIyBOb3QgcGlja3kgYWJvdXQg
dGhlICcuJwotICAgICAgICBzZWxmLl90ZXN0X3Jldmlld190ZXh0KHN0ZXAsICJSZXZpZXdlZCBi
eSBFcmljLiIsIEZhbHNlKQotICAgICAgICBzZWxmLl90ZXN0X3Jldmlld190ZXh0KHN0ZXAsICJS
ZXZpZXdlZCBieSBFcmljIEMgU2VpZGVsLiIsIEZhbHNlKQotICAgICAgICBzZWxmLl90ZXN0X3Jl
dmlld190ZXh0KHN0ZXAsICJSdWJiZXItc3RhbXBlZCBieSBFcmljLiIsIFRydWUpCi0gICAgICAg
IHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQoc3RlcCwgIlJ1YmJlciBzdGFtcGVkIGJ5IEVyaWMuIiwg
VHJ1ZSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiVW5yZXZpZXdlZCBi
dWlsZCBmaXguIiwgVHJ1ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115198</attachid>
            <date>2011-11-15 10:44:40 -0800</date>
            <delta_ts>2011-11-15 16:00:34 -0800</delta_ts>
            <desc>Added _assert_fuzz_match</desc>
            <filename>bug-72351-20111115104439.patch</filename>
            <type>text/plain</type>
            <size>27368</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDIzNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDExLTExLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEltcGxlbWVudCBlZGl0LWRpc3RhbmNlIGJhc2VkIHJldmlld2VyIHJlY29nbml0
aW9uIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgYW4gYWxnb3JpdGhtIHRvIHJlY29nbml6ZSByZXZpZXdlcidzIG5hbWUg
YmFzZWQgb24gaXRzIGVkaXQgZGlzdGFuY2UgKG9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGl0
cyBMZXZlbnNodGVpbiBkaXN0YW5jZSkgdG8gZWFjaCByZXZpZXdlcidzIGZ1bGwgbmFtZSwgZmly
c3QsIGxhc3QgYW5kIG1pZGRsZSBuYW1lcywgYW5kIElSQyBuaWNrbmFtZXMuCisgICAgICAgIEZ1
cnRoZXJtb3JlLCB3ZSBjYXAgdGhlIG1heGltdW0gZWRpdCBkaXN0YW5jZSBhdCBsZW4obmFtZSkg
LSAxIHRvIGF2b2lkIG1hdGNoaW5nIGEgYm9ndXMgc3RyaW5nIGxpa2UKKyAgICAgICAgImJ1aWxk
IGZpeCIgdG8gYSByZXZpZXdlcidzIG5hbWUgKGUuZy4gd2l0aCB3aXRoIGVkaXQgZGlzdGFuY2Ug
OSkuCisKKyAgICAgICAgVGhpcyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgaW4gQ29tbWl0dGVy
TGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2guIFRoZSBmdW5jdGlvbiB0byBjb21wdXRl
CisgICAgICAgIHRoZSBlZGl0IGRpc3RhbmNlIGlzIGltcGxlbWVudGVkIGluIGVkaXRfZGlzdGFu
Y2UucHkuCisKKyAgICAgICAgQWxzbyBtb3ZlZCBfaGFzX3ZhbGlkX3Jldmlld2VyIGZyb20gVmFs
aWRhdGVSZXZpZXdlciB0byBDaGFuZ2VMb2dFbnRyeSBiZWNhdXNlIHdlIGNhbiBubyBsb25nZXIg
cmVseQorICAgICAgICBvbiB0aGUgcHJlc2VuY2Ugb2YgQ2hhbmdlTG9nRW50cnkucmV2aWV3ZXIo
KSB0byB2ZXJpZnkgdGhhdCByZXZpZXdlciBzdHJpbmcgaXMgbmljZWx5IGZvcm1hdHRlZC4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
ZWRpdF9kaXN0YW5jZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQu
CisKIDIwMTEtMTEtMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgSW1wcm92ZSBDaGFuZ2VMb2dFbnRyeSdzIHJldmlld2VyIHBhcnNpbmcgYWxnb3JpdGhtIHBh
cnQgMgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdF9kaXN0YW5jZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3Rh
bmNlLnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQg
KGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5CisKKworZGVmIGVkaXRfZGlzdGFuY2Uoc3Ry
MSwgc3RyMik6CisgICAgZGlzdGFuY2VzID0gW2FycmF5KCdoJywgKDAsKSAqIChsZW4oc3RyMikg
KyAxKSkgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHN0cjEpICsgMSldCisgICAgZm9yIGkgaW4gcmFu
Z2UoMSwgbGVuKHN0cjEpICsgMSk6CisgICAgICAgIGRpc3RhbmNlc1tpXVswXSA9IGkKKworICAg
IGZvciBqIGluIHJhbmdlKDEsIGxlbihzdHIyKSArIDEpOgorICAgICAgICBkaXN0YW5jZXNbMF1b
al0gPSBqCisKKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc3RyMSkgKyAxKToKKyAgICAgICAg
Zm9yIGogaW4gcmFuZ2UoMSwgbGVuKHN0cjIpICsgMSk6CisgICAgICAgICAgICBkaWZmID0gMCBp
ZiBzdHIxW2kgLSAxXSA9PSBzdHIyW2ogLSAxXSBlbHNlIDEKKyAgICAgICAgICAgICMgRGVsZXRp
b24sIEluc2VydGlvbiwgSWRlbnRpY2FsIC8gUmVwbGFjZW1lbnQKKyAgICAgICAgICAgIGRpc3Rh
bmNlc1tpXVtqXSA9IG1pbihkaXN0YW5jZXNbaV1baiAtIDFdICsgMSwgZGlzdGFuY2VzW2kgLSAx
XVtqXSArIDEsIGRpc3RhbmNlc1tpIC0gMV1baiAtIDFdICsgZGlmZikKKyAgICByZXR1cm4gZGlz
dGFuY2VzW2xlbihzdHIxKV1bbGVuKHN0cjIpXQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vZWRpdF9kaXN0YW5jZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0X2Rpc3RhbmNlX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdF9kaXN0YW5jZV91bml0
dGVzdC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKGMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5lZGl0X2Rpc3RhbmNlIGlt
cG9ydCBlZGl0X2Rpc3RhbmNlCisKKworY2xhc3MgRWRpdERpc3RhbmNlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZWRpdF9kaXN0YW5jZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCcnLCAnYWEnKSwgMikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYScsICcnKSwgMikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhJywgJ2FiJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWInLCAnYScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGVkaXRfZGlzdGFuY2UoJ2FiJywgJ2FhJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZWRpdF9kaXN0YW5jZSgnYWEnLCAnYWInKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChlZGl0X2Rpc3RhbmNlKCdhYmQnLCAnYWJjZGVmJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWJjZGVmJywgJ2FiZCcpLCAzKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weQkocmV2
aXNpb24gMTAwMjM3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
Y2hhbmdlbG9nLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOCArMTU1LDEyIEBAIGNsYXNzIENo
YW5nZUxvZ0VudHJ5KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2F1dGhvcl9uYW1lID0gbWF0Y2gu
Z3JvdXAoIm5hbWUiKSBpZiBtYXRjaCBlbHNlIE5vbmUKICAgICAgICAgc2VsZi5fYXV0aG9yX2Vt
YWlsID0gbWF0Y2guZ3JvdXAoImVtYWlsIikgaWYgbWF0Y2ggZWxzZSBOb25lCiAKLSAgICAgICAg
c2VsZi5fcmV2aWV3ZXJfdGV4dCwgc2VsZi5fcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5
Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KHNlbGYuX2NvbnRlbnRzKQotICAgICAgICBzZWxmLl9yZXZp
ZXdlciA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbW1pdHRlcl9ieV9uYW1lKHNlbGYuX3Jldmll
d2VyX2xpc3RbMF0pIGlmIHNlbGYuX3Jldmlld2VyX2xpc3QgZWxzZSBOb25lCisgICAgICAgIHNl
bGYuX3Jldmlld2VyX3RleHQsIHNlbGYuX3Jldmlld2Vyc190ZXh0X2xpc3QgPSBDaGFuZ2VMb2dF
bnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dChzZWxmLl9jb250ZW50cykKKyAgICAgICAgaWYgc2Vs
Zi5fcmV2aWV3ZXJzX3RleHRfbGlzdDoKKyAgICAgICAgICAgIGxpc3Rfb2ZfcmV2aWV3ZXJzID0g
W3NlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaChyZXZpZXdl
cilbMF0gZm9yIHJldmlld2VyIGluIHNlbGYuX3Jldmlld2Vyc190ZXh0X2xpc3RdCisgICAgICAg
ICAgICBzZWxmLl9yZXZpZXdlcnMgPSBbcmV2aWV3ZXJzWzBdIGZvciByZXZpZXdlcnMgaW4gbGlz
dF9vZl9yZXZpZXdlcnMgaWYgbGVuKHJldmlld2VycykgPT0gMV0KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuX3Jldmlld2VycyA9IFtdCiAgICAgICAgIHNlbGYuX2F1dGhvciA9IHNl
bGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yX2J5X2VtYWlsKHNlbGYuX2F1dGhvcl9lbWFp
bCkgb3Igc2VsZi5fY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JfYnlfbmFtZShzZWxmLl9hdXRo
b3JfbmFtZSkKIAogICAgICAgICBzZWxmLl90b3VjaGVkX2ZpbGVzID0gcmUuZmluZGFsbChzZWxm
LnRvdWNoZWRfZmlsZXNfcmVnZXhwLCBzZWxmLl9jb250ZW50cywgcmUuTVVMVElMSU5FKQpAQCAt
MTc1LDggKzE3OSwyMiBAQCBjbGFzcyBDaGFuZ2VMb2dFbnRyeShvYmplY3QpOgogICAgIGRlZiBy
ZXZpZXdlcl90ZXh0KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcmV2aWV3ZXJfdGV4dAog
CisgICAgIyBNaWdodCBiZSBOb25lLCBtaWdodCBhbHNvIG5vdCBiZSBhIFJldmlld2VyIQogICAg
IGRlZiByZXZpZXdlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jldmlld2VyICAjIE1p
Z2h0IGJlIE5vbmUsIG1pZ2h0IGFsc28gbm90IGJlIGEgUmV2aWV3ZXIhCisgICAgICAgIHJldHVy
biBzZWxmLl9yZXZpZXdlcnNbMF0gaWYgbGVuKHNlbGYuX3Jldmlld2VycykgPiAwIGVsc2UgTm9u
ZQorCisgICAgZGVmIHJldmlld2VycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jldmll
d2VycworCisgICAgZGVmIGhhc192YWxpZF9yZXZpZXdlcihzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fcmV2aWV3ZXJzX3RleHRfbGlzdDoKKyAgICAgICAgICAgIGZvciByZXZpZXdlciBpbiBzZWxm
Ll9yZXZpZXdlcnNfdGV4dF9saXN0OgorICAgICAgICAgICAgICAgIHJldmlld2VyID0gc2VsZi5f
Y29tbWl0dGVyX2xpc3QuY29tbWl0dGVyX2J5X25hbWUocmV2aWV3ZXIpCisgICAgICAgICAgICAg
ICAgaWYgcmV2aWV3ZXI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAg
IGlmIHJlLnNlYXJjaCgidW5yZXZpZXdlZCIsIHNlbGYuX2NvbnRlbnRzLCByZS5JR05PUkVDQVNF
KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAg
ZGVmIGNvbnRlbnRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fY29udGVudHMKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9jaGFuZ2Vsb2dfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwMDIzNykKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzc3LDQwICszNzcsMTUgQEAgY2xhc3MgQ2hhbmdlTG9nVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFu
Z2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZyB3
aXRoIG5vIGhlc2l0YXRpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9s
aXN0LCBbJ1NhbSBXZWluaWcnXSkKIAotICAgICAgICAjIEZvciBub3csIHdlIGxldCB1bm9mZmlj
aWFsIHJldmlld2VycyByZWNvZ25pemVkIGFzIHJldmlld2VycwotICAgICAgICByZXZpZXdlcl90
ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQo
J1Jldmlld2VkIGJ5IFNhbSBXZWluaWcsIEFuZGVycyBDYXJsc3NvbiwgYW5kICh1bm9mZmljaWFs
bHkpIEFkYW0gQmFydGguJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlz
dCwgWydTYW0gV2VpbmlnJywgJ0FuZGVycyBDYXJsc3NvbicsICdBZGFtIEJhcnRoJ10pCi0KLSAg
ICAgICAgIyBJdCdzIG9rYXkgdG8gaGF2ZSAnYnVpbGQgZml4JyBhbmQgJ290aGVycycsIGV0Yy4u
LiBhcyBhIHJldmlld2VyIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMgYmVjYXVzZSBmdXp6eS1tYXRj
aCB3b3VsZCByZWplY3QgaXQKLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9
IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YsIGJ1aWxkIGZpeCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2Vy
X2xpc3QsIFsnRGltaXRyaSBHbGF6a292JywgJ2J1aWxkIGZpeCddKQotCi0gICAgICAgIHJldmll
d2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJf
dGV4dCgnUmV2aWV3ZWQgYnkgQlVJTEQgRklYJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
cmV2aWV3ZXJfbGlzdCwgWydCVUlMRCBGSVgnXSkKLQotICAgICAgICByZXZpZXdlcl90ZXh0LCBy
ZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmll
d2VkIGJ5IE1hYyBidWlsZCBmaXgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdl
cl9saXN0LCBbJ01hYyBidWlsZCBmaXgnXSkKLQotICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZp
ZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2Vk
IGJ5IERhcmluIEFkbGVyLCBEYW4gQmVybnN0ZWluLCBBZGVsZSBQZXRlcnNvbiwgYW5kIG90aGVy
cy4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl90ZXh0LCAnRGFyaW4gQWRs
ZXIsIERhbiBCZXJuc3RlaW4sIEFkZWxlIFBldGVyc29uLCBhbmQgb3RoZXJzJykKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydEYXJpbiBBZGxlcicsICdEYW4gQmVy
bnN0ZWluJywgJ0FkZWxlIFBldGVyc29uJywgJ290aGVycyddKQotCi0gICAgICAgIHJldmlld2Vy
X3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4
dCgnUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MgKGFuZCBvdGhlcnMpJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydHZW9yZ2UgU3RhaWtvcycsICdvdGhlcnMn
XSkKLQogICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50
cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IE9saXZlciBIdW50LCBva2F5ZWQg
YnkgRGFyaW4gQWRsZXIuJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlz
dCwgWydPbGl2ZXIgSHVudCddKQogCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xp
c3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgTWFy
ayBSb3dlLCBidXQgRGFuIEJlcm5zdGVpbiBhbHNvIHJldmlld2VkIGFuZCBhc2tlZCB0aG91Z2h0
ZnVsIHF1ZXN0aW9ucy4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0
LCBbJ01hcmsgUm93ZScsICdidXQgRGFuIEJlcm5zdGVpbiBhbHNvIHJldmlld2VkJywgJ2Fza2Vk
IHRob3VnaHRmdWwgcXVlc3Rpb25zJ10pCi0KLSAgICAgICAgIyBJdCdzIG9rYXkgdG8gaGF2ZSAi
IGluIiBhbmQgImJ5ICIsIGV0Yy4uLiBpbiB0aGUgZm9sbG93aW5nIGNhc2VzIGJlY2F1c2Ugd2Un
cmUgZ29pbmcgdG8gZnV6enktbWF0Y2ggdGhlbSBsYXRlcgotICAgICAgICByZXZpZXdlcl90ZXh0
LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jl
dmlld2VkIGJ5IERhcmluIEFkbGVyIGluIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDc3MzY+LicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3Rl
eHQsICdEYXJpbiBBZGxlciBpbicpCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xp
c3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC46dycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsICdB
ZGFtIEJhcnRoLjp3JykKICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENo
YW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEYXJpbiBBZGxl
cikuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfdGV4dCwgJ0RhcmluIEFk
bGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydEYXJpbiBB
ZGxlciddKQorCisgICAgICAgICMgRm9yIG5vdywgd2UgbGV0IHVub2ZmaWNpYWwgcmV2aWV3ZXJz
IHJlY29nbml6ZWQgYXMgcmV2aWV3ZXJzCisgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2Vy
X2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkg
U2FtIFdlaW5pZywgQW5kZXJzIENhcmxzc29uLCBhbmQgKHVub2ZmaWNpYWxseSkgQWRhbSBCYXJ0
aC4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ1NhbSBXZWlu
aWcnLCAnQW5kZXJzIENhcmxzc29uJywgJ0FkYW0gQmFydGgnXSkKIAogICAgICAgICByZXZpZXdl
cl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3Rl
eHQoJ1Jldmlld2VkIGJ5IE5PQk9EWS4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZp
ZXdlcl90ZXh0LCBOb25lKQpAQCAtNDMzLDYgKzQwOCw1OSBAQCBjbGFzcyBDaGFuZ2VMb2dUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlz
dCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBub2Jv
ZHkgKHRyaXZpYWwgZm9sbG93IHVwIGZpeCksIEpvc2VwaCBQZWNvcmFybyBMR1RNLWVkLicpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsIE5vbmUpCiAKKyAgICBkZWYg
X2VudHJ5X3dpdGhfcmV2aWV3ZXIoc2VsZiwgcmV2aWV3ZXJfbGluZSk6CisgICAgICAgIHJldHVy
biBDaGFuZ2VMb2dFbnRyeSgnJycyMDA5LTA4LTE5ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0
Lm9yZz4KKworICAgICAgICAgICAgUkVWSUVXX0xJTkUKKworICAgICAgICAgICAgKiBTY3JpcHRz
L2J1Z3ppbGxhLXRvb2w6CisnJycucmVwbGFjZSgiUkVWSUVXX0xJTkUiLCByZXZpZXdlcl9saW5l
KSkKKworICAgIGRlZiBfY29udHJpYnV0b3JzKHNlbGYsIG5hbWVzKToKKyAgICAgICAgcmV0dXJu
IFtDb21taXR0ZXJMaXN0KCkuY29udHJpYnV0b3JfYnlfbmFtZShuYW1lKSBmb3IgbmFtZSBpbiBu
YW1lc10KKworICAgIGRlZiB0ZXN0X2Z1enp5X3Jldmlld2VyX21hdGNoKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgn
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LCBidWlsZCBmaXgnKVsxXSwgWydEaW1pdHJpIEds
YXprb3YnLCAnYnVpbGQgZml4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2Vu
dHJ5X3dpdGhfcmV2aWV3ZXIoJ1Jldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdiwgYnVpbGQgZml4
JykucmV2aWV3ZXJzKCksIHNlbGYuX2NvbnRyaWJ1dG9ycyhbJ0RpbWl0cmkgR2xhemtvdiddKSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3
ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgQlVJTEQgRklYJylbMV0sIFsnQlVJTEQgRklYJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoJ1Jldmlld2Vk
IGJ5IEJVSUxEIEZJWCcpLnJldmlld2VycygpLCBbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgTWFj
IGJ1aWxkIGZpeCcpWzFdLCBbJ01hYyBidWlsZCBmaXgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgTWFjIGJ1aWxkIGZp
eCcpLnJldmlld2VycygpLCBbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhDaGFuZ2VM
b2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIsIERh
biBCZXJuc3RlaW4sIEFkZWxlIFBldGVyc29uLCBhbmQgb3RoZXJzLicpWzFdLAorICAgICAgICAg
ICAgWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0FkZWxlIFBldGVyc29uJywgJ290
aGVycyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLl9lbnRyeV93aXRoX3Jldmll
d2VyKCdSZXZpZXdlZCBieSBEYXJpbiBBZGxlciwgRGFuIEJlcm5zdGVpbiwgQWRlbGUgUGV0ZXJz
b24sIGFuZCBvdGhlcnMuJykucmV2aWV3ZXJzKCksCisgICAgICAgICAgICBzZWxmLl9jb250cmli
dXRvcnMoWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0FkZWxlIFBldGVyc29uJ10p
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZp
ZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcyAoYW5kIG90aGVycyknKVsxXSwg
WydHZW9yZ2UgU3RhaWtvcycsICdvdGhlcnMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MgKGFu
ZCBvdGhlcnMpJykucmV2aWV3ZXJzKCksIHNlbGYuX2NvbnRyaWJ1dG9ycyhbJ0dlb3JnZSBTdGFp
a29zJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJz
ZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBNYXJrIFJvd2UsIGJ1dCBEYW4gQmVybnN0ZWlu
IGFsc28gcmV2aWV3ZWQgYW5kIGFza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zLicpWzFdLAorICAg
ICAgICAgICAgWydNYXJrIFJvd2UnLCAnYnV0IERhbiBCZXJuc3RlaW4gYWxzbyByZXZpZXdlZCcs
ICdhc2tlZCB0aG91Z2h0ZnVsIHF1ZXN0aW9ucyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKCdSZXZpZXdlZCBieSBNYXJrIFJvd2UsIGJ1dCBE
YW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQgYW5kIGFza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25z
LicpLnJldmlld2VycygpLAorICAgICAgICAgICAgc2VsZi5fY29udHJpYnV0b3JzKFsnTWFyayBS
b3dlJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKENoYW5nZUxvZ0VudHJ5Ll9wYXJz
ZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBpbiA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzM2Pi4nKVsxXSwKKyAgICAgICAgICAgIFsn
RGFyaW4gQWRsZXIgaW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlf
d2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgaW4gPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzczNj4uJykucmV2aWV3ZXJzKCksCisgICAgICAg
ICAgICBzZWxmLl9jb250cmlidXRvcnMoWydEYXJpbiBBZGxlciddKSkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC46dycpWzFdLCBbJ0FkYW0gQmFydGguOncnXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcignUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC46dycpLnJldmlld2VycygpLCBzZWxmLl9jb250cmlidXRvcnMoWydBZGFtIEJhcnRo
J10pKQorCisgICAgZGVmIHRlc3RfaGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoIlJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLiIpLmhhc192YWxpZF9yZXZpZXdlcigpLCBUcnVlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIoIlJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpICAjIE5vdCBwaWNreSBhYm91dCB0aGUg
Jy4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigi
UmV2aWV3ZWQgYnkgRXJpYy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUmV2aWV3ZWQgYnkg
RXJpYyBDIFNlaWRlbC4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyLXN0YW1wZWQg
YnkgRXJpYy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyLXN0YW1wZWQgYnkgRXJp
YyBTZWlkZWwuIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyIHN0YW1wZWQgYnkgRXJp
Yy4iKS5oYXNfdmFsaWRfcmV2aWV3ZXIoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiUnViYmVyIHN0YW1wZWQgYnkgRXJpYyBTZWlk
ZWwuIikuaGFzX3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5fZW50cnlfd2l0aF9yZXZpZXdlcigiVW5yZXZpZXdlZCBidWlsZCBmaXguIikuaGFz
X3ZhbGlkX3Jldmlld2VyKCksIFRydWUpCisKICAgICBkZWYgdGVzdF9sYXRlc3RfZW50cnlfcGFy
c2Uoc2VsZik6CiAgICAgICAgIGNoYW5nZWxvZ19jb250ZW50cyA9IHUiJXNcbiVzIiAlIChzZWxm
Ll9leGFtcGxlX2VudHJ5LCBzZWxmLl9leGFtcGxlX2NoYW5nZWxvZykKICAgICAgICAgY2hhbmdl
bG9nX2ZpbGUgPSBTdHJpbmdJTyhjaGFuZ2Vsb2dfY29udGVudHMpCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVycy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVycy5weQkocmV2aXNp
b24gMTAwMjM3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICMKICMgV2ViS2l0J3Mg
UHl0aG9uIG1vZHVsZSBmb3IgY29tbWl0dGVyIGFuZCByZXZpZXdlciB2YWxpZGF0aW9uLgogCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5lZGl0X2Rpc3RhbmNlIGltcG9ydCBlZGl0X2Rpc3RhbmNlCiAK
IGNsYXNzIEFjY291bnQob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZW1h
aWxfb3JfZW1haWxzLCBpcmNfbmlja25hbWVfb3Jfbmlja25hbWVzPU5vbmUpOgpAQCAtNDQ5LDcg
KzQ1MCw2IEBAIHJldmlld2Vyc19saXN0ID0gWwogICAgIFJldmlld2VyKCJab2x0YW4gSGVyY3pl
ZyIsIFsiemhlcmN6ZWdAd2Via2l0Lm9yZyIsICJ6aGVyY3plZ0BpbmYudS1zemVnZWQuaHUiXSwg
InpoZXJjemVnIiksCiBdCiAKLQogY2xhc3MgQ29tbWl0dGVyTGlzdChvYmplY3QpOgogCiAgICAg
IyBDb21taXR0ZXJzIGFuZCByZXZpZXdlcnMgYXJlIHBhc3NlZCBpbiB0byBhbGxvdyBlYXN5IHRl
c3RpbmcKQEAgLTUyOCw2ICs1MjgsMzkgQEAgY2xhc3MgQ29tbWl0dGVyTGlzdChvYmplY3QpOgog
ICAgIGRlZiBjb250cmlidXRvcnNfYnlfc2VhcmNoX3N0cmluZyhzZWxmLCBzdHJpbmcpOgogICAg
ICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBjb250cmlidXRvcjogY29udHJpYnV0b3IuY29udGFp
bnNfc3RyaW5nKHN0cmluZyksIHNlbGYuY29udHJpYnV0b3JzKCkpCiAKKyAgICBkZWYgY29udHJp
YnV0b3JzX2J5X2Z1enp5X21hdGNoKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHN0cmluZyA9IHN0
cmluZy5sb3dlcigpCisKKyAgICAgICAgIyBGaXJzdCBwYXRoLCBvcHRpbWl0aWNhbGx5IG1hdGNo
IGZvciBmdWxsbmFtZSwgZW1haWwgYW5kIGlyY19uaWNrbmFtZXMKKyAgICAgICAgZm9yIGNvbnRy
aWJ1dG9yIGluIHNlbGYuY29udHJpYnV0b3JzKCk6CisgICAgICAgICAgICBpZiBzdHJpbmcgaW4g
W2VtYWlsLmxvd2VyKCkgZm9yIGVtYWlsIGluIGNvbnRyaWJ1dG9yLmVtYWlsc10gb3Igc3RyaW5n
ID09IGNvbnRyaWJ1dG9yLmZ1bGxfbmFtZS5sb3dlcigpOgorICAgICAgICAgICAgICAgIHJldHVy
biBbY29udHJpYnV0b3JdLCAwCisgICAgICAgICAgICBpZiBjb250cmlidXRvci5pcmNfbmlja25h
bWVzOgorICAgICAgICAgICAgICAgIG5pY2tuYW1lc19pbl9sb3dlcmNhc2UgPSBbbmlja25hbWUu
bG93ZXIoKSBmb3Igbmlja25hbWUgaW4gY29udHJpYnV0b3IuaXJjX25pY2tuYW1lc10KKyAgICAg
ICAgICAgICAgICBpZiBzdHJpbmcgaW4gbmlja25hbWVzX2luX2xvd2VyY2FzZToKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFtjb250cmlidXRvcl0sIDAKKworICAgICAgICAjIFNlY29uZCBw
YXRoLCBtdWNoIHNsb3dlciBzZWFyY2ggdXNpbmcgZWRpdC1kaXN0YW5jZQorICAgICAgICBjb250
cmlidXRvcldpdGhNaW5EaXN0YW5jZSA9IFtdCisgICAgICAgIG1pbkRpc3RhbmNlID0gbGVuKHN0
cmluZykgLyAyIC0gMQorICAgICAgICBmb3IgY29udHJpYnV0b3IgaW4gc2VsZi5jb250cmlidXRv
cnMoKToKKyAgICAgICAgICAgIGZ1bGxfbmFtZV9pbl9sb3dlcmNhc2UgPSBjb250cmlidXRvci5m
dWxsX25hbWUubG93ZXIoKQorICAgICAgICAgICAgdG9rZW5zID0gW2Z1bGxfbmFtZV9pbl9sb3dl
cmNhc2VdICsgZnVsbF9uYW1lX2luX2xvd2VyY2FzZS5zcGxpdCgpCisgICAgICAgICAgICBpZiBj
b250cmlidXRvci5pcmNfbmlja25hbWVzOgorICAgICAgICAgICAgICAgIHRva2VucyArPSBbbmlj
a25hbWUubG93ZXIoKSBmb3Igbmlja25hbWUgaW4gY29udHJpYnV0b3IuaXJjX25pY2tuYW1lcyBp
ZiBsZW4obmlja25hbWUpID4gNV0KKworICAgICAgICAgICAgdG9rZW5zID0gW2VkaXRfZGlzdGFu
Y2UodG9rZW4sIHN0cmluZykgZm9yIHRva2VuIGluIHRva2VucyBpZiBhYnMobGVuKHRva2VuKSAt
IGxlbihzdHJpbmcpKSA8PSBtaW5EaXN0YW5jZV0KKyAgICAgICAgICAgIGlmIGxlbih0b2tlbnMp
OgorICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gbWluKHRva2VucykKKyAgICAgICAgICAgICAg
ICBpZiBkaXN0YW5jZSA9PSBtaW5EaXN0YW5jZToKKyAgICAgICAgICAgICAgICAgICAgY29udHJp
YnV0b3JXaXRoTWluRGlzdGFuY2UuYXBwZW5kKGNvbnRyaWJ1dG9yKQorICAgICAgICAgICAgICAg
IGVsaWYgZGlzdGFuY2UgPCBtaW5EaXN0YW5jZToKKyAgICAgICAgICAgICAgICAgICAgY29udHJp
YnV0b3JXaXRoTWluRGlzdGFuY2UgPSBbY29udHJpYnV0b3JdCisgICAgICAgICAgICAgICAgICAg
IG1pbkRpc3RhbmNlID0gZGlzdGFuY2UKKyAgICAgICAgaWYgbm90IGxlbihjb250cmlidXRvcldp
dGhNaW5EaXN0YW5jZSk6CisgICAgICAgICAgICByZXR1cm4gW10sIGxlbihzdHJpbmcpCisgICAg
ICAgIHJldHVybiBjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSwgbWluRGlzdGFuY2UKKwogICAg
IGRlZiBhY2NvdW50X2J5X2xvZ2luKHNlbGYsIGxvZ2luKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X2xvZ2luX3RvX2FjY291bnRfbWFwKCkuZ2V0KGxvZ2luLmxvd2VyKCkpCiAKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0
ZXJzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMDAyMzcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jb25maWcvY29tbWl0dGVyc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtOTEsMyArOTEsMzUgQEAgY2xhc3MgQ29tbWl0dGVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19i
eV9zZWFyY2hfc3RyaW5nKCd0ZXN0JyksIFtjb250cmlidXRvciwgY29tbWl0dGVyLCByZXZpZXdl
cl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3Jz
X2J5X3NlYXJjaF9zdHJpbmcoJ3JhZCcpLCBbcmV2aWV3ZXJdKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9zZWFyY2hfc3RyaW5nKCdUd28n
KSwgW3Jldmlld2VyXSkKKworICAgIGRlZiBfYXNzZXJ0X2Z1enpfbWF0Y2goc2VsZiwgdGV4dCwg
bmFtZV9vZl9leHBlY3RlZF9jb250cmlidXRvciwgZXhwZWN0ZWRfZGlzdGFuY2UpOgorICAgICAg
ICBjb21taXR0ZXJzID0gQ29tbWl0dGVyTGlzdCgpCisgICAgICAgIGV4cGVjdGVkX2NvbnRyaWJ1
dG9ycyA9IFtjb21taXR0ZXJzLmNvbnRyaWJ1dG9yX2J5X25hbWUobmFtZV9vZl9leHBlY3RlZF9j
b250cmlidXRvcildIGlmIG5hbWVfb2ZfZXhwZWN0ZWRfY29udHJpYnV0b3IgZWxzZSBbXQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21h
dGNoKHRleHQpLCAoZXhwZWN0ZWRfY29udHJpYnV0b3JzLCBleHBlY3RlZF9kaXN0YW5jZSkpCisK
KyAgICBkZWYgdGVzdF9jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goc2VsZik6CisgICAgICAg
IHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdHZW9mZiBHYXJlbicsICdHZW9mZnJleSBHYXJlbics
IDMpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdLZW5uZXRoIENocmlzdGlhbnNl
bicsICdLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbicsIDYpCisgICAgICAgIHNlbGYuX2Fzc2Vy
dF9mdXp6X21hdGNoKCdLZW4gUnVzc2VsbCcsICdLZW5uZXRoIFJ1c3NlbGwnLCA0KQorICAgICAg
ICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnRGF2ZSBIeWF0dCcsICdEYXZpZCBIeWF0dCcsIDIp
CisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdEYXZlIEtpbHplcicsICdEYXZpZCBL
aWx6ZXInLCAyKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnQW50dGkgInByaW50
ZiIgS29pdmlzdG8nLCAnQW50dGkgS29pdmlzdG8nLCA5KQorICAgICAgICBzZWxmLl9hc3NlcnRf
ZnV6el9tYXRjaCgnU2FtbXkgV2VpbmlnJywgJ1NhbSBXZWluaWcnLCAyKQorICAgICAgICBzZWxm
Ll9hc3NlcnRfZnV6el9tYXRjaCgnQW5kcmVzIEtsaW5nJywgJ0FuZHJlYXMgS2xpbmcnLCAxKQor
ICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnRGFyaW4gQWRsZXJcJycsICdEYXJpbiBB
ZGxlcicsIDEpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdKb2UgUGVjb3Jhcm8n
LCAnSm9zZXBoIFBlY29yYXJvJywgMykKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2go
J0RyIERhbiBCZXJuc3RlaW4nLCAnRGFuIEJlcm5zdGVpbicsIDMpCisgICAgICAgIHNlbGYuX2Fz
c2VydF9mdXp6X21hdGNoKCdNaXR6cGV0dGVsJywgJ0RhbiBCZXJuc3RlaW4nLCAwKQorICAgICAg
ICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgncm5pd2FAd2Via2l0Lm9yZycsICdSeW9zdWtlIE5p
d2EnLCAwKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnQXAnLCAnQWxleGV5IFBy
b3NrdXJ5YWtvdicsIDApCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdTYW0nLCAn
U2FtIFdlaW5pZycsIDApCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdkYXJpbics
ICdEYXJpbiBBZGxlcicsIDApCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdoYXJy
aXNvbicsICdEYXZpZCBIYXJyaXNvbicsIDApCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21h
dGNoKCdvdGhlcnMnLCBOb25lLCA2KQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgn
QlVJTEQgRklYJywgTm9uZSwgOSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ2J1
dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQnLCBOb25lLCAzMSkKKyAgICAgICAgc2VsZi5f
YXNzZXJ0X2Z1enpfbWF0Y2goJ2Fza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25zJywgTm9uZSwgMjYp
CisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdidWlsZCBmaXggb2YgbWFjJywgTm9u
ZSwgMTYpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdhIHNwZWxsIGNoZWNrZXIn
LCBOb25lLCAxNSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ25vYm9keSwgYnVp
bGQgZml4JywgTm9uZSwgMTcpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdOT0JP
RFkgKGNocm9taXVtIGJ1aWxkIGZpeCknLCBOb25lLCAyNykKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJldmlld2VyLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJldmlld2VyLnB5CShyZXZp
c2lvbiAxMDAyMzcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRh
dGVyZXZpZXdlci5weQkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgY2xhc3MgVmFs
aWRhdGVSZXZpZXdlcihBYnN0cmFjdFN0ZXApOgogICAgICAgICAgICAgT3B0aW9ucy5ub25faW50
ZXJhY3RpdmUsCiAgICAgICAgIF0KIAotICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5
IG1vdmUgb250byBDaGFuZ2VMb2dFbnRyeQotICAgIGRlZiBfaGFzX3ZhbGlkX3Jldmlld2VyKHNl
bGYsIGNoYW5nZWxvZ19lbnRyeSk6Ci0gICAgICAgIGlmIGNoYW5nZWxvZ19lbnRyeS5yZXZpZXdl
cigpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgaWYgcmUuc2VhcmNoKCJ1bnJl
dmlld2VkIiwgY2hhbmdlbG9nX2VudHJ5LmNvbnRlbnRzKCksIHJlLklHTk9SRUNBU0UpOgotICAg
ICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgaWYgcmUuc2VhcmNoKCJydWJiZXJbIC1dc3Rh
bXAiLCBjaGFuZ2Vsb2dfZW50cnkuY29udGVudHMoKSwgcmUuSUdOT1JFQ0FTRSk6Ci0gICAgICAg
ICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQogICAgIGRlZiBydW4oc2Vs
Ziwgc3RhdGUpOgogICAgICAgICAjIEZJWE1FOiBGb3Igbm93IHdlIGRpc2FibGUgdGhpcyBjaGVj
ayB3aGVuIGEgdXNlciBpcyBkcml2aW5nIHRoZSBzY3JpcHQKICAgICAgICAgIyB0aGlzIGNoZWNr
IGlzIHRvbyBkcmFjb25pYW4gKGFuZCB0b28gcG9vcmx5IHRlc3RlZCkgdG8gZm9pc3QgdXBvbiB1
c2Vycy4KQEAgLTYwLDcgKzUwLDcgQEAgY2xhc3MgVmFsaWRhdGVSZXZpZXdlcihBYnN0cmFjdFN0
ZXApOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiBz
ZWxmLmNhY2hlZF9sb29rdXAoc3RhdGUsICJjaGFuZ2Vsb2dzIik6CiAgICAgICAgICAgICBjaGFu
Z2Vsb2dfZW50cnkgPSBDaGFuZ2VMb2coY2hhbmdlbG9nX3BhdGgpLmxhdGVzdF9lbnRyeSgpCi0g
ICAgICAgICAgICBpZiBzZWxmLl9oYXNfdmFsaWRfcmV2aWV3ZXIoY2hhbmdlbG9nX2VudHJ5KToK
KyAgICAgICAgICAgIGlmIGNoYW5nZWxvZ19lbnRyeS5oYXNfdmFsaWRfcmV2aWV3ZXIoKToKICAg
ICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmV2aWV3ZXJfdGV4dCA9IGNoYW5n
ZWxvZ19lbnRyeS5yZXZpZXdlcl90ZXh0KCkKICAgICAgICAgICAgIGlmIHJldmlld2VyX3RleHQ6
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdl
cl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
c3RlcHMvdmFsaWRhdGVyZXZpZXdlcl91bml0dGVzdC5weQkocmV2aXNpb24gMTAwMjM3KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWlt
cG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cg
aW1wb3J0IENoYW5nZUxvZ0VudHJ5Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0
Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29s
IGltcG9ydCBNb2NrT3B0aW9ucywgTW9ja1Rvb2wKLWZyb20gd2Via2l0cHkudG9vbC5zdGVwcy52
YWxpZGF0ZXJldmlld2VyIGltcG9ydCBWYWxpZGF0ZVJldmlld2VyCi0KLWNsYXNzIFZhbGlkYXRl
UmV2aWV3ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBfYm9pbGVycGxhdGVfZW50cnkg
PSAnJycyMDA5LTA4LTE5ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KLQotICAgICAg
ICBSRVZJRVdfTElORQotCi0gICAgICAgICogU2NyaXB0cy9idWd6aWxsYS10b29sOgotJycnCi0K
LSAgICBkZWYgX3Rlc3RfcmV2aWV3X3RleHQoc2VsZiwgc3RlcCwgdGV4dCwgZXhwZWN0ZWQpOgot
ICAgICAgICBjb250ZW50cyA9IHNlbGYuX2JvaWxlcnBsYXRlX2VudHJ5LnJlcGxhY2UoIlJFVklF
V19MSU5FIiwgdGV4dCkKLSAgICAgICAgZW50cnkgPSBDaGFuZ2VMb2dFbnRyeShjb250ZW50cykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGVwLl9oYXNfdmFsaWRfcmV2aWV3ZXIoZW50cnkp
LCBleHBlY3RlZCkKLQotICAgIGRlZiB0ZXN0X2hhc192YWxpZF9yZXZpZXdlcihzZWxmKToKLSAg
ICAgICAgc3RlcCA9IFZhbGlkYXRlUmV2aWV3ZXIoTW9ja1Rvb2woKSwgTW9ja09wdGlvbnMoKSkK
LSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuIiwgVHJ1ZSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwiLCBUcnVlKSAjIE5vdCBwaWNreSBhYm91dCB0aGUgJy4nCi0g
ICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQoc3RlcCwgIlJldmlld2VkIGJ5IEVyaWMuIiwg
RmFsc2UpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQoc3RlcCwgIlJldmlld2VkIGJ5
IEVyaWMgQyBTZWlkZWwuIiwgRmFsc2UpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQo
c3RlcCwgIlJ1YmJlci1zdGFtcGVkIGJ5IEVyaWMuIiwgVHJ1ZSkKLSAgICAgICAgc2VsZi5fdGVz
dF9yZXZpZXdfdGV4dChzdGVwLCAiUnViYmVyIHN0YW1wZWQgYnkgRXJpYy4iLCBUcnVlKQotICAg
ICAgICBzZWxmLl90ZXN0X3Jldmlld190ZXh0KHN0ZXAsICJVbnJldmlld2VkIGJ1aWxkIGZpeC4i
LCBUcnVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115269</attachid>
            <date>2011-11-15 16:00:38 -0800</date>
            <delta_ts>2011-11-15 16:12:10 -0800</delta_ts>
            <desc>Fixed per Eric&apos;s comments</desc>
            <filename>bug-72351-20111115160037.patch</filename>
            <type>text/plain</type>
            <size>21997</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDIzNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDExLTExLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEltcGxlbWVudCBlZGl0LWRpc3RhbmNlIGJhc2VkIHJldmlld2VyIHJlY29nbml0
aW9uIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgYW4gYWxnb3JpdGhtIHRvIHJlY29nbml6ZSByZXZpZXdlcidzIG5hbWUg
YmFzZWQgb24gaXRzIGVkaXQgZGlzdGFuY2UgKG9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGl0
cyBMZXZlbnNodGVpbiBkaXN0YW5jZSkgdG8gZWFjaCByZXZpZXdlcidzIGZ1bGwgbmFtZSwgZmly
c3QsIGxhc3QgYW5kIG1pZGRsZSBuYW1lcywgYW5kIElSQyBuaWNrbmFtZXMuCisgICAgICAgIEZ1
cnRoZXJtb3JlLCB3ZSBjYXAgdGhlIG1heGltdW0gZWRpdCBkaXN0YW5jZSBhdCBsZW4obmFtZSkg
LSAxIHRvIGF2b2lkIG1hdGNoaW5nIGEgYm9ndXMgc3RyaW5nIGxpa2UKKyAgICAgICAgImJ1aWxk
IGZpeCIgdG8gYSByZXZpZXdlcidzIG5hbWUgKGUuZy4gd2l0aCB3aXRoIGVkaXQgZGlzdGFuY2Ug
OSkuCisKKyAgICAgICAgVGhpcyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgaW4gQ29tbWl0dGVy
TGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2guIFRoZSBmdW5jdGlvbiB0byBjb21wdXRl
CisgICAgICAgIHRoZSBlZGl0IGRpc3RhbmNlIGlzIGltcGxlbWVudGVkIGluIGVkaXRfZGlzdGFu
Y2UucHkuCisKKyAgICAgICAgQWxzbyBtb3ZlZCBfaGFzX3ZhbGlkX3Jldmlld2VyIGZyb20gVmFs
aWRhdGVSZXZpZXdlciB0byBDaGFuZ2VMb2dFbnRyeSBiZWNhdXNlIHdlIGNhbiBubyBsb25nZXIg
cmVseQorICAgICAgICBvbiB0aGUgcHJlc2VuY2Ugb2YgQ2hhbmdlTG9nRW50cnkucmV2aWV3ZXIo
KSB0byB2ZXJpZnkgdGhhdCByZXZpZXdlciBzdHJpbmcgaXMgbmljZWx5IGZvcm1hdHRlZC4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dF9kaXN0YW5jZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
ZWRpdF9kaXN0YW5jZV91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQu
CisKIDIwMTEtMTEtMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgSW1wcm92ZSBDaGFuZ2VMb2dFbnRyeSdzIHJldmlld2VyIHBhcnNpbmcgYWxnb3JpdGhtIHBh
cnQgMgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdl
bG9nLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L2NoYW5nZWxvZy5weQkocmV2aXNpb24gMTAwMjM3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYs
NiArMTQ2LDEyIEBAIGNsYXNzIENoYW5nZUxvZ0VudHJ5KG9iamVjdCk6CiAKICAgICAgICAgcmV0
dXJuIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QKIAorICAgIGRlZiBfZnV6el9tYXRjaF9y
ZXZpZXdlcnMoc2VsZiwgcmV2aWV3ZXJzX3RleHRfbGlzdCk6CisgICAgICAgIGlmIG5vdCByZXZp
ZXdlcnNfdGV4dF9saXN0OgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGxpc3Rfb2Zf
cmV2aWV3ZXJzID0gW3NlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9mdXp6eV9t
YXRjaChyZXZpZXdlcilbMF0gZm9yIHJldmlld2VyIGluIHJldmlld2Vyc190ZXh0X2xpc3RdCisg
ICAgICAgIHJldHVybiBbcmV2aWV3ZXJzWzBdIGZvciByZXZpZXdlcnMgaW4gbGlzdF9vZl9yZXZp
ZXdlcnMgaWYgbGVuKHJldmlld2VycykgPT0gMV0KKwogICAgIGRlZiBfcGFyc2VfZW50cnkoc2Vs
Zik6CiAgICAgICAgIG1hdGNoID0gcmUubWF0Y2goc2VsZi5kYXRlX2xpbmVfcmVnZXhwLCBzZWxm
Ll9jb250ZW50cywgcmUuTVVMVElMSU5FKQogICAgICAgICBpZiBub3QgbWF0Y2g6CkBAIC0xNTUs
OCArMTYxLDggQEAgY2xhc3MgQ2hhbmdlTG9nRW50cnkob2JqZWN0KToKICAgICAgICAgc2VsZi5f
YXV0aG9yX25hbWUgPSBtYXRjaC5ncm91cCgibmFtZSIpIGlmIG1hdGNoIGVsc2UgTm9uZQogICAg
ICAgICBzZWxmLl9hdXRob3JfZW1haWwgPSBtYXRjaC5ncm91cCgiZW1haWwiKSBpZiBtYXRjaCBl
bHNlIE5vbmUKIAotICAgICAgICBzZWxmLl9yZXZpZXdlcl90ZXh0LCBzZWxmLl9yZXZpZXdlcl9s
aXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoc2VsZi5fY29udGVudHMp
Ci0gICAgICAgIHNlbGYuX3Jldmlld2VyID0gc2VsZi5fY29tbWl0dGVyX2xpc3QuY29tbWl0dGVy
X2J5X25hbWUoc2VsZi5fcmV2aWV3ZXJfbGlzdFswXSkgaWYgc2VsZi5fcmV2aWV3ZXJfbGlzdCBl
bHNlIE5vbmUKKyAgICAgICAgc2VsZi5fcmV2aWV3ZXJfdGV4dCwgc2VsZi5fcmV2aWV3ZXJzX3Rl
eHRfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KHNlbGYuX2NvbnRl
bnRzKQorICAgICAgICBzZWxmLl9yZXZpZXdlcnMgPSBzZWxmLl9mdXp6X21hdGNoX3Jldmlld2Vy
cyhzZWxmLl9yZXZpZXdlcnNfdGV4dF9saXN0KQogICAgICAgICBzZWxmLl9hdXRob3IgPSBzZWxm
Ll9jb21taXR0ZXJfbGlzdC5jb250cmlidXRvcl9ieV9lbWFpbChzZWxmLl9hdXRob3JfZW1haWwp
IG9yIHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yX2J5X25hbWUoc2VsZi5fYXV0aG9y
X25hbWUpCiAKICAgICAgICAgc2VsZi5fdG91Y2hlZF9maWxlcyA9IHJlLmZpbmRhbGwoc2VsZi50
b3VjaGVkX2ZpbGVzX3JlZ2V4cCwgc2VsZi5fY29udGVudHMsIHJlLk1VTFRJTElORSkKQEAgLTE3
NSw4ICsxODEsMjIgQEAgY2xhc3MgQ2hhbmdlTG9nRW50cnkob2JqZWN0KToKICAgICBkZWYgcmV2
aWV3ZXJfdGV4dChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jldmlld2VyX3RleHQKIAor
ICAgICMgTWlnaHQgYmUgTm9uZSwgbWlnaHQgYWxzbyBub3QgYmUgYSBSZXZpZXdlciEKICAgICBk
ZWYgcmV2aWV3ZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZXZpZXdlciAgIyBNaWdo
dCBiZSBOb25lLCBtaWdodCBhbHNvIG5vdCBiZSBhIFJldmlld2VyIQorICAgICAgICByZXR1cm4g
c2VsZi5fcmV2aWV3ZXJzWzBdIGlmIGxlbihzZWxmLl9yZXZpZXdlcnMpID4gMCBlbHNlIE5vbmUK
KworICAgIGRlZiByZXZpZXdlcnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXZpZXdl
cnMKKworICAgIGRlZiBoYXNfdmFsaWRfcmV2aWV3ZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYu
X3Jldmlld2Vyc190ZXh0X2xpc3Q6CisgICAgICAgICAgICBmb3IgcmV2aWV3ZXIgaW4gc2VsZi5f
cmV2aWV3ZXJzX3RleHRfbGlzdDoKKyAgICAgICAgICAgICAgICByZXZpZXdlciA9IHNlbGYuX2Nv
bW1pdHRlcl9saXN0LmNvbW1pdHRlcl9ieV9uYW1lKHJldmlld2VyKQorICAgICAgICAgICAgICAg
IGlmIHJldmlld2VyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBp
ZiByZS5zZWFyY2goInVucmV2aWV3ZWQiLCBzZWxmLl9jb250ZW50cywgcmUuSUdOT1JFQ0FTRSk6
CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRl
ZiBjb250ZW50cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRzCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
Y2hhbmdlbG9nX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMDAyMzcpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM3Nyw0MCArMzc3LDE1IEBAIGNsYXNzIENoYW5nZUxvZ1Rlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdl
TG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IFNhbSBXZWluaWcgd2l0
aCBubyBoZXNpdGF0aW9uJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlz
dCwgWydTYW0gV2VpbmlnJ10pCiAKLSAgICAgICAgIyBGb3Igbm93LCB3ZSBsZXQgdW5vZmZpY2lh
bCByZXZpZXdlcnMgcmVjb2duaXplZCBhcyByZXZpZXdlcnMKLSAgICAgICAgcmV2aWV3ZXJfdGV4
dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdS
ZXZpZXdlZCBieSBTYW0gV2VpbmlnLCBBbmRlcnMgQ2FybHNzb24sIGFuZCAodW5vZmZpY2lhbGx5
KSBBZGFtIEJhcnRoLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3Qs
IFsnU2FtIFdlaW5pZycsICdBbmRlcnMgQ2FybHNzb24nLCAnQWRhbSBCYXJ0aCddKQotCi0gICAg
ICAgICMgSXQncyBva2F5IHRvIGhhdmUgJ2J1aWxkIGZpeCcgYW5kICdvdGhlcnMnLCBldGMuLi4g
YXMgYSByZXZpZXdlciBpbiB0aGUgZm9sbG93aW5nIGNhc2VzIGJlY2F1c2UgZnV6enktbWF0Y2gg
d291bGQgcmVqZWN0IGl0Ci0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBD
aGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGltaXRyaSBH
bGF6a292LCBidWlsZCBmaXgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9s
aXN0LCBbJ0RpbWl0cmkgR2xhemtvdicsICdidWlsZCBmaXgnXSkKLQotICAgICAgICByZXZpZXdl
cl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3Rl
eHQoJ1Jldmlld2VkIGJ5IEJVSUxEIEZJWCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJl
dmlld2VyX2xpc3QsIFsnQlVJTEQgRklYJ10pCi0KLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2
aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdl
ZCBieSBNYWMgYnVpbGQgZml4JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJf
bGlzdCwgWydNYWMgYnVpbGQgZml4J10pCi0KLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3
ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlciwgRGFuIEJlcm5zdGVpbiwgQWRlbGUgUGV0ZXJzb24sIGFuZCBvdGhlcnMu
JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfdGV4dCwgJ0RhcmluIEFkbGVy
LCBEYW4gQmVybnN0ZWluLCBBZGVsZSBQZXRlcnNvbiwgYW5kIG90aGVycycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnRGFyaW4gQWRsZXInLCAnRGFuIEJlcm5z
dGVpbicsICdBZGVsZSBQZXRlcnNvbicsICdvdGhlcnMnXSkKLQotICAgICAgICByZXZpZXdlcl90
ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQo
J1Jldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zIChhbmQgb3RoZXJzKScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnR2VvcmdlIFN0YWlrb3MnLCAnb3RoZXJzJ10p
Ci0KICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5
Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBPbGl2ZXIgSHVudCwgb2theWVkIGJ5
IERhcmluIEFkbGVyLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3Qs
IFsnT2xpdmVyIEh1bnQnXSkKIAotICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0
ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IE1hcmsg
Um93ZSwgYnV0IERhbiBCZXJuc3RlaW4gYWxzbyByZXZpZXdlZCBhbmQgYXNrZWQgdGhvdWdodGZ1
bCBxdWVzdGlvbnMuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwg
WydNYXJrIFJvd2UnLCAnYnV0IERhbiBCZXJuc3RlaW4gYWxzbyByZXZpZXdlZCcsICdhc2tlZCB0
aG91Z2h0ZnVsIHF1ZXN0aW9ucyddKQotCi0gICAgICAgICMgSXQncyBva2F5IHRvIGhhdmUgIiBp
biIgYW5kICJieSAiLCBldGMuLi4gaW4gdGhlIGZvbGxvd2luZyBjYXNlcyBiZWNhdXNlIHdlJ3Jl
IGdvaW5nIHRvIGZ1enp5LW1hdGNoIHRoZW0gbGF0ZXIKLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwg
cmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlciBpbiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3NzM2Pi4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl90ZXh0
LCAnRGFyaW4gQWRsZXIgaW4nKQotICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0
ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IEFkYW0g
QmFydGguOncnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl90ZXh0LCAnQWRh
bSBCYXJ0aC46dycpCiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFu
Z2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIp
LicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsICdEYXJpbiBBZGxl
cicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnRGFyaW4gQWRs
ZXInXSkKKworICAgICAgICAjIEZvciBub3csIHdlIGxldCB1bm9mZmljaWFsIHJldmlld2VycyBy
ZWNvZ25pemVkIGFzIHJldmlld2VycworICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9s
aXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IFNh
bSBXZWluaWcsIEFuZGVycyBDYXJsc3NvbiwgYW5kICh1bm9mZmljaWFsbHkpIEFkYW0gQmFydGgu
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydTYW0gV2Vpbmln
JywgJ0FuZGVycyBDYXJsc3NvbicsICdBZGFtIEJhcnRoJ10pCiAKICAgICAgICAgcmV2aWV3ZXJf
dGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0
KCdSZXZpZXdlZCBieSBOT0JPRFkuJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3
ZXJfdGV4dCwgTm9uZSkKQEAgLTQzMyw2ICs0MDgsNDggQEAgY2xhc3MgQ2hhbmdlTG9nVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3Qg
PSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgbm9ib2R5
ICh0cml2aWFsIGZvbGxvdyB1cCBmaXgpLCBKb3NlcGggUGVjb3Jhcm8gTEdUTS1lZC4nKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl90ZXh0LCBOb25lKQogCisgICAgZGVmIF9l
bnRyeV93aXRoX3Jldmlld2VyKHNlbGYsIHJldmlld2VyX2xpbmUpOgorICAgICAgICByZXR1cm4g
Q2hhbmdlTG9nRW50cnkoJycnMjAwOS0wOC0xOSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgICAgIFJFVklFV19MSU5FCisKKyAgICAgICAgICAgICogU2NyaXB0cy9i
dWd6aWxsYS10b29sOgorJycnLnJlcGxhY2UoIlJFVklFV19MSU5FIiwgcmV2aWV3ZXJfbGluZSkp
CisKKyAgICBkZWYgX2NvbnRyaWJ1dG9ycyhzZWxmLCBuYW1lcyk6CisgICAgICAgIHJldHVybiBb
Q29tbWl0dGVyTGlzdCgpLmNvbnRyaWJ1dG9yX2J5X25hbWUobmFtZSkgZm9yIG5hbWUgaW4gbmFt
ZXNdCisKKyAgICBkZWYgX2Fzc2VydF9mdXp6eV9yZXZpZXdlcl9tYXRjaChzZWxmLCByZXZpZXdl
cl90ZXh0LCBleHBlY3RlZF90ZXh0X2xpc3QsIGV4cGVjdGVkX2NvbnRyaWJ1dG9ycyk6CisgICAg
ICAgIHVudXNlZCwgcmV2aWV3ZXJfdGV4dF9saXN0ID0gQ2hhbmdlTG9nRW50cnkuX3BhcnNlX3Jl
dmlld2VyX3RleHQocmV2aWV3ZXJfdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2
aWV3ZXJfdGV4dF9saXN0LCBleHBlY3RlZF90ZXh0X2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIocmV2aWV3ZXJfdGV4dCkucmV2aWV3ZXJz
KCksIHNlbGYuX2NvbnRyaWJ1dG9ycyhleHBlY3RlZF9jb250cmlidXRvcnMpKQorCisgICAgZGVm
IHRlc3RfZnV6enlfcmV2aWV3ZXJfbWF0Y2goc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9m
dXp6eV9yZXZpZXdlcl9tYXRjaCgnUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LCBidWlsZCBm
aXgnLCBbJ0RpbWl0cmkgR2xhemtvdicsICdidWlsZCBmaXgnXSwgWydEaW1pdHJpIEdsYXprb3Yn
XSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enp5X3Jldmlld2VyX21hdGNoKCdSZXZpZXdlZCBi
eSBCVUlMRCBGSVgnLCBbJ0JVSUxEIEZJWCddLCBbXSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1
enp5X3Jldmlld2VyX21hdGNoKCdSZXZpZXdlZCBieSBNYWMgYnVpbGQgZml4JywgWydNYWMgYnVp
bGQgZml4J10sIFtdKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6enlfcmV2aWV3ZXJfbWF0Y2go
J1Jldmlld2VkIGJ5IERhcmluIEFkbGVyLCBEYW4gQmVybnN0ZWluLCBBZGVsZSBQZXRlcnNvbiwg
YW5kIG90aGVycy4nLAorICAgICAgICAgICAgWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWlu
JywgJ0FkZWxlIFBldGVyc29uJywgJ290aGVycyddLCBbJ0RhcmluIEFkbGVyJywgJ0RhbiBCZXJu
c3RlaW4nLCAnQWRlbGUgUGV0ZXJzb24nXSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enp5X3Jl
dmlld2VyX21hdGNoKCdSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcyAoYW5kIG90aGVycyknLCBb
J0dlb3JnZSBTdGFpa29zJywgJ290aGVycyddLCBbJ0dlb3JnZSBTdGFpa29zJ10pCisgICAgICAg
IHNlbGYuX2Fzc2VydF9mdXp6eV9yZXZpZXdlcl9tYXRjaCgnUmV2aWV3ZWQgYnkgTWFyayBSb3dl
LCBidXQgRGFuIEJlcm5zdGVpbiBhbHNvIHJldmlld2VkIGFuZCBhc2tlZCB0aG91Z2h0ZnVsIHF1
ZXN0aW9ucy4nLAorICAgICAgICAgICAgWydNYXJrIFJvd2UnLCAnYnV0IERhbiBCZXJuc3RlaW4g
YWxzbyByZXZpZXdlZCcsICdhc2tlZCB0aG91Z2h0ZnVsIHF1ZXN0aW9ucyddLCBbJ01hcmsgUm93
ZSddKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6enlfcmV2aWV3ZXJfbWF0Y2goJ1Jldmlld2Vk
IGJ5IERhcmluIEFkbGVyIGluIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDc3MzY+LicsIFsnRGFyaW4gQWRsZXIgaW4nXSwgWydEYXJpbiBBZGxlciddKQorICAgICAg
ICBzZWxmLl9hc3NlcnRfZnV6enlfcmV2aWV3ZXJfbWF0Y2goJ1Jldmlld2VkIGJ5IEFkYW0gQmFy
dGguOncnLCBbJ0FkYW0gQmFydGguOncnXSwgWydBZGFtIEJhcnRoJ10pCisKKyAgICBkZWYgX2Fz
c2VydF9oYXNfdmFsaWRfcmV2aWV3ZXIoc2VsZiwgcmV2aWV3ZXJfbGluZSwgZXhwZWN0ZWQpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VudHJ5X3dpdGhfcmV2aWV3ZXIocmV2aWV3
ZXJfbGluZSkuaGFzX3ZhbGlkX3Jldmlld2VyKCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rf
aGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYpOgorICAgICAgICBzZWxmLl9hc3NlcnRfaGFzX3ZhbGlk
X3Jldmlld2VyKCJSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4iLCBUcnVlKQorICAgICAgICBzZWxm
Ll9hc3NlcnRfaGFzX3ZhbGlkX3Jldmlld2VyKCJSZXZpZXdlZCBieSBFcmljIFNlaWRlbCIsIFRy
dWUpICAjIE5vdCBwaWNreSBhYm91dCB0aGUgJy4nCisgICAgICAgIHNlbGYuX2Fzc2VydF9oYXNf
dmFsaWRfcmV2aWV3ZXIoIlJldmlld2VkIGJ5IEVyaWMuIiwgRmFsc2UpCisgICAgICAgIHNlbGYu
X2Fzc2VydF9oYXNfdmFsaWRfcmV2aWV3ZXIoIlJldmlld2VkIGJ5IEVyaWMgQyBTZWlkZWwuIiwg
RmFsc2UpCisgICAgICAgIHNlbGYuX2Fzc2VydF9oYXNfdmFsaWRfcmV2aWV3ZXIoIlJ1YmJlci1z
dGFtcGVkIGJ5IEVyaWMuIiwgRmFsc2UpCisgICAgICAgIHNlbGYuX2Fzc2VydF9oYXNfdmFsaWRf
cmV2aWV3ZXIoIlJ1YmJlci1zdGFtcGVkIGJ5IEVyaWMgU2VpZGVsLiIsIFRydWUpCisgICAgICAg
IHNlbGYuX2Fzc2VydF9oYXNfdmFsaWRfcmV2aWV3ZXIoIlJ1YmJlciBzdGFtcGVkIGJ5IEVyaWMu
IiwgRmFsc2UpCisgICAgICAgIHNlbGYuX2Fzc2VydF9oYXNfdmFsaWRfcmV2aWV3ZXIoIlJ1YmJl
ciBzdGFtcGVkIGJ5IEVyaWMgU2VpZGVsLiIsIFRydWUpCisgICAgICAgIHNlbGYuX2Fzc2VydF9o
YXNfdmFsaWRfcmV2aWV3ZXIoIlVucmV2aWV3ZWQgYnVpbGQgZml4LiIsIFRydWUpCisKICAgICBk
ZWYgdGVzdF9sYXRlc3RfZW50cnlfcGFyc2Uoc2VsZik6CiAgICAgICAgIGNoYW5nZWxvZ19jb250
ZW50cyA9IHUiJXNcbiVzIiAlIChzZWxmLl9leGFtcGxlX2VudHJ5LCBzZWxmLl9leGFtcGxlX2No
YW5nZWxvZykKICAgICAgICAgY2hhbmdlbG9nX2ZpbGUgPSBTdHJpbmdJTyhjaGFuZ2Vsb2dfY29u
dGVudHMpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0
dGVycy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25m
aWcvY29tbWl0dGVycy5weQkocmV2aXNpb24gMTAwMjM3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICMKICMgV2ViS2l0J3MgUHl0aG9uIG1vZHVsZSBmb3IgY29tbWl0dGVyIGFuZCBy
ZXZpZXdlciB2YWxpZGF0aW9uLgogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5lZGl0ZGlzdGFuY2Ug
aW1wb3J0IGVkaXRfZGlzdGFuY2UKIAogY2xhc3MgQWNjb3VudChvYmplY3QpOgogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBuYW1lLCBlbWFpbF9vcl9lbWFpbHMsIGlyY19uaWNrbmFtZV9vcl9uaWNr
bmFtZXM9Tm9uZSk6CkBAIC00NDksNyArNDUwLDYgQEAgcmV2aWV3ZXJzX2xpc3QgPSBbCiAgICAg
UmV2aWV3ZXIoIlpvbHRhbiBIZXJjemVnIiwgWyJ6aGVyY3plZ0B3ZWJraXQub3JnIiwgInpoZXJj
emVnQGluZi51LXN6ZWdlZC5odSJdLCAiemhlcmN6ZWciKSwKIF0KIAotCiBjbGFzcyBDb21taXR0
ZXJMaXN0KG9iamVjdCk6CiAKICAgICAjIENvbW1pdHRlcnMgYW5kIHJldmlld2VycyBhcmUgcGFz
c2VkIGluIHRvIGFsbG93IGVhc3kgdGVzdGluZwpAQCAtNTIxLDYgKzUyMSw3IEBAIGNsYXNzIENv
bW1pdHRlckxpc3Qob2JqZWN0KToKIAogICAgIGRlZiBjb250cmlidXRvcl9ieV9pcmNfbmlja25h
bWUoc2VsZiwgaXJjX25pY2tuYW1lKToKICAgICAgICAgZm9yIGNvbnRyaWJ1dG9yIGluIHNlbGYu
Y29udHJpYnV0b3JzKCk6CisgICAgICAgICAgICAjRklYTUU6IFRoaXMgc2hvdWxkIGRvIGNhc2Ut
aW5zZW5zaXRpdmUgY29tcGFyaXNvbiBvciBhc3NlcnQgdGhhdCBhbGwgSVJDIG5pY2tuYW1lcyBh
cmUgaW4gbG93ZXJjYXNlCiAgICAgICAgICAgICBpZiBjb250cmlidXRvci5pcmNfbmlja25hbWVz
IGFuZCBpcmNfbmlja25hbWUgaW4gY29udHJpYnV0b3IuaXJjX25pY2tuYW1lczoKICAgICAgICAg
ICAgICAgICByZXR1cm4gY29udHJpYnV0b3IKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTUyOCw2
ICs1MjksMzkgQEAgY2xhc3MgQ29tbWl0dGVyTGlzdChvYmplY3QpOgogICAgIGRlZiBjb250cmli
dXRvcnNfYnlfc2VhcmNoX3N0cmluZyhzZWxmLCBzdHJpbmcpOgogICAgICAgICByZXR1cm4gZmls
dGVyKGxhbWJkYSBjb250cmlidXRvcjogY29udHJpYnV0b3IuY29udGFpbnNfc3RyaW5nKHN0cmlu
ZyksIHNlbGYuY29udHJpYnV0b3JzKCkpCiAKKyAgICBkZWYgX3Rva2VuaXplX2NvbnRyaWJ1dG9y
X25hbWUoc2VsZiwgY29udHJpYnV0b3IpOgorICAgICAgICBmdWxsX25hbWVfaW5fbG93ZXJjYXNl
ID0gY29udHJpYnV0b3IuZnVsbF9uYW1lLmxvd2VyKCkKKyAgICAgICAgdG9rZW5zID0gW2Z1bGxf
bmFtZV9pbl9sb3dlcmNhc2VdICsgZnVsbF9uYW1lX2luX2xvd2VyY2FzZS5zcGxpdCgpCisgICAg
ICAgIGlmIGNvbnRyaWJ1dG9yLmlyY19uaWNrbmFtZXM6CisgICAgICAgICAgICByZXR1cm4gdG9r
ZW5zICsgW25pY2tuYW1lLmxvd2VyKCkgZm9yIG5pY2tuYW1lIGluIGNvbnRyaWJ1dG9yLmlyY19u
aWNrbmFtZXMgaWYgbGVuKG5pY2tuYW1lKSA+IDVdCisgICAgICAgIHJldHVybiB0b2tlbnMKKwor
ICAgIGRlZiBjb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2goc2VsZiwgc3RyaW5nKToKKyAgICAg
ICAgc3RyaW5nID0gc3RyaW5nLmxvd2VyKCkKKworICAgICAgICAjIEZpcnN0IHBhdGgsIG9wdGlt
aXRpY2FsbHkgbWF0Y2ggZm9yIGZ1bGxuYW1lLCBlbWFpbCBhbmQgaXJjX25pY2tuYW1lcworICAg
ICAgICBhY2NvdW50ID0gc2VsZi5hY2NvdW50X2J5X2VtYWlsKHN0cmluZykgb3Igc2VsZi5jb250
cmlidXRvcl9ieV9pcmNfbmlja25hbWUoc3RyaW5nKSBvciBzZWxmLmNvbnRyaWJ1dG9yX2J5X25h
bWUoc3RyaW5nKQorICAgICAgICBpZiBhY2NvdW50OgorICAgICAgICAgICAgcmV0dXJuIFthY2Nv
dW50XSwgMAorCisgICAgICAgICMgU2Vjb25kIHBhdGgsIG11Y2ggc2xvd2VyIHNlYXJjaCB1c2lu
ZyBlZGl0LWRpc3RhbmNlCisgICAgICAgIGNvbnRyaWJ1dG9yV2l0aE1pbkRpc3RhbmNlID0gW10K
KyAgICAgICAgbWluRGlzdGFuY2UgPSBsZW4oc3RyaW5nKSAvIDIgLSAxCisgICAgICAgIGZvciBj
b250cmlidXRvciBpbiBzZWxmLmNvbnRyaWJ1dG9ycygpOgorICAgICAgICAgICAgdG9rZW5zID0g
c2VsZi5fdG9rZW5pemVfY29udHJpYnV0b3JfbmFtZShjb250cmlidXRvcikKKyAgICAgICAgICAg
IGVkaXRkaXN0YW5jZXMgPSBbZWRpdF9kaXN0YW5jZSh0b2tlbiwgc3RyaW5nKSBmb3IgdG9rZW4g
aW4gdG9rZW5zIGlmIGFicyhsZW4odG9rZW4pIC0gbGVuKHN0cmluZykpIDw9IG1pbkRpc3RhbmNl
XQorICAgICAgICAgICAgaWYgbm90IGVkaXRkaXN0YW5jZXM6CisgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgIGRpc3RhbmNlID0gbWluKGVkaXRkaXN0YW5jZXMpCisgICAgICAg
ICAgICBpZiBkaXN0YW5jZSA9PSBtaW5EaXN0YW5jZToKKyAgICAgICAgICAgICAgICBjb250cmli
dXRvcldpdGhNaW5EaXN0YW5jZS5hcHBlbmQoY29udHJpYnV0b3IpCisgICAgICAgICAgICBlbGlm
IGRpc3RhbmNlIDwgbWluRGlzdGFuY2U6CisgICAgICAgICAgICAgICAgY29udHJpYnV0b3JXaXRo
TWluRGlzdGFuY2UgPSBbY29udHJpYnV0b3JdCisgICAgICAgICAgICAgICAgbWluRGlzdGFuY2Ug
PSBkaXN0YW5jZQorICAgICAgICBpZiBub3QgbGVuKGNvbnRyaWJ1dG9yV2l0aE1pbkRpc3RhbmNl
KToKKyAgICAgICAgICAgIHJldHVybiBbXSwgbGVuKHN0cmluZykKKyAgICAgICAgcmV0dXJuIGNv
bnRyaWJ1dG9yV2l0aE1pbkRpc3RhbmNlLCBtaW5EaXN0YW5jZQorCiAgICAgZGVmIGFjY291bnRf
YnlfbG9naW4oc2VsZiwgbG9naW4pOgogICAgICAgICByZXR1cm4gc2VsZi5fbG9naW5fdG9fYWNj
b3VudF9tYXAoKS5nZXQobG9naW4ubG93ZXIoKSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnNfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDEwMDIzNykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9jb21taXR0ZXJzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MSwzICs5MSwz
NSBAQCBjbGFzcyBDb21taXR0ZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JzX2J5X3NlYXJjaF9zdHJp
bmcoJ3Rlc3QnKSwgW2NvbnRyaWJ1dG9yLCBjb21taXR0ZXIsIHJldmlld2VyXSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjb21taXR0ZXJfbGlzdC5jb250cmlidXRvcnNfYnlfc2VhcmNoX3N0
cmluZygncmFkJyksIFtyZXZpZXdlcl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0
dGVyX2xpc3QuY29udHJpYnV0b3JzX2J5X3NlYXJjaF9zdHJpbmcoJ1R3bycpLCBbcmV2aWV3ZXJd
KQorCisgICAgZGVmIF9hc3NlcnRfZnV6el9tYXRjaChzZWxmLCB0ZXh0LCBuYW1lX29mX2V4cGVj
dGVkX2NvbnRyaWJ1dG9yLCBleHBlY3RlZF9kaXN0YW5jZSk6CisgICAgICAgIGNvbW1pdHRlcnMg
PSBDb21taXR0ZXJMaXN0KCkKKyAgICAgICAgZXhwZWN0ZWRfY29udHJpYnV0b3JzID0gW2NvbW1p
dHRlcnMuY29udHJpYnV0b3JfYnlfbmFtZShuYW1lX29mX2V4cGVjdGVkX2NvbnRyaWJ1dG9yKV0g
aWYgbmFtZV9vZl9leHBlY3RlZF9jb250cmlidXRvciBlbHNlIFtdCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY29tbWl0dGVycy5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2godGV4dCksIChl
eHBlY3RlZF9jb250cmlidXRvcnMsIGV4cGVjdGVkX2Rpc3RhbmNlKSkKKworICAgIGRlZiB0ZXN0
X2NvbnRyaWJ1dG9yc19ieV9mdXp6eV9tYXRjaChzZWxmKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0
X2Z1enpfbWF0Y2goJ0dlb2ZmIEdhcmVuJywgJ0dlb2ZmcmV5IEdhcmVuJywgMykKKyAgICAgICAg
c2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ0tlbm5ldGggQ2hyaXN0aWFuc2VuJywgJ0tlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuJywgNikKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2go
J0tlbiBSdXNzZWxsJywgJ0tlbm5ldGggUnVzc2VsbCcsIDQpCisgICAgICAgIHNlbGYuX2Fzc2Vy
dF9mdXp6X21hdGNoKCdEYXZlIEh5YXR0JywgJ0RhdmlkIEh5YXR0JywgMikKKyAgICAgICAgc2Vs
Zi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ0RhdmUgS2lsemVyJywgJ0RhdmlkIEtpbHplcicsIDIpCisg
ICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdBbnR0aSAicHJpbnRmIiBLb2l2aXN0bycs
ICdBbnR0aSBLb2l2aXN0bycsIDkpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdT
YW1teSBXZWluaWcnLCAnU2FtIFdlaW5pZycsIDIpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6
X21hdGNoKCdBbmRyZXMgS2xpbmcnLCAnQW5kcmVhcyBLbGluZycsIDEpCisgICAgICAgIHNlbGYu
X2Fzc2VydF9mdXp6X21hdGNoKCdEYXJpbiBBZGxlclwnJywgJ0RhcmluIEFkbGVyJywgMSkKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ0pvZSBQZWNvcmFybycsICdKb3NlcGggUGVj
b3Jhcm8nLCAzKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnRHIgRGFuIEJlcm5z
dGVpbicsICdEYW4gQmVybnN0ZWluJywgMykKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0
Y2goJ01pdHpwZXR0ZWwnLCAnRGFuIEJlcm5zdGVpbicsIDApCisgICAgICAgIHNlbGYuX2Fzc2Vy
dF9mdXp6X21hdGNoKCdybml3YUB3ZWJraXQub3JnJywgJ1J5b3N1a2UgTml3YScsIDApCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdBcCcsICdBbGV4ZXkgUHJvc2t1cnlha292Jywg
MCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ1NhbScsICdTYW0gV2VpbmlnJywg
MCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ2RhcmluJywgJ0RhcmluIEFkbGVy
JywgMCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ2hhcnJpc29uJywgJ0Rhdmlk
IEhhcnJpc29uJywgMCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ290aGVycycs
IE5vbmUsIDYpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdCVUlMRCBGSVgnLCBO
b25lLCA5KQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnYnV0IERhbiBCZXJuc3Rl
aW4gYWxzbyByZXZpZXdlZCcsIE5vbmUsIDMxKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9t
YXRjaCgnYXNrZWQgdGhvdWdodGZ1bCBxdWVzdGlvbnMnLCBOb25lLCAyNikKKyAgICAgICAgc2Vs
Zi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ2J1aWxkIGZpeCBvZiBtYWMnLCBOb25lLCAxNikKKyAgICAg
ICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ2Egc3BlbGwgY2hlY2tlcicsIE5vbmUsIDE1KQor
ICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnbm9ib2R5LCBidWlsZCBmaXgnLCBOb25l
LCAxNykKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ05PQk9EWSAoY2hyb21pdW0g
YnVpbGQgZml4KScsIE5vbmUsIDI3KQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXIucHkJKHJldmlzaW9uIDEwMDIzNykK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJldmlld2VyLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCBjbGFzcyBWYWxpZGF0ZVJldmlld2Vy
KEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICBPcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwKICAg
ICAgICAgXQogCi0gICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgbW92ZSBvbnRvIENo
YW5nZUxvZ0VudHJ5Ci0gICAgZGVmIF9oYXNfdmFsaWRfcmV2aWV3ZXIoc2VsZiwgY2hhbmdlbG9n
X2VudHJ5KToKLSAgICAgICAgaWYgY2hhbmdlbG9nX2VudHJ5LnJldmlld2VyKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBpZiByZS5zZWFyY2goInVucmV2aWV3ZWQiLCBjaGFu
Z2Vsb2dfZW50cnkuY29udGVudHMoKSwgcmUuSUdOT1JFQ0FTRSk6Ci0gICAgICAgICAgICByZXR1
cm4gVHJ1ZQotICAgICAgICBpZiByZS5zZWFyY2goInJ1YmJlclsgLV1zdGFtcCIsIGNoYW5nZWxv
Z19lbnRyeS5jb250ZW50cygpLCByZS5JR05PUkVDQVNFKToKLSAgICAgICAgICAgIHJldHVybiBU
cnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCiAgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CiAg
ICAgICAgICMgRklYTUU6IEZvciBub3cgd2UgZGlzYWJsZSB0aGlzIGNoZWNrIHdoZW4gYSB1c2Vy
IGlzIGRyaXZpbmcgdGhlIHNjcmlwdAogICAgICAgICAjIHRoaXMgY2hlY2sgaXMgdG9vIGRyYWNv
bmlhbiAoYW5kIHRvbyBwb29ybHkgdGVzdGVkKSB0byBmb2lzdCB1cG9uIHVzZXJzLgpAQCAtNjAs
NyArNTAsNyBAQCBjbGFzcyBWYWxpZGF0ZVJldmlld2VyKEFic3RyYWN0U3RlcCk6CiAgICAgICAg
ICAgICByZXR1cm4KICAgICAgICAgZm9yIGNoYW5nZWxvZ19wYXRoIGluIHNlbGYuY2FjaGVkX2xv
b2t1cChzdGF0ZSwgImNoYW5nZWxvZ3MiKToKICAgICAgICAgICAgIGNoYW5nZWxvZ19lbnRyeSA9
IENoYW5nZUxvZyhjaGFuZ2Vsb2dfcGF0aCkubGF0ZXN0X2VudHJ5KCkKLSAgICAgICAgICAgIGlm
IHNlbGYuX2hhc192YWxpZF9yZXZpZXdlcihjaGFuZ2Vsb2dfZW50cnkpOgorICAgICAgICAgICAg
aWYgY2hhbmdlbG9nX2VudHJ5Lmhhc192YWxpZF9yZXZpZXdlcigpOgogICAgICAgICAgICAgICAg
IGNvbnRpbnVlCiAgICAgICAgICAgICByZXZpZXdlcl90ZXh0ID0gY2hhbmdlbG9nX2VudHJ5LnJl
dmlld2VyX3RleHQoKQogICAgICAgICAgICAgaWYgcmV2aWV3ZXJfdGV4dDoKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJldmlld2VyX3VuaXR0ZXN0LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0
ZXJldmlld2VyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMDAyMzcpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlcl91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jCi0jICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IHVuaXR0ZXN0
Ci0KLWZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LmNoYW5nZWxvZyBpbXBvcnQgQ2hhbmdl
TG9nRW50cnkKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9y
dCBPdXRwdXRDYXB0dXJlCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tP
cHRpb25zLCBNb2NrVG9vbAotZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLnZhbGlkYXRlcmV2aWV3
ZXIgaW1wb3J0IFZhbGlkYXRlUmV2aWV3ZXIKLQotY2xhc3MgVmFsaWRhdGVSZXZpZXdlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgotICAgIF9ib2lsZXJwbGF0ZV9lbnRyeSA9ICcnJzIwMDktMDgt
MTkgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgotCi0gICAgICAgIFJFVklFV19MSU5F
Ci0KLSAgICAgICAgKiBTY3JpcHRzL2J1Z3ppbGxhLXRvb2w6Ci0nJycKLQotICAgIGRlZiBfdGVz
dF9yZXZpZXdfdGV4dChzZWxmLCBzdGVwLCB0ZXh0LCBleHBlY3RlZCk6Ci0gICAgICAgIGNvbnRl
bnRzID0gc2VsZi5fYm9pbGVycGxhdGVfZW50cnkucmVwbGFjZSgiUkVWSUVXX0xJTkUiLCB0ZXh0
KQotICAgICAgICBlbnRyeSA9IENoYW5nZUxvZ0VudHJ5KGNvbnRlbnRzKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHN0ZXAuX2hhc192YWxpZF9yZXZpZXdlcihlbnRyeSksIGV4cGVjdGVkKQot
Ci0gICAgZGVmIHRlc3RfaGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYpOgotICAgICAgICBzdGVwID0g
VmFsaWRhdGVSZXZpZXdlcihNb2NrVG9vbCgpLCBNb2NrT3B0aW9ucygpKQotICAgICAgICBzZWxm
Ll90ZXN0X3Jldmlld190ZXh0KHN0ZXAsICJSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4iLCBUcnVl
KQotICAgICAgICBzZWxmLl90ZXN0X3Jldmlld190ZXh0KHN0ZXAsICJSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbCIsIFRydWUpICMgTm90IHBpY2t5IGFib3V0IHRoZSAnLicKLSAgICAgICAgc2VsZi5f
dGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUmV2aWV3ZWQgYnkgRXJpYy4iLCBGYWxzZSkKLSAgICAg
ICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUmV2aWV3ZWQgYnkgRXJpYyBDIFNlaWRl
bC4iLCBGYWxzZSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUnViYmVy
LXN0YW1wZWQgYnkgRXJpYy4iLCBUcnVlKQotICAgICAgICBzZWxmLl90ZXN0X3Jldmlld190ZXh0
KHN0ZXAsICJSdWJiZXIgc3RhbXBlZCBieSBFcmljLiIsIFRydWUpCi0gICAgICAgIHNlbGYuX3Rl
c3RfcmV2aWV3X3RleHQoc3RlcCwgIlVucmV2aWV3ZWQgYnVpbGQgZml4LiIsIFRydWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115270</attachid>
            <date>2011-11-15 16:12:14 -0800</date>
            <delta_ts>2011-11-15 17:11:35 -0800</delta_ts>
            <desc>Brought back forgotten editdistance.py</desc>
            <filename>bug-72351-20111115161213.patch</filename>
            <type>text/plain</type>
            <size>26945</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDIzNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDExLTExLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEltcGxlbWVudCBlZGl0LWRpc3RhbmNlIGJhc2VkIHJldmlld2VyIHJlY29nbml0
aW9uIGFsZ29yaXRobQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgYW4gYWxnb3JpdGhtIHRvIHJlY29nbml6ZSByZXZpZXdlcidzIG5hbWUg
YmFzZWQgb24gaXRzIGVkaXQgZGlzdGFuY2UgKG9yIG1vcmUgcHJlY2lzZWx5CisgICAgICAgIGl0
cyBMZXZlbnNodGVpbiBkaXN0YW5jZSkgdG8gZWFjaCByZXZpZXdlcidzIGZ1bGwgbmFtZSwgZmly
c3QsIGxhc3QgYW5kIG1pZGRsZSBuYW1lcywgYW5kIElSQyBuaWNrbmFtZXMuCisgICAgICAgIEZ1
cnRoZXJtb3JlLCB3ZSBjYXAgdGhlIG1heGltdW0gZWRpdCBkaXN0YW5jZSBhdCBsZW4obmFtZSkg
LSAxIHRvIGF2b2lkIG1hdGNoaW5nIGEgYm9ndXMgc3RyaW5nIGxpa2UKKyAgICAgICAgImJ1aWxk
IGZpeCIgdG8gYSByZXZpZXdlcidzIG5hbWUgKGUuZy4gd2l0aCB3aXRoIGVkaXQgZGlzdGFuY2Ug
OSkuCisKKyAgICAgICAgVGhpcyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgaW4gQ29tbWl0dGVy
TGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2guIFRoZSBmdW5jdGlvbiB0byBjb21wdXRl
CisgICAgICAgIHRoZSBlZGl0IGRpc3RhbmNlIGlzIGltcGxlbWVudGVkIGluIGVkaXRfZGlzdGFu
Y2UucHkuCisKKyAgICAgICAgQWxzbyBtb3ZlZCBfaGFzX3ZhbGlkX3Jldmlld2VyIGZyb20gVmFs
aWRhdGVSZXZpZXdlciB0byBDaGFuZ2VMb2dFbnRyeSBiZWNhdXNlIHdlIGNhbiBubyBsb25nZXIg
cmVseQorICAgICAgICBvbiB0aGUgcHJlc2VuY2Ugb2YgQ2hhbmdlTG9nRW50cnkucmV2aWV3ZXIo
KSB0byB2ZXJpZnkgdGhhdCByZXZpZXdlciBzdHJpbmcgaXMgbmljZWx5IGZvcm1hdHRlZC4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vsb2dfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1p
dHRlcnNfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRp
dGRpc3RhbmNlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9l
ZGl0ZGlzdGFuY2VfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJldmlld2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9zdGVwcy92YWxpZGF0ZXJldmlld2VyX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgor
CiAyMDExLTExLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IEltcHJvdmUgQ2hhbmdlTG9nRW50cnkncyByZXZpZXdlciBwYXJzaW5nIGFsZ29yaXRobSBwYXJ0
IDIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2VkaXRkaXN0YW5jZS5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0ZGlzdGFuY2Uu
cHkJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0ZGlz
dGFuY2UucHkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKyMgQ29weXJpZ2h0IChjKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Citmcm9tIGFycmF5IGltcG9ydCBhcnJheQorCisKK2RlZiBlZGl0X2Rpc3RhbmNlKHN0cjEsIHN0
cjIpOgorICAgIHVuc2lnbmVkU2hvcnQgPSAnaCcKKyAgICBkaXN0YW5jZXMgPSBbYXJyYXkodW5z
aWduZWRTaG9ydCwgKDAsKSAqIChsZW4oc3RyMikgKyAxKSkgZm9yIGkgaW4gcmFuZ2UoMCwgbGVu
KHN0cjEpICsgMSldCisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHN0cjEpICsgMSk6CisgICAg
ICAgIGRpc3RhbmNlc1tpXVswXSA9IGkKKworICAgIGZvciBqIGluIHJhbmdlKDEsIGxlbihzdHIy
KSArIDEpOgorICAgICAgICBkaXN0YW5jZXNbMF1bal0gPSBqCisKKyAgICBmb3IgaSBpbiByYW5n
ZSgwLCBsZW4oc3RyMSkpOgorICAgICAgICBmb3IgaiBpbiByYW5nZSgwLCBsZW4oc3RyMikpOgor
ICAgICAgICAgICAgZGlmZiA9IDAgaWYgc3RyMVtpXSA9PSBzdHIyW2pdIGVsc2UgMQorICAgICAg
ICAgICAgIyBEZWxldGlvbiwgSW5zZXJ0aW9uLCBJZGVudGljYWwgLyBSZXBsYWNlbWVudAorICAg
ICAgICAgICAgZGlzdGFuY2VzW2kgKyAxXVtqICsgMV0gPSBtaW4oZGlzdGFuY2VzW2kgKyAxXVtq
XSArIDEsIGRpc3RhbmNlc1tpXVtqICsgMV0gKyAxLCBkaXN0YW5jZXNbaV1bal0gKyBkaWZmKQor
ICAgIHJldHVybiBkaXN0YW5jZXNbbGVuKHN0cjEpXVtsZW4oc3RyMildCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9lZGl0ZGlzdGFuY2VfdW5pdHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdGRpc3RhbmNlX3VuaXR0ZXN0
LnB5CShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZWRpdGRp
c3RhbmNlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisjIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmVkaXRk
aXN0YW5jZSBpbXBvcnQgZWRpdF9kaXN0YW5jZQorCisKK2NsYXNzIEVkaXREaXN0YW5jZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VkaXRfZGlzdGFuY2Uoc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnJywgJ2FhJyksIDIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWEnLCAnJyksIDIpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnYScsICdhYicpLCAxKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJ2FiJywgJ2EnKSwgMSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChlZGl0X2Rpc3RhbmNlKCdhYicsICdhYScpLCAxKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJ2FhJywgJ2FiJyksIDEpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZWRpdF9kaXN0YW5jZSgnYWJkJywgJ2FiY2RlZicpLCAzKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGVkaXRfZGlzdGFuY2UoJ2FiY2RlZicsICdhYmQnKSwgMykKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9jaGFuZ2Vs
b2cucHkJKHJldmlzaW9uIDEwMDIzNykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L2NoYW5nZWxvZy5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMiBA
QCBjbGFzcyBDaGFuZ2VMb2dFbnRyeShvYmplY3QpOgogCiAgICAgICAgIHJldHVybiByZXZpZXdl
cl90ZXh0LCByZXZpZXdlcl9saXN0CiAKKyAgICBkZWYgX2Z1enpfbWF0Y2hfcmV2aWV3ZXJzKHNl
bGYsIHJldmlld2Vyc190ZXh0X2xpc3QpOgorICAgICAgICBpZiBub3QgcmV2aWV3ZXJzX3RleHRf
bGlzdDoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBsaXN0X29mX3Jldmlld2VycyA9
IFtzZWxmLl9jb21taXR0ZXJfbGlzdC5jb250cmlidXRvcnNfYnlfZnV6enlfbWF0Y2gocmV2aWV3
ZXIpWzBdIGZvciByZXZpZXdlciBpbiByZXZpZXdlcnNfdGV4dF9saXN0XQorICAgICAgICByZXR1
cm4gW3Jldmlld2Vyc1swXSBmb3IgcmV2aWV3ZXJzIGluIGxpc3Rfb2ZfcmV2aWV3ZXJzIGlmIGxl
bihyZXZpZXdlcnMpID09IDFdCisKICAgICBkZWYgX3BhcnNlX2VudHJ5KHNlbGYpOgogICAgICAg
ICBtYXRjaCA9IHJlLm1hdGNoKHNlbGYuZGF0ZV9saW5lX3JlZ2V4cCwgc2VsZi5fY29udGVudHMs
IHJlLk1VTFRJTElORSkKICAgICAgICAgaWYgbm90IG1hdGNoOgpAQCAtMTU1LDggKzE2MSw4IEBA
IGNsYXNzIENoYW5nZUxvZ0VudHJ5KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2F1dGhvcl9uYW1l
ID0gbWF0Y2guZ3JvdXAoIm5hbWUiKSBpZiBtYXRjaCBlbHNlIE5vbmUKICAgICAgICAgc2VsZi5f
YXV0aG9yX2VtYWlsID0gbWF0Y2guZ3JvdXAoImVtYWlsIikgaWYgbWF0Y2ggZWxzZSBOb25lCiAK
LSAgICAgICAgc2VsZi5fcmV2aWV3ZXJfdGV4dCwgc2VsZi5fcmV2aWV3ZXJfbGlzdCA9IENoYW5n
ZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KHNlbGYuX2NvbnRlbnRzKQotICAgICAgICBz
ZWxmLl9yZXZpZXdlciA9IHNlbGYuX2NvbW1pdHRlcl9saXN0LmNvbW1pdHRlcl9ieV9uYW1lKHNl
bGYuX3Jldmlld2VyX2xpc3RbMF0pIGlmIHNlbGYuX3Jldmlld2VyX2xpc3QgZWxzZSBOb25lCisg
ICAgICAgIHNlbGYuX3Jldmlld2VyX3RleHQsIHNlbGYuX3Jldmlld2Vyc190ZXh0X2xpc3QgPSBD
aGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dChzZWxmLl9jb250ZW50cykKKyAgICAg
ICAgc2VsZi5fcmV2aWV3ZXJzID0gc2VsZi5fZnV6el9tYXRjaF9yZXZpZXdlcnMoc2VsZi5fcmV2
aWV3ZXJzX3RleHRfbGlzdCkKICAgICAgICAgc2VsZi5fYXV0aG9yID0gc2VsZi5fY29tbWl0dGVy
X2xpc3QuY29udHJpYnV0b3JfYnlfZW1haWwoc2VsZi5fYXV0aG9yX2VtYWlsKSBvciBzZWxmLl9j
b21taXR0ZXJfbGlzdC5jb250cmlidXRvcl9ieV9uYW1lKHNlbGYuX2F1dGhvcl9uYW1lKQogCiAg
ICAgICAgIHNlbGYuX3RvdWNoZWRfZmlsZXMgPSByZS5maW5kYWxsKHNlbGYudG91Y2hlZF9maWxl
c19yZWdleHAsIHNlbGYuX2NvbnRlbnRzLCByZS5NVUxUSUxJTkUpCkBAIC0xNzUsOCArMTgxLDIy
IEBAIGNsYXNzIENoYW5nZUxvZ0VudHJ5KG9iamVjdCk6CiAgICAgZGVmIHJldmlld2VyX3RleHQo
c2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9yZXZpZXdlcl90ZXh0CiAKKyAgICAjIE1pZ2h0
IGJlIE5vbmUsIG1pZ2h0IGFsc28gbm90IGJlIGEgUmV2aWV3ZXIhCiAgICAgZGVmIHJldmlld2Vy
KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmV2aWV3ZXIgICMgTWlnaHQgYmUgTm9uZSwg
bWlnaHQgYWxzbyBub3QgYmUgYSBSZXZpZXdlciEKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jldmll
d2Vyc1swXSBpZiBsZW4oc2VsZi5fcmV2aWV3ZXJzKSA+IDAgZWxzZSBOb25lCisKKyAgICBkZWYg
cmV2aWV3ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmV2aWV3ZXJzCisKKyAgICBk
ZWYgaGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9yZXZpZXdlcnNf
dGV4dF9saXN0OgorICAgICAgICAgICAgZm9yIHJldmlld2VyIGluIHNlbGYuX3Jldmlld2Vyc190
ZXh0X2xpc3Q6CisgICAgICAgICAgICAgICAgcmV2aWV3ZXIgPSBzZWxmLl9jb21taXR0ZXJfbGlz
dC5jb21taXR0ZXJfYnlfbmFtZShyZXZpZXdlcikKKyAgICAgICAgICAgICAgICBpZiByZXZpZXdl
cjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcmUuc2VhcmNo
KCJ1bnJldmlld2VkIiwgc2VsZi5fY29udGVudHMsIHJlLklHTk9SRUNBU0UpOgorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgY29udGVudHMo
c2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9jb250ZW50cwpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2NoYW5nZWxvZ191
bml0dGVzdC5weQkocmV2aXNpb24gMTAwMjM3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY2hlY2tvdXQvY2hhbmdlbG9nX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
NzcsNDAgKzM3NywxNSBAQCBjbGFzcyBDaGFuZ2VMb2dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9w
YXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBTYW0gV2VpbmlnIHdpdGggbm8gaGVzaXRh
dGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnU2FtIFdl
aW5pZyddKQogCi0gICAgICAgICMgRm9yIG5vdywgd2UgbGV0IHVub2ZmaWNpYWwgcmV2aWV3ZXJz
IHJlY29nbml6ZWQgYXMgcmV2aWV3ZXJzCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2Vy
X2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkg
U2FtIFdlaW5pZywgQW5kZXJzIENhcmxzc29uLCBhbmQgKHVub2ZmaWNpYWxseSkgQWRhbSBCYXJ0
aC4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ1NhbSBXZWlu
aWcnLCAnQW5kZXJzIENhcmxzc29uJywgJ0FkYW0gQmFydGgnXSkKLQotICAgICAgICAjIEl0J3Mg
b2theSB0byBoYXZlICdidWlsZCBmaXgnIGFuZCAnb3RoZXJzJywgZXRjLi4uIGFzIGEgcmV2aWV3
ZXIgaW4gdGhlIGZvbGxvd2luZyBjYXNlcyBiZWNhdXNlIGZ1enp5LW1hdGNoIHdvdWxkIHJlamVj
dCBpdAotICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50
cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdiwgYnVp
bGQgZml4JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfbGlzdCwgWydEaW1p
dHJpIEdsYXprb3YnLCAnYnVpbGQgZml4J10pCi0KLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2
aWV3ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdl
ZCBieSBCVUlMRCBGSVgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0
LCBbJ0JVSUxEIEZJWCddKQotCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3Qg
PSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgTWFjIGJ1
aWxkIGZpeCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnTWFj
IGJ1aWxkIGZpeCddKQotCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBD
aGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIsIERhbiBCZXJuc3RlaW4sIEFkZWxlIFBldGVyc29uLCBhbmQgb3RoZXJzLicpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsICdEYXJpbiBBZGxlciwgRGFuIEJlcm5z
dGVpbiwgQWRlbGUgUGV0ZXJzb24sIGFuZCBvdGhlcnMnKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhyZXZpZXdlcl9saXN0LCBbJ0RhcmluIEFkbGVyJywgJ0RhbiBCZXJuc3RlaW4nLCAnQWRl
bGUgUGV0ZXJzb24nLCAnb3RoZXJzJ10pCi0KLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3
ZXJfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBi
eSBHZW9yZ2UgU3RhaWtvcyAoYW5kIG90aGVycyknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhyZXZpZXdlcl9saXN0LCBbJ0dlb3JnZSBTdGFpa29zJywgJ290aGVycyddKQotCiAgICAgICAg
IHJldmlld2VyX3RleHQsIHJldmlld2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2
aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQsIG9rYXllZCBieSBEYXJpbiBBZGxl
ci4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ09saXZlciBI
dW50J10pCiAKLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxv
Z0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBNYXJrIFJvd2UsIGJ1dCBE
YW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQgYW5kIGFza2VkIHRob3VnaHRmdWwgcXVlc3Rpb25z
LicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnTWFyayBSb3dl
JywgJ2J1dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3ZWQnLCAnYXNrZWQgdGhvdWdodGZ1bCBx
dWVzdGlvbnMnXSkKLQotICAgICAgICAjIEl0J3Mgb2theSB0byBoYXZlICIgaW4iIGFuZCAiYnkg
IiwgZXRjLi4uIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBm
dXp6eS1tYXRjaCB0aGVtIGxhdGVyCi0gICAgICAgIHJldmlld2VyX3RleHQsIHJldmlld2VyX2xp
c3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIgaW4gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Nzcz
Nj4uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfdGV4dCwgJ0RhcmluIEFk
bGVyIGluJykKLSAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5nZUxv
Z0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBBZGFtIEJhcnRoLjp3JykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV2aWV3ZXJfdGV4dCwgJ0FkYW0gQmFydGguOncn
KQogICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9nRW50cnku
X3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IERhcmluIEFkbGVyKS4nKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl90ZXh0LCAnRGFyaW4gQWRsZXInKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhyZXZpZXdlcl9saXN0LCBbJ0RhcmluIEFkbGVyJ10pCisKKyAg
ICAgICAgIyBGb3Igbm93LCB3ZSBsZXQgdW5vZmZpY2lhbCByZXZpZXdlcnMgcmVjb2duaXplZCBh
cyByZXZpZXdlcnMKKyAgICAgICAgcmV2aWV3ZXJfdGV4dCwgcmV2aWV3ZXJfbGlzdCA9IENoYW5n
ZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0KCdSZXZpZXdlZCBieSBTYW0gV2VpbmlnLCBB
bmRlcnMgQ2FybHNzb24sIGFuZCAodW5vZmZpY2lhbGx5KSBBZGFtIEJhcnRoLicpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX2xpc3QsIFsnU2FtIFdlaW5pZycsICdBbmRlcnMg
Q2FybHNzb24nLCAnQWRhbSBCYXJ0aCddKQogCiAgICAgICAgIHJldmlld2VyX3RleHQsIHJldmll
d2VyX2xpc3QgPSBDaGFuZ2VMb2dFbnRyeS5fcGFyc2VfcmV2aWV3ZXJfdGV4dCgnUmV2aWV3ZWQg
YnkgTk9CT0RZLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHQsIE5v
bmUpCkBAIC00MzMsNiArNDA4LDQ4IEBAIGNsYXNzIENoYW5nZUxvZ1Rlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICByZXZpZXdlcl90ZXh0LCByZXZpZXdlcl9saXN0ID0gQ2hhbmdlTG9n
RW50cnkuX3BhcnNlX3Jldmlld2VyX3RleHQoJ1Jldmlld2VkIGJ5IG5vYm9keSAodHJpdmlhbCBm
b2xsb3cgdXAgZml4KSwgSm9zZXBoIFBlY29yYXJvIExHVE0tZWQuJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMocmV2aWV3ZXJfdGV4dCwgTm9uZSkKIAorICAgIGRlZiBfZW50cnlfd2l0aF9y
ZXZpZXdlcihzZWxmLCByZXZpZXdlcl9saW5lKToKKyAgICAgICAgcmV0dXJuIENoYW5nZUxvZ0Vu
dHJ5KCcnJzIwMDktMDgtMTkgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAg
ICAgICAgICBSRVZJRVdfTElORQorCisgICAgICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9v
bDoKKycnJy5yZXBsYWNlKCJSRVZJRVdfTElORSIsIHJldmlld2VyX2xpbmUpKQorCisgICAgZGVm
IF9jb250cmlidXRvcnMoc2VsZiwgbmFtZXMpOgorICAgICAgICByZXR1cm4gW0NvbW1pdHRlckxp
c3QoKS5jb250cmlidXRvcl9ieV9uYW1lKG5hbWUpIGZvciBuYW1lIGluIG5hbWVzXQorCisgICAg
ZGVmIF9hc3NlcnRfZnV6enlfcmV2aWV3ZXJfbWF0Y2goc2VsZiwgcmV2aWV3ZXJfdGV4dCwgZXhw
ZWN0ZWRfdGV4dF9saXN0LCBleHBlY3RlZF9jb250cmlidXRvcnMpOgorICAgICAgICB1bnVzZWQs
IHJldmlld2VyX3RleHRfbGlzdCA9IENoYW5nZUxvZ0VudHJ5Ll9wYXJzZV9yZXZpZXdlcl90ZXh0
KHJldmlld2VyX3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJldmlld2VyX3RleHRf
bGlzdCwgZXhwZWN0ZWRfdGV4dF9saXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxm
Ll9lbnRyeV93aXRoX3Jldmlld2VyKHJldmlld2VyX3RleHQpLnJldmlld2VycygpLCBzZWxmLl9j
b250cmlidXRvcnMoZXhwZWN0ZWRfY29udHJpYnV0b3JzKSkKKworICAgIGRlZiB0ZXN0X2Z1enp5
X3Jldmlld2VyX21hdGNoKHNlbGYpOgorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6enlfcmV2aWV3
ZXJfbWF0Y2goJ1Jldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdiwgYnVpbGQgZml4JywgWydEaW1p
dHJpIEdsYXprb3YnLCAnYnVpbGQgZml4J10sIFsnRGltaXRyaSBHbGF6a292J10pCisgICAgICAg
IHNlbGYuX2Fzc2VydF9mdXp6eV9yZXZpZXdlcl9tYXRjaCgnUmV2aWV3ZWQgYnkgQlVJTEQgRklY
JywgWydCVUlMRCBGSVgnXSwgW10pCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6eV9yZXZpZXdl
cl9tYXRjaCgnUmV2aWV3ZWQgYnkgTWFjIGJ1aWxkIGZpeCcsIFsnTWFjIGJ1aWxkIGZpeCddLCBb
XSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enp5X3Jldmlld2VyX21hdGNoKCdSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlciwgRGFuIEJlcm5zdGVpbiwgQWRlbGUgUGV0ZXJzb24sIGFuZCBvdGhlcnMu
JywKKyAgICAgICAgICAgIFsnRGFyaW4gQWRsZXInLCAnRGFuIEJlcm5zdGVpbicsICdBZGVsZSBQ
ZXRlcnNvbicsICdvdGhlcnMnXSwgWydEYXJpbiBBZGxlcicsICdEYW4gQmVybnN0ZWluJywgJ0Fk
ZWxlIFBldGVyc29uJ10pCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6eV9yZXZpZXdlcl9tYXRj
aCgnUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MgKGFuZCBvdGhlcnMpJywgWydHZW9yZ2UgU3Rh
aWtvcycsICdvdGhlcnMnXSwgWydHZW9yZ2UgU3RhaWtvcyddKQorICAgICAgICBzZWxmLl9hc3Nl
cnRfZnV6enlfcmV2aWV3ZXJfbWF0Y2goJ1Jldmlld2VkIGJ5IE1hcmsgUm93ZSwgYnV0IERhbiBC
ZXJuc3RlaW4gYWxzbyByZXZpZXdlZCBhbmQgYXNrZWQgdGhvdWdodGZ1bCBxdWVzdGlvbnMuJywK
KyAgICAgICAgICAgIFsnTWFyayBSb3dlJywgJ2J1dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2aWV3
ZWQnLCAnYXNrZWQgdGhvdWdodGZ1bCBxdWVzdGlvbnMnXSwgWydNYXJrIFJvd2UnXSkKKyAgICAg
ICAgc2VsZi5fYXNzZXJ0X2Z1enp5X3Jldmlld2VyX21hdGNoKCdSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlciBpbiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzM2Pi4n
LCBbJ0RhcmluIEFkbGVyIGluJ10sIFsnRGFyaW4gQWRsZXInXSkKKyAgICAgICAgc2VsZi5fYXNz
ZXJ0X2Z1enp5X3Jldmlld2VyX21hdGNoKCdSZXZpZXdlZCBieSBBZGFtIEJhcnRoLjp3JywgWydB
ZGFtIEJhcnRoLjp3J10sIFsnQWRhbSBCYXJ0aCddKQorCisgICAgZGVmIF9hc3NlcnRfaGFzX3Zh
bGlkX3Jldmlld2VyKHNlbGYsIHJldmlld2VyX2xpbmUsIGV4cGVjdGVkKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLl9lbnRyeV93aXRoX3Jldmlld2VyKHJldmlld2VyX2xpbmUpLmhh
c192YWxpZF9yZXZpZXdlcigpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2hhc192YWxpZF9y
ZXZpZXdlcihzZWxmKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2hhc192YWxpZF9yZXZpZXdlcigi
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2hh
c192YWxpZF9yZXZpZXdlcigiUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwiLCBUcnVlKSAgIyBOb3Qg
cGlja3kgYWJvdXQgdGhlICcuJworICAgICAgICBzZWxmLl9hc3NlcnRfaGFzX3ZhbGlkX3Jldmll
d2VyKCJSZXZpZXdlZCBieSBFcmljLiIsIEZhbHNlKQorICAgICAgICBzZWxmLl9hc3NlcnRfaGFz
X3ZhbGlkX3Jldmlld2VyKCJSZXZpZXdlZCBieSBFcmljIEMgU2VpZGVsLiIsIEZhbHNlKQorICAg
ICAgICBzZWxmLl9hc3NlcnRfaGFzX3ZhbGlkX3Jldmlld2VyKCJSdWJiZXItc3RhbXBlZCBieSBF
cmljLiIsIEZhbHNlKQorICAgICAgICBzZWxmLl9hc3NlcnRfaGFzX3ZhbGlkX3Jldmlld2VyKCJS
dWJiZXItc3RhbXBlZCBieSBFcmljIFNlaWRlbC4iLCBUcnVlKQorICAgICAgICBzZWxmLl9hc3Nl
cnRfaGFzX3ZhbGlkX3Jldmlld2VyKCJSdWJiZXIgc3RhbXBlZCBieSBFcmljLiIsIEZhbHNlKQor
ICAgICAgICBzZWxmLl9hc3NlcnRfaGFzX3ZhbGlkX3Jldmlld2VyKCJSdWJiZXIgc3RhbXBlZCBi
eSBFcmljIFNlaWRlbC4iLCBUcnVlKQorICAgICAgICBzZWxmLl9hc3NlcnRfaGFzX3ZhbGlkX3Jl
dmlld2VyKCJVbnJldmlld2VkIGJ1aWxkIGZpeC4iLCBUcnVlKQorCiAgICAgZGVmIHRlc3RfbGF0
ZXN0X2VudHJ5X3BhcnNlKHNlbGYpOgogICAgICAgICBjaGFuZ2Vsb2dfY29udGVudHMgPSB1IiVz
XG4lcyIgJSAoc2VsZi5fZXhhbXBsZV9lbnRyeSwgc2VsZi5fZXhhbXBsZV9jaGFuZ2Vsb2cpCiAg
ICAgICAgIGNoYW5nZWxvZ19maWxlID0gU3RyaW5nSU8oY2hhbmdlbG9nX2NvbnRlbnRzKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRlcnMucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbW1pdHRl
cnMucHkJKHJldmlzaW9uIDEwMDIzNykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NvbmZpZy9jb21taXR0ZXJzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
CiAjIFdlYktpdCdzIFB5dGhvbiBtb2R1bGUgZm9yIGNvbW1pdHRlciBhbmQgcmV2aWV3ZXIgdmFs
aWRhdGlvbi4KIAorZnJvbSB3ZWJraXRweS5jb21tb24uZWRpdGRpc3RhbmNlIGltcG9ydCBlZGl0
X2Rpc3RhbmNlCiAKIGNsYXNzIEFjY291bnQob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbmFtZSwgZW1haWxfb3JfZW1haWxzLCBpcmNfbmlja25hbWVfb3Jfbmlja25hbWVzPU5vbmUp
OgpAQCAtNDQ5LDcgKzQ1MCw2IEBAIHJldmlld2Vyc19saXN0ID0gWwogICAgIFJldmlld2VyKCJa
b2x0YW4gSGVyY3plZyIsIFsiemhlcmN6ZWdAd2Via2l0Lm9yZyIsICJ6aGVyY3plZ0BpbmYudS1z
emVnZWQuaHUiXSwgInpoZXJjemVnIiksCiBdCiAKLQogY2xhc3MgQ29tbWl0dGVyTGlzdChvYmpl
Y3QpOgogCiAgICAgIyBDb21taXR0ZXJzIGFuZCByZXZpZXdlcnMgYXJlIHBhc3NlZCBpbiB0byBh
bGxvdyBlYXN5IHRlc3RpbmcKQEAgLTUyMSw2ICs1MjEsNyBAQCBjbGFzcyBDb21taXR0ZXJMaXN0
KG9iamVjdCk6CiAKICAgICBkZWYgY29udHJpYnV0b3JfYnlfaXJjX25pY2tuYW1lKHNlbGYsIGly
Y19uaWNrbmFtZSk6CiAgICAgICAgIGZvciBjb250cmlidXRvciBpbiBzZWxmLmNvbnRyaWJ1dG9y
cygpOgorICAgICAgICAgICAgI0ZJWE1FOiBUaGlzIHNob3VsZCBkbyBjYXNlLWluc2Vuc2l0aXZl
IGNvbXBhcmlzb24gb3IgYXNzZXJ0IHRoYXQgYWxsIElSQyBuaWNrbmFtZXMgYXJlIGluIGxvd2Vy
Y2FzZQogICAgICAgICAgICAgaWYgY29udHJpYnV0b3IuaXJjX25pY2tuYW1lcyBhbmQgaXJjX25p
Y2tuYW1lIGluIGNvbnRyaWJ1dG9yLmlyY19uaWNrbmFtZXM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbnRyaWJ1dG9yCiAgICAgICAgIHJldHVybiBOb25lCkBAIC01MjgsNiArNTI5LDM5IEBA
IGNsYXNzIENvbW1pdHRlckxpc3Qob2JqZWN0KToKICAgICBkZWYgY29udHJpYnV0b3JzX2J5X3Nl
YXJjaF9zdHJpbmcoc2VsZiwgc3RyaW5nKToKICAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEg
Y29udHJpYnV0b3I6IGNvbnRyaWJ1dG9yLmNvbnRhaW5zX3N0cmluZyhzdHJpbmcpLCBzZWxmLmNv
bnRyaWJ1dG9ycygpKQogCisgICAgZGVmIF90b2tlbml6ZV9jb250cmlidXRvcl9uYW1lKHNlbGYs
IGNvbnRyaWJ1dG9yKToKKyAgICAgICAgZnVsbF9uYW1lX2luX2xvd2VyY2FzZSA9IGNvbnRyaWJ1
dG9yLmZ1bGxfbmFtZS5sb3dlcigpCisgICAgICAgIHRva2VucyA9IFtmdWxsX25hbWVfaW5fbG93
ZXJjYXNlXSArIGZ1bGxfbmFtZV9pbl9sb3dlcmNhc2Uuc3BsaXQoKQorICAgICAgICBpZiBjb250
cmlidXRvci5pcmNfbmlja25hbWVzOgorICAgICAgICAgICAgcmV0dXJuIHRva2VucyArIFtuaWNr
bmFtZS5sb3dlcigpIGZvciBuaWNrbmFtZSBpbiBjb250cmlidXRvci5pcmNfbmlja25hbWVzIGlm
IGxlbihuaWNrbmFtZSkgPiA1XQorICAgICAgICByZXR1cm4gdG9rZW5zCisKKyAgICBkZWYgY29u
dHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHN0cmluZyA9
IHN0cmluZy5sb3dlcigpCisKKyAgICAgICAgIyBGaXJzdCBwYXRoLCBvcHRpbWl0aWNhbGx5IG1h
dGNoIGZvciBmdWxsbmFtZSwgZW1haWwgYW5kIGlyY19uaWNrbmFtZXMKKyAgICAgICAgYWNjb3Vu
dCA9IHNlbGYuYWNjb3VudF9ieV9lbWFpbChzdHJpbmcpIG9yIHNlbGYuY29udHJpYnV0b3JfYnlf
aXJjX25pY2tuYW1lKHN0cmluZykgb3Igc2VsZi5jb250cmlidXRvcl9ieV9uYW1lKHN0cmluZykK
KyAgICAgICAgaWYgYWNjb3VudDoKKyAgICAgICAgICAgIHJldHVybiBbYWNjb3VudF0sIDAKKwor
ICAgICAgICAjIFNlY29uZCBwYXRoLCBtdWNoIHNsb3dlciBzZWFyY2ggdXNpbmcgZWRpdC1kaXN0
YW5jZQorICAgICAgICBjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSA9IFtdCisgICAgICAgIG1p
bkRpc3RhbmNlID0gbGVuKHN0cmluZykgLyAyIC0gMQorICAgICAgICBmb3IgY29udHJpYnV0b3Ig
aW4gc2VsZi5jb250cmlidXRvcnMoKToKKyAgICAgICAgICAgIHRva2VucyA9IHNlbGYuX3Rva2Vu
aXplX2NvbnRyaWJ1dG9yX25hbWUoY29udHJpYnV0b3IpCisgICAgICAgICAgICBlZGl0ZGlzdGFu
Y2VzID0gW2VkaXRfZGlzdGFuY2UodG9rZW4sIHN0cmluZykgZm9yIHRva2VuIGluIHRva2VucyBp
ZiBhYnMobGVuKHRva2VuKSAtIGxlbihzdHJpbmcpKSA8PSBtaW5EaXN0YW5jZV0KKyAgICAgICAg
ICAgIGlmIG5vdCBlZGl0ZGlzdGFuY2VzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICBkaXN0YW5jZSA9IG1pbihlZGl0ZGlzdGFuY2VzKQorICAgICAgICAgICAgaWYgZGlz
dGFuY2UgPT0gbWluRGlzdGFuY2U6CisgICAgICAgICAgICAgICAgY29udHJpYnV0b3JXaXRoTWlu
RGlzdGFuY2UuYXBwZW5kKGNvbnRyaWJ1dG9yKQorICAgICAgICAgICAgZWxpZiBkaXN0YW5jZSA8
IG1pbkRpc3RhbmNlOgorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dG9yV2l0aE1pbkRpc3RhbmNl
ID0gW2NvbnRyaWJ1dG9yXQorICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2UK
KyAgICAgICAgaWYgbm90IGxlbihjb250cmlidXRvcldpdGhNaW5EaXN0YW5jZSk6CisgICAgICAg
ICAgICByZXR1cm4gW10sIGxlbihzdHJpbmcpCisgICAgICAgIHJldHVybiBjb250cmlidXRvcldp
dGhNaW5EaXN0YW5jZSwgbWluRGlzdGFuY2UKKwogICAgIGRlZiBhY2NvdW50X2J5X2xvZ2luKHNl
bGYsIGxvZ2luKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2xvZ2luX3RvX2FjY291bnRfbWFwKCku
Z2V0KGxvZ2luLmxvd2VyKCkpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NvbmZpZy9jb21taXR0ZXJzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb21taXR0ZXJzX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAxMDAyMzcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29tbWl0
dGVyc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtOTEsMyArOTEsMzUgQEAgY2xhc3Mg
Q29tbWl0dGVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGNvbW1pdHRlcl9saXN0LmNvbnRyaWJ1dG9yc19ieV9zZWFyY2hfc3RyaW5nKCd0ZXN0Jyks
IFtjb250cmlidXRvciwgY29tbWl0dGVyLCByZXZpZXdlcl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY29tbWl0dGVyX2xpc3QuY29udHJpYnV0b3JzX2J5X3NlYXJjaF9zdHJpbmcoJ3JhZCcp
LCBbcmV2aWV3ZXJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdHRlcl9saXN0LmNv
bnRyaWJ1dG9yc19ieV9zZWFyY2hfc3RyaW5nKCdUd28nKSwgW3Jldmlld2VyXSkKKworICAgIGRl
ZiBfYXNzZXJ0X2Z1enpfbWF0Y2goc2VsZiwgdGV4dCwgbmFtZV9vZl9leHBlY3RlZF9jb250cmli
dXRvciwgZXhwZWN0ZWRfZGlzdGFuY2UpOgorICAgICAgICBjb21taXR0ZXJzID0gQ29tbWl0dGVy
TGlzdCgpCisgICAgICAgIGV4cGVjdGVkX2NvbnRyaWJ1dG9ycyA9IFtjb21taXR0ZXJzLmNvbnRy
aWJ1dG9yX2J5X25hbWUobmFtZV9vZl9leHBlY3RlZF9jb250cmlidXRvcildIGlmIG5hbWVfb2Zf
ZXhwZWN0ZWRfY29udHJpYnV0b3IgZWxzZSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNv
bW1pdHRlcnMuY29udHJpYnV0b3JzX2J5X2Z1enp5X21hdGNoKHRleHQpLCAoZXhwZWN0ZWRfY29u
dHJpYnV0b3JzLCBleHBlY3RlZF9kaXN0YW5jZSkpCisKKyAgICBkZWYgdGVzdF9jb250cmlidXRv
cnNfYnlfZnV6enlfbWF0Y2goc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNo
KCdHZW9mZiBHYXJlbicsICdHZW9mZnJleSBHYXJlbicsIDMpCisgICAgICAgIHNlbGYuX2Fzc2Vy
dF9mdXp6X21hdGNoKCdLZW5uZXRoIENocmlzdGlhbnNlbicsICdLZW5uZXRoIFJvaGRlIENocmlz
dGlhbnNlbicsIDYpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdLZW4gUnVzc2Vs
bCcsICdLZW5uZXRoIFJ1c3NlbGwnLCA0KQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRj
aCgnRGF2ZSBIeWF0dCcsICdEYXZpZCBIeWF0dCcsIDIpCisgICAgICAgIHNlbGYuX2Fzc2VydF9m
dXp6X21hdGNoKCdEYXZlIEtpbHplcicsICdEYXZpZCBLaWx6ZXInLCAyKQorICAgICAgICBzZWxm
Ll9hc3NlcnRfZnV6el9tYXRjaCgnQW50dGkgInByaW50ZiIgS29pdmlzdG8nLCAnQW50dGkgS29p
dmlzdG8nLCA5KQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnU2FtbXkgV2Vpbmln
JywgJ1NhbSBXZWluaWcnLCAyKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnQW5k
cmVzIEtsaW5nJywgJ0FuZHJlYXMgS2xpbmcnLCAxKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6
el9tYXRjaCgnRGFyaW4gQWRsZXJcJycsICdEYXJpbiBBZGxlcicsIDEpCisgICAgICAgIHNlbGYu
X2Fzc2VydF9mdXp6X21hdGNoKCdKb2UgUGVjb3Jhcm8nLCAnSm9zZXBoIFBlY29yYXJvJywgMykK
KyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ0RyIERhbiBCZXJuc3RlaW4nLCAnRGFu
IEJlcm5zdGVpbicsIDMpCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdNaXR6cGV0
dGVsJywgJ0RhbiBCZXJuc3RlaW4nLCAwKQorICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRj
aCgncm5pd2FAd2Via2l0Lm9yZycsICdSeW9zdWtlIE5pd2EnLCAwKQorICAgICAgICBzZWxmLl9h
c3NlcnRfZnV6el9tYXRjaCgnQXAnLCAnQWxleGV5IFByb3NrdXJ5YWtvdicsIDApCisgICAgICAg
IHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdTYW0nLCAnU2FtIFdlaW5pZycsIDApCisgICAgICAg
IHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdkYXJpbicsICdEYXJpbiBBZGxlcicsIDApCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdoYXJyaXNvbicsICdEYXZpZCBIYXJyaXNvbics
IDApCisgICAgICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdvdGhlcnMnLCBOb25lLCA2KQor
ICAgICAgICBzZWxmLl9hc3NlcnRfZnV6el9tYXRjaCgnQlVJTEQgRklYJywgTm9uZSwgOSkKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ2J1dCBEYW4gQmVybnN0ZWluIGFsc28gcmV2
aWV3ZWQnLCBOb25lLCAzMSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ2Fza2Vk
IHRob3VnaHRmdWwgcXVlc3Rpb25zJywgTm9uZSwgMjYpCisgICAgICAgIHNlbGYuX2Fzc2VydF9m
dXp6X21hdGNoKCdidWlsZCBmaXggb2YgbWFjJywgTm9uZSwgMTYpCisgICAgICAgIHNlbGYuX2Fz
c2VydF9mdXp6X21hdGNoKCdhIHNwZWxsIGNoZWNrZXInLCBOb25lLCAxNSkKKyAgICAgICAgc2Vs
Zi5fYXNzZXJ0X2Z1enpfbWF0Y2goJ25vYm9keSwgYnVpbGQgZml4JywgTm9uZSwgMTcpCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9mdXp6X21hdGNoKCdOT0JPRFkgKGNocm9taXVtIGJ1aWxkIGZpeCkn
LCBOb25lLCAyNykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy92YWxp
ZGF0ZXJldmlld2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zdGVwcy92YWxpZGF0ZXJldmlld2VyLnB5CShyZXZpc2lvbiAxMDAyMzcpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlci5weQkod29ya2luZyBj
b3B5KQpAQCAtNDMsMTYgKzQzLDYgQEAgY2xhc3MgVmFsaWRhdGVSZXZpZXdlcihBYnN0cmFjdFN0
ZXApOgogICAgICAgICAgICAgT3B0aW9ucy5ub25faW50ZXJhY3RpdmUsCiAgICAgICAgIF0KIAot
ICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IG1vdmUgb250byBDaGFuZ2VMb2dFbnRy
eQotICAgIGRlZiBfaGFzX3ZhbGlkX3Jldmlld2VyKHNlbGYsIGNoYW5nZWxvZ19lbnRyeSk6Ci0g
ICAgICAgIGlmIGNoYW5nZWxvZ19lbnRyeS5yZXZpZXdlcigpOgotICAgICAgICAgICAgcmV0dXJu
IFRydWUKLSAgICAgICAgaWYgcmUuc2VhcmNoKCJ1bnJldmlld2VkIiwgY2hhbmdlbG9nX2VudHJ5
LmNvbnRlbnRzKCksIHJlLklHTk9SRUNBU0UpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAg
ICAgICAgaWYgcmUuc2VhcmNoKCJydWJiZXJbIC1dc3RhbXAiLCBjaGFuZ2Vsb2dfZW50cnkuY29u
dGVudHMoKSwgcmUuSUdOT1JFQ0FTRSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAg
ICByZXR1cm4gRmFsc2UKLQogICAgIGRlZiBydW4oc2VsZiwgc3RhdGUpOgogICAgICAgICAjIEZJ
WE1FOiBGb3Igbm93IHdlIGRpc2FibGUgdGhpcyBjaGVjayB3aGVuIGEgdXNlciBpcyBkcml2aW5n
IHRoZSBzY3JpcHQKICAgICAgICAgIyB0aGlzIGNoZWNrIGlzIHRvbyBkcmFjb25pYW4gKGFuZCB0
b28gcG9vcmx5IHRlc3RlZCkgdG8gZm9pc3QgdXBvbiB1c2Vycy4KQEAgLTYwLDcgKzUwLDcgQEAg
Y2xhc3MgVmFsaWRhdGVSZXZpZXdlcihBYnN0cmFjdFN0ZXApOgogICAgICAgICAgICAgcmV0dXJu
CiAgICAgICAgIGZvciBjaGFuZ2Vsb2dfcGF0aCBpbiBzZWxmLmNhY2hlZF9sb29rdXAoc3RhdGUs
ICJjaGFuZ2Vsb2dzIik6CiAgICAgICAgICAgICBjaGFuZ2Vsb2dfZW50cnkgPSBDaGFuZ2VMb2co
Y2hhbmdlbG9nX3BhdGgpLmxhdGVzdF9lbnRyeSgpCi0gICAgICAgICAgICBpZiBzZWxmLl9oYXNf
dmFsaWRfcmV2aWV3ZXIoY2hhbmdlbG9nX2VudHJ5KToKKyAgICAgICAgICAgIGlmIGNoYW5nZWxv
Z19lbnRyeS5oYXNfdmFsaWRfcmV2aWV3ZXIoKToKICAgICAgICAgICAgICAgICBjb250aW51ZQog
ICAgICAgICAgICAgcmV2aWV3ZXJfdGV4dCA9IGNoYW5nZWxvZ19lbnRyeS5yZXZpZXdlcl90ZXh0
KCkKICAgICAgICAgICAgIGlmIHJldmlld2VyX3RleHQ6CkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlcl91bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvdmFsaWRhdGVyZXZpZXdlcl91
bml0dGVzdC5weQkocmV2aXNpb24gMTAwMjM3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL3N0ZXBzL3ZhbGlkYXRlcmV2aWV3ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5jaGVja291dC5jaGFuZ2Vsb2cgaW1wb3J0IENoYW5nZUxvZ0VudHJ5Ci1m
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2Fw
dHVyZQotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucywgTW9j
a1Rvb2wKLWZyb20gd2Via2l0cHkudG9vbC5zdGVwcy52YWxpZGF0ZXJldmlld2VyIGltcG9ydCBW
YWxpZGF0ZVJldmlld2VyCi0KLWNsYXNzIFZhbGlkYXRlUmV2aWV3ZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKLSAgICBfYm9pbGVycGxhdGVfZW50cnkgPSAnJycyMDA5LTA4LTE5ICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KLQotICAgICAgICBSRVZJRVdfTElORQotCi0gICAgICAg
ICogU2NyaXB0cy9idWd6aWxsYS10b29sOgotJycnCi0KLSAgICBkZWYgX3Rlc3RfcmV2aWV3X3Rl
eHQoc2VsZiwgc3RlcCwgdGV4dCwgZXhwZWN0ZWQpOgotICAgICAgICBjb250ZW50cyA9IHNlbGYu
X2JvaWxlcnBsYXRlX2VudHJ5LnJlcGxhY2UoIlJFVklFV19MSU5FIiwgdGV4dCkKLSAgICAgICAg
ZW50cnkgPSBDaGFuZ2VMb2dFbnRyeShjb250ZW50cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzdGVwLl9oYXNfdmFsaWRfcmV2aWV3ZXIoZW50cnkpLCBleHBlY3RlZCkKLQotICAgIGRlZiB0
ZXN0X2hhc192YWxpZF9yZXZpZXdlcihzZWxmKToKLSAgICAgICAgc3RlcCA9IFZhbGlkYXRlUmV2
aWV3ZXIoTW9ja1Rvb2woKSwgTW9ja09wdGlvbnMoKSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZp
ZXdfdGV4dChzdGVwLCAiUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuIiwgVHJ1ZSkKLSAgICAgICAg
c2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwiLCBU
cnVlKSAjIE5vdCBwaWNreSBhYm91dCB0aGUgJy4nCi0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3
X3RleHQoc3RlcCwgIlJldmlld2VkIGJ5IEVyaWMuIiwgRmFsc2UpCi0gICAgICAgIHNlbGYuX3Rl
c3RfcmV2aWV3X3RleHQoc3RlcCwgIlJldmlld2VkIGJ5IEVyaWMgQyBTZWlkZWwuIiwgRmFsc2Up
Ci0gICAgICAgIHNlbGYuX3Rlc3RfcmV2aWV3X3RleHQoc3RlcCwgIlJ1YmJlci1zdGFtcGVkIGJ5
IEVyaWMuIiwgVHJ1ZSkKLSAgICAgICAgc2VsZi5fdGVzdF9yZXZpZXdfdGV4dChzdGVwLCAiUnVi
YmVyIHN0YW1wZWQgYnkgRXJpYy4iLCBUcnVlKQotICAgICAgICBzZWxmLl90ZXN0X3Jldmlld190
ZXh0KHN0ZXAsICJVbnJldmlld2VkIGJ1aWxkIGZpeC4iLCBUcnVlKQo=
</data>
<flag name="review"
          id="114134"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>