<?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>118969</bug_id>
          
          <creation_ts>2013-07-22 07:07:44 -0700</creation_ts>
          <short_desc>[ATK] Implement tables-related attributesOf*() functions for AccessibilityUIElement</short_desc>
          <delta_ts>2013-11-06 05:53:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>LayoutTestFailure</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98348</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>k.czech</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>910665</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-22 07:07:44 -0700</bug_when>
    <thetext>Implementing some table-related functions in AccessibilityUIElement would help to run properly the following tests, now in TestExpectations:

  accessibility/table-attributes.html
  accessibility/table-sections.html

The list of functions that should be implemented are:
  - attributesOfColumnHeaders()
  - attributesOfRowHeaders()
  - attributesOfColumns()
  - attributesOfRows()
  - attributesOfHeader()
  - attributesOfVisibleCell()

Additionally, it should help to to provide more accurate (and useful!) results for accessibility/aria-tables.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947113</commentid>
    <comment_count>1</comment_count>
      <attachid>216024</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-05 04:42:42 -0800</bug_when>
    <thetext>Created attachment 216024
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947115</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-05 04:43:54 -0800</bug_when>
    <thetext>Attachment 216024 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp&apos;, u&apos;Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp&apos;]&quot; exit_code: 1
Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:439:  Missing space before ( in for(  [whitespace/parens] [5]
Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:449:  Missing space before ( in for(  [whitespace/parens] [5]
Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:455:  Missing space before ( in for(  [whitespace/parens] [5]
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:374:  Missing space before ( in for(  [whitespace/parens] [5]
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:384:  Missing space before ( in for(  [whitespace/parens] [5]
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:390:  Missing space before ( in for(  [whitespace/parens] [5]
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:398:  Missing space before ( in for(  [whitespace/parens] [5]
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:399:  Missing space before ( in for(  [whitespace/parens] [5]
Total errors found: 8 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947118</commentid>
    <comment_count>3</comment_count>
      <attachid>216025</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-05 04:50:14 -0800</bug_when>
    <thetext>Created attachment 216025
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947119</commentid>
    <comment_count>4</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-05 04:51:31 -0800</bug_when>
    <thetext>I provided a proposed patch of missing implementation of table-related* functions. Generally it seems not every function could be implemented (example, attributesOfRows, attributesOfColumns, attributesOfHeader). Looks like columns, rows and header are not exposed in ATK so far.

So I guess we should provide new baselines for:
 accessibility/table-attributes.html
 accessibility/table-sections.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947133</commentid>
    <comment_count>5</comment_count>
      <attachid>216025</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-11-05 05:36:46 -0800</bug_when>
    <thetext>Comment on attachment 216025
patch

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

(In reply to comment #4)
&gt; I provided a proposed patch of missing implementation of table-related* functions. Generally it seems not every function could be implemented (example, attributesOfRows, attributesOfColumns, attributesOfHeader). Looks like columns, rows and header are not exposed in ATK so far.
&gt; 
&gt; So I guess we should provide new baselines for:
&gt;  accessibility/table-attributes.html
&gt;  accessibility/table-sections.html

I think that&apos;s right. Please consider my review below though. Thanks!

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:382
&gt; +static void getRowHeaders(AtkObject* accessible, Vector&lt;AccessibilityUIElement&gt;&amp; rowHeaders)

This function only works for AtkTable, so I think you can already expect that type as the first parameter and avoid the casts below. Just make sure you check and cast properly to AtkTable at the caller points

Also, I think this is one of those cases where you can use the &quot;move semantics&quot; feature of C++11, which is already supported by Vector through its move contructor Vector(Vector&amp;&amp;). See https://www.webkit.org/blog/3172/webkit-and-cxx11/

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:384
&gt; +    for (int row = 0; row &lt; atk_table_get_n_rows(ATK_TABLE(accessible)); ++row)

I think it&apos;s better to put the result of get_n_rows() in a variable and use it in the limit condition in the loop, to avoid too many calls to this function.

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:388
&gt; +static void getColumnHeaders(AtkObject* accessible, Vector&lt;AccessibilityUIElement&gt;&amp; columnHeaders)

Same considerations than before here (and in the rest of the patch)

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:400
&gt; +    for (int row = 0; row &lt; atk_table_get_n_rows(ATK_TABLE(accessibilityObject)); ++row)
&gt; +        for (int column = 0; column &lt; atk_table_get_n_columns(ATK_TABLE(accessibilityObject)); ++column)
&gt; +            visibleCells.append(uiElement-&gt;cellForColumnAndRow(column, row));

Please use braces for the outermost loop. Also, you can store the get_n_rows() and get_n_columns() in variables too here

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:968
&gt; +    Vector&lt;AccessibilityUIElement&gt; columnHeaders;
&gt; +    getColumnHeaders(m_element, columnHeaders);

If the C++11 thing works, this will become one line :)

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:979
&gt; +    Vector&lt;AccessibilityUIElement&gt; rowHeaders;
&gt; +    getRowHeaders(m_element, rowHeaders);

Ditto.

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:1002
&gt; +    Vector&lt;AccessibilityUIElement&gt; visibleCells;
&gt; +    getVisibleCells(this, visibleCells);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947171</commentid>
    <comment_count>6</comment_count>
      <attachid>216039</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-05 07:43:17 -0800</bug_when>
    <thetext>Created attachment 216039
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947173</commentid>
    <comment_count>7</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-05 07:45:49 -0800</bug_when>
    <thetext>&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:382
&gt; &gt; +static void getRowHeaders(AtkObject* accessible, Vector&lt;AccessibilityUIElement&gt;&amp; rowHeaders)
&gt; 
&gt; This function only works for AtkTable, so I think you can already expect that type as the first parameter and avoid the casts below. Just make sure you check and cast properly to AtkTable at the caller points
Good point. Done.
&gt; 
&gt; Also, I think this is one of those cases where you can use the &quot;move semantics&quot; feature of C++11, which is already supported by Vector through its move contructor Vector(Vector&amp;&amp;). See https://www.webkit.org/blog/3172/webkit-and-cxx11/

Very good idea. Done.
&gt; 
&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:384
&gt; &gt; +    for (int row = 0; row &lt; atk_table_get_n_rows(ATK_TABLE(accessible)); ++row)
&gt; 
&gt; I think it&apos;s better to put the result of get_n_rows() in a variable and use it in the limit condition in the loop, to avoid too many calls to this function.
&gt; 
You are right. Done.
&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:388
&gt; &gt; +static void getColumnHeaders(AtkObject* accessible, Vector&lt;AccessibilityUIElement&gt;&amp; columnHeaders)
&gt; 
&gt; Same considerations than before here (and in the rest of the patch)
&gt; 
&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:400
&gt; &gt; +    for (int row = 0; row &lt; atk_table_get_n_rows(ATK_TABLE(accessibilityObject)); ++row)
&gt; &gt; +        for (int column = 0; column &lt; atk_table_get_n_columns(ATK_TABLE(accessibilityObject)); ++column)
&gt; &gt; +            visibleCells.append(uiElement-&gt;cellForColumnAndRow(column, row));
&gt; 
&gt; Please use braces for the outermost loop. Also, you can store the get_n_rows() and get_n_columns() in variables too here

Right, Done.
&gt; 
&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:968
&gt; &gt; +    Vector&lt;AccessibilityUIElement&gt; columnHeaders;
&gt; &gt; +    getColumnHeaders(m_element, columnHeaders);
&gt; 
&gt; If the C++11 thing works, this will become one line :)
Done.
&gt; 
&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:979
&gt; &gt; +    Vector&lt;AccessibilityUIElement&gt; rowHeaders;
&gt; &gt; +    getRowHeaders(m_element, rowHeaders);
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:1002
&gt; &gt; +    Vector&lt;AccessibilityUIElement&gt; visibleCells;
&gt; &gt; +    getVisibleCells(this, visibleCells);
&gt; 
&gt; Ditto.
Done.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947623</commentid>
    <comment_count>8</comment_count>
      <attachid>216039</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-11-06 01:59:44 -0800</bug_when>
    <thetext>Comment on attachment 216039
patch

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

Looks good, except some nitpicks that would be great to fix. Same considerations apply to WKTR

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:374
&gt; +    for (Vector&lt;AccessibilityUIElement&gt;::iterator it = elements.begin(); it != elements.end(); ++it) {

Sorry I haven&apos;t realized of this first, but as you don&apos;t need to modify this object, you can use const_iterator here instead

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:387
&gt; +

I think this blank line is not needed

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:399
&gt; +

Ditto

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:406
&gt; +static Vector&lt;AccessibilityUIElement&gt; getVisibleCells(AccessibilityUIElement* uiElement)

In this file, we normally call this parameter &quot;element&quot;, not &quot;uiElement&quot;

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:987
&gt; +

Extra line not needed

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:997
&gt; +

Ditto.

&gt; Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:1019
&gt; +

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947665</commentid>
    <comment_count>9</comment_count>
      <attachid>216167</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-06 05:10:07 -0800</bug_when>
    <thetext>Created attachment 216167
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947666</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-06 05:11:13 -0800</bug_when>
    <thetext>Attachment 216167 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp&apos;, u&apos;Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp&apos;]&quot; exit_code: 1
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:596:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:599:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 2 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947667</commentid>
    <comment_count>11</comment_count>
      <attachid>216168</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-06 05:13:38 -0800</bug_when>
    <thetext>Created attachment 216168
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947668</commentid>
    <comment_count>12</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2013-11-06 05:15:06 -0800</bug_when>
    <thetext>Applied all suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947675</commentid>
    <comment_count>13</comment_count>
      <attachid>216168</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-11-06 05:22:56 -0800</bug_when>
    <thetext>Comment on attachment 216168
patch

Lgtm. Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947679</commentid>
    <comment_count>14</comment_count>
      <attachid>216168</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-06 05:53:38 -0800</bug_when>
    <thetext>Comment on attachment 216168
patch

Clearing flags on attachment: 216168

Committed r158742: &lt;http://trac.webkit.org/changeset/158742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947680</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-06 05:53:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216024</attachid>
            <date>2013-11-05 04:42:42 -0800</date>
            <delta_ts>2013-11-05 04:50:14 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a11y-table-related-functions.patch</filename>
            <type>text/plain</type>
            <size>9556</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNWZi
OGFjLi44MjYwYjY2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMTEtMDUgIEtyenlzenRvZiBDemVjaCAgPGsu
Y3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gSW1wbGVtZW50IHRhYmxlcy1yZWxh
dGVkIGF0dHJpYnV0ZXNPZiooKSBmdW5jdGlvbnMgZm9yIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG1p
c3NpbmcgaW1wbGVtZW50YXRpb24gb2YgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVycywgYXR0cmli
dXRlc09mUm93SGVhZGVycywgYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxs
cyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgor
CiAyMDEzLTExLTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEFkZCB0ZXN0IGZvciBMaXN0SGFzaFNldDo6cmVtb3ZlTGFzdCgpCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAK
aW5kZXggM2ExYTlkNy4uNTIyMDAyNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
YXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtMzY3LDYgKzM2NywzOSBA
QCBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVt
ZW50KQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK3N0YXRpYyBKU1N0cmlu
Z1JlZiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4mIGVsZW1lbnRzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZv
cihWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD46Oml0ZXJhdG9yIGl0ID0gZWxlbWVudHMu
YmVnaW4oKTsgaXQgIT0gZWxlbWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoYXR0cmlidXRlc09mRWxlbWVudChpdCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgi
XG4tLS0tLS0tLS0tLS1cbiIpOworICAgIH0KKworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhidWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3N0
YXRpYyB2b2lkIGdldFJvd0hlYWRlcnMoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBWZWN0b3I8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4mIHJvd0hlYWRlcnMpCit7CisgICAgZm9yKGludCByb3cgPSAw
OyByb3cgPCBhdGtfdGFibGVfZ2V0X25fcm93cyhBVEtfVEFCTEUoYWNjZXNzaWJsZSkpOyArK3Jv
dykKKyAgICAgICAgcm93SGVhZGVycy5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhdGtf
dGFibGVfZ2V0X3Jvd19oZWFkZXIoQVRLX1RBQkxFKGFjY2Vzc2libGUpLCByb3cpKSk7Cit9CisK
K3N0YXRpYyB2b2lkIGdldENvbHVtbkhlYWRlcnMoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4mIGNvbHVtbkhlYWRlcnMpCit7CisgICAgZm9yKGlu
dCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFCTEUo
YWNjZXNzaWJsZSkpOyArK2NvbHVtbikKKyAgICAgICAgY29sdW1uSGVhZGVycy5hcHBlbmQoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RBQkxF
KGFjY2Vzc2libGUpLCBjb2x1bW4pKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldFZpc2libGVDZWxs
cyhBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiB1aUVsZW1lbnQsIFZlY3RvcjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiYgdmlzaWJsZUNlbGxzKQoreworICAgIEF0a09iamVjdCogYWNjZXNzaWJpbGl0
eU9iamVjdCA9IHVpRWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKTsKKworICAgIGZvcihpbnQg
cm93ID0gMDsgcm93IDwgYXRrX3RhYmxlX2dldF9uX3Jvd3MoQVRLX1RBQkxFKGFjY2Vzc2liaWxp
dHlPYmplY3QpKTsgKytyb3cpCisgICAgICAgIGZvcihpbnQgY29sdW1uID0gMDsgY29sdW1uIDwg
YXRrX3RhYmxlX2dldF9uX2NvbHVtbnMoQVRLX1RBQkxFKGFjY2Vzc2liaWxpdHlPYmplY3QpKTsg
Kytjb2x1bW4pCisgICAgICAgICAgICB2aXNpYmxlQ2VsbHMuYXBwZW5kKHVpRWxlbWVudC0+Y2Vs
bEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdykpOworfQorCiB9IC8vIG5hbWVzcGFjZQogCiBK
U1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBi
b29sIGlzUm93UmFuZ2UpCkBAIC02MDEsMTMgKzYzNCw3IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKICAgICBWZWN0b3I8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gY2hpbGRyZW47CiAgICAgZ2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwog
Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoVmVjdG9yPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+OjppdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGF0dHJpYnV0ZXNPZkVs
ZW1lbnQoaXQpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuLS0tLS0tLS0tLS0tXG4iKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVpbGRl
ci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRo
QXR0cmlidXRlcyhjaGlsZHJlbik7CiB9CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1lcygpCkBAIC05MzQsMTQgKzk2MSwyNCBA
QCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0CiAKIEpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQpKQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBjb2x1bW5IZWFkZXJzOworICAgIGdldENv
bHVtbkhlYWRlcnMobV9lbGVtZW50LCBjb2x1bW5IZWFkZXJzKTsKKworICAgIHJldHVybiBjcmVh
dGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjb2x1bW5IZWFkZXJzKTsKIH0KIAogSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpCisgICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgVmVjdG9yPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+IHJvd0hlYWRlcnM7CisgICAgZ2V0Um93SGVhZGVycyhtX2Vs
ZW1lbnQsIHJvd0hlYWRlcnMpOworCisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1
dGVzKHJvd0hlYWRlcnMpOwogfQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKQEAgLTk1OCw4ICs5OTUsMTMgQEAgSlNTdHJpbmdSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiAKIEpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudCkpCisgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgVmVjdG9y
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IHZpc2libGVDZWxsczsKKyAgICBnZXRWaXNpYmxlQ2Vs
bHModGhpcywgdmlzaWJsZUNlbGxzKTsKKworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0
cmlidXRlcyh2aXNpYmxlQ2VsbHMpOwogfQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcAppbmRleCBjZjFiY2VmLi4xOWZmYzY5IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50QXRrLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0
ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtNDMyLDYgKzQzMiwzOSBAQCBTdHJp
bmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQog
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK3N0YXRpYyBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMoVmVjdG9yPFJlZlB0cjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50PiA+JiBlbGVtZW50cykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisKKyAgICBmb3IoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+
OjppdGVyYXRvciBpdCA9IGVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVsZW1lbnRzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQoaXQtPmdl
dCgpKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tLS0tLVxuIik7CisgICAg
fQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1aWxkZXIudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0Um93SGVhZGVycyhB
dGtPYmplY3QqIGFjY2Vzc2libGUsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gPiYgcm93SGVhZGVycykKK3sKKyAgICBmb3IoaW50IHJvdyA9IDA7IHJvdyA8IGF0a190YWJs
ZV9nZXRfbl9yb3dzKEFUS19UQUJMRShhY2Nlc3NpYmxlKSk7ICsrcm93KQorICAgICAgICByb3dI
ZWFkZXJzLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoYXRrX3RhYmxlX2dl
dF9yb3dfaGVhZGVyKEFUS19UQUJMRShhY2Nlc3NpYmxlKSwgcm93KSkpOworfQorCitzdGF0aWMg
dm9pZCBnZXRDb2x1bW5IZWFkZXJzKEF0a09iamVjdCogYWNjZXNzaWJsZSwgVmVjdG9yPFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+JiBjb2x1bW5IZWFkZXJzKQoreworICAgIGZvcihp
bnQgY29sdW1uID0gMDsgY29sdW1uIDwgYXRrX3RhYmxlX2dldF9uX2NvbHVtbnMoQVRLX1RBQkxF
KGFjY2Vzc2libGUpKTsgKytjb2x1bW4pCisgICAgICAgIGNvbHVtbkhlYWRlcnMuYXBwZW5kKEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIo
QVRLX1RBQkxFKGFjY2Vzc2libGUpLCBjb2x1bW4pKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldFZp
c2libGVDZWxscyhBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiB1aUVsZW1lbnQsIFZlY3RvcjxSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiYgdmlzaWJsZUNlbGxzKQoreworICAgIEF0a09i
amVjdCogYWNjZXNzaWJpbGl0eU9iamVjdCA9IHVpRWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQo
KS5nZXQoKTsKKworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGF0a190YWJsZV9nZXRfbl9y
b3dzKEFUS19UQUJMRShhY2Nlc3NpYmlsaXR5T2JqZWN0KSk7ICsrcm93KQorICAgICAgICBmb3Ig
KGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFC
TEUoYWNjZXNzaWJpbGl0eU9iamVjdCkpOyArK2NvbHVtbikKKyAgICAgICAgICAgIHZpc2libGVD
ZWxscy5hcHBlbmQodWlFbGVtZW50LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKQEAgLTYzMSwxMyArNjY0
LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZkNoaWxkcmVuKCkKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+ID4gY2hpbGRyZW47CiAgICAgZ2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogCi0gICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiA+OjppdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxk
cmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGF0dHJpYnV0ZXNPZkVs
ZW1lbnQoaXQtPmdldCgpKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tLS0t
LVxuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gY3JlYXRlU3Ry
aW5nV2l0aEF0dHJpYnV0ZXMoY2hpbGRyZW4pOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCkBAIC0xMDgyLDE0ICsx
MTA5LDI0IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFBVEtfSVNfVEFCTEUobV9lbGVtZW50LmdldCgp
KSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisK
KyAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gY29sdW1uSGVhZGVy
czsKKyAgICBnZXRDb2x1bW5IZWFkZXJzKG1fZWxlbWVudC5nZXQoKSwgY29sdW1uSGVhZGVycyk7
CisKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMoY29sdW1uSGVhZGVycyk7
CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFBVEtf
SVNfVEFCTEUobV9lbGVtZW50LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+ID4gcm93SGVhZGVyczsKKyAgICBnZXRSb3dIZWFkZXJzKG1fZWxlbWVudC5nZXQo
KSwgcm93SGVhZGVycyk7CisKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMo
cm93SGVhZGVycyk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKQEAgLTExMDYsOCArMTE0MywxMyBAQCBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mUm93cygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBp
ZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gPiB2aXNpYmxlQ2VsbHM7CisgICAgZ2V0VmlzaWJsZUNlbGxzKHRo
aXMsIHZpc2libGVDZWxscyk7CisKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0
ZXModmlzaWJsZUNlbGxzKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216025</attachid>
            <date>2013-11-05 04:50:14 -0800</date>
            <delta_ts>2013-11-05 07:43:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a11y-table-related-functions.patch</filename>
            <type>text/plain</type>
            <size>9564</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNWZi
OGFjLi44MjYwYjY2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMTEtMDUgIEtyenlzenRvZiBDemVjaCAgPGsu
Y3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gSW1wbGVtZW50IHRhYmxlcy1yZWxh
dGVkIGF0dHJpYnV0ZXNPZiooKSBmdW5jdGlvbnMgZm9yIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG1p
c3NpbmcgaW1wbGVtZW50YXRpb24gb2YgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVycywgYXR0cmli
dXRlc09mUm93SGVhZGVycywgYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxs
cyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgor
CiAyMDEzLTExLTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEFkZCB0ZXN0IGZvciBMaXN0SGFzaFNldDo6cmVtb3ZlTGFzdCgpCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAK
aW5kZXggM2ExYTlkNy4uNGIzZTU2OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
YXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtMzY3LDYgKzM2NywzOSBA
QCBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVt
ZW50KQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK3N0YXRpYyBKU1N0cmlu
Z1JlZiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4mIGVsZW1lbnRzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZv
ciAoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+OjppdGVyYXRvciBpdCA9IGVsZW1lbnRz
LmJlZ2luKCk7IGl0ICE9IGVsZW1lbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQoaXQpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
IlxuLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCitz
dGF0aWMgdm9pZCBnZXRSb3dIZWFkZXJzKEF0a09iamVjdCogYWNjZXNzaWJsZSwgVmVjdG9yPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+JiByb3dIZWFkZXJzKQoreworICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IGF0a190YWJsZV9nZXRfbl9yb3dzKEFUS19UQUJMRShhY2Nlc3NpYmxlKSk7ICsr
cm93KQorICAgICAgICByb3dIZWFkZXJzLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGF0
a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUoYWNjZXNzaWJsZSksIHJvdykpKTsKK30K
Kworc3RhdGljIHZvaWQgZ2V0Q29sdW1uSGVhZGVycyhBdGtPYmplY3QqIGFjY2Vzc2libGUsIFZl
Y3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgY29sdW1uSGVhZGVycykKK3sKKyAgICBmb3Ig
KGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFC
TEUoYWNjZXNzaWJsZSkpOyArK2NvbHVtbikKKyAgICAgICAgY29sdW1uSGVhZGVycy5hcHBlbmQo
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRLX1RB
QkxFKGFjY2Vzc2libGUpLCBjb2x1bW4pKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldFZpc2libGVD
ZWxscyhBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiB1aUVsZW1lbnQsIFZlY3RvcjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiYgdmlzaWJsZUNlbGxzKQoreworICAgIEF0a09iamVjdCogYWNjZXNzaWJp
bGl0eU9iamVjdCA9IHVpRWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKTsKKworICAgIGZvciAo
aW50IHJvdyA9IDA7IHJvdyA8IGF0a190YWJsZV9nZXRfbl9yb3dzKEFUS19UQUJMRShhY2Nlc3Np
YmlsaXR5T2JqZWN0KSk7ICsrcm93KQorICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1
bW4gPCBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhBVEtfVEFCTEUoYWNjZXNzaWJpbGl0eU9iamVj
dCkpOyArK2NvbHVtbikKKyAgICAgICAgICAgIHZpc2libGVDZWxscy5hcHBlbmQodWlFbGVtZW50
LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
CiAKIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1l
bnQsIGJvb2wgaXNSb3dSYW5nZSkKQEAgLTYwMSwxMyArNjM0LDcgQEAgSlNTdHJpbmdSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogICAgIFZlY3RvcjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBjaGlsZHJlbjsKICAgICBnZXRDaGlsZHJlbihjaGlsZHJl
bik7CiAKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChWZWN0b3I8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD46Oml0ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0g
Y2hpbGRyZW4uZW5kKCk7ICsraXQpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRl
c09mRWxlbWVudChpdCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1c
biIpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhi
dWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmlu
Z1dpdGhBdHRyaWJ1dGVzKGNoaWxkcmVuKTsKIH0KIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzKCkKQEAgLTkzNCwxNCArOTYx
LDI0IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKIAog
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVh
ZGVycygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGNvbHVtbkhlYWRlcnM7CisgICAg
Z2V0Q29sdW1uSGVhZGVycyhtX2VsZW1lbnQsIGNvbHVtbkhlYWRlcnMpOworCisgICAgcmV0dXJu
IGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKGNvbHVtbkhlYWRlcnMpOwogfQogCiBKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKCkKIHsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFBVEtfSVNfVEFCTEUobV9lbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gcm93SGVhZGVyczsKKyAgICBnZXRSb3dIZWFkZXJz
KG1fZWxlbWVudCwgcm93SGVhZGVycyk7CisKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0
dHJpYnV0ZXMocm93SGVhZGVycyk7CiB9CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQpAQCAtOTU4LDggKzk5NSwxMyBAQCBKU1N0cmlu
Z1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKCkKIAogSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFBVEtfSVNfVEFCTEUobV9lbGVtZW50KSkKKyAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBW
ZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gdmlzaWJsZUNlbGxzOworICAgIGdldFZpc2li
bGVDZWxscyh0aGlzLCB2aXNpYmxlQ2VsbHMpOworCisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dp
dGhBdHRyaWJ1dGVzKHZpc2libGVDZWxscyk7CiB9CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRr
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRBdGsuY3BwCmluZGV4IGNmMWJjZWYuLjY1ODc2ZjUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBAIC00MzIsNiArNDMyLDM5IEBA
IFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorc3RhdGljIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4mIGVsZW1lbnRzKQoreworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiA+OjppdGVyYXRvciBpdCA9IGVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVsZW1lbnRzLmVu
ZCgpOyArK2l0KSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQo
aXQtPmdldCgpKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tLS0tLVxuIik7
CisgICAgfQorCisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1aWxk
ZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0Um93SGVh
ZGVycyhBdGtPYmplY3QqIGFjY2Vzc2libGUsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4gPiYgcm93SGVhZGVycykKK3sKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBh
dGtfdGFibGVfZ2V0X25fcm93cyhBVEtfVEFCTEUoYWNjZXNzaWJsZSkpOyArK3JvdykKKyAgICAg
ICAgcm93SGVhZGVycy5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGF0a190
YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUoYWNjZXNzaWJsZSksIHJvdykpKTsKK30KKwor
c3RhdGljIHZvaWQgZ2V0Q29sdW1uSGVhZGVycyhBdGtPYmplY3QqIGFjY2Vzc2libGUsIFZlY3Rv
cjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiYgY29sdW1uSGVhZGVycykKK3sKKyAg
ICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhB
VEtfVEFCTEUoYWNjZXNzaWJsZSkpOyArK2NvbHVtbikKKyAgICAgICAgY29sdW1uSGVhZGVycy5h
cHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGF0a190YWJsZV9nZXRfY29sdW1u
X2hlYWRlcihBVEtfVEFCTEUoYWNjZXNzaWJsZSksIGNvbHVtbikpKTsKK30KKworc3RhdGljIHZv
aWQgZ2V0VmlzaWJsZUNlbGxzKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHVpRWxlbWVudCwgVmVj
dG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+JiB2aXNpYmxlQ2VsbHMpCit7Cisg
ICAgQXRrT2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0ID0gdWlFbGVtZW50LT5wbGF0Zm9ybVVJ
RWxlbWVudCgpLmdldCgpOworCisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgYXRrX3RhYmxl
X2dldF9uX3Jvd3MoQVRLX1RBQkxFKGFjY2Vzc2liaWxpdHlPYmplY3QpKTsgKytyb3cpCisgICAg
ICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGF0a190YWJsZV9nZXRfbl9jb2x1bW5z
KEFUS19UQUJMRShhY2Nlc3NpYmlsaXR5T2JqZWN0KSk7ICsrY29sdW1uKQorICAgICAgICAgICAg
dmlzaWJsZUNlbGxzLmFwcGVuZCh1aUVsZW1lbnQtPmNlbGxGb3JDb2x1bW5BbmRSb3coY29sdW1u
LCByb3cpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50KQpAQCAtNjMx
LDEzICs2NjQsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQogICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gPiBjaGlsZHJlbjsKICAgICBnZXRDaGlsZHJlbihjaGlsZHJlbik7CiAK
LSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+ID46Oml0ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQg
IT0gY2hpbGRyZW4uZW5kKCk7ICsraXQpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmli
dXRlc09mRWxlbWVudChpdC0+Z2V0KCkpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuLS0t
LS0tLS0tLS0tXG4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBj
cmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjaGlsZHJlbik7CiB9CiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKQEAgLTEw
ODIsMTQgKzExMDksMjQgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRGb3JTZWFyY2hQcmUKIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhl
YWRlcnMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1l
bnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKKworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBjb2x1
bW5IZWFkZXJzOworICAgIGdldENvbHVtbkhlYWRlcnMobV9lbGVtZW50LmdldCgpLCBjb2x1bW5I
ZWFkZXJzKTsKKworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjb2x1bW5I
ZWFkZXJzKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBp
ZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gPiByb3dIZWFkZXJzOworICAgIGdldFJvd0hlYWRlcnMobV9lbGVt
ZW50LmdldCgpLCByb3dIZWFkZXJzKTsKKworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0
cmlidXRlcyhyb3dIZWFkZXJzKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQpAQCAtMTEwNiw4ICsxMTQz
LDEzIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZSb3dzKCkKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDAp
OworICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpCisgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgVmVjdG9yPFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IHZpc2libGVDZWxsczsKKyAgICBnZXRWaXNpYmxl
Q2VsbHModGhpcywgdmlzaWJsZUNlbGxzKTsKKworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRo
QXR0cmlidXRlcyh2aXNpYmxlQ2VsbHMpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkK
</data>
<flag name="review"
          id="238908"
          type_id="1"
          status="-"
          setter="mario"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216039</attachid>
            <date>2013-11-05 07:43:17 -0800</date>
            <delta_ts>2013-11-06 05:10:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a11y-table-related-functions.patch</filename>
            <type>text/plain</type>
            <size>10024</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNWZi
OGFjLi44MjYwYjY2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMTEtMDUgIEtyenlzenRvZiBDemVjaCAgPGsu
Y3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gSW1wbGVtZW50IHRhYmxlcy1yZWxh
dGVkIGF0dHJpYnV0ZXNPZiooKSBmdW5jdGlvbnMgZm9yIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG1p
c3NpbmcgaW1wbGVtZW50YXRpb24gb2YgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVycywgYXR0cmli
dXRlc09mUm93SGVhZGVycywgYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxs
cyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgor
CiAyMDEzLTExLTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEFkZCB0ZXN0IGZvciBMaXN0SGFzaFNldDo6cmVtb3ZlTGFzdCgpCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAK
aW5kZXggM2ExYTlkNy4uZDcyZGQxMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
YXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtMzY3LDYgKzM2Nyw1OCBA
QCBTdHJpbmcgYXR0cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVt
ZW50KQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK3N0YXRpYyBKU1N0cmlu
Z1JlZiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4mIGVsZW1lbnRzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKworICAgIGZv
ciAoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+OjppdGVyYXRvciBpdCA9IGVsZW1lbnRz
LmJlZ2luKCk7IGl0ICE9IGVsZW1lbnRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQoaXQpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
IlxuLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCitz
dGF0aWMgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGdldFJvd0hlYWRlcnMoQXRrVGFi
bGUqIGFjY2Vzc2libGUpCit7CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IHJv
d0hlYWRlcnM7CisKKyAgICBpbnQgcm93c0NvdW50ID0gYXRrX3RhYmxlX2dldF9uX3Jvd3MoYWNj
ZXNzaWJsZSk7CisKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzQ291bnQ7ICsrcm93
KQorICAgICAgICByb3dIZWFkZXJzLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGF0a190
YWJsZV9nZXRfcm93X2hlYWRlcihhY2Nlc3NpYmxlLCByb3cpKSk7CisKKyAgICByZXR1cm4gcm93
SGVhZGVyczsKK30KKworc3RhdGljIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBnZXRD
b2x1bW5IZWFkZXJzKEF0a1RhYmxlKiBhY2Nlc3NpYmxlKQoreworICAgIFZlY3RvcjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50PiBjb2x1bW5IZWFkZXJzOworCisgICAgaW50IGNvbHVtbnNDb3VudCA9
IGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKGFjY2Vzc2libGUpOworCisgICAgZm9yIChpbnQgY29s
dW1uID0gMDsgY29sdW1uIDwgY29sdW1uc0NvdW50OyArK2NvbHVtbikKKyAgICAgICAgY29sdW1u
SGVhZGVycy5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhdGtfdGFibGVfZ2V0X2NvbHVt
bl9oZWFkZXIoYWNjZXNzaWJsZSwgY29sdW1uKSkpOworCisgICAgcmV0dXJuIGNvbHVtbkhlYWRl
cnM7Cit9CisKK3N0YXRpYyBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gZ2V0VmlzaWJs
ZUNlbGxzKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHVpRWxlbWVudCkKK3sKKyAgICBWZWN0b3I8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gdmlzaWJsZUNlbGxzOworCisgICAgQXRrVGFibGUqIGFj
Y2Vzc2libGUgPSBBVEtfVEFCTEUodWlFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpKTsKKyAg
ICBpbnQgcm93c0NvdW50ID0gYXRrX3RhYmxlX2dldF9uX3Jvd3MoYWNjZXNzaWJsZSk7CisgICAg
aW50IGNvbHVtbnNDb3VudCA9IGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKGFjY2Vzc2libGUpOwor
CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93c0NvdW50OyArK3JvdykgeworICAgICAg
ICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjb2x1bW5zQ291bnQ7ICsrY29sdW1uKQor
ICAgICAgICAgICAgdmlzaWJsZUNlbGxzLmFwcGVuZCh1aUVsZW1lbnQtPmNlbGxGb3JDb2x1bW5B
bmRSb3coY29sdW1uLCByb3cpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmlzaWJsZUNlbGxzOwor
fQorCiB9IC8vIG5hbWVzcGFjZQogCiBKU1N0cmluZ1JlZiBpbmRleFJhbmdlSW5UYWJsZShQbGF0
Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBib29sIGlzUm93UmFuZ2UpCkBAIC02MDEsMTMgKzY1Myw3
IEBAIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxk
cmVuKCkKICAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY2hpbGRyZW47CiAgICAg
Z2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
IGZvciAoVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+OjppdGVyYXRvciBpdCA9IGNoaWxk
cmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQoaXQpKTsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoIlxuLS0tLS0tLS0tLS0tXG4iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
IHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjaGlsZHJlbik7CiB9CiAKIEpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVOYW1l
cygpCkBAIC05MzQsMTQgKzk4MCwyMiBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlz
Q2hlY2tlZCgpIGNvbnN0CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAg
ICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFU
S19JU19UQUJMRShtX2VsZW1lbnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKKworICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBj
b2x1bW5IZWFkZXJzID0gZ2V0Q29sdW1uSGVhZGVycyhBVEtfVEFCTEUobV9lbGVtZW50KSk7CisK
KyAgICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMoY29sdW1uSGVhZGVycyk7CiB9
CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hl
YWRlcnMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1l
bnQpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
KworICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiByb3dIZWFkZXJzID0gZ2V0Um93
SGVhZGVycyhBVEtfVEFCTEUobV9lbGVtZW50KSk7CisKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5n
V2l0aEF0dHJpYnV0ZXMocm93SGVhZGVycyk7CiB9CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQpAQCAtOTU4LDggKzEwMTIsMTIgQEAg
SlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiAK
IEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVD
ZWxscygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwor
CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IHZpc2libGVDZWxscyA9IGdldFZp
c2libGVDZWxscyh0aGlzKTsKKworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRl
cyh2aXNpYmxlQ2VsbHMpOwogfQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50QXRrLmNwcAppbmRleCBjZjFiY2VmLi5kMmJjNzVlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRr
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAtNDMyLDYgKzQzMiw1OCBAQCBTdHJpbmcgYXR0
cmlidXRlc09mRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKK3N0YXRpYyBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiA+JiBlbGVtZW50cykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPjo6aXRl
cmF0b3IgaXQgPSBlbGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbGVtZW50cy5lbmQoKTsgKytpdCkg
eworICAgICAgICBidWlsZGVyLmFwcGVuZChhdHRyaWJ1dGVzT2ZFbGVtZW50KGl0LT5nZXQoKSkp
OworICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1cbiIpOworICAgIH0KKwor
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidWlsZGVyLnRvU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+ID4gZ2V0Um93SGVhZGVycyhBdGtUYWJsZSogYWNjZXNzaWJsZSkKK3sKKyAg
ICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gcm93SGVhZGVyczsKKwor
ICAgIGludCByb3dzQ291bnQgPSBhdGtfdGFibGVfZ2V0X25fcm93cyhhY2Nlc3NpYmxlKTsKKwor
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3NDb3VudDsgKytyb3cpCisgICAgICAgIHJv
d0hlYWRlcnMuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShhdGtfdGFibGVf
Z2V0X3Jvd19oZWFkZXIoYWNjZXNzaWJsZSwgcm93KSkpOworCisgICAgcmV0dXJuIHJvd0hlYWRl
cnM7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4g
Z2V0Q29sdW1uSGVhZGVycyhBdGtUYWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBWZWN0b3I8UmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gY29sdW1uSGVhZGVyczsKKworICAgIGludCBj
b2x1bW5zQ291bnQgPSBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhhY2Nlc3NpYmxlKTsKKworICAg
IGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNvbHVtbnNDb3VudDsgKytjb2x1bW4pCisg
ICAgICAgIGNvbHVtbkhlYWRlcnMuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0
ZShhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoYWNjZXNzaWJsZSwgY29sdW1uKSkpOworCisg
ICAgcmV0dXJuIGNvbHVtbkhlYWRlcnM7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+ID4gZ2V0VmlzaWJsZUNlbGxzKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQqIHVpRWxlbWVudCkKK3sKKyAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+ID4gdmlzaWJsZUNlbGxzOworCisgICAgQXRrVGFibGUqIGFjY2Vzc2libGUgPSBBVEtfVEFC
TEUodWlFbGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpLmdldCgpKTsKKyAgICBpbnQgcm93c0Nv
dW50ID0gYXRrX3RhYmxlX2dldF9uX3Jvd3MoYWNjZXNzaWJsZSk7CisgICAgaW50IGNvbHVtbnND
b3VudCA9IGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKGFjY2Vzc2libGUpOworCisgICAgZm9yIChp
bnQgcm93ID0gMDsgcm93IDwgcm93c0NvdW50OyArK3JvdykgeworICAgICAgICBmb3IgKGludCBj
b2x1bW4gPSAwOyBjb2x1bW4gPCBjb2x1bW5zQ291bnQ7ICsrY29sdW1uKQorICAgICAgICAgICAg
dmlzaWJsZUNlbGxzLmFwcGVuZCh1aUVsZW1lbnQtPmNlbGxGb3JDb2x1bW5BbmRSb3coY29sdW1u
LCByb3cpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmlzaWJsZUNlbGxzOworfQorCiB9IC8vIG5h
bWVzcGFjZQogCiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQpCkBAIC02MzEsMTMgKzY4Myw3IEBAIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGls
ZHJlbigpCiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IGNoaWxk
cmVuOwogICAgIGdldENoaWxkcmVuKGNoaWxkcmVuKTsKIAotICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPjo6
aXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytp
dCkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChhdHRyaWJ1dGVzT2ZFbGVtZW50KGl0LT5nZXQo
KSkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1cbiIpOwotICAgIH0K
LQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidWlsZGVyLnRvU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1
dGVzKGNoaWxkcmVuKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXMoKQpAQCAtMTA4MiwxNCArMTEyOCwyMiBAQCBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVp
RWxlbWVudEZvclNlYXJjaFByZQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAs
IDApOworICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpCisgICAgICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgVmVjdG9yPFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IGNvbHVtbkhlYWRlcnMgPSBnZXRDb2x1bW5I
ZWFkZXJzKEFUS19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKTsKKworICAgIHJldHVybiBjcmVhdGVT
dHJpbmdXaXRoQXR0cmlidXRlcyhjb2x1bW5IZWFkZXJzKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0
KCkpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsK
KworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiByb3dIZWFkZXJz
ID0gZ2V0Um93SGVhZGVycyhBVEtfVEFCTEUobV9lbGVtZW50LmdldCgpKSk7CisKKyAgICByZXR1
cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMocm93SGVhZGVycyk7CiB9CiAKIEpTUmV0YWlu
UHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1
bW5zKCkKQEAgLTExMDYsOCArMTE2MCwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2Vs
bHMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQu
Z2V0KCkpKQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAw
KTsKKworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiB2aXNpYmxl
Q2VsbHMgPSBnZXRWaXNpYmxlQ2VsbHModGhpcyk7CisKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5n
V2l0aEF0dHJpYnV0ZXModmlzaWJsZUNlbGxzKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlcigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216167</attachid>
            <date>2013-11-06 05:10:07 -0800</date>
            <delta_ts>2013-11-06 05:13:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a11y-table-related-functions.patch</filename>
            <type>text/plain</type>
            <size>10637</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGUy
ZDNkLi4xZGVkZTFkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMTEtMDUgIEtyenlzenRvZiBDemVjaCAgPGsu
Y3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gSW1wbGVtZW50IHRhYmxlcy1yZWxh
dGVkIGF0dHJpYnV0ZXNPZiooKSBmdW5jdGlvbnMgZm9yIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG1p
c3NpbmcgaW1wbGVtZW50YXRpb24gb2YgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVycywgYXR0cmli
dXRlc09mUm93SGVhZGVycywgYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxs
cyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgor
CiAyMDEzLTExLTA1ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBbV0syXSBBZGQgYSBXZWJLaXQyIEFQSSBmb3IgR2VvbG9jYXRpb24ncyBoaWdoQWNj
dXJhY3kKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcAppbmRleCAxMjViN2E5Li4xMDMwYzM4IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBA
IC0zNjcsNiArMzY3LDU2IEBAIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAorc3RhdGljIEpTU3RyaW5nUmVmIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKGNvbnN0IFZl
Y3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudHMpCit7CisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworCisgICAgZm9yIChWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gZWxlbWVudHMuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRlc09mRWxlbWVudChj
b25zdF9jYXN0PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqPihpdCkpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIlxuLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworfQorCitzdGF0aWMgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGdldFJvd0hlYWRl
cnMoQXRrVGFibGUqIGFjY2Vzc2libGUpCit7CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IHJvd0hlYWRlcnM7CisKKyAgICBpbnQgcm93c0NvdW50ID0gYXRrX3RhYmxlX2dldF9u
X3Jvd3MoYWNjZXNzaWJsZSk7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93c0NvdW50
OyArK3JvdykKKyAgICAgICAgcm93SGVhZGVycy5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dChhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIoYWNjZXNzaWJsZSwgcm93KSkpOworCisgICAgcmV0
dXJuIHJvd0hlYWRlcnM7Cit9CisKK3N0YXRpYyBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gZ2V0Q29sdW1uSGVhZGVycyhBdGtUYWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBWZWN0b3I8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY29sdW1uSGVhZGVyczsKKworICAgIGludCBjb2x1bW5z
Q291bnQgPSBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhhY2Nlc3NpYmxlKTsKKyAgICBmb3IgKGlu
dCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjb2x1bW5zQ291bnQ7ICsrY29sdW1uKQorICAgICAgICBj
b2x1bW5IZWFkZXJzLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGF0a190YWJsZV9nZXRf
Y29sdW1uX2hlYWRlcihhY2Nlc3NpYmxlLCBjb2x1bW4pKSk7CisKKyAgICByZXR1cm4gY29sdW1u
SGVhZGVyczsKK30KKworc3RhdGljIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBnZXRW
aXNpYmxlQ2VsbHMoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gdmlzaWJsZUNlbGxzOworCisgICAgQXRrVGFibGUq
IGFjY2Vzc2libGUgPSBBVEtfVEFCTEUoZWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKSk7Cisg
ICAgaW50IHJvd3NDb3VudCA9IGF0a190YWJsZV9nZXRfbl9yb3dzKGFjY2Vzc2libGUpOworICAg
IGludCBjb2x1bW5zQ291bnQgPSBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhhY2Nlc3NpYmxlKTsK
KworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3NDb3VudDsgKytyb3cpIHsKKyAgICAg
ICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgY29sdW1uc0NvdW50OyArK2NvbHVtbikK
KyAgICAgICAgICAgIHZpc2libGVDZWxscy5hcHBlbmQoZWxlbWVudC0+Y2VsbEZvckNvbHVtbkFu
ZFJvdyhjb2x1bW4sIHJvdykpOworICAgIH0KKworICAgIHJldHVybiB2aXNpYmxlQ2VsbHM7Cit9
CisKIH0gLy8gbmFtZXNwYWNlCiAKIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKQEAgLTU0MywxMCArNTkzLDEw
IEBAIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4T2ZDaGlsZChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphbGxBdHRyaWJ1dGVzKCkKIHsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVt
ZW50KSkKKyAgICAvL2lmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQpKQogICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKIAotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhdHRyaWJ1dGVzT2ZFbGVtZW50KHRoaXMpLnV0Zjgo
KS5kYXRhKCkpOworICAgIC8vcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0
dHJpYnV0ZXNPZkVsZW1lbnQodGhpcykudXRmOCgpLmRhdGEoKSk7CiB9CiAKIEpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMoKQpA
QCAtNjAyLDEzICs2NTIsNyBAQCBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZDaGlsZHJlbigpCiAgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IGNoaWxkcmVuOwogICAgIGdldENoaWxkcmVuKGNoaWxkcmVuKTsKIAotICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKLSAgICBmb3IgKFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pjo6aXRl
cmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytpdCkg
ewotICAgICAgICBidWlsZGVyLmFwcGVuZChhdHRyaWJ1dGVzT2ZFbGVtZW50KGl0KSk7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tLS0tLVxuIik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMoY2hpbGRy
ZW4pOwogfQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0ZXJp
emVkQXR0cmlidXRlTmFtZXMoKQpAQCAtOTM3LDE0ICs5ODEsMjAgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdAogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICAvLyBGSVhN
RTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7CisgICAgaWYgKCFBVEtfSVNfVEFCTEUobV9lbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBWZWN0b3I8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gY29sdW1uSGVhZGVycyA9IGdldENvbHVtbkhlYWRlcnMoQVRLX1RBQkxF
KG1fZWxlbWVudCkpOworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjb2x1
bW5IZWFkZXJzKTsKIH0KIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghQVRLX0lT
X1RBQkxFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOworCisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IHJvd0hl
YWRlcnMgPSBnZXRSb3dIZWFkZXJzKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKKyAgICByZXR1cm4g
Y3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMocm93SGVhZGVycyk7CiB9CiAKIEpTU3RyaW5nUmVm
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMoKQpAQCAtOTYxLDgg
KzEwMTEsMTEgQEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mUm93cygpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZlZpc2libGVDZWxscygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghQVRLX0lTX1RB
QkxFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworCisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IHZpc2libGVD
ZWxscyA9IGdldFZpc2libGVDZWxscyh0aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0
aEF0dHJpYnV0ZXModmlzaWJsZUNlbGxzKTsKIH0KIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudEF0ay5jcHAKaW5kZXggYWIzZjIwYS4uZTUzYWNjMSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudEF0ay5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKQEAgLTQzMiw2ICs0MzIsNTYgQEAg
U3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVu
dCkKICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCitzdGF0aWMgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiYgZWxlbWVudHMpCit7CisgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworCisgICAgZm9yIChWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZWxlbWVudHMuYmVnaW4oKTsgaXQgIT0g
ZWxlbWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRl
c09mRWxlbWVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqPihpdC0+Z2V0KCkp
KSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbi0tLS0tLS0tLS0tLVxuIik7CisgICAgfQor
CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gPiBnZXRSb3dIZWFkZXJzKEF0a1RhYmxlKiBhY2Nlc3NpYmxlKQorewor
ICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiByb3dIZWFkZXJzOwor
CisgICAgaW50IHJvd3NDb3VudCA9IGF0a190YWJsZV9nZXRfbl9yb3dzKGFjY2Vzc2libGUpOwor
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3NDb3VudDsgKytyb3cpCisgICAgICAgIHJv
d0hlYWRlcnMuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShhdGtfdGFibGVf
Z2V0X3Jvd19oZWFkZXIoYWNjZXNzaWJsZSwgcm93KSkpOworCisgICAgcmV0dXJuIHJvd0hlYWRl
cnM7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4g
Z2V0Q29sdW1uSGVhZGVycyhBdGtUYWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBWZWN0b3I8UmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gY29sdW1uSGVhZGVyczsKKworICAgIGludCBj
b2x1bW5zQ291bnQgPSBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhhY2Nlc3NpYmxlKTsKKyAgICBm
b3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjb2x1bW5zQ291bnQ7ICsrY29sdW1uKQorICAg
ICAgICBjb2x1bW5IZWFkZXJzLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUo
YXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKGFjY2Vzc2libGUsIGNvbHVtbikpKTsKKworICAg
IHJldHVybiBjb2x1bW5IZWFkZXJzOworfQorCitzdGF0aWMgVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50PiA+IGdldFZpc2libGVDZWxscyhBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KiBlbGVtZW50KQoreworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
PiB2aXNpYmxlQ2VsbHM7CisKKyAgICBBdGtUYWJsZSogYWNjZXNzaWJsZSA9IEFUS19UQUJMRShl
bGVtZW50LT5wbGF0Zm9ybVVJRWxlbWVudCgpLmdldCgpKTsKKyAgICBpbnQgcm93c0NvdW50ID0g
YXRrX3RhYmxlX2dldF9uX3Jvd3MoYWNjZXNzaWJsZSk7CisgICAgaW50IGNvbHVtbnNDb3VudCA9
IGF0a190YWJsZV9nZXRfbl9jb2x1bW5zKGFjY2Vzc2libGUpOworCisgICAgZm9yIChpbnQgcm93
ID0gMDsgcm93IDwgcm93c0NvdW50OyArK3JvdykgeworICAgICAgICBmb3IgKGludCBjb2x1bW4g
PSAwOyBjb2x1bW4gPCBjb2x1bW5zQ291bnQ7ICsrY29sdW1uKQorICAgICAgICAgICAgdmlzaWJs
ZUNlbGxzLmFwcGVuZChlbGVtZW50LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KSk7
CisgICAgfQorCisgICAgcmV0dXJuIHZpc2libGVDZWxsczsKK30KKwogfSAvLyBuYW1lc3BhY2UK
IAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50KQpAQCAtNjMxLDEzICs2ODEsNyBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4oKQog
ICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBjaGlsZHJlbjsKICAg
ICBnZXRDaGlsZHJlbihjaGlsZHJlbik7CiAKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgZm9yIChWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID46Oml0ZXJhdG9y
IGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRlc09mRWxlbWVudChpdC0+Z2V0KCkpKTsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIlxuLS0tLS0tLS0tLS0tXG4iKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjaGls
ZHJlbik7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphbGxBdHRyaWJ1dGVzKCkKQEAgLTEwOTYsMTQgKzExNDAsMjAgQEAgUGFzc1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRG
b3JTZWFyY2hQcmUKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMoKQogewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAg
ICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFZlY3RvcjxSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBjb2x1bW5IZWFkZXJzID0gZ2V0Q29sdW1uSGVhZGVycyhB
VEtfVEFCTEUobV9lbGVtZW50LmdldCgpKSk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhB
dHRyaWJ1dGVzKGNvbHVtbkhlYWRlcnMpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVycygpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKDAsIDApOworICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpCisgICAg
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworCisgICAgVmVj
dG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IHJvd0hlYWRlcnMgPSBnZXRSb3dI
ZWFkZXJzKEFUS19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKTsKKyAgICByZXR1cm4gY3JlYXRlU3Ry
aW5nV2l0aEF0dHJpYnV0ZXMocm93SGVhZGVycyk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKQEAgLTEx
MjAsOCArMTE3MCwxMSBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMoKQogewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFZl
Y3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiB2aXNpYmxlQ2VsbHMgPSBnZXRW
aXNpYmxlQ2VsbHModGhpcyk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVz
KHZpc2libGVDZWxscyk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXIoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216168</attachid>
            <date>2013-11-06 05:13:38 -0800</date>
            <delta_ts>2013-11-06 05:53:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a11y-table-related-functions.patch</filename>
            <type>text/plain</type>
            <size>10107</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhMGUy
ZDNkLi4xZGVkZTFkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTMtMTEtMDUgIEtyenlzenRvZiBDemVjaCAgPGsu
Y3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gSW1wbGVtZW50IHRhYmxlcy1yZWxh
dGVkIGF0dHJpYnV0ZXNPZiooKSBmdW5jdGlvbnMgZm9yIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG1p
c3NpbmcgaW1wbGVtZW50YXRpb24gb2YgYXR0cmlidXRlc09mQ29sdW1uSGVhZGVycywgYXR0cmli
dXRlc09mUm93SGVhZGVycywgYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW4pOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxs
cyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudEF0ay5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVycyk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMpOgor
CiAyMDEzLTExLTA1ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBbV0syXSBBZGQgYSBXZWJLaXQyIEFQSSBmb3IgR2VvbG9jYXRpb24ncyBoaWdoQWNj
dXJhY3kKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2F0ay9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50QXRrLmNwcAppbmRleCAxMjViN2E5Li4yYjE1N2UzIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBA
IC0zNjcsNiArMzY3LDU2IEBAIFN0cmluZyBhdHRyaWJ1dGVzT2ZFbGVtZW50KEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAorc3RhdGljIEpTU3RyaW5nUmVmIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKGNvbnN0IFZl
Y3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiYgZWxlbWVudHMpCit7CisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworCisgICAgZm9yIChWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gZWxlbWVudHMuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRlc09mRWxlbWVudChj
b25zdF9jYXN0PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqPihpdCkpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIlxuLS0tLS0tLS0tLS0tXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworfQorCitzdGF0aWMgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGdldFJvd0hlYWRl
cnMoQXRrVGFibGUqIGFjY2Vzc2libGUpCit7CisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IHJvd0hlYWRlcnM7CisKKyAgICBpbnQgcm93c0NvdW50ID0gYXRrX3RhYmxlX2dldF9u
X3Jvd3MoYWNjZXNzaWJsZSk7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93c0NvdW50
OyArK3JvdykKKyAgICAgICAgcm93SGVhZGVycy5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dChhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIoYWNjZXNzaWJsZSwgcm93KSkpOworCisgICAgcmV0
dXJuIHJvd0hlYWRlcnM7Cit9CisKK3N0YXRpYyBWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gZ2V0Q29sdW1uSGVhZGVycyhBdGtUYWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBWZWN0b3I8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gY29sdW1uSGVhZGVyczsKKworICAgIGludCBjb2x1bW5z
Q291bnQgPSBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhhY2Nlc3NpYmxlKTsKKyAgICBmb3IgKGlu
dCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjb2x1bW5zQ291bnQ7ICsrY29sdW1uKQorICAgICAgICBj
b2x1bW5IZWFkZXJzLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGF0a190YWJsZV9nZXRf
Y29sdW1uX2hlYWRlcihhY2Nlc3NpYmxlLCBjb2x1bW4pKSk7CisKKyAgICByZXR1cm4gY29sdW1u
SGVhZGVyczsKK30KKworc3RhdGljIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBnZXRW
aXNpYmxlQ2VsbHMoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBWZWN0
b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gdmlzaWJsZUNlbGxzOworCisgICAgQXRrVGFibGUq
IGFjY2Vzc2libGUgPSBBVEtfVEFCTEUoZWxlbWVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKSk7Cisg
ICAgaW50IHJvd3NDb3VudCA9IGF0a190YWJsZV9nZXRfbl9yb3dzKGFjY2Vzc2libGUpOworICAg
IGludCBjb2x1bW5zQ291bnQgPSBhdGtfdGFibGVfZ2V0X25fY29sdW1ucyhhY2Nlc3NpYmxlKTsK
KworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3NDb3VudDsgKytyb3cpIHsKKyAgICAg
ICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgY29sdW1uc0NvdW50OyArK2NvbHVtbikK
KyAgICAgICAgICAgIHZpc2libGVDZWxscy5hcHBlbmQoZWxlbWVudC0+Y2VsbEZvckNvbHVtbkFu
ZFJvdyhjb2x1bW4sIHJvdykpOworICAgIH0KKworICAgIHJldHVybiB2aXNpYmxlQ2VsbHM7Cit9
CisKIH0gLy8gbmFtZXNwYWNlCiAKIEpTU3RyaW5nUmVmIGluZGV4UmFuZ2VJblRhYmxlKFBsYXRm
b3JtVUlFbGVtZW50IGVsZW1lbnQsIGJvb2wgaXNSb3dSYW5nZSkKQEAgLTYwMiwxMyArNjUyLDcg
QEAgSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRy
ZW4oKQogICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBjaGlsZHJlbjsKICAgICBn
ZXRDaGlsZHJlbihjaGlsZHJlbik7CiAKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAg
Zm9yIChWZWN0b3I8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD46Oml0ZXJhdG9yIGl0ID0gY2hpbGRy
ZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsraXQpIHsKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYXR0cmlidXRlc09mRWxlbWVudChpdCkpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG4tLS0tLS0tLS0tLS1cbiIpOwotICAgIH0KLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhidWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
cmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKGNoaWxkcmVuKTsKIH0KIAogSlNTdHJp
bmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVz
KCkKQEAgLTkzNywxNCArOTgxLDIwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXND
aGVja2VkKCkgY29uc3QKIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mQ29sdW1uSGVhZGVycygpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOworICAgIGlmICghQVRL
X0lTX1RBQkxFKG1fZWxlbWVudCkpCisgICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIDApOworCisgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGNv
bHVtbkhlYWRlcnMgPSBnZXRDb2x1bW5IZWFkZXJzKEFUS19UQUJMRShtX2VsZW1lbnQpKTsKKyAg
ICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMoY29sdW1uSGVhZGVycyk7CiB9CiAK
IEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRl
cnMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQp
KQorICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKwor
ICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiByb3dIZWFkZXJzID0gZ2V0Um93SGVh
ZGVycyhBVEtfVEFCTEUobV9lbGVtZW50KSk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhB
dHRyaWJ1dGVzKHJvd0hlYWRlcnMpOwogfQogCiBKU1N0cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zKCkKQEAgLTk2MSw4ICsxMDExLDExIEBAIEpTU3Ry
aW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3MoKQogCiBKU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMo
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQpKQor
ICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAg
IFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiB2aXNpYmxlQ2VsbHMgPSBnZXRWaXNpYmxl
Q2VsbHModGhpcyk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKHZpc2li
bGVDZWxscyk7CiB9CiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJp
YnV0ZXNPZkhlYWRlcigpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsu
Y3BwCmluZGV4IGFiM2YyMGEuLmU1M2FjYzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRBdGsuY3BwCkBAIC00MzIsNiArNDMyLDU2IEBAIFN0cmluZyBhdHRyaWJ1dGVz
T2ZFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBj
cmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+ID4mIGVsZW1lbnRzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVsZW1lbnRzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQoY29uc3Rf
Y2FzdDxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Kj4oaXQtPmdldCgpKSkpOworICAgICAgICBidWls
ZGVyLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1cbiIpOworICAgIH0KKworICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Cit9CisKK3N0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4g
Z2V0Um93SGVhZGVycyhBdGtUYWJsZSogYWNjZXNzaWJsZSkKK3sKKyAgICBWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gcm93SGVhZGVyczsKKworICAgIGludCByb3dzQ291
bnQgPSBhdGtfdGFibGVfZ2V0X25fcm93cyhhY2Nlc3NpYmxlKTsKKyAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCByb3dzQ291bnQ7ICsrcm93KQorICAgICAgICByb3dIZWFkZXJzLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKGFj
Y2Vzc2libGUsIHJvdykpKTsKKworICAgIHJldHVybiByb3dIZWFkZXJzOworfQorCitzdGF0aWMg
VmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IGdldENvbHVtbkhlYWRlcnMo
QXRrVGFibGUqIGFjY2Vzc2libGUpCit7CisgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiA+IGNvbHVtbkhlYWRlcnM7CisKKyAgICBpbnQgY29sdW1uc0NvdW50ID0gYXRr
X3RhYmxlX2dldF9uX2NvbHVtbnMoYWNjZXNzaWJsZSk7CisgICAgZm9yIChpbnQgY29sdW1uID0g
MDsgY29sdW1uIDwgY29sdW1uc0NvdW50OyArK2NvbHVtbikKKyAgICAgICAgY29sdW1uSGVhZGVy
cy5hcHBlbmQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGF0a190YWJsZV9nZXRfY29s
dW1uX2hlYWRlcihhY2Nlc3NpYmxlLCBjb2x1bW4pKSk7CisKKyAgICByZXR1cm4gY29sdW1uSGVh
ZGVyczsKK30KKworc3RhdGljIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
PiBnZXRWaXNpYmxlQ2VsbHMoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gdmlzaWJsZUNlbGxzOwor
CisgICAgQXRrVGFibGUqIGFjY2Vzc2libGUgPSBBVEtfVEFCTEUoZWxlbWVudC0+cGxhdGZvcm1V
SUVsZW1lbnQoKS5nZXQoKSk7CisgICAgaW50IHJvd3NDb3VudCA9IGF0a190YWJsZV9nZXRfbl9y
b3dzKGFjY2Vzc2libGUpOworICAgIGludCBjb2x1bW5zQ291bnQgPSBhdGtfdGFibGVfZ2V0X25f
Y29sdW1ucyhhY2Nlc3NpYmxlKTsKKworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3ND
b3VudDsgKytyb3cpIHsKKyAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgY29s
dW1uc0NvdW50OyArK2NvbHVtbikKKyAgICAgICAgICAgIHZpc2libGVDZWxscy5hcHBlbmQoZWxl
bWVudC0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdykpOworICAgIH0KKworICAgIHJl
dHVybiB2aXNpYmxlQ2VsbHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVu
dCkKQEAgLTYzMSwxMyArNjgxLDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKICAgICBWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gY2hpbGRyZW47CiAgICAgZ2V0Q2hpbGRyZW4oY2hp
bGRyZW4pOwogCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoVmVjdG9yPFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+OjppdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJl
Z2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGF0dHJpYnV0ZXNPZkVsZW1lbnQoaXQtPmdldCgpKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCJcbi0tLS0tLS0tLS0tLVxuIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICByZXR1cm4gY3JlYXRlU3RyaW5nV2l0aEF0dHJpYnV0ZXMoY2hpbGRyZW4pOwogfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRl
cygpCkBAIC0xMDk2LDE0ICsxMTQwLDIwIEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50Rm9yU2VhcmNoUHJlCiAKIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVz
T2ZDb2x1bW5IZWFkZXJzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAgaWYgKCFBVEtfSVNfVEFC
TEUobV9lbGVtZW50LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnMoMCwgMCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+ID4gY29sdW1uSGVhZGVycyA9IGdldENvbHVtbkhlYWRlcnMoQVRLX1RBQkxFKG1fZWxlbWVu
dC5nZXQoKSkpOworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjb2x1bW5I
ZWFkZXJzKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMoKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKyAgICBp
ZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKKworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gPiByb3dIZWFkZXJzID0gZ2V0Um93SGVhZGVycyhBVEtfVEFCTEUo
bV9lbGVtZW50LmdldCgpKSk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVz
KHJvd0hlYWRlcnMpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1ucygpCkBAIC0xMTIwLDggKzExNzAsMTEgQEAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZlJvd3MoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisgICAg
aWYgKCFBVEtfSVNfVEFCTEUobV9lbGVtZW50LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+ID4gdmlzaWJsZUNlbGxzID0gZ2V0VmlzaWJsZUNlbGxzKHRoaXMp
OworICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyh2aXNpYmxlQ2VsbHMpOwog
fQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mSGVhZGVyKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>