<?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>102561</bug_id>
          
          <creation_ts>2012-11-16 14:22:54 -0800</creation_ts>
          <short_desc>HTMLMediaElement::configureTextTracks should configure all text tracks</short_desc>
          <delta_ts>2012-11-19 15:07:25 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>feature-media-reviews</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>ojan</cc>
    
    <cc>pnormand</cc>
    
    <cc>silviapf</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>769675</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-16 14:22:54 -0800</bug_when>
    <thetext>The spec&apos;s &quot;automatic text track selection&quot; algorithm [1] select a track from &quot;... a list consisting of the text tracks in the media element&apos;s list of text tracks ...&quot;, but HTMLMediaElement::configureTextTracks currently only considers &lt;track&gt; elements. It should consider all track types.

[1] http://dev.w3.org/html5/spec/media-elements.html#perform-automatic-text-track-selection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769752</commentid>
    <comment_count>1</comment_count>
      <attachid>174777</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-16 16:12:49 -0800</bug_when>
    <thetext>Created attachment 174777
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769753</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 16:14:43 -0800</bug_when>
    <thetext>Attachment 174777 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/medi...&quot; exit_code: 1
Source/WebCore/html/HTMLMediaElement.cpp:2944:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 11 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>769765</commentid>
    <comment_count>3</comment_count>
      <attachid>174777</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-16 16:36:27 -0800</bug_when>
    <thetext>Comment on attachment 174777
Proposed patch

Attachment 174777 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14858637</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769772</commentid>
    <comment_count>4</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2012-11-16 16:50:50 -0800</bug_when>
    <thetext>The layout test result has this line:
&quot;ReferenceError: Can&apos;t find variable: showing&quot;

I think something has gone wrong there and there&apos;s a bug in the layout test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769787</commentid>
    <comment_count>5</comment_count>
      <attachid>174787</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-16 17:04:00 -0800</bug_when>
    <thetext>Created attachment 174787
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769788</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-16 17:05:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; The layout test result has this line:
&gt; &quot;ReferenceError: Can&apos;t find variable: showing&quot;
&gt; 
&gt; I think something has gone wrong there and there&apos;s a bug in the layout test.

Oops I used the wrong version of the patch, thanks!

Attached new patch with correct test and style nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770430</commentid>
    <comment_count>7</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2012-11-19 00:40:53 -0800</bug_when>
    <thetext>FWIW: looks good to me

Just wondering: would it be at all possible to add a media resource that has an in-band track and that we can base a layout test for TextTrack on?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770803</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-19 09:09:57 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; FWIW: looks good to me
&gt; 
&gt; Just wondering: would it be at all possible to add a media resource that has an in-band track and that we can base a layout test for TextTrack on?

We already have LayoutTests/media/content/counting-captioned.mov, which has in-band CEA 608 captions, but I think only Apple&apos;s media ending supports it currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770806</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-19 09:12:53 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; 
&gt; We already have LayoutTests/media/content/counting-captioned.mov, which has in-band CEA 608 captions, but I think only Apple&apos;s media ending supports it currently.

And WebKit doesn&apos;t yet have code to integrate the in-band tracks supported by a platform media engine into the out-of-band and dynamically created tracks, so the caption track in this file doesn&apos;t show up as a TextTrack, but that is my next task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770928</commentid>
    <comment_count>10</comment_count>
      <attachid>174787</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-11-19 12:16:45 -0800</bug_when>
    <thetext>Comment on attachment 174787
Updated patch

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

Patch looks good, bonus points for the smart pointers. I just have two small questions. Not setting r+ yet because of the test result. See below.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2877
&gt; +    RefPtr&lt;TextTrack&gt; trackEnable = 0;

I&apos;m not a native English speaker so feel free to ignore this comment :) Would trackToEnable be a better name? I was just a bit confused by this new trackEnable name.

&gt; LayoutTests/media/track/track-mode-not-changed-by-new-track-expected.txt:53
&gt; +EXPECTED (track3.mode == &apos;hidden&apos;), OBSERVED &apos;showing&apos; FAIL

Is it normal to have that expectation here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770932</commentid>
    <comment_count>11</comment_count>
      <attachid>174787</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-19 12:20:27 -0800</bug_when>
    <thetext>Comment on attachment 174787
Updated patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2879
&gt; +    RefPtr&lt;TextTrack&gt; defaultTrack = 0;
&gt; +    RefPtr&lt;TextTrack&gt; fallbackTrack = 0;

Just a drive by suggestion after this landed in my bugzilla mail, but I think that the default constructor for RefPtr is &quot;ALWAYS_INLINE RefPtr() : m_ptr(0) { }&quot;, so you can probably omit &quot;= 0&quot; from all these declarations, as it&apos;s implied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770944</commentid>
    <comment_count>12</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-11-19 12:33:27 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; 
&gt; &gt; We already have LayoutTests/media/content/counting-captioned.mov, which has in-band CEA 608 captions, but I think only Apple&apos;s media ending supports it currently.
&gt; 
&gt; And WebKit doesn&apos;t yet have code to integrate the in-band tracks supported by a platform media engine into the out-of-band and dynamically created tracks, so the caption track in this file doesn&apos;t show up as a TextTrack, but that is my next task.

From the GStreamer backend POV it would be nice as well to advertize the text tracks exposed by the GStreamer playbin element to the media element. From playbin we can get the number of text tracks but I&apos;m afraid we can only get the data from the currently selected track. Anyway, something to investigate further at some point, I didn&apos;t mean to hijack this bug :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770952</commentid>
    <comment_count>13</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2012-11-19 12:39:25 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt;&gt;
&gt; &gt; Just wondering: would it be at all possible to add a media resource that has an in-band track and that we can base a layout test for TextTrack on?
&gt; 
&gt; We already have LayoutTests/media/content/counting-captioned.mov, which has in-band CEA 608 captions, but I think only Apple&apos;s media ending supports it currently.

Fair enough. I&apos;ll create myself a bug to add a WebM file with in-band WebVTT and have that work the same way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771040</commentid>
    <comment_count>14</comment_count>
      <attachid>175044</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-19 14:43:22 -0800</bug_when>
    <thetext>Created attachment 175044
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771042</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-19 14:44:54 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 174787 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174787&amp;action=review
&gt; 
&gt; Patch looks good, bonus points for the smart pointers. I just have two small questions. Not setting r+ yet because of the test result. See below.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2877
&gt; &gt; +    RefPtr&lt;TextTrack&gt; trackEnable = 0;
&gt; 
&gt; I&apos;m not a native English speaker so feel free to ignore this comment :) Would trackToEnable be a better name? I was just a bit confused by this new trackEnable name.
&gt; 
  Great suggestion, changed.

&gt; &gt; LayoutTests/media/track/track-mode-not-changed-by-new-track-expected.txt:53
&gt; &gt; +EXPECTED (track3.mode == &apos;hidden&apos;), OBSERVED &apos;showing&apos; FAIL
&gt; 
&gt; Is it normal to have that expectation here?
&gt;
  No, the test was incorrect. Fixed.


