<?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>28841</bug_id>
          
          <creation_ts>2009-08-30 23:27:05 -0700</creation_ts>
          <short_desc>WAI-ARIA: add support for ranges, including the progressbar, slider, and spinbutton roles</short_desc>
          <delta_ts>2009-09-15 20:39:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>143579</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-08-30 23:27:05 -0700</bug_when>
    <thetext>Additional support needed requires:

sending notifications when value changes
updated aria-valuenow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143580</commentid>
    <comment_count>1</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-08-30 23:28:26 -0700</bug_when>
    <thetext>&quot;updated aria-valuenow&quot; should read &quot;update aria-valuenow when the slider is incremented or decremented&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143581</commentid>
    <comment_count>2</comment_count>
      <attachid>38802</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-08-30 23:29:40 -0700</bug_when>
    <thetext>Created attachment 38802
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143582</commentid>
    <comment_count>3</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-08-30 23:30:26 -0700</bug_when>
    <thetext>I also took the chance to change the notifications sent to an enum type, instead of relying on the strings that are duplicated in Apple&apos;s NSAccessibility protocol</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143583</commentid>
    <comment_count>4</comment_count>
      <attachid>38803</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-08-30 23:36:20 -0700</bug_when>
    <thetext>Created attachment 38803
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143595</commentid>
    <comment_count>5</comment_count>
      <attachid>38803</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-31 02:57:39 -0700</bug_when>
    <thetext>Comment on attachment 38803
patch

I&apos;m confused.

Why does:
 604 void AccessibilityRenderObject::increment()

not send a notification, but:
139130 void AccessibilitySlider::increment()

does?

Sad that this method doens&apos;t have a clearer name:
 369     virtual void changeValue(float percentChange);
changeValueByPercent for example.

Seems the enum change really should have been done separately.

capitalization?
 1 2009-08-30  chris fleizach  &lt;cfleizach@apple.com&gt;

+++ LayoutTests/accessibility/aria-slider-value-change.html	(revision 0)
would be much better as a js-only test instead of manually modifying the template as you&apos;ve done.

If it&apos;s a JS-only test, you shoudl also consider removing teh slider at th end of th test so it doesn&apos;t appear in the output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146900</commentid>
    <comment_count>6</comment_count>
      <attachid>39506</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-09-11 23:26:14 -0700</bug_when>
    <thetext>Created attachment 39506
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147087</commentid>
    <comment_count>7</comment_count>
      <attachid>39506</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-14 10:09:05 -0700</bug_when>
    <thetext>Comment on attachment 39506
updated patch

 30           shouldBe(&quot;slider.intValue &gt; 50&quot;, &quot;true&quot;);
shouldBeTrue would do that for you.

This isn&apos;t quite a js-only test.  But I admit the js-only test infrastructure is poorly documented at best. :(  To be a real js-only test this would be .js file in script-tests/ or resources/ and make-script-tests-wrappers would generate the .html for you.

Why was this check not needed before?
+    if (!m_renderer)
+        return;

was setValue never called w/o checking the renderer before?  Should we remove other renderer checks now that that&apos;s added?

I&apos;m not sure why this should move out of AccessibilitySlider:

+void AccessibilityRenderObject::increment()
+{
+    if (roleValue() != SliderRole)
+        return;
+    
+    changeValueByPercent(5);
+}

Can other things have a SliderRole which are not AccessiblitySliders?  Is that exactly what this change is doing?  supporting the role=&quot;slider&quot; on things which are not sliders?

element seems like a funny name for a node here:
+        Node* element = m_renderer-&gt;node();
+        if (element &amp;&amp; element-&gt;isElementNode())

I guess I just don&apos;t really understand this change enough to review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147091</commentid>
    <comment_count>8</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-09-14 10:16:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 39506 [details])
&gt;  30           shouldBe(&quot;slider.intValue &gt; 50&quot;, &quot;true&quot;);
&gt; shouldBeTrue would do that for you.
&gt; 

agreed.

&gt; This isn&apos;t quite a js-only test.  But I admit the js-only test infrastructure
&gt; is poorly documented at best. :(  To be a real js-only test this would be .js
&gt; file in script-tests/ or resources/ and make-script-tests-wrappers would
&gt; generate the .html for you.
&gt; 

It seems like overkill to create two new files for every layout test, when one will do just fine. This is also the format I&apos;ve been following for accessibility tests for a number of months now without any other feedback.


&gt; Why was this check not needed before?
&gt; +    if (!m_renderer)
&gt; +        return;
&gt; 

It was erroneously not checked before. I have been slowly adding these necessary checks back in as I see them over time.


&gt; was setValue never called w/o checking the renderer before?  Should we remove
&gt; other renderer checks now that that&apos;s added?
&gt; 

setValue was not called with checking the renderer, which in most cases will not crash, but there&apos;s no guarantee that m_renderer will not be nil in a lot of cases, so it needs to be checked

&gt; I&apos;m not sure why this should move out of AccessibilitySlider:
&gt; 

I moved it out of AccessibilitySlider, because the change that I makes allows AccessibilityRenderObject to act as a slider, if the ARIA role is a slider type. AccessibilitySlider is being used currently when the type is &lt;input type=&quot;range&quot;&gt;, and comes with a whole host of assumed capabilities. AccessibilityRenderObject was *already* acting as an ARIA slider when that role was specified, but it did not correctly increment or decrement values (which is what this bug is fixing)

&gt; +void AccessibilityRenderObject::increment()
&gt; +{
&gt; +    if (roleValue() != SliderRole)
&gt; +        return;
&gt; +    
&gt; +    changeValueByPercent(5);
&gt; +}
&gt; 


&gt; Can other things have a SliderRole which are not AccessiblitySliders?  Is that
&gt; exactly what this change is doing?  supporting the role=&quot;slider&quot; on things
&gt; which are not sliders?
&gt; 

correct.


&gt; element seems like a funny name for a node here:
&gt; +        Node* element = m_renderer-&gt;node();
&gt; +        if (element &amp;&amp; element-&gt;isElementNode())
&gt; 

I want that Node to be an elementNode, so element seemed as good a choice as any other, but it can obviously be changed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147355</commentid>
    <comment_count>9</comment_count>
      <attachid>39506</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-09-15 12:18:27 -0700</bug_when>
    <thetext>Comment on attachment 39506
updated patch

Looks good!

It&apos;s true that this is technically not a js test. I only recently learned about js tests myself, and I have made a few of them recently. I agree with Chris that I dislike having two files. That combined with the fact that we have some like this checked into the accessibility tests anyway, I am going to r+ this. Personally, I like this style better anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147429</commentid>
    <comment_count>10</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-09-15 17:41:23 -0700</bug_when>
    <thetext>Committed rr48405: &lt;http://trac.webkit.org/changeset/r48405&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147430</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-15 17:45:03 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 39506 [details])
&gt; Looks good!
&gt; 
&gt; It&apos;s true that this is technically not a js test. I only recently learned about
&gt; js tests myself, and I have made a few of them recently. I agree with Chris
&gt; that I dislike having two files. That combined with the fact that we have some
&gt; like this checked into the accessibility tests anyway, I am going to r+ this.
&gt; Personally, I like this style better anyway.

Yeah, I agree it&apos;s less than ideal that we have 2 files checked in for js tests.  We should fix that. :)  We just need to find a nice way to view the .js files in a browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147464</commentid>
    <comment_count>12</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2009-09-15 20:39:44 -0700</bug_when>
    <thetext>Committed rr48407: &lt;http://trac.webkit.org/changeset/r48407&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38802</attachid>
            <date>2009-08-30 23:29:40 -0700</date>
            <delta_ts>2009-08-30 23:31:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>24264</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDgtMzAgIGNocmlzIGZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXQUktQVJJQTogYWRkIHN1cHBvcnQgZm9yIHJhbmdlcywgaW5jbHVkaW5nIHRoZSBwcm9ncmVz
