<?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>25989</bug_id>
          
          <creation_ts>2009-05-24 02:04:59 -0700</creation_ts>
          <short_desc>[Gtk] Enable accessibility in Gtk DRT</short_desc>
          <delta_ts>2009-08-08 00:55:40 -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>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jan Alonzo">jmalonzo</reporter>
          <assigned_to name="Jan Alonzo">jmalonzo</assigned_to>
          <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>122930</commentid>
    <comment_count>0</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-05-24 02:04:59 -0700</bug_when>
    <thetext>We need to enable accessibility support in DRT Gtk so we can run the AX tests and hopefully be able to contribute more to these tests, esp. now that we&apos;re getting serious with implementing the necessary functionality to have the port accessibility-enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123518</commentid>
    <comment_count>1</comment_count>
      <attachid>30765</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-05-28 21:25:03 -0700</bug_when>
    <thetext>Created attachment 30765
initial impl

Initial support to enable these tests. Need to implement getting the focused element to make this useful as most of the tests rely on getting the &quot;focused UI element&quot; to determine whether the test passed or fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124736</commentid>
    <comment_count>2</comment_count>
      <attachid>31041</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-06-08 01:29:32 -0700</bug_when>
    <thetext>Created attachment 31041
Add Accessibility support to GTK DRT

This patch adds basic accessibility support to gtk DRT so we can get things going. Only four tests are passing at the moment and I&apos;ve enabled them in this patch.

Just an aside: A lot of the tests depend on an accessible element&apos;s attributes and I don&apos;t think we have that yet. Once we get that support, we should be able to enable more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124742</commentid>
    <comment_count>3</comment_count>
      <attachid>31041</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-06-08 02:40:31 -0700</bug_when>
    <thetext>Comment on attachment 31041
Add Accessibility support to GTK DRT

&gt; +AtkObject* webkit_accessible_get_focused_element(WebKitAccessible* accessible)
&gt; +{
&gt; +    if (!accessible-&gt;m_object)
&gt; +        return 0;
&gt; +
&gt; +    // FIXME: update the backing store once we have one.
&gt; +
&gt; +    RefPtr&lt;AccessibilityObject&gt; focusedObj = accessible-&gt;m_object-&gt;focusedUIElement();
&gt; +    if (!focusedObj)
&gt; +        return 0;
&gt; +
&gt; +    return focusedObj-&gt;wrapper();
&gt; +}
&gt; +

I can never decide if we should add new API in one patch and its usage in another, or everything in one patch.

&gt; diff --git a/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp b/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
&gt; index c78323e..48494c3 100644
&gt; --- a/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
&gt; +++ b/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
&gt; @@ -28,6 +28,8 @@
&gt;  
&gt;  #include &lt;JavaScriptCore/JSRetainPtr.h&gt;
&gt;  
&gt; +#include &lt;limits.h&gt;
&gt; +
&gt;  // Static Functions
&gt;  

I would put this in a different patch.

&gt; +AccessibilityUIElement AccessibilityUIElement::getChildAtIndex(unsigned index)
&gt; +{
&gt; +    Vector&lt;AccessibilityUIElement&gt; children;
&gt; +    getChildrenWithRange(children, index, 1);
&gt; +
&gt; +    if (children.size() == 1)
&gt; +        return children.at(0);
&gt; +
&gt; +    return 0;
&gt; +}

Mmm, why can&apos;t you just use atk_object_ref_accessible_child with index here?