(In reply to comment #11)
&gt; (From update of attachment 174787 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174787&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2879
&gt; &gt; +    RefPtr&lt;TextTrack&gt; defaultTrack = 0;
&gt; &gt; +    RefPtr&lt;TextTrack&gt; fallbackTrack = 0;
&gt; 
&gt; Just a drive by suggestion after this landed in my bugzilla mail, but I think that the default constructor for RefPtr is &quot;ALWAYS_INLINE RefPtr() : m_ptr(0) { }&quot;, so you can probably omit &quot;= 0&quot; from all these declarations, as it&apos;s implied.

Thanks, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771047</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-19 14:45:55 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; 
&gt; &gt; &gt; We already have LayoutTests/media/content/counting-captioned.mov, which has in-band CEA 608 captions, but I think only Apple&apos;s media ending supports it currently.
&gt; &gt; 
&gt; &gt; And WebKit doesn&apos;t yet have code to integrate the in-band tracks supported by a platform media engine into the out-of-band and dynamically created tracks, so the caption track in this file doesn&apos;t show up as a TextTrack, but that is my next task.
&gt; 
&gt; From the GStreamer backend POV it would be nice as well to advertize the text tracks exposed by the GStreamer playbin element to the media element. From playbin we can get the number of text tracks but I&apos;m afraid we can only get the data from the currently selected track. Anyway, something to investigate further at some point, I didn&apos;t mean to hijack this bug :)

My next couple of patches will make it possible for someone to hook this up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771049</commentid>
    <comment_count>17</comment_count>
      <attachid>175044</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-11-19 14:48:41 -0800</bug_when>
    <thetext>Comment on attachment 175044
Updated patch

Ok!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771074</commentid>
    <comment_count>18</comment_count>
      <attachid>175044</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-19 15:07:19 -0800</bug_when>
    <thetext>Comment on attachment 175044
Updated patch

Clearing flags on attachment: 175044

Committed r135202: &lt;http://trac.webkit.org/changeset/135202&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771075</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-19 15:07:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174777</attachid>
            <date>2012-11-16 16:12:49 -0800</date>
            <delta_ts>2012-11-16 17:04:00 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>refactor_patch_3.txt</filename>
            <type>text/plain</type>
            <size>24393</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTExLTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEhUTUxNZWRpYUVsZW1l
bnQ6OmNvbmZpZ3VyZVRleHRUcmFja3Mgc2hvdWxkIGNvbmZpZ3VyZSBhbGwgdGV4dCB0cmFja3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjU2MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgdHJhY2stbW9kZS1ub3QtY2hhbmdlZC1ieS1uZXctdHJhY2suaHRtbCB3YXMgdXBkYXRl
ZCB0byB0ZXN0IHRoZSBjaGFuZ2VzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVD
aGFuZ2VkKTogSFRNTFRyYWNrRWxlbWVudCAtPiBUZXh0VHJhY2suCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojp3aWxsUmVtb3ZlVHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0dyb3VwKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlv
bkFuZFN1YnRpdGxlVHJhY2tzQXNVbmNvbmZpZ3VyZWQpOiBEaXR0by4KKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpIVE1MVHJhY2tFbGVtZW50
KTogTW92ZSBoYXNCZWVuQ29uZmlndXJlZCBkb3duIHRvIFRleHRUcmFjay4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTogaXNEZWZhdWx0IGlzIHN0
b3JlZCBvbiBUZXh0VHJhY2suCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50Ojpl
bnN1cmVUcmFjayk6IExvYWRhYmxlVGV4dFRyYWNrIGNvbnN0cnVjdG9yIGRvZXNuJ3QgdGFrZSAK
KyAgICAgICAgICAgICJkZWZhdWx0IiBhcmd1bWVudC4KKyAgICAgICAgKiBodG1sL0hUTUxUcmFj
a0VsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVUZXh0VHJhY2s6OkxvYWRhYmxlVGV4dFRyYWNr
KTogSW5pdGlhbGl6ZSBtX2lzRGVmYXVsdCB0byBmYWxzZS4KKyAgICAgICAgKiBodG1sL3RyYWNr
L0xvYWRhYmxlVGV4dFRyYWNrLmg6IAorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc0Rl
ZmF1bHQpOiBPdmVycmlkZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIGEgdHJh
Y2sgZWxlbWVudAorICAgICAgICAgICAgY2FuIGJlIGZsYWdnZWQgYXMgZGVmYXVsdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFjazo6c2V0SXNEZWZhdWx0KTogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6
OlRleHRUcmFjayk6IEluaXRpYWxpemUgbV9oYXNCZWVuQ29uZmlndXJlZC4KKyAgICAgICAgKiBo
dG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpoYXNC
ZWVuQ29uZmlndXJlZCk6IE5ldywgbW92ZWQgZnJvbSBIVE1MVHJhY2tFbGVtZW50IHNvIG90aGVy
IGNvZGUgZG9lc24ndAorICAgICAgICAgICAgbmVlZCBrbm93IHdoYXQgdHlwZSBvZiB0cmFjayBp
dCBpcyBjYWxsaW5nLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRIYXNCZWVuQ29u
ZmlndXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc0RlZmF1bHQp
OiBCYXNlLCBkbyBub3RoaW5nLCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIG9ubHkgTG9hZGFibGVU
ZXh0VHJhY2sKKyAgICAgICAgICAgIGNhbiBiZSAiZGVmYXVsdCIuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2s6OnNldElzRGVmYXVsdCk6IERpdHRvLgorCiAyMDEyLTExLTE2ICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBEZXBsb3kgU2NyaXB0V3JhcHBhYmxl
IHRvIG1vcmUgYWx3YXlzLXdyYXBwZWQgb2JqZWN0cwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzQ3NjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIyLDcgKzEz
MjIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1hcmsgdGhp
cyB0cmFjayBhcyAiY29uZmlndXJlZCIgc28gY29uZmlndXJlVGV4dFRyYWNrcyB3b24ndCBjaGFu
Z2UgdGhlIG1vZGUgYWdhaW4uCi0gICAgICAgICAgICB0cmFja0VsZW1lbnQtPnNldEhhc0JlZW5D
b25maWd1cmVkKHRydWUpOworICAgICAgICAgICAgdHJhY2stPnNldEhhc0JlZW5Db25maWd1cmVk
KHRydWUpOwogICAgICAgICAgICAgaWYgKHRyYWNrLT5tb2RlKCkgIT0gVGV4dFRyYWNrOjpkaXNh
YmxlZEtleXdvcmQoKSkgewogICAgICAgICAgICAgICAgIGlmICh0cmFja0VsZW1lbnQtPnJlYWR5
U3RhdGUoKSA9PSBIVE1MVHJhY2tFbGVtZW50OjpMT0FERUQpCiAgICAgICAgICAgICAgICAgICAg
IHRleHRUcmFja0FkZEN1ZXModHJhY2ssIHRyYWNrLT5jdWVzKCkpOwpAQCAtMjc2NCwyMiArMjc2
NCw2IEBAIFRleHRUcmFja0xpc3QqIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmEKICAgICByZXR1
cm4gbV90ZXh0VHJhY2tzLmdldCgpOwogfQogCi1IVE1MVHJhY2tFbGVtZW50KiBIVE1MTWVkaWFF
bGVtZW50OjpzaG93aW5nVHJhY2tXaXRoU2FtZUtpbmQoSFRNTFRyYWNrRWxlbWVudCogdHJhY2tF
bGVtZW50KSBjb25zdAotewotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHRyYWNrRWxlbWVu
dCA9PSBub2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghbm9kZS0+aGFz
VGFnTmFtZSh0cmFja1RhZykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBIVE1M
VHJhY2tFbGVtZW50KiBzaG93aW5nVHJhY2sgPSBzdGF0aWNfY2FzdDxIVE1MVHJhY2tFbGVtZW50
Kj4obm9kZSk7Ci0gICAgICAgIGlmIChzaG93aW5nVHJhY2stPmtpbmQoKSA9PSB0cmFja0VsZW1l
bnQtPmtpbmQoKSAmJiBzaG93aW5nVHJhY2stPnRyYWNrKCktPm1vZGUoKSA9PSBUZXh0VHJhY2s6
OnNob3dpbmdLZXl3b3JkKCkpCi0gICAgICAgICAgICByZXR1cm4gc2hvd2luZ1RyYWNrOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRB
ZGRUcmFjayhIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQpCiB7CiAgICAgQVNTRVJUKHRy
YWNrRWxlbWVudC0+aGFzVGFnTmFtZSh0cmFja1RhZykpOwpAQCAtMjgxNywxNCArMjgwMSwxNSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndpbGxSZW1vdmVUcmFjayhICiAgICAgfQogI2VuZGlm
CiAKLSAgICB0cmFja0VsZW1lbnQtPnNldEhhc0JlZW5Db25maWd1cmVkKGZhbHNlKTsKKyAgICBS
ZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRyYWNrKCk7CisgICAg
aWYgKCF0ZXh0VHJhY2spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZXh0VHJhY2stPnNl
dEhhc0JlZW5Db25maWd1cmVkKGZhbHNlKTsKIAogICAgIGlmICghbV90ZXh0VHJhY2tzKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gdHJh
Y2tFbGVtZW50LT50cmFjaygpOwotICAgIGlmICghdGV4dFRyYWNrKQotICAgICAgICByZXR1cm47
CiAKICAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0IHRyYWNrcwog
ICAgIC8vIFdoZW4gYSB0cmFjayBlbGVtZW50J3MgcGFyZW50IGVsZW1lbnQgY2hhbmdlcyBhbmQg
dGhlIG9sZCBwYXJlbnQgd2FzIGEgbWVkaWEgZWxlbWVudCwgCkBAIC0yODgxLDcgKzI4NjYsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFjCiAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGxhbmd1YWdlczsKICAgICAgICAgbGFuZ3VhZ2VzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZ3JvdXAudHJhY2tzLnNpemUoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZ3JvdXAudHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3JjTGFu
Z3VhZ2UgPSBncm91cC50cmFja3NbaV0tPnRyYWNrKCktPmxhbmd1YWdlKCk7CisgICAgICAgICAg
ICBTdHJpbmcgc3JjTGFuZ3VhZ2UgPSBncm91cC50cmFja3NbaV0tPmxhbmd1YWdlKCk7CiAgICAg
ICAgICAgICBpZiAoc3JjTGFuZ3VhZ2UubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgbGFuZ3Vh
Z2VzLmFwcGVuZChzcmNMYW5ndWFnZSk7CiAgICAgICAgIH0KQEAgLTI4ODksMTIgKzI4NzQsMTEg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhYwogICAgIH0KIAogICAg
IC8vIEZpcnN0LCBmaW5kIHRoZSB0cmFjayBpbiB0aGUgZ3JvdXAgdGhhdCBzaG91bGQgYmUgZW5h
YmxlZCAoaWYgYW55KS4KLSAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnRUb0VuYWJs
ZSA9IDA7Ci0gICAgSFRNTFRyYWNrRWxlbWVudCogZGVmYXVsdFRyYWNrID0gMDsKLSAgICBIVE1M
VHJhY2tFbGVtZW50KiBmYWxsYmFja1RyYWNrID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
IXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGkgPCBncm91cC50cmFja3Muc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50ID0gZ3JvdXAudHJhY2tzW2ld
OwotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRy
YWNrKCk7CisgICAgUmVmUHRyPFRleHRUcmFjaz4gdHJhY2tFbmFibGUgPSAwOworICAgIFJlZlB0
cjxUZXh0VHJhY2s+IGRlZmF1bHRUcmFjayA9IDA7CisgICAgUmVmUHRyPFRleHRUcmFjaz4gZmFs
bGJhY2tUcmFjayA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7ICF0cmFja0VuYWJsZSAmJiBp
IDwgZ3JvdXAudHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2s+
IHRleHRUcmFjayA9IGdyb3VwLnRyYWNrc1tpXTsKIAogICAgICAgICBpZiAodXNlcklzSW50ZXJl
c3RlZEluVGhpc1RyYWNrS2luZCh0ZXh0VHJhY2stPmtpbmQoKSkpIHsKICAgICAgICAgICAgIC8v
ICogSWYgdGhlIHRleHQgdHJhY2sga2luZCBpcyB7IFtzdWJ0aXRsZXMgb3IgY2FwdGlvbnNdIFtk
ZXNjcmlwdGlvbnNdIH0gYW5kIHRoZSB1c2VyIGhhcyBpbmRpY2F0ZWQgYW4gaW50ZXJlc3QgaW4g
aGF2aW5nIGEKQEAgLTI5MDgsMzkgKzI4OTIsMzggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpj
b25maWd1cmVUZXh0VHJhYwogICAgICAgICAgICAgLy8gICAgTGV0IHRoZSB0ZXh0IHRyYWNrIG1v
ZGUgYmUgc2hvd2luZy4KICAgICAgICAgICAgIGlmIChiZXN0TWF0Y2hpbmdMYW5ndWFnZS5sZW5n
dGgoKSkgewogICAgICAgICAgICAgICAgIGlmICh0ZXh0VHJhY2stPmxhbmd1YWdlKCkgPT0gYmVz
dE1hdGNoaW5nTGFuZ3VhZ2UpCi0gICAgICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudFRvRW5h
YmxlID0gdHJhY2tFbGVtZW50OwotICAgICAgICAgICAgfSBlbHNlIGlmICh0cmFja0VsZW1lbnQt
PmlzRGVmYXVsdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyYWNrRW5hYmxlID0gdGV4dFRy
YWNrOworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0VHJhY2stPmlzRGVmYXVsdCgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgaXMgaW50ZXJlc3RlZCBpbiB0aGlzIHR5cGUgb2Yg
dHJhY2ssIGJ1dCB0aGVpciBsYW5ndWFnZSBwcmVmZXJlbmNlIGRvZXNuJ3QgbWF0Y2ggYW55IHRy
YWNrIHNvIHdlIHdpbGwKICAgICAgICAgICAgICAgICAvLyBlbmFibGUgdGhlICdkZWZhdWx0JyB0
cmFjay4KLSAgICAgICAgICAgICAgICBkZWZhdWx0VHJhY2sgPSB0cmFja0VsZW1lbnQ7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdFRyYWNrID0gdGV4dFRyYWNrOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgZmlyc3QgdHJhY2sgdGhhdCBkb2Vzbid0IG1hdGNo
IGxhbmd1YWdlIG9yIGhhdmUgJ2RlZmF1bHQnIHRvIHBvdGVudGlhbGx5IHVzZSBhcyBmYWxsYmFj
ay4KICAgICAgICAgICAgIGlmICghZmFsbGJhY2tUcmFjaykKLSAgICAgICAgICAgICAgICBmYWxs
YmFja1RyYWNrID0gdHJhY2tFbGVtZW50OwotICAgICAgICB9IGVsc2UgaWYgKCFncm91cC52aXNp
YmxlVHJhY2sgJiYgIWRlZmF1bHRUcmFjayAmJiB0cmFja0VsZW1lbnQtPmlzRGVmYXVsdCgpKSB7
CisgICAgICAgICAgICAgICAgZmFsbGJhY2tUcmFjayA9IHRleHRUcmFjazsKKyAgICAgICAgfSBl
bHNlIGlmICghZ3JvdXAudmlzaWJsZVRyYWNrICYmICFkZWZhdWx0VHJhY2sgJiYgdGV4dFRyYWNr
LT5pc0RlZmF1bHQoKSkgewogICAgICAgICAgICAgLy8gKiBJZiB0aGUgdHJhY2sgZWxlbWVudCBo
YXMgYSBkZWZhdWx0IGF0dHJpYnV0ZSBzcGVjaWZpZWQsIGFuZCB0aGVyZSBpcyBubyBvdGhlciB0
ZXh0IHRyYWNrIGluIHRoZSBtZWRpYQogICAgICAgICAgICAgLy8gZWxlbWVudCdzIGxpc3Qgb2Yg
dGV4dCB0cmFja3Mgd2hvc2UgdGV4dCB0cmFjayBtb2RlIGlzIHNob3dpbmcgb3Igc2hvd2luZyBi
eSBkZWZhdWx0CiAgICAgICAgICAgICAvLyAgICBMZXQgdGhlIHRleHQgdHJhY2sgbW9kZSBiZSBz
aG93aW5nIGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICBkZWZhdWx0VHJhY2sgPSB0cmFja0VsZW1l
bnQ7CisgICAgICAgICAgICBkZWZhdWx0VHJhY2sgPSB0ZXh0VHJhY2suZ2V0KCk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoIXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGRlZmF1bHRUcmFj
aykKLSAgICAgICAgdHJhY2tFbGVtZW50VG9FbmFibGUgPSBkZWZhdWx0VHJhY2s7CisgICAgaWYg
KCF0cmFja0VuYWJsZSAmJiBkZWZhdWx0VHJhY2spCisgICAgICAgIHRyYWNrRW5hYmxlID0gZGVm
YXVsdFRyYWNrOwogCiAgICAgLy8gSWYgbm8gdHJhY2sgbWF0Y2hlcyB0aGUgdXNlcidzIHByZWZl
cnJlZCBsYW5ndWFnZSBhbmQgbm9uIHdhcyBtYXJrZWQgJ2RlZmF1bHQnLCBlbmFibGUgdGhlIGZp
cnN0IHRyYWNrCiAgICAgLy8gYmVjYXVzZSB0aGUgdXNlciBoYXMgZXhwbGljaXRseSBzdGF0ZWQg
YSBwcmVmZXJlbmNlIGZvciB0aGlzIGtpbmQgb2YgdHJhY2suCi0gICAgaWYgKCF0cmFja0VsZW1l
bnRUb0VuYWJsZSAmJiBmYWxsYmFja1RyYWNrKQotICAgICAgICB0cmFja0VsZW1lbnRUb0VuYWJs
ZSA9IGZhbGxiYWNrVHJhY2s7CisgICAgaWYgKCF0cmFja0VuYWJsZSAmJiBmYWxsYmFja1RyYWNr
KQorICAgICAgICB0cmFja0VuYWJsZSA9IGZhbGxiYWNrVHJhY2s7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGdyb3VwLnRyYWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MVHJh
Y2tFbGVtZW50KiB0cmFja0VsZW1lbnQgPSBncm91cC50cmFja3NbaV07Ci0gICAgICAgIFJlZlB0
cjxUZXh0VHJhY2s+IHRleHRUcmFjayA9IHRyYWNrRWxlbWVudC0+dHJhY2soKTsKKyAgICAgICAg
UmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gZ3JvdXAudHJhY2tzW2ldOwogICAgICAgICAK
LSAgICAgICAgaWYgKHRyYWNrRWxlbWVudFRvRW5hYmxlID09IHRyYWNrRWxlbWVudCkgeworICAg
ICAgICBpZiAodHJhY2tFbmFibGUgPT0gdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICB0ZXh0VHJh
Y2stPnNldE1vZGUoVGV4dFRyYWNrOjpzaG93aW5nS2V5d29yZCgpKTsKLSAgICAgICAgICAgIGlm
IChkZWZhdWx0VHJhY2sgPT0gdHJhY2tFbGVtZW50KQorICAgICAgICAgICAgaWYgKGRlZmF1bHRU
cmFjayA9PSB0ZXh0VHJhY2spCiAgICAgICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRTaG93aW5n
QnlEZWZhdWx0KHRydWUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHRleHRU
cmFjay0+c2hvd2luZ0J5RGVmYXVsdCgpKSB7CkBAIC0yOTU0LDEyICsyOTM3LDExIEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWMKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmICh0cmFja0VsZW1lbnRUb0VuYWJsZSAmJiBncm91cC5kZWZhdWx0VHJhY2sgJiYgZ3Jv
dXAuZGVmYXVsdFRyYWNrICE9IHRyYWNrRWxlbWVudFRvRW5hYmxlKSB7Ci0gICAgICAgIFJlZlB0
cjxUZXh0VHJhY2s+IHRleHRUcmFjayA9IGdyb3VwLmRlZmF1bHRUcmFjay0+dHJhY2soKTsKLSAg
ICAgICAgaWYgKHRleHRUcmFjayAmJiB0ZXh0VHJhY2stPnNob3dpbmdCeURlZmF1bHQoKSkgewot
ICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRTaG93aW5nQnlEZWZhdWx0KGZhbHNlKTsKLSAgICAg
ICAgICAgIHRleHRUcmFjay0+c2V0TW9kZShUZXh0VHJhY2s6OmhpZGRlbktleXdvcmQoKSk7Ci0g
ICAgICAgIH0KKyAgICBpZiAodHJhY2tFbmFibGUgJiYgZ3JvdXAuZGVmYXVsdFRyYWNrICYmIGdy
b3VwLmRlZmF1bHRUcmFjayAhPSB0cmFja0VuYWJsZSkgeworICAgICAgICBpZiAoZ3JvdXAuZGVm
YXVsdFRyYWNrICYmIGdyb3VwLmRlZmF1bHRUcmFjay0+c2hvd2luZ0J5RGVmYXVsdCgpKSB7Cisg
ICAgICAgICAgICBncm91cC5kZWZhdWx0VHJhY2stPnNldFNob3dpbmdCeURlZmF1bHQoZmFsc2Up
OworICAgICAgICAgICAgZ3JvdXAuZGVmYXVsdFRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6aGlk
ZGVuS2V5d29yZCgpKTsKKyAgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTI5NzEsMTIgKzI5NTMs
MTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhYwogICAgIFRyYWNr
R3JvdXAgbWV0YWRhdGFUcmFja3MoVHJhY2tHcm91cDo6TWV0YWRhdGEpOwogICAgIFRyYWNrR3Jv
dXAgb3RoZXJUcmFja3MoVHJhY2tHcm91cDo6T3RoZXIpOwogCi0gICAgZm9yIChOb2RlKiBub2Rl
ID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKQotICAgICAgICAgICAgY29udGlu
dWU7CisgICAgaWYgKCFtX3RleHRUcmFja3MpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBI
VE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVHJhY2tFbGVt
ZW50Kj4obm9kZSk7Ci0gICAgICAgIFJlZlB0cjxUZXh0VHJhY2s+IHRleHRUcmFjayA9IHRyYWNr
RWxlbWVudC0+dHJhY2soKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFRyYWNr
cy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sg
PSBtX3RleHRUcmFja3MtPml0ZW0oaSk7CiAgICAgICAgIGlmICghdGV4dFRyYWNrKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTI5OTQsOSArMjk3NSw5IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlVGV4dFRyYWMKICAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9ICZvdGhl
clRyYWNrczsKIAogICAgICAgICBpZiAoIWN1cnJlbnRHcm91cC0+dmlzaWJsZVRyYWNrICYmIHRl
eHRUcmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6c2hvd2luZ0tleXdvcmQoKSkKLSAgICAgICAg
ICAgIGN1cnJlbnRHcm91cC0+dmlzaWJsZVRyYWNrID0gdHJhY2tFbGVtZW50OwotICAgICAgICBp
ZiAoIWN1cnJlbnRHcm91cC0+ZGVmYXVsdFRyYWNrICYmIHRyYWNrRWxlbWVudC0+aXNEZWZhdWx0
KCkpCi0gICAgICAgICAgICBjdXJyZW50R3JvdXAtPmRlZmF1bHRUcmFjayA9IHRyYWNrRWxlbWVu
dDsKKyAgICAgICAgICAgIGN1cnJlbnRHcm91cC0+dmlzaWJsZVRyYWNrID0gdGV4dFRyYWNrOwor
ICAgICAgICBpZiAoIWN1cnJlbnRHcm91cC0+ZGVmYXVsdFRyYWNrICYmIHRleHRUcmFjay0+aXNE
ZWZhdWx0KCkpCisgICAgICAgICAgICBjdXJyZW50R3JvdXAtPmRlZmF1bHRUcmFjayA9IHRleHRU
cmFjazsKIAogICAgICAgICAvLyBEbyBub3QgYWRkIHRoaXMgdHJhY2sgdG8gdGhlIGdyb3VwIGlm
IGl0IGhhcyBhbHJlYWR5IGJlZW4gYXV0b21hdGljYWxseSBjb25maWd1cmVkCiAgICAgICAgIC8v
IGFzIHdlIG9ubHkgd2FudCB0byBjYWxsIGNvbmZpZ3VyZVRleHRUcmFjayBvbmNlIHBlciB0cmFj
ayBzbyB0aGF0IGFkZGluZyBhbm90aGVyIApAQCAtMzAwNCwxMiArMjk4NSwxMiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFjCiAgICAgICAgIC8vIHRoYXQgc2hvdWxk
IGJlIGNoYW5nZWQgYnkgdGhlIG5ldyBhZGRpdGlvbi4gRm9yIGV4YW1wbGUgYWxsIG1ldGFkYXRh
IHRyYWNrcyBhcmUgCiAgICAgICAgIC8vIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFuZCB3ZSBkb24n
dCB3YW50IGEgdHJhY2sgdGhhdCBoYXMgYmVlbiBlbmFibGVkIGJ5IHNjcmlwdCAKICAgICAgICAg
Ly8gdG8gYmUgZGlzYWJsZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbmV3IG1ldGFkYXRhIHRyYWNr
IGlzIGFkZGVkIGxhdGVyLgotICAgICAgICBpZiAodHJhY2tFbGVtZW50LT5oYXNCZWVuQ29uZmln
dXJlZCgpKQorICAgICAgICBpZiAodGV4dFRyYWNrLT5oYXNCZWVuQ29uZmlndXJlZCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAodGV4dFRyYWNrLT5sYW5n
dWFnZSgpLmxlbmd0aCgpKQogICAgICAgICAgICAgY3VycmVudEdyb3VwLT5oYXNTcmNMYW5nID0g
dHJ1ZTsKLSAgICAgICAgY3VycmVudEdyb3VwLT50cmFja3MuYXBwZW5kKHRyYWNrRWxlbWVudCk7
CisgICAgICAgIGN1cnJlbnRHcm91cC0+dHJhY2tzLmFwcGVuZCh0ZXh0VHJhY2spOwogICAgIH0K
ICAgICAKICAgICBpZiAoY2FwdGlvbkFuZFN1YnRpdGxlVHJhY2tzLnRyYWNrcy5zaXplKCkpCkBA
IC00MjU4LDcgKzQyMzksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1hcmtDYXB0aW9uQW5k
U3ViCiAgICAgICAgIFN0cmluZyBraW5kID0gdGV4dFRyYWNrLT5raW5kKCk7CiAKICAgICAgICAg
aWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCkgfHwga2luZCA9PSBUZXh0
VHJhY2s6OmNhcHRpb25zS2V5d29yZCgpKQotICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRI
YXNCZWVuQ29uZmlndXJlZChmYWxzZSk7CisgICAgICAgICAgICB0ZXh0VHJhY2stPnNldEhhc0Jl
ZW5Db25maWd1cmVkKGZhbHNlKTsKICAgICB9CiAgICAgY29uZmlndXJlVGV4dFRyYWNrcygpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDEz
NDc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzAsOSArMjMwLDkgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICBWZWN0b3I8SFRNTFRyYWNrRWxlbWVudCo+IHRyYWNrczsKLSAgICAgICAgSFRN
TFRyYWNrRWxlbWVudCogdmlzaWJsZVRyYWNrOwotICAgICAgICBIVE1MVHJhY2tFbGVtZW50KiBk
ZWZhdWx0VHJhY2s7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gdHJhY2tzOwor
ICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB2aXNpYmxlVHJhY2s7CisgICAgICAgIFJlZlB0cjxU
ZXh0VHJhY2s+IGRlZmF1bHRUcmFjazsKICAgICAgICAgR3JvdXBLaW5kIGtpbmQ7CiAgICAgICAg
IGJvb2wgaGFzU3JjTGFuZzsKICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VHJhY2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
cmFja0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzQ3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUcmFja0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHN0
YXRpYyBTdHJpbmcgdXJsRm9yTG9nZ2luZyhjb25zdCBLVVJMJiAKICAgICAKIGlubGluZSBIVE1M
VHJhY2tFbGVtZW50OjpIVE1MVHJhY2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQotICAgICwgbV9oYXNCZWVuQ29uZmlndXJlZChmYWxzZSkKIHsKICAgICBMT0coTWVkaWEs
ICJIVE1MVHJhY2tFbGVtZW50OjpIVE1MVHJhY2tFbGVtZW50IC0gJXAiLCB0aGlzKTsKICAgICBB
U1NFUlQoaGFzVGFnTmFtZSh0cmFja1RhZykpOwpAQCAtMTA5LDYgKzEwOCw4IEBAIHZvaWQgSFRN
TFRyYWNrRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY28KICAgICAgICAgICAgIHRyYWNrKCktPnNl
dExhYmVsKGF0dHJpYnV0ZS52YWx1ZSgpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLm5h
bWUoKSA9PSBzcmNsYW5nQXR0cikKICAgICAgICAgICAgIHRyYWNrKCktPnNldExhbmd1YWdlKGF0
dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBk
ZWZhdWx0QXR0cikKKyAgICAgICAgICAgIHRyYWNrKCktPnNldElzRGVmYXVsdCghYXR0cmlidXRl
LmlzTnVsbCgpKTsKICAgICB9CiAKICAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBvbmxvYWRB
dHRyKQpAQCAtMTc2LDcgKzE3Nyw3IEBAIExvYWRhYmxlVGV4dFRyYWNrKiBIVE1MVHJhY2tFbGVt
ZW50OjplbnMKICAgICAgICAgU3RyaW5nIGtpbmQgPSBnZXRBdHRyaWJ1dGUoa2luZEF0dHIpOwog
ICAgICAgICBpZiAoIVRleHRUcmFjazo6aXNWYWxpZEtpbmRLZXl3b3JkKGtpbmQpKQogICAgICAg
ICAgICAga2luZCA9IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpOwotICAgICAgICBtX3Ry
YWNrID0gTG9hZGFibGVUZXh0VHJhY2s6OmNyZWF0ZSh0aGlzLCBraW5kLCBsYWJlbCgpLCBzcmNs
YW5nKCksIGlzRGVmYXVsdCgpKTsKKyAgICAgICAgbV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNr
OjpjcmVhdGUodGhpcywga2luZCwgbGFiZWwoKSwgc3JjbGFuZygpKTsKICAgICB9CiAgICAgcmV0
dXJuIG1fdHJhY2suZ2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFj
a0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0Vs
ZW1lbnQuaAkocmV2aXNpb24gMTM0NzY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJh
Y2tFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDYgQEAgcHVibGljOgogCiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUVsZW1lbnRDcm9zc09yaWdpbkF0dHJpYnV0ZSgp
IGNvbnN0OwogCi0gICAgYm9vbCBoYXNCZWVuQ29uZmlndXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQmVlbkNvbmZpZ3VyZWQ7IH0KLSAgICB2b2lkIHNldEhhc0JlZW5Db25maWd1cmVkKGJvb2wg
ZmxhZykgeyBtX2hhc0JlZW5Db25maWd1cmVkID0gZmxhZzsgfQotCiBwcml2YXRlOgogICAgIEhU
TUxUcmFja0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmly
dHVhbCB+SFRNTFRyYWNrRWxlbWVudCgpOwpAQCAtMTAxLDcgKzk4LDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuTG9hZFVybChjb25zdCBLVVJMJik7CiAKICAgICBSZWZQdHI8TG9h
ZGFibGVUZXh0VHJhY2s+IG1fdHJhY2s7Ci0gICAgYm9vbCBtX2hhc0JlZW5Db25maWd1cmVkOwog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFj
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJsZVRl
eHRUcmFjay5jcHAJKHJldmlzaW9uIDEzNDc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svTG9hZGFibGVUZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Mb2FkYWJsZVRleHRUcmFjazo6TG9hZGFibGVU
ZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCogdHJhY2ssIGNvbnN0IFN0cmluZyYga2luZCwgY29u
c3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgYm9vbCkKK0xvYWRhYmxl
VGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayhIVE1MVHJhY2tFbGVtZW50KiB0cmFjaywgY29u
c3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1
YWdlKQogICAgIDogVGV4dFRyYWNrKHRyYWNrLT5kb2N1bWVudCgpLCB0cmFjaywga2luZCwgbGFi
ZWwsIGxhbmd1YWdlLCBUcmFja0VsZW1lbnQpCiAgICAgLCBtX3RyYWNrRWxlbWVudCh0cmFjaykK
ICAgICAsIG1fbG9hZFRpbWVyKHRoaXMsICZMb2FkYWJsZVRleHRUcmFjazo6bG9hZFRpbWVyRmly
ZWQpCisgICAgLCBtX2lzRGVmYXVsdChmYWxzZSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suaAkocmV2aXNpb24gMTM0NzY3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw5ICs0OCw5IEBAIHB1YmxpYzoKIAogY2xhc3MgTG9hZGFibGVUZXh0VHJh
Y2sgOiBwdWJsaWMgVGV4dFRyYWNrLCBwcml2YXRlIFRleHRUcmFja0xvYWRlckNsaWVudCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TG9hZGFibGVUZXh0VHJhY2s+IGNyZWF0ZShI
VE1MVHJhY2tFbGVtZW50KiB0cmFjaywgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcm
IGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBib29sIGlzRGVmYXVsdCkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMb2FkYWJsZVRleHRUcmFjaz4gY3JlYXRlKEhUTUxUcmFja0VsZW1lbnQq
IHRyYWNrLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0
cmluZyYgbGFuZ3VhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvYWRh
YmxlVGV4dFRyYWNrKHRyYWNrLCBraW5kLCBsYWJlbCwgbGFuZ3VhZ2UsIGlzRGVmYXVsdCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvYWRhYmxlVGV4dFRyYWNrKHRyYWNrLCBraW5k
LCBsYWJlbCwgbGFuZ3VhZ2UpKTsKICAgICB9CiAgICAgdmlydHVhbCB+TG9hZGFibGVUZXh0VHJh
Y2soKTsKIApAQCAtNjEsNiArNjEsOSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHRyYWNrRWxlbWVu
dEluZGV4KCk7CiAgICAgSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50KCkgeyByZXR1cm4g
bV90cmFja0VsZW1lbnQ7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX2lzRGVmYXVsdDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Rl
ZmF1bHQoYm9vbCBpc0RlZmF1bHQpIE9WRVJSSURFICB7IG1faXNEZWZhdWx0ID0gaXNEZWZhdWx0
OyB9CisKIHByaXZhdGU6CiAgICAgLy8gVGV4dFRyYWNrTG9hZGVyQ2xpZW50CiAgICAgdmlydHVh
bCBib29sIHNob3VsZExvYWRDdWVzKFRleHRUcmFja0xvYWRlciopIHsgcmV0dXJuIHRydWU7IH0K
QEAgLTY4LDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY3VlTG9hZGluZ1N0
YXJ0ZWQoVGV4dFRyYWNrTG9hZGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGN1ZUxvYWRpbmdDb21w
bGV0ZWQoVGV4dFRyYWNrTG9hZGVyKiwgYm9vbCBsb2FkaW5nRmFpbGVkKTsKIAotICAgIExvYWRh
YmxlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0
IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsIGJvb2wgaXNEZWZhdWx0KTsK
KyAgICBMb2FkYWJsZVRleHRUcmFjayhIVE1MVHJhY2tFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBr
aW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlKTsKIAogICAg
IHZvaWQgbG9hZFRpbWVyRmlyZWQoVGltZXI8TG9hZGFibGVUZXh0VHJhY2s+Kik7CiAKQEAgLTc2
LDYgKzc5LDcgQEAgcHJpdmF0ZToKICAgICBUaW1lcjxMb2FkYWJsZVRleHRUcmFjaz4gbV9sb2Fk
VGltZXI7CiAgICAgT3duUHRyPFRleHRUcmFja0xvYWRlcj4gbV9sb2FkZXI7CiAgICAgS1VSTCBt
X3VybDsKKyAgICBib29sIG1faXNEZWZhdWx0OwogfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNpb24g
MTM0NzgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgVGV4dFRyYWNrOjpUZXh0VHJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udAogICAgICwgbV90cmFja0luZGV4KGludmFsaWRUcmFja0luZGV4KQogICAg
ICwgbV9yZW5kZXJlZFRyYWNrSW5kZXgoaW52YWxpZFRyYWNrSW5kZXgpCiAgICAgLCBtX3Nob3dp
bmdCeURlZmF1bHQoZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db25maWd1cmVkKGZhbHNlKQogewog
ICAgIHNldEtpbmQoa2luZCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrLmgJKHJldmlzaW9uIDEzNDc4MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTIgQEAgcHVibGljOgogICAg
IGJvb2wgaXNSZW5kZXJlZCgpOwogICAgIGludCB0cmFja0luZGV4UmVsYXRpdmVUb1JlbmRlcmVk
VHJhY2tzKCk7CiAKKyAgICBib29sIGhhc0JlZW5Db25maWd1cmVkKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNCZWVuQ29uZmlndXJlZDsgfQorICAgIHZvaWQgc2V0SGFzQmVlbkNvbmZpZ3VyZWQoYm9v
bCBmbGFnKSB7IG1faGFzQmVlbkNvbmZpZ3VyZWQgPSBmbGFnOyB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNEZWZhdWx0KGJvb2wpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVGV4dFRyYWNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBUZXh0VHJhY2tDbGllbnQqLCBjb25zdCBBdG9taWNTdHJpbmcm
IGtpbmQsIGNvbnN0IEF0b21pY1N0cmluZyYgbGFiZWwsIGNvbnN0IEF0b21pY1N0cmluZyYgbGFu
Z3VhZ2UsIFRleHRUcmFja1R5cGUpOwogCkBAIC0xMzQsNiArMTQwLDcgQEAgcHJpdmF0ZToKICAg
ICBpbnQgbV90cmFja0luZGV4OwogICAgIGludCBtX3JlbmRlcmVkVHJhY2tJbmRleDsKICAgICBi
b29sIG1fc2hvd2luZ0J5RGVmYXVsdDsKKyAgICBib29sIG1faGFzQmVlbkNvbmZpZ3VyZWQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzUwMDEpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMi0xMS0xNiAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tzIHNob3VsZCBjb25maWd1
cmUgYWxsIHRleHQgdHJhY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDI1NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVcGRhdGUgdGVzdCBhbmQgcmVzdWx0cyB0byBjaGVjayB0aGF0IGR5bmFtaWNh
bGx5IGFkZGVkIHRyYWNrcyBhcmUgY29uZmlndXJlZCBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBt
ZWRpYS90cmFjay90cmFjay1tb2RlLW5vdC1jaGFuZ2VkLWJ5LW5ldy10cmFjay1leHBlY3RlZC50
eHQ6CisgICAgICAgICogbWVkaWEvdHJhY2svdHJhY2stbW9kZS1ub3QtY2hhbmdlZC1ieS1uZXct
dHJhY2suaHRtbDoKKwogMjAxMi0xMS0xNiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmVtYWluaW5nIGJpdHMgb2YgV2luNyBy
ZWJhc2VsaW5lcy4KSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLW1vZGUtbm90
LWNoYW5nZWQtYnktbmV3LXRyYWNrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9tZWRpYS90cmFjay90cmFjay1tb2RlLW5vdC1jaGFuZ2VkLWJ5LW5ldy10cmFjay1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDEzNDc2NykKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3Ry
YWNrLW1vZGUtbm90LWNoYW5nZWQtYnktbmV3LXRyYWNrLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTgsNiArMTgsNyBAQCBFWFBFQ1RFRCAodHJhY2sxLnJlYWR5U3RhdGUgPT0gJzIn
KSBPSwogRVhQRUNURUQgKHRyYWNrMS50cmFjay5tb2RlID09ICdoaWRkZW4nKSBPSwogRVhQRUNU
RUQgKHRyYWNrMS50cmFjay5jdWVzLmxlbmd0aCA9PSAnMTInKSBPSwogRVhQRUNURUQgKHRyYWNr
MS50cmFjay5jdWVzWzExXS5zdGFydFRpbWUgPT0gJzIyJykgT0sKKwogKiphZGQgYSBjYXB0aW9u
IHRyYWNrLCBjb25maWd1cmVkIHRvIGxvYWQgYXV0b21hdGljYWxseQogUlVOKHRyYWNrMiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyYWNrJykpCiBSVU4odHJhY2syLnNldEF0dHJpYnV0ZSgn
a2luZCcsICdjYXB0aW9ucycpKQpAQCAtMzAsOSArMzEsMjcgQEAgRVZFTlQobG9hZCkgLS0gPHRy
YWNrIGtpbmQ9J2NhcHRpb25zJyA+CiAqKmNoZWNrIHRoYXQgbWV0YWRhdGEgdHJhY2sgc3RhdGUg
aGFzIG5vdCBjaGFuZ2VkCiBFWFBFQ1RFRCAodHJhY2sxLnJlYWR5U3RhdGUgPT0gJzInKSBPSwog
RVhQRUNURUQgKHRyYWNrMS50cmFjay5tb2RlID09ICdoaWRkZW4nKSBPSwotKiphbmQgdGhhdCB0
aGUgY2FwdGlvbnMgdHJhY2sgc3RhdGUgaXMgY29ycmVjdAorKiphbmQgdGhhdCB0aGUgY2FwdGlv
biB0cmFjayBzdGF0ZSBpcyBjb3JyZWN0CitFWFBFQ1RFRCAodHJhY2syLnJlYWR5U3RhdGUgPT0g
JzInKSBPSworRVhQRUNURUQgKHRyYWNrMi50cmFjay5tb2RlID09ICdzaG93aW5nJykgT0sKKwor
KiphZGQgYSBzdWJ0aXRsZSB0cmFjayB3aXRoIHZpZGVvLmFkZFRleHRUcmFjaygpCitSVU4odHJh
Y2szID0gdmlkZW8uYWRkVGV4dFRyYWNrKCdzdWJ0aXRsZXMnLCAnU3VidGl0bGUgVHJhY2snLCAn
ZW4nKSkKK1JVTih0cmFjazMubW9kZSA9IHNob3dpbmcpCitSZWZlcmVuY2VFcnJvcjogQ2FuJ3Qg
ZmluZCB2YXJpYWJsZTogc2hvd2luZworCitFVkVOVChhZGR0cmFjaykKKyoqY2hlY2sgdGhhdCBt
ZXRhZGF0YSB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5nZWQKK0VYUEVDVEVEICh0cmFjazEucmVh
ZHlTdGF0ZSA9PSAnMicpIE9LCitFWFBFQ1RFRCAodHJhY2sxLnRyYWNrLm1vZGUgPT0gJ2hpZGRl
bicpIE9LCisqKmFuZCB0aGF0IHRoZSBjYXB0aW9uIHRyYWNrIHN0YXRlIGhhcyBub3QgY2hhbmdl
ZAogRVhQRUNURUQgKHRyYWNrMi5yZWFkeVN0YXRlID09ICcyJykgT0sKIEVYUEVDVEVEICh0cmFj
azIudHJhY2subW9kZSA9PSAnc2hvd2luZycpIE9LCisqKmFuZCB0aGF0IHRoZSBzdWJ0aXRsZSB0
cmFjayBzdGF0ZSBpcyBjb3JyZWN0CitFWFBFQ1RFRCAoZXZlbnQudGFyZ2V0ID09ICdbb2JqZWN0
IFRleHRUcmFja0xpc3RdJykgT0sKK0VYUEVDVEVEIChldmVudCBpbnN0YW5jZW9mIHdpbmRvdy5U
cmFja0V2ZW50ID09ICd0cnVlJykgT0sKK0VYUEVDVEVEIChldmVudC50cmFjayA9PSAnW29iamVj
dCBUZXh0VHJhY2tdJykgT0sKK0VYUEVDVEVEICh0cmFjazMubW9kZSA9PSAnaGlkZGVuJykgT0sK
IAogRU5EIE9GIFRFU1QKIApJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stbW9k
ZS1ub3QtY2hhbmdlZC1ieS1uZXctdHJhY2suaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9tZWRpYS90cmFjay90cmFjay1tb2RlLW5vdC1jaGFuZ2VkLWJ5LW5ldy10cmFjay5odG1sCShy
ZXZpc2lvbiAxMzQ3NjcpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1tb2RlLW5v
dC1jaGFuZ2VkLWJ5LW5ldy10cmFjay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC03LDE3ICs3LDQy
IEBACiAgICAgICAgIDxzY3JpcHQgc3JjPS4uL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+CiAgICAg
ICAgIDxzY3JpcHQ+CiAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRyYWNrQWRkZWQoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQoIiArIGV2ZW50LnR5
cGUgKyAiKSIpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGk+KipjaGVjayB0aGF0
IG1ldGFkYXRhIHRyYWNrIHN0YXRlIGhhcyBub3QgY2hhbmdlZDwiICsgIi9pPiIpOworICAgICAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2sxLnJlYWR5U3RhdGUiLCBIVE1MVHJhY2tFbGVt
ZW50LkxPQURFRCk7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjazEudHJhY2su
bW9kZSIsICJoaWRkZW4iKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxpPioqYW5k
IHRoYXQgdGhlIGNhcHRpb24gdHJhY2sgc3RhdGUgaGFzIG5vdCBjaGFuZ2VkPCIgKyAiL2k+Iik7
CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjazIucmVhZHlTdGF0ZSIsIEhUTUxU
cmFja0VsZW1lbnQuTE9BREVEKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNr
Mi50cmFjay5tb2RlIiwgInNob3dpbmciKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUo
IjxpPioqYW5kIHRoYXQgdGhlIHN1YnRpdGxlIHRyYWNrIHN0YXRlIGlzIGNvcnJlY3Q8IiArICIv
aT4iKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImV2ZW50LnRhcmdldCIsIHZpZGVv
LnRleHRUcmFja3MpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiZXZlbnQgaW5zdGFu
Y2VvZiB3aW5kb3cuVHJhY2tFdmVudCIsIHRydWUpOworICAgICAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgiZXZlbnQudHJhY2siLCB2aWRlby50ZXh0VHJhY2tzW3ZpZGVvLnRleHRUcmFja3MubGVu
Z3RoIC0gMV0pOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2szLm1vZGUiLCAi
aGlkZGVuIik7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAg
ICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZnVuY3Rpb24g
Y2FwdGlvbnNUcmFja0xvYWRlZCgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29u
c29sZVdyaXRlKCJFVkVOVChsb2FkKSAtLSAmbHQ7dHJhY2sga2luZD0nY2FwdGlvbnMnICZndDsi
KTsKICAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxpPioqY2hlY2sgdGhhdCBtZXRhZGF0
YSB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5nZWQ8IiArICIvaT4iKTsKICAgICAgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInRyYWNrMS5yZWFkeVN0YXRlIiwgSFRNTFRyYWNrRWxlbWVudC5MT0FE
RUQpOwogICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2sxLnRyYWNrLm1vZGUiLCAi
aGlkZGVuIik7Ci0gICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8aT4qKmFuZCB0aGF0IHRo
ZSBjYXB0aW9ucyB0cmFjayBzdGF0ZSBpcyBjb3JyZWN0PCIgKyAiL2k+Iik7CisgICAgICAgICAg
ICAgICAgY29uc29sZVdyaXRlKCI8aT4qKmFuZCB0aGF0IHRoZSBjYXB0aW9uIHRyYWNrIHN0YXRl
IGlzIGNvcnJlY3Q8IiArICIvaT4iKTsKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRy
YWNrMi5yZWFkeVN0YXRlIiwgSFRNTFRyYWNrRWxlbWVudC5MT0FERUQpOwogICAgICAgICAgICAg
ICAgIHRlc3RFeHBlY3RlZCgidHJhY2syLnRyYWNrLm1vZGUiLCAic2hvd2luZyIpOwogICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7Ci0gICAgICAgICAgICAgICAgZW5kVGVzdCgpOwor
CisgICAgICAgICAgICAgICAgdmlkZW8udGV4dFRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCJhZGR0
cmFjayIsIHRyYWNrQWRkZWQpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGk+Kiph
ZGQgYSBzdWJ0aXRsZSB0cmFjayB3aXRoIHZpZGVvLmFkZFRleHRUcmFjaygpPCIgKyAiL2k+Iik7
CisgICAgICAgICAgICAgICAgcnVuKCJ0cmFjazMgPSB2aWRlby5hZGRUZXh0VHJhY2soJ3N1YnRp
dGxlcycsICdTdWJ0aXRsZSBUcmFjaycsICdlbicpIik7CisgICAgICAgICAgICAgICAgcnVuKCJ0
cmFjazMubW9kZSA9IHNob3dpbmciKTsKKworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgi
Iik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIG1ldGFkYXRhVHJhY2tM
b2FkZWQoKQpAQCAtMjksNyArNTQsNyBAQAogICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgi
dHJhY2sxLnRyYWNrLmN1ZXMubGVuZ3RoIiwgMTIpOwogICAgICAgICAgICAgICAgIHRlc3RFeHBl
Y3RlZCgidHJhY2sxLnRyYWNrLmN1ZXNbMTFdLnN0YXJ0VGltZSIsIDIyKTsKIAotICAgICAgICAg
ICAgICAgIGNvbnNvbGVXcml0ZSgiPGk+KiphZGQgYSBjYXB0aW9uIHRyYWNrLCBjb25maWd1cmVk
IHRvIGxvYWQgYXV0b21hdGljYWxseTwiICsgIi9pPiIpOworICAgICAgICAgICAgICAgIGNvbnNv
bGVXcml0ZSgiPGJyPjxpPioqYWRkIGEgY2FwdGlvbiB0cmFjaywgY29uZmlndXJlZCB0byBsb2Fk
IGF1dG9tYXRpY2FsbHk8IiArICIvaT4iKTsKICAgICAgICAgICAgICAgICBydW4oInRyYWNrMiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyYWNrJykiKTsKICAgICAgICAgICAgICAgICBydW4o
InRyYWNrMi5zZXRBdHRyaWJ1dGUoJ2tpbmQnLCAnY2FwdGlvbnMnKSIpOwogICAgICAgICAgICAg
ICAgIHJ1bigidHJhY2syLnNldEF0dHJpYnV0ZSgnZGVmYXVsdCcsICdkZWZhdWx0JykiKTsK
</data>
<flag name="commit-queue"
          id="189976"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174787</attachid>
            <date>2012-11-16 17:04:00 -0800</date>
            <delta_ts>2012-11-19 14:43:22 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>refactoring_patch_4.txt</filename>
            <type>text/plain</type>
            <size>24360</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTExLTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEhUTUxNZWRpYUVsZW1l
bnQ6OmNvbmZpZ3VyZVRleHRUcmFja3Mgc2hvdWxkIGNvbmZpZ3VyZSBhbGwgdGV4dCB0cmFja3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjU2MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgdHJhY2stbW9kZS1ub3QtY2hhbmdlZC1ieS1uZXctdHJhY2suaHRtbCB3YXMgdXBkYXRl
ZCB0byB0ZXN0IHRoZSBjaGFuZ2VzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVD
aGFuZ2VkKTogSFRNTFRyYWNrRWxlbWVudCAtPiBUZXh0VHJhY2suCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojp3aWxsUmVtb3ZlVHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0dyb3VwKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlv
bkFuZFN1YnRpdGxlVHJhY2tzQXNVbmNvbmZpZ3VyZWQpOiBEaXR0by4KKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpIVE1MVHJhY2tFbGVtZW50
KTogTW92ZSBoYXNCZWVuQ29uZmlndXJlZCBkb3duIHRvIFRleHRUcmFjay4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTogaXNEZWZhdWx0IGlzIHN0
b3JlZCBvbiBUZXh0VHJhY2suCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50Ojpl
bnN1cmVUcmFjayk6IExvYWRhYmxlVGV4dFRyYWNrIGNvbnN0cnVjdG9yIGRvZXNuJ3QgdGFrZSAK
KyAgICAgICAgICAgICJkZWZhdWx0IiBhcmd1bWVudC4KKyAgICAgICAgKiBodG1sL0hUTUxUcmFj
a0VsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVUZXh0VHJhY2s6OkxvYWRhYmxlVGV4dFRyYWNr
KTogSW5pdGlhbGl6ZSBtX2lzRGVmYXVsdCB0byBmYWxzZS4KKyAgICAgICAgKiBodG1sL3RyYWNr
L0xvYWRhYmxlVGV4dFRyYWNrLmg6IAorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc0Rl
ZmF1bHQpOiBPdmVycmlkZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIGEgdHJh
Y2sgZWxlbWVudAorICAgICAgICAgICAgY2FuIGJlIGZsYWdnZWQgYXMgZGVmYXVsdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFjazo6c2V0SXNEZWZhdWx0KTogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6
OlRleHRUcmFjayk6IEluaXRpYWxpemUgbV9oYXNCZWVuQ29uZmlndXJlZC4KKyAgICAgICAgKiBo
dG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpoYXNC
ZWVuQ29uZmlndXJlZCk6IE5ldywgbW92ZWQgZnJvbSBIVE1MVHJhY2tFbGVtZW50IHNvIG90aGVy
IGNvZGUgZG9lc24ndAorICAgICAgICAgICAgbmVlZCBrbm93IHdoYXQgdHlwZSBvZiB0cmFjayBp
dCBpcyBjYWxsaW5nLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRIYXNCZWVuQ29u
ZmlndXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc0RlZmF1bHQp
OiBCYXNlLCBkbyBub3RoaW5nLCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIG9ubHkgTG9hZGFibGVU
ZXh0VHJhY2sKKyAgICAgICAgICAgIGNhbiBiZSAiZGVmYXVsdCIuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2s6OnNldElzRGVmYXVsdCk6IERpdHRvLgorCiAyMDEyLTExLTE2ICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBEZXBsb3kgU2NyaXB0V3JhcHBhYmxl
IHRvIG1vcmUgYWx3YXlzLXdyYXBwZWQgb2JqZWN0cwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzQ3NjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIyLDcgKzEz
MjIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE1hcmsgdGhp
cyB0cmFjayBhcyAiY29uZmlndXJlZCIgc28gY29uZmlndXJlVGV4dFRyYWNrcyB3b24ndCBjaGFu
Z2UgdGhlIG1vZGUgYWdhaW4uCi0gICAgICAgICAgICB0cmFja0VsZW1lbnQtPnNldEhhc0JlZW5D
b25maWd1cmVkKHRydWUpOworICAgICAgICAgICAgdHJhY2stPnNldEhhc0JlZW5Db25maWd1cmVk
KHRydWUpOwogICAgICAgICAgICAgaWYgKHRyYWNrLT5tb2RlKCkgIT0gVGV4dFRyYWNrOjpkaXNh
YmxlZEtleXdvcmQoKSkgewogICAgICAgICAgICAgICAgIGlmICh0cmFja0VsZW1lbnQtPnJlYWR5
U3RhdGUoKSA9PSBIVE1MVHJhY2tFbGVtZW50OjpMT0FERUQpCiAgICAgICAgICAgICAgICAgICAg
IHRleHRUcmFja0FkZEN1ZXModHJhY2ssIHRyYWNrLT5jdWVzKCkpOwpAQCAtMjc2NCwyMiArMjc2
NCw2IEBAIFRleHRUcmFja0xpc3QqIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmEKICAgICByZXR1
cm4gbV90ZXh0VHJhY2tzLmdldCgpOwogfQogCi1IVE1MVHJhY2tFbGVtZW50KiBIVE1MTWVkaWFF
bGVtZW50OjpzaG93aW5nVHJhY2tXaXRoU2FtZUtpbmQoSFRNTFRyYWNrRWxlbWVudCogdHJhY2tF
bGVtZW50KSBjb25zdAotewotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHRyYWNrRWxlbWVu
dCA9PSBub2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghbm9kZS0+aGFz
VGFnTmFtZSh0cmFja1RhZykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBIVE1M
VHJhY2tFbGVtZW50KiBzaG93aW5nVHJhY2sgPSBzdGF0aWNfY2FzdDxIVE1MVHJhY2tFbGVtZW50
Kj4obm9kZSk7Ci0gICAgICAgIGlmIChzaG93aW5nVHJhY2stPmtpbmQoKSA9PSB0cmFja0VsZW1l
bnQtPmtpbmQoKSAmJiBzaG93aW5nVHJhY2stPnRyYWNrKCktPm1vZGUoKSA9PSBUZXh0VHJhY2s6
OnNob3dpbmdLZXl3b3JkKCkpCi0gICAgICAgICAgICByZXR1cm4gc2hvd2luZ1RyYWNrOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRB
ZGRUcmFjayhIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQpCiB7CiAgICAgQVNTRVJUKHRy
YWNrRWxlbWVudC0+aGFzVGFnTmFtZSh0cmFja1RhZykpOwpAQCAtMjgxNywxNCArMjgwMSwxNSBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndpbGxSZW1vdmVUcmFjayhICiAgICAgfQogI2VuZGlm
CiAKLSAgICB0cmFja0VsZW1lbnQtPnNldEhhc0JlZW5Db25maWd1cmVkKGZhbHNlKTsKKyAgICBS
ZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRyYWNrKCk7CisgICAg
aWYgKCF0ZXh0VHJhY2spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZXh0VHJhY2stPnNl
dEhhc0JlZW5Db25maWd1cmVkKGZhbHNlKTsKIAogICAgIGlmICghbV90ZXh0VHJhY2tzKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gdHJh
Y2tFbGVtZW50LT50cmFjaygpOwotICAgIGlmICghdGV4dFRyYWNrKQotICAgICAgICByZXR1cm47
CiAKICAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0IHRyYWNrcwog
ICAgIC8vIFdoZW4gYSB0cmFjayBlbGVtZW50J3MgcGFyZW50IGVsZW1lbnQgY2hhbmdlcyBhbmQg
dGhlIG9sZCBwYXJlbnQgd2FzIGEgbWVkaWEgZWxlbWVudCwgCkBAIC0yODgxLDcgKzI4NjYsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFjCiAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGxhbmd1YWdlczsKICAgICAgICAgbGFuZ3VhZ2VzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZ3JvdXAudHJhY2tzLnNpemUoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZ3JvdXAudHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3JjTGFu
Z3VhZ2UgPSBncm91cC50cmFja3NbaV0tPnRyYWNrKCktPmxhbmd1YWdlKCk7CisgICAgICAgICAg
ICBTdHJpbmcgc3JjTGFuZ3VhZ2UgPSBncm91cC50cmFja3NbaV0tPmxhbmd1YWdlKCk7CiAgICAg
ICAgICAgICBpZiAoc3JjTGFuZ3VhZ2UubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgbGFuZ3Vh
Z2VzLmFwcGVuZChzcmNMYW5ndWFnZSk7CiAgICAgICAgIH0KQEAgLTI4ODksMTIgKzI4NzQsMTEg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhYwogICAgIH0KIAogICAg
IC8vIEZpcnN0LCBmaW5kIHRoZSB0cmFjayBpbiB0aGUgZ3JvdXAgdGhhdCBzaG91bGQgYmUgZW5h
YmxlZCAoaWYgYW55KS4KLSAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnRUb0VuYWJs
ZSA9IDA7Ci0gICAgSFRNTFRyYWNrRWxlbWVudCogZGVmYXVsdFRyYWNrID0gMDsKLSAgICBIVE1M
VHJhY2tFbGVtZW50KiBmYWxsYmFja1RyYWNrID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
IXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGkgPCBncm91cC50cmFja3Muc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50ID0gZ3JvdXAudHJhY2tzW2ld
OwotICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRy
YWNrKCk7CisgICAgUmVmUHRyPFRleHRUcmFjaz4gdHJhY2tFbmFibGUgPSAwOworICAgIFJlZlB0
cjxUZXh0VHJhY2s+IGRlZmF1bHRUcmFjayA9IDA7CisgICAgUmVmUHRyPFRleHRUcmFjaz4gZmFs
bGJhY2tUcmFjayA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7ICF0cmFja0VuYWJsZSAmJiBp
IDwgZ3JvdXAudHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2s+
IHRleHRUcmFjayA9IGdyb3VwLnRyYWNrc1tpXTsKIAogICAgICAgICBpZiAodXNlcklzSW50ZXJl
c3RlZEluVGhpc1RyYWNrS2luZCh0ZXh0VHJhY2stPmtpbmQoKSkpIHsKICAgICAgICAgICAgIC8v
ICogSWYgdGhlIHRleHQgdHJhY2sga2luZCBpcyB7IFtzdWJ0aXRsZXMgb3IgY2FwdGlvbnNdIFtk
ZXNjcmlwdGlvbnNdIH0gYW5kIHRoZSB1c2VyIGhhcyBpbmRpY2F0ZWQgYW4gaW50ZXJlc3QgaW4g
aGF2aW5nIGEKQEAgLTI5MDgsMzkgKzI4OTIsMzggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpj
b25maWd1cmVUZXh0VHJhYwogICAgICAgICAgICAgLy8gICAgTGV0IHRoZSB0ZXh0IHRyYWNrIG1v
ZGUgYmUgc2hvd2luZy4KICAgICAgICAgICAgIGlmIChiZXN0TWF0Y2hpbmdMYW5ndWFnZS5sZW5n
dGgoKSkgewogICAgICAgICAgICAgICAgIGlmICh0ZXh0VHJhY2stPmxhbmd1YWdlKCkgPT0gYmVz
dE1hdGNoaW5nTGFuZ3VhZ2UpCi0gICAgICAgICAgICAgICAgICAgIHRyYWNrRWxlbWVudFRvRW5h
YmxlID0gdHJhY2tFbGVtZW50OwotICAgICAgICAgICAgfSBlbHNlIGlmICh0cmFja0VsZW1lbnQt
PmlzRGVmYXVsdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyYWNrRW5hYmxlID0gdGV4dFRy
YWNrOworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0VHJhY2stPmlzRGVmYXVsdCgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgaXMgaW50ZXJlc3RlZCBpbiB0aGlzIHR5cGUgb2Yg
dHJhY2ssIGJ1dCB0aGVpciBsYW5ndWFnZSBwcmVmZXJlbmNlIGRvZXNuJ3QgbWF0Y2ggYW55IHRy
YWNrIHNvIHdlIHdpbGwKICAgICAgICAgICAgICAgICAvLyBlbmFibGUgdGhlICdkZWZhdWx0JyB0
cmFjay4KLSAgICAgICAgICAgICAgICBkZWZhdWx0VHJhY2sgPSB0cmFja0VsZW1lbnQ7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdFRyYWNrID0gdGV4dFRyYWNrOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgZmlyc3QgdHJhY2sgdGhhdCBkb2Vzbid0IG1hdGNo
IGxhbmd1YWdlIG9yIGhhdmUgJ2RlZmF1bHQnIHRvIHBvdGVudGlhbGx5IHVzZSBhcyBmYWxsYmFj
ay4KICAgICAgICAgICAgIGlmICghZmFsbGJhY2tUcmFjaykKLSAgICAgICAgICAgICAgICBmYWxs
YmFja1RyYWNrID0gdHJhY2tFbGVtZW50OwotICAgICAgICB9IGVsc2UgaWYgKCFncm91cC52aXNp
YmxlVHJhY2sgJiYgIWRlZmF1bHRUcmFjayAmJiB0cmFja0VsZW1lbnQtPmlzRGVmYXVsdCgpKSB7
CisgICAgICAgICAgICAgICAgZmFsbGJhY2tUcmFjayA9IHRleHRUcmFjazsKKyAgICAgICAgfSBl
bHNlIGlmICghZ3JvdXAudmlzaWJsZVRyYWNrICYmICFkZWZhdWx0VHJhY2sgJiYgdGV4dFRyYWNr
LT5pc0RlZmF1bHQoKSkgewogICAgICAgICAgICAgLy8gKiBJZiB0aGUgdHJhY2sgZWxlbWVudCBo
YXMgYSBkZWZhdWx0IGF0dHJpYnV0ZSBzcGVjaWZpZWQsIGFuZCB0aGVyZSBpcyBubyBvdGhlciB0
ZXh0IHRyYWNrIGluIHRoZSBtZWRpYQogICAgICAgICAgICAgLy8gZWxlbWVudCdzIGxpc3Qgb2Yg
dGV4dCB0cmFja3Mgd2hvc2UgdGV4dCB0cmFjayBtb2RlIGlzIHNob3dpbmcgb3Igc2hvd2luZyBi
eSBkZWZhdWx0CiAgICAgICAgICAgICAvLyAgICBMZXQgdGhlIHRleHQgdHJhY2sgbW9kZSBiZSBz
aG93aW5nIGJ5IGRlZmF1bHQuCi0gICAgICAgICAgICBkZWZhdWx0VHJhY2sgPSB0cmFja0VsZW1l
bnQ7CisgICAgICAgICAgICBkZWZhdWx0VHJhY2sgPSB0ZXh0VHJhY2suZ2V0KCk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoIXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGRlZmF1bHRUcmFj
aykKLSAgICAgICAgdHJhY2tFbGVtZW50VG9FbmFibGUgPSBkZWZhdWx0VHJhY2s7CisgICAgaWYg
KCF0cmFja0VuYWJsZSAmJiBkZWZhdWx0VHJhY2spCisgICAgICAgIHRyYWNrRW5hYmxlID0gZGVm
YXVsdFRyYWNrOwogCiAgICAgLy8gSWYgbm8gdHJhY2sgbWF0Y2hlcyB0aGUgdXNlcidzIHByZWZl
cnJlZCBsYW5ndWFnZSBhbmQgbm9uIHdhcyBtYXJrZWQgJ2RlZmF1bHQnLCBlbmFibGUgdGhlIGZp
cnN0IHRyYWNrCiAgICAgLy8gYmVjYXVzZSB0aGUgdXNlciBoYXMgZXhwbGljaXRseSBzdGF0ZWQg
YSBwcmVmZXJlbmNlIGZvciB0aGlzIGtpbmQgb2YgdHJhY2suCi0gICAgaWYgKCF0cmFja0VsZW1l
bnRUb0VuYWJsZSAmJiBmYWxsYmFja1RyYWNrKQotICAgICAgICB0cmFja0VsZW1lbnRUb0VuYWJs
ZSA9IGZhbGxiYWNrVHJhY2s7CisgICAgaWYgKCF0cmFja0VuYWJsZSAmJiBmYWxsYmFja1RyYWNr
KQorICAgICAgICB0cmFja0VuYWJsZSA9IGZhbGxiYWNrVHJhY2s7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGdyb3VwLnRyYWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MVHJh
Y2tFbGVtZW50KiB0cmFja0VsZW1lbnQgPSBncm91cC50cmFja3NbaV07Ci0gICAgICAgIFJlZlB0
cjxUZXh0VHJhY2s+IHRleHRUcmFjayA9IHRyYWNrRWxlbWVudC0+dHJhY2soKTsKKyAgICAgICAg
UmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gZ3JvdXAudHJhY2tzW2ldOwogICAgICAgICAK
LSAgICAgICAgaWYgKHRyYWNrRWxlbWVudFRvRW5hYmxlID09IHRyYWNrRWxlbWVudCkgeworICAg
ICAgICBpZiAodHJhY2tFbmFibGUgPT0gdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICB0ZXh0VHJh
Y2stPnNldE1vZGUoVGV4dFRyYWNrOjpzaG93aW5nS2V5d29yZCgpKTsKLSAgICAgICAgICAgIGlm
IChkZWZhdWx0VHJhY2sgPT0gdHJhY2tFbGVtZW50KQorICAgICAgICAgICAgaWYgKGRlZmF1bHRU
cmFjayA9PSB0ZXh0VHJhY2spCiAgICAgICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRTaG93aW5n
QnlEZWZhdWx0KHRydWUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHRleHRU
cmFjay0+c2hvd2luZ0J5RGVmYXVsdCgpKSB7CkBAIC0yOTU0LDExICsyOTM3LDEwIEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWMKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmICh0cmFja0VsZW1lbnRUb0VuYWJsZSAmJiBncm91cC5kZWZhdWx0VHJhY2sgJiYgZ3Jv
dXAuZGVmYXVsdFRyYWNrICE9IHRyYWNrRWxlbWVudFRvRW5hYmxlKSB7Ci0gICAgICAgIFJlZlB0
cjxUZXh0VHJhY2s+IHRleHRUcmFjayA9IGdyb3VwLmRlZmF1bHRUcmFjay0+dHJhY2soKTsKLSAg
ICAgICAgaWYgKHRleHRUcmFjayAmJiB0ZXh0VHJhY2stPnNob3dpbmdCeURlZmF1bHQoKSkgewot
ICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRTaG93aW5nQnlEZWZhdWx0KGZhbHNlKTsKLSAgICAg
ICAgICAgIHRleHRUcmFjay0+c2V0TW9kZShUZXh0VHJhY2s6OmhpZGRlbktleXdvcmQoKSk7Cisg
ICAgaWYgKHRyYWNrRW5hYmxlICYmIGdyb3VwLmRlZmF1bHRUcmFjayAmJiBncm91cC5kZWZhdWx0
VHJhY2sgIT0gdHJhY2tFbmFibGUpIHsKKyAgICAgICAgaWYgKGdyb3VwLmRlZmF1bHRUcmFjayAm
JiBncm91cC5kZWZhdWx0VHJhY2stPnNob3dpbmdCeURlZmF1bHQoKSkgeworICAgICAgICAgICAg
Z3JvdXAuZGVmYXVsdFRyYWNrLT5zZXRTaG93aW5nQnlEZWZhdWx0KGZhbHNlKTsKKyAgICAgICAg
ICAgIGdyb3VwLmRlZmF1bHRUcmFjay0+c2V0TW9kZShUZXh0VHJhY2s6OmhpZGRlbktleXdvcmQo
KSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yOTcxLDEyICsyOTUzLDExIEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWMKICAgICBUcmFja0dyb3VwIG1ldGFkYXRh
VHJhY2tzKFRyYWNrR3JvdXA6Ok1ldGFkYXRhKTsKICAgICBUcmFja0dyb3VwIG90aGVyVHJhY2tz
KFRyYWNrR3JvdXA6Ok90aGVyKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQo
KTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2Rl
LT5oYXNUYWdOYW1lKHRyYWNrVGFnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGlmICgh
bV90ZXh0VHJhY2tzKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgSFRNTFRyYWNrRWxlbWVu
dCogdHJhY2tFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxlbWVudCo+KG5vZGUpOwot
ICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRyYWNr
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHRUcmFja3MtPmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gbV90ZXh0VHJhY2tz
LT5pdGVtKGkpOwogICAgICAgICBpZiAoIXRleHRUcmFjaykKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCkBAIC0yOTk0LDkgKzI5NzUsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3Vy
ZVRleHRUcmFjCiAgICAgICAgICAgICBjdXJyZW50R3JvdXAgPSAmb3RoZXJUcmFja3M7CiAKICAg
ICAgICAgaWYgKCFjdXJyZW50R3JvdXAtPnZpc2libGVUcmFjayAmJiB0ZXh0VHJhY2stPm1vZGUo
KSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpCi0gICAgICAgICAgICBjdXJyZW50R3Jv
dXAtPnZpc2libGVUcmFjayA9IHRyYWNrRWxlbWVudDsKLSAgICAgICAgaWYgKCFjdXJyZW50R3Jv
dXAtPmRlZmF1bHRUcmFjayAmJiB0cmFja0VsZW1lbnQtPmlzRGVmYXVsdCgpKQotICAgICAgICAg
ICAgY3VycmVudEdyb3VwLT5kZWZhdWx0VHJhY2sgPSB0cmFja0VsZW1lbnQ7CisgICAgICAgICAg
ICBjdXJyZW50R3JvdXAtPnZpc2libGVUcmFjayA9IHRleHRUcmFjazsKKyAgICAgICAgaWYgKCFj
dXJyZW50R3JvdXAtPmRlZmF1bHRUcmFjayAmJiB0ZXh0VHJhY2stPmlzRGVmYXVsdCgpKQorICAg
ICAgICAgICAgY3VycmVudEdyb3VwLT5kZWZhdWx0VHJhY2sgPSB0ZXh0VHJhY2s7CiAKICAgICAg
ICAgLy8gRG8gbm90IGFkZCB0aGlzIHRyYWNrIHRvIHRoZSBncm91cCBpZiBpdCBoYXMgYWxyZWFk
eSBiZWVuIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZAogICAgICAgICAvLyBhcyB3ZSBvbmx5IHdh
bnQgdG8gY2FsbCBjb25maWd1cmVUZXh0VHJhY2sgb25jZSBwZXIgdHJhY2sgc28gdGhhdCBhZGRp
bmcgYW5vdGhlciAKQEAgLTMwMDQsMTIgKzI5ODUsMTIgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojpjb25maWd1cmVUZXh0VHJhYwogICAgICAgICAvLyB0aGF0IHNob3VsZCBiZSBjaGFuZ2VkIGJ5
IHRoZSBuZXcgYWRkaXRpb24uIEZvciBleGFtcGxlIGFsbCBtZXRhZGF0YSB0cmFja3MgYXJlIAog
ICAgICAgICAvLyBkaXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgd2UgZG9uJ3Qgd2FudCBhIHRyYWNr
IHRoYXQgaGFzIGJlZW4gZW5hYmxlZCBieSBzY3JpcHQgCiAgICAgICAgIC8vIHRvIGJlIGRpc2Fi
bGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIG5ldyBtZXRhZGF0YSB0cmFjayBpcyBhZGRlZCBsYXRl
ci4KLSAgICAgICAgaWYgKHRyYWNrRWxlbWVudC0+aGFzQmVlbkNvbmZpZ3VyZWQoKSkKKyAgICAg
ICAgaWYgKHRleHRUcmFjay0+aGFzQmVlbkNvbmZpZ3VyZWQoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHRleHRUcmFjay0+bGFuZ3VhZ2UoKS5sZW5ndGgo
KSkKICAgICAgICAgICAgIGN1cnJlbnRHcm91cC0+aGFzU3JjTGFuZyA9IHRydWU7Ci0gICAgICAg
IGN1cnJlbnRHcm91cC0+dHJhY2tzLmFwcGVuZCh0cmFja0VsZW1lbnQpOworICAgICAgICBjdXJy
ZW50R3JvdXAtPnRyYWNrcy5hcHBlbmQodGV4dFRyYWNrKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KGNhcHRpb25BbmRTdWJ0aXRsZVRyYWNrcy50cmFja3Muc2l6ZSgpKQpAQCAtNDI1OCw3ICs0MjM5
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlvbkFuZFN1YgogICAgICAgICBT
dHJpbmcga2luZCA9IHRleHRUcmFjay0+a2luZCgpOwogCiAgICAgICAgIGlmIChraW5kID09IFRl
eHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpIHx8IGtpbmQgPT0gVGV4dFRyYWNrOjpjYXB0aW9u
c0tleXdvcmQoKSkKLSAgICAgICAgICAgIHRyYWNrRWxlbWVudC0+c2V0SGFzQmVlbkNvbmZpZ3Vy
ZWQoZmFsc2UpOworICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRIYXNCZWVuQ29uZmlndXJlZChm
YWxzZSk7CiAgICAgfQogICAgIGNvbmZpZ3VyZVRleHRUcmFja3MoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxMzQ3NjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMw
LDkgKzIzMCw5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgVmVj
dG9yPEhUTUxUcmFja0VsZW1lbnQqPiB0cmFja3M7Ci0gICAgICAgIEhUTUxUcmFja0VsZW1lbnQq
IHZpc2libGVUcmFjazsKLSAgICAgICAgSFRNTFRyYWNrRWxlbWVudCogZGVmYXVsdFRyYWNrOwor
ICAgICAgICBWZWN0b3I8UmVmUHRyPFRleHRUcmFjaz4gPiB0cmFja3M7CisgICAgICAgIFJlZlB0
cjxUZXh0VHJhY2s+IHZpc2libGVUcmFjazsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gZGVm
YXVsdFRyYWNrOwogICAgICAgICBHcm91cEtpbmQga2luZDsKICAgICAgICAgYm9vbCBoYXNTcmNM
YW5nOwogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5j
cHAJKHJldmlzaW9uIDEzNDc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAgc3RhdGljIFN0cmluZyB1
cmxGb3JMb2dnaW5nKGNvbnN0IEtVUkwmIAogICAgIAogaW5saW5lIEhUTUxUcmFja0VsZW1lbnQ6
OkhUTUxUcmFja0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50KQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBt
X2hhc0JlZW5Db25maWd1cmVkKGZhbHNlKQogewogICAgIExPRyhNZWRpYSwgIkhUTUxUcmFja0Vs
ZW1lbnQ6OkhUTUxUcmFja0VsZW1lbnQgLSAlcCIsIHRoaXMpOwogICAgIEFTU0VSVChoYXNUYWdO
YW1lKHRyYWNrVGFnKSk7CkBAIC0xMDksNiArMTA4LDggQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgICAgICAgICAgdHJhY2soKS0+c2V0TGFiZWwoYXR0cmli
dXRlLnZhbHVlKCkpOwogICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IHNyY2xh
bmdBdHRyKQogICAgICAgICAgICAgdHJhY2soKS0+c2V0TGFuZ3VhZ2UoYXR0cmlidXRlLnZhbHVl
KCkpOworICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IGRlZmF1bHRBdHRyKQor
ICAgICAgICAgICAgdHJhY2soKS0+c2V0SXNEZWZhdWx0KCFhdHRyaWJ1dGUuaXNOdWxsKCkpOwog
ICAgIH0KIAogICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IG9ubG9hZEF0dHIpCkBAIC0xNzYs
NyArMTc3LDcgQEAgTG9hZGFibGVUZXh0VHJhY2sqIEhUTUxUcmFja0VsZW1lbnQ6OmVucwogICAg
ICAgICBTdHJpbmcga2luZCA9IGdldEF0dHJpYnV0ZShraW5kQXR0cik7CiAgICAgICAgIGlmICgh
VGV4dFRyYWNrOjppc1ZhbGlkS2luZEtleXdvcmQoa2luZCkpCiAgICAgICAgICAgICBraW5kID0g
VGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCk7Ci0gICAgICAgIG1fdHJhY2sgPSBMb2FkYWJs
ZVRleHRUcmFjazo6Y3JlYXRlKHRoaXMsIGtpbmQsIGxhYmVsKCksIHNyY2xhbmcoKSwgaXNEZWZh
dWx0KCkpOworICAgICAgICBtX3RyYWNrID0gTG9hZGFibGVUZXh0VHJhY2s6OmNyZWF0ZSh0aGlz
LCBraW5kLCBsYWJlbCgpLCBzcmNsYW5nKCkpOwogICAgIH0KICAgICByZXR1cm4gbV90cmFjay5n
ZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCShyZXZp
c2lvbiAxMzQ3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsNiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG1lZGlhRWxlbWVudENyb3NzT3JpZ2luQXR0cmlidXRlKCkgY29uc3Q7CiAKLSAg
ICBib29sIGhhc0JlZW5Db25maWd1cmVkKCkgY29uc3QgeyByZXR1cm4gbV9oYXNCZWVuQ29uZmln
dXJlZDsgfQotICAgIHZvaWQgc2V0SGFzQmVlbkNvbmZpZ3VyZWQoYm9vbCBmbGFnKSB7IG1faGFz
QmVlbkNvbmZpZ3VyZWQgPSBmbGFnOyB9Ci0KIHByaXZhdGU6CiAgICAgSFRNTFRyYWNrRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MVHJh
Y2tFbGVtZW50KCk7CkBAIC0xMDEsNyArOTgsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBjYW5Mb2FkVXJsKGNvbnN0IEtVUkwmKTsKIAogICAgIFJlZlB0cjxMb2FkYWJsZVRleHRUcmFj
az4gbV90cmFjazsKLSAgICBib29sIG1faGFzQmVlbkNvbmZpZ3VyZWQ7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAko
cmV2aXNpb24gMTM0NzY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJsZVRl
eHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywxMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUxvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayhIVE1M
VHJhY2tFbGVtZW50KiB0cmFjaywgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxh
YmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBib29sKQorTG9hZGFibGVUZXh0VHJhY2s6Okxv
YWRhYmxlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrLCBjb25zdCBTdHJpbmcmIGtp
bmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpCiAgICAgOiBU
ZXh0VHJhY2sodHJhY2stPmRvY3VtZW50KCksIHRyYWNrLCBraW5kLCBsYWJlbCwgbGFuZ3VhZ2Us
IFRyYWNrRWxlbWVudCkKICAgICAsIG1fdHJhY2tFbGVtZW50KHRyYWNrKQogICAgICwgbV9sb2Fk
VGltZXIodGhpcywgJkxvYWRhYmxlVGV4dFRyYWNrOjpsb2FkVGltZXJGaXJlZCkKKyAgICAsIG1f
aXNEZWZhdWx0KGZhbHNlKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0xvYWRhYmxlVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oCShyZXZpc2lvbiAxMzQ3NjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDkgKzQ4LDkgQEAgcHVibGljOgogCiBjbGFzcyBMb2FkYWJsZVRleHRUcmFjayA6IHB1YmxpYyBU
ZXh0VHJhY2ssIHByaXZhdGUgVGV4dFRyYWNrTG9hZGVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMb2FkYWJsZVRleHRUcmFjaz4gY3JlYXRlKEhUTUxUcmFja0VsZW1l
bnQqIHRyYWNrLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0
IFN0cmluZyYgbGFuZ3VhZ2UsIGJvb2wgaXNEZWZhdWx0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExvYWRhYmxlVGV4dFRyYWNrPiBjcmVhdGUoSFRNTFRyYWNrRWxlbWVudCogdHJhY2ssIGNvbnN0
IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFn
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTG9hZGFibGVUZXh0VHJhY2so
dHJhY2ssIGtpbmQsIGxhYmVsLCBsYW5ndWFnZSwgaXNEZWZhdWx0KSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTG9hZGFibGVUZXh0VHJhY2sodHJhY2ssIGtpbmQsIGxhYmVsLCBsYW5n
dWFnZSkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5Mb2FkYWJsZVRleHRUcmFjaygpOwogCkBAIC02
MSw2ICs2MSw5IEBAIHB1YmxpYzoKICAgICBzaXplX3QgdHJhY2tFbGVtZW50SW5kZXgoKTsKICAg
ICBIVE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQoKSB7IHJldHVybiBtX3RyYWNrRWxlbWVu
dDsgfQogCisgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1faXNEZWZhdWx0OyB9CisgICAgdmlydHVhbCB2b2lkIHNldElzRGVmYXVsdChib29sIGlz
RGVmYXVsdCkgT1ZFUlJJREUgIHsgbV9pc0RlZmF1bHQgPSBpc0RlZmF1bHQ7IH0KKwogcHJpdmF0
ZToKICAgICAvLyBUZXh0VHJhY2tMb2FkZXJDbGllbnQKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
TG9hZEN1ZXMoVGV4dFRyYWNrTG9hZGVyKikgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjgsNyArNzEs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjdWVMb2FkaW5nU3RhcnRlZChUZXh0VHJh
Y2tMb2FkZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgY3VlTG9hZGluZ0NvbXBsZXRlZChUZXh0VHJh
Y2tMb2FkZXIqLCBib29sIGxvYWRpbmdGYWlsZWQpOwogCi0gICAgTG9hZGFibGVUZXh0VHJhY2so
SFRNTFRyYWNrRWxlbWVudCosIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJl
bCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgYm9vbCBpc0RlZmF1bHQpOworICAgIExvYWRhYmxl
VGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0
cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UpOwogCiAgICAgdm9pZCBsb2FkVGlt
ZXJGaXJlZChUaW1lcjxMb2FkYWJsZVRleHRUcmFjaz4qKTsKIApAQCAtNzYsNiArNzksNyBAQCBw
cml2YXRlOgogICAgIFRpbWVyPExvYWRhYmxlVGV4dFRyYWNrPiBtX2xvYWRUaW1lcjsKICAgICBP
d25QdHI8VGV4dFRyYWNrTG9hZGVyPiBtX2xvYWRlcjsKICAgICBLVVJMIG1fdXJsOworICAgIGJv
b2wgbV9pc0RlZmF1bHQ7CiB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCShyZXZpc2lvbiAxMzQ3ODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNyw2ICsxMDcsNyBAQCBUZXh0VHJhY2s6OlRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25Db250
CiAgICAgLCBtX3RyYWNrSW5kZXgoaW52YWxpZFRyYWNrSW5kZXgpCiAgICAgLCBtX3JlbmRlcmVk
VHJhY2tJbmRleChpbnZhbGlkVHJhY2tJbmRleCkKICAgICAsIG1fc2hvd2luZ0J5RGVmYXVsdChm
YWxzZSkKKyAgICAsIG1faGFzQmVlbkNvbmZpZ3VyZWQoZmFsc2UpCiB7CiAgICAgc2V0S2luZChr
aW5kKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAkocmV2aXNp
b24gMTM0NzgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlbmRl
cmVkKCk7CiAgICAgaW50IHRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MoKTsKIAor
ICAgIGJvb2wgaGFzQmVlbkNvbmZpZ3VyZWQoKSBjb25zdCB7IHJldHVybiBtX2hhc0JlZW5Db25m
aWd1cmVkOyB9CisgICAgdm9pZCBzZXRIYXNCZWVuQ29uZmlndXJlZChib29sIGZsYWcpIHsgbV9o
YXNCZWVuQ29uZmlndXJlZCA9IGZsYWc7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1bHQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRJc0RlZmF1bHQo
Ym9vbCkgeyB9CisKIHByb3RlY3RlZDoKICAgICBUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFRleHRUcmFja0NsaWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYga2luZCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBsYWJlbCwgY29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFnZSwgVGV4dFRy
YWNrVHlwZSk7CiAKQEAgLTEzNCw2ICsxNDAsNyBAQCBwcml2YXRlOgogICAgIGludCBtX3RyYWNr
SW5kZXg7CiAgICAgaW50IG1fcmVuZGVyZWRUcmFja0luZGV4OwogICAgIGJvb2wgbV9zaG93aW5n
QnlEZWZhdWx0OworICAgIGJvb2wgbV9oYXNCZWVuQ29uZmlndXJlZDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTAwMSkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTExLTE2ICBF
cmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEhUTUxNZWRp
YUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja3Mgc2hvdWxkIGNvbmZpZ3VyZSBhbGwgdGV4dCB0
cmFja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MjU2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSB0ZXN0IGFuZCByZXN1bHRzIHRvIGNoZWNrIHRoYXQgZHluYW1pY2FsbHkgYWRkZWQgdHJh
Y2tzIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseS4KKworICAgICAgICAqIG1lZGlhL3RyYWNrL3Ry
YWNrLW1vZGUtbm90LWNoYW5nZWQtYnktbmV3LXRyYWNrLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBtZWRpYS90cmFjay90cmFjay1tb2RlLW5vdC1jaGFuZ2VkLWJ5LW5ldy10cmFjay5odG1sOgor
CiAyMDEyLTExLTE2ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBSZW1haW5pbmcgYml0cyBvZiBXaW43IHJlYmFzZWxpbmVzLgpJ
bmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stbW9kZS1ub3QtY2hhbmdlZC1ieS1u
ZXctdHJhY2stZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3Ry
YWNrL3RyYWNrLW1vZGUtbm90LWNoYW5nZWQtYnktbmV3LXRyYWNrLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMTM0NzY3KQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stbW9kZS1ub3Qt
Y2hhbmdlZC1ieS1uZXctdHJhY2stZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2
ICsxOCw3IEBAIEVYUEVDVEVEICh0cmFjazEucmVhZHlTdGF0ZSA9PSAnMicpIE9LCiBFWFBFQ1RF
RCAodHJhY2sxLnRyYWNrLm1vZGUgPT0gJ2hpZGRlbicpIE9LCiBFWFBFQ1RFRCAodHJhY2sxLnRy
YWNrLmN1ZXMubGVuZ3RoID09ICcxMicpIE9LCiBFWFBFQ1RFRCAodHJhY2sxLnRyYWNrLmN1ZXNb
MTFdLnN0YXJ0VGltZSA9PSAnMjInKSBPSworCiAqKmFkZCBhIGNhcHRpb24gdHJhY2ssIGNvbmZp
Z3VyZWQgdG8gbG9hZCBhdXRvbWF0aWNhbGx5CiBSVU4odHJhY2syID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgndHJhY2snKSkKIFJVTih0cmFjazIuc2V0QXR0cmlidXRlKCdraW5kJywgJ2NhcHRp
b25zJykpCkBAIC0zMCw5ICszMSwyNiBAQCBFVkVOVChsb2FkKSAtLSA8dHJhY2sga2luZD0nY2Fw
dGlvbnMnID4KICoqY2hlY2sgdGhhdCBtZXRhZGF0YSB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5n
ZWQKIEVYUEVDVEVEICh0cmFjazEucmVhZHlTdGF0ZSA9PSAnMicpIE9LCiBFWFBFQ1RFRCAodHJh
Y2sxLnRyYWNrLm1vZGUgPT0gJ2hpZGRlbicpIE9LCi0qKmFuZCB0aGF0IHRoZSBjYXB0aW9ucyB0
cmFjayBzdGF0ZSBpcyBjb3JyZWN0CisqKmFuZCB0aGF0IHRoZSBjYXB0aW9uIHRyYWNrIHN0YXRl
IGlzIGNvcnJlY3QKK0VYUEVDVEVEICh0cmFjazIucmVhZHlTdGF0ZSA9PSAnMicpIE9LCitFWFBF
Q1RFRCAodHJhY2syLnRyYWNrLm1vZGUgPT0gJ3Nob3dpbmcnKSBPSworCisqKmFkZCBhIHN1YnRp
dGxlIHRyYWNrIHdpdGggdmlkZW8uYWRkVGV4dFRyYWNrKCkKK1JVTih0cmFjazMgPSB2aWRlby5h
ZGRUZXh0VHJhY2soJ3N1YnRpdGxlcycsICdTdWJ0aXRsZSBUcmFjaycsICdlbicpKQorUlVOKHRy
YWNrMy5tb2RlID0gJ3Nob3dpbmcnKQorCitFVkVOVChhZGR0cmFjaykKKyoqY2hlY2sgdGhhdCBt
ZXRhZGF0YSB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5nZWQKK0VYUEVDVEVEICh0cmFjazEucmVh
ZHlTdGF0ZSA9PSAnMicpIE9LCitFWFBFQ1RFRCAodHJhY2sxLnRyYWNrLm1vZGUgPT0gJ2hpZGRl
bicpIE9LCisqKmFuZCB0aGF0IHRoZSBjYXB0aW9uIHRyYWNrIHN0YXRlIGhhcyBub3QgY2hhbmdl
ZAogRVhQRUNURUQgKHRyYWNrMi5yZWFkeVN0YXRlID09ICcyJykgT0sKIEVYUEVDVEVEICh0cmFj
azIudHJhY2subW9kZSA9PSAnc2hvd2luZycpIE9LCisqKmFuZCB0aGF0IHRoZSBzdWJ0aXRsZSB0
cmFjayBzdGF0ZSBpcyBjb3JyZWN0CitFWFBFQ1RFRCAoZXZlbnQudGFyZ2V0ID09ICdbb2JqZWN0
IFRleHRUcmFja0xpc3RdJykgT0sKK0VYUEVDVEVEIChldmVudCBpbnN0YW5jZW9mIHdpbmRvdy5U
cmFja0V2ZW50ID09ICd0cnVlJykgT0sKK0VYUEVDVEVEIChldmVudC50cmFjayA9PSAnW29iamVj
dCBUZXh0VHJhY2tdJykgT0sKK0VYUEVDVEVEICh0cmFjazMubW9kZSA9PSAnaGlkZGVuJyksIE9C
U0VSVkVEICdzaG93aW5nJyBGQUlMCiAKIEVORCBPRiBURVNUCiAKSW5kZXg6IExheW91dFRlc3Rz
L21lZGlhL3RyYWNrL3RyYWNrLW1vZGUtbm90LWNoYW5nZWQtYnktbmV3LXRyYWNrLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stbW9kZS1ub3QtY2hhbmdl
ZC1ieS1uZXctdHJhY2suaHRtbAkocmV2aXNpb24gMTM0NzY3KQorKysgTGF5b3V0VGVzdHMvbWVk
aWEvdHJhY2svdHJhY2stbW9kZS1ub3QtY2hhbmdlZC1ieS1uZXctdHJhY2suaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtNywxNyArNyw0MiBAQAogICAgICAgICA8c2NyaXB0IHNyYz0uLi92aWRlby10
ZXN0LmpzPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0PgogCisgICAgICAgICAgICBmdW5jdGlv
biB0cmFja0FkZGVkKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3Jp
dGUoIkVWRU5UKCIgKyBldmVudC50eXBlICsgIikiKTsKKyAgICAgICAgICAgICAgICBjb25zb2xl
V3JpdGUoIjxpPioqY2hlY2sgdGhhdCBtZXRhZGF0YSB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5n
ZWQ8IiArICIvaT4iKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrMS5yZWFk
eVN0YXRlIiwgSFRNTFRyYWNrRWxlbWVudC5MT0FERUQpOworICAgICAgICAgICAgICAgIHRlc3RF
eHBlY3RlZCgidHJhY2sxLnRyYWNrLm1vZGUiLCAiaGlkZGVuIik7CisgICAgICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCI8aT4qKmFuZCB0aGF0IHRoZSBjYXB0aW9uIHRyYWNrIHN0YXRlIGhhcyBu
b3QgY2hhbmdlZDwiICsgIi9pPiIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJh
Y2syLnJlYWR5U3RhdGUiLCBIVE1MVHJhY2tFbGVtZW50LkxPQURFRCk7CisgICAgICAgICAgICAg
ICAgdGVzdEV4cGVjdGVkKCJ0cmFjazIudHJhY2subW9kZSIsICJzaG93aW5nIik7CisgICAgICAg
ICAgICAgICAgY29uc29sZVdyaXRlKCI8aT4qKmFuZCB0aGF0IHRoZSBzdWJ0aXRsZSB0cmFjayBz
dGF0ZSBpcyBjb3JyZWN0PCIgKyAiL2k+Iik7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJldmVudC50YXJnZXQiLCB2aWRlby50ZXh0VHJhY2tzKTsKKyAgICAgICAgICAgICAgICB0ZXN0
RXhwZWN0ZWQoImV2ZW50IGluc3RhbmNlb2Ygd2luZG93LlRyYWNrRXZlbnQiLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoImV2ZW50LnRyYWNrIiwgdmlkZW8udGV4dFRyYWNr
c1t2aWRlby50ZXh0VHJhY2tzLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhw
ZWN0ZWQoInRyYWNrMy5tb2RlIiwgImhpZGRlbiIpOworCisgICAgICAgICAgICAgICAgY29uc29s
ZVdyaXRlKCIiKTsKKyAgICAgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGZ1bmN0aW9uIGNhcHRpb25zVHJhY2tMb2FkZWQoKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQobG9hZCkgLS0gJmx0O3RyYWNr
IGtpbmQ9J2NhcHRpb25zJyAmZ3Q7Iik7CiAgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8
aT4qKmNoZWNrIHRoYXQgbWV0YWRhdGEgdHJhY2sgc3RhdGUgaGFzIG5vdCBjaGFuZ2VkPCIgKyAi
L2k+Iik7CiAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjazEucmVhZHlTdGF0ZSIs
IEhUTUxUcmFja0VsZW1lbnQuTE9BREVEKTsKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InRyYWNrMS50cmFjay5tb2RlIiwgImhpZGRlbiIpOwotICAgICAgICAgICAgICAgIGNvbnNvbGVX
cml0ZSgiPGk+KiphbmQgdGhhdCB0aGUgY2FwdGlvbnMgdHJhY2sgc3RhdGUgaXMgY29ycmVjdDwi
ICsgIi9pPiIpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGk+KiphbmQgdGhhdCB0
aGUgY2FwdGlvbiB0cmFjayBzdGF0ZSBpcyBjb3JyZWN0PCIgKyAiL2k+Iik7CiAgICAgICAgICAg
ICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjazIucmVhZHlTdGF0ZSIsIEhUTUxUcmFja0VsZW1lbnQu
TE9BREVEKTsKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrMi50cmFjay5tb2Rl
IiwgInNob3dpbmciKTsKICAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOwotICAgICAg
ICAgICAgICAgIGVuZFRlc3QoKTsKKworICAgICAgICAgICAgICAgIHZpZGVvLnRleHRUcmFja3Mu
YWRkRXZlbnRMaXN0ZW5lcigiYWRkdHJhY2siLCB0cmFja0FkZGVkKTsKKyAgICAgICAgICAgICAg
ICBjb25zb2xlV3JpdGUoIjxpPioqYWRkIGEgc3VidGl0bGUgdHJhY2sgd2l0aCB2aWRlby5hZGRU
ZXh0VHJhY2soKTwiICsgIi9pPiIpOworICAgICAgICAgICAgICAgIHJ1bigidHJhY2szID0gdmlk
ZW8uYWRkVGV4dFRyYWNrKCdzdWJ0aXRsZXMnLCAnU3VidGl0bGUgVHJhY2snLCAnZW4nKSIpOwor
ICAgICAgICAgICAgICAgIHJ1bigidHJhY2szLm1vZGUgPSAnc2hvd2luZyciKTsKKworICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGZ1bmN0aW9uIG1ldGFkYXRhVHJhY2tMb2FkZWQoKQpAQCAtMjksNyArNTQsNyBAQAogICAgICAg
ICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2sxLnRyYWNrLmN1ZXMubGVuZ3RoIiwgMTIpOwog
ICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2sxLnRyYWNrLmN1ZXNbMTFdLnN0YXJ0
VGltZSIsIDIyKTsKIAotICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGk+KiphZGQgYSBj
YXB0aW9uIHRyYWNrLCBjb25maWd1cmVkIHRvIGxvYWQgYXV0b21hdGljYWxseTwiICsgIi9pPiIp
OworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGJyPjxpPioqYWRkIGEgY2FwdGlvbiB0
cmFjaywgY29uZmlndXJlZCB0byBsb2FkIGF1dG9tYXRpY2FsbHk8IiArICIvaT4iKTsKICAgICAg
ICAgICAgICAgICBydW4oInRyYWNrMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyYWNrJyki
KTsKICAgICAgICAgICAgICAgICBydW4oInRyYWNrMi5zZXRBdHRyaWJ1dGUoJ2tpbmQnLCAnY2Fw
dGlvbnMnKSIpOwogICAgICAgICAgICAgICAgIHJ1bigidHJhY2syLnNldEF0dHJpYnV0ZSgnZGVm
YXVsdCcsICdkZWZhdWx0JykiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175044</attachid>
            <date>2012-11-19 14:43:22 -0800</date>
            <delta_ts>2012-11-19 15:07:19 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>refactoring_patch_6.txt</filename>
            <type>text/plain</type>
            <size>24284</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTExLTE5ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEhUTUxNZWRpYUVsZW1l
bnQ6OmNvbmZpZ3VyZVRleHRUcmFja3Mgc2hvdWxkIGNvbmZpZ3VyZSBhbGwgdGV4dCB0cmFja3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjU2MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgdHJhY2stbW9kZS1ub3QtY2hhbmdlZC1ieS1uZXctdHJhY2suaHRtbCB3YXMgdXBkYXRl
ZCB0byB0ZXN0IHRoZSBjaGFuZ2VzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVD
aGFuZ2VkKTogSFRNTFRyYWNrRWxlbWVudCAtPiBUZXh0VHJhY2suCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojp3aWxsUmVtb3ZlVHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFja0dyb3VwKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlv
bkFuZFN1YnRpdGxlVHJhY2tzQXNVbmNvbmZpZ3VyZWQpOiBEaXR0by4KKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpIVE1MVHJhY2tFbGVtZW50
KTogTW92ZSBoYXNCZWVuQ29uZmlndXJlZCBkb3duIHRvIFRleHRUcmFjay4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTogaXNEZWZhdWx0IGlzIHN0
b3JlZCBvbiBUZXh0VHJhY2suCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50Ojpl
bnN1cmVUcmFjayk6IExvYWRhYmxlVGV4dFRyYWNrIGNvbnN0cnVjdG9yIGRvZXNuJ3QgdGFrZSAK
KyAgICAgICAgICAgICJkZWZhdWx0IiBhcmd1bWVudC4KKyAgICAgICAgKiBodG1sL0hUTUxUcmFj
a0VsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVUZXh0VHJhY2s6OkxvYWRhYmxlVGV4dFRyYWNr
KTogSW5pdGlhbGl6ZSBtX2lzRGVmYXVsdCB0byBmYWxzZS4KKyAgICAgICAgKiBodG1sL3RyYWNr
L0xvYWRhYmxlVGV4dFRyYWNrLmg6IAorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc0Rl
ZmF1bHQpOiBPdmVycmlkZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIGEgdHJh
Y2sgZWxlbWVudAorICAgICAgICAgICAgY2FuIGJlIGZsYWdnZWQgYXMgZGVmYXVsdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFjazo6c2V0SXNEZWZhdWx0KTogRGl0dG8uCisKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6
OlRleHRUcmFjayk6IEluaXRpYWxpemUgbV9oYXNCZWVuQ29uZmlndXJlZC4KKyAgICAgICAgKiBo
dG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpoYXNC
ZWVuQ29uZmlndXJlZCk6IE5ldywgbW92ZWQgZnJvbSBIVE1MVHJhY2tFbGVtZW50IHNvIG90aGVy
IGNvZGUgZG9lc24ndAorICAgICAgICAgICAgbmVlZCBrbm93IHdoYXQgdHlwZSBvZiB0cmFjayBp
dCBpcyBjYWxsaW5nLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRIYXNCZWVuQ29u
ZmlndXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjppc0RlZmF1bHQp
OiBCYXNlLCBkbyBub3RoaW5nLCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIG9ubHkgTG9hZGFibGVU
ZXh0VHJhY2sKKyAgICAgICAgICAgIGNhbiBiZSAiZGVmYXVsdCIuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2s6OnNldElzRGVmYXVsdCk6IERpdHRvLgorCiAyMDEyLTExLTE5ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBOZXR3b3JrUHJvY2VzcyBBdXRo
ZW50aWNhdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMTM1MTgxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyMiw3ICsxMzIyLDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYXJrIHRoaXMgdHJhY2sgYXMgImNvbmZpZ3Vy
ZWQiIHNvIGNvbmZpZ3VyZVRleHRUcmFja3Mgd29uJ3QgY2hhbmdlIHRoZSBtb2RlIGFnYWluLgot
ICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRIYXNCZWVuQ29uZmlndXJlZCh0cnVlKTsKKyAg
ICAgICAgICAgIHRyYWNrLT5zZXRIYXNCZWVuQ29uZmlndXJlZCh0cnVlKTsKICAgICAgICAgICAg
IGlmICh0cmFjay0+bW9kZSgpICE9IFRleHRUcmFjazo6ZGlzYWJsZWRLZXl3b3JkKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAodHJhY2tFbGVtZW50LT5yZWFkeVN0YXRlKCkgPT0gSFRNTFRyYWNr
RWxlbWVudDo6TE9BREVEKQogICAgICAgICAgICAgICAgICAgICB0ZXh0VHJhY2tBZGRDdWVzKHRy
YWNrLCB0cmFjay0+Y3VlcygpKTsKQEAgLTI3NjQsMjIgKzI3NjQsNiBAQCBUZXh0VHJhY2tMaXN0
KiBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhCiAgICAgcmV0dXJuIG1fdGV4dFRyYWNrcy5nZXQo
KTsKIH0KIAotSFRNTFRyYWNrRWxlbWVudCogSFRNTE1lZGlhRWxlbWVudDo6c2hvd2luZ1RyYWNr
V2l0aFNhbWVLaW5kKEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrRWxlbWVudCkgY29uc3QKLXsKLSAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0
U2libGluZygpKSB7Ci0gICAgICAgIGlmICh0cmFja0VsZW1lbnQgPT0gbm9kZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgSFRNTFRyYWNrRWxlbWVudCogc2hvd2lu
Z1RyYWNrID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxlbWVudCo+KG5vZGUpOwotICAgICAgICBp
ZiAoc2hvd2luZ1RyYWNrLT5raW5kKCkgPT0gdHJhY2tFbGVtZW50LT5raW5kKCkgJiYgc2hvd2lu
Z1RyYWNrLT50cmFjaygpLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpzaG93aW5nS2V5d29yZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHNob3dpbmdUcmFjazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IDA7Ci19Ci0KIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVHJhY2soSFRNTFRyYWNrRWxl
bWVudCogdHJhY2tFbGVtZW50KQogewogICAgIEFTU0VSVCh0cmFja0VsZW1lbnQtPmhhc1RhZ05h
bWUodHJhY2tUYWcpKTsKQEAgLTI4MTcsMTQgKzI4MDEsMTUgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp3aWxsUmVtb3ZlVHJhY2soSAogICAgIH0KICNlbmRpZgogCi0gICAgdHJhY2tFbGVtZW50
LT5zZXRIYXNCZWVuQ29uZmlndXJlZChmYWxzZSk7CisgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4
dFRyYWNrID0gdHJhY2tFbGVtZW50LT50cmFjaygpOworICAgIGlmICghdGV4dFRyYWNrKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgdGV4dFRyYWNrLT5zZXRIYXNCZWVuQ29uZmlndXJlZChm
YWxzZSk7CiAKICAgICBpZiAoIW1fdGV4dFRyYWNrcykKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIFJlZlB0cjxUZXh0VHJhY2s+IHRleHRUcmFjayA9IHRyYWNrRWxlbWVudC0+dHJhY2soKTsK
LSAgICBpZiAoIXRleHRUcmFjaykKLSAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNC44LjEwLjEy
LjMgU291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKICAgICAvLyBXaGVuIGEgdHJhY2sg
ZWxlbWVudCdzIHBhcmVudCBlbGVtZW50IGNoYW5nZXMgYW5kIHRoZSBvbGQgcGFyZW50IHdhcyBh
IG1lZGlhIGVsZW1lbnQsIApAQCAtMjg4MSw3ICsyODY2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojpjb25maWd1cmVUZXh0VHJhYwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7
CiAgICAgICAgIGxhbmd1YWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGdyb3VwLnRyYWNrcy5z
aXplKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3VwLnRyYWNrcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIHNyY0xhbmd1YWdlID0gZ3JvdXAudHJhY2tz
W2ldLT50cmFjaygpLT5sYW5ndWFnZSgpOworICAgICAgICAgICAgU3RyaW5nIHNyY0xhbmd1YWdl
ID0gZ3JvdXAudHJhY2tzW2ldLT5sYW5ndWFnZSgpOwogICAgICAgICAgICAgaWYgKHNyY0xhbmd1
YWdlLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoc3JjTGFuZ3Vh
Z2UpOwogICAgICAgICB9CkBAIC0yODg5LDEyICsyODc0LDExIEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6Y29uZmlndXJlVGV4dFRyYWMKICAgICB9CiAKICAgICAvLyBGaXJzdCwgZmluZCB0aGUg
dHJhY2sgaW4gdGhlIGdyb3VwIHRoYXQgc2hvdWxkIGJlIGVuYWJsZWQgKGlmIGFueSkuCi0gICAg
SFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50VG9FbmFibGUgPSAwOwotICAgIEhUTUxUcmFj
a0VsZW1lbnQqIGRlZmF1bHRUcmFjayA9IDA7Ci0gICAgSFRNTFRyYWNrRWxlbWVudCogZmFsbGJh
Y2tUcmFjayA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7ICF0cmFja0VsZW1lbnRUb0VuYWJs
ZSAmJiBpIDwgZ3JvdXAudHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxUcmFja0Vs
ZW1lbnQqIHRyYWNrRWxlbWVudCA9IGdyb3VwLnRyYWNrc1tpXTsKLSAgICAgICAgUmVmUHRyPFRl
eHRUcmFjaz4gdGV4dFRyYWNrID0gdHJhY2tFbGVtZW50LT50cmFjaygpOworICAgIFJlZlB0cjxU
ZXh0VHJhY2s+IHRyYWNrVG9FbmFibGU7CisgICAgUmVmUHRyPFRleHRUcmFjaz4gZGVmYXVsdFRy
YWNrOworICAgIFJlZlB0cjxUZXh0VHJhY2s+IGZhbGxiYWNrVHJhY2s7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7ICF0cmFja1RvRW5hYmxlICYmIGkgPCBncm91cC50cmFja3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gZ3JvdXAudHJhY2tzW2ld
OwogCiAgICAgICAgIGlmICh1c2VySXNJbnRlcmVzdGVkSW5UaGlzVHJhY2tLaW5kKHRleHRUcmFj
ay0+a2luZCgpKSkgewogICAgICAgICAgICAgLy8gKiBJZiB0aGUgdGV4dCB0cmFjayBraW5kIGlz
IHsgW3N1YnRpdGxlcyBvciBjYXB0aW9uc10gW2Rlc2NyaXB0aW9uc10gfSBhbmQgdGhlIHVzZXIg
aGFzIGluZGljYXRlZCBhbiBpbnRlcmVzdCBpbiBoYXZpbmcgYQpAQCAtMjkwOCwzOSArMjg5Miwz
OCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFjCiAgICAgICAgICAg
ICAvLyAgICBMZXQgdGhlIHRleHQgdHJhY2sgbW9kZSBiZSBzaG93aW5nLgogICAgICAgICAgICAg
aWYgKGJlc3RNYXRjaGluZ0xhbmd1YWdlLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHRleHRUcmFjay0+bGFuZ3VhZ2UoKSA9PSBiZXN0TWF0Y2hpbmdMYW5ndWFnZSkKLSAgICAgICAg
ICAgICAgICAgICAgdHJhY2tFbGVtZW50VG9FbmFibGUgPSB0cmFja0VsZW1lbnQ7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKHRyYWNrRWxlbWVudC0+aXNEZWZhdWx0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdHJhY2tUb0VuYWJsZSA9IHRleHRUcmFjazsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAodGV4dFRyYWNrLT5pc0RlZmF1bHQoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSB1c2Vy
IGlzIGludGVyZXN0ZWQgaW4gdGhpcyB0eXBlIG9mIHRyYWNrLCBidXQgdGhlaXIgbGFuZ3VhZ2Ug
cHJlZmVyZW5jZSBkb2Vzbid0IG1hdGNoIGFueSB0cmFjayBzbyB3ZSB3aWxsCiAgICAgICAgICAg
ICAgICAgLy8gZW5hYmxlIHRoZSAnZGVmYXVsdCcgdHJhY2suCi0gICAgICAgICAgICAgICAgZGVm
YXVsdFRyYWNrID0gdHJhY2tFbGVtZW50OworICAgICAgICAgICAgICAgIGRlZmF1bHRUcmFjayA9
IHRleHRUcmFjazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhl
IGZpcnN0IHRyYWNrIHRoYXQgZG9lc24ndCBtYXRjaCBsYW5ndWFnZSBvciBoYXZlICdkZWZhdWx0
JyB0byBwb3RlbnRpYWxseSB1c2UgYXMgZmFsbGJhY2suCiAgICAgICAgICAgICBpZiAoIWZhbGxi
YWNrVHJhY2spCi0gICAgICAgICAgICAgICAgZmFsbGJhY2tUcmFjayA9IHRyYWNrRWxlbWVudDsK
LSAgICAgICAgfSBlbHNlIGlmICghZ3JvdXAudmlzaWJsZVRyYWNrICYmICFkZWZhdWx0VHJhY2sg
JiYgdHJhY2tFbGVtZW50LT5pc0RlZmF1bHQoKSkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNr
VHJhY2sgPSB0ZXh0VHJhY2s7CisgICAgICAgIH0gZWxzZSBpZiAoIWdyb3VwLnZpc2libGVUcmFj
ayAmJiAhZGVmYXVsdFRyYWNrICYmIHRleHRUcmFjay0+aXNEZWZhdWx0KCkpIHsKICAgICAgICAg
ICAgIC8vICogSWYgdGhlIHRyYWNrIGVsZW1lbnQgaGFzIGEgZGVmYXVsdCBhdHRyaWJ1dGUgc3Bl
Y2lmaWVkLCBhbmQgdGhlcmUgaXMgbm8gb3RoZXIgdGV4dCB0cmFjayBpbiB0aGUgbWVkaWEKICAg
ICAgICAgICAgIC8vIGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tzIHdob3NlIHRleHQgdHJh
Y2sgbW9kZSBpcyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVsdAogICAgICAgICAgICAgLy8g
ICAgTGV0IHRoZSB0ZXh0IHRyYWNrIG1vZGUgYmUgc2hvd2luZyBieSBkZWZhdWx0LgotICAgICAg
ICAgICAgZGVmYXVsdFRyYWNrID0gdHJhY2tFbGVtZW50OworICAgICAgICAgICAgZGVmYXVsdFRy
YWNrID0gdGV4dFRyYWNrLmdldCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCF0cmFj
a0VsZW1lbnRUb0VuYWJsZSAmJiBkZWZhdWx0VHJhY2spCi0gICAgICAgIHRyYWNrRWxlbWVudFRv
RW5hYmxlID0gZGVmYXVsdFRyYWNrOworICAgIGlmICghdHJhY2tUb0VuYWJsZSAmJiBkZWZhdWx0
VHJhY2spCisgICAgICAgIHRyYWNrVG9FbmFibGUgPSBkZWZhdWx0VHJhY2s7CiAKICAgICAvLyBJ
ZiBubyB0cmFjayBtYXRjaGVzIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlIGFuZCBub24g
d2FzIG1hcmtlZCAnZGVmYXVsdCcsIGVuYWJsZSB0aGUgZmlyc3QgdHJhY2sKICAgICAvLyBiZWNh
dXNlIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IHN0YXRlZCBhIHByZWZlcmVuY2UgZm9yIHRoaXMg
a2luZCBvZiB0cmFjay4KLSAgICBpZiAoIXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGZhbGxiYWNr
VHJhY2spCi0gICAgICAgIHRyYWNrRWxlbWVudFRvRW5hYmxlID0gZmFsbGJhY2tUcmFjazsKKyAg
ICBpZiAoIXRyYWNrVG9FbmFibGUgJiYgZmFsbGJhY2tUcmFjaykKKyAgICAgICAgdHJhY2tUb0Vu
YWJsZSA9IGZhbGxiYWNrVHJhY2s7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3Vw
LnRyYWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MVHJhY2tFbGVtZW50KiB0cmFja0Vs
ZW1lbnQgPSBncm91cC50cmFja3NbaV07Ci0gICAgICAgIFJlZlB0cjxUZXh0VHJhY2s+IHRleHRU
cmFjayA9IHRyYWNrRWxlbWVudC0+dHJhY2soKTsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4g
dGV4dFRyYWNrID0gZ3JvdXAudHJhY2tzW2ldOwogICAgICAgICAKLSAgICAgICAgaWYgKHRyYWNr
RWxlbWVudFRvRW5hYmxlID09IHRyYWNrRWxlbWVudCkgeworICAgICAgICBpZiAodHJhY2tUb0Vu
YWJsZSA9PSB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgIHRleHRUcmFjay0+c2V0TW9kZShUZXh0
VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpOwotICAgICAgICAgICAgaWYgKGRlZmF1bHRUcmFjayA9
PSB0cmFja0VsZW1lbnQpCisgICAgICAgICAgICBpZiAoZGVmYXVsdFRyYWNrID09IHRleHRUcmFj
aykKICAgICAgICAgICAgICAgICB0ZXh0VHJhY2stPnNldFNob3dpbmdCeURlZmF1bHQodHJ1ZSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAodGV4dFRyYWNrLT5zaG93aW5nQnlE
ZWZhdWx0KCkpIHsKQEAgLTI5NTQsMTEgKzI5MzcsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojpjb25maWd1cmVUZXh0VHJhYwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHRyYWNrRWxl
bWVudFRvRW5hYmxlICYmIGdyb3VwLmRlZmF1bHRUcmFjayAmJiBncm91cC5kZWZhdWx0VHJhY2sg
IT0gdHJhY2tFbGVtZW50VG9FbmFibGUpIHsKLSAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4
dFRyYWNrID0gZ3JvdXAuZGVmYXVsdFRyYWNrLT50cmFjaygpOwotICAgICAgICBpZiAodGV4dFRy
YWNrICYmIHRleHRUcmFjay0+c2hvd2luZ0J5RGVmYXVsdCgpKSB7Ci0gICAgICAgICAgICB0ZXh0
VHJhY2stPnNldFNob3dpbmdCeURlZmF1bHQoZmFsc2UpOwotICAgICAgICAgICAgdGV4dFRyYWNr
LT5zZXRNb2RlKFRleHRUcmFjazo6aGlkZGVuS2V5d29yZCgpKTsKKyAgICBpZiAodHJhY2tUb0Vu
YWJsZSAmJiBncm91cC5kZWZhdWx0VHJhY2sgJiYgZ3JvdXAuZGVmYXVsdFRyYWNrICE9IHRyYWNr
VG9FbmFibGUpIHsKKyAgICAgICAgaWYgKGdyb3VwLmRlZmF1bHRUcmFjayAmJiBncm91cC5kZWZh
dWx0VHJhY2stPnNob3dpbmdCeURlZmF1bHQoKSkgeworICAgICAgICAgICAgZ3JvdXAuZGVmYXVs
dFRyYWNrLT5zZXRTaG93aW5nQnlEZWZhdWx0KGZhbHNlKTsKKyAgICAgICAgICAgIGdyb3VwLmRl
ZmF1bHRUcmFjay0+c2V0TW9kZShUZXh0VHJhY2s6OmhpZGRlbktleXdvcmQoKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0yOTcxLDEyICsyOTUzLDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6Y29uZmlndXJlVGV4dFRyYWMKICAgICBUcmFja0dyb3VwIG1ldGFkYXRhVHJhY2tzKFRyYWNr
R3JvdXA6Ok1ldGFkYXRhKTsKICAgICBUcmFja0dyb3VwIG90aGVyVHJhY2tzKFRyYWNrR3JvdXA6
Ok90aGVyKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5oYXNUYWdOYW1l
KHRyYWNrVGFnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGlmICghbV90ZXh0VHJhY2tz
KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxlbWVudCo+KG5vZGUpOwotICAgICAgICBSZWZQ
dHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRyYWNrKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHRUcmFja3MtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gbV90ZXh0VHJhY2tzLT5pdGVtKGkpOwog
ICAgICAgICBpZiAoIXRleHRUcmFjaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yOTk0
LDkgKzI5NzUsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFjCiAg
ICAgICAgICAgICBjdXJyZW50R3JvdXAgPSAmb3RoZXJUcmFja3M7CiAKICAgICAgICAgaWYgKCFj
dXJyZW50R3JvdXAtPnZpc2libGVUcmFjayAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJh
Y2s6OnNob3dpbmdLZXl3b3JkKCkpCi0gICAgICAgICAgICBjdXJyZW50R3JvdXAtPnZpc2libGVU
cmFjayA9IHRyYWNrRWxlbWVudDsKLSAgICAgICAgaWYgKCFjdXJyZW50R3JvdXAtPmRlZmF1bHRU
cmFjayAmJiB0cmFja0VsZW1lbnQtPmlzRGVmYXVsdCgpKQotICAgICAgICAgICAgY3VycmVudEdy
b3VwLT5kZWZhdWx0VHJhY2sgPSB0cmFja0VsZW1lbnQ7CisgICAgICAgICAgICBjdXJyZW50R3Jv
dXAtPnZpc2libGVUcmFjayA9IHRleHRUcmFjazsKKyAgICAgICAgaWYgKCFjdXJyZW50R3JvdXAt
PmRlZmF1bHRUcmFjayAmJiB0ZXh0VHJhY2stPmlzRGVmYXVsdCgpKQorICAgICAgICAgICAgY3Vy
cmVudEdyb3VwLT5kZWZhdWx0VHJhY2sgPSB0ZXh0VHJhY2s7CiAKICAgICAgICAgLy8gRG8gbm90
IGFkZCB0aGlzIHRyYWNrIHRvIHRoZSBncm91cCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGF1dG9t
YXRpY2FsbHkgY29uZmlndXJlZAogICAgICAgICAvLyBhcyB3ZSBvbmx5IHdhbnQgdG8gY2FsbCBj
b25maWd1cmVUZXh0VHJhY2sgb25jZSBwZXIgdHJhY2sgc28gdGhhdCBhZGRpbmcgYW5vdGhlciAK
QEAgLTMwMDQsMTIgKzI5ODUsMTIgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVU
ZXh0VHJhYwogICAgICAgICAvLyB0aGF0IHNob3VsZCBiZSBjaGFuZ2VkIGJ5IHRoZSBuZXcgYWRk
aXRpb24uIEZvciBleGFtcGxlIGFsbCBtZXRhZGF0YSB0cmFja3MgYXJlIAogICAgICAgICAvLyBk
aXNhYmxlZCBieSBkZWZhdWx0LCBhbmQgd2UgZG9uJ3Qgd2FudCBhIHRyYWNrIHRoYXQgaGFzIGJl
ZW4gZW5hYmxlZCBieSBzY3JpcHQgCiAgICAgICAgIC8vIHRvIGJlIGRpc2FibGVkIGF1dG9tYXRp
Y2FsbHkgd2hlbiBhIG5ldyBtZXRhZGF0YSB0cmFjayBpcyBhZGRlZCBsYXRlci4KLSAgICAgICAg
aWYgKHRyYWNrRWxlbWVudC0+aGFzQmVlbkNvbmZpZ3VyZWQoKSkKKyAgICAgICAgaWYgKHRleHRU
cmFjay0+aGFzQmVlbkNvbmZpZ3VyZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgaWYgKHRleHRUcmFjay0+bGFuZ3VhZ2UoKS5sZW5ndGgoKSkKICAgICAgICAg
ICAgIGN1cnJlbnRHcm91cC0+aGFzU3JjTGFuZyA9IHRydWU7Ci0gICAgICAgIGN1cnJlbnRHcm91
cC0+dHJhY2tzLmFwcGVuZCh0cmFja0VsZW1lbnQpOworICAgICAgICBjdXJyZW50R3JvdXAtPnRy
YWNrcy5hcHBlbmQodGV4dFRyYWNrKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGNhcHRpb25BbmRT
dWJ0aXRsZVRyYWNrcy50cmFja3Muc2l6ZSgpKQpAQCAtNDI1OCw3ICs0MjM5LDcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjptYXJrQ2FwdGlvbkFuZFN1YgogICAgICAgICBTdHJpbmcga2luZCA9
IHRleHRUcmFjay0+a2luZCgpOwogCiAgICAgICAgIGlmIChraW5kID09IFRleHRUcmFjazo6c3Vi
dGl0bGVzS2V5d29yZCgpIHx8IGtpbmQgPT0gVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdvcmQoKSkK
LSAgICAgICAgICAgIHRyYWNrRWxlbWVudC0+c2V0SGFzQmVlbkNvbmZpZ3VyZWQoZmFsc2UpOwor
ICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRIYXNCZWVuQ29uZmlndXJlZChmYWxzZSk7CiAgICAg
fQogICAgIGNvbmZpZ3VyZVRleHRUcmFja3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxMzUxODEpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDkgKzIzMCw5IEBA
IHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgVmVjdG9yPEhUTUxUcmFj
a0VsZW1lbnQqPiB0cmFja3M7Ci0gICAgICAgIEhUTUxUcmFja0VsZW1lbnQqIHZpc2libGVUcmFj
azsKLSAgICAgICAgSFRNTFRyYWNrRWxlbWVudCogZGVmYXVsdFRyYWNrOworICAgICAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4gPiB0cmFja3M7CisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2s+
IHZpc2libGVUcmFjazsKKyAgICAgICAgUmVmUHRyPFRleHRUcmFjaz4gZGVmYXVsdFRyYWNrOwog
ICAgICAgICBHcm91cEtpbmQga2luZDsKICAgICAgICAgYm9vbCBoYXNTcmNMYW5nOwogICAgIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAJKHJldmlzaW9u
IDEzNTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAgc3RhdGljIFN0cmluZyB1cmxGb3JMb2dnaW5n
KGNvbnN0IEtVUkwmIAogICAgIAogaW5saW5lIEhUTUxUcmFja0VsZW1lbnQ6OkhUTUxUcmFja0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQog
ICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2hhc0JlZW5Db25m
aWd1cmVkKGZhbHNlKQogewogICAgIExPRyhNZWRpYSwgIkhUTUxUcmFja0VsZW1lbnQ6OkhUTUxU
cmFja0VsZW1lbnQgLSAlcCIsIHRoaXMpOwogICAgIEFTU0VSVChoYXNUYWdOYW1lKHRyYWNrVGFn
KSk7CkBAIC0xMDksNiArMTA4LDggQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjbwogICAgICAgICAgICAgdHJhY2soKS0+c2V0TGFiZWwodmFsdWUpOwogICAgICAgICBl
bHNlIGlmIChuYW1lID09IHNyY2xhbmdBdHRyKQogICAgICAgICAgICAgdHJhY2soKS0+c2V0TGFu
Z3VhZ2UodmFsdWUpOworICAgICAgICBlbHNlIGlmIChuYW1lID09IGRlZmF1bHRBdHRyKQorICAg
ICAgICAgICAgdHJhY2soKS0+c2V0SXNEZWZhdWx0KCF2YWx1ZS5pc051bGwoKSk7CiAgICAgfQog
CiAgICAgaWYgKG5hbWUgPT0gb25sb2FkQXR0cikKQEAgLTE3Niw3ICsxNzcsNyBAQCBMb2FkYWJs
ZVRleHRUcmFjayogSFRNTFRyYWNrRWxlbWVudDo6ZW5zCiAgICAgICAgIFN0cmluZyBraW5kID0g
Z2V0QXR0cmlidXRlKGtpbmRBdHRyKTsKICAgICAgICAgaWYgKCFUZXh0VHJhY2s6OmlzVmFsaWRL
aW5kS2V5d29yZChraW5kKSkKICAgICAgICAgICAgIGtpbmQgPSBUZXh0VHJhY2s6OnN1YnRpdGxl
c0tleXdvcmQoKTsKLSAgICAgICAgbV90cmFjayA9IExvYWRhYmxlVGV4dFRyYWNrOjpjcmVhdGUo
dGhpcywga2luZCwgbGFiZWwoKSwgc3JjbGFuZygpLCBpc0RlZmF1bHQoKSk7CisgICAgICAgIG1f
dHJhY2sgPSBMb2FkYWJsZVRleHRUcmFjazo6Y3JlYXRlKHRoaXMsIGtpbmQsIGxhYmVsKCksIHNy
Y2xhbmcoKSk7CiAgICAgfQogICAgIHJldHVybiBtX3RyYWNrLmdldCgpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmgJKHJldmlzaW9uIDEzNTE4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw5ICs2OCw2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFFbGVt
ZW50Q3Jvc3NPcmlnaW5BdHRyaWJ1dGUoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzQmVlbkNvbmZp
Z3VyZWQoKSBjb25zdCB7IHJldHVybiBtX2hhc0JlZW5Db25maWd1cmVkOyB9Ci0gICAgdm9pZCBz
ZXRIYXNCZWVuQ29uZmlndXJlZChib29sIGZsYWcpIHsgbV9oYXNCZWVuQ29uZmlndXJlZCA9IGZs
YWc7IH0KLQogcHJpdmF0ZToKICAgICBIVE1MVHJhY2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxUcmFja0VsZW1lbnQoKTsKQEAgLTEw
MSw3ICs5OCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhbkxvYWRVcmwoY29uc3Qg
S1VSTCYpOwogCiAgICAgUmVmUHRyPExvYWRhYmxlVGV4dFRyYWNrPiBtX3RyYWNrOwotICAgIGJv
b2wgbV9oYXNCZWVuQ29uZmlndXJlZDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwCShyZXZpc2lvbiAxMzUxODEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTG9h
ZGFibGVUZXh0VHJhY2s6OkxvYWRhYmxlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqIHRyYWNr
LCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYg
bGFuZ3VhZ2UsIGJvb2wpCitMb2FkYWJsZVRleHRUcmFjazo6TG9hZGFibGVUZXh0VHJhY2soSFRN
TFRyYWNrRWxlbWVudCogdHJhY2ssIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBs
YWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSkKICAgICA6IFRleHRUcmFjayh0cmFjay0+ZG9j
dW1lbnQoKSwgdHJhY2ssIGtpbmQsIGxhYmVsLCBsYW5ndWFnZSwgVHJhY2tFbGVtZW50KQogICAg
ICwgbV90cmFja0VsZW1lbnQodHJhY2spCiAgICAgLCBtX2xvYWRUaW1lcih0aGlzLCAmTG9hZGFi
bGVUZXh0VHJhY2s6OmxvYWRUaW1lckZpcmVkKQorICAgICwgbV9pc0RlZmF1bHQoZmFsc2UpCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRy
YWNrLmgJKHJldmlzaW9uIDEzNTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9h
ZGFibGVUZXh0VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6
CiAKIGNsYXNzIExvYWRhYmxlVGV4dFRyYWNrIDogcHVibGljIFRleHRUcmFjaywgcHJpdmF0ZSBU
ZXh0VHJhY2tMb2FkZXJDbGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExv
YWRhYmxlVGV4dFRyYWNrPiBjcmVhdGUoSFRNTFRyYWNrRWxlbWVudCogdHJhY2ssIGNvbnN0IFN0
cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwg
Ym9vbCBpc0RlZmF1bHQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9hZGFibGVUZXh0VHJhY2s+
IGNyZWF0ZShIVE1MVHJhY2tFbGVtZW50KiB0cmFjaywgY29uc3QgU3RyaW5nJiBraW5kLCBjb25z
dCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMb2FkYWJsZVRleHRUcmFjayh0cmFjaywga2luZCwgbGFiZWws
IGxhbmd1YWdlLCBpc0RlZmF1bHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2Fk
YWJsZVRleHRUcmFjayh0cmFjaywga2luZCwgbGFiZWwsIGxhbmd1YWdlKSk7CiAgICAgfQogICAg
IHZpcnR1YWwgfkxvYWRhYmxlVGV4dFRyYWNrKCk7CiAKQEAgLTYxLDYgKzYxLDkgQEAgcHVibGlj
OgogICAgIHNpemVfdCB0cmFja0VsZW1lbnRJbmRleCgpOwogICAgIEhUTUxUcmFja0VsZW1lbnQq
IHRyYWNrRWxlbWVudCgpIHsgcmV0dXJuIG1fdHJhY2tFbGVtZW50OyB9CiAKKyAgICB2aXJ0dWFs
IGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0RlZmF1bHQ7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNEZWZhdWx0KGJvb2wgaXNEZWZhdWx0KSBPVkVSUklERSAg
eyBtX2lzRGVmYXVsdCA9IGlzRGVmYXVsdDsgfQorCiBwcml2YXRlOgogICAgIC8vIFRleHRUcmFj
a0xvYWRlckNsaWVudAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRMb2FkQ3VlcyhUZXh0VHJhY2tM
b2FkZXIqKSB7IHJldHVybiB0cnVlOyB9CkBAIC02OCw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIGN1ZUxvYWRpbmdTdGFydGVkKFRleHRUcmFja0xvYWRlciopOwogICAgIHZp
cnR1YWwgdm9pZCBjdWVMb2FkaW5nQ29tcGxldGVkKFRleHRUcmFja0xvYWRlciosIGJvb2wgbG9h
ZGluZ0ZhaWxlZCk7CiAKLSAgICBMb2FkYWJsZVRleHRUcmFjayhIVE1MVHJhY2tFbGVtZW50Kiwg
Y29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxh
bmd1YWdlLCBib29sIGlzRGVmYXVsdCk7CisgICAgTG9hZGFibGVUZXh0VHJhY2soSFRNTFRyYWNr
RWxlbWVudCosIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3Qg
U3RyaW5nJiBsYW5ndWFnZSk7CiAKICAgICB2b2lkIGxvYWRUaW1lckZpcmVkKFRpbWVyPExvYWRh
YmxlVGV4dFRyYWNrPiopOwogCkBAIC03Niw2ICs3OSw3IEBAIHByaXZhdGU6CiAgICAgVGltZXI8
TG9hZGFibGVUZXh0VHJhY2s+IG1fbG9hZFRpbWVyOwogICAgIE93blB0cjxUZXh0VHJhY2tMb2Fk
ZXI+IG1fbG9hZGVyOwogICAgIEtVUkwgbV91cmw7CisgICAgYm9vbCBtX2lzRGVmYXVsdDsKIH07
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFjay5jcHAJKHJldmlzaW9uIDEzNTE4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIFRl
eHRUcmFjazo6VGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnQKICAgICAsIG1fdHJhY2tJbmRl
eChpbnZhbGlkVHJhY2tJbmRleCkKICAgICAsIG1fcmVuZGVyZWRUcmFja0luZGV4KGludmFsaWRU
cmFja0luZGV4KQogICAgICwgbV9zaG93aW5nQnlEZWZhdWx0KGZhbHNlKQorICAgICwgbV9oYXNC
ZWVuQ29uZmlndXJlZChmYWxzZSkKIHsKICAgICBzZXRLaW5kKGtpbmQpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCShyZXZpc2lvbiAxMzUxODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYs
NiArMTE2LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVuZGVyZWQoKTsKICAgICBpbnQgdHJh
Y2tJbmRleFJlbGF0aXZlVG9SZW5kZXJlZFRyYWNrcygpOwogCisgICAgYm9vbCBoYXNCZWVuQ29u
ZmlndXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQmVlbkNvbmZpZ3VyZWQ7IH0KKyAgICB2b2lk
IHNldEhhc0JlZW5Db25maWd1cmVkKGJvb2wgZmxhZykgeyBtX2hhc0JlZW5Db25maWd1cmVkID0g
ZmxhZzsgfQorCisgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldElzRGVmYXVsdChib29sKSB7IH0KKwogcHJvdGVj
dGVkOgogICAgIFRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGV4dFRyYWNrQ2xp
ZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBraW5kLCBjb25zdCBBdG9taWNTdHJpbmcmIGxhYmVs
LCBjb25zdCBBdG9taWNTdHJpbmcmIGxhbmd1YWdlLCBUZXh0VHJhY2tUeXBlKTsKIApAQCAtMTM0
LDYgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fdHJhY2tJbmRleDsKICAgICBpbnQgbV9y
ZW5kZXJlZFRyYWNrSW5kZXg7CiAgICAgYm9vbCBtX3Nob3dpbmdCeURlZmF1bHQ7CisgICAgYm9v
bCBtX2hhc0JlZW5Db25maWd1cmVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTM1MTgxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMTEtMTkgIEVyaWMgQ2FybHNvbiAgPGVyaWMu
Y2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJl
VGV4dFRyYWNrcyBzaG91bGQgY29uZmlndXJlIGFsbCB0ZXh0IHRyYWNrcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNTYxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHRlc3QgYW5kIHJlc3Vs
dHMgdG8gY2hlY2sgdGhhdCBkeW5hbWljYWxseSBhZGRlZCB0cmFja3MgYXJlIGNvbmZpZ3VyZWQg
Y29ycmVjdGx5LgorCisgICAgICAgICogbWVkaWEvdHJhY2svdHJhY2stbW9kZS1ub3QtY2hhbmdl
ZC1ieS1uZXctdHJhY2stZXhwZWN0ZWQudHh0OgorICAgICAgICAqIG1lZGlhL3RyYWNrL3RyYWNr
LW1vZGUtbm90LWNoYW5nZWQtYnktbmV3LXRyYWNrLmh0bWw6CisKIDIwMTItMTEtMTkgIFNoaW55
YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENoYW5naW5nIGlk
LCBjbGFzc05hbWUsIG9yIGF0dHJpYnV0ZSBzaG91bGQgaW52YWxpZGF0ZSBkaXN0cmlidXRpb24K
SW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLW1vZGUtbm90LWNoYW5nZWQtYnkt
bmV3LXRyYWNrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90
cmFjay90cmFjay1tb2RlLW5vdC1jaGFuZ2VkLWJ5LW5ldy10cmFjay1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDEzNTE4MSkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLW1vZGUtbm90
LWNoYW5nZWQtYnktbmV3LXRyYWNrLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTgs
NiArMTgsNyBAQCBFWFBFQ1RFRCAodHJhY2sxLnJlYWR5U3RhdGUgPT0gJzInKSBPSwogRVhQRUNU
RUQgKHRyYWNrMS50cmFjay5tb2RlID09ICdoaWRkZW4nKSBPSwogRVhQRUNURUQgKHRyYWNrMS50
cmFjay5jdWVzLmxlbmd0aCA9PSAnMTInKSBPSwogRVhQRUNURUQgKHRyYWNrMS50cmFjay5jdWVz
WzExXS5zdGFydFRpbWUgPT0gJzIyJykgT0sKKwogKiphZGQgYSBjYXB0aW9uIHRyYWNrLCBjb25m
aWd1cmVkIHRvIGxvYWQgYXV0b21hdGljYWxseQogUlVOKHRyYWNrMiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3RyYWNrJykpCiBSVU4odHJhY2syLnNldEF0dHJpYnV0ZSgna2luZCcsICdjYXB0
aW9ucycpKQpAQCAtMzAsOSArMzEsMjYgQEAgRVZFTlQobG9hZCkgLS0gPHRyYWNrIGtpbmQ9J2Nh
cHRpb25zJyA+CiAqKmNoZWNrIHRoYXQgbWV0YWRhdGEgdHJhY2sgc3RhdGUgaGFzIG5vdCBjaGFu
Z2VkCiBFWFBFQ1RFRCAodHJhY2sxLnJlYWR5U3RhdGUgPT0gJzInKSBPSwogRVhQRUNURUQgKHRy
YWNrMS50cmFjay5tb2RlID09ICdoaWRkZW4nKSBPSwotKiphbmQgdGhhdCB0aGUgY2FwdGlvbnMg
dHJhY2sgc3RhdGUgaXMgY29ycmVjdAorKiphbmQgdGhhdCB0aGUgY2FwdGlvbiB0cmFjayBzdGF0
ZSBpcyBjb3JyZWN0CitFWFBFQ1RFRCAodHJhY2syLnJlYWR5U3RhdGUgPT0gJzInKSBPSworRVhQ
RUNURUQgKHRyYWNrMi50cmFjay5tb2RlID09ICdzaG93aW5nJykgT0sKKworKiphZGQgYSBzdWJ0
aXRsZSB0cmFjayB3aXRoIHZpZGVvLmFkZFRleHRUcmFjaygpCitSVU4odHJhY2szID0gdmlkZW8u
YWRkVGV4dFRyYWNrKCdzdWJ0aXRsZXMnLCAnU3VidGl0bGUgVHJhY2snLCAnZW4nKSkKK1JVTih0
cmFjazMubW9kZSA9ICdzaG93aW5nJykKKworRVZFTlQoYWRkdHJhY2spCisqKmNoZWNrIHRoYXQg
bWV0YWRhdGEgdHJhY2sgc3RhdGUgaGFzIG5vdCBjaGFuZ2VkCitFWFBFQ1RFRCAodHJhY2sxLnJl
YWR5U3RhdGUgPT0gJzInKSBPSworRVhQRUNURUQgKHRyYWNrMS50cmFjay5tb2RlID09ICdoaWRk
ZW4nKSBPSworKiphbmQgdGhhdCB0aGUgY2FwdGlvbiB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5n
ZWQKIEVYUEVDVEVEICh0cmFjazIucmVhZHlTdGF0ZSA9PSAnMicpIE9LCiBFWFBFQ1RFRCAodHJh
Y2syLnRyYWNrLm1vZGUgPT0gJ3Nob3dpbmcnKSBPSworKiphbmQgdGhhdCB0aGUgc3VidGl0bGUg
dHJhY2sgc3RhdGUgaXMgY29ycmVjdAorRVhQRUNURUQgKGV2ZW50LnRhcmdldCA9PSAnW29iamVj
dCBUZXh0VHJhY2tMaXN0XScpIE9LCitFWFBFQ1RFRCAoZXZlbnQgaW5zdGFuY2VvZiB3aW5kb3cu
VHJhY2tFdmVudCA9PSAndHJ1ZScpIE9LCitFWFBFQ1RFRCAoZXZlbnQudHJhY2sgPT0gJ1tvYmpl
Y3QgVGV4dFRyYWNrXScpIE9LCitFWFBFQ1RFRCAodHJhY2szLm1vZGUgPT0gJ3Nob3dpbmcnKSBP
SwogCiBFTkQgT0YgVEVTVAogCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1t
b2RlLW5vdC1jaGFuZ2VkLWJ5LW5ldy10cmFjay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL21lZGlhL3RyYWNrL3RyYWNrLW1vZGUtbm90LWNoYW5nZWQtYnktbmV3LXRyYWNrLmh0bWwJ
KHJldmlzaW9uIDEzNTE4MSkKKysrIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLW1vZGUt
bm90LWNoYW5nZWQtYnktbmV3LXRyYWNrLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTcsMTcgKzcs
NDIgQEAKICAgICAgICAgPHNjcmlwdCBzcmM9Li4vdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KICAg
ICAgICAgPHNjcmlwdD4KIAorICAgICAgICAgICAgZnVuY3Rpb24gdHJhY2tBZGRlZCgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVCgiICsgZXZlbnQu
dHlwZSArICIpIik7CisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8aT4qKmNoZWNrIHRo
YXQgbWV0YWRhdGEgdHJhY2sgc3RhdGUgaGFzIG5vdCBjaGFuZ2VkPCIgKyAiL2k+Iik7CisgICAg
ICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjazEucmVhZHlTdGF0ZSIsIEhUTUxUcmFja0Vs
ZW1lbnQuTE9BREVEKTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrMS50cmFj
ay5tb2RlIiwgImhpZGRlbiIpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGk+Kiph
bmQgdGhhdCB0aGUgY2FwdGlvbiB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5nZWQ8IiArICIvaT4i
KTsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrMi5yZWFkeVN0YXRlIiwgSFRN
TFRyYWNrRWxlbWVudC5MT0FERUQpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJh
Y2syLnRyYWNrLm1vZGUiLCAic2hvd2luZyIpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0
ZSgiPGk+KiphbmQgdGhhdCB0aGUgc3VidGl0bGUgdHJhY2sgc3RhdGUgaXMgY29ycmVjdDwiICsg
Ii9pPiIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiZXZlbnQudGFyZ2V0Iiwgdmlk
ZW8udGV4dFRyYWNrcyk7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJldmVudCBpbnN0
YW5jZW9mIHdpbmRvdy5UcmFja0V2ZW50IiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdGVzdEV4
cGVjdGVkKCJldmVudC50cmFjayIsIHZpZGVvLnRleHRUcmFja3NbdmlkZW8udGV4dFRyYWNrcy5s
ZW5ndGggLSAxXSk7CisgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjazMubW9kZSIs
ICJzaG93aW5nIik7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAg
ICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZnVuY3Rp
b24gY2FwdGlvbnNUcmFja0xvYWRlZCgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCJFVkVOVChsb2FkKSAtLSAmbHQ7dHJhY2sga2luZD0nY2FwdGlvbnMnICZn
dDsiKTsKICAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxpPioqY2hlY2sgdGhhdCBtZXRh
ZGF0YSB0cmFjayBzdGF0ZSBoYXMgbm90IGNoYW5nZWQ8IiArICIvaT4iKTsKICAgICAgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrMS5yZWFkeVN0YXRlIiwgSFRNTFRyYWNrRWxlbWVudC5M
T0FERUQpOwogICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2sxLnRyYWNrLm1vZGUi
LCAiaGlkZGVuIik7Ci0gICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8aT4qKmFuZCB0aGF0
IHRoZSBjYXB0aW9ucyB0cmFjayBzdGF0ZSBpcyBjb3JyZWN0PCIgKyAiL2k+Iik7CisgICAgICAg
ICAgICAgICAgY29uc29sZVdyaXRlKCI8aT4qKmFuZCB0aGF0IHRoZSBjYXB0aW9uIHRyYWNrIHN0
YXRlIGlzIGNvcnJlY3Q8IiArICIvaT4iKTsKICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InRyYWNrMi5yZWFkeVN0YXRlIiwgSFRNTFRyYWNrRWxlbWVudC5MT0FERUQpOwogICAgICAgICAg
ICAgICAgIHRlc3RFeHBlY3RlZCgidHJhY2syLnRyYWNrLm1vZGUiLCAic2hvd2luZyIpOwogICAg
ICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7Ci0gICAgICAgICAgICAgICAgZW5kVGVzdCgp
OworCisgICAgICAgICAgICAgICAgdmlkZW8udGV4dFRyYWNrcy5hZGRFdmVudExpc3RlbmVyKCJh
ZGR0cmFjayIsIHRyYWNrQWRkZWQpOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiPGk+
KiphZGQgYSBzdWJ0aXRsZSB0cmFjayB3aXRoIHZpZGVvLmFkZFRleHRUcmFjaygpPCIgKyAiL2k+
Iik7CisgICAgICAgICAgICAgICAgcnVuKCJ0cmFjazMgPSB2aWRlby5hZGRUZXh0VHJhY2soJ3N1
YnRpdGxlcycsICdTdWJ0aXRsZSBUcmFjaycsICdlbicpIik7CisgICAgICAgICAgICAgICAgcnVu
KCJ0cmFjazMubW9kZSA9ICdzaG93aW5nJyIpOworCisgICAgICAgICAgICAgICAgY29uc29sZVdy
aXRlKCIiKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZnVuY3Rpb24gbWV0YWRhdGFU
cmFja0xvYWRlZCgpCkBAIC0yOSw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgdGVzdEV4cGVj
dGVkKCJ0cmFjazEudHJhY2suY3Vlcy5sZW5ndGgiLCAxMik7CiAgICAgICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJ0cmFjazEudHJhY2suY3Vlc1sxMV0uc3RhcnRUaW1lIiwgMjIpOwogCi0gICAg
ICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8aT4qKmFkZCBhIGNhcHRpb24gdHJhY2ssIGNvbmZp
Z3VyZWQgdG8gbG9hZCBhdXRvbWF0aWNhbGx5PCIgKyAiL2k+Iik7CisgICAgICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCI8YnI+PGk+KiphZGQgYSBjYXB0aW9uIHRyYWNrLCBjb25maWd1cmVkIHRv
IGxvYWQgYXV0b21hdGljYWxseTwiICsgIi9pPiIpOwogICAgICAgICAgICAgICAgIHJ1bigidHJh
Y2syID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHJhY2snKSIpOwogICAgICAgICAgICAgICAg
IHJ1bigidHJhY2syLnNldEF0dHJpYnV0ZSgna2luZCcsICdjYXB0aW9ucycpIik7CiAgICAgICAg
ICAgICAgICAgcnVuKCJ0cmFjazIuc2V0QXR0cmlidXRlKCdkZWZhdWx0JywgJ2RlZmF1bHQnKSIp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>