c2Jhciwgc2xpZGVyLCBhbmQgc3BpbmJ1dHRvbiByb2xlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg4NDEKKworICAgICAgICBUZXN0OiBhY2Nlc3Np
YmlsaXR5L2FyaWEtc2xpZGVyLXZhbHVlLWNoYW5nZS5odG1sCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNo
ZTo6cG9zdE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpz
ZWxlY3RlZENoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjopOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGFuZ2VWYWx1ZSk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpkZWNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1
dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyOjppbmNyZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNsaWRlcjo6ZGVjcmVtZW50KToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2Nocm9taXVtL0FYT2JqZWN0Q2FjaGVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24pOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L3dpbi9BWE9iamVjdENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgICogZG9tL0RvY3VtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVB
ZnRlckF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAgICAg
ICAgKiBlZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2w6OnNldElubmVyVGV4dFZhbHVlKToKKwogMjAwOS0wOC0yOSAg
QWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpub3RpZmljYXRpb25Qb3N0VGltZQogfQogICAgIAogI2lmIEhBVkUoQUNDRVNTSUJJTElU
WSkKLXZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGJvb2wgcG9zdFRvRWxlbWVudCkKK3ZvaWQg
QVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBB
WE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sIGJvb2wgcG9zdFRvRWxlbWVudCkKIHsKICAgICAv
LyBOb3RpZmljYXRpb25zIGZvciB0ZXh0IGlucHV0IG9iamVjdHMgYXJlIHNlbnQgdG8gdGhhdCBv
YmplY3QuCiAgICAgLy8gQWxsIG90aGVycyBhcmUgc2VudCB0byB0aGUgdG9wIFdlYkFyZWEuCkBA
IC0zNjgsMTQgKzM2OCwxNCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24o
UmVuCiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbm90aWZpY2F0aW9u
c1RvUG9zdC5hcHBlbmQobWFrZV9wYWlyKG9iaiwgbWVzc2FnZSkpOworICAgIG1fbm90aWZpY2F0
aW9uc1RvUG9zdC5hcHBlbmQobWFrZV9wYWlyKG9iaiwgbm90aWZpY2F0aW9uKSk7CiAgICAgaWYg
KCFtX25vdGlmaWNhdGlvblBvc3RUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX25vdGlmaWNh
dGlvblBvc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6
c2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBw
b3N0Tm90aWZpY2F0aW9uKHJlbmRlcmVyLCAiQVhTZWxlY3RlZENoaWxkcmVuQ2hhbmdlZCIsIHRy
dWUpOworICAgIHBvc3ROb3RpZmljYXRpb24ocmVuZGVyZXIsIEFYU2VsZWN0ZWRDaGlsZHJlbkNo
YW5nZWQsIHRydWUpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAkocmV2aXNpb24gNDc4ODMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRldGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVj
dCopOwogICAgICAgICB2b2lkIGF0dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopOwot
ICAgICAgICB2b2lkIHBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgU3RyaW5n
JiwgYm9vbCBwb3N0VG9FbGVtZW50KTsKLSAgICAgICAgdm9pZCBwb3N0UGxhdGZvcm1Ob3RpZmlj
YXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2b2lk
IGNoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqKTsKICAgICAgICAgdm9pZCBzZWxlY3RlZENo
aWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqKTsKICAgICAgICAgdm9pZCBoYW5kbGVBY3RpdmVE
ZXNjZW5kYW50Q2hhbmdlZChSZW5kZXJPYmplY3QqKTsKQEAgLTEwMiw2ICsxMDAsMjIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCB0ZXh0TWFya2VyRGF0YUZvclZp
c2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwog
ICAgICAgICBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJr
ZXJEYXRhKFRleHRNYXJrZXJEYXRhJik7CiAKKyAgICAgICAgLy8gTm90aWZpY2F0aW9ucy4gVXNl
IHN0cmluZ3MgcHJvdmlkZWQgZm9yIGNvbnNpc3RlbmN5LgorICAgICAgICBlbnVtIEFYTm90aWZp
Y2F0aW9uIHsKKyAgICAgICAgICAgIEFYQ2hlY2tlZFN0YXRlQ2hhbmdlZCA9IDEsCisgICAgICAg
ICAgICBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkLAorICAgICAgICAgICAgQVhMYXlvdXRDb21w
bGV0ZSwKKyAgICAgICAgICAgIEFYTG9hZENvbXBsZXRlLAorICAgICAgICAgICAgQVhTZWxlY3Rl
ZENoaWxkcmVuQ2hhbmdlZCwKKyAgICAgICAgICAgIEFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCwKKyAg
ICAgICAgICAgIEFYVmFsdWVDaGFuZ2VkCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICB2
b2lkIHBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgQVhOb3RpZmljYXRpb24sIGJvb2wg
cG9zdFRvRWxlbWVudCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgcG9zdFBsYXRm
b3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbik7CisK
ICAgICBwcml2YXRlOgogICAgICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICAgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBBWElE
PiBtX3JlbmRlck9iamVjdE1hcHBpbmc7CkBAIC0xMTEsNyArMTI1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBIYXNoU2V0PEFYSUQ+IG1faWRzSW5Vc2U7CiAgICAgICAgIAogICAg
ICAgICBUaW1lcjxBWE9iamVjdENhY2hlPiBtX25vdGlmaWNhdGlvblBvc3RUaW1lcjsKLSAgICAg
ICAgVmVjdG9yPHBhaXI8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+LCBjb25zdCBTdHJpbmc+
ID4gbV9ub3RpZmljYXRpb25zVG9Qb3N0OworICAgICAgICBWZWN0b3I8cGFpcjxSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4sIEFYTm90aWZpY2F0aW9uPiA+IG1fbm90aWZpY2F0aW9uc1RvUG9z
dDsKICAgICAgICAgdm9pZCBub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZChUaW1lcjxBWE9iamVj
dENhY2hlPiopOwogICAgICAgICAKICAgICAgICAgQVhJRCBnZXRBWElEKEFjY2Vzc2liaWxpdHlP
YmplY3QqKTsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTMsNyArNzUzLDE2IEBAIGNv
bnN0IFN0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWN0aW8KICAgICAgICAgICAgIHJldHVy
biBub0FjdGlvbjsKICAgICB9CiB9Ci0gCisgICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpjaGFuZ2VWYWx1ZShmbG9hdCBwZXJjZW50Q2hhbmdlKQoreworICAgIGZsb2F0IHJhbmdlID0g
bWF4VmFsdWVGb3JSYW5nZSgpIC0gbWluVmFsdWVGb3JSYW5nZSgpOworICAgIGZsb2F0IHZhbHVl
ID0gdmFsdWVGb3JSYW5nZSgpOworICAgIAorICAgIHZhbHVlICs9IHJhbmdlICogKHBlcmNlbnRD
aGFuZ2UgLyAxMDApOworICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Cit9Cisg
ICAgCiAvLyBMYWNraW5nIGNvbmNyZXRlIGV2aWRlbmNlIG9mIG9yaWVudGF0aW9uLCBob3Jpem9u
dGFsIG1lYW5zIHdpZHRoID4gaGVpZ2h0LiB2ZXJ0aWNhbCBpcyBoZWlnaHQgPiB3aWR0aDsKIEFj
Y2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpvcmllbnRhdGlvbigp
IGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmgJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgY2hhbmdlVmFsdWUoZmxvYXQgcGVyY2VudENoYW5nZSk7CiAgICAgdmlydHVh
bCB2b2lkIHNldFNlbGVjdGVkKGJvb2wpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1ha2VSYW5n
ZVZpc2libGUoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSB7IH0KSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsNiArNjAxLDIyIEBAIEVsZW1lbnQqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6Om1vdXMKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmNyZW1lbnQoKQoreworICAgIGlmIChyb2xlVmFsdWUo
KSAhPSBTbGlkZXJSb2xlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2hhbmdlVmFsdWUo
NSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGVjcmVtZW50KCkKK3sK
KyAgICBpZiAocm9sZVZhbHVlKCkgIT0gU2xpZGVyUm9sZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGNoYW5nZVZhbHVlKC01KTsKK30KKwogc3RhdGljIEVsZW1lbnQqIHNpYmxpbmdXaXRo
QXJpYVJvbGUoU3RyaW5nIHJvbGUsIE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZSogc2libGluZyA9
IG5vZGUtPnBhcmVudCgpLT5maXJzdENoaWxkKCk7CkBAIC0xNTkwLDYgKzE2MDYsOSBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEZvY3VzCiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CisgICAgaWYg
KCFtX3JlbmRlcmVyKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gRklYTUU6IERvIHdl
IHdhbnQgdG8gZG8gYW55dGhpbmcgaGVyZSBmb3IgQVJJQSB0ZXh0Ym94ZXM/CiAgICAgaWYgKG1f
cmVuZGVyZXItPmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsK
QEAgLTE1OTcsNiArMTYxNiwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNl
dFZhbHVlCiAgICAgfSBlbHNlIGlmIChtX3JlbmRlcmVyLT5pc1RleHRBcmVhKCkpIHsKICAgICAg
ICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dEFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFy
ZWFFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgdGV4dEFyZWEtPnNldFZh
bHVlKHN0cmluZyk7CisgICAgfSBlbHNlIGlmIChyb2xlVmFsdWUoKSA9PSBTbGlkZXJSb2xlKSB7
CisgICAgICAgIE5vZGUqIGVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CisgICAgICAgIGlm
IChlbGVtZW50ICYmIGVsZW1lbnQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihlbGVtZW50KS0+c2V0QXR0cmlidXRlKGFyaWFfdmFsdWVub3dBdHRy
LCBzdHJpbmcpOwogICAgIH0KIH0KIApAQCAtMjE2OSwxMCArMjE5Miw5IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aGFuZGxlQWMKICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KiBhY3RpdmVkZXNjZW5kYW50ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdCo+KGFjdGl2ZURlc2NlbmRhbnQoKSk7CiAgICAgCiAgICAgaWYgKGFjdGl2ZWRlc2NlbmRh
bnQgJiYgc2hvdWxkRm9jdXNBY3RpdmVEZXNjZW5kYW50KCkpCi0gICAgICAgIGRvYy0+YXhPYmpl
Y3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKGFjdGl2ZWRlc2NlbmRhbnQtPnJlbmRlcmVyKCks
ICJBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkIiwgdHJ1ZSk7CisgICAgICAgIGRvYy0+YXhPYmpl
Y3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKGFjdGl2ZWRlc2NlbmRhbnQtPnJlbmRlcmVyKCks
IEFYT2JqZWN0Q2FjaGU6OkFYRm9jdXNlZFVJRWxlbWVudENoYW5nZWQsIHRydWUpOwogfQogCi0K
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om9ic2VydmFi
bGVPYmplY3QoKSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1f
cmVuZGVyZXI7IHJlbmRlcmVyICYmIHJlbmRlcmVyLT5ub2RlKCk7IHJlbmRlcmVyID0gcmVuZGVy
ZXItPnBhcmVudCgpKSB7CkBAIC0yNDE1LDYgKzI0MzcsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmNhblNldEZvCiAgICAgICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgogICAg
ICAgICBjYXNlIENoZWNrQm94Um9sZToKICAgICAgICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6Cisg
ICAgICAgIGNhc2UgU2xpZGVyUm9sZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiA0
Nzg4MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldEZvY3VzZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkVGV4
dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVjcmVtZW50KCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKSW5kZXg6IFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTQsMTUgKzExNCw2IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlTbGlkZXI6Om1pblZh
bHVlRm9yUmEKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1pbkF0dHIpLnRvRmxvYXQoKTsKIH0K
IAotdm9pZCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpjaGFuZ2VWYWx1ZShmbG9hdCBwZXJjZW50Q2hh
bmdlKQotewotICAgIGZsb2F0IHJhbmdlID0gbWF4VmFsdWVGb3JSYW5nZSgpIC0gbWluVmFsdWVG
b3JSYW5nZSgpOwotICAgIGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgpOwotICAgIAotICAg
IHZhbHVlICs9IHJhbmdlICogKHBlcmNlbnRDaGFuZ2UgLyAxMDApOwotICAgIHNldFZhbHVlKFN0
cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KIHZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGVsZW1lbnQoKTsKQEAgLTEzOCwxMiArMTI5LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVNs
aWRlcjo6c2V0VmFsdWUoY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjppbmNyZW1l
bnQoKQogewotICAgIHJldHVybiBjaGFuZ2VWYWx1ZSg1KTsKKyAgICBjaGFuZ2VWYWx1ZSg1KTsK
KyAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9yZW5kZXJlciwgQVhPYmpl
Y3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlT
bGlkZXI6OmRlY3JlbWVudCgpCiB7Ci0gICAgcmV0dXJuIGNoYW5nZVZhbHVlKC01KTsKKyAgICBj
aGFuZ2VWYWx1ZSgtNSk7CisgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG1f
cmVuZGVyZXIsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKIH0KIAogSFRN
TElucHV0RWxlbWVudCogQWNjZXNzaWJpbGl0eVNsaWRlcjo6ZWxlbWVudCgpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgJKHJldmlzaW9u
IDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIEFjY2Vzc2liaWxpdHlTbGlkZXIoUmVuZGVyT2JqZWN0Kik7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICB2b2lkIGNoYW5nZVZhbHVlKGZsb2F0IC8qcGVyY2VudENoYW5nZSovKTsKICAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCgpIGNvbnN0OwogICAgIH07CiAKSW5kZXg6IFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9jaHJvbWl1bS9BWE9iamVjdENhY2hlQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9jaHJvbWl1bS9BWE9iamVjdENhY2hl
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9j
aHJvbWl1bS9BWE9iamVjdENhY2hlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3MKICAgICAv
LyBJbiBDaHJvbWl1bSwgQWNjZXNzaWJpbGl0eU9iamVjdHMgYXJlIHdyYXBwZWQgbGF6aWx5Lgog
fQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3Np
YmlsaXR5T2JqZWN0KiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBs
YXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbikK
IHsKIH0KIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2Fj
aGVBdGsuY3BwCShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QVhPYmplY3RDYWNoZUF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAgdm9p
ZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2VzcwogICAgIGdfb2JqZWN0X3VucmVm
KGF0a09iaik7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsK
LSAgICBpZiAobWVzc2FnZSA9PSAiQVhDaGVja2VkU3RhdGVDaGFuZ2VkIikgeworICAgIGlmIChu
b3RpZmljYXRpb24gPT0gQVhDaGVja2VkU3RhdGVDaGFuZ2VkKSB7CiAgICAgICAgIGlmICghY29y
ZU9iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvcmVPYmplY3QtPndyYXBwZXIoKSwgInN0YXRlLWNo
YW5nZSIsICJjaGVja2VkIiwgY29yZU9iamVjdC0+aXNDaGVja2VkKCkpOwpJbmRleDogV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQkocmV2aXNpb24gNDc4
ODMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwzNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFj
aFdyYXBwZXIoQWNjZXNzCiAgICAgb2JqLT5zZXRXcmFwcGVyKFtbQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWxsb2NdIGluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDpvYmpdKTsKIH0KIAot
dm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIEFYTm90
aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIE5TQWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb24ob2JqLT53cmFwcGVy
KCksIG1lc3NhZ2UpOworICAgIFN0cmluZyBtYWNOb3RpZmljYXRpb247CisgICAgc3dpdGNoIChu
b3RpZmljYXRpb24pIHsKKyAgICAgICAgY2FzZSBBWENoZWNrZWRTdGF0ZUNoYW5nZWQ6CisgICAg
ICAgICAgICBtYWNOb3RpZmljYXRpb24gPSAiQVhDaGVja2VkU3RhdGVDaGFuZ2VkIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFYRm9jdXNlZFVJRWxlbWVudENoYW5nZWQ6Cisg
ICAgICAgICAgICBtYWNOb3RpZmljYXRpb24gPSAiQVhGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWExheW91dENvbXBsZXRlOgorICAg
ICAgICAgICAgbWFjTm90aWZpY2F0aW9uID0gIkFYTGF5b3V0Q29tcGxldGUiOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVhMb2FkQ29tcGxldGU6CisgICAgICAgICAgICBtYWNO
b3RpZmljYXRpb24gPSAiQVhMb2FkQ29tcGxldGUiOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQVhTZWxlY3RlZENoaWxkcmVuQ2hhbmdlZDoKKyAgICAgICAgICAgIG1hY05vdGlm
aWNhdGlvbiA9ICJBWFNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFYU2VsZWN0ZWRUZXh0Q2hhbmdlZDoKKyAgICAgICAgICAgIG1hY05v
dGlmaWNhdGlvbiA9ICJBWFNlbGVjdGVkVGV4dENoYW5nZWQiOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQVhWYWx1ZUNoYW5nZWQ6CisgICAgICAgICAgICBtYWNOb3RpZmljYXRp
b24gPSAiQVhWYWx1ZUNoYW5nZWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIE5TQWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb24ob2JqLT53cmFwcGVyKCksIG1hY05v
dGlmaWNhdGlvbik7CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlRm9jdXNlZFVJRWxl
bWVudENoYW5nZWQoKQpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9BWE9iamVjdENh
Y2hlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvd2luL0FYT2Jq
ZWN0Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2VzcwogICAgIC8vIHNvZnR3
YXJlIHJlcXVlc3RzIHRoZW0gdmlhIGdldF9hY2NDaGlsZC4KIH0KIAotdm9pZCBBWE9iamVjdENh
Y2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0
IFN0cmluZyYpCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhOb3RpZmljYXRpb24pCiB7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAzLDcgKzE3MDMsNyBAQCB2b2lkIERvY3VtZW50OjppbXBsaWNpdENsb3Nl
KCkKICAgICAgICAgLy8gZXhpc3RzIGluIHRoZSBjYWNoZSAod2UgaWdub3JlIHRoZSByZXR1cm4g
dmFsdWUgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIGl0IGhlcmUpLiBUaGlzIGlzIAogICAgICAgICAv
LyBvbmx5IHNhZmUgdG8gY2FsbCB3aGVuIGEgbGF5b3V0IGlzIG5vdCBpbiBwcm9ncmVzcywgc28g
aXQgY2FuIG5vdCBiZSB1c2VkIGluIHBvc3ROb3RpZmljYXRpb24uICAgIAogICAgICAgICBheE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlck9iamVjdCk7Ci0gICAgICAgIGF4T2JqZWN0
Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihyZW5kZXJPYmplY3QsICJBWExvYWRDb21wbGV0ZSIs
IHRydWUpOworICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocmVuZGVy
T2JqZWN0LCBBWE9iamVjdENhY2hlOjpBWExvYWRDb21wbGV0ZSwgdHJ1ZSk7CiAgICAgfQogI2Vu
ZGlmCiAKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsMTYgKzYwMiwyMCBAQCB2b2lkIEVsZW1lbnQ6
OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlCiAKIHZvaWQgRWxlbWVudDo6dXBkYXRlQWZ0ZXJB
dHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoIWRvY3VtZW50KCkt
PmF4T2JqZWN0Q2FjaGUoKS0+YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAgICBBWE9iamVjdENh
Y2hlKiBheE9iamVjdENhY2hlID0gZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpOworICAgIGlm
ICghYXhPYmplY3RDYWNoZS0+YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CiAg
ICAgaWYgKGF0dHJOYW1lID09IGFyaWFfYWN0aXZlZGVzY2VuZGFudEF0dHIpIHsKICAgICAgICAg
Ly8gYW55IGNoYW5nZSB0byBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQgYXR0cmlidXRlIHRyaWdnZXJz
IGFjY2Vzc2liaWxpdHkgZm9jdXMgY2hhbmdlLCBidXQgZG9jdW1lbnQgZm9jdXMgcmVtYWlucyBp
bnRhY3QKLSAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5oYW5kbGVBY3RpdmVE
ZXNjZW5kYW50Q2hhbmdlZChyZW5kZXJlcigpKTsKKyAgICAgICAgYXhPYmplY3RDYWNoZS0+aGFu
ZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQocmVuZGVyZXIoKSk7CiAgICAgfSBlbHNlIGlmIChh
dHRyTmFtZSA9PSByb2xlQXR0cikgewogICAgICAgICAvLyB0aGUgcm9sZSBhdHRyaWJ1dGUgY2Fu
IGNoYW5nZSBhdCBhbnkgdGltZSwgYW5kIHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IG11c3QgcGlj
ayB1cCB0aGVzZSBjaGFuZ2VzCi0gICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
aGFuZGxlQXJpYVJvbGVDaGFuZ2VkKHJlbmRlcmVyKCkpOworICAgICAgICBheE9iamVjdENhY2hl
LT5oYW5kbGVBcmlhUm9sZUNoYW5nZWQocmVuZGVyZXIoKSk7CisgICAgfSBlbHNlIGlmIChhdHRy
TmFtZSA9PSBhcmlhX3ZhbHVlbm93QXR0cikgeworICAgICAgICAvLyBJZiB0aGUgdmFsdWVub3cg
YXR0cmlidXRlIGNoYW5nZXMsIEFYIGNsaWVudHMgbmVlZCB0byBiZSBub3RpZmllZC4KKyAgICAg
ICAgYXhPYmplY3RDYWNoZS0+cG9zdE5vdGlmaWNhdGlvbihyZW5kZXJlcigpLCBBWE9iamVjdENh
Y2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7CiAgICAgfQogfQogICAgIApJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hh
bmdlZENvbnRlbnRzKGNvCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGVuZGluZ1NlbGVjdGlvbi5zdGFydCgpLm5v
ZGUoKTsKICAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obm9kZS0+cmVuZGVyZXIoKSwgIkFY
VmFsdWVDaGFuZ2VkIiwgZmFsc2UpOworICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG5vZGUtPnJlbmRlcmVyKCksIEFYT2Jq
ZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCBmYWxzZSk7CiAgICAgfQogICAgIAogICAgIGlmIChj
bGllbnQoKSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xs
ZXJNYWMubW0JKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rp
b25Db250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWIKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkgJiYgbV9zZWwuc3RhcnQoKS5pc05vdE51bGwoKSAmJiBtX3NlbC5l
bmQoKS5pc05vdE51bGwoKSkKLSAgICAgICAgZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+cG9z
dE5vdGlmaWNhdGlvbihtX3NlbC5zdGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKSwgIkFYU2VsZWN0
ZWRUZXh0Q2hhbmdlZCIsIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUo
KS0+cG9zdE5vdGlmaWNhdGlvbihtX3NlbC5zdGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKSwgQVhP
YmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBmYWxzZSk7CiAKICAgICAvLyBpZiB6
b29tIGZlYXR1cmUgaXMgZW5hYmxlZCwgaW5zZXJ0aW9uIHBvaW50IGNoYW5nZXMgc2hvdWxkIHVw
ZGF0ZSB0aGUgem9vbQogICAgIGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFtX3NlbC5pc0NhcmV0
KCkpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzg4MykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg0
LDcgKzk4NCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZChib29sIG4KICAg
ICAvLyBSZW5kZXJUZXh0VmlldyksIGJ1dCBpdCdzIG5vdCBwb3NzaWJsZSB0byBkbyBpdCBhdCB0
aGUgbW9tZW50CiAgICAgLy8gYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBjb2RlIGlzIHN0cnVjdHVy
ZWQuCiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgp
LT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlcmVyKCksICJBWENoZWNrZWRTdGF0ZUNoYW5nZWQiLCB0
cnVlKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5w
b3N0Tm90aWZpY2F0aW9uKHJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYQ2hlY2tlZFN0YXRl
Q2hhbmdlZCwgdHJ1ZSk7CiAKICAgICAvLyBPbmx5IHNlbmQgYSBjaGFuZ2UgZXZlbnQgZm9yIGl0
ZW1zIGluIHRoZSBkb2N1bWVudCAoYXZvaWQgZmlyaW5nIGR1cmluZwogICAgIC8vIHBhcnNpbmcp
IGFuZCBkb24ndCBzZW5kIGEgY2hhbmdlIGV2ZW50IGZvciBhIHJhZGlvIGJ1dHRvbiB0aGF0J3Mg
Z2V0dGluZwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3OCw3ICs2NzgsNyBAQCB2b2lk
IEZyYW1lVmlldzo6bGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlCiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAg
IHJvb3QtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihyb290
LCAiQVhMYXlvdXRDb21wbGV0ZSIsIHRydWUpOworICAgICAgICByb290LT5kb2N1bWVudCgpLT5h
eE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocm9vdCwgQVhPYmplY3RDYWNoZTo6QVhM
YXlvdXRDb21wbGV0ZSwgdHJ1ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCiAgICAgdXBkYXRlRGFzaGJvYXJkUmVnaW9ucygpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNDc4ODMpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIs
NyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRJbm5lclRleHRWYWx1CiAgICAgICAgICAg
ICAgICAgZnJhbWUtPmVkaXRvcigpLT5jbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENh
Y2hlKCktPnBvc3ROb3RpZmljYXRpb24odGhpcywgIkFYVmFsdWVDaGFuZ2VkIiwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnBvc3ROb3Rp
ZmljYXRpb24odGhpcywgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0Nzg4MykKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA5
LTA4LTMwICBjaHJpcyBmbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FJLUFSSUE6IGFkZCBzdXBw
b3J0IGZvciByYW5nZXMsIGluY2x1ZGluZyB0aGUgcHJvZ3Jlc3NiYXIsIHNsaWRlciwgYW5kIHNw
aW5idXR0b24gcm9sZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI4ODQxCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2FyaWEtc2xpZGVyLXZhbHVl
LWNoYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXJp
YS1zbGlkZXItdmFsdWUtY2hhbmdlLmh0bWw6IEFkZGVkLgorCiAyMDA5LTA4LTI5ICBBZGVsZSBQ
ZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRlci12YWx1
ZS1jaGFuZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvYXJpYS1zbGlkZXItdmFsdWUtY2hhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1zbGlkZXItdmFsdWUtY2hhbmdlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorc2xpZGVyCitUaGlzIHRl
c3RzIHRoYXQgaXRzIHBvc3NpYmxlIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGFuIGFyaWEg
c2xpZGVyIGFuZCBoYXZlIHRoZSB2YWx1ZSB1cGRhdGVkIGNvcnJlY3RseS4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc2xpZGVyLmludFZhbHVlIGlzIDUwCitQQVNTIHNs
aWRlci5pbnRWYWx1ZSA+IDUwIGlzIHRydWUKK1BBU1Mgc2xpZGVyLmludFZhbHVlIDwgNTAgaXMg
dHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvYXJpYS1zbGlkZXItdmFsdWUtY2hhbmdl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRl
ci12YWx1ZS1jaGFuZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvYXJpYS1zbGlkZXItdmFsdWUtY2hhbmdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+
CisKKzxkaXYgdGFiaW5kZXg9MCBpZD0ic2xpZGVyIiByb2xlPSJzbGlkZXIiIGFyaWEtdmFsdWVu
b3c9IjUwIiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSIxMDAiPnNsaWRlcjwvZGl2
PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
Cis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBpdHMgcG9zc2li
bGUgdG8gaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYW4gYXJpYSBzbGlkZXIgYW5kIGhhdmUgdGhl
IHZhbHVlIHVwZGF0ZWQgY29ycmVjdGx5LiIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmls
aXR5Q29udHJvbGxlcikgeworCisgICAgICAgICAgdmFyIHNsaWRlciA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJzbGlkZXIiKTsKKyAgICAgICAgICBzbGlkZXIuZm9jdXMoKTsKKworICAgICAg
ICAgIHNsaWRlciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAg
ICAgICAgIHNob3VsZEJlKCJzbGlkZXIuaW50VmFsdWUiLCAiNTAiKTsKKworICAgICAgICAgIHNs
aWRlci5pbmNyZW1lbnQoKTsKKyAgICAgICAgICBzaG91bGRCZSgic2xpZGVyLmludFZhbHVlID4g
NTAiLCAidHJ1ZSIpOworCisgICAgICAgICAgc2xpZGVyLmRlY3JlbWVudCgpOworICAgICAgICAg
IHNsaWRlci5kZWNyZW1lbnQoKTsKKyAgICAgICAgICBzaG91bGRCZSgic2xpZGVyLmludFZhbHVl
IDwgNTAiLCAidHJ1ZSIpOworCisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38803</attachid>
            <date>2009-08-30 23:36:20 -0700</date>
            <delta_ts>2009-09-11 23:26:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>24908</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDktMDgtMzAgIGNocmlzIGZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXQUktQVJJQTogYWRkIHN1cHBvcnQgZm9yIHJhbmdlcywgaW5jbHVkaW5nIHRoZSBwcm9ncmVz
