<?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>25678</bug_id>
          
          <creation_ts>2009-05-10 17:16:08 -0700</creation_ts>
          <short_desc>[GTK] Implement ROLE_COMBO_BOX</short_desc>
          <delta_ts>2010-11-30 13:17:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>50022</dependson>
    
    <dependson>50062</dependson>
          <blocked>25531</blocked>
    
    <blocked>36146</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>gustavo</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>walker.willie</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>120582</commentid>
    <comment_count>0</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-05-10 17:16:08 -0700</bug_when>
    <thetext>It seems that accessible combo boxes have not yet been implemented in WebKit. There are a couple of variants that you could use as guides: Gecko and Gtk+ (see gtk-demo&apos;s Combo Box demo). Given a choice, I would suggest Gtk+, but as long as the following general characteristics are implemented, ATs such as Orca will be able to do the right thing:

1. The role should be ROLE_COMBO_BOX (currently WebKit is exposing combo boxes as ROLE_UNKNOWN).

2. The selectable items in the combo box should be exposed somehow. Both Gecko and Gtk+ combo boxes do this by giving the accessible combo box a single child of ROLE_MENU. The menu, in turn, has children of ROLE_MENU_ITEM, one for each selectable option in the combo box.

3. AT&apos;s should be able to ask for the selected item. You could do this via the accessible name (which seems to have already been done). But ideally the accessible selection interface will also be implemented as that seems to be more reliable. Both Gecko and Gtk+ do this for the menu which is the child of the combo box. Please see http://library.gnome.org/devel/atk/unstable/AtkSelection.html for more information.

4. The accessible stateset should include STATE_EXPANDABLE -- and STATE_EXPANDED when appropriate.

5. The accessible action interface should be implemented so that ATs can interact with the combo box (i.e. expand/collapse it). Gecko implements an &quot;open&quot; action; Gtk+ a &quot;press&quot; action. (Please see http://library.gnome.org/devel/atk/unstable/AtkAction.html for more info.)

6. Appropriate events should be emitted when the selection changes. Gecko emits an object:state-changed:focused event for the menu item; Gtk+ emits an object:selection-changed event for the combo box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167195</commentid>
    <comment_count>1</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-11-29 22:22:57 -0800</bug_when>
    <thetext>I started hacking at this over the weekend, and made quite a bit of progress. But it turns out to be somewhat more involved than I would have originally thought. So before I continue and start proposing patches, here&apos;s the deal...

Given this:

  &lt;body&gt;
    &lt;select id=&quot;component&quot; name=&quot;component&quot; size=&quot;1&quot;&gt;
      &lt;option value=&quot;Accessibility&quot;&gt;Accessibility&lt;/option&gt;
      &lt;option value=&quot;CSS&quot;&gt;CSS&lt;/option&gt;
      &lt;option selected value=&quot;Evangelism&quot;&gt;Evangelism&lt;/option&gt;
      &lt;option value=&quot;Forms&quot;&gt;Forms&lt;/option&gt;
    &lt;/select&gt;
  &lt;/body&gt;

DRT gives us this:

  layer at (0,0) size 118x83
    RenderView at (0,0) size 62x83
  layer at (0,0) size 118x83
    RenderBlock {HTML} at (0,0) size 62x83
      RenderBody {BODY} at (8,8) size 46x67
        RenderMenuList {SELECT} at (2,2) size 106x28 [bgcolor=#FFFFFF]
          RenderBlock (anonymous) at (4,4) size 81x20
            RenderText at (0,0) size 74x20
              text run at (0,0) width 74: &quot;Evangelism&quot;
        RenderText {#text} at (0,0) size 0x0
        RenderText {#text} at (0,0) size 0x0
        RenderText {#text} at (0,0) size 0x0

We expect this:

  -&gt; Document Frame
     -&gt; Evangelism (Combo Box)
        -&gt; Evangelism (Menu)
           -&gt; Accessibility (Menu Item)
           -&gt; CSS (Menu Item)
           -&gt; Evangelism (Menu Item)
           -&gt; Forms (Menu Item)

Associated problems:

  1. Hierarchy&apos;s in the wrong order w.r.t. options. We need to either
     swap the render objects associated with the impacted accessibles
     or render the objects in the expected order somehow.

  2. No *easy/immediate* way (that I&apos;ve found) to go from what seems
     to be a stub RenderText object to the associated String. (I am
     able to re-create things via SelectElement and OptionElement...)

In other words, WebKitGtk&apos;s rendering w.r.t. HTML combo boxes doesn&apos;t mesh all that well with what we need/expect.

In addition: VoiceOver seems to deal with this object in its collapsed form strictly as a pop up button rather than as a combo box. So what other a11y platforms need/expect doesn&apos;t mesh all that well with what we need/expect.

I am managing to hack around these things, but it&apos;s starting to get ugly. Any brilliant insights would welcome. Otherwise, I&apos;ll try to get some patches up before too long which more concretely illustrate the issues.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182566</commentid>
    <comment_count>2</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-01-19 18:08:00 -0800</bug_when>
    <thetext>Note to self: the fix just committed for bug 33773 might help solve this issue for us. (in which case, yea!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309842</commentid>
    <comment_count>3</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-16 11:23:53 -0800</bug_when>
    <thetext>Hi Joanie,

I&apos;ve just started working on this one recently, and I have a couple of doubts about it. See below...

(In reply to comment #0)
&gt; [...]
&gt; 1. The role should be ROLE_COMBO_BOX (currently WebKit is exposing combo boxes as 
&gt; ROLE_UNKNOWN).

Seems to be already fixed.

&gt; 2. The selectable items in the combo box should be exposed somehow. Both Gecko and Gtk+ 
&gt; combo boxes do this by giving the accessible combo box a single child of ROLE_MENU. The 
&gt; menu, in turn, has children of ROLE_MENU_ITEM, one for each selectable option in the combo box.

Already fixed.

&gt; 3. AT&apos;s should be able to ask for the selected item. You could do this via the accessible name 
&gt; (which seems to have already been done). But ideally the accessible selection interface will also be 
&gt; implemented as that seems to be more reliable. Both Gecko and Gtk+ do this for the menu which 
&gt; is the child of the combo box. Please see http://library.gnome.org/devel/atk/unstable/AtkSelection.html 
&gt; for more information.

In the patch I currently got, I&apos;ve implemented the AtkSelection interface in the topmost object in that hierarchy, that is the one with role ATK_ROLE_COMBO_BOX (which has a child of role ATK_ROLE_MENU holding the items, with role ATK_ROLE_MENU_ITEM). This allows selecting, unselecting and asking for the selected item right from that topmost object (the combo box).

Is it the expected behaviour? (asking this since I&apos;ve seen different situations in Gecko and Gtk+, but because of the internals of WebCore this option seems to be the best one to me. But I can be wrong)

&gt; 4. The accessible stateset should include STATE_EXPANDABLE -- and STATE_EXPANDED when 
&gt; appropriate.

I didn&apos;t find a not hackish way yet to do this without hardcoding. My current solution is the following:

   [...]
   @@ -500,6 +501,12 @@ static void setAtkStateSetFromCoreObject(AccessibilityObject* coreObject,   
   AtkSta
            atk_state_set_add_state(stateSet, ATK_STATE_SENSITIVE);
        }
 
   +    if (coreObject-&gt;canSetExpandedAttribute())
   +        atk_state_set_add_state(stateSet, ATK_STATE_EXPANDABLE);
   +
   +    if (coreObject-&gt;isExpanded())
   +        atk_state_set_add_state(stateSet, ATK_STATE_EXPANDED);
   +
         if (coreObject-&gt;canSetFocusAttribute())
             atk_state_set_add_state(stateSet, ATK_STATE_FOCUSABLE);
   [...]

... but not sure whether this would be enough.

&gt; 5. The accessible action interface should be implemented so that ATs can interact with the combo box 
&gt; (i.e. expand/collapse it). Gecko implements an &quot;open&quot; action; Gtk+ a &quot;press&quot; action. (Please see 
&gt; http://library.gnome.org/devel/atk/unstable/AtkAction.html for more info.)

This works out-of-the-box :-), because the implementation of the AtkAction interface just relays on performing the default action for the given coreObject in WebCore... so it&apos;s as easy as implement the interface and let WebCore either to do something or to return False in case nothing happened.

But in this specific case, I can clearly open/close the combo box, selecting items... and so on.

&gt; 6. Appropriate events should be emitted when the selection changes. Gecko emits an 
&gt; object:state-changed:focused event for the menu item; Gtk+ emits an object:selection-changed
&gt; event for the combo box.

Which one would be the right event then to be issued and from where (assuming the combo box object right now)?

(In reply to comment #1)
&gt; [...]
&gt; We expect this:
&gt; 
&gt;   -&gt; Document Frame
&gt;      -&gt; Evangelism (Combo Box)
&gt;         -&gt; Evangelism (Menu)
&gt;            -&gt; Accessibility (Menu Item)
&gt;            -&gt; CSS (Menu Item)
&gt;            -&gt; Evangelism (Menu Item)
&gt;            -&gt; Forms (Menu Item)

As far as I can see in Accerciser, that&apos;s exactly what I was geting before starting to work on this. Perhaps I&apos;m misunderstanding things as the result of this description being already almost one year old :-)

Could you confirm that this &apos;expected&apos; output is nowadays the actual one?

&gt; Associated problems:
&gt; 
&gt;   1. Hierarchy&apos;s in the wrong order w.r.t. options. We need to either
&gt;      swap the render objects associated with the impacted accessibles
&gt;      or render the objects in the expected order somehow.

I don&apos;t understand properly what needs to be swapped here... perhaps another &apos;already fixed&apos; thing? :-)

&gt;   2. No *easy/immediate* way (that I&apos;ve found) to go from what seems
&gt;      to be a stub RenderText object to the associated String. (I am
&gt;      able to re-create things via SelectElement and OptionElement...)

In my current patch, that&apos;s no longer an issue ;-): you just can retrieve the text through the implementation of the AtkText interface for each menu item (could you confirm this is correct? I just followed gecko here).

&gt; I am managing to hack around these things, but it&apos;s starting to get ugly. Any brilliant insights would 
&gt; welcome. Otherwise, I&apos;ll try to get some patches up before too long which more concretely illustrate
&gt; the issues.

Nothing brilliant yet, just some messy and experimental code at the moment (so that&apos;s why I&apos;m not attaching anything yet), but still I&apos;m on my way, and I hope that with some more time to finish this, some awesome help from your side (when possible, I don&apos;t want to put any pressure on you) answering the doubts on this comment and a final stage of polishing and writing unit tests could help me making it to a nice patch :-)

Thanks in advance and sorry for the long comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310292</commentid>
    <comment_count>4</comment_count>
      <attachid>74116</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-17 08:12:40 -0800</bug_when>
    <thetext>Created attachment 74116
Patch proposal + Unit test

After my long dissertation in comment #3 (sorry again!) I&apos;ve came across a process of carefully checking what GTK and gecko does, making some assumptions here and there and, after all that work I finally got what looks to me it could be a complete patch to fix ts issue (new unit test included).

However, I&apos;m more than open to make major changes to the patch in case someone (Joanie?) thought some parts are not properly implemented from the POV of ATK-based AT&apos;s. I&apos;ve tried to follow what GTK does and I think everything should be covered, but you never know... so that&apos;s it, just trying to help moving this thing forward.

Hence, asking for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310331</commentid>
    <comment_count>5</comment_count>
      <attachid>74116</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-17 09:19:42 -0800</bug_when>
    <thetext>Comment on attachment 74116
Patch proposal + Unit test

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

Nice patch. I have a couple questions...

&gt; WebCore/ChangeLog:23
&gt; +        of that methor to an overriden version of stringValue(), which is

methor -&gt; method

&gt; WebCore/accessibility/AccessibilityMenuListOption.cpp:113
&gt; +String AccessibilityMenuListOption::stringValue() const

I&apos;m not sure about the naming here. Maybe Chris can give the nod.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:768
&gt; +        const Vector&lt;Element*&gt; listItems = selectNode-&gt;listItems();
&gt;  
&gt; -    // TODO: Combo boxes
&gt; +        if (selectedIndex &lt; 0 || selectedIndex &gt;= (int)listItems.size())

Is it possible for the selectedIndex to be &gt; listeItems.size()? It doesn&apos;t look like it after staring at SelectElement::selectedIndex. If you still need to cast to int, be sure to use a static_cast.

&gt; WebCore/platform/gtk/PopupMenuGtk.cpp:65
&gt; -    int x, y;
&gt; -    gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(view-&gt;hostWindow()-&gt;platformPageClient())), &amp;x, &amp;y);
&gt; +    int x = 0;
&gt; +    int y = 0;
&gt; +    GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(view-&gt;hostWindow()-&gt;platformPageClient()));
&gt; +    if (window)
&gt; +        gdk_window_get_origin(window, &amp;x, &amp;y);

Is this change related?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310343</commentid>
    <comment_count>6</comment_count>
      <attachid>74127</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-17 09:40:44 -0800</bug_when>
    <thetext>Created attachment 74127
Patch proposal + Unit test

(In reply to comment #5)
&gt; [...]
&gt; &gt; WebCore/ChangeLog:23
&gt; &gt; +        of that methor to an overriden version of stringValue(), which is
&gt; 
&gt; methor -&gt; method

Ooops! Fixed.

&gt; &gt; WebCore/accessibility/AccessibilityMenuListOption.cpp:113
&gt; &gt; +String AccessibilityMenuListOption::stringValue() const
&gt; 
&gt; I&apos;m not sure about the naming here. Maybe Chris can give the nod.

Well, the naming must be exactly that one (&apos;stringValue&apos;) since what I want to do is precisely to override the stringValue() method from the superclass AccessibilityObject, so no more black magic is needed and everything works without changing anything else :-)

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:768
&gt; &gt; +        const Vector&lt;Element*&gt; listItems = selectNode-&gt;listItems();
&gt; &gt;  
&gt; &gt; -    // TODO: Combo boxes
&gt; &gt; +        if (selectedIndex &lt; 0 || selectedIndex &gt;= (int)listItems.size())
&gt; 
&gt; Is it possible for the selectedIndex to be &gt; listeItems.size()? It doesn&apos;t look like it after staring at SelectElement::selectedIndex. If you still need to cast to int, be sure to use a static_cast.

I thought of that as a nice sanity check, to explicitly make sure the returned value for selectedIndex is actually between those two limits. But if you think I&apos;m being too paranoid I have no problems with removing that (which would also remove the previous line, btw).  For the time being I&apos;ll leave it as it is.

About the static_cast: sorry. Fixed!

&gt; &gt; WebCore/platform/gtk/PopupMenuGtk.cpp:65
&gt; &gt; -    int x, y;
&gt; &gt; -    gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(view-&gt;hostWindow()-&gt;platformPageClient())), &amp;x, &amp;y);
&gt; &gt; +    int x = 0;
&gt; &gt; +    int y = 0;
&gt; &gt; +    GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(view-&gt;hostWindow()-&gt;platformPageClient()));
&gt; &gt; +    if (window)
&gt; &gt; +        gdk_window_get_origin(window, &amp;x, &amp;y);
&gt; 
&gt; Is this change related?

Yes, it&apos;s related to this patch because without that extra null check the unit test will crash with a segfault, since the gdk_window_get_origin() function would be called over a NULL value, as returned from gtk_widget_get_window().

Now attaching a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311704</commentid>
    <comment_count>7</comment_count>
      <attachid>74127</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-11-19 14:49:39 -0800</bug_when>
    <thetext>Comment on attachment 74127
Patch proposal + Unit test

looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312170</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-21 15:04:06 -0800</bug_when>
    <thetext>Committed r72499: &lt;http://trac.webkit.org/changeset/72499&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313287</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-24 07:27:11 -0800</bug_when>
    <thetext>This change seems to be causing lots of crashes on the bots. Here&apos;s a backtrace from http://webkit-bots.igalia.com/amd64/svn_72644.core-when_1290573304-_-who_testatk-_-why_11.trace.html