&gt; +AccessibilityUIElement AccessibilityUIElement::parentElement()
&gt; +{
&gt; +    g_assert(m_element);

I guess we should use either ASSERT or g_assert, and stick to that.

&gt; +
&gt; +double AccessibilityUIElement::intValue()
&gt; +{
&gt; +    GValue value = { 0, { { 0 } } };

I suppose { 0, } like in C does not work in C++.

&gt; +
&gt; +    if (!ATK_IS_VALUE(m_element))
&gt; +        return 0.0f;
&gt; +
&gt; +    atk_value_get_current_value(ATK_VALUE(m_element), &amp;value);
&gt; +    return g_value_get_double(&amp;value);

How do we know the GValue has a double value? Shouldn&apos;t we do a G_VALUE_HOLDS_DOUBLE before?

&gt; @@ -432,7 +434,10 @@ static void webViewWindowObjectCleared(WebKitWebView* view, WebKitWebFrame* fram
&gt;      assert(gLayoutTestController);
&gt;  
&gt;      gLayoutTestController-&gt;makeWindowObject(context, windowObject, &amp;exception);
&gt; -    assert(!exception);
&gt; +    ASSERT(!exception);
&gt; +
&gt; +    accessibilityController-&gt;makeWindowObject(context, windowObject, &amp;exception);
&gt; +    ASSERT(!exception);

Stupid question, where is this created? :D

The patch looks pretty good to me, but I&apos;ll mark it as r- while we work out the last details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124946</commentid>
    <comment_count>4</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-06-09 08:31:59 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; +++ b/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
&gt; &gt; @@ -28,6 +28,8 @@
&gt; &gt;  
&gt; &gt;  #include &lt;JavaScriptCore/JSRetainPtr.h&gt;
&gt; &gt;  
&gt; &gt; +#include &lt;limits.h&gt;
&gt; &gt; +
&gt; &gt;  // Static Functions
&gt; &gt;  
&gt; 
&gt; I would put this in a different patch.

Ok.

&gt; 
&gt; &gt; +AccessibilityUIElement AccessibilityUIElement::getChildAtIndex(unsigned index)
&gt; &gt; +{
&gt; &gt; +    Vector&lt;AccessibilityUIElement&gt; children;
&gt; &gt; +    getChildrenWithRange(children, index, 1);
&gt; &gt; +
&gt; &gt; +    if (children.size() == 1)
&gt; &gt; +        return children.at(0);
&gt; &gt; +
&gt; &gt; +    return 0;
&gt; &gt; +}
&gt; 
&gt; Mmm, why can&apos;t you just use atk_object_ref_accessible_child with index here?

I could but I think I wanted to exercise the function and so we don&apos;t have repeated atk_object_ref_accessible_child calls in the getChild... functions. I can change it if that makes more sense.

&gt; 
&gt; &gt; +AccessibilityUIElement AccessibilityUIElement::parentElement()
&gt; &gt; +{
&gt; &gt; +    g_assert(m_element);
&gt; 
&gt; I guess we should use either ASSERT or g_assert, and stick to that.

ok.

&gt; 
&gt; &gt; +
&gt; &gt; +double AccessibilityUIElement::intValue()
&gt; &gt; +{
&gt; &gt; +    GValue value = { 0, { { 0 } } };
&gt; 
&gt; I suppose { 0, } like in C does not work in C++.

ok.

&gt; 
&gt; &gt; +
&gt; &gt; +    if (!ATK_IS_VALUE(m_element))
&gt; &gt; +        return 0.0f;
&gt; &gt; +
&gt; &gt; +    atk_value_get_current_value(ATK_VALUE(m_element), &amp;value);
&gt; &gt; +    return g_value_get_double(&amp;value);
&gt; 
&gt; How do we know the GValue has a double value? Shouldn&apos;t we do a
&gt; G_VALUE_HOLDS_DOUBLE before?

Ok. Should I check for G_VALUE_HOLDS_INT too and return 0 if both fail?

&gt; 
&gt; &gt; @@ -432,7 +434,10 @@ static void webViewWindowObjectCleared(WebKitWebView* view, WebKitWebFrame* fram
&gt; &gt;      assert(gLayoutTestController);
&gt; &gt;  
&gt; &gt;      gLayoutTestController-&gt;makeWindowObject(context, windowObject, &amp;exception);
&gt; &gt; -    assert(!exception);
&gt; &gt; +    ASSERT(!exception);
&gt; &gt; +
&gt; &gt; +    accessibilityController-&gt;makeWindowObject(context, windowObject, &amp;exception);
&gt; &gt; +    ASSERT(!exception);
&gt; 
&gt; Stupid question, where is this created? :D

Oops. Weird, it worked even without creating it! :-\ I&apos;ll fix it and make sure the results are still the same.

&gt; 
&gt; The patch looks pretty good to me, but I&apos;ll mark it as r- while we work out the
&gt; last details.

Thanks a lot for the review. Sorry took a while to respond. 

&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124956</commentid>
    <comment_count>5</comment_count>
      <attachid>31098</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-06-09 08:53:06 -0700</bug_when>
    <thetext>Created attachment 31098
Updated patch based on xan&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124958</commentid>
    <comment_count>6</comment_count>
      <attachid>31098</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-06-09 09:07:09 -0700</bug_when>
    <thetext>Comment on attachment 31098
Updated patch based on xan&apos;s feedback

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124961</commentid>
    <comment_count>7</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-06-09 09:26:01 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 31098 [review])
&gt; OK.
&gt; 

I forgot to add the Copyright Apple line to the new DRT files. ARe you OK with me adding that prior to committing?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124965</commentid>
    <comment_count>8</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-06-09 09:44:34 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 31098 [review] [review])
&gt; &gt; OK.
&gt; &gt; 
&gt; 
&gt; I forgot to add the Copyright Apple line to the new DRT files. ARe you OK with
&gt; me adding that prior to committing?
&gt; 
&gt; Thanks.
&gt; 

Sure.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125297</commentid>
    <comment_count>9</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-06-11 05:10:34 -0700</bug_when>
    <thetext>Our non-accessibility tests seems to be crashing with this patch. I&apos;m holding off committing this one first until I figure out what&apos;s triggering the crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125542</commentid>
    <comment_count>10</comment_count>
      <attachid>31098</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-06-12 15:09:40 -0700</bug_when>
    <thetext>Comment on attachment 31098
Updated patch based on xan&apos;s feedback

Clearing review for now until I can run the full testsuite with this patch. Thanks and apologies..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137795</commentid>
    <comment_count>11</comment_count>
      <attachid>34252</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-08-06 22:33:31 -0700</bug_when>
    <thetext>Created attachment 34252
updated 31/07/2009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137813</commentid>
    <comment_count>12</comment_count>
      <attachid>34255</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-08-07 00:25:43 -0700</bug_when>
    <thetext>Created attachment 34255
patch updated to ToT (r46888)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138289</commentid>
    <comment_count>13</comment_count>
      <attachid>34361</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-08-07 23:00:09 -0700</bug_when>
    <thetext>Created attachment 34361
patch with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138295</commentid>
    <comment_count>14</comment_count>
      <attachid>34361</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-08-08 00:19:00 -0700</bug_when>
    <thetext>Comment on attachment 34361
patch with ChangeLog

&gt; +AtkObject* webkit_accessible_get_focused_element(WebKitAccessible* accessible)
&gt; +{
&gt; +    if (!accessible-&gt;m_object)
&gt; +        return 0;
&gt; +
&gt; +    // FIXME: update the backing store once we have one.

I&apos;m not sure what this is.

&gt; +AtkObject* webkit_web_frame_get_focused_accessible_element(WebKitWebFrame* frame)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
&gt; +
&gt; +#if HAVE(ACCESSIBILITY)
&gt; +    if (!AXObjectCache::accessibilityEnabled())
&gt; +        AXObjectCache::enableAccessibility();
&gt; +
&gt; +    WebKitWebFramePrivate* priv = frame-&gt;priv;
&gt; +    if (!priv-&gt;coreFrame || !priv-&gt;coreFrame-&gt;document())
&gt; +        return NULL;
&gt; +
&gt; +    RenderView* root = static_cast&lt;RenderView *&gt;(priv-&gt;coreFrame-&gt;document()-&gt;renderer());

I think you should use the new toRenderView methods introduced recently here.


&gt; +double AccessibilityUIElement::intValue()
&gt; +{
&gt; +    GValue value = { 0, };

You should use the full initializer here ( GValue value = { 0, { { 0 } } }), otherwise I think you&apos;ll get compiler warnings.

Looks good to me otherwise, please land with those things fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138300</commentid>
    <comment_count>15</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-08-08 00:55:40 -0700</bug_when>
    <thetext>Fixed. Landed as http://trac.webkit.org/changeset/46952</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30765</attachid>
            <date>2009-05-28 21:25:03 -0700</date>
            <delta_ts>2009-06-08 01:29:32 -0700</delta_ts>
            <desc>initial impl</desc>
            <filename>axtests.patch</filename>
            <type>text/plain</type>
            <size>17128</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggYWRlN2U2Yi4uNjAyYmU5YSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQKQEAgLTYyLDQ5ICs2Miw0OSBAQAogIyBUZXN0cyBpbiBhY2Nlc3Np
YmlsaXR5LyBkaXJlY3RvcnkKICMgQW4gaW1wbGVtZW50YXRpb24gb2YgYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIgaXMgcmVxdWlyZWQuCiAjICAgVGVzdHMgZmFpbGluZwotYWNjZXNzaWJpbGl0eS9h
cmlhLWxhYmVsbGVkYnktc3RheS13aXRoaW4uaHRtbAotYWNjZXNzaWJpbGl0eS9hcmlhLWxpbmst
c3VwcG9ydHMtcHJlc3MuaHRtbAotYWNjZXNzaWJpbGl0eS9idXR0b24tcHJlc3MtYWN0aW9uLmh0
bWwKLWFjY2Vzc2liaWxpdHkvY2FudmFzLmh0bWwKLWFjY2Vzc2liaWxpdHkvaWZyYW1lLWJhc3Rh
cmRpemF0aW9uLmh0bWwKLWFjY2Vzc2liaWxpdHkvaWdub3JlLXNwYWNlci1lbGVtZW50cy5odG1s
Ci1hY2Nlc3NpYmlsaXR5L2ltZy1hcmlhLWJ1dHRvbi1hbHQtdGFnLmh0bWwKLWFjY2Vzc2liaWxp
dHkvaW5wdXQtaW1hZ2UtYWx0Lmh0bWwKLWFjY2Vzc2liaWxpdHkvb25jbGljay1oYW5kbGVycy5o
dG1sCi1hY2Nlc3NpYmlsaXR5L25vY2hpbGRyZW4tZWxlbWVudHMuaHRtbAotYWNjZXNzaWJpbGl0
eS9wbGFjZWhvbGRlci5odG1sCi1hY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVja2JveC1z
aXplLmh0bWwKLWFjY2Vzc2liaWxpdHkvcmFkaW8tYnV0dG9uLXRpdGxlLWxhYmVsLmh0bWwKLWFj
Y2Vzc2liaWxpdHkvc2VjdXJlLXRleHRmaWVsZC10aXRsZS11aS5odG1sCi1hY2Nlc3NpYmlsaXR5
L3RhYmxlLW1vZGlmaWNhdGlvbi1jcmFzaC5odG1sCi1hY2Nlc3NpYmlsaXR5L3RhYmxlLW5vZmly
c3Rib2R5Lmh0bWwKLWFjY2Vzc2liaWxpdHkvdGFibGUtbm90Ym9keS5odG1sCi1hY2Nlc3NpYmls
aXR5L3RleHRhcmVhLWluc2VydGlvbi1wb2ludC1saW5lLW51bWJlci5odG1sCi1hY2Nlc3NpYmls
aXR5L3RleHRhcmVhLWxpbmUtZm9yLWluZGV4Lmh0bWwKLWFjY2Vzc2liaWxpdHkvdGV4dGFyZWEt
c2VsZWN0ZWQtdGV4dC1yYW5nZS5odG1sCi1hY2Nlc3NpYmlsaXR5L3RoLWFzLXRpdGxlLXVpLmh0
bWwKLWFjY2Vzc2liaWxpdHkvdHJhbnNmb3JtZWQtZWxlbWVudC5odG1sCi1hY2Nlc3NpYmlsaXR5
L3Zpc2libGUtZWxlbWVudHMuaHRtbAorI2FjY2Vzc2liaWxpdHkvYXJpYS1sYWJlbGxlZGJ5LXN0
YXktd2l0aGluLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L2FyaWEtbGluay1zdXBwb3J0cy1wcmVzcy5o
dG1sCisjYWNjZXNzaWJpbGl0eS9idXR0b24tcHJlc3MtYWN0aW9uLmh0bWwKKyNhY2Nlc3NpYmls
aXR5L2NhbnZhcy5odG1sCisjYWNjZXNzaWJpbGl0eS9pZnJhbWUtYmFzdGFyZGl6YXRpb24uaHRt
bAorI2FjY2Vzc2liaWxpdHkvaWdub3JlLXNwYWNlci1lbGVtZW50cy5odG1sCisjYWNjZXNzaWJp
bGl0eS9pbWctYXJpYS1idXR0b24tYWx0LXRhZy5odG1sCisjYWNjZXNzaWJpbGl0eS9pbnB1dC1p
bWFnZS1hbHQuaHRtbAorI2FjY2Vzc2liaWxpdHkvb25jbGljay1oYW5kbGVycy5odG1sCisjYWNj
ZXNzaWJpbGl0eS9ub2NoaWxkcmVuLWVsZW1lbnRzLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3BsYWNl
aG9sZGVyLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVja2JveC1zaXplLmh0
bWwKKyNhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi10aXRsZS1sYWJlbC5odG1sCisjYWNjZXNz
aWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxlLXVpLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3Rh
YmxlLW1vZGlmaWNhdGlvbi1jcmFzaC5odG1sCisjYWNjZXNzaWJpbGl0eS90YWJsZS1ub2ZpcnN0
Ym9keS5odG1sCisjYWNjZXNzaWJpbGl0eS90YWJsZS1ub3Rib2R5Lmh0bWwKKyNhY2Nlc3NpYmls
aXR5L3RleHRhcmVhLWluc2VydGlvbi1wb2ludC1saW5lLW51bWJlci5odG1sCisjYWNjZXNzaWJp
bGl0eS90ZXh0YXJlYS1saW5lLWZvci1pbmRleC5odG1sCisjYWNjZXNzaWJpbGl0eS90ZXh0YXJl
YS1zZWxlY3RlZC10ZXh0LXJhbmdlLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3RoLWFzLXRpdGxlLXVp
Lmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3RyYW5zZm9ybWVkLWVsZW1lbnQuaHRtbAorI2FjY2Vzc2li
aWxpdHkvdmlzaWJsZS1lbGVtZW50cy5odG1sCiAjICAgVGVzdHMgZ2VuZXJhdGluZyBuZXcgcmVz
dWx0cwotYWNjZXNzaWJpbGl0eS9hcmlhLWRlc2NyaWJlZGJ5LW9uLWlucHV0Lmh0bWwKLWFjY2Vz
c2liaWxpdHkvYXJpYS1sYWJlbGxlZGJ5LW9uLWlucHV0Lmh0bWwKLWFjY2Vzc2liaWxpdHkvYXJp
YS1yb2xlcy5odG1sCi1hY2Nlc3NpYmlsaXR5L2FyaWEtdGFibGVzLmh0bWwKLWFjY2Vzc2liaWxp
dHkvaW1hZ2UtbWFwMS5odG1sCi1hY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcDIuaHRtbAotYWNjZXNz
aWJpbGl0eS9pbnRlcm5hbC1saW5rLWFuY2hvcnMyLmh0bWwKLWFjY2Vzc2liaWxpdHkvbGVnZW5k
Lmh0bWwKLWFjY2Vzc2liaWxpdHkvbGlzdHMuaHRtbAotYWNjZXNzaWJpbGl0eS9wbHVnaW4uaHRt
bAotYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tZ3JvdXAtbWVtYmVycy5odG1sCi1hY2Nlc3Np
YmlsaXR5L3RhYmxlLWF0dHJpYnV0ZXMuaHRtbAotYWNjZXNzaWJpbGl0eS90YWJsZS1jZWxsLXNw
YW5zLmh0bWwKLWFjY2Vzc2liaWxpdHkvdGFibGUtY2VsbHMuaHRtbAotYWNjZXNzaWJpbGl0eS90
YWJsZS1kZXRlY3Rpb24uaHRtbAotYWNjZXNzaWJpbGl0eS90YWJsZS1vbmUtY2VsbC5odG1sCi1h
Y2Nlc3NpYmlsaXR5L3RhYmxlLXNlY3Rpb25zLmh0bWwKLWFjY2Vzc2liaWxpdHkvdGFibGUtd2l0
aC1hcmlhLXJvbGUuaHRtbAotYWNjZXNzaWJpbGl0eS90YWJsZS13aXRoLXJ1bGVzLmh0bWwKKyNh
Y2Nlc3NpYmlsaXR5L2FyaWEtZGVzY3JpYmVkYnktb24taW5wdXQuaHRtbAorI2FjY2Vzc2liaWxp
dHkvYXJpYS1sYWJlbGxlZGJ5LW9uLWlucHV0Lmh0bWwKKyNhY2Nlc3NpYmlsaXR5L2FyaWEtcm9s
ZXMuaHRtbAorI2FjY2Vzc2liaWxpdHkvYXJpYS10YWJsZXMuaHRtbAorI2FjY2Vzc2liaWxpdHkv
aW1hZ2UtbWFwMS5odG1sCisjYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAyLmh0bWwKKyNhY2Nlc3Np
YmlsaXR5L2ludGVybmFsLWxpbmstYW5jaG9yczIuaHRtbAorI2FjY2Vzc2liaWxpdHkvbGVnZW5k
Lmh0bWwKKyNhY2Nlc3NpYmlsaXR5L2xpc3RzLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3BsdWdpbi5o
dG1sCisjYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24tZ3JvdXAtbWVtYmVycy5odG1sCisjYWNj
ZXNzaWJpbGl0eS90YWJsZS1hdHRyaWJ1dGVzLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3RhYmxlLWNl
bGwtc3BhbnMuaHRtbAorI2FjY2Vzc2liaWxpdHkvdGFibGUtY2VsbHMuaHRtbAorI2FjY2Vzc2li
aWxpdHkvdGFibGUtZGV0ZWN0aW9uLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3RhYmxlLW9uZS1jZWxs
Lmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3RhYmxlLXNlY3Rpb25zLmh0bWwKKyNhY2Nlc3NpYmlsaXR5
L3RhYmxlLXdpdGgtYXJpYS1yb2xlLmh0bWwKKyNhY2Nlc3NpYmlsaXR5L3RhYmxlLXdpdGgtcnVs
ZXMuaHRtbAogCiAjIFRlc3RzIGluIGFuaW1hdGlvbnMvIGRpcmVjdG9yeQogIyAgIFRlc3RzIGdl
bmVyYXRpbmcgbmV3IHJlc3VsdHMKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKaW5kZXggYzc4MzIzZS4uNDg0OTRjMyAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
UmV0YWluUHRyLmg+CiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogLy8gU3RhdGljIEZ1bmN0aW9u
cwogCiBzdGF0aWMgaW5saW5lIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHRvQVhFbGVtZW50KEpT
T2JqZWN0UmVmIG9iamVjdCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaAppbmRleCAwNGQ1ZDk3Li40MDhiOTNkIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKKysr
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCkBA
IC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRfaAogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC00
Myw2ICs0NCw5IEBAIHR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0KiBQbGF0Zm9ybVVJRWxlbWVu
dDsKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogCiB0eXBlZGVmIENPTVB0cjxJQWNjZXNz
aWJsZT4gUGxhdGZvcm1VSUVsZW1lbnQ7CisjZWxpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8
YXRrL2F0ay5oPgordHlwZWRlZiBBdGtPYmplY3QqIFBsYXRmb3JtVUlFbGVtZW50OwogI2Vsc2UK
IHR5cGVkZWYgdm9pZCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5j
cHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjBjNTMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJHdGsuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorCisj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJU
cmVlLmgiCisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KKworQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKCkKK3sKK30KKworQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCit7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKK3sKKyAgICByZXR1cm4g
MDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cm9vdEVsZW1lbnQoKQoreworLy8gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9
IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVChtYWluRnJhbWUpKTsKKyAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChheE9iamVjdCk7Cit9CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5j
cHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhZDEyMQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50R3RrLmNwcApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKworI2luY2x1ZGUgPGF0ay9hdGsu
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKKyAgICA6IG1fZWxl
bWVudChlbGVtZW50KQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQorICAgIDog
bV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKK3sKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+JikKK3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXREb2N1bWVudExp
bmtzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpCit7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+JiBjaGlsZHJlbikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50VmVjdG9yLCB1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworaW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnQoKQoreworICAgIGdfYXNzZXJ0KG1fZWxlbWVu
dCk7CisgICAgcmV0dXJuIGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihBVEtf
T0JKRUNUKG1fZWxlbWVudCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICByZXR1
cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQorewor
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1l
bnRzKCkKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9j
dW1lbnRMaW5rcygpCit7CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGl0bGVVSUVsZW1lbnQoKQoreworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQoreworICAg
IGdfYXNzZXJ0KG1fZWxlbWVudCk7CisgICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAgYXRrX29iamVj
dF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICByZXR1cm4gcGFyZW50
ID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChwYXJlbnQpIDogMDsKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQoreworICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQor
eworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKK3sKKyAgICBBdGtSb2xl
IHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAg
ICBpZiAoIXJvbGUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0a19y
b2xlX2dldF9uYW1lKHJvbGUpKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dGl0bGUoKQoreworICAgIGNvbnN0IGdjaGFyKiBuYW1lID0gYXRrX29iamVjdF9nZXRf
bmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgaWYgKCFuYW1lKQorICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKTsKK30KKworSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24oKQoreworICAgIGNvbnN0IGdjaGFyKiBk
ZXNjcmlwdGlvbiA9IGF0a19vYmplY3RfZ2V0X2Rlc2NyaXB0aW9uKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSk7CisKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhkZXNjcmlwdGlvbik7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp4KCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3Bv
c2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBBVEtfWFlfU0NSRUVOKTsK
KworICAgIHJldHVybiB4OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSgp
Cit7CisgICAgaW50IHgsIHk7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtf
Q09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CisKKyAgICByZXR1
cm4geTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKK3sKKyAg
ICBpbnQgd2lkdGgsIGhlaWdodDsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NP
TVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgcmV0dXJuIHdpZHRo
OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KCkKK3sKKyAgICBp
bnQgd2lkdGgsIGhlaWdodDsKKworICAgIGF0a19jb21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBP
TkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQpOworCisgICAgcmV0dXJuIGhlaWdodDsK
K30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKCkKK3sKKyAgICBy
ZXR1cm4gMC4wZjsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVl
KCkKK3sKKyAgICByZXR1cm4gMC4wZjsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om1heFZhbHVlKCkKK3sKKyAgICByZXR1cm4gMC4wZjsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzdXBwb3J0c1ByZXNzQWN0aW9uKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1i
ZXIoKQoreworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKK3sKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCit7CisgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQoreworICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKK3sKKyAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKK3sKKyAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKK3sKKyAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworaW50IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQoreworICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKCkKK3sKKyAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworaW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQpCit7CisgICAgcmV0dXJuIDA7Cit9
CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKHVu
c2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1
bW4sIHVuc2lnbmVkIHJvdykKK3sKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQoreworICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgpCit7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggMWFiYmEzOC4uNzQ5YmQzNyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKIAorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNs
dWRlICJXb3JrUXVldWVJdGVtLmgiCkBAIC02NSw2ICs2Niw3IEBAIHN0YXRpYyBib29sIHByaW50
U2VwYXJhdG9yczsKIHN0YXRpYyBpbnQgZHVtcFBpeGVsczsKIHN0YXRpYyBpbnQgZHVtcFRyZWUg
PSAxOwogCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIg
PSAwOwogTGF5b3V0VGVzdENvbnRyb2xsZXIqIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IDA7CiBz
dGF0aWMgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWUg
PSAwOwpAQCAtNDMyLDcgKzQzNCwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3V2luZG93T2JqZWN0
Q2xlYXJlZChXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbQogICAgIGFz
c2VydChnTGF5b3V0VGVzdENvbnRyb2xsZXIpOwogCiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0g
ICAgYXNzZXJ0KCFleGNlcHRpb24pOworICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKworICAgIGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgJmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24pOwogfQogCiBzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0NvbnNvbGVNZXNzYWdlKFdlYktpdFdlYlZpZXcqIHZpZXcsIGNvbnN0
IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgZ2NoYXIqIHNvdXJjZUlk
LCBncG9pbnRlciBkYXRhKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0g
Yi9XZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbQppbmRleCA0ODQyNGQwLi5lNGJmNTEwIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJLaXRUb29scy9HTlVt
YWtlZmlsZS5hbQpAQCAtNDAsNyArNDAsOSBAQCBkdW1wcmVuZGVydHJlZV9jcHBmbGFncyA6PSBc
CiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DUFBGTEFHUyA9ICQoZHVtcHJlbmRlcnRyZWVfY3Bw
ZmxhZ3MpCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCisJV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIFwKIAlXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIFwKKwlXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCBcCiAJV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIFwKIAlXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oIFwKIAlXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZVByZWZpeC5oIFwKQEAgLTU0LDYgKzU2LDggQEAgUHJv
Z3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9Xb3JrUXVldWUuaCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVl
SXRlbS5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jb25maWcuaCBcCisJV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcCBc
CisJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRH
dGsuY3BwIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUu
Y3BwIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWVHdGsu
aCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0dDQ29udHJvbGxlckd0ay5jcHAg
XApAQCAtNzUsNiArNzksNyBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9DRkxBR1MgPSBcCiAJ
JChMSUJTT1VQX0NGTEFHUykKIAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfTERBREQgPSBcCisJ
bGliSmF2YVNjcmlwdENvcmUubGEgXAogCWxpYndlYmtpdC0xLjAubGEgXAogCSQoR0xPQkFMREVQ
U19MSUJTKSBcCiAJJChDQUlST19MSUJTKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31041</attachid>
            <date>2009-06-08 01:29:32 -0700</date>
            <delta_ts>2009-06-09 08:53:06 -0700</delta_ts>
            <desc>Add Accessibility support to GTK DRT</desc>
            <filename>ax-drt-basic.patch</filename>
            <type>text/plain</type>
            <size>26547</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4NWNjOTdmLi40ODNjYzY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDYt
MDggIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRW5hYmxlIGFjY2Vz
c2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBSZW1vdmUgcGFzc2luZyBhY2Nlc3NpYmlsaXR5
IHRlc3RzIGZyb20gdGhlIFNraXBwZWQgbGlzdAorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQ6CisKIDIwMDktMDYtMDYgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRl
eCAzM2I3YWY2Li41NGZhMWRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNjYsMTgg
KzY2LDExIEBAIGFjY2Vzc2liaWxpdHkvYXJpYS1sYWJlbGxlZGJ5LXN0YXktd2l0aGluLmh0bWwK
IGFjY2Vzc2liaWxpdHkvYXJpYS1saW5rLXN1cHBvcnRzLXByZXNzLmh0bWwKIGFjY2Vzc2liaWxp
dHkvYnV0dG9uLXByZXNzLWFjdGlvbi5odG1sCiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy5odG1sCi1h
Y2Nlc3NpYmlsaXR5L2lmcmFtZS1iYXN0YXJkaXphdGlvbi5odG1sCi1hY2Nlc3NpYmlsaXR5L2ln
bm9yZS1zcGFjZXItZWxlbWVudHMuaHRtbAogYWNjZXNzaWJpbGl0eS9pbWctYXJpYS1idXR0b24t
YWx0LXRhZy5odG1sCiBhY2Nlc3NpYmlsaXR5L2lucHV0LWltYWdlLWFsdC5odG1sCiBhY2Nlc3Np
YmlsaXR5L29uY2xpY2staGFuZGxlcnMuaHRtbAotYWNjZXNzaWJpbGl0eS9ub2NoaWxkcmVuLWVs
ZW1lbnRzLmh0bWwKIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAotYWNjZXNzaWJpbGl0
eS9yYWRpby1idXR0b24tY2hlY2tib3gtc2l6ZS5odG1sCiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1
dHRvbi10aXRsZS1sYWJlbC5odG1sCi1hY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0
bGUtdWkuaHRtbAotYWNjZXNzaWJpbGl0eS90YWJsZS1tb2RpZmljYXRpb24tY3Jhc2guaHRtbAot
YWNjZXNzaWJpbGl0eS90YWJsZS1ub2ZpcnN0Ym9keS5odG1sCiBhY2Nlc3NpYmlsaXR5L3RhYmxl
LW5vdGJvZHkuaHRtbAogYWNjZXNzaWJpbGl0eS90ZXh0YXJlYS1pbnNlcnRpb24tcG9pbnQtbGlu
ZS1udW1iZXIuaHRtbAogYWNjZXNzaWJpbGl0eS90ZXh0YXJlYS1saW5lLWZvci1pbmRleC5odG1s
CkBAIC05NCw3ICs4Nyw2IEBAIGFjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwMS5odG1sCiBhY2Nlc3Np
YmlsaXR5L2ltYWdlLW1hcDIuaHRtbAogYWNjZXNzaWJpbGl0eS9pbnRlcm5hbC1saW5rLWFuY2hv
cnMyLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0bWwKLWFjY2Vzc2liaWxpdHkvbGlzdHMu
aHRtbAogYWNjZXNzaWJpbGl0eS9wbHVnaW4uaHRtbAogYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0
b24tZ3JvdXAtbWVtYmVycy5odG1sCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWF0dHJpYnV0ZXMuaHRt
bApAQCAtMTA1LDYgKzk3LDExIEBAIGFjY2Vzc2liaWxpdHkvdGFibGUtb25lLWNlbGwuaHRtbAog
YWNjZXNzaWJpbGl0eS90YWJsZS1zZWN0aW9ucy5odG1sCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLXdp
dGgtYXJpYS1yb2xlLmh0bWwKIGFjY2Vzc2liaWxpdHkvdGFibGUtd2l0aC1ydWxlcy5odG1sCisj
ICAgIFRlc3RzIHRoYXQgY3Jhc2hlcworYWNjZXNzaWJpbGl0eS9pZnJhbWUtYmFzdGFyZGl6YXRp
b24uaHRtbAorYWNjZXNzaWJpbGl0eS9pZ25vcmUtc3BhY2VyLWVsZW1lbnRzLmh0bWwKK2FjY2Vz
c2liaWxpdHkvbGlzdHMuaHRtbAorYWNjZXNzaWJpbGl0eS9zZWN1cmUtdGV4dGZpZWxkLXRpdGxl
LXVpLmh0bWwKIAogIyBUZXN0cyBpbiBhbmltYXRpb25zLyBkaXJlY3RvcnkKICMgICBUZXN0cyBn
ZW5lcmF0aW5nIG5ldyByZXN1bHRzCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJjZjVlODYuLmQ5MTdkZWIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MDktMDYtMDggIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRW5hYmxl
IGFjY2Vzc2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBBZGQgU1BJIHRvIGdldCB0aGUgZm9j
dXNlZCBhY2Nlc3NpYmxlIGVsZW1lbnQgdG8gYmUgdXNlZCBieSBEUlQuCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisgICAg
ICAgICh3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oOgorCiAyMDA5
LTA2LTA3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggMTQxZDU2MS4uN2Rk
NTQzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCiAgKgogICogUG9ydGlvbnMg
ZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dzOgogICoKQEAgLTExODYsNCAr
MTE4NywxOCBAQCB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2RldGFjaChXZWJLaXRBY2Nlc3NpYmxl
KiBhY2Nlc3NpYmxlKQogICAgIGFjY2Vzc2libGUtPm1fb2JqZWN0ID0gZmFsbGJhY2tPYmplY3Qo
KTsKIH0KIAorQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50
KFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCit7CisgICAgaWYgKCFhY2Nlc3NpYmxlLT5t
X29iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogdXBkYXRlIHRoZSBi
YWNraW5nIHN0b3JlIG9uY2Ugd2UgaGF2ZSBvbmUuCisKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gZm9jdXNlZE9iaiA9IGFjY2Vzc2libGUtPm1fb2JqZWN0LT5mb2N1c2VkVUlFbGVt
ZW50KCk7CisgICAgaWYgKCFmb2N1c2VkT2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBmb2N1c2VkT2JqLT53cmFwcGVyKCk7Cit9CisKICNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lC
SUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQXRrLmggYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKaW5kZXggZWNmYjk5ZS4uMGIzMWI4MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5oCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJBdGsuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVh
bnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTU3LDYgKzU4LDggQEAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogd2Vi
a2l0X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0IChXZWJLaXQKIAogdm9pZCB3
ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2ggKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpOwog
CitBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQoV2ViS2l0
QWNjZXNzaWJsZSogYWNjZXNzaWJsZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvLyBBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0a19oCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGEyNmNkYTYuLjM2MmM5ZjEgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDktMDYtMDggIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpv
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW0d0a10gRW5hYmxlIGFjY2Vzc2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBBZGQg
U1BJIHRvIGdldCB0aGUgZm9jdXNlZCBhY2Nlc3NpYmxlIGVsZW1lbnQgdG8gYmUgdXNlZCBieSBE
UlQuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXR3ZWJmcmFtZS5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX2dldF9mb2N1
c2VkX2FjY2Vzc2libGVfZWxlbWVudCk6CisKIDIwMDktMDYtMDYgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6Lgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDViNzU1MzcuLjA0NjNlZWEgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAorI2luY2x1ZGUgPGF0
ay9hdGsuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAK
QEAgLTIxNSw2ICsyMTYsOSBAQCBleHRlcm4gIkMiIHsKICAgICBXRUJLSVRfQVBJIHVuc2lnbmVk
IGludAogICAgIHdlYmtpdF93ZWJfZnJhbWVfbnVtYmVyX29mX2FjdGl2ZV9hbmltYXRpb25zKFdl
YktpdFdlYkZyYW1lKiBmcmFtZSk7CiAKKyAgICBXRUJLSVRfQVBJIEF0a09iamVjdCoKKyAgICB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9mb2N1c2VkX2FjY2Vzc2libGVfZWxlbWVudChXZWJLaXRXZWJG
cmFtZSogZnJhbWUpOworCiAgICAgV0VCS0lUX0FQSSBnY2hhcioKICAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NlbGVjdGVkX3RleHQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCmluZGV4IDkwMDEyMTIuLmYxMGY1YjcgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAorKysgYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJ3
ZWJraXRtYXJzaGFsLmgiCiAjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgogCisjaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaCIKICNpbmNsdWRlICJBbmltYXRpb25Db250
cm9sbGVyLmgiCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CkBAIC01MCw2ICs1Miw3IEBACiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogCiAvKioKQEAgLTgyOCwzICs4MzEsMzEgQEAgV2Vi
S2l0TG9hZFN0YXR1cyB3ZWJraXRfd2ViX2ZyYW1lX2dldF9sb2FkX3N0YXR1cyhXZWJLaXRXZWJG
cmFtZSogZnJhbWUpCiAgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBwcml2ID0gZnJhbWUtPnBy
aXY7CiAgICAgcmV0dXJuIHByaXYtPmxvYWRTdGF0dXM7CiB9CisKK0F0a09iamVjdCogd2Via2l0
X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQoV2ViS2l0V2ViRnJhbWUq
IGZyYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUo
ZnJhbWUpLCBOVUxMKTsKKworI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKKyAgICBpZiAoIUFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgIEFYT2JqZWN0Q2FjaGU6
OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJp
diA9IGZyYW1lLT5wcml2OworICAgIGlmICghcHJpdi0+Y29yZUZyYW1lIHx8ICFwcml2LT5jb3Jl
RnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUmVuZGVyVmll
dyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcgKj4ocHJpdi0+Y29yZUZyYW1lLT5kb2N1
bWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybiBOVUxM
OworCisgICAgQXRrT2JqZWN0KiB3cmFwcGVyID0gIHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyb290KS0+d3JhcHBlcigpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gd2Via2l0X2Fj
Y2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXRUJLSVRfQUNDRVNTSUJMRSh3cmFwcGVyKSk7
CisKKyNlbHNlCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI2MmI0NTQu
LjA3YTE0Y2IgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBAQAorMjAwOS0wNi0wOCAgSmFuIE1pY2hhZWwg
QWxvbnpvICA8am1hbG9uem9Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbR3RrXSBFbmFibGUgYWNjZXNzaWJpbGl0eSBpbiBHdGsg
RFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTk4
OQorCisgICAgICAgIEFkZCBBY2Nlc3NpYmlsaXR5IHN1cHBvcnQgdG8gdGhlIEdUSyBEUlQuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcDogQWRk
ZWQuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVs
ZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5j
cHA6IEFkZGVkLgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJp
bGl0eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRMaW5r
ZWRVSUVsZW1lbnRzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldERvY3Vt
ZW50TGlua3MpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4p
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2Up
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludCk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cm9sZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp0aXRsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbik6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnkpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lk
dGgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om1pblZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Om1heFZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1cHBvcnRzUHJl
c3NBY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9p
bnRMaW5lTnVtYmVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNvbHVtbkhlYWRlcnMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mUm93SGVhZGVycyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZDb2x1bW5zKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZlJvd3MpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mVmlzaWJsZUNlbGxzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZkhlYWRlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRl
eEluVGFibGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5n
ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleCk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2d0ay9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgICh3ZWJWaWV3V2luZG93T2JqZWN0Q2xl
YXJlZCk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMDktMDYtMDcgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBDYW1lcm9u
IFp3YXJpY2guCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuY3BwCmluZGV4IGM3ODMyM2UuLjQ4NDk0YzMgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCisrKyBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCkBA
IC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
PgogCisjaW5jbHVkZSA8bGltaXRzLmg+CisKIC8vIFN0YXRpYyBGdW5jdGlvbnMKIAogc3RhdGlj
IGlubGluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiB0b0FYRWxlbWVudChKU09iamVjdFJlZiBv
YmplY3QpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmgKaW5kZXggMDRkNWQ5Ny4uNDA4YjkzZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMjcsNiArMjcs
NyBAQAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDMsNiArNDQsOSBA
QCB0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjaW5jbHVk
ZSA8V2ViQ29yZS9DT01QdHIuaD4KIAogdHlwZWRlZiBDT01QdHI8SUFjY2Vzc2libGU+IFBsYXRm
b3JtVUlFbGVtZW50OworI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGF0ay9hdGsuaD4K
K3R5cGVkZWYgQXRrT2JqZWN0KiBQbGF0Zm9ybVVJRWxlbWVudDsKICNlbHNlCiB0eXBlZGVmIHZv
aWQqIFBsYXRmb3JtVUlFbGVtZW50OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q4NWMzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyR3RrLmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEph
biBNaWNoYWVsIEFsb256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorCisj
aW5jbHVkZSA8YXRrL2F0ay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0Lmg+CisKK2V4dGVybiAiQyIgeworZXh0ZXJuIEF0a09iamVjdCogd2Via2l0X3dl
Yl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQoV2ViS2l0V2ViRnJhbWUqKTsK
K30KKworQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkK
K3sKK30KKworQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cigpCit7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OmZvY3VzZWRFbGVtZW50KCkKK3sKKyAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgd2Vi
a2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQobWFpbkZyYW1lKTsK
KyAgICBpZiAoIWFjY2Vzc2libGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKKyAgICBBdGtPYmplY3QqIGF4T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShH
VEtfV0lER0VUKHZpZXcpKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChheE9i
amVjdCk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzE2NWFlNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcApAQCAtMCwwICsxLDM1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1Jl
Zi5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKKyAgICA6IG1fZWxl
bWVudChlbGVtZW50KQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQorICAgIDog
bV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKK3sKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+JiBlbGVtZW50cykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5rcyhWZWN0b3I8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4mKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4mIGNoaWxkcmVuKQoreworICAgIGludCBjb3VudCA9IGNoaWxkcmVuQ291bnQoKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0KiBj
aGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1l
bnQpLCBpKTsKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
Y2hpbGQpKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hp
bGRyZW5XaXRoUmFuZ2UoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50VmVj
dG9yLCB1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IGxvY2F0aW9uOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0
KiBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQpLCBpKTsKKyAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudChjaGlsZCkpOworICAgIH0KK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNoaWxkcmVuQ291bnQoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgcmV0dXJu
IGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihBVEtfT0JKRUNUKG1fZWxlbWVu
dCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmVsZW1lbnRBdFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBjaGlsZHJlbjsKKyAgICBnZXRDaGlsZHJlbldpdGhS
YW5nZShjaGlsZHJlbiwgaW5kZXgsIDEpOworCisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAx
KQorICAgICAgICByZXR1cm4gY2hpbGRyZW4uYXQoMCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlu
a3MoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQoreworICAgIGdfYXNzZXJ0KG1fZWxl
bWVudCk7CisgICAgQXRrT2JqZWN0KiBwYXJlbnQgPSAgYXRrX29iamVjdF9nZXRfcGFyZW50KEFU
S19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICByZXR1cm4gcGFyZW50ID8gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudChwYXJlbnQpIDogMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwor
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0
ZU5hbWVzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvbGUoKQoreworICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0
X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlmICghcm9sZSkKKyAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXRrX3JvbGVfZ2V0X25hbWUocm9sZSkpOwor
fQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCit7CisgICAg
Y29uc3QgZ2NoYXIqIG5hbWUgPSBhdGtfb2JqZWN0X2dldF9uYW1lKEFUS19PQkpFQ1QobV9lbGVt
ZW50KSk7CisKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKG5hbWUpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
ZXNjcmlwdGlvbigpCit7CisgICAgY29uc3QgZ2NoYXIqIGRlc2NyaXB0aW9uID0gYXRrX29iamVj
dF9nZXRfZGVzY3JpcHRpb24oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlmICghZGVz
Y3JpcHRpb24pCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRlc2NyaXB0
aW9uKTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngoKQoreworICAgIGlu
dCB4LCB5OworCisgICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVCht
X2VsZW1lbnQpLCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOworCisgICAgcmV0dXJuIHg7Cit9CisK
K2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKK3sKKyAgICBpbnQgeCwgeTsKKwor
ICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwg
JngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKKworICAgIHJldHVybiB5OworfQorCitkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGgoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0Owor
CisgICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3
aWR0aCwgJmhlaWdodCk7CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK2RvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpoZWlnaHQoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0OworCisg
ICAgYXRrX2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0
aCwgJmhlaWdodCk7CisKKyAgICByZXR1cm4gaGVpZ2h0OworfQorCitkb3VibGUgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgeyB7
IDAgfSB9IH07CisKKyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gMC4wZjsKKworICAgIGF0a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUo
bV9lbGVtZW50KSwgJnZhbHVlKTsKKyAgICByZXR1cm4gZ192YWx1ZV9nZXRfZG91YmxlKCZ2YWx1
ZSk7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSgpCit7Cisg
ICAgR1ZhbHVlIHZhbHVlID0geyAwLCB7IHsgMCB9IH0gfTsKKworICAgIGlmICghQVRLX0lTX1ZB
TFVFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVlX2dl
dF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworICAgIHJldHVy
biBnX3ZhbHVlX2dldF9kb3VibGUoJnZhbHVlKTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om1heFZhbHVlKCkKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIHsgeyAwIH0g
fSB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJu
IDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X21heGltdW1fdmFsdWUoQVRLX1ZBTFVFKG1fZWxl
bWVudCksICZ2YWx1ZSk7CisgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2RvdWJsZSgmdmFsdWUpOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1cHBvcnRzUHJlc3NBY3Rpb24oKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZSb3dIZWFkZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mUm93cygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mSGVhZGVyKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmRleEluVGFibGUoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5k
ZXhSYW5nZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisK
K2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXgoaW50KQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBj
b2x1bW4sIHVuc2lnbmVkIHJvdykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVk
VGV4dFJhbmdlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK0pTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0
ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNBdHRyaWJ1dGVTZXR0YWJsZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKworCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCAxYWJiYTM4Li43
NDliZDM3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJl
bmRlclRyZWUuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJEdW1wUmVuZGVyVHJlZS5oIgogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldvcmtR
dWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKQEAgLTY1LDYgKzY2LDcgQEAgc3Rh
dGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwogc3RhdGljIGludCBkdW1wUGl4ZWxzOwogc3RhdGlj
IGludCBkdW1wVHJlZSA9IDE7CiAKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlciA9IDA7CiBMYXlvdXRUZXN0Q29udHJvbGxlciogZ0xheW91dFRlc3RDb250
cm9sbGVyID0gMDsKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwogV2ViS2l0V2ViRnJh
bWUqIG1haW5GcmFtZSA9IDA7CkBAIC00MzIsNyArNDM0LDEwIEBAIHN0YXRpYyB2b2lkIHdlYlZp
ZXdXaW5kb3dPYmplY3RDbGVhcmVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1l
KiBmcmFtCiAgICAgYXNzZXJ0KGdMYXlvdXRUZXN0Q29udHJvbGxlcik7CiAKICAgICBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAm
ZXhjZXB0aW9uKTsKLSAgICBhc3NlcnQoIWV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRp
b24pOworCisgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29u
dGV4dCwgd2luZG93T2JqZWN0LCAmZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7
CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Q29uc29sZU1lc3NhZ2UoV2ViS2l0V2ViVmll
dyogdmlldywgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBn
Y2hhciogc291cmNlSWQsIGdwb2ludGVyIGRhdGEpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9H
TlVtYWtlZmlsZS5hbSBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQ4NDI0ZDAu
LmU0YmY1MTAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC00MCw3ICs0MCw5IEBAIGR1bXByZW5kZXJ0cmVl
X2NwcGZsYWdzIDo9IFwKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NQUEZMQUdTID0gJChkdW1w
cmVuZGVydHJlZV9jcHBmbGFncykKIAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9
IFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5j
cHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmggXAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmggXAogCVdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlUHJlZml4LmggXApAQCAtNTQs
NiArNTYsOCBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAogCVdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9Xb3JrUXVldWVJdGVtLmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NvbmZp
Zy5oIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJHdGsuY3BwIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEd0ay5jcHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9E
dW1wUmVuZGVyVHJlZS5jcHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZUd0ay5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvR0NDb250
cm9sbGVyR3RrLmNwcCBcCkBAIC03NSw2ICs3OSw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVl
X0NGTEFHUyA9IFwKIAkkKExJQlNPVVBfQ0ZMQUdTKQogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJl
ZV9MREFERCA9IFwKKwlsaWJKYXZhU2NyaXB0Q29yZS5sYSBcCiAJbGlid2Via2l0LTEuMC5sYSBc
CiAJJChHTE9CQUxERVBTX0xJQlMpIFwKIAkkKENBSVJPX0xJQlMpIFwK
</data>
<flag name="review"
          id="15803"
          type_id="1"
          status="-"
          setter="xan.lopez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31098</attachid>
            <date>2009-06-09 08:53:06 -0700</date>
            <delta_ts>2009-08-06 22:33:31 -0700</delta_ts>
            <desc>Updated patch based on xan&apos;s feedback</desc>
            <filename>ax-drt-basic.patch</filename>
            <type>text/plain</type>
            <size>26388</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MzYxM2FiLi44YjA2Zjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDYt
MDkgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRW5hYmxlIGFjY2Vz
c2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBSZW1vdmUgcGFzc2luZyBhY2Nlc3NpYmlsaXR5
IHRlc3RzIGZyb20gdGhlIFNraXBwZWQgbGlzdAorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQ6CisKIDIwMDktMDYtMDkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2d0ay9Ta2lwcGVkCmluZGV4IGEyYmQ5NWYuLjZjZTNjZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCkBAIC03MSwxMyArNzEsOSBAQCBhY2Nlc3NpYmlsaXR5L2lnbm9yZS1zcGFjZXItZWxl
bWVudHMuaHRtbAogYWNjZXNzaWJpbGl0eS9pbWctYXJpYS1idXR0b24tYWx0LXRhZy5odG1sCiBh
Y2Nlc3NpYmlsaXR5L2lucHV0LWltYWdlLWFsdC5odG1sCiBhY2Nlc3NpYmlsaXR5L29uY2xpY2st
aGFuZGxlcnMuaHRtbAotYWNjZXNzaWJpbGl0eS9ub2NoaWxkcmVuLWVsZW1lbnRzLmh0bWwKIGFj
Y2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAotYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24t
Y2hlY2tib3gtc2l6ZS5odG1sCiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi10aXRsZS1sYWJl
bC5odG1sCiBhY2Nlc3NpYmlsaXR5L3NlY3VyZS10ZXh0ZmllbGQtdGl0bGUtdWkuaHRtbAotYWNj
ZXNzaWJpbGl0eS90YWJsZS1tb2RpZmljYXRpb24tY3Jhc2guaHRtbAotYWNjZXNzaWJpbGl0eS90
YWJsZS1ub2ZpcnN0Ym9keS5odG1sCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLW5vdGJvZHkuaHRtbAog
YWNjZXNzaWJpbGl0eS90ZXh0YXJlYS1pbnNlcnRpb24tcG9pbnQtbGluZS1udW1iZXIuaHRtbAog
YWNjZXNzaWJpbGl0eS90ZXh0YXJlYS1saW5lLWZvci1pbmRleC5odG1sCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE3ZDMyMzIuLjdmNGUx
MjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDYtMDkgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxv
bnpvQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW0d0a10gRW5hYmxlIGFjY2Vzc2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBB
ZGQgU1BJIHRvIGdldCB0aGUgZm9jdXNlZCBhY2Nlc3NpYmxlIGVsZW1lbnQgdG8gYmUgdXNlZCBi
eSBEUlQuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5jcHA6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9l
bGVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5oOgorCiAyMDA5LTA2LTA5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNt
YW5uQG5va2lhLmNvbT4KIAogICAgICAgICBGaXggdGhlIFF0IGJ1aWxkLCB0aGUgdGltZSBmdW5j
dGlvbnMgbW92ZWQgaW50byB0aGUgV1RGIG5hbWVzcGFjZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwIGIvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAK
aW5kZXggMTQxZDU2MS4uN2RkNTQzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKKysrIGIvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKQEAgLTEsNiAr
MSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpv
CiAgKgogICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdodCBhcyBmb2xsb3dz
OgogICoKQEAgLTExODYsNCArMTE4NywxOCBAQCB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2RldGFj
aChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQogICAgIGFjY2Vzc2libGUtPm1fb2JqZWN0
ID0gZmFsbGJhY2tPYmplY3QoKTsKIH0KIAorQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9n
ZXRfZm9jdXNlZF9lbGVtZW50KFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCit7CisgICAg
aWYgKCFhY2Nlc3NpYmxlLT5tX29iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBG
SVhNRTogdXBkYXRlIHRoZSBiYWNraW5nIHN0b3JlIG9uY2Ugd2UgaGF2ZSBvbmUuCisKKyAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gZm9jdXNlZE9iaiA9IGFjY2Vzc2libGUtPm1fb2Jq
ZWN0LT5mb2N1c2VkVUlFbGVtZW50KCk7CisgICAgaWYgKCFmb2N1c2VkT2JqKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBmb2N1c2VkT2JqLT53cmFwcGVyKCk7Cit9CisKICNlbmRp
ZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmggYi9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgKaW5kZXggZWNmYjk5ZS4u
MGIzMWI4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5oCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxv
bnpvCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU3LDYgKzU4LDggQEAgV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2FjY2Vzc2liaWxpdHlfb2JqZWN0
IChXZWJLaXQKIAogdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2ggKFdlYktpdEFjY2Vzc2li
bGUqIGFjY2Vzc2libGUpOwogCitBdGtPYmplY3QqIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1
c2VkX2VsZW1lbnQoV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJsZSk7CisKIEdfRU5EX0RFQ0xT
CiAKICNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0a19oCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGU4ZTc3
NmMuLjRhZWZkYzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDYtMDkgIEphbiBNaWNoYWVs
IEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRW5hYmxlIGFjY2Vzc2liaWxpdHkgaW4gR3Rr
IERSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5
ODkKKworICAgICAgICBBZGQgU1BJIHRvIGdldCB0aGUgZm9jdXNlZCBhY2Nlc3NpYmxlIGVsZW1l
bnQgdG8gYmUgdXNlZCBieSBEUlQuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5o
OgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX2ZyYW1lX2dldF9mb2N1c2VkX2FjY2Vzc2libGVfZWxlbWVudCk6CisKIDIwMDktMDYtMDgg
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgSmFuIEFsb256by4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHBy
aXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCA1Yjc1NTM3
Li4wNDYzZWVhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC01Myw2ICs1Myw3IEBA
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVz
LmgiCiAKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgogCkBAIC0yMTUsNiArMjE2LDkgQEAgZXh0ZXJuICJDIiB7CiAgICAg
V0VCS0lUX0FQSSB1bnNpZ25lZCBpbnQKICAgICB3ZWJraXRfd2ViX2ZyYW1lX251bWJlcl9vZl9h
Y3RpdmVfYW5pbWF0aW9ucyhXZWJLaXRXZWJGcmFtZSogZnJhbWUpOwogCisgICAgV0VCS0lUX0FQ
SSBBdGtPYmplY3QqCisgICAgd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxl
X2VsZW1lbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKwogICAgIFdFQktJVF9BUEkgZ2NoYXIq
CiAgICAgd2Via2l0X3dlYl92aWV3X2dldF9zZWxlY3RlZF90ZXh0IChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldyk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1l
LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCA5MDAxMjEy
Li5mMTBmNWI3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5j
cHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC0zMiw3ICsz
Miw5IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHByaXZh
dGUuaCIKIAorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5j
bHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNTAsNiArNTIsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogCisjaW5jbHVkZSA8YXRr
L2F0ay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KIAogLyoqCkBAIC04
MjgsMyArODMxLDMxIEBAIFdlYktpdExvYWRTdGF0dXMgd2Via2l0X3dlYl9mcmFtZV9nZXRfbG9h
ZF9zdGF0dXMoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQogICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0
ZSogcHJpdiA9IGZyYW1lLT5wcml2OwogICAgIHJldHVybiBwcml2LT5sb2FkU3RhdHVzOwogfQor
CitBdGtPYmplY3QqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNjZXNzaWJsZV9lbGVt
ZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1lKSwgTlVMTCk7CisKKyNpZiBIQVZFKEFDQ0VTU0lCSUxJ
VFkpCisgICAgaWYgKCFBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAg
ICAgICBBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CisKKyAgICBXZWJLaXRX
ZWJGcmFtZVByaXZhdGUqIHByaXYgPSBmcmFtZS0+cHJpdjsKKyAgICBpZiAoIXByaXYtPmNvcmVG
cmFtZSB8fCAhcHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gTlVM
TDsKKworICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3ICo+KHBy
aXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKCFyb290KQor
ICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEF0a09iamVjdCogd3JhcHBlciA9ICBwcml2LT5j
b3JlRnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocm9vdCkt
PndyYXBwZXIoKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBOVUxMOworCisg
ICAgcmV0dXJuIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQoV0VCS0lUX0FD
Q0VTU0lCTEUod3JhcHBlcikpOworCisjZWxzZQorICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9
CisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZwppbmRleCA5NjA0NGMxLi44YTEzYjgzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMDkt
MDYtMDkgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRW5hYmxlIGFj
Y2Vzc2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBBZGQgQWNjZXNzaWJpbGl0eSBzdXBwb3J0
IHRvIHRoZSBHVEsgRFJULgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudC5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpyb290RWxlbWVudCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Z2V0TGlua2VkVUlFbGVtZW50cyk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpnZXREb2N1bWVudExpbmtzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmdldENoaWxkcmVuKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldENoaWxkcmVuV2l0aFJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNoaWxkcmVuQ291bnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVu
dEF0UG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdElu
ZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVt
ZW50cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1
bWVudExpbmtzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVt
ZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5h
bWVzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
eCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmhlaWdodCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdXBwb3J0c1ByZXNzQWN0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcik6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y29sdW1uSW5kZXhSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojps
aW5lRm9ySW5kZXgpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9y
UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFu
ZFJvdyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5n
ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5n
ZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVWYWx1ZSk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAo
d2ViVmlld1dpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisKIDIwMDktMDYtMDkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgKaW5kZXggMDRkNWQ5Ny4uNDA4YjkzZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMjcsNiArMjcsNyBAQAogI2Rl
ZmluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTT2JqZWN0UmVmLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDMsNiArNDQsOSBAQCB0eXBlZGVm
IHN0cnVjdCBvYmpjX29iamVjdCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjaW5jbHVkZSA8V2ViQ29y
ZS9DT01QdHIuaD4KIAogdHlwZWRlZiBDT01QdHI8SUFjY2Vzc2libGU+IFBsYXRmb3JtVUlFbGVt
ZW50OworI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGF0ay9hdGsuaD4KK3R5cGVkZWYg
QXRrT2JqZWN0KiBQbGF0Zm9ybVVJRWxlbWVudDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRm
b3JtVUlFbGVtZW50OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q4NWMzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNw
cApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVs
IEFsb256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorCisjaW5jbHVkZSA8
YXRrL2F0ay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
Lmg+CisKK2V4dGVybiAiQyIgeworZXh0ZXJuIEF0a09iamVjdCogd2Via2l0X3dlYl9mcmFtZV9n
ZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQoV2ViS2l0V2ViRnJhbWUqKTsKK30KKworQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKK3sKK30KKwor
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCit7Cit9
CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3Vz
ZWRFbGVtZW50KCkKK3sKKyAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgd2Via2l0X3dlYl9m
cmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQobWFpbkZyYW1lKTsKKyAgICBpZiAo
IWFjY2Vzc2libGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3
KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBB
dGtPYmplY3QqIGF4T2JqZWN0ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VU
KHZpZXcpKTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChheE9iamVjdCk7Cit9
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudEd0ay5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWFmNzcxOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcApAQCAtMCwwICsxLDM3MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKyNpbmNsdWRlIDxhdGsvYXRrLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorCisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKKyAgICA6IG1fZWxlbWVudChlbGVt
ZW50KQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQorICAgIDogbV9lbGVtZW50
KG90aGVyLm1fZWxlbWVudCkKK3sKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6fkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldExpbmtlZFVJRWxlbWVudHMoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVt
ZW50cykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5rcyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4mKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpnZXRDaGlsZHJlbihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNo
aWxkcmVuKQoreworICAgIGludCBjb3VudCA9IGNoaWxkcmVuQ291bnQoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBpKTsK
KyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsK
KyAgICB9Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRo
UmFuZ2UoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBlbGVtZW50VmVjdG9yLCB1bnNp
Z25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IGxvY2F0aW9uOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgQXRrT2JqZWN0KiBjaGlsZCA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQpLCBp
KTsKKyAgICAgICAgZWxlbWVudFZlY3Rvci5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChj
aGlsZCkpOworICAgIH0KK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVu
Q291bnQoKQoreworICAgIGlmICghbV9lbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEFTU0VSVChBVEtfSVNfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgcmV0dXJuIGF0a19vYmpl
Y3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworfQor
CitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRB
dFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIFZlY3RvcjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50PiBjaGlsZHJlbjsKKyAgICBnZXRDaGlsZHJlbldpdGhSYW5nZShjaGls
ZHJlbiwgaW5kZXgsIDEpOworCisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAg
ICByZXR1cm4gY2hpbGRyZW4uYXQoMCk7CisKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZMaW5rZWRVSUVsZW1lbnRzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3MoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQoreworICAgIEFTU0VSVChtX2VsZW1lbnQpOworICAg
IEF0a09iamVjdCogcGFyZW50ID0gIGF0a19vYmplY3RfZ2V0X3BhcmVudChBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOworCisgICAgcmV0dXJuIHBhcmVudCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
cGFyZW50KSA6IDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZkNoaWxkcmVuKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb2xlKCkKK3sKKyAgICBBdGtSb2xlIHJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKEFUS19P
QkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBpZiAoIXJvbGUpCisgICAgICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGF0a19yb2xlX2dldF9uYW1lKHJvbGUpKTsKK30KKworSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQoreworICAgIGNvbnN0IGdjaGFy
KiBuYW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworCisg
ICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1l
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24o
KQoreworICAgIGNvbnN0IGdjaGFyKiBkZXNjcmlwdGlvbiA9IGF0a19vYmplY3RfZ2V0X2Rlc2Ny
aXB0aW9uKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXNjcmlwdGlvbik7Cit9CisK
K2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4KCkKK3sKKyAgICBpbnQgeCwgeTsKKwor
ICAgIGF0a19jb21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwg
JngsICZ5LCBBVEtfWFlfU0NSRUVOKTsKKworICAgIHJldHVybiB4OworfQorCitkb3VibGUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6eSgpCit7CisgICAgaW50IHgsIHk7CisKKyAgICBhdGtfY29t
cG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ4LCAmeSwgQVRL
X1hZX1NDUkVFTik7CisKKyAgICByZXR1cm4geTsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OndpZHRoKCkKK3sKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKworICAgIGF0a19j
b21wb25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWln
aHQpOworCisgICAgcmV0dXJuIHdpZHRoOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aGVpZ2h0KCkKK3sKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKworICAgIGF0a19jb21w
b25lbnRfZ2V0X3NpemUoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmd2lkdGgsICZoZWlnaHQp
OworCisgICAgcmV0dXJuIGhlaWdodDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmludFZhbHVlKCkKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIH07CisKKyAgICBpZiAo
IUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0
a192YWx1ZV9nZXRfY3VycmVudF92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsK
KworICAgIGlmIChHX1ZBTFVFX0hPTERTX0RPVUJMRSgmdmFsdWUpKQorICAgICAgICByZXR1cm4g
Z192YWx1ZV9nZXRfZG91YmxlKCZ2YWx1ZSk7CisgICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19J
TlQoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oZ192YWx1ZV9n
ZXRfaW50KCZ2YWx1ZSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDAuMGY7Cit9CisKK2Rv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZSgpCit7CisgICAgR1ZhbHVlIHZh
bHVlID0geyAwLCB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X21pbmltdW1fdmFsdWUoQVRLX1ZB
TFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisKKyAgICBpZiAoR19WQUxVRV9IT0xEU19ET1VCTEUo
JnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2RvdWJsZSgmdmFsdWUpOworICAg
IGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfSU5UKCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KGdfdmFsdWVfZ2V0X2ludCgmdmFsdWUpKTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiAwLjBmOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4
VmFsdWUoKQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKworICAgIGlmICghQVRLX0lT
X1ZBTFVFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVl
X2dldF9tYXhpbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworCisgICAg
aWYgKEdfVkFMVUVfSE9MRFNfRE9VQkxFKCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBnX3ZhbHVl
X2dldF9kb3VibGUoJnZhbHVlKTsKKyAgICBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0lOVCgmdmFs
dWUpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihnX3ZhbHVlX2dldF9pbnQo
JnZhbHVlKSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMC4wZjsKK30KKworYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzdXBwb3J0c1ByZXNzQWN0aW9uKCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyKCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30K
KworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVh
ZGVycygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJ
blRhYmxlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y29sdW1uSW5kZXhSYW5nZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitpbnQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmJvdW5kc0ZvclJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNpZ25l
ZCByb3cpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitK
U1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNl
bGVjdGVkVGV4dFJhbmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KDAsIDApOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0
dGFibGUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggMWFiYmEzOC4uMzQ3OGI0OCAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKIAorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNs
dWRlICJXb3JrUXVldWVJdGVtLmgiCkBAIC02NSw2ICs2Niw3IEBAIHN0YXRpYyBib29sIHByaW50
U2VwYXJhdG9yczsKIHN0YXRpYyBpbnQgZHVtcFBpeGVsczsKIHN0YXRpYyBpbnQgZHVtcFRyZWUg
PSAxOwogCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIg
PSAwOwogTGF5b3V0VGVzdENvbnRyb2xsZXIqIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IDA7CiBz
dGF0aWMgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWUg
PSAwOwpAQCAtNDMyLDcgKzQzNCwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3V2luZG93T2JqZWN0
Q2xlYXJlZChXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbQogICAgIGFz
c2VydChnTGF5b3V0VGVzdENvbnRyb2xsZXIpOwogCiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0g
ICAgYXNzZXJ0KCFleGNlcHRpb24pOworICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKworICAgIGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgJmV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24pOwogfQogCiBzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0NvbnNvbGVNZXNzYWdlKFdlYktpdFdlYlZpZXcqIHZpZXcsIGNvbnN0
IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgZ2NoYXIqIHNvdXJjZUlk
LCBncG9pbnRlciBkYXRhKQpAQCAtNTU1LDYgKzU2MCw4IEBAIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiBhcmd2W10pCiAgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVCh3ZWJWaWV3KSwgInRp
dGxlLWNoYW5nZWQiLCBHX0NBTExCQUNLKHdlYlZpZXdUaXRsZUNoYW5nZWQpLCAwKTsKICAgICBn
X3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHdlYlZpZXcpLCAibmF2aWdhdGlvbi1wb2xpY3ktZGVj
aXNpb24tcmVxdWVzdGVkIiwgR19DQUxMQkFDSyh3ZWJWaWV3TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uUmVxdWVzdGVkKSwgMCk7CiAKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlciA9IG5ldyBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjsKKwogICAgIHNldERlZmF1bHRzVG9Db25zaXN0ZW50U3Rh
dGVWYWx1ZXNGb3JUZXN0aW5nKCk7CiAKICAgICBpZiAoYXJnYyA9PSBvcHRpbmQrMSAmJiBzdHJj
bXAoYXJndltvcHRpbmRdLCAiLSIpID09IDApIHsKQEAgLTU3Niw1ICs1ODMsOCBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsK
ICAgICB9CiAKKyAgICBkZWxldGUgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7CisgICAgYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIgPSAwOworCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbSBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDQ4NDI0ZDAuLmU0YmY1MTAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC00MCw3ICs0MCw5IEBAIGR1
bXByZW5kZXJ0cmVlX2NwcGZsYWdzIDo9IFwKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NQUEZM
QUdTID0gJChkdW1wcmVuZGVydHJlZV9jcHBmbGFncykKIAogUHJvZ3JhbXNfRHVtcFJlbmRlclRy
ZWVfU09VUkNFUyA9IFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5jcHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmggXAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuY3BwIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlUHJlZml4
LmggXApAQCAtNTQsNiArNTYsOCBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0g
XAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oIFwKIAlXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWVJdGVtLmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2NvbmZpZy5oIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZUd0ay5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvR0NDb250cm9sbGVyR3RrLmNwcCBcCkBAIC03NSw2ICs3OSw3IEBAIFByb2dyYW1zX0R1
bXBSZW5kZXJUcmVlX0NGTEFHUyA9IFwKIAkkKExJQlNPVVBfQ0ZMQUdTKQogCiBQcm9ncmFtc19E
dW1wUmVuZGVyVHJlZV9MREFERCA9IFwKKwlsaWJKYXZhU2NyaXB0Q29yZS5sYSBcCiAJbGlid2Vi
a2l0LTEuMC5sYSBcCiAJJChHTE9CQUxERVBTX0xJQlMpIFwKIAkkKENBSVJPX0xJQlMpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34252</attachid>
            <date>2009-08-06 22:33:31 -0700</date>
            <delta_ts>2009-08-07 00:25:43 -0700</delta_ts>
            <desc>updated 31/07/2009</desc>
            <filename>axdrt.patch</filename>
            <type>text/plain</type>
            <size>21812</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggNzNiNjU4Mi4uYTgyYTRjMyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQKQEAgLTc4LDcgKzc4LDcgQEAgYWNjZXNzaWJpbGl0eS9pbnB1dC1p
bWFnZS1hbHQuaHRtbAogYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbAogYWNj
ZXNzaWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEt
dGFibGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwKLWFjY2Vzc2liaWxpdHkvbm9jaGlsZHJl
bi1lbGVtZW50cy5odG1sCisjYWNjZXNzaWJpbGl0eS9ub2NoaWxkcmVuLWVsZW1lbnRzLmh0bWwK
IGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAogYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0
b24tY2hlY2tib3gtc2l6ZS5odG1sCiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi10aXRsZS1s
YWJlbC5odG1sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDJhMDRlYmMuLjUwM2Q0NDggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwOCBOdWFudGkgTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICoKICAqIFBvcnRpb25zIGZyb20gTW96
aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKICAqCkBAIC0xMDc4LDQgKzEwNzksMTgg
QEAgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2goV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNz
aWJsZSkKICAgICBhY2Nlc3NpYmxlLT5tX29iamVjdCA9IGZhbGxiYWNrT2JqZWN0KCk7CiB9CiAK
K0F0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXZWJLaXRB
Y2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIGlmICghYWNjZXNzaWJsZS0+bV9vYmplY3Qp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IHVwZGF0ZSB0aGUgYmFja2luZyBz
dG9yZSBvbmNlIHdlIGhhdmUgb25lLgorCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
IGZvY3VzZWRPYmogPSBhY2Nlc3NpYmxlLT5tX29iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpOwor
ICAgIGlmICghZm9jdXNlZE9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZm9j
dXNlZE9iai0+d3JhcHBlcigpOworfQorCiAjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5oIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckF0ay5oCmluZGV4IGVjZmI5OWUuLjBiMzFiODIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAorKysg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC01Nyw2ICs1OCw4IEBAIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYmtpdF9hY2Nl
c3NpYmxlX2dldF9hY2Nlc3NpYmlsaXR5X29iamVjdCAoV2ViS2l0CiAKIHZvaWQgd2Via2l0X2Fj
Y2Vzc2libGVfZGV0YWNoIChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKTsKIAorQXRrT2Jq
ZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50KFdlYktpdEFjY2Vzc2li
bGUqIGFjY2Vzc2libGUpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGtfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IGY4Mjkx
NjcuLjBjM2ZiZDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUu
aAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTUzLDYgKzUzLDcg
QEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVy
ZXMuaCIKIAorI2luY2x1ZGUgPGF0ay9hdGsuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVk
ZSA8bGlic291cC9zb3VwLmg+CiAKQEAgLTIxNyw2ICsyMTgsOSBAQCBleHRlcm4gIkMiIHsKICAg
ICBXRUJLSVRfQVBJIHZvaWQKICAgICB3ZWJraXRfd2ViX2ZyYW1lX2NsZWFyX21haW5fZnJhbWVf
bmFtZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpOwogCisgICAgV0VCS0lUX0FQSSBBdGtPYmplY3Qq
CisgICAgd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQoV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lKTsKKwogICAgIFdFQktJVF9BUEkgZ2NoYXIqCiAgICAgd2Via2l0
X3dlYl92aWV3X2dldF9zZWxlY3RlZF90ZXh0IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAK
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCBjNDY1ODFkLi4wZjdhNWFhIDEw
MDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKKysrIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC0zMiw3ICszMiw5IEBACiAjaW5j
bHVkZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKIAorI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5jbHVkZSAiQW5pbWF0
aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJD
U3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgpAQCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogCisjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KIAogLyoqCkBAIC04NTUsMyArODU4LDI4
IEBAIGdzaXplIHdlYmtpdF9nY19jb3VudF9qYXZhc2NyaXB0X29iamVjdHMoKQogCiB9CiAKK0F0
a09iamVjdCogd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQo
V2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKworI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkK
KyAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAg
IEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKworICAgIFdlYktpdFdlYkZy
YW1lUHJpdmF0ZSogcHJpdiA9IGZyYW1lLT5wcml2OworICAgIGlmICghcHJpdi0+Y29yZUZyYW1l
IHx8ICFwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBOVUxMOwor
CisgICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcgKj4ocHJpdi0+
Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoIXJvb3QpCisgICAg
ICAgIHJldHVybiBOVUxMOworCisgICAgQXRrT2JqZWN0KiB3cmFwcGVyID0gIHByaXYtPmNvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyb290KS0+d3Jh
cHBlcigpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBy
ZXR1cm4gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXRUJLSVRfQUNDRVNT
SUJMRSh3cmFwcGVyKSk7CisjZWxzZQorICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgK
aW5kZXggMjI3ZTA5Mi4uNTQzM2EwNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu
ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
T2JqZWN0UmVmLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDMsNiArNDQsOSBAQCB0eXBlZGVmIHN0
cnVjdCBvYmpjX29iamVjdCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjaW5jbHVkZSA8V2ViQ29yZS9D
T01QdHIuaD4KIAogdHlwZWRlZiBDT01QdHI8SUFjY2Vzc2libGU+IFBsYXRmb3JtVUlFbGVtZW50
OworI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGF0ay9hdGsuaD4KK3R5cGVkZWYgQXRr
T2JqZWN0KiBQbGF0Zm9ybVVJRWxlbWVudDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3Jt
VUlFbGVtZW50OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkyZTFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9u
em8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCisKKyNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUu
aCIKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdC5oPgorCitleHRlcm4gIkMiIHsKK2V4dGVybiBBdGtPYmplY3QqIHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNjZXNzaWJsZV9lbGVtZW50KFdlYktpdFdlYkZy
YW1lKik7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcigpCit7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCit7CisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxl
ID0gIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNjZXNzaWJsZV9lbGVtZW50KG1haW5G
cmFtZSk7CisgICAgaWYgKCFhY2Nlc3NpYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOworfQorCitBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCit7Cisg
ICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1h
aW5GcmFtZSk7CisgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vz
c2libGUoR1RLX1dJREdFVCh2aWV3KSk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQoYXhPYmplY3QpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmJiNDI4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKQEAgLTAs
MCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKworQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxl
bWVudCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCit7CisgICAgZ19vYmplY3Rf
cmVmKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3Ro
ZXIpCisgICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQoreworICAgIGdfb2JqZWN0X3Jl
ZihBVEtfT0JKRUNUKG1fZWxlbWVudCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCgpCit7CisgICAgZ19vYmplY3RfdW5yZWYoQVRLX09CSkVD
VChtX2VsZW1lbnQpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRMaW5r
ZWRVSUVsZW1lbnRzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudHMpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBjaGlsZHJlbikK
K3sKKyAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAgICAg
IGNoaWxkcmVuLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7CisgICAgfQor
fQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZl
Y3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudFZlY3RvciwgdW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsb2NhdGlv
bjsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAg
ICAgIGVsZW1lbnRWZWN0b3IuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsK
KyAgICB9Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkK
K3sKKyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQo
QVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9u
X2FjY2Vzc2libGVfY2hpbGRyZW4oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKK30KKworQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChp
bnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOwor
fQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENo
aWxkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4gY2hpbGRyZW47CisgICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRyZW4sIGlu
ZGV4LCAxKTsKKworICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJu
IGNoaWxkcmVuLmF0KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30K
KworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2Vk
VUlFbGVtZW50cygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6dGl0bGVVSUVsZW1lbnQoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1
cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpwYXJlbnRFbGVtZW50KCkKK3sKKyAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBdGtPYmpl
Y3QqIHBhcmVudCA9ICBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChtX2VsZW1lbnQp
KTsKKworICAgIHJldHVybiBwYXJlbnQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHBhcmVudCkg
OiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZDaGlsZHJlbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgp
Cit7CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1f
ZWxlbWVudCkpOworCisgICAgaWYgKCFyb2xlKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhhdGtfcm9sZV9nZXRfbmFtZShyb2xlKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkKK3sKKyAgICBjb25zdCBnY2hhciogbmFtZSA9
IGF0a19vYmplY3RfZ2V0X25hbWUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlmICgh
bmFtZSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSk7Cit9CisK
K0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKK3sKKyAg
ICBjb25zdCBnY2hhciogZGVzY3JpcHRpb24gPSBhdGtfb2JqZWN0X2dldF9kZXNjcmlwdGlvbihB
VEtfT0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzY3JpcHRpb24pOworfQorCitKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCit7CisgICAgaW50IHgs
IHk7CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxl
bWVudCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CisKKyAgICByZXR1cm4geDsKK30KKworZG91
YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkoKQoreworICAgIGludCB4LCB5OworCisgICAg
YXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwg
JnksIEFUS19YWV9TQ1JFRU4pOworCisgICAgcmV0dXJuIHk7Cit9CisKK2RvdWJsZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp3aWR0aCgpCit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAg
ICBhdGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRo
LCAmaGVpZ2h0KTsKKworICAgIHJldHVybiB3aWR0aDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmhlaWdodCgpCit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICBh
dGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAm
aGVpZ2h0KTsKKworICAgIHJldHVybiBoZWlnaHQ7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjbGlja1BvaW50WCgpCit7CisgICAgcmV0dXJuIDAuZjsKK30KKworZG91Ymxl
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKK3sKKyAgICByZXR1cm4gMC5m
OworfQorCisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpCit7Cisg
ICAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRf
dmFsdWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisKKyAgICBpZiAoR19WQUxVRV9I
T0xEU19ET1VCTEUoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2RvdWJsZSgm
dmFsdWUpOworICAgIGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfSU5UKCZ2YWx1ZSkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGdfdmFsdWVfZ2V0X2ludCgmdmFsdWUpKTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiAwLjBmOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bWluVmFsdWUoKQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKworICAg
IGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisg
ICAgYXRrX3ZhbHVlX2dldF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFs
dWUpOworCisgICAgaWYgKEdfVkFMVUVfSE9MRFNfRE9VQkxFKCZ2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBnX3ZhbHVlX2dldF9kb3VibGUoJnZhbHVlKTsKKyAgICBlbHNlIGlmIChHX1ZBTFVFX0hP
TERTX0lOVCgmdmFsdWUpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihnX3Zh
bHVlX2dldF9pbnQoJnZhbHVlKSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMC4wZjsKK30K
KworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKK3sKKyAgICBHVmFs
dWUgdmFsdWUgPSB7IDAsIH07CisKKyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQor
ICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0a192YWx1ZV9nZXRfbWF4aW11bV92YWx1ZShB
VEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKKworICAgIGlmIChHX1ZBTFVFX0hPTERTX0RP
VUJMRSgmdmFsdWUpKQorICAgICAgICByZXR1cm4gZ192YWx1ZV9nZXRfZG91YmxlKCZ2YWx1ZSk7
CisgICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19JTlQoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4oZ192YWx1ZV9nZXRfaW50KCZ2YWx1ZSkpOworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuIDAuMGY7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c3VwcG9ydHNQcmVzc0FjdGlvbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKwor
aW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlcigpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZSb3dzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZIZWFkZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworaW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
b3dJbmRleFJhbmdlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleChpbnQpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2ln
bmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAg
ICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Vs
ZWN0ZWRUZXh0UmFuZ2UoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
SlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworSlNTdHJpbmdS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0
cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGJmZWZm
YzIuLmFjODJkZDggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9E
dW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1
bXBSZW5kZXJUcmVlLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxheW91dFRl
c3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCkBAIC02OCw2ICs2OSw3IEBA
IHN0YXRpYyBib29sIHByaW50U2VwYXJhdG9yczsKIHN0YXRpYyBpbnQgZHVtcFBpeGVsczsKIHN0
YXRpYyBpbnQgZHVtcFRyZWUgPSAxOwogCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogYXhDb250
cm9sbGVyID0gMDsKIExheW91dFRlc3RDb250cm9sbGVyKiBnTGF5b3V0VGVzdENvbnRyb2xsZXIg
PSAwOwogc3RhdGljIEdDQ29udHJvbGxlciogZ2NDb250cm9sbGVyID0gMDsKIHN0YXRpYyBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3OwpAQCAtNDc5LDEzICs0ODEsMTcgQEAgc3RhdGljIHZvaWQgd2Vi
Vmlld0xvYWRGaW5pc2hlZChXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJh
bWUsIHZvaWQKIHN0YXRpYyB2b2lkIHdlYlZpZXdXaW5kb3dPYmplY3RDbGVhcmVkKFdlYktpdFdl
YlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd09iamVjdCwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgYXNzZXJ0KGdMYXlvdXRUZXN0Q29udHJvbGxl
cik7CisgICAgQVNTRVJUKGdMYXlvdXRUZXN0Q29udHJvbGxlcik7CiAKICAgICBnTGF5b3V0VGVz
dENvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAmZXhj
ZXB0aW9uKTsKLSAgICBhc3NlcnQoIWV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFleGNlcHRpb24p
OwogCiAgICAgZ2NDb250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09i
amVjdCwgJmV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCFleGNlcHRpb24pOworCisgICAgYXhDb250
cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2VwdGlv
bik7CisgICAgQVNTRVJUKCFleGNlcHRpb24pOworCiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJW
aWV3Q29uc29sZU1lc3NhZ2UoV2ViS2l0V2ViVmlldyogdmlldywgY29uc3QgZ2NoYXIqIG1lc3Nh
Z2UsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBnY2hhciogc291cmNlSWQsIGdwb2ludGVyIGRh
dGEpCkBAIC02NjYsNiArNjcyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkK
ICAgICBzZXREZWZhdWx0c1RvQ29uc2lzdGVudFN0YXRlVmFsdWVzRm9yVGVzdGluZygpOwogCiAg
ICAgZ2NDb250cm9sbGVyID0gbmV3IEdDQ29udHJvbGxlcigpOworICAgIGF4Q29udHJvbGxlciA9
IG5ldyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpOwogCiAgICAgaWYgKGFyZ2MgPT0gb3B0aW5k
KzEgJiYgc3RyY21wKGFyZ3Zbb3B0aW5kXSwgIi0iKSA9PSAwKSB7CiAgICAgICAgIGNoYXIgZmls
ZW5hbWVCdWZmZXJbMjA0OF07CkBAIC02ODksNiArNjk2LDkgQEAgaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqIGFyZ3ZbXSkKICAgICBkZWxldGUgZ2NDb250cm9sbGVyOwogICAgIGdjQ29udHJvbGxl
ciA9IDA7CiAKKyAgICBkZWxldGUgYXhDb250cm9sbGVyOworICAgIGF4Q29udHJvbGxlciA9IDA7
CisKICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKIAogICAgIHJldHVybiAwOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0gYi9XZWJLaXRUb29scy9HTlVtYWtlZmls
ZS5hbQppbmRleCAyYTRhZTU0Li5jYjU1NjhiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9HTlVt
YWtlZmlsZS5hbQorKysgYi9XZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbQpAQCAtNDEsMTAgKzQx
LDEyIEBAIGR1bXByZW5kZXJ0cmVlX2NwcGZsYWdzIDo9IFwKIFByb2dyYW1zX0R1bXBSZW5kZXJU
cmVlX0NQUEZMQUdTID0gJChkdW1wcmVuZGVydHJlZV9jcHBmbGFncykKIAogUHJvZ3JhbXNfRHVt
cFJlbmRlclRyZWVfU09VUkNFUyA9IFwKLQlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5oIFwKLQlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
UHJlZml4LmggXAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmNwcCBcCisJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuaCBcCisJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5jcHAgXAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNw
cCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmggXAogCVdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0phdmFTY3JpcHRUaHJlYWRpbmcuaCBcCkBAIC01NSw2ICs1
Nyw4IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCiAJV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L1dvcmtRdWV1ZUl0ZW0uaCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY29uZmlnLmgg
XAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ckd0ay5jcHAgXAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50R3RrLmNwcCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBS
ZW5kZXJUcmVlLmNwcCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5k
ZXJUcmVlR3RrLmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9HQ0NvbnRyb2xs
ZXJHdGsuY3BwIFwKQEAgLTc2LDYgKzgwLDcgQEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfQ0ZM
QUdTID0gXAogCSQoTElCU09VUF9DRkxBR1MpCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0xE
QUREID0gXAorCWxpYkphdmFTY3JpcHRDb3JlLmxhIFwKIAlsaWJ3ZWJraXQtMS4wLmxhIFwKIAkk
KEdMT0JBTERFUFNfTElCUykgXAogCSQoQ0FJUk9fTElCUykgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34255</attachid>
            <date>2009-08-07 00:25:43 -0700</date>
            <delta_ts>2009-08-07 23:00:03 -0700</delta_ts>
            <desc>patch updated to ToT (r46888)</desc>
            <filename>axdrt.patch</filename>
            <type>text/plain</type>
            <size>22209</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggMGU4OGFlZS4uZWFjYTViYyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQKQEAgLTc5LDcgKzc5LDcgQEAgYWNjZXNzaWJpbGl0eS9pbnB1dC1z
bGlkZXIuaHRtbAogYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbAogYWNjZXNz
aWJpbGl0eS9vbmNsaWNrLWhhbmRsZXJzLmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEtdGFi
bGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwKLWFjY2Vzc2liaWxpdHkvbm9jaGlsZHJlbi1l
bGVtZW50cy5odG1sCisjYWNjZXNzaWJpbGl0eS9ub2NoaWxkcmVuLWVsZW1lbnRzLmh0bWwKIGFj
Y2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbAogYWNjZXNzaWJpbGl0eS9yYWRpby1idXR0b24t
Y2hlY2tib3gtc2l6ZS5odG1sCiBhY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi10aXRsZS1sYWJl
bC5odG1sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDJhMDRlYmMuLjUwM2Q0NDggMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOCBOdWFudGkgTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICoKICAqIFBvcnRpb25zIGZyb20gTW96aWxs
YSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKICAqCkBAIC0xMDc4LDQgKzEwNzksMTggQEAg
dm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2goV2ViS2l0QWNjZXNzaWJsZSogYWNjZXNzaWJs
ZSkKICAgICBhY2Nlc3NpYmxlLT5tX29iamVjdCA9IGZhbGxiYWNrT2JqZWN0KCk7CiB9CiAKK0F0
a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXZWJLaXRBY2Nl
c3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIGlmICghYWNjZXNzaWJsZS0+bV9vYmplY3QpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IHVwZGF0ZSB0aGUgYmFja2luZyBzdG9y
ZSBvbmNlIHdlIGhhdmUgb25lLgorCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGZv
Y3VzZWRPYmogPSBhY2Nlc3NpYmxlLT5tX29iamVjdC0+Zm9jdXNlZFVJRWxlbWVudCgpOworICAg
IGlmICghZm9jdXNlZE9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZm9jdXNl
ZE9iai0+d3JhcHBlcigpOworfQorCiAjZW5kaWYgLy8gSEFWRShBQ0NFU1NJQklMSVRZKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckF0ay5oIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5oCmluZGV4IGVjZmI5OWUuLjBiMzFiODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuaAorKysgYi9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01
Nyw2ICs1OCw4IEBAIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqIHdlYmtpdF9hY2Nlc3Np
YmxlX2dldF9hY2Nlc3NpYmlsaXR5X29iamVjdCAoV2ViS2l0CiAKIHZvaWQgd2Via2l0X2FjY2Vz
c2libGVfZGV0YWNoIChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKTsKIAorQXRrT2JqZWN0
KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50KFdlYktpdEFjY2Vzc2libGUq
IGFjY2Vzc2libGUpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGtfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJp
dmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IGY4MjkxNjcu
LjBjM2ZiZDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTUzLDYgKzUzLDcgQEAK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMu
aCIKIAorI2luY2x1ZGUgPGF0ay9hdGsuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CiAKQEAgLTIxNyw2ICsyMTgsOSBAQCBleHRlcm4gIkMiIHsKICAgICBX
RUJLSVRfQVBJIHZvaWQKICAgICB3ZWJraXRfd2ViX2ZyYW1lX2NsZWFyX21haW5fZnJhbWVfbmFt
ZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpOwogCisgICAgV0VCS0lUX0FQSSBBdGtPYmplY3QqCisg
ICAgd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lKTsKKwogICAgIFdFQktJVF9BUEkgZ2NoYXIqCiAgICAgd2Via2l0X3dl
Yl92aWV3X2dldF9zZWxlY3RlZF90ZXh0IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCBjNDY1ODFkLi4wZjdhNWFhIDEwMDY0
NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKKysrIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVk
ZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKIAorI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9u
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJDU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgpAQCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogCisjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KIAogLyoqCkBAIC04NTUsMyArODU4LDI4IEBA
IGdzaXplIHdlYmtpdF9nY19jb3VudF9qYXZhc2NyaXB0X29iamVjdHMoKQogCiB9CiAKK0F0a09i
amVjdCogd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nlc3NpYmxlX2VsZW1lbnQoV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKworI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKKyAg
ICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgIEFY
T2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKworICAgIFdlYktpdFdlYkZyYW1l
UHJpdmF0ZSogcHJpdiA9IGZyYW1lLT5wcml2OworICAgIGlmICghcHJpdi0+Y29yZUZyYW1lIHx8
ICFwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisg
ICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcgKj4ocHJpdi0+Y29y
ZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAg
IHJldHVybiBOVUxMOworCisgICAgQXRrT2JqZWN0KiB3cmFwcGVyID0gIHByaXYtPmNvcmVGcmFt
ZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyb290KS0+d3JhcHBl
cigpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1
cm4gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVudChXRUJLSVRfQUNDRVNTSUJM
RSh3cmFwcGVyKSk7CisjZWxzZQorICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmgg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKaW5k
ZXggMGJmMGZlZi4uZDBiNjNjMyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2Jq
ZWN0UmVmLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDMsNiArNDQsOSBAQCB0eXBlZGVmIHN0cnVj
dCBvYmpjX29iamVjdCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01Q
dHIuaD4KIAogdHlwZWRlZiBDT01QdHI8SUFjY2Vzc2libGU+IFBsYXRmb3JtVUlFbGVtZW50Owor
I2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGF0ay9hdGsuaD4KK3R5cGVkZWYgQXRrT2Jq
ZWN0KiBQbGF0Zm9ybVVJRWxlbWVudDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtVUlF
bGVtZW50OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hYjkyZTFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIK
KworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdC5oPgorCitleHRlcm4gIkMiIHsKK2V4dGVybiBBdGtPYmplY3QqIHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNjZXNzaWJsZV9lbGVtZW50KFdlYktpdFdlYkZyYW1l
Kik7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cigpCit7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCit7CisgICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmxlID0g
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNjZXNzaWJsZV9lbGVtZW50KG1haW5GcmFt
ZSk7CisgICAgaWYgKCFhY2Nlc3NpYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOworfQorCitBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCit7CisgICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7CisgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2li
bGUoR1RLX1dJREdFVCh2aWV3KSk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQo
YXhPYmplY3QpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk3OTA4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5jcHAKQEAgLTAsMCAr
MSw0MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bworICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKworQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVu
dCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCit7CisgICAgZ19vYmplY3RfcmVm
KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIp
CisgICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQoreworICAgIGdfb2JqZWN0X3JlZihB
VEtfT0JKRUNUKG1fZWxlbWVudCkpOworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCgpCit7CisgICAgZ19vYmplY3RfdW5yZWYoQVRLX09CSkVDVCht
X2VsZW1lbnQpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRMaW5rZWRV
SUVsZW1lbnRzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudHMpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmdldERvY3VtZW50TGlua3MoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JikKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Z2V0Q2hpbGRyZW4oVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiBjaGlsZHJlbikKK3sK
KyAgICBpbnQgY291bnQgPSBjaGlsZHJlbkNvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAgICAgIGNo
aWxkcmVuLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7CisgICAgfQorfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZlY3Rv
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudFZlY3RvciwgdW5zaWduZWQgbG9jYXRp
b24sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsb2NhdGlvbjsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIEF0a09iamVjdCogY2hpbGQgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QobV9lbGVtZW50KSwgaSk7CisgICAgICAg
IGVsZW1lbnRWZWN0b3IuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY2hpbGQpKTsKKyAg
ICB9Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKK3sK
KyAgICBpZiAoIW1fZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoQVRL
X0lTX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9uX2Fj
Y2Vzc2libGVfY2hpbGRyZW4oQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKK30KKworQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludChpbnQg
eCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQor
CitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxk
QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gY2hpbGRyZW47CisgICAgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoY2hpbGRyZW4sIGluZGV4
LCAxKTsKKworICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGNo
aWxkcmVuLmF0KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKwor
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlF
bGVtZW50cygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzKCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGl0bGVVSUVsZW1lbnQoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
MDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpw
YXJlbnRFbGVtZW50KCkKK3sKKyAgICBBU1NFUlQobV9lbGVtZW50KTsKKyAgICBBdGtPYmplY3Qq
IHBhcmVudCA9ICBhdGtfb2JqZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsK
KworICAgIHJldHVybiBwYXJlbnQgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KHBhcmVudCkgOiAw
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZD
aGlsZHJlbigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXMoKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSgpCit7
CisgICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNUKG1fZWxl
bWVudCkpOworCisgICAgaWYgKCFyb2xlKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhhdGtfcm9sZV9nZXRfbmFtZShyb2xlKSk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKCkKK3sKKyAgICBjb25zdCBnY2hhciogbmFtZSA9IGF0
a19vYmplY3RfZ2V0X25hbWUoQVRLX09CSkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlmICghbmFt
ZSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSk7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKK3sKKyAgICBj
b25zdCBnY2hhciogZGVzY3JpcHRpb24gPSBhdGtfb2JqZWN0X2dldF9kZXNjcmlwdGlvbihBVEtf
T0JKRUNUKG1fZWxlbWVudCkpOworCisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzY3JpcHRpb24pOworfQorCitKU1N0cmluZ1Jl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
fQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCit7CisgICAgaW50IHgsIHk7
CisKKyAgICBhdGtfY29tcG9uZW50X2dldF9wb3NpdGlvbihBVEtfQ09NUE9ORU5UKG1fZWxlbWVu
dCksICZ4LCAmeSwgQVRLX1hZX1NDUkVFTik7CisKKyAgICByZXR1cm4geDsKK30KKworZG91Ymxl
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkoKQoreworICAgIGludCB4LCB5OworCisgICAgYXRr
X2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQpLCAmeCwgJnks
IEFUS19YWV9TQ1JFRU4pOworCisgICAgcmV0dXJuIHk7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp3aWR0aCgpCit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICBh
dGtfY29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAm
aGVpZ2h0KTsKKworICAgIHJldHVybiB3aWR0aDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmhlaWdodCgpCit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisKKyAgICBhdGtf
Y29tcG9uZW50X2dldF9zaXplKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJndpZHRoLCAmaGVp
Z2h0KTsKKworICAgIHJldHVybiBoZWlnaHQ7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjbGlja1BvaW50WCgpCit7CisgICAgcmV0dXJuIDAuZjsKK30KKworZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKK3sKKyAgICByZXR1cm4gMC5mOwor
fQorCisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZSgpCit7CisgICAg
R1ZhbHVlIHZhbHVlID0geyAwLCB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50
KSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X2N1cnJlbnRfdmFs
dWUoQVRLX1ZBTFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisKKyAgICBpZiAoR19WQUxVRV9IT0xE
U19ET1VCTEUoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2RvdWJsZSgmdmFs
dWUpOworICAgIGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfSU5UKCZ2YWx1ZSkpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGdfdmFsdWVfZ2V0X2ludCgmdmFsdWUpKTsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiAwLjBmOworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWluVmFsdWUoKQoreworICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKworICAgIGlm
ICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAg
YXRrX3ZhbHVlX2dldF9taW5pbXVtX3ZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUp
OworCisgICAgaWYgKEdfVkFMVUVfSE9MRFNfRE9VQkxFKCZ2YWx1ZSkpCisgICAgICAgIHJldHVy
biBnX3ZhbHVlX2dldF9kb3VibGUoJnZhbHVlKTsKKyAgICBlbHNlIGlmIChHX1ZBTFVFX0hPTERT
X0lOVCgmdmFsdWUpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihnX3ZhbHVl
X2dldF9pbnQoJnZhbHVlKSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMC4wZjsKK30KKwor
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKK3sKKyAgICBHVmFsdWUg
dmFsdWUgPSB7IDAsIH07CisKKyAgICBpZiAoIUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0a192YWx1ZV9nZXRfbWF4aW11bV92YWx1ZShBVEtf
VkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsKKworICAgIGlmIChHX1ZBTFVFX0hPTERTX0RPVUJM
RSgmdmFsdWUpKQorICAgICAgICByZXR1cm4gZ192YWx1ZV9nZXRfZG91YmxlKCZ2YWx1ZSk7Cisg
ICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19JTlQoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGRvdWJsZT4oZ192YWx1ZV9nZXRfaW50KCZ2YWx1ZSkpOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIDAuMGY7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnZhbHVlRGVzY3JpcHRpb24oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omluc2VydGlvblBvaW50TGluZU51bWJlcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiAwOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQWN0aW9u
U3VwcG9ydGVkKEpTU3RyaW5nUmVmIGFjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
UmVxdWlyZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNvbHVtbkhlYWRlcnMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZDb2x1bW5zKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
VmlzaWJsZUNlbGxzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5n
ZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bGluZUZvckluZGV4KGludCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IDA7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJh
bmdlKHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNl
bGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNpZ25lZCByb3cpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdl
KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVu
dAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUoSlNTdHJpbmdS
ZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
ZGVjcmVtZW50KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBiZmVmZmMy
Li5hYzgyZGQ4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVt
cFJlbmRlclRyZWUuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgpAQCAtNjgsNiArNjksNyBAQCBz
dGF0aWMgYm9vbCBwcmludFNlcGFyYXRvcnM7CiBzdGF0aWMgaW50IGR1bXBQaXhlbHM7CiBzdGF0
aWMgaW50IGR1bXBUcmVlID0gMTsKIAorQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIGF4Q29udHJv
bGxlciA9IDA7CiBMYXlvdXRUZXN0Q29udHJvbGxlciogZ0xheW91dFRlc3RDb250cm9sbGVyID0g
MDsKIHN0YXRpYyBHQ0NvbnRyb2xsZXIqIGdjQ29udHJvbGxlciA9IDA7CiBzdGF0aWMgV2ViS2l0
V2ViVmlldyogd2ViVmlldzsKQEAgLTQ3OSwxMyArNDgxLDE3IEBAIHN0YXRpYyB2b2lkIHdlYlZp
ZXdMb2FkRmluaXNoZWQoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1l
LCB2b2lkCiBzdGF0aWMgdm9pZCB3ZWJWaWV3V2luZG93T2JqZWN0Q2xlYXJlZChXZWJLaXRXZWJW
aWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIGFzc2VydChnTGF5b3V0VGVzdENvbnRyb2xsZXIp
OworICAgIEFTU0VSVChnTGF5b3V0VGVzdENvbnRyb2xsZXIpOwogCiAgICAgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvd09iamVjdCwgJmV4Y2Vw
dGlvbik7Ci0gICAgYXNzZXJ0KCFleGNlcHRpb24pOworICAgIEFTU0VSVCghZXhjZXB0aW9uKTsK
IAogICAgIGdjQ29udHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmpl
Y3QsICZleGNlcHRpb24pOwogICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKworICAgIGF4Q29udHJv
bGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZleGNlcHRpb24p
OworICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmll
d0NvbnNvbGVNZXNzYWdlKFdlYktpdFdlYlZpZXcqIHZpZXcsIGNvbnN0IGdjaGFyKiBtZXNzYWdl
LCB1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgZ2NoYXIqIHNvdXJjZUlkLCBncG9pbnRlciBkYXRh
KQpAQCAtNjY2LDYgKzY3Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAg
ICAgc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRTdGF0ZVZhbHVlc0ZvclRlc3RpbmcoKTsKIAogICAg
IGdjQ29udHJvbGxlciA9IG5ldyBHQ0NvbnRyb2xsZXIoKTsKKyAgICBheENvbnRyb2xsZXIgPSBu
ZXcgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKIAogICAgIGlmIChhcmdjID09IG9wdGluZCsx
ICYmIHN0cmNtcChhcmd2W29wdGluZF0sICItIikgPT0gMCkgewogICAgICAgICBjaGFyIGZpbGVu
YW1lQnVmZmVyWzIwNDhdOwpAQCAtNjg5LDYgKzY5Niw5IEBAIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiBhcmd2W10pCiAgICAgZGVsZXRlIGdjQ29udHJvbGxlcjsKICAgICBnY0NvbnRyb2xsZXIg
PSAwOwogCisgICAgZGVsZXRlIGF4Q29udHJvbGxlcjsKKyAgICBheENvbnRyb2xsZXIgPSAwOwor
CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUu
YW0KaW5kZXggMmE0YWU1NC4uY2I1NTY4YiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR05VbWFr
ZWZpbGUuYW0KKysrIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTQxLDEwICs0MSwx
MiBAQCBkdW1wcmVuZGVydHJlZV9jcHBmbGFncyA6PSBcCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJl
ZV9DUFBGTEFHUyA9ICQoZHVtcHJlbmRlcnRyZWVfY3BwZmxhZ3MpCiAKIFByb2dyYW1zX0R1bXBS
ZW5kZXJUcmVlX1NPVVJDRVMgPSBcCi0JV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCBcCi0JV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZVBy
ZWZpeC5oIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5jcHAgXAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmggXAorCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuY3BwIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAg
XAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5oIFwKIAlXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9KYXZhU2NyaXB0VGhyZWFkaW5nLmggXApAQCAtNTUsNiArNTcs
OCBAQCBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAogCVdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9X
b3JrUXVldWVJdGVtLmggXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2NvbmZpZy5oIFwK
KwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJH
dGsuY3BwIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudEd0ay5jcHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHAgXAogCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVy
VHJlZUd0ay5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvR0NDb250cm9sbGVy
R3RrLmNwcCBcCkBAIC03Niw2ICs4MCw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NGTEFH
UyA9IFwKIAkkKExJQlNPVVBfQ0ZMQUdTKQogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9MREFE
RCA9IFwKKwlsaWJKYXZhU2NyaXB0Q29yZS5sYSBcCiAJbGlid2Via2l0LTEuMC5sYSBcCiAJJChH
TE9CQUxERVBTX0xJQlMpIFwKIAkkKENBSVJPX0xJQlMpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34361</attachid>
            <date>2009-08-07 23:00:09 -0700</date>
            <delta_ts>2009-08-08 00:19:00 -0700</delta_ts>
            <desc>patch with ChangeLog</desc>
            <filename>bug-25989-20090808160006.patch</filename>
            <type>text/plain</type>
            <size>28279</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhNWJmOWJmLi41ZGU0ZDE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYgQEAKIDIwMDktMDgt
MDcgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0d0a10gRW5hYmxlIGFjY2Vz
c2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBSZW1vdmUgcGFzc2luZyBhY2Nlc3NpYmlsaXR5
IHRlc3RzIGZyb20gdGhlIFNraXBwZWQgbGlzdAorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQ6CisKKzIwMDktMDgtMDcgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtp
dC5vcmc+CisKICAgICAgICAgW0d0a10gU2tpcCB0d28gbmV3IHRlc3RzIChmcm9tIHI0Njg5Nikg
bmVlZGluZyBndGstc3BlY2lmaWMgcmVzdWx0cy4KIAogICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAyYmI0YWMzLi5mNmJkNDQ4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNzIsMjAgKzcyLDE0IEBAIGFjY2Vzc2liaWxp
dHkvYnV0dG9uLXByZXNzLWFjdGlvbi5odG1sCiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy5odG1sCiBh
Y2Nlc3NpYmlsaXR5L2VkaXRhYmxlLXdlYmFyZWEtY29udGV4dC1tZW51LXBvaW50Lmh0bWwKIGFj
Y2Vzc2liaWxpdHkvaWZyYW1lLWJhc3RhcmRpemF0aW9uLmh0bWwKLWFjY2Vzc2liaWxpdHkvaWdu
b3JlLXNwYWNlci1lbGVtZW50cy5odG1sCiBhY2Nlc3NpYmlsaXR5L2ltZy1hcmlhLWJ1dHRvbi1h
bHQtdGFnLmh0bWwKIGFjY2Vzc2liaWxpdHkvaW5wdXQtaW1hZ2UtYWx0Lmh0bWwKIGFjY2Vzc2li
aWxpdHkvaW5wdXQtc2xpZGVyLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRl
Lmh0bWwKIGFjY2Vzc2liaWxpdHkvb25jbGljay1oYW5kbGVycy5odG1sCi1hY2Nlc3NpYmlsaXR5
L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sCi1hY2Nlc3NpYmlsaXR5
L25vY2hpbGRyZW4tZWxlbWVudHMuaHRtbAogYWNjZXNzaWJpbGl0eS9wbGFjZWhvbGRlci5odG1s
Ci1hY2Nlc3NpYmlsaXR5L3JhZGlvLWJ1dHRvbi1jaGVja2JveC1zaXplLmh0bWwKIGFjY2Vzc2li
aWxpdHkvcmFkaW8tYnV0dG9uLXRpdGxlLWxhYmVsLmh0bWwKIGFjY2Vzc2liaWxpdHkvc2VjdXJl
LXRleHRmaWVsZC10aXRsZS11aS5odG1sCi1hY2Nlc3NpYmlsaXR5L3RhYmxlLW1vZGlmaWNhdGlv
bi1jcmFzaC5odG1sCi1hY2Nlc3NpYmlsaXR5L3RhYmxlLW5vZmlyc3Rib2R5Lmh0bWwKIGFjY2Vz
c2liaWxpdHkvdGFibGUtbm90Ym9keS5odG1sCiBhY2Nlc3NpYmlsaXR5L3RleHRhcmVhLWluc2Vy
dGlvbi1wb2ludC1saW5lLW51bWJlci5odG1sCiBhY2Nlc3NpYmlsaXR5L3RleHRhcmVhLWxpbmUt
Zm9yLWluZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggM2IyOGFhZi4uMmM1NGUyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wOC0w
NyAgSmFuIE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9Ad2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR3RrXSBFbmFibGUgYWNjZXNz
aWJpbGl0eSBpbiBHdGsgRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNTk4OQorCisgICAgICAgIEFkZCBTUEkgdG8gZ2V0IHRoZSBmb2N1c2VkIGFj
Y2Vzc2libGUgZWxlbWVudCB0byBiZSB1c2VkIGJ5IERSVC4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF9mb2N1c2VkX2VsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmg6CisKIDIwMDktMDgtMDcg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBbm90aGVyIGF0dGVt
cHQgdG8gZml4IHdpbmRvd3MuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDJhMDRlYmMuLjUw
M2Q0NDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICoKICAqIFBvcnRpb25z
IGZyb20gTW96aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKICAqCkBAIC0xMDc4LDQg
KzEwNzksMTggQEAgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9kZXRhY2goV2ViS2l0QWNjZXNzaWJs
ZSogYWNjZXNzaWJsZSkKICAgICBhY2Nlc3NpYmxlLT5tX29iamVjdCA9IGZhbGxiYWNrT2JqZWN0
KCk7CiB9CiAKK0F0a09iamVjdCogd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxlbWVu
dChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIGlmICghYWNjZXNzaWJsZS0+
bV9vYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IHVwZGF0ZSB0aGUg
YmFja2luZyBzdG9yZSBvbmNlIHdlIGhhdmUgb25lLgorCisgICAgUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IGZvY3VzZWRPYmogPSBhY2Nlc3NpYmxlLT5tX29iamVjdC0+Zm9jdXNlZFVJRWxl
bWVudCgpOworICAgIGlmICghZm9jdXNlZE9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gZm9jdXNlZE9iai0+d3JhcHBlcigpOworfQorCiAjZW5kaWYgLy8gSEFWRShBQ0NFU1NJ
QklMSVRZKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5oIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlckF0ay5oCmluZGV4IGVjZmI5OWUuLjBiMzFiODIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IE51
YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC01Nyw2ICs1OCw4IEBAIFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqIHdl
YmtpdF9hY2Nlc3NpYmxlX2dldF9hY2Nlc3NpYmlsaXR5X29iamVjdCAoV2ViS2l0CiAKIHZvaWQg
d2Via2l0X2FjY2Vzc2libGVfZGV0YWNoIChXZWJLaXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlKTsK
IAorQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9nZXRfZm9jdXNlZF9lbGVtZW50KFdlYktp
dEFjY2Vzc2libGUqIGFjY2Vzc2libGUpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLy8gQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGtfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBiYmNkNTdmLi41NWNmN2ZjIDEwMDY0
NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDA5LTA4LTA3ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256
b0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAg
ICAgICAgW0d0a10gRW5hYmxlIGFjY2Vzc2liaWxpdHkgaW4gR3RrIERSVAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU5ODkKKworICAgICAgICBBZGQg
U1BJIHRvIGdldCB0aGUgZm9jdXNlZCBhY2Nlc3NpYmxlIGVsZW1lbnQgdG8gYmUgdXNlZCBieSBE
UlQuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXR3ZWJmcmFtZS5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX2dldF9mb2N1
c2VkX2FjY2Vzc2libGVfZWxlbWVudCk6CisKIDIwMDktMDctMzAgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBhcHBjZWxlcmF0b3IuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBM
b3BleiwgR3VzdGF2byBOb3JvbmhhIGFuZCBKYW4gQWxvbnpvLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJp
dmF0ZS5oCmluZGV4IGY4MjkxNjcuLjBjM2ZiZDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRl
LmgKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAorI2luY2x1ZGUgPGF0ay9hdGsuaD4KICNpbmNsdWRl
IDxnbGliLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAKQEAgLTIxNyw2ICsyMTgsOSBA
QCBleHRlcm4gIkMiIHsKICAgICBXRUJLSVRfQVBJIHZvaWQKICAgICB3ZWJraXRfd2ViX2ZyYW1l
X2NsZWFyX21haW5fZnJhbWVfbmFtZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpOwogCisgICAgV0VC
S0lUX0FQSSBBdGtPYmplY3QqCisgICAgd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9hY2Nl
c3NpYmxlX2VsZW1lbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKwogICAgIFdFQktJVF9BUEkg
Z2NoYXIqCiAgICAgd2Via2l0X3dlYl92aWV3X2dldF9zZWxlY3RlZF90ZXh0IChXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldyk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmZyYW1lLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAppbmRleCBj
NDY1ODFkLi4wZjdhNWFhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJm
cmFtZS5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCkBAIC0z
Miw3ICszMiw5IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogI2luY2x1ZGUgIndlYmtp
dHByaXZhdGUuaCIKIAorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmgi
CiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkFYT2JqZWN0Q2Fj
aGUuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgogCisjaW5jbHVk
ZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KIAogLyoq
CkBAIC04NTUsMyArODU4LDI4IEBAIGdzaXplIHdlYmtpdF9nY19jb3VudF9qYXZhc2NyaXB0X29i
amVjdHMoKQogCiB9CiAKK0F0a09iamVjdCogd2Via2l0X3dlYl9mcmFtZV9nZXRfZm9jdXNlZF9h
Y2Nlc3NpYmxlX2VsZW1lbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfRlJBTUUoZnJhbWUpLCBOVUxMKTsKKworI2lmIEhB
VkUoQUNDRVNTSUJJTElUWSkKKyAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkpCisgICAgICAgIEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsK
KworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJpdiA9IGZyYW1lLT5wcml2OworICAgIGlm
ICghcHJpdi0+Y29yZUZyYW1lIHx8ICFwcml2LT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybiBOVUxMOworCisgICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19jYXN0PFJl
bmRlclZpZXcgKj4ocHJpdi0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKyAg
ICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQXRrT2JqZWN0KiB3cmFw
cGVyID0gIHByaXYtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShyb290KS0+d3JhcHBlcigpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisKKyAgICByZXR1cm4gd2Via2l0X2FjY2Vzc2libGVfZ2V0X2ZvY3VzZWRfZWxl
bWVudChXRUJLSVRfQUNDRVNTSUJMRSh3cmFwcGVyKSk7CisjZWxzZQorICAgIHJldHVybiBOVUxM
OworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKaW5kZXggMThkN2RiMS4uZmFmMGIwZiAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc4
IEBACiAyMDA5LTA4LTA3ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3Jn
PgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHdGtd
IEVuYWJsZSBhY2Nlc3NpYmlsaXR5IGluIEd0ayBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1OTg5CisKKyAgICAgICAgQWRkIEFjY2Vzc2liaWxp
dHkgc3VwcG9ydCB0byB0aGUgR1RLIERSVC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2d0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldExpbmtlZFVJRWxlbWVudHMpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0RG9jdW1lbnRMaW5rcyk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmVsZW1lbnRBdFBvaW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omdl
dENoaWxkQXRJbmRleCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRy
aWJ1dGVzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxp
bmtlZFVJRWxlbWVudHMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mRG9jdW1lbnRMaW5rcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
aXRsZVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRF
bGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNo
aWxkcmVuKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGVOYW1lcyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Omxhbmd1YWdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Ongp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoZWlnaHQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFgp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bWluVmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bWF4VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNj
cmlwdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VuYWJsZWQpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVy
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQWN0aW9uU3VwcG9ydGVkKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQpOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bGluZUZvckluZGV4KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxG
b3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0
ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0
ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
VmFsdWUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0
YWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnQpOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50KToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAod2ViVmlld1dpbmRv
d09iamVjdENsZWFyZWQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogR05VbWFrZWZpbGUu
YW06CisKKzIwMDktMDgtMDcgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5v
cmc+CisKICAgICAgICAgVW5yZXZpZXdlZCBHdGsgYnVpbGQgZml4LgogCiAgICAgICAgIERSVCBu
ZWVkcyBpbnRlcm5hbCBXVEYgc3ltYm9scyBzbyB3ZSBsaW5rIHRvIGxpYkphdmFTY3JpcHRDb3Jl
LmxhCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmgKaW5kZXggMGJmMGZlZi4uZDBiNjNjMyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCisrKyBiL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaApAQCAtMjcsNiArMjcsNyBA
QAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTT2JqZWN0UmVmLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDMsNiArNDQsOSBAQCB0
eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjaW5jbHVkZSA8
V2ViQ29yZS9DT01QdHIuaD4KIAogdHlwZWRlZiBDT01QdHI8SUFjY2Vzc2libGU+IFBsYXRmb3Jt
VUlFbGVtZW50OworI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGF0ay9hdGsuaD4KK3R5
cGVkZWYgQXRrT2JqZWN0KiBQbGF0Zm9ybVVJRWxlbWVudDsKICNlbHNlCiB0eXBlZGVmIHZvaWQq
IFBsYXRmb3JtVUlFbGVtZW50OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkyZTFkCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
R3RrLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWlj
aGFlbCBBbG9uem8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWUuaCIKKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCitleHRlcm4gIkMiIHsKK2V4dGVybiBBdGtP
YmplY3QqIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNjZXNzaWJsZV9lbGVtZW50KFdl
YktpdFdlYkZyYW1lKik7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcigpCit7Cit9CisKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIoKQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCit7CisgICAgQXRrT2JqZWN0KiBh
Y2Nlc3NpYmxlID0gIHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2ZvY3VzZWRfYWNjZXNzaWJsZV9lbGVt
ZW50KG1haW5GcmFtZSk7CisgICAgaWYgKCFhY2Nlc3NpYmxlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGFjY2Vzc2libGUpOworfQorCitB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVu
dCgpCit7CisgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dl
Yl92aWV3KG1haW5GcmFtZSk7CisgICAgQXRrT2JqZWN0KiBheE9iamVjdCA9IGd0a193aWRnZXRf
Z2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh2aWV3KSk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoYXhPYmplY3QpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRHdGsuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNmYxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEd0ay5j
cHAKQEAgLTAsMCArMSw0MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVs
IEFsb256bworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCIKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworI2luY2x1ZGUgPGF0ay9hdGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisKKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0
Zm9ybVVJRWxlbWVudCBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCit7Cit9CisK
K0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCYgb3RoZXIpCisgICAgOiBtX2VsZW1lbnQob3RoZXIubV9lbGVt
ZW50KQoreworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxl
bWVudCgpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0TGlua2VkVUlF
bGVtZW50cyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRzKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpn
ZXREb2N1bWVudExpbmtzKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omdl
dENoaWxkcmVuKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgY2hpbGRyZW4pCit7Cisg
ICAgaW50IGNvdW50ID0gY2hpbGRyZW5Db3VudCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgeworICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOworICAgICAgICBjaGls
ZHJlbi5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjaGlsZCkpOworICAgIH0KK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGVsZW1lbnRWZWN0b3IsIHVuc2lnbmVkIGxvY2F0aW9u
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbG9jYXRpb247IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKG1fZWxlbWVudCksIGkpOworICAgICAgICBl
bGVtZW50VmVjdG9yLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNoaWxkKSk7CisgICAg
fQorfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudCgpCit7Cisg
ICAgaWYgKCFtX2VsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKEFUS19J
U19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICByZXR1cm4gYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7Cit9CisKK0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQoaW50IHgs
IGludCB5KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwor
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0
SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IGNoaWxkcmVuOworICAgIGdldENoaWxkcmVuV2l0aFJhbmdlKGNoaWxkcmVuLCBpbmRleCwg
MSk7CisKKyAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBjaGls
ZHJlbi5hdCgwKTsKKworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pT
U3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxl
bWVudHMoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcygpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRp
dGxlVUlFbGVtZW50KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7
Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFy
ZW50RWxlbWVudCgpCit7CisgICAgQVNTRVJUKG1fZWxlbWVudCk7CisgICAgQXRrT2JqZWN0KiBw
YXJlbnQgPSAgYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisK
KyAgICByZXR1cm4gcGFyZW50ID8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChwYXJlbnQpIDogMDsK
K30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hp
bGRyZW4oKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGUoKQorewor
ICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1l
bnQpKTsKKworICAgIGlmICghcm9sZSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoYXRrX3JvbGVfZ2V0X25hbWUocm9sZSkpOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCit7CisgICAgY29uc3QgZ2NoYXIqIG5hbWUgPSBhdGtf
b2JqZWN0X2dldF9uYW1lKEFUS19PQkpFQ1QobV9lbGVtZW50KSk7CisKKyAgICBpZiAoIW5hbWUp
CisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG5hbWUpOworfQorCitKU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCit7CisgICAgY29u
c3QgZ2NoYXIqIGRlc2NyaXB0aW9uID0gYXRrX29iamVjdF9nZXRfZGVzY3JpcHRpb24oQVRLX09C
SkVDVChtX2VsZW1lbnQpKTsKKworICAgIGlmICghZGVzY3JpcHRpb24pCisgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGRlc2NyaXB0aW9uKTsKK30KKworSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGFuZ3VhZ2UoKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30K
KworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OngoKQoreworICAgIGludCB4LCB5Owor
CisgICAgYXRrX2NvbXBvbmVudF9nZXRfcG9zaXRpb24oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQp
LCAmeCwgJnksIEFUS19YWV9TQ1JFRU4pOworCisgICAgcmV0dXJuIHg7Cit9CisKK2RvdWJsZSBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKK3sKKyAgICBpbnQgeCwgeTsKKworICAgIGF0a19j
b21wb25lbnRfZ2V0X3Bvc2l0aW9uKEFUS19DT01QT05FTlQobV9lbGVtZW50KSwgJngsICZ5LCBB
VEtfWFlfU0NSRUVOKTsKKworICAgIHJldHVybiB5OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6d2lkdGgoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0OworCisgICAgYXRr
X2NvbXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhl
aWdodCk7CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK2RvdWJsZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpoZWlnaHQoKQoreworICAgIGludCB3aWR0aCwgaGVpZ2h0OworCisgICAgYXRrX2Nv
bXBvbmVudF9nZXRfc2l6ZShBVEtfQ09NUE9ORU5UKG1fZWxlbWVudCksICZ3aWR0aCwgJmhlaWdo
dCk7CisKKyAgICByZXR1cm4gaGVpZ2h0OworfQorCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Y2xpY2tQb2ludFgoKQoreworICAgIHJldHVybiAwLmY7Cit9CisKK2RvdWJsZSBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WSgpCit7CisgICAgcmV0dXJuIDAuZjsKK30K
KworCitkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKQoreworICAgIEdW
YWx1ZSB2YWx1ZSA9IHsgMCwgfTsKKworICAgIGlmICghQVRLX0lTX1ZBTFVFKG1fZWxlbWVudCkp
CisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgYXRrX3ZhbHVlX2dldF9jdXJyZW50X3ZhbHVl
KEFUS19WQUxVRShtX2VsZW1lbnQpLCAmdmFsdWUpOworCisgICAgaWYgKEdfVkFMVUVfSE9MRFNf
RE9VQkxFKCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBnX3ZhbHVlX2dldF9kb3VibGUoJnZhbHVl
KTsKKyAgICBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0lOVCgmdmFsdWUpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihnX3ZhbHVlX2dldF9pbnQoJnZhbHVlKSk7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gMC4wZjsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om1pblZhbHVlKCkKK3sKKyAgICBHVmFsdWUgdmFsdWUgPSB7IDAsIH07CisKKyAgICBpZiAo
IUFUS19JU19WQUxVRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIGF0
a192YWx1ZV9nZXRfbWluaW11bV92YWx1ZShBVEtfVkFMVUUobV9lbGVtZW50KSwgJnZhbHVlKTsK
KworICAgIGlmIChHX1ZBTFVFX0hPTERTX0RPVUJMRSgmdmFsdWUpKQorICAgICAgICByZXR1cm4g
Z192YWx1ZV9nZXRfZG91YmxlKCZ2YWx1ZSk7CisgICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19J
TlQoJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oZ192YWx1ZV9n
ZXRfaW50KCZ2YWx1ZSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDAuMGY7Cit9CisKK2Rv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSgpCit7CisgICAgR1ZhbHVlIHZh
bHVlID0geyAwLCB9OworCisgICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIDAuMGY7CisKKyAgICBhdGtfdmFsdWVfZ2V0X21heGltdW1fdmFsdWUoQVRLX1ZB
TFVFKG1fZWxlbWVudCksICZ2YWx1ZSk7CisKKyAgICBpZiAoR19WQUxVRV9IT0xEU19ET1VCTEUo
JnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGdfdmFsdWVfZ2V0X2RvdWJsZSgmdmFsdWUpOworICAg
IGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfSU5UKCZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KGdfdmFsdWVfZ2V0X2ludCgmdmFsdWUpKTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiAwLjBmOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp2YWx1ZURlc2NyaXB0aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
bnNlcnRpb25Qb2ludExpbmVOdW1iZXIoKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0FjdGlvblN1
cHBvcnRlZChKU1N0cmluZ1JlZiBhY3Rpb24pCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Jl
cXVpcmVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZDb2x1bW5IZWFkZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9CisKK0pTU3RyaW5nUmVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cygwLCAwKTsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1ucygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Cit9CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZp
c2libGVDZWxscygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSgpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlKCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Cit9
CisKK0pTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2Uo
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxp
bmVGb3JJbmRleChpbnQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiAw
OworfQorCitKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5n
ZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjZWxs
Rm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZSh1
bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKK30KKworSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
VmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVm
IGF0dHJpYnV0ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRl
Y3JlbWVudCgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggYmZlZmZjMi4u
YWM4MmRkOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBS
ZW5kZXJUcmVlLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJl
bmRlclRyZWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKIAorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJXb3JrUXVldWUuaCIKQEAgLTY4LDYgKzY5LDcgQEAgc3Rh
dGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwogc3RhdGljIGludCBkdW1wUGl4ZWxzOwogc3RhdGlj
IGludCBkdW1wVHJlZSA9IDE7CiAKK0FjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBheENvbnRyb2xs
ZXIgPSAwOwogTGF5b3V0VGVzdENvbnRyb2xsZXIqIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IDA7
CiBzdGF0aWMgR0NDb250cm9sbGVyKiBnY0NvbnRyb2xsZXIgPSAwOwogc3RhdGljIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXc7CkBAIC00NzksMTMgKzQ4MSwxNyBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3
TG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwg
dm9pZAogc3RhdGljIHZvaWQgd2ViVmlld1dpbmRvd09iamVjdENsZWFyZWQoV2ViS2l0V2ViVmll
dyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBncG9pbnRlciBkYXRhKQogewogICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBhc3NlcnQoZ0xheW91dFRlc3RDb250cm9sbGVyKTsK
KyAgICBBU1NFUlQoZ0xheW91dFRlc3RDb250cm9sbGVyKTsKIAogICAgIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZleGNlcHRp
b24pOwotICAgIGFzc2VydCghZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAK
ICAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0
LCAmZXhjZXB0aW9uKTsKICAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisKKyAgICBheENvbnRyb2xs
ZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAmZXhjZXB0aW9uKTsK
KyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYlZpZXdD
b25zb2xlTWVzc2FnZShXZWJLaXRXZWJWaWV3KiB2aWV3LCBjb25zdCBnY2hhciogbWVzc2FnZSwg
dW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGdjaGFyKiBzb3VyY2VJZCwgZ3BvaW50ZXIgZGF0YSkK
QEAgLTY2Niw2ICs2NzIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAg
IHNldERlZmF1bHRzVG9Db25zaXN0ZW50U3RhdGVWYWx1ZXNGb3JUZXN0aW5nKCk7CiAKICAgICBn
Y0NvbnRyb2xsZXIgPSBuZXcgR0NDb250cm9sbGVyKCk7CisgICAgYXhDb250cm9sbGVyID0gbmV3
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCk7CiAKICAgICBpZiAoYXJnYyA9PSBvcHRpbmQrMSAm
JiBzdHJjbXAoYXJndltvcHRpbmRdLCAiLSIpID09IDApIHsKICAgICAgICAgY2hhciBmaWxlbmFt
ZUJ1ZmZlclsyMDQ4XTsKQEAgLTY4OSw2ICs2OTYsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh
ciogYXJndltdKQogICAgIGRlbGV0ZSBnY0NvbnRyb2xsZXI7CiAgICAgZ2NDb250cm9sbGVyID0g
MDsKIAorICAgIGRlbGV0ZSBheENvbnRyb2xsZXI7CisgICAgYXhDb250cm9sbGVyID0gMDsKKwog
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbSBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFt
CmluZGV4IGE4YjZkYWQuLjQ4N2E0NzkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC00MCwxMCArNDAsMTIg
QEAgZHVtcHJlbmRlcnRyZWVfY3BwZmxhZ3MgOj0gXAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVf
Q1BQRkxBR1MgPSAkKGR1bXByZW5kZXJ0cmVlX2NwcGZsYWdzKQogCiBQcm9ncmFtc19EdW1wUmVu
ZGVyVHJlZV9TT1VSQ0VTID0gXAotCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmggXAotCVdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuaCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVQcmVm
aXguaCBcCisJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oIFwKKwlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmNwcCBcCisJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwIFwK
IAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuaCBcCiAJV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvSmF2YVNjcmlwdFRocmVhZGluZy5oIFwKQEAgLTU0LDYgKzU2LDgg
QEAgUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9Xb3JrUXVldWUuaCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvV29y
a1F1ZXVlSXRlbS5oIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jb25maWcuaCBcCisJ
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3Rr
LmNwcCBcCisJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRHdGsuY3BwIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRl
clRyZWUuY3BwIFwKIAlXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRy
ZWVHdGsuaCBcCiAJV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0dDQ29udHJvbGxlckd0
ay5jcHAgXA==
</data>
<flag name="review"
          id="18537"
          type_id="1"
          status="+"
          setter="xan.lopez"
    />
          </attachment>
      

    </bug>

</bugzilla>