c2Jhciwgc2xpZGVyLCBhbmQgc3BpbmJ1dHRvbiByb2xlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg4NDEKKworICAgICAgICBWYWx1ZSBjaGFuZ2Ug
bm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIGFuIEFSSUEgc2xpZGVyIGNoYW5nZXMuCisgICAg
ICAgIFdoZW4gYW4gYXNzaXN0aXZlIGFwcGxpY2F0aW9uIGNoYW5nZSBhbiBBUklBIHNsaWRlciBw
cm9ncmFtbWF0aWNhbGx5LCBhcmlhLXZhbHVlbm93IGNoYW5nZXMuCisKKyAgICAgICAgQ2hhbmdl
ZCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gc3lzdGVtIHRvIHVzZSBhbiBFTlVNIHR5
cGUgaW5zdGVhZCBvZiBzdHJpbmdzCisgICAgICAgIHRoYXQgZHVwbGljYXRlIE5TQWNjZXNzaWJp
bGl0eSBwcm90b2NvbCBzdHJpbmdzLiBJZiB3ZSByZWx5IG9uIHBvc3RQbGF0Zm9ybU5vdGlmaWNh
dGlvbiB0bworICAgICAgICBzZW5kIHRoZSBub3RpZmljYXRpb25zLCB0aGVuIHdlIGNhbiB1c2Ug
dGhlIGFjdHVhbCBjb25zdGFudHMgd2hlbiBwb3NzaWJsZS4KKworICAgICAgICBUZXN0OiBhY2Nl
c3NpYmlsaXR5L2FyaWEtc2xpZGVyLXZhbHVlLWNoYW5nZS5odG1sCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6cG9zdE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
OjpzZWxlY3RlZENoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjopOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGFuZ2VWYWx1ZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpkZWNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aGFuZGxlQWN0aXZlRGVzY2VuZGFudENoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRy
aWJ1dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyOjppbmNyZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNsaWRlcjo6ZGVjcmVtZW50KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2Nocm9taXVtL0FYT2JqZWN0Q2FjaGVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24pOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L3dpbi9BWE9iamVjdENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRh
dGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAg
ICAgICAgKiBlZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZSk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldENoZWNrZWQpOgorICAgICAgICAqIHBh
Z2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnNldElubmVyVGV4dFZhbHVlKToKKwogMjAwOS0wOC0y
OSAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGltZQogfQogICAgIAogI2lmIEhBVkUoQUNDRVNTSUJJ
TElUWSkKLXZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGJvb2wgcG9zdFRvRWxlbWVudCkKK3Zv
aWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sIGJvb2wgcG9zdFRvRWxlbWVudCkKIHsKICAg
ICAvLyBOb3RpZmljYXRpb25zIGZvciB0ZXh0IGlucHV0IG9iamVjdHMgYXJlIHNlbnQgdG8gdGhh
dCBvYmplY3QuCiAgICAgLy8gQWxsIG90aGVycyBhcmUgc2VudCB0byB0aGUgdG9wIFdlYkFyZWEu
CkBAIC0zNjgsMTQgKzM2OCwxNCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRp
b24oUmVuCiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbm90aWZpY2F0
aW9uc1RvUG9zdC5hcHBlbmQobWFrZV9wYWlyKG9iaiwgbWVzc2FnZSkpOworICAgIG1fbm90aWZp
Y2F0aW9uc1RvUG9zdC5hcHBlbmQobWFrZV9wYWlyKG9iaiwgbm90aWZpY2F0aW9uKSk7CiAgICAg
aWYgKCFtX25vdGlmaWNhdGlvblBvc3RUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX25vdGlm
aWNhdGlvblBvc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNo
ZTo6c2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAg
ICBwb3N0Tm90aWZpY2F0aW9uKHJlbmRlcmVyLCAiQVhTZWxlY3RlZENoaWxkcmVuQ2hhbmdlZCIs
IHRydWUpOworICAgIHBvc3ROb3RpZmljYXRpb24ocmVuZGVyZXIsIEFYU2VsZWN0ZWRDaGlsZHJl
bkNoYW5nZWQsIHRydWUpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gNDc4ODMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRldGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9i
amVjdCopOwogICAgICAgICB2b2lkIGF0dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCop
OwotICAgICAgICB2b2lkIHBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiwgYm9vbCBwb3N0VG9FbGVtZW50KTsKLSAgICAgICAgdm9pZCBwb3N0UGxhdGZvcm1Ob3Rp
ZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2
b2lkIGNoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqKTsKICAgICAgICAgdm9pZCBzZWxlY3Rl
ZENoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmplY3QqKTsKICAgICAgICAgdm9pZCBoYW5kbGVBY3Rp
dmVEZXNjZW5kYW50Q2hhbmdlZChSZW5kZXJPYmplY3QqKTsKQEAgLTEwMiw2ICsxMDAsMjIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCB0ZXh0TWFya2VyRGF0YUZv
clZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OwogICAgICAgICBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXJEYXRhKFRleHRNYXJrZXJEYXRhJik7CiAKKyAgICAgICAgLy8gTm90aWZpY2F0aW9ucy4g
VXNlIHN0cmluZ3MgcHJvdmlkZWQgZm9yIGNvbnNpc3RlbmN5LgorICAgICAgICBlbnVtIEFYTm90
aWZpY2F0aW9uIHsKKyAgICAgICAgICAgIEFYQ2hlY2tlZFN0YXRlQ2hhbmdlZCA9IDEsCisgICAg
ICAgICAgICBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkLAorICAgICAgICAgICAgQVhMYXlvdXRD
b21wbGV0ZSwKKyAgICAgICAgICAgIEFYTG9hZENvbXBsZXRlLAorICAgICAgICAgICAgQVhTZWxl
Y3RlZENoaWxkcmVuQ2hhbmdlZCwKKyAgICAgICAgICAgIEFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCwK
KyAgICAgICAgICAgIEFYVmFsdWVDaGFuZ2VkCisgICAgICAgIH07CisgICAgICAgIAorICAgICAg
ICB2b2lkIHBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiwgQVhOb3RpZmljYXRpb24sIGJv
b2wgcG9zdFRvRWxlbWVudCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgcG9zdFBs
YXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbik7
CisKICAgICBwcml2YXRlOgogICAgICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICAgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBB
WElEPiBtX3JlbmRlck9iamVjdE1hcHBpbmc7CkBAIC0xMTEsNyArMTI1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBIYXNoU2V0PEFYSUQ+IG1faWRzSW5Vc2U7CiAgICAgICAgIAog
ICAgICAgICBUaW1lcjxBWE9iamVjdENhY2hlPiBtX25vdGlmaWNhdGlvblBvc3RUaW1lcjsKLSAg
ICAgICAgVmVjdG9yPHBhaXI8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+LCBjb25zdCBTdHJp
bmc+ID4gbV9ub3RpZmljYXRpb25zVG9Qb3N0OworICAgICAgICBWZWN0b3I8cGFpcjxSZWZQdHI8
QWNjZXNzaWJpbGl0eU9iamVjdD4sIEFYTm90aWZpY2F0aW9uPiA+IG1fbm90aWZpY2F0aW9uc1Rv
UG9zdDsKICAgICAgICAgdm9pZCBub3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZChUaW1lcjxBWE9i
amVjdENhY2hlPiopOwogICAgICAgICAKICAgICAgICAgQVhJRCBnZXRBWElEKEFjY2Vzc2liaWxp
dHlPYmplY3QqKTsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTMsNyArNzUzLDE2IEBA
IGNvbnN0IFN0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWN0aW8KICAgICAgICAgICAgIHJl
dHVybiBub0FjdGlvbjsKICAgICB9CiB9Ci0gCisgICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpjaGFuZ2VWYWx1ZShmbG9hdCBwZXJjZW50Q2hhbmdlKQoreworICAgIGZsb2F0IHJhbmdl
ID0gbWF4VmFsdWVGb3JSYW5nZSgpIC0gbWluVmFsdWVGb3JSYW5nZSgpOworICAgIGZsb2F0IHZh
bHVlID0gdmFsdWVGb3JSYW5nZSgpOworICAgIAorICAgIHZhbHVlICs9IHJhbmdlICogKHBlcmNl
bnRDaGFuZ2UgLyAxMDApOworICAgIHNldFZhbHVlKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Cit9
CisgICAgCiAvLyBMYWNraW5nIGNvbmNyZXRlIGV2aWRlbmNlIG9mIG9yaWVudGF0aW9uLCBob3Jp
em9udGFsIG1lYW5zIHdpZHRoID4gaGVpZ2h0LiB2ZXJ0aWNhbCBpcyBoZWlnaHQgPiB3aWR0aDsK
IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpvcmllbnRhdGlv
bigpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmgJKHJldmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDYgKzM2Niw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5n
ZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY2hhbmdlVmFsdWUoZmxvYXQgcGVyY2VudENoYW5nZSk7CiAgICAgdmly
dHVhbCB2b2lkIHNldFNlbGVjdGVkKGJvb2wpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1ha2VS
YW5nZVZpc2libGUoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSB7IH0KSW5kZXg6IFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsNiArNjAxLDIyIEBAIEVsZW1lbnQqIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1vdXMKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmNyZW1lbnQoKQoreworICAgIGlmIChyb2xlVmFs
dWUoKSAhPSBTbGlkZXJSb2xlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2hhbmdlVmFs
dWUoNSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGVjcmVtZW50KCkK
K3sKKyAgICBpZiAocm9sZVZhbHVlKCkgIT0gU2xpZGVyUm9sZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGNoYW5nZVZhbHVlKC01KTsKK30KKwogc3RhdGljIEVsZW1lbnQqIHNpYmxpbmdX
aXRoQXJpYVJvbGUoU3RyaW5nIHJvbGUsIE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZSogc2libGlu
ZyA9IG5vZGUtPnBhcmVudCgpLT5maXJzdENoaWxkKCk7CkBAIC0xNTkwLDYgKzE2MDYsOSBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEZvY3VzCiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CisgICAg
aWYgKCFtX3JlbmRlcmVyKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gRklYTUU6IERv
IHdlIHdhbnQgdG8gZG8gYW55dGhpbmcgaGVyZSBmb3IgQVJJQSB0ZXh0Ym94ZXM/CiAgICAgaWYg
KG1fcmVuZGVyZXItPmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgp
KTsKQEAgLTE1OTcsNiArMTYxNiwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnNldFZhbHVlCiAgICAgfSBlbHNlIGlmIChtX3JlbmRlcmVyLT5pc1RleHRBcmVhKCkpIHsKICAg
ICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dEFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4
dEFyZWFFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKTsKICAgICAgICAgdGV4dEFyZWEtPnNl
dFZhbHVlKHN0cmluZyk7CisgICAgfSBlbHNlIGlmIChyb2xlVmFsdWUoKSA9PSBTbGlkZXJSb2xl
KSB7CisgICAgICAgIE5vZGUqIGVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CisgICAgICAg
IGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihlbGVtZW50KS0+c2V0QXR0cmlidXRlKGFyaWFfdmFsdWVub3dB
dHRyLCBzdHJpbmcpOwogICAgIH0KIH0KIApAQCAtMjE2OSwxMCArMjE5Miw5IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aGFuZGxlQWMKICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KiBhY3RpdmVkZXNjZW5kYW50ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdCo+KGFjdGl2ZURlc2NlbmRhbnQoKSk7CiAgICAgCiAgICAgaWYgKGFjdGl2ZWRlc2Nl
bmRhbnQgJiYgc2hvdWxkRm9jdXNBY3RpdmVEZXNjZW5kYW50KCkpCi0gICAgICAgIGRvYy0+YXhP
YmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKGFjdGl2ZWRlc2NlbmRhbnQtPnJlbmRlcmVy
KCksICJBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkIiwgdHJ1ZSk7CisgICAgICAgIGRvYy0+YXhP
YmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKGFjdGl2ZWRlc2NlbmRhbnQtPnJlbmRlcmVy
KCksIEFYT2JqZWN0Q2FjaGU6OkFYRm9jdXNlZFVJRWxlbWVudENoYW5nZWQsIHRydWUpOwogfQog
Ci0KIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om9ic2Vy
dmFibGVPYmplY3QoKSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG1fcmVuZGVyZXI7IHJlbmRlcmVyICYmIHJlbmRlcmVyLT5ub2RlKCk7IHJlbmRlcmVyID0gcmVu
ZGVyZXItPnBhcmVudCgpKSB7CkBAIC0yNDE1LDYgKzI0MzcsNyBAQCBib29sIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmNhblNldEZvCiAgICAgICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgog
ICAgICAgICBjYXNlIENoZWNrQm94Um9sZToKICAgICAgICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6
CisgICAgICAgIGNhc2UgU2xpZGVyUm9sZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lv
biA0Nzg4MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldEZvY3VzZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVk
VGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVjcmVtZW50KCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgp
OwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKSW5kZXg6IFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHAJKHJldmlzaW9uIDQ3ODgzKQor
KysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsMTUgKzExNCw2IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlTbGlkZXI6Om1p
blZhbHVlRm9yUmEKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1pbkF0dHIpLnRvRmxvYXQoKTsK
IH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpjaGFuZ2VWYWx1ZShmbG9hdCBwZXJjZW50
Q2hhbmdlKQotewotICAgIGZsb2F0IHJhbmdlID0gbWF4VmFsdWVGb3JSYW5nZSgpIC0gbWluVmFs
dWVGb3JSYW5nZSgpOwotICAgIGZsb2F0IHZhbHVlID0gdmFsdWVGb3JSYW5nZSgpOwotICAgIAot
ICAgIHZhbHVlICs9IHJhbmdlICogKHBlcmNlbnRDaGFuZ2UgLyAxMDApOwotICAgIHNldFZhbHVl
KFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci19Ci0KIHZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IGVsZW1lbnQoKTsKQEAgLTEzOCwxMiArMTI5LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVNsaWRlcjo6c2V0VmFsdWUoY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjppbmNy
ZW1lbnQoKQogewotICAgIHJldHVybiBjaGFuZ2VWYWx1ZSg1KTsKKyAgICBjaGFuZ2VWYWx1ZSg1
KTsKKyAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9yZW5kZXJlciwgQVhP
YmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlTbGlkZXI6OmRlY3JlbWVudCgpCiB7Ci0gICAgcmV0dXJuIGNoYW5nZVZhbHVlKC01KTsKKyAg
ICBjaGFuZ2VWYWx1ZSgtNSk7CisgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9u
KG1fcmVuZGVyZXIsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKIH0KIAog
SFRNTElucHV0RWxlbWVudCogQWNjZXNzaWJpbGl0eVNsaWRlcjo6ZWxlbWVudCgpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgJKHJldmlz
aW9uIDQ3ODgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIEFjY2Vzc2liaWxpdHlTbGlkZXIoUmVuZGVyT2JqZWN0Kik7CiAKICAgICBwcml2YXRl
OgotICAgICAgICB2b2lkIGNoYW5nZVZhbHVlKGZsb2F0IC8qcGVyY2VudENoYW5nZSovKTsKICAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCgpIGNvbnN0OwogICAgIH07CiAKSW5kZXg6
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9jaHJvbWl1bS9BWE9iamVjdENhY2hlQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9jaHJvbWl1bS9BWE9iamVjdENh
Y2hlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0
eS9jaHJvbWl1bS9BWE9iamVjdENhY2hlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw3ICs0Myw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3MKICAg
ICAvLyBJbiBDaHJvbWl1bSwgQWNjZXNzaWJpbGl0eU9iamVjdHMgYXJlIHdyYXBwZWQgbGF6aWx5
LgogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nl
c3NpYmlsaXR5T2JqZWN0KiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9z
dFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlv
bikKIHsKIH0KIApJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hl
QXRrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0
Q2FjaGVBdGsuY3BwCShyZXZpc2lvbiA0Nzg4MykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQVhPYmplY3RDYWNoZUF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAg
dm9pZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2VzcwogICAgIGdfb2JqZWN0X3Vu
cmVmKGF0a09iaik7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZp
Y2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vz
c2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikK
IHsKLSAgICBpZiAobWVzc2FnZSA9PSAiQVhDaGVja2VkU3RhdGVDaGFuZ2VkIikgeworICAgIGlm
IChub3RpZmljYXRpb24gPT0gQVhDaGVja2VkU3RhdGVDaGFuZ2VkKSB7CiAgICAgICAgIGlmICgh
Y29yZU9iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvcmVPYmplY3QtPndyYXBwZXIoKSwgInN0YXRl
LWNoYW5nZSIsICJjaGVja2VkIiwgY29yZU9iamVjdC0+aXNDaGVja2VkKCkpOwpJbmRleDogV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQkocmV2aXNpb24g
NDc4ODMpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwzOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0
dGFjaFdyYXBwZXIoQWNjZXNzCiAgICAgb2JqLT5zZXRXcmFwcGVyKFtbQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWxsb2NdIGluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVjdDpvYmpdKTsKIH0K
IAotdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIEFYT2JqZWN0Q2Fj
aGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIEFY
Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIE5TQWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb24ob2JqLT53cmFw
cGVyKCksIG1lc3NhZ2UpOworICAgIC8vIFNvbWUgbm90aWZpY2F0aW9ucyBhcmUgdW5pcXVlIHRv
IFNhZmFyaSBhbmQgZG8gbm90IGhhdmUgTlNBY2Nlc3NpYmlsaXR5IGVxdWl2YWxlbnRzLgorICAg
IFN0cmluZyBtYWNOb3RpZmljYXRpb247CisgICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBBWENoZWNrZWRTdGF0ZUNoYW5nZWQ6CisgICAgICAgICAgICBtYWNOb3RpZmlj
YXRpb24gPSAiQVhDaGVja2VkU3RhdGVDaGFuZ2VkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEFYRm9jdXNlZFVJRWxlbWVudENoYW5nZWQ6CisgICAgICAgICAgICBtYWNOb3Rp
ZmljYXRpb24gPSBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZE5vdGlmaWNh
dGlvbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFYTGF5b3V0Q29tcGxldGU6
CisgICAgICAgICAgICBtYWNOb3RpZmljYXRpb24gPSAiQVhMYXlvdXRDb21wbGV0ZSI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWExvYWRDb21wbGV0ZToKKyAgICAgICAgICAg
IG1hY05vdGlmaWNhdGlvbiA9ICJBWExvYWRDb21wbGV0ZSI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBWFNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkOgorICAgICAgICAgICAgbWFj
Tm90aWZpY2F0aW9uID0gTlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWROb3Rp
ZmljYXRpb247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBWFNlbGVjdGVkVGV4
dENoYW5nZWQ6CisgICAgICAgICAgICBtYWNOb3RpZmljYXRpb24gPSBOU0FjY2Vzc2liaWxpdHlT
ZWxlY3RlZFRleHRDaGFuZ2VkTm90aWZpY2F0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQVhWYWx1ZUNoYW5nZWQ6CisgICAgICAgICAgICBtYWNOb3RpZmljYXRpb24gPSBO
U0FjY2Vzc2liaWxpdHlWYWx1ZUNoYW5nZWROb3RpZmljYXRpb247CisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgTlNBY2Nlc3NpYmlsaXR5UG9zdE5vdGlmaWNhdGlvbihvYmot
PndyYXBwZXIoKSwgbWFjTm90aWZpY2F0aW9uKTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpo
YW5kbGVGb2N1c2VkVUlFbGVtZW50Q2hhbmdlZCgpCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvd2luL0FYT2JqZWN0Q2FjaGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS93aW4vQVhPYmplY3RDYWNoZVdpbi5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysgV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L3dpbi9BWE9iamVjdENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQWNj
ZXNzCiAgICAgLy8gc29mdHdhcmUgcmVxdWVzdHMgdGhlbSB2aWEgZ2V0X2FjY0NoaWxkLgogfQog
Ci12b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmls
aXR5T2JqZWN0KiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRm
b3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbikKIHsK
IH0KIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNDc4ODMpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDMsNyArMTcwMyw3IEBAIHZvaWQgRG9jdW1l
bnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICAvLyBleGlzdHMgaW4gdGhlIGNhY2hlICh3ZSBp
Z25vcmUgdGhlIHJldHVybiB2YWx1ZSBiZWNhdXNlIHdlIGRvbid0IG5lZWQgaXQgaGVyZSkuIFRo
aXMgaXMgCiAgICAgICAgIC8vIG9ubHkgc2FmZSB0byBjYWxsIHdoZW4gYSBsYXlvdXQgaXMgbm90
IGluIHByb2dyZXNzLCBzbyBpdCBjYW4gbm90IGJlIHVzZWQgaW4gcG9zdE5vdGlmaWNhdGlvbi4g
ICAgCiAgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyT2JqZWN0KTsK
LSAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlck9iamVjdCwg
IkFYTG9hZENvbXBsZXRlIiwgdHJ1ZSk7CisgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5v
dGlmaWNhdGlvbihyZW5kZXJPYmplY3QsIEFYT2JqZWN0Q2FjaGU6OkFYTG9hZENvbXBsZXRlLCB0
cnVlKTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3ODgzKQorKysg
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiwxNiArNjAyLDIw
IEBAIHZvaWQgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUKIAogdm9pZCBFbGVt
ZW50Ojp1cGRhdGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyKQogewotICAg
IGlmICghZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5hY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KQorICAgIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUgPSBkb2N1bWVudCgpLT5heE9iamVj
dENhY2hlKCk7CisgICAgaWYgKCFheE9iamVjdENhY2hlLT5hY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9
IGF0dHItPm5hbWUoKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gYXJpYV9hY3RpdmVkZXNjZW5kYW50
QXR0cikgewogICAgICAgICAvLyBhbnkgY2hhbmdlIHRvIGFyaWEtYWN0aXZlZGVzY2VuZGFudCBh
dHRyaWJ1dGUgdHJpZ2dlcnMgYWNjZXNzaWJpbGl0eSBmb2N1cyBjaGFuZ2UsIGJ1dCBkb2N1bWVu
dCBmb2N1cyByZW1haW5zIGludGFjdAotICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hl
KCktPmhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKHJlbmRlcmVyKCkpOworICAgICAgICBh
eE9iamVjdENhY2hlLT5oYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZChyZW5kZXJlcigpKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHJvbGVBdHRyKSB7CiAgICAgICAgIC8vIHRoZSBy
b2xlIGF0dHJpYnV0ZSBjYW4gY2hhbmdlIGF0IGFueSB0aW1lLCBhbmQgdGhlIEFjY2Vzc2liaWxp
dHlPYmplY3QgbXVzdCBwaWNrIHVwIHRoZXNlIGNoYW5nZXMKLSAgICAgICAgZG9jdW1lbnQoKS0+
YXhPYmplY3RDYWNoZSgpLT5oYW5kbGVBcmlhUm9sZUNoYW5nZWQocmVuZGVyZXIoKSk7CisgICAg
ICAgIGF4T2JqZWN0Q2FjaGUtPmhhbmRsZUFyaWFSb2xlQ2hhbmdlZChyZW5kZXJlcigpKTsKKyAg
ICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGFyaWFfdmFsdWVub3dBdHRyKSB7CisgICAgICAgIC8v
IElmIHRoZSB2YWx1ZW5vdyBhdHRyaWJ1dGUgY2hhbmdlcywgQVggY2xpZW50cyBuZWVkIHRvIGJl
IG5vdGlmaWVkLgorICAgICAgICBheE9iamVjdENhY2hlLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRl
cmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKICAgICB9CiB9CiAg
ICAgCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNDc4ODMpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQgRWRp
dG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY28KICAgICBpZiAoQVhPYmplY3RDYWNoZTo6
YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gZW5kaW5nU2Vs
ZWN0aW9uLnN0YXJ0KCkubm9kZSgpOwogICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihub2Rl
LT5yZW5kZXJlcigpLCAiQVhWYWx1ZUNoYW5nZWQiLCBmYWxzZSk7CisgICAgICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obm9kZS0+
cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGNsaWVudCgpKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxl
Y3Rpb25Db250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYWMv
U2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gNDc4ODMpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpub3RpZnlBY2Nlc3NpYgogICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAKICAgICBpZiAoQVhP
YmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBtX3NlbC5zdGFydCgpLmlzTm90
TnVsbCgpICYmIG1fc2VsLmVuZCgpLmlzTm90TnVsbCgpKQotICAgICAgICBkb2N1bWVudC0+YXhP
YmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5yZW5k
ZXJlcigpLCAiQVhTZWxlY3RlZFRleHRDaGFuZ2VkIiwgZmFsc2UpOworICAgICAgICBkb2N1bWVu
dC0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG1fc2VsLnN0YXJ0KCkubm9kZSgp
LT5yZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIGZhbHNl
KTsKIAogICAgIC8vIGlmIHpvb20gZmVhdHVyZSBpcyBlbmFibGVkLCBpbnNlcnRpb24gcG9pbnQg
Y2hhbmdlcyBzaG91bGQgdXBkYXRlIHRoZSB6b29tCiAgICAgaWYgKCFVQVpvb21FbmFibGVkKCkg
fHwgIW1fc2VsLmlzQ2FyZXQoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ3ODgzKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05ODQsNyArOTg0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRD
aGVja2VkKGJvb2wgbgogICAgIC8vIFJlbmRlclRleHRWaWV3KSwgYnV0IGl0J3Mgbm90IHBvc3Np
YmxlIHRvIGRvIGl0IGF0IHRoZSBtb21lbnQKICAgICAvLyBiZWNhdXNlIG9mIHRoZSB3YXkgdGhl
IGNvZGUgaXMgc3RydWN0dXJlZC4KICAgICBpZiAocmVuZGVyZXIoKSAmJiBBWE9iamVjdENhY2hl
OjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgp
LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocmVuZGVyZXIoKSwgIkFYQ2hlY2tl
ZFN0YXRlQ2hhbmdlZCIsIHRydWUpOworICAgICAgICByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5h
eE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocmVuZGVyZXIoKSwgQVhPYmplY3RDYWNo
ZTo6QVhDaGVja2VkU3RhdGVDaGFuZ2VkLCB0cnVlKTsKIAogICAgIC8vIE9ubHkgc2VuZCBhIGNo
YW5nZSBldmVudCBmb3IgaXRlbXMgaW4gdGhlIGRvY3VtZW50IChhdm9pZCBmaXJpbmcgZHVyaW5n
CiAgICAgLy8gcGFyc2luZykgYW5kIGRvbid0IHNlbmQgYSBjaGFuZ2UgZXZlbnQgZm9yIGEgcmFk
aW8gYnV0dG9uIHRoYXQncyBnZXR0aW5nCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gNDc4
ODMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc4
LDcgKzY3OCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUKIAog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkKLSAgICAgICAgcm9vdC0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5wb3N0
Tm90aWZpY2F0aW9uKHJvb3QsICJBWExheW91dENvbXBsZXRlIiwgdHJ1ZSk7CisgICAgICAgIHJv
b3QtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihyb290LCBB
WE9iamVjdENhY2hlOjpBWExheW91dENvbXBsZXRlLCB0cnVlKTsKICNlbmRpZgogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICB1cGRhdGVEYXNoYm9hcmRSZWdpb25zKCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA0Nzg4MykK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNldElubmVyVGV4
dFZhbHUKICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNsZWFyVW5kb1JlZG9PcGVy
YXRpb25zKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCAiQVhWYWx1ZUNo
YW5nZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0
Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hh
bmdlZCwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDQ3ODgzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMDktMDgtMzAgIGNocmlzIGZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
QUktQVJJQTogYWRkIHN1cHBvcnQgZm9yIHJhbmdlcywgaW5jbHVkaW5nIHRoZSBwcm9ncmVzc2Jh
ciwgc2xpZGVyLCBhbmQgc3BpbmJ1dHRvbiByb2xlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg4NDEKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
YXJpYS1zbGlkZXItdmFsdWUtY2hhbmdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRlci12YWx1ZS1jaGFuZ2UuaHRtbDogQWRkZWQuCisKIDIw
MDktMDgtMjkgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L2FyaWEtc2xpZGVyLXZhbHVlLWNoYW5nZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRlci12YWx1ZS1jaGFuZ2UtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRl
ci12YWx1ZS1jaGFuZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBA
CitzbGlkZXIKK1RoaXMgdGVzdHMgdGhhdCBpdHMgcG9zc2libGUgdG8gaW5jcmVtZW50IGFuZCBk
ZWNyZW1lbnQgYW4gYXJpYSBzbGlkZXIgYW5kIGhhdmUgdGhlIHZhbHVlIHVwZGF0ZWQgY29ycmVj
dGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzbGlkZXIuaW50VmFs
dWUgaXMgNTAKK1BBU1Mgc2xpZGVyLmludFZhbHVlID4gNTAgaXMgdHJ1ZQorUEFTUyBzbGlkZXIu
aW50VmFsdWUgPCA1MCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNs
aWRlci12YWx1ZS1jaGFuZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L2FyaWEtc2xpZGVyLXZhbHVlLWNoYW5nZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRlci12YWx1ZS1jaGFuZ2UuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4K
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5IGlkPSJib2R5Ij4KKworPGRpdiB0YWJpbmRleD0wIGlkPSJzbGlkZXIiIHJvbGU9InNs
aWRlciIgYXJpYS12YWx1ZW5vdz0iNTAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9
IjEwMCI+c2xpZGVyPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
cyB0aGF0IGl0cyBwb3NzaWJsZSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBhbiBhcmlhIHNs
aWRlciBhbmQgaGF2ZSB0aGUgdmFsdWUgdXBkYXRlZCBjb3JyZWN0bHkuIik7CisKKyAgICBpZiAo
d2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisKKyAgICAgICAgICB2YXIgc2xpZGVy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRlciIpOworICAgICAgICAgIHNsaWRlci5m
b2N1cygpOworCisgICAgICAgICAgc2xpZGVyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9j
dXNlZEVsZW1lbnQ7CisgICAgICAgICAgc2hvdWxkQmUoInNsaWRlci5pbnRWYWx1ZSIsICI1MCIp
OworCisgICAgICAgICAgc2xpZGVyLmluY3JlbWVudCgpOworICAgICAgICAgIHNob3VsZEJlKCJz
bGlkZXIuaW50VmFsdWUgPiA1MCIsICJ0cnVlIik7CisKKyAgICAgICAgICBzbGlkZXIuZGVjcmVt
ZW50KCk7CisgICAgICAgICAgc2xpZGVyLmRlY3JlbWVudCgpOworICAgICAgICAgIHNob3VsZEJl
KCJzbGlkZXIuaW50VmFsdWUgPCA1MCIsICJ0cnVlIik7CisKKyAgICB9CisKKyAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="19788"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39506</attachid>
            <date>2009-09-11 23:26:14 -0700</date>
            <delta_ts>2009-09-15 12:18:26 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9500</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODMzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDktMTEgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXQUktQVJJQTogYWRkIHN1cHBvcnQgZm9yIHJhbmdlcywgaW5jbHVkaW5nIHRoZSBwcm9ncmVz