warning: Can&apos;t read pathname for load map: Input/output error.
Core was generated by `/home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/Programs/unitt&apos;.
Program terminated with signal 11, Segmentation fault.
#0  0x00002baaa52131e4 in WebCore::SelectElement::listBoxOnChange (data=..., element=0x1a8f5a0) at ../../WebCore/dom/SelectElement.cpp:180
180	    ASSERT(!data.usesMenuList() || data.multiple());

Thread 2 (Thread 581):
#0  0x00002baaaa4dd16c in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00002baaa5ed508e in WTF::ThreadCondition::wait (this=0x197e050, mutex=...) at ../../JavaScriptCore/wtf/ThreadingPthreads.cpp:351
#2  0x00002baaa54a6693 in WebCore::IconDatabase::syncThreadMainLoop (this=0x197df80) at ../../WebCore/loader/icon/IconDatabase.cpp:1420
#3  0x00002baaa54a4bbc in WebCore::IconDatabase::iconDatabaseSyncThread (this=0x197df80) at ../../WebCore/loader/icon/IconDatabase.cpp:1044
#4  0x00002baaa54a4702 in WebCore::IconDatabase::iconDatabaseSyncThreadStart (vIconDatabase=0x197df80) at ../../WebCore/loader/icon/IconDatabase.cpp:947
#5  0x00002baaa5ed4339 in WTF::threadEntryPoint (contextData=0x19865c0) at ../../JavaScriptCore/wtf/Threading.cpp:65
#6  0x00002baaaa4d88ba in start_thread () from /lib/libpthread.so.0
#7  0x00002baaaa7be02d in clone () from /lib/libc.so.6
#8  0x0000000000000000 in ?? ()

Thread 1 (Thread 580):
#0  0x00002baaa52131e4 in WebCore::SelectElement::listBoxOnChange (data=..., element=0x1a8f5a0) at ../../WebCore/dom/SelectElement.cpp:180
#1  0x00002baaa5215fe2 in WebCore::SelectElement::accessKeySetSelectedIndex (data=..., element=0x1a8f5a0, index=0) at ../../WebCore/dom/SelectElement.cpp:953
#2  0x00002baaa5346b48 in WebCore::HTMLSelectElement::accessKeySetSelectedIndex (this=0x1a8f5a0, index=0) at ../../WebCore/html/HTMLSelectElement.cpp:378
#3  0x00002baaa5340030 in WebCore::HTMLOptionElement::accessKeyAction (this=0x1991540) at ../../WebCore/html/HTMLOptionElement.cpp:133
#4  0x00002baaa4f717d0 in WebCore::AccessibilityObject::press (this=0x1ac9b50) at ../../WebCore/accessibility/AccessibilityObject.cpp:147
#5  0x00002baaa5942013 in WebCore::AccessibilityObject::performDefaultAction (this=0x1ac9b50) at ../../WebCore/accessibility/AccessibilityObject.h:443
#6  0x00002baaa593c0f8 in webkit_accessible_action_do_action (action=0x19d69e0, i=0) at ../../WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:664
#7  0x000000000040357a in testWebkitAtkComboBox () at ../../WebKit/gtk/tests/testatk.c:285
#8  0x00002baaaa259ed3 in test_case_run (suite=0x193f140, path=0x2baaaa2a4ebe &quot;&quot;) at /tmp/buildd/glib2.0-2.24.1/glib/gtestutils.c:1138
#9  g_test_run_suite_internal (suite=0x193f140, path=0x2baaaa2a4ebe &quot;&quot;) at /tmp/buildd/glib2.0-2.24.1/glib/gtestutils.c:1187
#10 0x00002baaaa25a046 in g_test_run_suite_internal (suite=&lt;value optimized out&gt;, path=0x2baaaa2a4ebe &quot;&quot;) at /tmp/buildd/glib2.0-2.24.1/glib/gtestutils.c:1197
#11 0x00002baaaa25a046 in g_test_run_suite_internal (suite=&lt;value optimized out&gt;, path=0x2baaaa2a4ebe &quot;&quot;) at /tmp/buildd/glib2.0-2.24.1/glib/gtestutils.c:1197
#12 0x00002baaaa25a32b in IA__g_test_run_suite (suite=0x193f100) at /tmp/buildd/glib2.0-2.24.1/glib/gtestutils.c:1246
#13 0x000000000040c554 in main (argc=1, argv=0x7fff92600348) at ../../WebKit/gtk/tests/testatk.c:1335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313309</commentid>
    <comment_count>10</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-24 08:17:58 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; This change seems to be causing lots of crashes on the bots. Here&apos;s a backtrace from http://webkit-bots.igalia.com/amd64/svn_72644.core-when_1290573304-_-who_testatk-_-why_11.trace.html
&gt; 

OMG! Reopening bug as per the rollout then...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313342</commentid>
    <comment_count>11</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-24 09:34:15 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; [...]
&gt; Program terminated with signal 11, Segmentation fault.
&gt; #0  0x00002baaa52131e4 in WebCore::SelectElement::listBoxOnChange (data=..., element=0x1a8f5a0) at ../../WebCore/dom/SelectElement.cpp:180
&gt; 180        ASSERT(!data.usesMenuList() || data.multiple());

It&apos;s kind of &quot;funny&quot; (not the best word, though) to realize that the patch itself is not causing the crash but something else triggered by the unit test (probably unrelated to the issue being fixed). Anyway, as Martin said to me, the crash was worth as it probably uncovered another issue, which I already have a theory for...

It looks like the problem is that this assertion because the combo box (dropdown list) being tested here is actually not compliant with such an statement:

    (gdb) p data.usesMenuList()
    $6 = true
    (gdb) p data.multiple()    
    $7 = false

This situation makes me think that perhaps what it&apos;s wrong here is the assertion itself, which might be wrong as it&apos;d be proved by the fact that a combo box like this one actually &quot;uses a menu list&quot; while, at the same time, doesn&apos;t allow &quot;multiple&quot; selections.

But perhaps, I&apos;m missing something, so before proposing getting rid of that assertion I&apos;d like to hear other&apos;s opinions and/or suggestions, since that part of the code (HTML elements) it&apos;s pretty new for me, so I&apos;m somehow wild guessing at this point.

Hence, adding Chris Fleizach to CC (and sorry Chris for adding you to a bug for the second time during today :P)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313364</commentid>
    <comment_count>12</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-11-24 10:07:10 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)

&gt; 
&gt; This situation makes me think that perhaps what it&apos;s wrong here is the assertion itself, which might be wrong as it&apos;d be proved by the fact that a combo box like this one actually &quot;uses a menu list&quot; while, at the same time, doesn&apos;t allow &quot;multiple&quot; selections.
&gt; 
I can&apos;t say what this assert is trying to protect. best bet is to svn blame that line and CC the person who added it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313664</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-25 03:02:14 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I can&apos;t say what this assert is trying to protect. best bet is to svn blame that line and CC the person who
&gt; added it.

I just filed a new bug blocking this one (since I still think current patch for this bug is valid), adding to CC the people involved in svn blame, as you suggested: bug 50062.

Hope to be able to re-integrate the patch here as soon as we get that other new bug fixed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315158</commentid>
    <comment_count>14</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-30 10:53:46 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; [...]
&gt; I just filed a new bug blocking this one (since I still think current patch for this bug is valid), adding to CC the people involved in svn blame, as you suggested: bug 50062.
&gt; 
&gt; Hope to be able to re-integrate the patch here as soon as we get that other new bug fixed...

Now that bug 50062 has been fixed, it&apos;s safe again to reapply this patch again (no changes needed), but  I&apos;d appreaciate at least some confirmation from one reviewer (specially from Chris, who reviewed+ the patch) before just going ahead with committing it back to SVN.

Hence, waiting for confirmation. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315230</commentid>
    <comment_count>15</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-11-30 12:17:02 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; [...]
&gt; &gt; I just filed a new bug blocking this one (since I still think current patch for this bug is valid), adding to CC the people involved in svn blame, as you suggested: bug 50062.
&gt; &gt; 
&gt; &gt; Hope to be able to re-integrate the patch here as soon as we get that other new bug fixed...
&gt; 
&gt; Now that bug 50062 has been fixed, it&apos;s safe again to reapply this patch again (no changes needed), but  I&apos;d appreaciate at least some confirmation from one reviewer (specially from Chris, who reviewed+ the patch) before just going ahead with committing it back to SVN.
&gt; 
&gt; Hence, waiting for confirmation. Thanks!

go for it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315265</commentid>
    <comment_count>16</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-11-30 13:17:20 -0800</bug_when>
    <thetext>Committed r72958: &lt;http://trac.webkit.org/changeset/72958&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74116</attachid>
            <date>2010-11-17 08:12:40 -0800</date>
            <delta_ts>2010-11-17 09:40:44 -0800</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-2010-11-17-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>29309</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSAzYWJlMjJhZjQxODg1ZTE2M2ViNTYwNGNhMmQ2YmUwZDA4MjhkN2ZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE3IE5vdiAyMDEwIDE3OjA0OjM1ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0xMS0xNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBJbXBs
ZW1lbnQgUk9MRV9DT01CT19CT1gKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU2NzgKCiAgICAgICAgSW1wbGVtZW50IHRoZSByZW1haW5pbmcgYml0cyBm
b3IgY29tYm8gYm94ZXMuCgogICAgICAgIFRoaXMgcGF0Y2ggZmluaXNoZXMgdGhlIGltcGxlbWVu
dGF0aW9uLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCiAgICAgICAgdGhlIEF0ayBsaWJyYXJ5
LCBvZiB0aG9zZSBvYmplY3RzIGV4cG9zZWQgdG8gQVRLIGFzIGNvbWJvIGJveGVzLAogICAgICAg
IGFuZCB0aGVpciByZWxhdGVkIGVsZW1lbnRzIChtZW51cyBhbmQgbWVudSBpdGVtcykuIEl0IHRo
ZXJlZm9yZQogICAgICAgIGltcGxlbWVudHMgdGhlIHByb3BlciBpbnRlcmZhY2VzIGZvciBlYWNo
IHR5cGUgb2Ygb2JqZWN0IHJlbGF0ZWQKICAgICAgICB0byBjb21ibyBib3hlcyAoQXRrU2VsZWN0
aW9uIGZvciB0aGUgY29tYm8gYm94LCBBdGtUZXh0IGZvciBldmVyeQogICAgICAgIG1lbnUgaXRl
bSBhbmQgQXRrQWN0aW9uIGZvciB0aGUgY29tYm8gYm94LCB0aGUgbWVudSBhbmQgdGhlIG1lbnUK
ICAgICAgICBpdGVtcyksIHRha2VzIGNhcmUgb2YgZW1pdHRpbmcgdGhlIHByb3BlciBzaWduYWxz
IHdoZW4gZm9jdXMgb3IgYQogICAgICAgIGdpdmVuIGEgc2VsZWN0aW9uIGNoYW5nZXMgYW5kIGFk
ZHMgYSBuZXcgdW5pdCB0ZXN0IHRvIGNoZWNrIGFsbAogICAgICAgIHRoaXMgbmV3IHN0dWZmLgoK
ICAgICAgICBNYWtlIHBvc3NpYmxlIHRvIGFzayBhbiBBY2Nlc3NpYmxlTWVudUxpc3RPcHRpb24g
Zm9yIGEgc2Vuc2libGUKICAgICAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24sIHNvIGZhciBvbmx5
IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBwcml2YXRlCiAgICAgICAgYW5kIE1TQUEgcmVsYXRlZCBt
ZXRob2QgbmFtZUZvck1TQUEuIEp1c3QgbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uCiAgICAgICAg
b2YgdGhhdCBtZXRob3IgdG8gYW4gb3ZlcnJpZGVuIHZlcnNpb24gb2Ygc3RyaW5nVmFsdWUoKSwg
d2hpY2ggaXMKICAgICAgICBwbGF0Zm9ybSBpbmRlcGVuZGVudCwgYW5kIGNhbGxlZCB0aGF0IGZy
b20gbmFtZUZvck1TQUEoKS4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdE9wdGlvbi5oOgogICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb24uY3BwOgogICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RP
cHRpb246Om5hbWVGb3JNU0FBKTogSnVzdCBjYWxsIHRvCiAgICAgICAgc3RyaW5nVmFsdWUoKSwg
d2hpY2ggaG9sZHMgZnJvbSBub3cgb24gdGhhdCB1c2VkIHRvIGJlIGhlcmUuCiAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c3RyaW5nVmFsdWUpOiBOZXcsIG92
ZXJyaWRlCiAgICAgICAgb2YgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nVmFsdWUoKSB0byBy
ZXR1cm4gYSBwcm9wZXIgc3RyaW5nLgoKICAgICAgICBFbWl0IHRoZSBtaXNzaW5nIHNpZ25hbHMg
d2hlbiBhIHNlbGVjdGlvbiBpcyBtYWRlLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FY
T2JqZWN0Q2FjaGVBdGsuY3BwOgogICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0
UGxhdGZvcm1Ob3RpZmljYXRpb24pOiBFbWl0IHRoZSB1c3VhbAogICAgICAgICdmb2N1cycgc2ln
bmFscyB3aGVuIGEgc2VsZWN0aW9uIGlzIG1hZGUgb3ZlciB0aGUgY29tYm8gYm94LgoKICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoK
ICAgICAgICAoc2V0QXRrU3RhdGVTZXRGcm9tQ29yZU9iamVjdCk6IEVuc3VyZSB0aGUgRVhQQU5E
QUJMRSBhbmQgRVhQQU5ERUQKICAgICAgICBBdGsgc3RhdGVzIGFyZSBhZGRlZCB0byB0aGUgc3Rh
dGUgc2V0IHdoZW4gbmVlZGVkLgogICAgICAgIChsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKTogTmV3
LCByZXR1cm5zIHRoZSBwcm9wZXIgbGlzdCBvYmplY3QgKHRoZQogICAgICAgIG9uZSBob2xkaW5n
IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zIGFzIGl0cyBjaGlsZHJlbikgZm9yIGFuCiAg
ICAgICAgc3BlY2lmaWMgQXRrT2JqZWN0IGltcGxlbWVudGluZyBBdGtTZWxlY3Rpb24uIFRoaXMg
aXMgbmVlZGVkCiAgICAgICAgYmVjYXVzZSBzb21ldGltZXMgdGhlIHNlbGVjdGFibGUgb3B0aW9u
cyBhcmUgbm90IGRpcmVjdGx5IGNoaWxkcmVuCiAgICAgICAgb2YgdGhlIEF0a1NlbGVjdGlvbiBv
YmplY3QgKGkuZS4gYSBjb21ibyBib3ggaGFzIGEgJ21lbnUnIG9iamVjdAogICAgICAgIGFzIGl0
cyBvbmx5IGNoaWxkIG9mIGl0LCBob2xkaW5nIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXMgY2hpbGRy
ZW4pLgogICAgICAgIChvcHRpb25Gcm9tTGlzdCk6IFVzZSBsaXN0T2JqZWN0Rm9yU2VsZWN0aW9u
KCkgdG8gZ2V0IHRoZSBhY3R1YWwKICAgICAgICBvYmplY3QgaG9sZGluZyB0aGUgbGlzdCBvZiBj
aGlsZHJlbiBhcyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICAgICAgKG9wdGlvbkZyb21TZWxl
Y3Rpb24pOiBBZGQgc3VwcG9ydCBmb3IgY29tYm8gYm94ZXMuCiAgICAgICAgKHdlYmtpdF9hY2Nl
c3NpYmxlX3NlbGVjdGlvbl9hZGRfc2VsZWN0aW9uKTogRGl0dG8uCiAgICAgICAgKHdlYmtpdF9h
Y2Nlc3NpYmxlX3NlbGVjdGlvbl9jbGVhcl9zZWxlY3Rpb24pOiBEaXR0by4KICAgICAgICAod2Vi
a2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQpOiBEaXR0by4KICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKTogRGl0
dG8uCiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZW1vdmVfc2VsZWN0aW9u
KTogRGl0dG8uCiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQpOiBNYWtl
cyBzdXJlIHN0cmluZ1ZhbHVlKCkgaXMKICAgICAgICBjb25zaWRlcmVkIHRvIGdldCB0aGUgcmVz
dWx0IHN1YnN0cmluZyB3aGVuIGl0IHdhcyBhbHJlYWR5CiAgICAgICAgY29uc2lkZXJlZCB3aGVu
IGNoZWNraW5nIHRoZSBtYXhpbXVtIHRleHQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0LgogICAgICAg
IChnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjdCk6IE1ha2Ugc3VyZSB0aGUgQXRrU2VsZWN0aW9u
IGludGVyZmFjZQogICAgICAgIGlzIGltcGxlbWVudGVkIGZvciB0aGUgY29tYm8gYm94ZXMsIHRo
YXQgdGhlIEF0a1RleHQgaXMKICAgICAgICBpbXBsZW1lbnRlZCBmb3IgdGhlIG1lbnUgaXRlbXMg
YW5kIHRoYXQgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgaXMKICAgICAgICBub3cgaW1wbGVtZW50
ZWQgZm9yIGV2ZXJ5IG9iamVjdCAoV2ViQ29yZSB3aWxsIGRlY2lkZSB3aGF0IHRvIGRvKS4KCiAg
ICAgICAgQXZvaWQgYSBzZWdmYXVsdCBjcmFzaCB3aGVuIHVzaW5nIHRoaXMgZnJvbSB1bml0IHRl
c3RzLgoKICAgICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwOgogICAgICAgIChX
ZWJDb3JlOjpQb3B1cE1lbnVHdGs6OnNob3cpOiBNYWtlIHN1cmUgd2UgZ290IGEgdmFsaWQgR2Rr
V2luZG93CiAgICAgICAgYmVmb3JlIGNhbGxpbmcgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKCkgb3Zl
ciBpdC4KCjIwMTAtMTEtMTcgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10g
SW1wbGVtZW50IFJPTEVfQ09NQk9fQk9YCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1Njc4CgogICAgICAgIE5ldyB0ZXN0IHRvIGNoZWNrIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgY29tYm8gYm94ZXMuCgogICAgICAgICogdGVzdHMvdGVzdGF0ay5j
OgogICAgICAgICh0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOiBOZXcgdGVzdCwgY2hlY2tpbmcgdGhh
dCB0aGUgcm9sZXMgYW5kIHRoZQogICAgICAgIGltcGxlbWVudGVkIGludGVyZmFjZXMgZm9yIGEg
Y29tYm8gYm94IGFuZCBpdHMgZGVzY2VuZGFudHMgd29yay4KICAgICAgICAobWFpbik6IEFkZGVk
IHRoZSBuZXcgdW5pdCB0ZXN0LgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICA2OSArKysrKysrKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwICB8ICAgIDcgKy0KIC4uLi9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oICAgIHwgICAgMSArCiBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwICAgICB8ICAgMTEgKystCiAuLi4v
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAgICAgICAgICB8ICAxMzQgKysr
KysrKysrKysrKysrKy0tLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAg
ICAgICAgICAgICAgIHwgICAgNyArLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDE0ICsrCiBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDQgKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNo
YW5nZWQsIDMxNyBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE2MTJhMTAuLjY2NzVj
N2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzIgQEAKKzIwMTAtMTEtMTcgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2Fu
Y2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBST0xFX0NPTUJPX0JPWAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzgKKworICAgICAgICBJbXBsZW1l
bnQgdGhlIHJlbWFpbmluZyBiaXRzIGZvciBjb21ibyBib3hlcy4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpbmlzaGVzIHRoZSBpbXBsZW1lbnRhdGlvbiwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBv
ZgorICAgICAgICB0aGUgQXRrIGxpYnJhcnksIG9mIHRob3NlIG9iamVjdHMgZXhwb3NlZCB0byBB
VEsgYXMgY29tYm8gYm94ZXMsCisgICAgICAgIGFuZCB0aGVpciByZWxhdGVkIGVsZW1lbnRzICht
ZW51cyBhbmQgbWVudSBpdGVtcykuIEl0IHRoZXJlZm9yZQorICAgICAgICBpbXBsZW1lbnRzIHRo
ZSBwcm9wZXIgaW50ZXJmYWNlcyBmb3IgZWFjaCB0eXBlIG9mIG9iamVjdCByZWxhdGVkCisgICAg
ICAgIHRvIGNvbWJvIGJveGVzIChBdGtTZWxlY3Rpb24gZm9yIHRoZSBjb21ibyBib3gsIEF0a1Rl
eHQgZm9yIGV2ZXJ5CisgICAgICAgIG1lbnUgaXRlbSBhbmQgQXRrQWN0aW9uIGZvciB0aGUgY29t
Ym8gYm94LCB0aGUgbWVudSBhbmQgdGhlIG1lbnUKKyAgICAgICAgaXRlbXMpLCB0YWtlcyBjYXJl
IG9mIGVtaXR0aW5nIHRoZSBwcm9wZXIgc2lnbmFscyB3aGVuIGZvY3VzIG9yIGEKKyAgICAgICAg
Z2l2ZW4gYSBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgYWRkcyBhIG5ldyB1bml0IHRlc3QgdG8gY2hl
Y2sgYWxsCisgICAgICAgIHRoaXMgbmV3IHN0dWZmLgorCisgICAgICAgIE1ha2UgcG9zc2libGUg
dG8gYXNrIGFuIEFjY2Vzc2libGVNZW51TGlzdE9wdGlvbiBmb3IgYSBzZW5zaWJsZQorICAgICAg
ICBzdHJpbmcgcmVwcmVzZW50YXRpb24sIHNvIGZhciBvbmx5IGF2YWlsYWJsZSB0aHJvdWdoIHRo
ZSBwcml2YXRlCisgICAgICAgIGFuZCBNU0FBIHJlbGF0ZWQgbWV0aG9kIG5hbWVGb3JNU0FBLiBK
dXN0IG1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiB0aGF0IG1ldGhvciB0byBh
biBvdmVycmlkZW4gdmVyc2lvbiBvZiBzdHJpbmdWYWx1ZSgpLCB3aGljaCBpcworICAgICAgICBw
bGF0Zm9ybSBpbmRlcGVuZGVudCwgYW5kIGNhbGxlZCB0aGF0IGZyb20gbmFtZUZvck1TQUEoKS4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpuYW1lRm9y
TVNBQSk6IEp1c3QgY2FsbCB0bworICAgICAgICBzdHJpbmdWYWx1ZSgpLCB3aGljaCBob2xkcyBm
cm9tIG5vdyBvbiB0aGF0IHVzZWQgdG8gYmUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c3RyaW5nVmFsdWUpOiBOZXcsIG92ZXJyaWRlCisgICAg
ICAgIG9mIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ1ZhbHVlKCkgdG8gcmV0dXJuIGEgcHJv
cGVyIHN0cmluZy4KKworICAgICAgICBFbWl0IHRoZSBtaXNzaW5nIHNpZ25hbHMgd2hlbiBhIHNl
bGVjdGlvbiBpcyBtYWRlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RD
YWNoZUF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiBFbWl0IHRoZSB1c3VhbAorICAgICAgICAnZm9jdXMnIHNpZ25hbHMg
d2hlbiBhIHNlbGVjdGlvbiBpcyBtYWRlIG92ZXIgdGhlIGNvbWJvIGJveC4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAg
ICAgICAgKHNldEF0a1N0YXRlU2V0RnJvbUNvcmVPYmplY3QpOiBFbnN1cmUgdGhlIEVYUEFOREFC
TEUgYW5kIEVYUEFOREVECisgICAgICAgIEF0ayBzdGF0ZXMgYXJlIGFkZGVkIHRvIHRoZSBzdGF0
ZSBzZXQgd2hlbiBuZWVkZWQuCisgICAgICAgIChsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKTogTmV3
LCByZXR1cm5zIHRoZSBwcm9wZXIgbGlzdCBvYmplY3QgKHRoZQorICAgICAgICBvbmUgaG9sZGlu
ZyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyBhcyBpdHMgY2hpbGRyZW4pIGZvciBhbgor
ICAgICAgICBzcGVjaWZpYyBBdGtPYmplY3QgaW1wbGVtZW50aW5nIEF0a1NlbGVjdGlvbi4gVGhp
cyBpcyBuZWVkZWQKKyAgICAgICAgYmVjYXVzZSBzb21ldGltZXMgdGhlIHNlbGVjdGFibGUgb3B0
aW9ucyBhcmUgbm90IGRpcmVjdGx5IGNoaWxkcmVuCisgICAgICAgIG9mIHRoZSBBdGtTZWxlY3Rp
b24gb2JqZWN0IChpLmUuIGEgY29tYm8gYm94IGhhcyBhICdtZW51JyBvYmplY3QKKyAgICAgICAg
YXMgaXRzIG9ubHkgY2hpbGQgb2YgaXQsIGhvbGRpbmcgdGhlIGxpc3Qgb2Ygb3B0aW9ucyBhcyBj
aGlsZHJlbikuCisgICAgICAgIChvcHRpb25Gcm9tTGlzdCk6IFVzZSBsaXN0T2JqZWN0Rm9yU2Vs
ZWN0aW9uKCkgdG8gZ2V0IHRoZSBhY3R1YWwKKyAgICAgICAgb2JqZWN0IGhvbGRpbmcgdGhlIGxp
c3Qgb2YgY2hpbGRyZW4gYXMgdGhlIGF2YWlsYWJsZSBvcHRpb25zLgorICAgICAgICAob3B0aW9u
RnJvbVNlbGVjdGlvbik6IEFkZCBzdXBwb3J0IGZvciBjb21ibyBib3hlcy4KKyAgICAgICAgKHdl
YmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9hZGRfc2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
ICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fY2xlYXJfc2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9jb3VudCk6
IERpdHRvLgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2lzX2NoaWxkX3Nl
bGVjdGVkKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fcmVt
b3ZlX3NlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfdGV4dCk6IE1ha2VzIHN1cmUgc3RyaW5nVmFsdWUoKSBpcworICAgICAgICBjb25zaWRlcmVk
IHRvIGdldCB0aGUgcmVzdWx0IHN1YnN0cmluZyB3aGVuIGl0IHdhcyBhbHJlYWR5CisgICAgICAg
IGNvbnNpZGVyZWQgd2hlbiBjaGVja2luZyB0aGUgbWF4aW11bSB0ZXh0IGxlbmd0aCBmb3IgdGhl
IG9iamVjdC4KKyAgICAgICAgKGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KTogTWFrZSBzdXJl
IHRoZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlCisgICAgICAgIGlzIGltcGxlbWVudGVkIGZvciB0
aGUgY29tYm8gYm94ZXMsIHRoYXQgdGhlIEF0a1RleHQgaXMKKyAgICAgICAgaW1wbGVtZW50ZWQg
Zm9yIHRoZSBtZW51IGl0ZW1zIGFuZCB0aGF0IHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlIGlzCisg
ICAgICAgIG5vdyBpbXBsZW1lbnRlZCBmb3IgZXZlcnkgb2JqZWN0IChXZWJDb3JlIHdpbGwgZGVj
aWRlIHdoYXQgdG8gZG8pLgorCisgICAgICAgIEF2b2lkIGEgc2VnZmF1bHQgY3Jhc2ggd2hlbiB1
c2luZyB0aGlzIGZyb20gdW5pdCB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1
cE1lbnVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51R3RrOjpzaG93KTogTWFr
ZSBzdXJlIHdlIGdvdCBhIHZhbGlkIEdka1dpbmRvdworICAgICAgICBiZWZvcmUgY2FsbGluZyBn
ZGtfd2luZG93X2dldF9vcmlnaW4oKSBvdmVyIGl0LgorCiAyMDEwLTExLTEyICBJbHlhIFNoZXJt
YW4gIDxpc2hlcm1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1l
bnVMaXN0T3B0aW9uLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb24uY3BwCmluZGV4IGQ3NDczZGUuLjViY2E1ODAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwCisrKyBiL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwCkBAIC05
MSw3ICs5MSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpzZXRTZWxlY3Rl
ZChib29sIGIpCiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246Om5hbWVGb3JN
U0FBKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQq
PihtX2VsZW1lbnQuZ2V0KCkpLT50ZXh0KCk7CisgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKCk7CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpjYW5TZXRTZWxlY3RlZEF0dHJp
YnV0ZSgpIGNvbnN0CkBAIC0xMTAsNCArMTEwLDkgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb246OmVsZW1lbnRSZWN0KCkgY29uc3QKICAgICByZXR1cm4gZ3JhbmRwYXJlbnQt
PmVsZW1lbnRSZWN0KCk7CiB9CiAKK1N0cmluZyBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246
OnN0cmluZ1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQqPihtX2VsZW1lbnQuZ2V0KCkpLT50ZXh0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RPcHRpb24uaCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb24uaAppbmRleCA3ZTI3ODg4Li45MzkzZDU2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgKKysrIGIvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oCkBAIC01OSw2ICs1
OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKGJvb2wpOwogICAg
IHZpcnR1YWwgYm9vbCBjYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmlu
Z1ZhbHVlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudDsKICAg
ICBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cCogbV9wb3B1cDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCmluZGV4IDQyMTZiZTQuLmMzNDFhMmQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RDYWNoZUF0ay5j
cHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcApA
QCAtOTUsMTAgKzk1LDE5IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hh
bmdlKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkKIAogdm9pZCBBWE9iamVjdENhY2hlOjpw
b3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwg
QVhOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKQogeworICAgIEF0a09iamVjdCogYXhPYmplY3Qg
PSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYgKCFheE9iamVjdCkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSBBWENoZWNrZWRTdGF0ZUNoYW5nZWQpIHsK
ICAgICAgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29yZU9iamVjdC0+d3Jh
cHBlcigpLCAic3RhdGUtY2hhbmdlIiwgImNoZWNrZWQiLCBjb3JlT2JqZWN0LT5pc0NoZWNrZWQo
KSk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInN0YXRlLWNoYW5n
ZSIsICJjaGVja2VkIiwgY29yZU9iamVjdC0+aXNDaGVja2VkKCkpOworICAgIH0gZWxzZSBpZiAo
bm90aWZpY2F0aW9uID09IEFYTWVudUxpc3RWYWx1ZUNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFj
b3JlT2JqZWN0LT5pc01lbnVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgImZvY3VzLWV2ZW50IiwgdHJ1ZSk7CisgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInN0YXRlLWNoYW5nZSIsICJmb2N1
c2VkIiwgdHJ1ZSk7CiAgICAgfSBlbHNlIGlmIChub3RpZmljYXRpb24gPT0gQVhTZWxlY3RlZENo
aWxkcmVuQ2hhbmdlZCkKICAgICAgICAgbm90aWZ5Q2hpbGRyZW5TZWxlY3Rpb25DaGFuZ2UoY29y
ZU9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDcyNmNkYjEuLjc2YTkwYjIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJLaXRB
Y2Nlc3NpYmxlSHlwZXJsaW5rLmgiCkBAIC01MDAsNiArNTAxLDEyIEBAIHN0YXRpYyB2b2lkIHNl
dEF0a1N0YXRlU2V0RnJvbUNvcmVPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCwgQXRrU3RhCiAgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtf
U1RBVEVfU0VOU0lUSVZFKTsKICAgICB9CiAKKyAgICBpZiAoY29yZU9iamVjdC0+Y2FuU2V0RXhw
YW5kZWRBdHRyaWJ1dGUoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9FWFBBTkRBQkxFKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc0V4cGFu
ZGVkKCkpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RB
VEVfRVhQQU5ERUQpOworCiAgICAgaWYgKGNvcmVPYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRl
KCkpCiAgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
Rk9DVVNBQkxFKTsKIApAQCAtNjk0LDEzICs3MDEsNDQgQEAgc3RhdGljIHZvaWQgYXRrX2FjdGlv
bl9pbnRlcmZhY2VfaW5pdChBdGtBY3Rpb25JZmFjZSogaWZhY2UpCiAKIC8vIFNlbGVjdGlvbiAo
Zm9yIGNvbnRyb2xzKQogCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9iamVjdEZv
clNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworCisgICAgLy8gT25seSBs
aXN0IGJveGVzIGFuZCBtZW51IGxpc3RzIHN1cHBvcnRlZCBzbyBmYXIuCisgICAgaWYgKCFjb3Jl
U2VsZWN0aW9uLT5pc0xpc3RCb3goKSAmJiAhY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZvciBsaXN0IGJveGVzIHRoZSBsaXN0IG9iamVj
dCBpcyBqdXN0IGl0c2VsZi4KKyAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpCisg
ICAgICAgIHJldHVybiBjb3JlU2VsZWN0aW9uOworCisgICAgLy8gRm9yIG1lbnUgbGlzdHMgd2Ug
bmVlZCB0byByZXR1cm4gdGhlIGZpcnN0IGFjY2Vzc2libGUgY2hpbGQsCisgICAgLy8gd2l0aCBy
b2xlIE1lbnVMaXN0UG9wdXBSb2xlLCBzaW5jZSB0aGF0J3MgdGhlIG9uZSBob2xkaW5nIHRoZSBs
aXN0CisgICAgLy8gb2YgaXRlbXMgd2l0aCByb2xlIE1lbnVMaXN0T3B0aW9uUm9sZS4KKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4g
PSBjb3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOworICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPYmplY3Qg
PSBjaGlsZHJlbi5hdCgwKS5nZXQoKTsKKyAgICBpZiAoIWxpc3RPYmplY3QtPmlzTWVudUxpc3RQ
b3B1cCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBsaXN0T2JqZWN0OworfQor
CiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbUxpc3QoQXRrU2VsZWN0aW9u
KiBzZWxlY3Rpb24sIGdpbnQgaSkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2Vs
ZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwogICAgIGlmICghY29yZVNlbGVjdGlvbiB8fCBpIDwg
MCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igb3B0aW9ucyA9IGNvcmUoc2VsZWN0aW9uKS0+Y2hp
bGRyZW4oKTsKKyAgICAvLyBOZWVkIHRvIHNlbGVjdCB0aGUgcHJvcGVyIGxpc3Qgb2JqZWN0IGRl
cGVuZGluZyBvbiB0aGUgdHlwZS4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T2JqZWN0
ID0gbGlzdE9iamVjdEZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIGlmICghbGlzdE9iamVj
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igb3B0aW9ucyA9IGxpc3RPYmplY3QtPmNoaWxkcmVu
KCk7CiAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihvcHRpb25zLnNpemUoKSkpCiAgICAg
ICAgIHJldHVybiBvcHRpb25zLmF0KGkpLmdldCgpOwogCkBAIC03MTIsMTQgKzc1MCwyNiBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbVNlbGVjdGlvbihBdGtTZWxlY3Rp
b24qIHNlbGVjdGlvbiwgZ2ludCBpKQogICAgIC8vIGkgaXMgdGhlIGl0aCBzZWxlY3Rpb24gYXMg
b3Bwb3NlZCB0byB0aGUgaXRoIGNoaWxkLgogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwg
aSA8IDApCisgICAgaWYgKCFjb3JlU2VsZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSB8fCBpIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
c2VsZWN0ZWRJdGVtczsKICAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpCi0gICAg
ICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4oY29yZVNlbGVjdGlvbiktPnNl
bGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgICAgIGNvcmVTZWxlY3Rpb24tPnNl
bGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgZWxzZSBpZiAoY29yZVNlbGVjdGlv
bi0+aXNNZW51TGlzdCgpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0b0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoY29yZVNlbGVjdGlvbiktPnJlbmRlcmVyKCk7CisgICAg
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBTZWxl
Y3RFbGVtZW50KiBzZWxlY3ROb2RlID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPihyZW5kZXJlci0+bm9kZSgpKSk7CisgICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gc2Vs
ZWN0Tm9kZS0+c2VsZWN0ZWRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+
IGxpc3RJdGVtcyA9IHNlbGVjdE5vZGUtPmxpc3RJdGVtcygpOwogCi0gICAgLy8gVE9ETzogQ29t
Ym8gYm94ZXMKKyAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCAwIHx8IHNlbGVjdGVkSW5kZXgg
Pj0gKGludClsaXN0SXRlbXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgcmV0dXJuIG9wdGlvbkZyb21MaXN0KHNlbGVjdGlvbiwgc2VsZWN0ZWRJbmRleCk7CisgICAg
fQogCiAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihzZWxlY3RlZEl0ZW1zLnNpemUoKSkp
CiAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLmF0KGkpLmdldCgpOwpAQCAtNzI5LDExICs3
NzksMTQgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbkZyb21TZWxlY3Rpb24o
QXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKIAogc3RhdGljIGdib29sZWFuIHdlYmtp
dF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9hZGRfc2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0
aW9uLCBnaW50IGkpCiB7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9
IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZyb21M
aXN0KHNlbGVjdGlvbiwgaSk7Ci0gICAgaWYgKG9wdGlvbiAmJiBjb3JlKHNlbGVjdGlvbiktPmlz
TGlzdEJveCgpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKiBsaXN0Qm94
T3B0aW9uID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24qPihvcHRpb24p
OwotICAgICAgICBsaXN0Qm94T3B0aW9uLT5zZXRTZWxlY3RlZCh0cnVlKTsKLSAgICAgICAgcmV0
dXJuIGxpc3RCb3hPcHRpb24tPmlzU2VsZWN0ZWQoKTsKKyAgICBpZiAob3B0aW9uICYmIChjb3Jl
U2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpKSB7
CisgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisgICAgICAgIHJldHVybiBvcHRp
b24tPmlzU2VsZWN0ZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC03NDYsNyAr
Nzk5LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9jbGVh
cl9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7
CisgICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlz
TWVudUxpc3QoKSkgewogICAgICAgICAvLyBTZXQgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgaXRlbXMg
dG8gYW4gZW1wdHkgbGlzdDsgdGhlbiB2ZXJpZnkgdGhhdCBpdCB3b3JrZWQuCiAgICAgICAgIEFj
Y2Vzc2liaWxpdHlMaXN0Qm94KiBsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxp
c3RCb3gqPihjb3JlU2VsZWN0aW9uKTsKICAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWRDaGls
ZHJlbihzZWxlY3RlZEl0ZW1zKTsKQEAgLTc3MSwzMiArODI0LDU0IEBAIHN0YXRpYyBBdGtPYmpl
Y3QqIHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKEF0a1NlbGVjdGlv
biogc2VsZWN0CiBzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fZ2V0X3Nl
bGVjdGlvbl9jb3VudChBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKIHsKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmIChjb3Jl
U2VsZWN0aW9uICYmIGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgpKSB7CisgICAgaWYgKCFjb3Jl
U2VsZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94
KCkpIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgICAgIHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlMaXN0Qm94Kj4oY29yZVNlbGVjdGlvbiktPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJ
dGVtcyk7CisgICAgICAgIGNvcmVTZWxlY3Rpb24tPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJ
dGVtcyk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxnaW50PihzZWxlY3RlZEl0ZW1zLnNp
emUoKSk7CiAgICAgfQogCisgICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkgewor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KGNvcmVTZWxlY3Rpb24pLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0Tm9k
ZSA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4ocmVuZGVyZXItPm5vZGUo
KSkpOworICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdE5vZGUtPnNlbGVjdGVkSW5k
ZXgoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBzZWxlY3RO
b2RlLT5saXN0SXRlbXMoKTsKKworICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleCA+PSAwICYm
IHNlbGVjdGVkSW5kZXggPCAoaW50KWxpc3RJdGVtcy5zaXplKCk7CisgICAgfQorCiAgICAgcmV0
dXJuIDA7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25f
aXNfY2hpbGRfc2VsZWN0ZWQoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKIHsKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwor
ICAgIGlmICghY29yZVNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvcHRpb24gPSBvcHRpb25Gcm9tTGlzdChzZWxlY3Rpb24sIGkpOwotICAg
IGlmIChvcHRpb24gJiYgY29yZShzZWxlY3Rpb24pLT5pc0xpc3RCb3goKSkKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKj4ob3B0aW9uKS0+aXNT
ZWxlY3RlZCgpOworICAgIGlmIChvcHRpb24gJiYgKGNvcmVTZWxlY3Rpb24tPmlzTGlzdEJveCgp
IHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkpCisgICAgICAgIHJldHVybiBvcHRpb24t
PmlzU2VsZWN0ZWQoKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIGdib29sZWFu
IHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZW1vdmVfc2VsZWN0aW9uKEF0a1NlbGVjdGlv
biogc2VsZWN0aW9uLCBnaW50IGkpCiB7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNl
bGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKKyAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGdldHRpbmcgY2FsbGVk
IGlmIGkgPT0gMC4gV2hhdCBpcyBwcmV2ZW50aW5nIHRoZSByZXN0PwogICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZyb21TZWxlY3Rpb24oc2VsZWN0aW9uLCBpKTsKLSAg
ICBpZiAob3B0aW9uICYmIGNvcmUoc2VsZWN0aW9uKS0+aXNMaXN0Qm94KCkpIHsKLSAgICAgICAg
QWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24qIGxpc3RCb3hPcHRpb24gPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbio+KG9wdGlvbik7Ci0gICAgICAgIGxpc3RCb3hPcHRp
b24tPnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuICFsaXN0Qm94T3B0aW9uLT5p
c1NlbGVjdGVkKCk7CisgICAgaWYgKG9wdGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94
KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKSkgeworICAgICAgICBvcHRpb24tPnNl
dFNlbGVjdGVkKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuICFvcHRpb24tPmlzU2VsZWN0ZWQoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC05NjksOCArMTA0NCwxMSBAQCBzdGF0aWMg
Z2NoYXIqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQoQXRrVGV4dCogdGV4dCwgZ2lu
dCBzdGFydE9mZnNldCwgZwogCiAgICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkK
ICAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKFBsYWluVGV4dFJh
bmdlKHN0YXJ0LCBsZW5ndGgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJldCA9IGNvcmVPYmplY3Qt
PnRleHRVbmRlckVsZW1lbnQoKS5zdWJzdHJpbmcoc3RhcnQsIGxlbmd0aCk7CisgICAgZWxzZSB7
CisgICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCkuc3Vic3RyaW5nKHN0YXJ0
LCBsZW5ndGgpOworICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgICAgIHJldCA9IGNvcmVPYmpl
Y3QtPnRleHRVbmRlckVsZW1lbnQoKS5zdWJzdHJpbmcoc3RhcnQsIGxlbmd0aCk7CisgICAgfQog
CiAgICAgaWYgKCFyZXQubGVuZ3RoKCkpIHsKICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGF0
IGxlYXN0IHdpdGggYW5vbnltb3VzIFJlbmRlckJsb2NrcyAoZS5nLiBib2R5IHRleHQgYW1vbmdz
dCBwYXJhZ3JhcGhzKQpAQCAtMjE3MywxOSArMjI1MSwyMyBAQCBzdGF0aWMgZ3VpbnQxNiBnZXRJ
bnRlcmZhY2VNYXNrRnJvbU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQog
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKTsKIAog
ICAgIC8vIEFjdGlvbgotICAgIGlmICghY29yZU9iamVjdC0+YWN0aW9uVmVyYigpLmlzRW1wdHko
KSkgewotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0FDVElPTjsKKyAgICAvLyBB
cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgaXMgYSB2ZXJ5
CisgICAgLy8gYmFzaWMgb25lIChqdXN0IHJlbGF5cyBpbiBleGVjdXRpbmcgdGhlIGRlZmF1bHQg
YWN0aW9uIGZvciBlYWNoCisgICAgLy8gb2JqZWN0LCBhbmQgb25seSBzdXBwb3J0cyBoYXZpbmcg
b25lIGFjdGlvbiBwZXIgb2JqZWN0KSwgaXQgaXMKKyAgICAvLyBiZXR0ZXIganVzdCB0byBpbXBs
ZW1lbnQgdGhpcyBpbnRlcmZhY2UgZm9yIGV2ZXJ5IGluc3RhbmNlIG9mCisgICAgLy8gdGhlIFdl
YktpdEFjY2Vzc2libGUgY2xhc3MgYW5kIGxldCBXZWJDb3JlIGRlY2lkZSB3aGF0IHRvIGRvLgor
ICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlfQUNUSU9OOwogCi0gICAgICAgIGlmICghY29y
ZU9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpICYmIGNvcmVPYmplY3QtPmlzTGluaygp
KQotICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9IWVBFUkxJTks7Ci0gICAg
fQorICAgIC8vIEh5cGVybGluaworICAgIGlmIChjb3JlT2JqZWN0LT5pc0xpbmsoKSkKKyAgICAg
ICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9IWVBFUkxJTks7CiAKICAgICAvLyBTZWxlY3Rp
b24KLSAgICBpZiAoY29yZU9iamVjdC0+aXNMaXN0Qm94KCkpCisgICAgaWYgKGNvcmVPYmplY3Qt
PmlzTGlzdEJveCgpIHx8IGNvcmVPYmplY3QtPmlzTWVudUxpc3QoKSkKICAgICAgICAgaW50ZXJm
YWNlTWFzayB8PSAxIDw8IFdBSV9TRUxFQ1RJT047CiAKICAgICAvLyBUZXh0ICYgRWRpdGFibGUg
VGV4dAotICAgIGlmIChyb2xlID09IFN0YXRpY1RleHRSb2xlKQorICAgIGlmIChyb2xlID09IFN0
YXRpY1RleHRSb2xlIHx8IGNvcmVPYmplY3QtPmlzTWVudUxpc3RPcHRpb24oKSkKICAgICAgICAg
aW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9URVhUOwogICAgIGVsc2UgaWYgKGNvcmVPYmplY3Qt
PmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CiAgICAgICAgIGlmIChjb3JlT2JqZWN0
LT5pc1RleHRDb250cm9sKCkpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bv
cHVwTWVudUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCmlu
ZGV4IGU3ZmY3OGUuLjA3Y2E5MTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bv
cHVwTWVudUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNw
cApAQCAtNTgsOCArNTgsMTEgQEAgdm9pZCBQb3B1cE1lbnVHdGs6OnNob3coY29uc3QgSW50UmVj
dCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5kZXgpCiAgICAgfSBlbHNlCiAgICAgICAg
IGd0a19jb250YWluZXJfZm9yZWFjaChHVEtfQ09OVEFJTkVSKG1fcG9wdXAuZ2V0KCkpLCByZWlu
dGVycHJldF9jYXN0PEd0a0NhbGxiYWNrPihtZW51UmVtb3ZlSXRlbSksIHRoaXMpOwogCi0gICAg
aW50IHgsIHk7Ci0gICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGd0a193aWRnZXRfZ2V0X3dpbmRv
dyhHVEtfV0lER0VUKHZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpKSwg
JngsICZ5KTsKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAgIEdka1dpbmRvdyog
d2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQodmlldy0+aG9zdFdpbmRv
dygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOworICAgIGlmICh3aW5kb3cpCisgICAgICAgIGdk
a193aW5kb3dfZ2V0X29yaWdpbih3aW5kb3csICZ4LCAmeSk7CiAgICAgbV9tZW51UG9zaXRpb24g
PSB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7CiAgICAgbV9tZW51UG9z
aXRpb24gPSBJbnRQb2ludChtX21lbnVQb3NpdGlvbi54KCkgKyB4LCBtX21lbnVQb3NpdGlvbi55
KCkgKyB5ICsgcmVjdC5oZWlnaHQoKSk7CiAgICAgbV9pbmRleE1hcC5jbGVhcigpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBh
YTBjMGRhLi4zZDZkMzUxIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEwLTExLTE3ICBNYXJpbyBT
YW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgUk9MRV9DT01CT19C
T1gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1Njc4
CisKKyAgICAgICAgTmV3IHRlc3QgdG8gY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBj
b21ibyBib3hlcy4KKworICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKKyAgICAgICAgKHRlc3RX
ZWJraXRBdGtDb21ib0JveCk6IE5ldyB0ZXN0LCBjaGVja2luZyB0aGF0IHRoZSByb2xlcyBhbmQg
dGhlCisgICAgICAgIGltcGxlbWVudGVkIGludGVyZmFjZXMgZm9yIGEgY29tYm8gYm94IGFuZCBp
dHMgZGVzY2VuZGFudHMgd29yay4KKyAgICAgICAgKG1haW4pOiBBZGRlZCB0aGUgbmV3IHVuaXQg
dGVzdC4KKwogMjAxMC0xMS0xMSAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGF0ay5jIGIvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKaW5kZXggNTA5Y2I4Ni4u
YjFiYzM2MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKKysrIGIvV2Vi
S2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKQEAgLTQ0LDYgKzQ0LDggQEAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnRlbnRzSW5UYWJsZSA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0ZD5mb288L3Rk
Pjx0ZD5iYXIKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzSW5UYWJsZVdpdGhIZWFkZXJz
ID0gIjxodG1sPjxib2R5Pjx0YWJsZT48dHI+PHRoPmZvbzwvdGg+PHRoPmJhcjwvdGg+PHRoIGNv
bHNwYW49JzInPmJhejwvdGg+PC90cj48dHI+PHRoPnF1eDwvdGg+PHRkPjE8L3RkPjx0ZD4yPC90
ZD48dGQ+MzwvdGQ+PC90cj48dHI+PHRoIHJvd3NwYW49JzInPnF1dXg8L3RoPjx0ZD40PC90ZD48
dGQ+NTwvdGQ+PHRkPjY8L3RkPjwvdHI+PHRyPjx0ZD42PC90ZD48dGQ+NzwvdGQ+PHRkPjg8L3Rk
PjwvdHI+PHRyPjx0aD5jb3JnZTwvdGg+PHRkPjk8L3RkPjx0ZD4xMDwvdGQ+PHRkPjExPC90ZD48
L3RyPjwvdGFibGU+PHRhYmxlPjx0cj48dGQ+MTwvdGQ+PHRkPjI8L3RkPjwvdHI+PHRyPjx0ZD4z
PC90ZD48dGQ+NDwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsKIAorc3RhdGljIGNv
bnN0IGNoYXIqIGNvbWJvQm94U2VsZWN0b3IgPSAiPGh0bWw+PGJvZHk+PHNlbGVjdD48b3B0aW9u
IHNlbGVjdGVkIHZhbHVlPSdmb28nPmZvbzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2Jhcic+YmFy
PC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iOworCiBzdGF0aWMgY29uc3QgY2hhciog
Zm9ybVdpdGhUZXh0SW5wdXRzID0gIjxodG1sPjxib2R5Pjxmb3JtPjxpbnB1dCB0eXBlPSd0ZXh0
JyBuYW1lPSdlbnRyeScgLz48L2Zvcm0+PC9ib2R5PjwvaHRtbD4iOwogCiBzdGF0aWMgY29uc3Qg
Y2hhciogaHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFw
aCB3aXRoIG5vIGxpbmtzIGF0IGFsbDwvcD48cD48YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXov
Jz5BIGxpbmU8L2E+IHdpdGggPGEgaHJlZj0naHR0cDovL2Jhci5iYXouZm9vLyc+YSBsaW5rIGlu
IHRoZSBtaWRkbGU8L2E+IGFzIHdlbGwgYXMgYXQgdGhlIGJlZ2lubmluZyBhbmQgPGEgaHJlZj0n
aHR0cDovL2Jhei5mb28uYmFyLyc+YXQgdGhlIGVuZDwvYT48L3A+PC9ib2R5PjwvaHRtbD4iOwpA
QCAtMjIxLDYgKzIyMywxMDcgQEAgc3RhdGljIHZvaWQgcnVuR2V0VGV4dFRlc3RzKEF0a1RleHQq
IHRleHRPYmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAwLCAiVGhpcyBpcyBhIHRlc3Qu
IFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLiIsIDAsIDY0
KTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NvbWJvQm94KCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXco
KSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbWJvQm94U2VsZWN0b3IsIDAsIDAsIDApOworCisg
ICAgLyogV2FpdCBmb3IgdGhlIGFjY2Vzc2libGUgb2JqZWN0cyB0byBiZSBjcmVhdGVkLiAqLwor
ICAgIHdhaXRGb3JBY2Nlc3NpYmxlT2JqZWN0cygpOworCisgICAgQXRrT2JqZWN0KiBvYmplY3Qg
PSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdf
YXNzZXJ0KG9iamVjdCk7CisKKyAgICBBdGtPYmplY3QqIGZvcm1PYmplY3QgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoZm9ybU9iamVj
dCk7CisKKyAgICBBdGtPYmplY3QqIGNvbWJvQm94ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJs
ZV9jaGlsZChmb3JtT2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGNvbWJv
Qm94KSk7CisKKyAgICBBdGtPYmplY3QqIG1lbnVQb3B1cCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQoY29tYm9Cb3gsIDApOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QobWVu
dVBvcHVwKSk7CisKKyAgICBBdGtPYmplY3QqIGl0ZW0xID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChtZW51UG9wdXAsIDApOworICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoaXRl
bTEpKTsKKworICAgIEF0a09iamVjdCogaXRlbTIgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG1lbnVQb3B1cCwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChpdGVtMikp
OworCisgICAgLyogQ2hlY2sgcm9sZXMuICovCisgICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRf
cm9sZShjb21ib0JveCkgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKTsKKyAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9yb2xlKG1lbnVQb3B1cCkgPT0gQVRLX1JPTEVfTUVOVSk7CisgICAgZ19hc3Nl
cnQoYXRrX29iamVjdF9nZXRfcm9sZShpdGVtMSkgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsKKyAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGl0ZW0yKSA9PSBBVEtfUk9MRV9NRU5VX0lU
RU0pOworCisgICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBdGtTZWxlY3Rp
b24gaW50ZXJmYWNlLiAqLworICAgIGdfYXNzZXJ0KEFUS19JU19TRUxFQ1RJT04oY29tYm9Cb3gp
KTsKKyAgICBBdGtTZWxlY3Rpb24qIGF0a1NlbGVjdGlvbiA9IEFUS19TRUxFQ1RJT04oY29tYm9C
b3gpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291
bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KGF0a19zZWxlY3Rpb25faXNf
Y2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAwKSk7CisgICAgZ19hc3NlcnQoIWF0a19zZWxl
Y3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7CisgICAgQXRrT2JqZWN0
KiBzZWxlY3RlZEl0ZW0gPSBhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24oYXRrU2VsZWN0aW9u
LCAwKTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEl0ZW0gPT0gaXRlbTEpOworICAgIGdfb2JqZWN0
X3VucmVmKHNlbGVjdGVkSXRlbSk7CisKKyAgICAvKiBDaGVjayB0aGUgaW1wbGVtZW50YXRpb25z
IG9mIHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlLiAqLworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJ
T04oY29tYm9Cb3gpKTsKKyAgICBBdGtBY3Rpb24qIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04oY29t
Ym9Cb3gpOworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0aW9uX2dldF9uX2FjdGlvbnMoYXRr
QWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KGF0a19hY3Rpb25fZG9fYWN0aW9uKGF0a0Fj
dGlvbiwgMCkpOworCisgICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihtZW51UG9wdXApKTsKKyAg
ICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKG1lbnVQb3B1cCk7CisgICAgZ19hc3NlcnRfY21waW50
KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7CisgICAgZ19hc3Nl
cnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisKKyAgICBnX2Fzc2VydChB
VEtfSVNfQUNUSU9OKGl0ZW0xKSk7CisgICAgYXRrQWN0aW9uID0gQVRLX0FDVElPTihpdGVtMSk7
CisgICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24p
LCA9PSwgMSk7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAw
KSk7CisKKyAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGl0ZW0yKSk7CisgICAgYXRrQWN0aW9u
ID0gQVRLX0FDVElPTihpdGVtMik7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0
X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7CisgICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9k
b19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisKKyAgICAvKiBBZnRlciBzZWxlY3RpbmcgdGhlIHNl
Y29uZCBpdGVtLCBzZWxlY3Rpb24gc2hvdWxkIGhhdmUgY2hhbmdlZC4gKi8KKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX2NvdW50KGF0a1NlbGVjdGlvbiks
ID09LCAxKTsKKyAgICBnX2Fzc2VydCghYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZChh
dGtTZWxlY3Rpb24sIDApKTsKKyAgICBnX2Fzc2VydChhdGtfc2VsZWN0aW9uX2lzX2NoaWxkX3Nl
bGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkpOworICAgIHNlbGVjdGVkSXRlbSA9IGF0a19zZWxlY3Rp
b25fcmVmX3NlbGVjdGlvbihhdGtTZWxlY3Rpb24sIDApOworICAgIGdfYXNzZXJ0KHNlbGVjdGVk
SXRlbSA9PSBpdGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYoc2VsZWN0ZWRJdGVtKTsKKworICAg
IC8qIENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrVGV4dCBpbnRlcmZhY2UuICov
CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQoaXRlbTEpKTsKKyAgICBBdGtUZXh0KiBhdGtUZXh0
ID0gQVRLX1RFWFQoaXRlbTEpOworICAgIGNoYXIgKnRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChh
dGtUZXh0LCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIik7Cisg
ICAgZ19mcmVlKHRleHQpOworICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChhdGtUZXh0LCAw
LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmbyIpOworICAgIGdfZnJlZSh0
ZXh0KTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGl0ZW0yKSk7CisgICAgYXRrVGV4dCA9
IEFUS19URVhUKGl0ZW0yKTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoYXRrVGV4dCwg
MCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImJhciIpOworICAgIGdfZnJl
ZSh0ZXh0KTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQoYXRrVGV4dCwgMSwgMyk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiYXIiKTsKKyAgICBnX2ZyZWUodGV4dCk7CisK
KyAgICBnX29iamVjdF91bnJlZihmb3JtT2JqZWN0KTsKKyAgICBnX29iamVjdF91bnJlZihjb21i
b0JveCk7CisgICAgZ19vYmplY3RfdW5yZWYobWVudVBvcHVwKTsKKyAgICBnX29iamVjdF91bnJl
ZihpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOworICAgIGdfb2JqZWN0X3VucmVm
KHdlYlZpZXcpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0
Rm9ybXMoKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKQEAgLTEyMDEsNiArMTMwNCw3IEBAIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKICAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgMCk7
CiAKICAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvY29tYm9Cb3giLCB0ZXN0V2Via2l0QXRrQ29t
Ym9Cb3gpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0T2Zmc2V0
IiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldCk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXRGb3JtcyIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRP
ZmZzZXRGb3Jtcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0QXRP
ZmZzZXROZXdsaW5lcyIsIHRlc3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXROZXdsaW5lcyk7Ci0t
IAoxLjcuMy4yCgo=
</data>
<flag name="review"
          id="64657"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74127</attachid>
            <date>2010-11-17 09:40:44 -0800</date>
            <delta_ts>2010-11-19 14:49:39 -0800</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0001-2010-11-17-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>29335</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBhMTZkNWU4YWY3MmY3ZDU1YTllNTNjYmNkNWZhNWM3NzdjOGZiNWY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE3IE5vdiAyMDEwIDE3OjA0OjM1ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0xMS0xNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBJbXBs
ZW1lbnQgUk9MRV9DT01CT19CT1gKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU2NzgKCiAgICAgICAgSW1wbGVtZW50IHRoZSByZW1haW5pbmcgYml0cyBm
b3IgY29tYm8gYm94ZXMuCgogICAgICAgIFRoaXMgcGF0Y2ggZmluaXNoZXMgdGhlIGltcGxlbWVu
dGF0aW9uLCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCiAgICAgICAgdGhlIEF0ayBsaWJyYXJ5
LCBvZiB0aG9zZSBvYmplY3RzIGV4cG9zZWQgdG8gQVRLIGFzIGNvbWJvIGJveGVzLAogICAgICAg
IGFuZCB0aGVpciByZWxhdGVkIGVsZW1lbnRzIChtZW51cyBhbmQgbWVudSBpdGVtcykuIEl0IHRo
ZXJlZm9yZQogICAgICAgIGltcGxlbWVudHMgdGhlIHByb3BlciBpbnRlcmZhY2VzIGZvciBlYWNo
IHR5cGUgb2Ygb2JqZWN0IHJlbGF0ZWQKICAgICAgICB0byBjb21ibyBib3hlcyAoQXRrU2VsZWN0
aW9uIGZvciB0aGUgY29tYm8gYm94LCBBdGtUZXh0IGZvciBldmVyeQogICAgICAgIG1lbnUgaXRl
bSBhbmQgQXRrQWN0aW9uIGZvciB0aGUgY29tYm8gYm94LCB0aGUgbWVudSBhbmQgdGhlIG1lbnUK
ICAgICAgICBpdGVtcyksIHRha2VzIGNhcmUgb2YgZW1pdHRpbmcgdGhlIHByb3BlciBzaWduYWxz
IHdoZW4gZm9jdXMgb3IgYQogICAgICAgIGdpdmVuIGEgc2VsZWN0aW9uIGNoYW5nZXMgYW5kIGFk
ZHMgYSBuZXcgdW5pdCB0ZXN0IHRvIGNoZWNrIGFsbAogICAgICAgIHRoaXMgbmV3IHN0dWZmLgoK
ICAgICAgICBNYWtlIHBvc3NpYmxlIHRvIGFzayBhbiBBY2Nlc3NpYmxlTWVudUxpc3RPcHRpb24g
Zm9yIGEgc2Vuc2libGUKICAgICAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24sIHNvIGZhciBvbmx5
IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBwcml2YXRlCiAgICAgICAgYW5kIE1TQUEgcmVsYXRlZCBt
ZXRob2QgbmFtZUZvck1TQUEuIEp1c3QgbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uCiAgICAgICAg
b2YgdGhhdCBtZXRob3IgdG8gYW4gb3ZlcnJpZGVuIHZlcnNpb24gb2Ygc3RyaW5nVmFsdWUoKSwg
d2hpY2ggaXMKICAgICAgICBwbGF0Zm9ybSBpbmRlcGVuZGVudCwgYW5kIGNhbGxlZCB0aGF0IGZy
b20gbmFtZUZvck1TQUEoKS4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdE9wdGlvbi5oOgogICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb24uY3BwOgogICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3RP
cHRpb246Om5hbWVGb3JNU0FBKTogSnVzdCBjYWxsIHRvCiAgICAgICAgc3RyaW5nVmFsdWUoKSwg
d2hpY2ggaG9sZHMgZnJvbSBub3cgb24gdGhhdCB1c2VkIHRvIGJlIGhlcmUuCiAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c3RyaW5nVmFsdWUpOiBOZXcsIG92
ZXJyaWRlCiAgICAgICAgb2YgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nVmFsdWUoKSB0byBy
ZXR1cm4gYSBwcm9wZXIgc3RyaW5nLgoKICAgICAgICBFbWl0IHRoZSBtaXNzaW5nIHNpZ25hbHMg
d2hlbiBhIHNlbGVjdGlvbiBpcyBtYWRlLgoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FY
T2JqZWN0Q2FjaGVBdGsuY3BwOgogICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0
UGxhdGZvcm1Ob3RpZmljYXRpb24pOiBFbWl0IHRoZSB1c3VhbAogICAgICAgICdmb2N1cycgc2ln
bmFscyB3aGVuIGEgc2VsZWN0aW9uIGlzIG1hZGUgb3ZlciB0aGUgY29tYm8gYm94LgoKICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoK
ICAgICAgICAoc2V0QXRrU3RhdGVTZXRGcm9tQ29yZU9iamVjdCk6IEVuc3VyZSB0aGUgRVhQQU5E
QUJMRSBhbmQgRVhQQU5ERUQKICAgICAgICBBdGsgc3RhdGVzIGFyZSBhZGRlZCB0byB0aGUgc3Rh
dGUgc2V0IHdoZW4gbmVlZGVkLgogICAgICAgIChsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKTogTmV3
LCByZXR1cm5zIHRoZSBwcm9wZXIgbGlzdCBvYmplY3QgKHRoZQogICAgICAgIG9uZSBob2xkaW5n
IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zIGFzIGl0cyBjaGlsZHJlbikgZm9yIGFuCiAg
ICAgICAgc3BlY2lmaWMgQXRrT2JqZWN0IGltcGxlbWVudGluZyBBdGtTZWxlY3Rpb24uIFRoaXMg
aXMgbmVlZGVkCiAgICAgICAgYmVjYXVzZSBzb21ldGltZXMgdGhlIHNlbGVjdGFibGUgb3B0aW9u
cyBhcmUgbm90IGRpcmVjdGx5IGNoaWxkcmVuCiAgICAgICAgb2YgdGhlIEF0a1NlbGVjdGlvbiBv
YmplY3QgKGkuZS4gYSBjb21ibyBib3ggaGFzIGEgJ21lbnUnIG9iamVjdAogICAgICAgIGFzIGl0
cyBvbmx5IGNoaWxkIG9mIGl0LCBob2xkaW5nIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXMgY2hpbGRy
ZW4pLgogICAgICAgIChvcHRpb25Gcm9tTGlzdCk6IFVzZSBsaXN0T2JqZWN0Rm9yU2VsZWN0aW9u
KCkgdG8gZ2V0IHRoZSBhY3R1YWwKICAgICAgICBvYmplY3QgaG9sZGluZyB0aGUgbGlzdCBvZiBj
aGlsZHJlbiBhcyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICAgICAgKG9wdGlvbkZyb21TZWxl
Y3Rpb24pOiBBZGQgc3VwcG9ydCBmb3IgY29tYm8gYm94ZXMuCiAgICAgICAgKHdlYmtpdF9hY2Nl
c3NpYmxlX3NlbGVjdGlvbl9hZGRfc2VsZWN0aW9uKTogRGl0dG8uCiAgICAgICAgKHdlYmtpdF9h
Y2Nlc3NpYmxlX3NlbGVjdGlvbl9jbGVhcl9zZWxlY3Rpb24pOiBEaXR0by4KICAgICAgICAod2Vi
a2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQpOiBEaXR0by4KICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKTogRGl0
dG8uCiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9yZW1vdmVfc2VsZWN0aW9u
KTogRGl0dG8uCiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQpOiBNYWtl
cyBzdXJlIHN0cmluZ1ZhbHVlKCkgaXMKICAgICAgICBjb25zaWRlcmVkIHRvIGdldCB0aGUgcmVz
dWx0IHN1YnN0cmluZyB3aGVuIGl0IHdhcyBhbHJlYWR5CiAgICAgICAgY29uc2lkZXJlZCB3aGVu
IGNoZWNraW5nIHRoZSBtYXhpbXVtIHRleHQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0LgogICAgICAg
IChnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjdCk6IE1ha2Ugc3VyZSB0aGUgQXRrU2VsZWN0aW9u
IGludGVyZmFjZQogICAgICAgIGlzIGltcGxlbWVudGVkIGZvciB0aGUgY29tYm8gYm94ZXMsIHRo
YXQgdGhlIEF0a1RleHQgaXMKICAgICAgICBpbXBsZW1lbnRlZCBmb3IgdGhlIG1lbnUgaXRlbXMg
YW5kIHRoYXQgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UgaXMKICAgICAgICBub3cgaW1wbGVtZW50
ZWQgZm9yIGV2ZXJ5IG9iamVjdCAoV2ViQ29yZSB3aWxsIGRlY2lkZSB3aGF0IHRvIGRvKS4KCiAg
ICAgICAgQXZvaWQgYSBzZWdmYXVsdCBjcmFzaCB3aGVuIHVzaW5nIHRoaXMgZnJvbSB1bml0IHRl
c3RzLgoKICAgICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwOgogICAgICAgIChX
ZWJDb3JlOjpQb3B1cE1lbnVHdGs6OnNob3cpOiBNYWtlIHN1cmUgd2UgZ290IGEgdmFsaWQgR2Rr
V2luZG93CiAgICAgICAgYmVmb3JlIGNhbGxpbmcgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKCkgb3Zl
ciBpdC4KCjIwMTAtMTEtMTcgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgW0dUS10g
SW1wbGVtZW50IFJPTEVfQ09NQk9fQk9YCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1Njc4CgogICAgICAgIE5ldyB0ZXN0IHRvIGNoZWNrIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgY29tYm8gYm94ZXMuCgogICAgICAgICogdGVzdHMvdGVzdGF0ay5j
OgogICAgICAgICh0ZXN0V2Via2l0QXRrQ29tYm9Cb3gpOiBOZXcgdGVzdCwgY2hlY2tpbmcgdGhh
dCB0aGUgcm9sZXMgYW5kIHRoZQogICAgICAgIGltcGxlbWVudGVkIGludGVyZmFjZXMgZm9yIGEg
Y29tYm8gYm94IGFuZCBpdHMgZGVzY2VuZGFudHMgd29yay4KICAgICAgICAobWFpbik6IEFkZGVk
IHRoZSBuZXcgdW5pdCB0ZXN0LgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICA2OSArKysrKysrKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwICB8ICAgIDcgKy0KIC4uLi9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oICAgIHwgICAgMSArCiBXZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwICAgICB8ICAgMTEgKystCiAuLi4v
Z3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCAgICAgICAgICB8ICAxMzQgKysr
KysrKysrKysrKysrKy0tLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAg
ICAgICAgICAgICAgIHwgICAgNyArLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDE0ICsrCiBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDQgKysrKysrKysrKysrKysrCiA4IGZpbGVzIGNo
YW5nZWQsIDMxNyBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE2MTJhMTAuLmE3MzY4
MzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNzIgQEAKKzIwMTAtMTEtMTcgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2Fu
Y2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBST0xFX0NPTUJPX0JPWAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzgKKworICAgICAgICBJbXBsZW1l
bnQgdGhlIHJlbWFpbmluZyBiaXRzIGZvciBjb21ibyBib3hlcy4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpbmlzaGVzIHRoZSBpbXBsZW1lbnRhdGlvbiwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBv
ZgorICAgICAgICB0aGUgQXRrIGxpYnJhcnksIG9mIHRob3NlIG9iamVjdHMgZXhwb3NlZCB0byBB
VEsgYXMgY29tYm8gYm94ZXMsCisgICAgICAgIGFuZCB0aGVpciByZWxhdGVkIGVsZW1lbnRzICht
ZW51cyBhbmQgbWVudSBpdGVtcykuIEl0IHRoZXJlZm9yZQorICAgICAgICBpbXBsZW1lbnRzIHRo
ZSBwcm9wZXIgaW50ZXJmYWNlcyBmb3IgZWFjaCB0eXBlIG9mIG9iamVjdCByZWxhdGVkCisgICAg
ICAgIHRvIGNvbWJvIGJveGVzIChBdGtTZWxlY3Rpb24gZm9yIHRoZSBjb21ibyBib3gsIEF0a1Rl
eHQgZm9yIGV2ZXJ5CisgICAgICAgIG1lbnUgaXRlbSBhbmQgQXRrQWN0aW9uIGZvciB0aGUgY29t
Ym8gYm94LCB0aGUgbWVudSBhbmQgdGhlIG1lbnUKKyAgICAgICAgaXRlbXMpLCB0YWtlcyBjYXJl
IG9mIGVtaXR0aW5nIHRoZSBwcm9wZXIgc2lnbmFscyB3aGVuIGZvY3VzIG9yIGEKKyAgICAgICAg
Z2l2ZW4gYSBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgYWRkcyBhIG5ldyB1bml0IHRlc3QgdG8gY2hl
Y2sgYWxsCisgICAgICAgIHRoaXMgbmV3IHN0dWZmLgorCisgICAgICAgIE1ha2UgcG9zc2libGUg
dG8gYXNrIGFuIEFjY2Vzc2libGVNZW51TGlzdE9wdGlvbiBmb3IgYSBzZW5zaWJsZQorICAgICAg
ICBzdHJpbmcgcmVwcmVzZW50YXRpb24sIHNvIGZhciBvbmx5IGF2YWlsYWJsZSB0aHJvdWdoIHRo
ZSBwcml2YXRlCisgICAgICAgIGFuZCBNU0FBIHJlbGF0ZWQgbWV0aG9kIG5hbWVGb3JNU0FBLiBK
dXN0IG1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiB0aGF0IG1ldGhvZCB0byBh
biBvdmVycmlkZW4gdmVyc2lvbiBvZiBzdHJpbmdWYWx1ZSgpLCB3aGljaCBpcworICAgICAgICBw
bGF0Zm9ybSBpbmRlcGVuZGVudCwgYW5kIGNhbGxlZCB0aGF0IGZyb20gbmFtZUZvck1TQUEoKS4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmg6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpuYW1lRm9y
TVNBQSk6IEp1c3QgY2FsbCB0bworICAgICAgICBzdHJpbmdWYWx1ZSgpLCB3aGljaCBob2xkcyBm
cm9tIG5vdyBvbiB0aGF0IHVzZWQgdG8gYmUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlNZW51TGlzdE9wdGlvbjo6c3RyaW5nVmFsdWUpOiBOZXcsIG92ZXJyaWRlCisgICAg
ICAgIG9mIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ1ZhbHVlKCkgdG8gcmV0dXJuIGEgcHJv
cGVyIHN0cmluZy4KKworICAgICAgICBFbWl0IHRoZSBtaXNzaW5nIHNpZ25hbHMgd2hlbiBhIHNl
bGVjdGlvbiBpcyBtYWRlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RD
YWNoZUF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZv
cm1Ob3RpZmljYXRpb24pOiBFbWl0IHRoZSB1c3VhbAorICAgICAgICAnZm9jdXMnIHNpZ25hbHMg
d2hlbiBhIHNlbGVjdGlvbiBpcyBtYWRlIG92ZXIgdGhlIGNvbWJvIGJveC4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcDoKKyAg
ICAgICAgKHNldEF0a1N0YXRlU2V0RnJvbUNvcmVPYmplY3QpOiBFbnN1cmUgdGhlIEVYUEFOREFC
TEUgYW5kIEVYUEFOREVECisgICAgICAgIEF0ayBzdGF0ZXMgYXJlIGFkZGVkIHRvIHRoZSBzdGF0
ZSBzZXQgd2hlbiBuZWVkZWQuCisgICAgICAgIChsaXN0T2JqZWN0Rm9yU2VsZWN0aW9uKTogTmV3
LCByZXR1cm5zIHRoZSBwcm9wZXIgbGlzdCBvYmplY3QgKHRoZQorICAgICAgICBvbmUgaG9sZGlu
ZyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyBhcyBpdHMgY2hpbGRyZW4pIGZvciBhbgor
ICAgICAgICBzcGVjaWZpYyBBdGtPYmplY3QgaW1wbGVtZW50aW5nIEF0a1NlbGVjdGlvbi4gVGhp
cyBpcyBuZWVkZWQKKyAgICAgICAgYmVjYXVzZSBzb21ldGltZXMgdGhlIHNlbGVjdGFibGUgb3B0
aW9ucyBhcmUgbm90IGRpcmVjdGx5IGNoaWxkcmVuCisgICAgICAgIG9mIHRoZSBBdGtTZWxlY3Rp
b24gb2JqZWN0IChpLmUuIGEgY29tYm8gYm94IGhhcyBhICdtZW51JyBvYmplY3QKKyAgICAgICAg
YXMgaXRzIG9ubHkgY2hpbGQgb2YgaXQsIGhvbGRpbmcgdGhlIGxpc3Qgb2Ygb3B0aW9ucyBhcyBj
aGlsZHJlbikuCisgICAgICAgIChvcHRpb25Gcm9tTGlzdCk6IFVzZSBsaXN0T2JqZWN0Rm9yU2Vs
ZWN0aW9uKCkgdG8gZ2V0IHRoZSBhY3R1YWwKKyAgICAgICAgb2JqZWN0IGhvbGRpbmcgdGhlIGxp
c3Qgb2YgY2hpbGRyZW4gYXMgdGhlIGF2YWlsYWJsZSBvcHRpb25zLgorICAgICAgICAob3B0aW9u
RnJvbVNlbGVjdGlvbik6IEFkZCBzdXBwb3J0IGZvciBjb21ibyBib3hlcy4KKyAgICAgICAgKHdl
YmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9hZGRfc2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
ICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fY2xlYXJfc2VsZWN0aW9uKTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9jb3VudCk6
IERpdHRvLgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX2lzX2NoaWxkX3Nl
bGVjdGVkKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fcmVt
b3ZlX3NlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfdGV4dCk6IE1ha2VzIHN1cmUgc3RyaW5nVmFsdWUoKSBpcworICAgICAgICBjb25zaWRlcmVk
IHRvIGdldCB0aGUgcmVzdWx0IHN1YnN0cmluZyB3aGVuIGl0IHdhcyBhbHJlYWR5CisgICAgICAg
IGNvbnNpZGVyZWQgd2hlbiBjaGVja2luZyB0aGUgbWF4aW11bSB0ZXh0IGxlbmd0aCBmb3IgdGhl
IG9iamVjdC4KKyAgICAgICAgKGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KTogTWFrZSBzdXJl
IHRoZSBBdGtTZWxlY3Rpb24gaW50ZXJmYWNlCisgICAgICAgIGlzIGltcGxlbWVudGVkIGZvciB0
aGUgY29tYm8gYm94ZXMsIHRoYXQgdGhlIEF0a1RleHQgaXMKKyAgICAgICAgaW1wbGVtZW50ZWQg
Zm9yIHRoZSBtZW51IGl0ZW1zIGFuZCB0aGF0IHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlIGlzCisg
ICAgICAgIG5vdyBpbXBsZW1lbnRlZCBmb3IgZXZlcnkgb2JqZWN0IChXZWJDb3JlIHdpbGwgZGVj
aWRlIHdoYXQgdG8gZG8pLgorCisgICAgICAgIEF2b2lkIGEgc2VnZmF1bHQgY3Jhc2ggd2hlbiB1
c2luZyB0aGlzIGZyb20gdW5pdCB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1
cE1lbnVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51R3RrOjpzaG93KTogTWFr
ZSBzdXJlIHdlIGdvdCBhIHZhbGlkIEdka1dpbmRvdworICAgICAgICBiZWZvcmUgY2FsbGluZyBn
ZGtfd2luZG93X2dldF9vcmlnaW4oKSBvdmVyIGl0LgorCiAyMDEwLTExLTEyICBJbHlhIFNoZXJt
YW4gIDxpc2hlcm1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1l
bnVMaXN0T3B0aW9uLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb24uY3BwCmluZGV4IGQ3NDczZGUuLjViY2E1ODAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwCisrKyBiL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3BwCkBAIC05
MSw3ICs5MSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpzZXRTZWxlY3Rl
ZChib29sIGIpCiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246Om5hbWVGb3JN
U0FBKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQq
PihtX2VsZW1lbnQuZ2V0KCkpLT50ZXh0KCk7CisgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKCk7CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uOjpjYW5TZXRTZWxlY3RlZEF0dHJp
YnV0ZSgpIGNvbnN0CkBAIC0xMTAsNCArMTEwLDkgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb246OmVsZW1lbnRSZWN0KCkgY29uc3QKICAgICByZXR1cm4gZ3JhbmRwYXJlbnQt
PmVsZW1lbnRSZWN0KCk7CiB9CiAKK1N0cmluZyBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb246
OnN0cmluZ1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQqPihtX2VsZW1lbnQuZ2V0KCkpLT50ZXh0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RPcHRpb24uaCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RPcHRpb24uaAppbmRleCA3ZTI3ODg4Li45MzkzZDU2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgKKysrIGIvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5oCkBAIC01OSw2ICs1
OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkKGJvb2wpOwogICAg
IHZpcnR1YWwgYm9vbCBjYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgSW50UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmlu
Z1ZhbHVlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudDsKICAg
ICBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cCogbV9wb3B1cDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCmluZGV4IDQyMTZiZTQuLmMzNDFhMmQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQVhPYmplY3RDYWNoZUF0ay5j
cHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcApA
QCAtOTUsMTAgKzk1LDE5IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hh
bmdlKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkKIAogdm9pZCBBWE9iamVjdENhY2hlOjpw
b3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwg
QVhOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKQogeworICAgIEF0a09iamVjdCogYXhPYmplY3Qg
PSBjb3JlT2JqZWN0LT53cmFwcGVyKCk7CisgICAgaWYgKCFheE9iamVjdCkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSBBWENoZWNrZWRTdGF0ZUNoYW5nZWQpIHsK
ICAgICAgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29yZU9iamVjdC0+d3Jh
cHBlcigpLCAic3RhdGUtY2hhbmdlIiwgImNoZWNrZWQiLCBjb3JlT2JqZWN0LT5pc0NoZWNrZWQo
KSk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInN0YXRlLWNoYW5n
ZSIsICJjaGVja2VkIiwgY29yZU9iamVjdC0+aXNDaGVja2VkKCkpOworICAgIH0gZWxzZSBpZiAo
bm90aWZpY2F0aW9uID09IEFYTWVudUxpc3RWYWx1ZUNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFj
b3JlT2JqZWN0LT5pc01lbnVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgImZvY3VzLWV2ZW50IiwgdHJ1ZSk7CisgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInN0YXRlLWNoYW5nZSIsICJmb2N1
c2VkIiwgdHJ1ZSk7CiAgICAgfSBlbHNlIGlmIChub3RpZmljYXRpb24gPT0gQVhTZWxlY3RlZENo
aWxkcmVuQ2hhbmdlZCkKICAgICAgICAgbm90aWZ5Q2hpbGRyZW5TZWxlY3Rpb25DaGFuZ2UoY29y
ZU9iamVjdCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDcyNmNkYjEuLjk5YjZiMmMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJLaXRB
Y2Nlc3NpYmxlSHlwZXJsaW5rLmgiCkBAIC01MDAsNiArNTAxLDEyIEBAIHN0YXRpYyB2b2lkIHNl
dEF0a1N0YXRlU2V0RnJvbUNvcmVPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVj
dCwgQXRrU3RhCiAgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtf
U1RBVEVfU0VOU0lUSVZFKTsKICAgICB9CiAKKyAgICBpZiAoY29yZU9iamVjdC0+Y2FuU2V0RXhw
YW5kZWRBdHRyaWJ1dGUoKSkKKyAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9FWFBBTkRBQkxFKTsKKworICAgIGlmIChjb3JlT2JqZWN0LT5pc0V4cGFu
ZGVkKCkpCisgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RB
VEVfRVhQQU5ERUQpOworCiAgICAgaWYgKGNvcmVPYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRl
KCkpCiAgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
Rk9DVVNBQkxFKTsKIApAQCAtNjk0LDEzICs3MDEsNDQgQEAgc3RhdGljIHZvaWQgYXRrX2FjdGlv
bl9pbnRlcmZhY2VfaW5pdChBdGtBY3Rpb25JZmFjZSogaWZhY2UpCiAKIC8vIFNlbGVjdGlvbiAo
Zm9yIGNvbnRyb2xzKQogCitzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9iamVjdEZv
clNlbGVjdGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworCisgICAgLy8gT25seSBs
aXN0IGJveGVzIGFuZCBtZW51IGxpc3RzIHN1cHBvcnRlZCBzbyBmYXIuCisgICAgaWYgKCFjb3Jl
U2VsZWN0aW9uLT5pc0xpc3RCb3goKSAmJiAhY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZvciBsaXN0IGJveGVzIHRoZSBsaXN0IG9iamVj
dCBpcyBqdXN0IGl0c2VsZi4KKyAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpCisg
ICAgICAgIHJldHVybiBjb3JlU2VsZWN0aW9uOworCisgICAgLy8gRm9yIG1lbnUgbGlzdHMgd2Ug
bmVlZCB0byByZXR1cm4gdGhlIGZpcnN0IGFjY2Vzc2libGUgY2hpbGQsCisgICAgLy8gd2l0aCBy
b2xlIE1lbnVMaXN0UG9wdXBSb2xlLCBzaW5jZSB0aGF0J3MgdGhlIG9uZSBob2xkaW5nIHRoZSBs
aXN0CisgICAgLy8gb2YgaXRlbXMgd2l0aCByb2xlIE1lbnVMaXN0T3B0aW9uUm9sZS4KKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4g
PSBjb3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOworICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxpc3RPYmplY3Qg
PSBjaGlsZHJlbi5hdCgwKS5nZXQoKTsKKyAgICBpZiAoIWxpc3RPYmplY3QtPmlzTWVudUxpc3RQ
b3B1cCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBsaXN0T2JqZWN0OworfQor
CiBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbUxpc3QoQXRrU2VsZWN0aW9u
KiBzZWxlY3Rpb24sIGdpbnQgaSkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2Vs
ZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwogICAgIGlmICghY29yZVNlbGVjdGlvbiB8fCBpIDwg
MCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igb3B0aW9ucyA9IGNvcmUoc2VsZWN0aW9uKS0+Y2hp
bGRyZW4oKTsKKyAgICAvLyBOZWVkIHRvIHNlbGVjdCB0aGUgcHJvcGVyIGxpc3Qgb2JqZWN0IGRl
cGVuZGluZyBvbiB0aGUgdHlwZS4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T2JqZWN0
ID0gbGlzdE9iamVjdEZvclNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIGlmICghbGlzdE9iamVj
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igb3B0aW9ucyA9IGxpc3RPYmplY3QtPmNoaWxkcmVu
KCk7CiAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihvcHRpb25zLnNpemUoKSkpCiAgICAg
ICAgIHJldHVybiBvcHRpb25zLmF0KGkpLmdldCgpOwogCkBAIC03MTIsMTQgKzc1MCwyNiBAQCBz
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uRnJvbVNlbGVjdGlvbihBdGtTZWxlY3Rp
b24qIHNlbGVjdGlvbiwgZ2ludCBpKQogICAgIC8vIGkgaXMgdGhlIGl0aCBzZWxlY3Rpb24gYXMg
b3Bwb3NlZCB0byB0aGUgaXRoIGNoaWxkLgogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwg
aSA8IDApCisgICAgaWYgKCFjb3JlU2VsZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9uLT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSB8fCBpIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
c2VsZWN0ZWRJdGVtczsKICAgICBpZiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkpCi0gICAg
ICAgIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94Kj4oY29yZVNlbGVjdGlvbiktPnNl
bGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgICAgIGNvcmVTZWxlY3Rpb24tPnNl
bGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CisgICAgZWxzZSBpZiAoY29yZVNlbGVjdGlv
bi0+aXNNZW51TGlzdCgpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0b0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoY29yZVNlbGVjdGlvbiktPnJlbmRlcmVyKCk7CisgICAg
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBTZWxl
Y3RFbGVtZW50KiBzZWxlY3ROb2RlID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPihyZW5kZXJlci0+bm9kZSgpKSk7CisgICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gc2Vs
ZWN0Tm9kZS0+c2VsZWN0ZWRJbmRleCgpOworICAgICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+
IGxpc3RJdGVtcyA9IHNlbGVjdE5vZGUtPmxpc3RJdGVtcygpOwogCi0gICAgLy8gVE9ETzogQ29t
Ym8gYm94ZXMKKyAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCAwIHx8IHNlbGVjdGVkSW5kZXgg
Pj0gc3RhdGljX2Nhc3Q8aW50PihsaXN0SXRlbXMuc2l6ZSgpKSkKKyAgICAgICAgICAgIHJldHVy
biAwOworCisgICAgICAgIHJldHVybiBvcHRpb25Gcm9tTGlzdChzZWxlY3Rpb24sIHNlbGVjdGVk
SW5kZXgpOworICAgIH0KIAogICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4oc2VsZWN0ZWRJ
dGVtcy5zaXplKCkpKQogICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5hdChpKS5nZXQoKTsK
QEAgLTcyOSwxMSArNzc5LDE0IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb25G
cm9tU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBnaW50IGkpCiAKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fYWRkX3NlbGVjdGlvbihBdGtTZWxl
Y3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpKQogeworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7CisgICAgaWYgKCFjb3JlU2VsZWN0aW9uKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb24g
PSBvcHRpb25Gcm9tTGlzdChzZWxlY3Rpb24sIGkpOwotICAgIGlmIChvcHRpb24gJiYgY29yZShz
ZWxlY3Rpb24pLT5pc0xpc3RCb3goKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbiogbGlzdEJveE9wdGlvbiA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0
aW9uKj4ob3B0aW9uKTsKLSAgICAgICAgbGlzdEJveE9wdGlvbi0+c2V0U2VsZWN0ZWQodHJ1ZSk7
Ci0gICAgICAgIHJldHVybiBsaXN0Qm94T3B0aW9uLT5pc1NlbGVjdGVkKCk7CisgICAgaWYgKG9w
dGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNN
ZW51TGlzdCgpKSkgeworICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKHRydWUpOworICAgICAg
ICByZXR1cm4gb3B0aW9uLT5pc1NlbGVjdGVkKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzQ2LDcgKzc5OSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfYWNjZXNzaWJsZV9z
ZWxlY3Rpb25fY2xlYXJfc2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOwotICAgIGlmIChjb3JlU2VsZWN0aW9uLT5p
c0xpc3RCb3goKSkgeworICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBjb3Jl
U2VsZWN0aW9uLT5pc01lbnVMaXN0KCkpIHsKICAgICAgICAgLy8gU2V0IHRoZSBsaXN0IG9mIHNl
bGVjdGVkIGl0ZW1zIHRvIGFuIGVtcHR5IGxpc3Q7IHRoZW4gdmVyaWZ5IHRoYXQgaXQgd29ya2Vk
LgogICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveCogbGlzdEJveCA9IHN0YXRpY19jYXN0PEFj
Y2Vzc2liaWxpdHlMaXN0Qm94Kj4oY29yZVNlbGVjdGlvbik7CiAgICAgICAgIGxpc3RCb3gtPnNl
dFNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7CkBAIC03NzEsMzIgKzgyNCw1NCBAQCBz
dGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRfYWNjZXNzaWJsZV9zZWxlY3Rpb25fcmVmX3NlbGVjdGlv
bihBdGtTZWxlY3Rpb24qIHNlbGVjdAogc3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfc2Vs
ZWN0aW9uX2dldF9zZWxlY3Rpb25fY291bnQoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24pCiB7CiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsK
LSAgICBpZiAoY29yZVNlbGVjdGlvbiAmJiBjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSkgewor
ICAgIGlmICghY29yZVNlbGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGNvcmVTZWxlY3Rp
b24tPmlzTGlzdEJveCgpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOwotICAgICAgICBzdGF0aWNf
Y2FzdDxBY2Nlc3NpYmlsaXR5TGlzdEJveCo+KGNvcmVTZWxlY3Rpb24pLT5zZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkSXRlbXMpOworICAgICAgICBjb3JlU2VsZWN0aW9uLT5zZWxlY3RlZENoaWxk
cmVuKHNlbGVjdGVkSXRlbXMpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2ludD4oc2Vs
ZWN0ZWRJdGVtcy5zaXplKCkpOwogICAgIH0KIAorICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc01l
bnVMaXN0KCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdChjb3JlU2VsZWN0aW9uKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYg
KCFyZW5kZXJlcikKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIFNlbGVjdEVsZW1l
bnQqIHNlbGVjdE5vZGUgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHJl
bmRlcmVyLT5ub2RlKCkpKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBzZWxlY3ROb2Rl
LT5zZWxlY3RlZEluZGV4KCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4gbGlzdEl0
ZW1zID0gc2VsZWN0Tm9kZS0+bGlzdEl0ZW1zKCk7CisKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVk
SW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihsaXN0SXRlbXMu
c2l6ZSgpKTsKKyAgICB9CisKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdl
YmtpdF9hY2Nlc3NpYmxlX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZChBdGtTZWxlY3Rpb24q
IHNlbGVjdGlvbiwgZ2ludCBpKQogeworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxl
Y3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7CisgICAgaWYgKCFjb3JlU2VsZWN0aW9uKQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZy
b21MaXN0KHNlbGVjdGlvbiwgaSk7Ci0gICAgaWYgKG9wdGlvbiAmJiBjb3JlKHNlbGVjdGlvbikt
PmlzTGlzdEJveCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb24qPihvcHRpb24pLT5pc1NlbGVjdGVkKCk7CisgICAgaWYgKG9wdGlvbiAmJiAo
Y29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgp
KSkKKyAgICAgICAgcmV0dXJuIG9wdGlvbi0+aXNTZWxlY3RlZCgpOwogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2FjY2Vzc2libGVfc2VsZWN0aW9uX3Jl
bW92ZV9zZWxlY3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaSkKIHsKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOworICAg
IGlmICghY29yZVNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBUT0RPOiBU
aGlzIGlzIG9ubHkgZ2V0dGluZyBjYWxsZWQgaWYgaSA9PSAwLiBXaGF0IGlzIHByZXZlbnRpbmcg
dGhlIHJlc3Q/CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbVNl
bGVjdGlvbihzZWxlY3Rpb24sIGkpOwotICAgIGlmIChvcHRpb24gJiYgY29yZShzZWxlY3Rpb24p
LT5pc0xpc3RCb3goKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbiogbGlz
dEJveE9wdGlvbiA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uKj4ob3B0
aW9uKTsKLSAgICAgICAgbGlzdEJveE9wdGlvbi0+c2V0U2VsZWN0ZWQoZmFsc2UpOwotICAgICAg
ICByZXR1cm4gIWxpc3RCb3hPcHRpb24tPmlzU2VsZWN0ZWQoKTsKKyAgICBpZiAob3B0aW9uICYm
IChjb3JlU2VsZWN0aW9uLT5pc0xpc3RCb3goKSB8fCBjb3JlU2VsZWN0aW9uLT5pc01lbnVMaXN0
KCkpKSB7CisgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWQoZmFsc2UpOworICAgICAgICByZXR1
cm4gIW9wdGlvbi0+aXNTZWxlY3RlZCgpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAg
LTk2OSw4ICsxMDQ0LDExIEBAIHN0YXRpYyBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfdGV4dChBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnCiAKICAgICBpZiAoY29y
ZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQogICAgICAgICByZXQgPSBjb3JlT2JqZWN0LT5kb0FY
U3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnQsIGxlbmd0aCkpOwotICAgIGVsc2UK
LSAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpLnN1YnN0cmluZyhz
dGFydCwgbGVuZ3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+c3Ry
aW5nVmFsdWUoKS5zdWJzdHJpbmcoc3RhcnQsIGxlbmd0aCk7CisgICAgICAgIGlmICghcmV0KQor
ICAgICAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpLnN1YnN0cmlu
ZyhzdGFydCwgbGVuZ3RoKTsKKyAgICB9CiAKICAgICBpZiAoIXJldC5sZW5ndGgoKSkgewogICAg
ICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gYXQgbGVhc3Qgd2l0aCBhbm9ueW1vdXMgUmVuZGVyQmxv
Y2tzIChlLmcuIGJvZHkgdGV4dCBhbW9uZ3N0IHBhcmFncmFwaHMpCkBAIC0yMTczLDE5ICsyMjUx
LDIzIEBAIHN0YXRpYyBndWludDE2IGdldEludGVyZmFjZU1hc2tGcm9tT2JqZWN0KEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGNv
cmVPYmplY3QtPnJvbGVWYWx1ZSgpOwogCiAgICAgLy8gQWN0aW9uCi0gICAgaWYgKCFjb3JlT2Jq
ZWN0LT5hY3Rpb25WZXJiKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGludGVyZmFjZU1hc2sgfD0g
MSA8PCBXQUlfQUNUSU9OOworICAgIC8vIEFzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRr
QWN0aW9uIGludGVyZmFjZSBpcyBhIHZlcnkKKyAgICAvLyBiYXNpYyBvbmUgKGp1c3QgcmVsYXlz
IGluIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGVhY2gKKyAgICAvLyBvYmplY3Qs
IGFuZCBvbmx5IHN1cHBvcnRzIGhhdmluZyBvbmUgYWN0aW9uIHBlciBvYmplY3QpLCBpdCBpcwor
ICAgIC8vIGJldHRlciBqdXN0IHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSBmb3IgZXZlcnkg
aW5zdGFuY2Ugb2YKKyAgICAvLyB0aGUgV2ViS2l0QWNjZXNzaWJsZSBjbGFzcyBhbmQgbGV0IFdl
YkNvcmUgZGVjaWRlIHdoYXQgdG8gZG8uCisgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSV9B
Q1RJT047CiAKLSAgICAgICAgaWYgKCFjb3JlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkgJiYgY29yZU9iamVjdC0+aXNMaW5rKCkpCi0gICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9
IDEgPDwgV0FJX0hZUEVSTElOSzsKLSAgICB9CisgICAgLy8gSHlwZXJsaW5rCisgICAgaWYgKGNv
cmVPYmplY3QtPmlzTGluaygpKQorICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX0hZ
UEVSTElOSzsKIAogICAgIC8vIFNlbGVjdGlvbgotICAgIGlmIChjb3JlT2JqZWN0LT5pc0xpc3RC
b3goKSkKKyAgICBpZiAoY29yZU9iamVjdC0+aXNMaXN0Qm94KCkgfHwgY29yZU9iamVjdC0+aXNN
ZW51TGlzdCgpKQogICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1NFTEVDVElPTjsK
IAogICAgIC8vIFRleHQgJiBFZGl0YWJsZSBUZXh0Ci0gICAgaWYgKHJvbGUgPT0gU3RhdGljVGV4
dFJvbGUpCisgICAgaWYgKHJvbGUgPT0gU3RhdGljVGV4dFJvbGUgfHwgY29yZU9iamVjdC0+aXNN
ZW51TGlzdE9wdGlvbigpKQogICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJX1RFWFQ7
CiAgICAgZWxzZSBpZiAoY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkp
IHsKICAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkgewpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAKaW5kZXggZTdmZjc4ZS4uMDdjYTkxMiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwCkBAIC01OCw4ICs1OCwxMSBAQCB2b2lkIFBvcHVw
TWVudUd0azo6c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBp
bmRleCkKICAgICB9IGVsc2UKICAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JlYWNoKEdUS19DT05U
QUlORVIobV9wb3B1cC5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrQ2FsbGJhY2s+KG1lbnVS
ZW1vdmVJdGVtKSwgdGhpcyk7CiAKLSAgICBpbnQgeCwgeTsKLSAgICBnZGtfd2luZG93X2dldF9v
cmlnaW4oZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQodmlldy0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpLCAmeCwgJnkpOworICAgIGludCB4ID0gMDsKKyAgICBp
bnQgeSA9IDA7CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
R1RLX1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSk7Cisg
ICAgaWYgKHdpbmRvdykKKyAgICAgICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKHdpbmRvdywgJngs
ICZ5KTsKICAgICBtX21lbnVQb3NpdGlvbiA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5s
b2NhdGlvbigpKTsKICAgICBtX21lbnVQb3NpdGlvbiA9IEludFBvaW50KG1fbWVudVBvc2l0aW9u
LngoKSArIHgsIG1fbWVudVBvc2l0aW9uLnkoKSArIHkgKyByZWN0LmhlaWdodCgpKTsKICAgICBt
X2luZGV4TWFwLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGFhMGMwZGEuLjNkNmQzNTEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTAtMTEtMTcgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBST0xFX0NPTUJPX0JPWAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzgKKworICAgICAgICBOZXcgdGVzdCB0byBjaGVjayB0
aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbWJvIGJveGVzLgorCisgICAgICAgICogdGVzdHMv
dGVzdGF0ay5jOgorICAgICAgICAodGVzdFdlYmtpdEF0a0NvbWJvQm94KTogTmV3IHRlc3QsIGNo
ZWNraW5nIHRoYXQgdGhlIHJvbGVzIGFuZCB0aGUKKyAgICAgICAgaW1wbGVtZW50ZWQgaW50ZXJm
YWNlcyBmb3IgYSBjb21ibyBib3ggYW5kIGl0cyBkZXNjZW5kYW50cyB3b3JrLgorICAgICAgICAo
bWFpbik6IEFkZGVkIHRoZSBuZXcgdW5pdCB0ZXN0LgorCiAyMDEwLTExLTExICBKb29uZSBIdXIg
IDxqb29uZUBrbGRwLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RhdGsuYwppbmRleCA1MDljYjg2Li5iMWJjMzYzIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RhdGsuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpAQCAtNDQs
NiArNDQsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNJblRhYmxlID0gIjxodG1sPjxi
b2R5Pjx0YWJsZT48dHI+PHRkPmZvbzwvdGQ+PHRkPmJhcgogCiBzdGF0aWMgY29uc3QgY2hhciog
Y29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMgPSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0cj48dGg+
Zm9vPC90aD48dGg+YmFyPC90aD48dGggY29sc3Bhbj0nMic+YmF6PC90aD48L3RyPjx0cj48dGg+
cXV4PC90aD48dGQ+MTwvdGQ+PHRkPjI8L3RkPjx0ZD4zPC90ZD48L3RyPjx0cj48dGggcm93c3Bh
bj0nMic+cXV1eDwvdGg+PHRkPjQ8L3RkPjx0ZD41PC90ZD48dGQ+NjwvdGQ+PC90cj48dHI+PHRk
PjY8L3RkPjx0ZD43PC90ZD48dGQ+ODwvdGQ+PC90cj48dHI+PHRoPmNvcmdlPC90aD48dGQ+OTwv
dGQ+PHRkPjEwPC90ZD48dGQ+MTE8L3RkPjwvdHI+PC90YWJsZT48dGFibGU+PHRyPjx0ZD4xPC90
ZD48dGQ+MjwvdGQ+PC90cj48dHI+PHRkPjM8L3RkPjx0ZD40PC90ZD48L3RyPjwvdGFibGU+PC9i
b2R5PjwvaHRtbD4iOwogCitzdGF0aWMgY29uc3QgY2hhciogY29tYm9Cb3hTZWxlY3RvciA9ICI8
aHRtbD48Ym9keT48c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9J2Zvbyc+Zm9vPC9vcHRp
b24+PG9wdGlvbiB2YWx1ZT0nYmFyJz5iYXI8L29wdGlvbj48L3NlbGVjdD48L2JvZHk+PC9odG1s
PiI7CisKIHN0YXRpYyBjb25zdCBjaGFyKiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0bWw+PGJv
ZHk+PGZvcm0+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2VudHJ5JyAvPjwvZm9ybT48L2JvZHk+
PC9odG1sPiI7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBoeXBlcnRleHRBbmRIeXBlcmxpbmtzID0g
IjxodG1sPjxib2R5PjxwPkEgcGFyYWdyYXBoIHdpdGggbm8gbGlua3MgYXQgYWxsPC9wPjxwPjxh
IGhyZWY9J2h0dHA6Ly9mb28uYmFyLmJhei8nPkEgbGluZTwvYT4gd2l0aCA8YSBocmVmPSdodHRw
Oi8vYmFyLmJhei5mb28vJz5hIGxpbmsgaW4gdGhlIG1pZGRsZTwvYT4gYXMgd2VsbCBhcyBhdCB0
aGUgYmVnaW5uaW5nIGFuZCA8YSBocmVmPSdodHRwOi8vYmF6LmZvby5iYXIvJz5hdCB0aGUgZW5k
PC9hPjwvcD48L2JvZHk+PC9odG1sPiI7CkBAIC0yMjEsNiArMjIzLDEwNyBAQCBzdGF0aWMgdm9p
ZCBydW5HZXRUZXh0VGVzdHMoQXRrVGV4dCogdGV4dE9iamVjdCkKICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICJUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBB
bmQgdGhpcyB0aGUgdGhpcmQuIiwgMCwgNjQpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0V2Via2l0
QXRrQ29tYm9Cb3goKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJW
aWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07
CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxv
Y2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29tYm9C
b3hTZWxlY3RvciwgMCwgMCwgMCk7CisKKyAgICAvKiBXYWl0IGZvciB0aGUgYWNjZXNzaWJsZSBv
YmplY3RzIHRvIGJlIGNyZWF0ZWQuICovCisgICAgd2FpdEZvckFjY2Vzc2libGVPYmplY3RzKCk7
CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RL
X1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIEF0a09iamVj
dCogZm9ybU9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAw
KTsKKyAgICBnX2Fzc2VydChmb3JtT2JqZWN0KTsKKworICAgIEF0a09iamVjdCogY29tYm9Cb3gg
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm1PYmplY3QsIDApOworICAgIGdf
YXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9Cb3gpKTsKKworICAgIEF0a09iamVjdCogbWVudVBv
cHVwID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChjb21ib0JveCwgMCk7CisgICAg
Z19hc3NlcnQoQVRLX0lTX09CSkVDVChtZW51UG9wdXApKTsKKworICAgIEF0a09iamVjdCogaXRl
bTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG1lbnVQb3B1cCwgMCk7CisgICAg
Z19hc3NlcnQoQVRLX0lTX09CSkVDVChpdGVtMSkpOworCisgICAgQXRrT2JqZWN0KiBpdGVtMiA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobWVudVBvcHVwLCAxKTsKKyAgICBnX2Fz
c2VydChBVEtfSVNfT0JKRUNUKGl0ZW0yKSk7CisKKyAgICAvKiBDaGVjayByb2xlcy4gKi8KKyAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvQm94KSA9PSBBVEtfUk9MRV9DT01C
T19CT1gpOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobWVudVBvcHVwKSA9PSBB
VEtfUk9MRV9NRU5VKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGl0ZW0xKSA9
PSBBVEtfUk9MRV9NRU5VX0lURU0pOworICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUo
aXRlbTIpID09IEFUS19ST0xFX01FTlVfSVRFTSk7CisKKyAgICAvKiBDaGVjayB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEF0a1NlbGVjdGlvbiBpbnRlcmZhY2UuICovCisgICAgZ19hc3NlcnQo
QVRLX0lTX1NFTEVDVElPTihjb21ib0JveCkpOworICAgIEF0a1NlbGVjdGlvbiogYXRrU2VsZWN0
aW9uID0gQVRLX1NFTEVDVElPTihjb21ib0JveCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0a19z
ZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9jb3VudChhdGtTZWxlY3Rpb24pLCA9PSwgMSk7CisgICAg
Z19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDAp
KTsKKyAgICBnX2Fzc2VydCghYXRrX3NlbGVjdGlvbl9pc19jaGlsZF9zZWxlY3RlZChhdGtTZWxl
Y3Rpb24sIDEpKTsKKyAgICBBdGtPYmplY3QqIHNlbGVjdGVkSXRlbSA9IGF0a19zZWxlY3Rpb25f
cmVmX3NlbGVjdGlvbihhdGtTZWxlY3Rpb24sIDApOworICAgIGdfYXNzZXJ0KHNlbGVjdGVkSXRl
bSA9PSBpdGVtMSk7CisgICAgZ19vYmplY3RfdW5yZWYoc2VsZWN0ZWRJdGVtKTsKKworICAgIC8q
IENoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEF0a0FjdGlvbiBpbnRlcmZhY2UuICov
CisgICAgZ19hc3NlcnQoQVRLX0lTX0FDVElPTihjb21ib0JveCkpOworICAgIEF0a0FjdGlvbiog
YXRrQWN0aW9uID0gQVRLX0FDVElPTihjb21ib0JveCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0
a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7CisgICAgZ19hc3NlcnQo
YXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7CisKKyAgICBnX2Fzc2VydChBVEtf
SVNfQUNUSU9OKG1lbnVQb3B1cCkpOworICAgIGF0a0FjdGlvbiA9IEFUS19BQ1RJT04obWVudVBv
cHVwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0Fj
dGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rp
b24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oaXRlbTEpKTsKKyAgICBhdGtB
Y3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0xKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2FjdGlv
bl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsKKyAgICBnX2Fzc2VydChhdGtfYWN0
aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAgIGdfYXNzZXJ0KEFUS19JU19BQ1RJ
T04oaXRlbTIpKTsKKyAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKGl0ZW0yKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoYXRrX2FjdGlvbl9nZXRfbl9hY3Rpb25zKGF0a0FjdGlvbiksID09LCAxKTsK
KyAgICBnX2Fzc2VydChhdGtfYWN0aW9uX2RvX2FjdGlvbihhdGtBY3Rpb24sIDApKTsKKworICAg
IC8qIEFmdGVyIHNlbGVjdGluZyB0aGUgc2Vjb25kIGl0ZW0sIHNlbGVjdGlvbiBzaG91bGQgaGF2
ZSBjaGFuZ2VkLiAqLworICAgIGdfYXNzZXJ0X2NtcGludChhdGtfc2VsZWN0aW9uX2dldF9zZWxl
Y3Rpb25fY291bnQoYXRrU2VsZWN0aW9uKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0KCFhdGtfc2Vs
ZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMCkpOworICAgIGdfYXNzZXJ0
KGF0a19zZWxlY3Rpb25faXNfY2hpbGRfc2VsZWN0ZWQoYXRrU2VsZWN0aW9uLCAxKSk7CisgICAg
c2VsZWN0ZWRJdGVtID0gYXRrX3NlbGVjdGlvbl9yZWZfc2VsZWN0aW9uKGF0a1NlbGVjdGlvbiwg
MCk7CisgICAgZ19hc3NlcnQoc2VsZWN0ZWRJdGVtID09IGl0ZW0yKTsKKyAgICBnX29iamVjdF91
bnJlZihzZWxlY3RlZEl0ZW0pOworCisgICAgLyogQ2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9m
IHRoZSBBdGtUZXh0IGludGVyZmFjZS4gKi8KKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChpdGVt
MSkpOworICAgIEF0a1RleHQqIGF0a1RleHQgPSBBVEtfVEVYVChpdGVtMSk7CisgICAgY2hhciAq
dGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KGF0a1RleHQsIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGV4dCwgPT0sICJmb28iKTsKKyAgICBnX2ZyZWUodGV4dCk7CisgICAgdGV4dCA9IGF0
a190ZXh0X2dldF90ZXh0KGF0a1RleHQsIDAsIDIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
LCA9PSwgImZvIik7CisgICAgZ19mcmVlKHRleHQpOworCisgICAgZ19hc3NlcnQoQVRLX0lTX1RF
WFQoaXRlbTIpKTsKKyAgICBhdGtUZXh0ID0gQVRLX1RFWFQoaXRlbTIpOworICAgIHRleHQgPSBh
dGtfdGV4dF9nZXRfdGV4dChhdGtUZXh0LCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRl
eHQsID09LCAiYmFyIik7CisgICAgZ19mcmVlKHRleHQpOworICAgIHRleHQgPSBhdGtfdGV4dF9n
ZXRfdGV4dChhdGtUZXh0LCAxLCAzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJh
ciIpOworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGZvcm1PYmplY3Qp
OworICAgIGdfb2JqZWN0X3VucmVmKGNvbWJvQm94KTsKKyAgICBnX29iamVjdF91bnJlZihtZW51
UG9wdXApOworICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKKyAgICBnX29iamVjdF91bnJlZihp
dGVtMik7CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKIHN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRGb3JtcygpCiB7CiAgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwpAQCAtMTIw
MSw2ICsxMzA0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIGd0a190
ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKIAogICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9j
b21ib0JveCIsIHRlc3RXZWJraXRBdGtDb21ib0JveCk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9nZXRUZXh0QXRPZmZzZXQiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0
KTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRBdE9mZnNldEZvcm1z
IiwgdGVzdFdlYmtpdEF0a0dldFRleHRBdE9mZnNldEZvcm1zKTsKICAgICBnX3Rlc3RfYWRkX2Z1
bmMoIi93ZWJraXQvYXRrL2dldFRleHRBdE9mZnNldE5ld2xpbmVzIiwgdGVzdFdlYmtpdEF0a0dl
dFRleHRBdE9mZnNldE5ld2xpbmVzKTsKLS0gCjEuNy4zLjIKCg==
</data>
<flag name="review"
          id="64669"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>