c2Jhciwgc2xpZGVyLCBhbmQgc3BpbmJ1dHRvbiByb2xlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg4NDEKKworICAgICAgICBBbGxvdyBjZXJ0YWlu
IEFSSUEgcm9sZXMgdG8gY2hhbmdlIHZhbHVlIHdpdGggQVhJbmNyZW1lbnQgYW5kIEFYRGVjcmVt
ZW50LiAKKyAgICAgICAgQ29uc29saWRhdGUgaW5jcmVtZW50L2RlY3JlbWVudC9jaGFuZ2VWYWx1
ZSBtZXRob2RzLiAKKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L2FyaWEtc2xpZGVyLXZh
bHVlLWNoYW5nZS5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
bmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
ZGVjcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNoYW5nZVZhbHVlQnlQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmNhblNldEZvY3VzQXR0cmlidXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVNsaWRlci5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCk6CisKIDIwMDktMDkt
MTEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDgzMzEpCisrKyBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwNiw2ICs2MDYsMjIgQEAgRWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6bW91cwogICAgIHJldHVybiAwOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmluY3JlbWVudCgpCit7CisgICAgaWYgKHJvbGVWYWx1ZSgpICE9IFNsaWRlclJvbGUpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjaGFuZ2VWYWx1ZUJ5UGVyY2VudCg1KTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZWNyZW1lbnQoKQoreworICAgIGlmIChy
b2xlVmFsdWUoKSAhPSBTbGlkZXJSb2xlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2hh
bmdlVmFsdWVCeVBlcmNlbnQoLTUpOworfQorCiBzdGF0aWMgRWxlbWVudCogc2libGluZ1dpdGhB
cmlhUm9sZShTdHJpbmcgcm9sZSwgTm9kZSogbm9kZSkKIHsKICAgICBOb2RlKiBzaWJsaW5nID0g
bm9kZS0+cGFyZW50KCktPmZpcnN0Q2hpbGQoKTsKQEAgLTE1OTMsOCArMTYwOSwyMiBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldEZvY3VzCiAgICAgfQogfQogCit2b2lkIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNoYW5nZVZhbHVlQnlQZXJjZW50KGZsb2F0IHBlcmNl
bnRDaGFuZ2UpCit7CisgICAgZmxvYXQgcmFuZ2UgPSBtYXhWYWx1ZUZvclJhbmdlKCkgLSBtaW5W
YWx1ZUZvclJhbmdlKCk7CisgICAgZmxvYXQgdmFsdWUgPSB2YWx1ZUZvclJhbmdlKCk7CisgICAg
CisgICAgdmFsdWUgKz0gcmFuZ2UgKiAocGVyY2VudENoYW5nZSAvIDEwMCk7CisgICAgc2V0VmFs
dWUoU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKKyAgICAKKyAgICBheE9iamVjdENhY2hlKCktPnBv
c3ROb3RpZmljYXRpb24obV9yZW5kZXJlciwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQs
IHRydWUpOworfQorICAgIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKKyAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgICAg
IHJldHVybjsKKyAgICAKICAgICAvLyBGSVhNRTogRG8gd2Ugd2FudCB0byBkbyBhbnl0aGluZyBo
ZXJlIGZvciBBUklBIHRleHRib3hlcz8KICAgICBpZiAobV9yZW5kZXJlci0+aXNUZXh0RmllbGQo
KSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihtX3JlbmRlcmVyLT5ub2RlKCkpOwpAQCAtMTYwMiw2ICsxNjMyLDEwIEBA
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0VmFsdWUKICAgICB9IGVsc2UgaWYg
KG1fcmVuZGVyZXItPmlzVGV4dEFyZWEoKSkgewogICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihtX3JlbmRlcmVy
LT5ub2RlKCkpOwogICAgICAgICB0ZXh0QXJlYS0+c2V0VmFsdWUoc3RyaW5nKTsKKyAgICB9IGVs
c2UgaWYgKHJvbGVWYWx1ZSgpID09IFNsaWRlclJvbGUpIHsKKyAgICAgICAgTm9kZSogZWxlbWVu
dCA9IG1fcmVuZGVyZXItPm5vZGUoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVsZW1l
bnQpLT5zZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW5vd0F0dHIsIHN0cmluZyk7CiAgICAgfQogfQog
CkBAIC0yNDIwLDYgKzI0NTQsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNh
blNldEZvCiAgICAgICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgogICAgICAgICBjYXNlIENoZWNr
Qm94Um9sZToKICAgICAgICAgY2FzZSBSYWRpb0J1dHRvblJvbGU6CisgICAgICAgIGNhc2UgU2xp
ZGVyUm9sZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiA0ODMzMSkKKysrIFdlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OCw2ICsxODgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3Vz
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBs
YWluVGV4dFJhbmdlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYp
OworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VWYWx1ZUJ5UGVyY2VudChmbG9hdCBwZXJjZW50Q2hh
bmdlKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRl
Y3JlbWVudCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKICAgICB2aXJ0dWFs
IHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCShyZXZpc2lvbiA0ODMzMSkKKysrIFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDE1ICsxMTQsNiBAQCBmbG9hdCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjptaW5WYWx1ZUZvclJhCiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShtaW5BdHRyKS50b0Zsb2F0KCk7CiB9CiAKLXZvaWQgQWNj
ZXNzaWJpbGl0eVNsaWRlcjo6Y2hhbmdlVmFsdWUoZmxvYXQgcGVyY2VudENoYW5nZSkKLXsKLSAg
ICBmbG9hdCByYW5nZSA9IG1heFZhbHVlRm9yUmFuZ2UoKSAtIG1pblZhbHVlRm9yUmFuZ2UoKTsK
LSAgICBmbG9hdCB2YWx1ZSA9IHZhbHVlRm9yUmFuZ2UoKTsKLSAgICAKLSAgICB2YWx1ZSArPSBy
YW5nZSAqIChwZXJjZW50Q2hhbmdlIC8gMTAwKTsKLSAgICBzZXRWYWx1ZShTdHJpbmc6Om51bWJl
cih2YWx1ZSkpOwotfQotCiB2b2lkIEFjY2Vzc2liaWxpdHlTbGlkZXI6OnNldFZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50
KCk7CkBAIC0xMzYsMTYgKzEyNyw2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6c2V0VmFs
dWUoY29uc3QKICAgICBpbnB1dC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiB9
CiAKLXZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6aW5jcmVtZW50KCkKLXsKLSAgICByZXR1cm4g
Y2hhbmdlVmFsdWUoNSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6ZGVjcmVtZW50
KCkKLXsKLSAgICByZXR1cm4gY2hhbmdlVmFsdWUoLTUpOwotfQotCiBIVE1MSW5wdXRFbGVtZW50
KiBBY2Nlc3NpYmlsaXR5U2xpZGVyOjplbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fcmVuZGVyZXItPm5vZGUoKSk7CkluZGV4OiBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgJKHJldmlzaW9uIDQ4
MzMxKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTgsMTQgKzU4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBmbG9hdCBtaW5WYWx1ZUZvclJhbmdlKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3Q7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGluY3JlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjcmVt
ZW50KCk7Ci0KICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEFjY2Vzc2liaWxpdHlTbGlkZXIoUmVu
ZGVyT2JqZWN0Kik7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNoYW5nZVZhbHVlKGZs
b2F0IC8qcGVyY2VudENoYW5nZSovKTsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0ODMzMCkKKysrIFdl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDkgQEAg
dm9pZCBFbGVtZW50Ojp1cGRhdGVBZnRlckF0dHJpYnV0ZUNoYW5nZQogICAgIH0gZWxzZSBpZiAo
YXR0ck5hbWUgPT0gcm9sZUF0dHIpIHsKICAgICAgICAgLy8gdGhlIHJvbGUgYXR0cmlidXRlIGNh
biBjaGFuZ2UgYXQgYW55IHRpbWUsIGFuZCB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdCBtdXN0IHBp
Y2sgdXAgdGhlc2UgY2hhbmdlcwogICAgICAgICBheE9iamVjdENhY2hlLT5oYW5kbGVBcmlhUm9s
ZUNoYW5nZWQocmVuZGVyZXIoKSk7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBhcmlhX3Zh
bHVlbm93QXR0cikgeworICAgICAgICAvLyBJZiB0aGUgdmFsdWVub3cgYXR0cmlidXRlIGNoYW5n
ZXMsIEFYIGNsaWVudHMgbmVlZCB0byBiZSBub3RpZmllZC4KKyAgICAgICAgYXhPYmplY3RDYWNo
ZS0+cG9zdE5vdGlmaWNhdGlvbihyZW5kZXJlcigpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hh
bmdlZCwgdHJ1ZSk7CiAgICAgfQogfQogICAgIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDgzMzEpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAwOS0wOS0xMSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBSS1BUklBOiBhZGQg
c3VwcG9ydCBmb3IgcmFuZ2VzLCBpbmNsdWRpbmcgdGhlIHByb2dyZXNzYmFyLCBzbGlkZXIsIGFu
ZCBzcGluYnV0dG9uIHJvbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yODg0MQorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRlci12
YWx1ZS1jaGFuZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2FyaWEtc2xpZGVyLXZhbHVlLWNoYW5nZS5odG1sOiBBZGRlZC4KKwogMjAwOS0wOS0xMSAgT2xp
dmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBX
ZWluaWcuCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtc2xpZGVyLXZhbHVl
LWNoYW5nZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9hcmlhLXNsaWRlci12YWx1ZS1jaGFuZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRlci12YWx1ZS1jaGFuZ2UtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitzbGlkZXIKK1RoaXMgdGVz
dHMgdGhhdCBpdHMgcG9zc2libGUgdG8gaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYW4gYXJpYSBz
bGlkZXIgYW5kIGhhdmUgdGhlIHZhbHVlIHVwZGF0ZWQgY29ycmVjdGx5LgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzbGlkZXIuaW50VmFsdWUgaXMgNTAKK1BBU1Mgc2xp
ZGVyLmludFZhbHVlID4gNTAgaXMgdHJ1ZQorUEFTUyBzbGlkZXIuaW50VmFsdWUgPCA1MCBpcyB0
cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9hcmlhLXNsaWRlci12YWx1ZS1jaGFuZ2Uu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2FyaWEtc2xpZGVy
LXZhbHVlLWNoYW5nZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9hcmlhLXNsaWRlci12YWx1ZS1jaGFuZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4K
KworPGRpdiB0YWJpbmRleD0wIGlkPSJzbGlkZXIiIHJvbGU9InNsaWRlciIgYXJpYS12YWx1ZW5v
dz0iNTAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjEwMCI+c2xpZGVyPC9kaXY+
CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisK
KzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IGl0cyBwb3NzaWJs
ZSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBhbiBhcmlhIHNsaWRlciBhbmQgaGF2ZSB0aGUg
dmFsdWUgdXBkYXRlZCBjb3JyZWN0bHkuIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKSB7CisKKyAgICAgICAgICB2YXIgc2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInNsaWRlciIpOworICAgICAgICAgIHNsaWRlci5mb2N1cygpOworCisgICAgICAg
ICAgc2xpZGVyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAg
ICAgICAgc2hvdWxkQmUoInNsaWRlci5pbnRWYWx1ZSIsICI1MCIpOworCisgICAgICAgICAgc2xp
ZGVyLmluY3JlbWVudCgpOworICAgICAgICAgIHNob3VsZEJlKCJzbGlkZXIuaW50VmFsdWUgPiA1
MCIsICJ0cnVlIik7CisKKyAgICAgICAgICBzbGlkZXIuZGVjcmVtZW50KCk7CisgICAgICAgICAg
c2xpZGVyLmRlY3JlbWVudCgpOworICAgICAgICAgIHNob3VsZEJlKCJzbGlkZXIuaW50VmFsdWUg
PCA1MCIsICJ0cnVlIik7CisKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="20604"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
      

    </bug>

</bugzilla>