<?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>118908</bug_id>
          
          <creation_ts>2013-07-19 09:43:34 -0700</creation_ts>
          <short_desc>[ATK] Issues with edge cases when getting offsets for a text range in AtkText</short_desc>
          <delta_ts>2013-07-29 08:45:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>114871</blocked>
    
    <blocked>114872</blocked>
    
    <blocked>114873</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>910176</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-19 09:43:34 -0700</bug_when>
    <thetext>I noticed that there are some issues working with edge cases when working with implementations of AtkText through the atk_text_get_text_*_offset() functions (e.g. trying to get a word before/after the first/last position), that can be avoided if we change the way getSelectionOffsetsForObject() is implemented.

This patch will block bugs 114871, 114872 and 114873 since I will be using it as a base for those ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910192</commentid>
    <comment_count>1</comment_count>
      <attachid>207114</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-19 10:05:31 -0700</bug_when>
    <thetext>Created attachment 207114
Patch proposal

Here comes the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911361</commentid>
    <comment_count>2</comment_count>
      <attachid>207114</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-07-24 10:57:25 -0700</bug_when>
    <thetext>Comment on attachment 207114
Patch proposal

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

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:521
&gt; +    // Default values, unless the contrary is proved.

This comment seems superfluous.

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:538
&gt; +        startOffset = comparePositions(selection.start(), firstValidPosition) &lt; 0 ? 0 : accessibilityObjectLength(coreObject);

So if the selection is after the node then you return accessibilityObjectLength as the start and end offsets?

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:560
&gt; +    int rangeLength = TextIterator::rangeLength(nodeRange.get(), true);

Looks like you can avoid this temporary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911372</commentid>
    <comment_count>3</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-24 11:19:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 207114 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207114&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:521
&gt; &gt; +    // Default values, unless the contrary is proved.
&gt; 
&gt; This comment seems superfluous.
&gt; 
Ok

&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:538
&gt; &gt; +        startOffset = comparePositions(selection.start(), firstValidPosition) &lt; 0 ? 0 : accessibilityObjectLength(coreObject);
&gt; 
&gt; So if the selection is after the node then you return accessibilityObjectLength 
&gt; as the start and end offsets?

Yes. If we reached that point it means that the selection falls *entirely* out of the range associated to the accessibility object, so we need to return a zero-length offsets range.

Now the reason why we return accesibilityObjectLength in that case is because in that situation the selection happens to be after the accessibility object, and so we must return a zero-length range coherent with that, since that&apos;s what other ATK implementations do.

Just think of it as normalizing the start and end offsets to the correct side of the text range associated to the object, so you either will have [0, 0] when the selection is before the object or [n, n] when it&apos;s after it.

&gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:560
&gt; &gt; +    int rangeLength = TextIterator::rangeLength(nodeRange.get(), true);
&gt; 
&gt; Looks like you can avoid this temporary.

Ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911411</commentid>
    <comment_count>4</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-24 14:09:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; [...]
&gt; &gt; &gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:538
&gt; &gt; &gt; +        startOffset = comparePositions(selection.start(), firstValidPosition) &lt; 0 ? 0 : accessibilityObjectLength(coreObject);
&gt; &gt; 
&gt; &gt; So if the selection is after the node then you return 
&gt; &gt; accessibilityObjectLength 
&gt; &gt; as the start and end offsets?
&gt; 
&gt; Yes. If we reached that point it means that the selection falls *entirely* 
&gt; out of the range associated to the accessibility object, so we need to return 
&gt; a zero-length offsets range.
&gt; 
&gt; Now the reason why we return accesibilityObjectLength in that case is because 
&gt; in that situation the selection happens to be after the accessibility object, 
&gt; and so we must return a zero-length range coherent with that, since that&apos;s 
&gt; what other ATK implementations do.
&gt; 
&gt; Just think of it as normalizing the start and end offsets to the correct side 
&gt; of the text range associated to the object, so you either will have [0, 0] 
&gt; when the selection is before the object or [n, n] when it&apos;s after it.
&gt; 
Chris, could you take an additional quick look to this patch before landing it, just to make sure that the a11y specific bits make sense?

I forgot to mention it in my previous comment, but both Martin and me think that it would be very valuable if you could double check the patch before committing it.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912472</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-29 06:51:48 -0700</bug_when>
    <thetext>&gt; (In reply to comment #3)
&gt; [...]
&gt; Chris, could you take an additional quick look to this patch before landing it,
&gt; just to make sure that the a11y specific bits make sense?
&gt; 
&gt; I forgot to mention it in my previous comment, but both Martin and me think
&gt; that it would be very valuable if you could double check the patch before
&gt; committing it.

I think I&apos;m going to push it today in the end, so we can move forward asap with other patches that depend on this one too.

We will be able to see in the bots if it causes any regression and Chris will be always able to comment in the future if needed, so we should be safe anyway without having to request right now for time from more people.

In any case, I will wait a few hours from now just to give some additional margin for last-minute comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912499</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-07-29 08:09:12 -0700</bug_when>
    <thetext>Sorry for the delay. This patch appears to be ok from an accessibility standpoint

(In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; [...]
&gt; &gt; Chris, could you take an additional quick look to this patch before landing it,
&gt; &gt; just to make sure that the a11y specific bits make sense?
&gt; &gt; 
&gt; &gt; I forgot to mention it in my previous comment, but both Martin and me think
&gt; &gt; that it would be very valuable if you could double check the patch before
&gt; &gt; committing it.
&gt; 
&gt; I think I&apos;m going to push it today in the end, so we can move forward asap with other patches that depend on this one too.
&gt; 
&gt; We will be able to see in the bots if it causes any regression and Chris will be always able to comment in the future if needed, so we should be safe anyway without having to request right now for time from more people.
&gt; 
&gt; In any case, I will wait a few hours from now just to give some additional margin for last-minute comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912506</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-29 08:41:10 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Sorry for the delay. This patch appears to be ok from an accessibility 
&gt; standpoint

No problem. Thanks for reviewing it, Chris. It was just in time(tm)!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912507</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-29 08:45:26 -0700</bug_when>
    <thetext>Committed r153427: &lt;http://trac.webkit.org/changeset/153427&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207114</attachid>
            <date>2013-07-19 10:05:31 -0700</date>
            <delta_ts>2013-07-24 10:57:25 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-07-19-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>13379</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA3NWYxYzkyMDcwYTNiNzUzYTZiOTFjNTkyOTRmYTQ0M2UzOTdlMjNlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxOSBKdWwgMjAxMyAxNzozNToxNyArMDEwMApTdWJqZWN0OiBb
UEFUQ0ggMS80XSAyMDEzLTA3LTE5ICBNYXJpbyBTYW5jaGV6IFByYWRhIAogPG1hcmlvLnByYWRh
QHNhbXN1bmcuY29tPgoKICAgICAgICBbQVRLXSBJc3N1ZXMgd2l0aCBlZGdlIGNhc2VzIHdoZW4g
Z2V0dGluZyBvZmZzZXRzIGZvciBhIHRleHQgcmFuZ2UgaW4gQXRrVGV4dAogICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg5MDgKCiAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFJlaW1wbGVtZW50IGdldFNlbGVjdGlvbk9m
ZnNldHNGb3JPYmplY3QoKSBqdXN0IGluIHRlcm0gb2YKICAgICAgICBQb3NpdGlvbnMgaW5zdGVh
ZCBvZiB1c2luZyByYW5nZXMsIHdoaWNoIG1ha2VzIGl0IHNpbXBsZXIgYW5kCiAgICAgICAgd29y
a3MgYmV0dGVyLiBBbHNvLCBtYWtlIHN1cmUgd2UgdXNlIHRoZSByaWdodCBOb2RlIGFzIHJlZmVy
ZW5jZQogICAgICAgIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3QgYnkgZ2V0dGluZyB0aGUg
cHJvcGVyIG9uZSBib3RoIGZvcgogICAgICAgIHRleHQgY29udHJvbCBvYmplY3RzIChlLmcuIGlu
cHV0LCB0ZXh0IGFyZWEpIGFuZCBub3JtYWwgb25lcy4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CiAgICAgICAgKGdldE5vZGVG
b3JBY2Nlc3NpYmlsaXR5T2JqZWN0KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byBlbnN1cmUgd2UK
ICAgICAgICBhbHdheXMgZ2V0IHRoZSByZWxldmFudCBvYmplY3QgZnJvbSB0aGUgRE9NIHRyZWUg
Zm9yIGEgZ2l2ZW4KICAgICAgICBhY2Nlc3NpYmlsaXR5IG9iamVjdCwgaW4gdGhlIGNvbnRleHQg
b2YgdGhlIGltcGxlbWVudGF0aW9uIG9mCiAgICAgICAgQXRrVGV4dCwgc28gaXQgd29ya3MgYm90
aCB3aXRoIFRleHQgQ29udHJvbHMgYW5kIG90aGVyIGVsZW1lbnRzLgogICAgICAgIChnZXRTZWxl
Y3Rpb25PZmZzZXRzRm9yT2JqZWN0KTogUmV3cml0dGVuIHRoaXMgZnVuY3Rpb24gaW4gdGVybXMK
ICAgICAgICBvZiBWaXNpYmxlUG9zaXRpb25zIGFuZCBhdm9pZGluZyB3ZWlyZCBvcGVyYXRpb25z
IHdpdGggcmFuZ2VzLCBzbwogICAgICAgIHdlIGhhdmUgbW9yZSBjb250cm9sIHRvIGZpbmUgdHVu
ZSB0aGUgcmVzdWx0cyBhbmQgZ2l2ZSBtb3JlCiAgICAgICAgYWNjdXJhdGUgb25lcy4gQmVzaWRl
cywgbm93IGl0IHdvcmtzIGJldHRlciB3aXRoIGVkZ2UgY2FzZXMuCgoyMDEzLTA3LTE5ICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CgogICAgICAgIFtBVEtd
IElzc3VlcyB3aXRoIGVkZ2UgY2FzZXMgd2hlbiBnZXR0aW5nIG9mZnNldHMgZm9yIGEgdGV4dCBy
YW5nZSBpbiBBdGtUZXh0CiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExODkwOAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAg
ICAgKiB0ZXN0cy90ZXN0YXRrLmM6CiAgICAgICAgKHJ1bkdldFRleHRUZXN0cyk6IFVwZGF0ZWQg
dW5pdCB0ZXN0cyB0byBjaGVjayBtb3JlIGNhc2VzIG9mCiAgICAgICAgY2FsbGluZyB0aGUgYXRr
X3RleHRfZ2V0X3RleHRfKl9vZmZzZXQoKSBmdW5jdGlvbnMgZm9yIFdPUkQuCi0tLQogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsrKysr
KwogLi4uL2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgICAgICAgICAgfCAg
IDgwICsrKysrKysrKysrLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrCiBTb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0YXRrLmMgICAgICAgICAgICAgICAgICB8ICAgMzEgKysrKysrKy0KIDQgZmlsZXMgY2hhbmdl
ZCwgMTA5IGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYmYz
MDQ4Li4zNjExNWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTMtMDctMTkgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBb
QVRLXSBJc3N1ZXMgd2l0aCBlZGdlIGNhc2VzIHdoZW4gZ2V0dGluZyBvZmZzZXRzIGZvciBhIHRl
eHQgcmFuZ2UgaW4gQXRrVGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE4OTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVpbXBsZW1lbnQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCgpIGp1
c3QgaW4gdGVybSBvZgorICAgICAgICBQb3NpdGlvbnMgaW5zdGVhZCBvZiB1c2luZyByYW5nZXMs
IHdoaWNoIG1ha2VzIGl0IHNpbXBsZXIgYW5kCisgICAgICAgIHdvcmtzIGJldHRlci4gQWxzbywg
bWFrZSBzdXJlIHdlIHVzZSB0aGUgcmlnaHQgTm9kZSBhcyByZWZlcmVuY2UKKyAgICAgICAgZm9y
IHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdCBieSBnZXR0aW5nIHRoZSBwcm9wZXIgb25lIGJvdGgg
Zm9yCisgICAgICAgIHRleHQgY29udHJvbCBvYmplY3RzIChlLmcuIGlucHV0LCB0ZXh0IGFyZWEp
IGFuZCBub3JtYWwgb25lcy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDoKKyAgICAgICAgKGdldE5vZGVGb3JBY2Nlc3NpYmls
aXR5T2JqZWN0KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byBlbnN1cmUgd2UKKyAgICAgICAgYWx3
YXlzIGdldCB0aGUgcmVsZXZhbnQgb2JqZWN0IGZyb20gdGhlIERPTSB0cmVlIGZvciBhIGdpdmVu
CisgICAgICAgIGFjY2Vzc2liaWxpdHkgb2JqZWN0LCBpbiB0aGUgY29udGV4dCBvZiB0aGUgaW1w
bGVtZW50YXRpb24gb2YKKyAgICAgICAgQXRrVGV4dCwgc28gaXQgd29ya3MgYm90aCB3aXRoIFRl
eHQgQ29udHJvbHMgYW5kIG90aGVyIGVsZW1lbnRzLgorICAgICAgICAoZ2V0U2VsZWN0aW9uT2Zm
c2V0c0Zvck9iamVjdCk6IFJld3JpdHRlbiB0aGlzIGZ1bmN0aW9uIGluIHRlcm1zCisgICAgICAg
IG9mIFZpc2libGVQb3NpdGlvbnMgYW5kIGF2b2lkaW5nIHdlaXJkIG9wZXJhdGlvbnMgd2l0aCBy
YW5nZXMsIHNvCisgICAgICAgIHdlIGhhdmUgbW9yZSBjb250cm9sIHRvIGZpbmUgdHVuZSB0aGUg
cmVzdWx0cyBhbmQgZ2l2ZSBtb3JlCisgICAgICAgIGFjY3VyYXRlIG9uZXMuIEJlc2lkZXMsIG5v
dyBpdCB3b3JrcyBiZXR0ZXIgd2l0aCBlZGdlIGNhc2VzLgorCiAyMDEzLTA3LTE0ICBKb24gTGVl
ICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBPcmlnaW5zIHdpdGggaW52YWxpZCBwb3J0
cyBhcmUgbm90IG1hcmtlZCBhcyB1bmlxdWUgKDExODY1MikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcAppbmRleCAxMmU1MWUzLi41MDVhMjE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCkBAIC01MDAsNTMgKzUwMCw2NSBAQCBzdGF0aWMgaW50IGF0a09m
ZnNldFRvV2ViQ29yZU9mZnNldChBdGtUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0KQogICAgIHJldHVy
biBvZmZzZXQgLSBvZmZzZXRBZGp1c3RtZW50Rm9yTGlzdEl0ZW0oY29yZU9iamVjdCk7CiB9CiAK
K3N0YXRpYyBOb2RlKiBnZXROb2RlRm9yQWNjZXNzaWJpbGl0eU9iamVjdChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBjb3JlT2JqZWN0KQoreworICAgIGlmICghY29yZU9iamVjdC0+aXNOYXRpdmVUZXh0
Q29udHJvbCgpKQorICAgICAgICByZXR1cm4gY29yZU9iamVjdC0+bm9kZSgpOworCisgICAgLy8g
Rm9yIHRleHQgY29udHJvbHMsIHdlIGdldCB0aGUgZmlyc3QgdmlzaWJsZSBwb3NpdGlvbiBvbiBp
dCAod2hpY2ggd2lsbAorICAgIC8vIGJlbG9uZyB0byBpdHMgaW5uZXIgZWxlbWVudCwgdW5yZWFj
aGFibGUgZnJvbSB0aGUgRE9NKSBhbmQgcmV0dXJuIGl0cworICAgIC8vIHBhcmVudCBub2RlLCBz
byB3ZSBoYXZlIGEgImJvdW5kaW5nIG5vZGUiIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBvYmplY3Qu
CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uSW5UZXh0Q29udHJvbElubmVyRWxlbWVudCA9
IGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KDAsIHRydWUpOworICAgIE5vZGUq
IGlubmVyTW9zdE5vZGUgPSBwb3NpdGlvbkluVGV4dENvbnRyb2xJbm5lckVsZW1lbnQuZGVlcEVx
dWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7CisgICAgaWYgKCFpbm5lck1vc3ROb2RlKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBpbm5lck1vc3ROb2RlLT5wYXJlbnROb2RlKCk7Cit9
CisKIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBnaW50JiBz
dGFydE9mZnNldCwgZ2ludCYgZW5kT2Zmc2V0KQogewotICAgIGlmICghY29yZU9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCisgICAgLy8gRGVmYXVsdCB2YWx1ZXMsIHVubGVz
cyB0aGUgY29udHJhcnkgaXMgcHJvdmVkLgorICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICBlbmRP
ZmZzZXQgPSAwOworCisgICAgTm9kZSogbm9kZSA9IGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KGNvcmVPYmplY3QpOworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gRWFybHkgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gZG9lc24ndCBhZmZlY3QgdGhlIHNlbGVj
dGVkIG5vZGUuCi0gICAgaWYgKCFzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoY29yZU9iamVjdCwg
c2VsZWN0aW9uKSkKKyAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBXZSBuZWVkIHRvIGZpbmQgdGhlIGV4YWN0IHN0YXJ0IGFuZCBlbmQgcG9zaXRp
b25zIGluIHRoZQotICAgIC8vIHNlbGVjdGVkIG5vZGUgdGhhdCBpbnRlcnNlY3RzIHRoZSBzZWxl
Y3Rpb24sIHRvIGxhdGVyIG9uIGdldAotICAgIC8vIHRoZSByaWdodCB2YWx1ZXMgZm9yIHRoZSBl
ZmZlY3RpdmUgc3RhcnQgYW5kIGVuZCBvZmZzZXRzLgotICAgIFBvc2l0aW9uIG5vZGVSYW5nZVN0
YXJ0OwotICAgIFBvc2l0aW9uIG5vZGVSYW5nZUVuZDsKLSAgICBOb2RlKiBub2RlID0gY29yZU9i
amVjdC0+bm9kZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gc2VsUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKLQotICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gYWZmZWN0cyB0aGUg
c2VsZWN0ZWQgbm9kZSBhbmQgaXRzIGZpcnN0Ci0gICAgLy8gcG9zc2libGUgcG9zaXRpb24gaXMg
YWxzbyBpbiB0aGUgc2VsZWN0aW9uLCB3ZSBtdXN0IHNldAotICAgIC8vIG5vZGVSYW5nZVN0YXJ0
IHRvIHRoYXQgcG9zaXRpb24sIG90aGVyd2lzZSB0byB0aGUgc2VsZWN0aW9uJ3MKLSAgICAvLyBz
dGFydCBwb3NpdGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCi0gICAg
Tm9kZSogZmlyc3RMZWFmTm9kZSA9IG5vZGUtPmZpcnN0RGVzY2VuZGFudCgpOwotICAgIGlmIChz
ZWxSYW5nZS0+aXNQb2ludEluUmFuZ2UoZmlyc3RMZWFmTm9kZSwgMCwgSUdOT1JFX0VYQ0VQVElP
TikpCi0gICAgICAgIG5vZGVSYW5nZVN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KGZpcnN0TGVhZk5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBzZWxS
YW5nZS0+c3RhcnRQb3NpdGlvbigpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBhZmZlY3Rz
IHRoZSBzZWxlY3RlZCBub2RlIGFuZCBpdHMgbGFzdAotICAgIC8vIHBvc3NpYmxlIHBvc2l0aW9u
IGlzIGFsc28gaW4gdGhlIHNlbGVjdGlvbiwgd2UgbXVzdCBzZXQKLSAgICAvLyBub2RlUmFuZ2VF
bmQgdG8gdGhhdCBwb3NpdGlvbiwgb3RoZXJ3aXNlIHRvIHRoZSBzZWxlY3Rpb24ncwotICAgIC8v
IGVuZCBwb3NpdGlvbiAoaXQgd291bGQgYmVsb25nIHRvIHRoZSBub2RlIGFueXdheSkuCi0gICAg
Tm9kZSogbGFzdExlYWZOb2RlID0gbm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKLSAgICBpZiAoc2Vs
UmFuZ2UtPmlzUG9pbnRJblJhbmdlKGxhc3RMZWFmTm9kZSwgbGFzdE9mZnNldEluTm9kZShsYXN0
TGVhZk5vZGUpLCBJR05PUkVfRVhDRVBUSU9OKSkKLSAgICAgICAgbm9kZVJhbmdlRW5kID0gbGFz
dFBvc2l0aW9uSW5PckFmdGVyTm9kZShsYXN0TGVhZk5vZGUpOwotICAgIGVsc2UKLSAgICAgICAg
bm9kZVJhbmdlRW5kID0gc2VsUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgLy8gV2UgbmVlZCB0
byBsaW1pdCBvdXIgc2VhcmNoIHRvIHBvc2l0aW9ucyB0aGF0IGZhbGwgaW5zaWRlIHRoZSBkb21h
aW4gb2YgdGhlIGN1cnJlbnQgb2JqZWN0LgorICAgIFBvc2l0aW9uIGZpcnN0VmFsaWRQb3NpdGlv
biA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLT5maXJzdERlc2NlbmRhbnQoKSk7
CisgICAgUG9zaXRpb24gbGFzdFZhbGlkUG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJO
b2RlKG5vZGUtPmxhc3REZXNjZW5kYW50KCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIHdpdGgg
cHJvcGVyIHZhbHVlcyBpZiB0aGUgc2VsZWN0aW9uIGZhbGxzIGVudGlyZWx5IG91dCBvZiB0aGUg
b2JqZWN0LgorICAgIGlmICghc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KGNvcmVPYmplY3QsIHNl
bGVjdGlvbikpIHsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBjb21wYXJlUG9zaXRpb25zKHNlbGVj
dGlvbi5zdGFydCgpLCBmaXJzdFZhbGlkUG9zaXRpb24pIDwgMCA/IDAgOiBhY2Nlc3NpYmlsaXR5
T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpOworICAgICAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNl
dDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZpbmQgdGhlIHByb3BlciByYW5n
ZSBmb3IgdGhlIHNlbGVjdGlvbiB0aGF0IGZhbGxzIGluc2lkZSB0aGUgb2JqZWN0LgorICAgIFBv
c2l0aW9uIG5vZGVSYW5nZVN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgaWYgKGNvbXBh
cmVQb3NpdGlvbnMobm9kZVJhbmdlU3RhcnQsIGZpcnN0VmFsaWRQb3NpdGlvbikgPCAwKQorICAg
ICAgICBub2RlUmFuZ2VTdGFydCA9IGZpcnN0VmFsaWRQb3NpdGlvbjsKKworICAgIFBvc2l0aW9u
IG5vZGVSYW5nZUVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKKyAgICBpZiAoY29tcGFyZVBvc2l0aW9u
cyhub2RlUmFuZ2VFbmQsIGxhc3RWYWxpZFBvc2l0aW9uKSA+IDApCisgICAgICAgIG5vZGVSYW5n
ZUVuZCA9IGxhc3RWYWxpZFBvc2l0aW9uOwogCiAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIG9m
IHRoZSBzZWxlY3RlZCByYW5nZSBpbnNpZGUgdGhlIG9iamVjdC4KICAgICBQb3NpdGlvbiBwYXJl
bnRGaXJzdFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VJblBhcmVudCA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1l
bnQoKSwgcGFyZW50Rmlyc3RQb3NpdGlvbiwgbm9kZVJhbmdlU3RhcnQpOwogCi0KLSAgICAvLyBT
ZXQgdmFsdWVzIGZvciBzdGFydCBhbmQgZW5kIG9mZnNldHMuCisgICAgLy8gU2V0IHZhbHVlcyBm
b3Igc3RhcnQgb2Zmc2V0cyBhbmQgY2FsY3VsYXRlIGluaXRpYWwgcmFuZ2UgbGVuZ3RoLgorICAg
IC8vIFRoZXNlIHZhbHVlcyBtaWdodCBiZSBhZGp1c3RlZCBsYXRlciB0byBjb3ZlciBzcGVjaWFs
IGNhc2VzLgogICAgIHN0YXJ0T2Zmc2V0ID0gd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0KGNvcmVP
YmplY3QsIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5nZXQoKSwgdHJ1
ZSkpOwotCiAgICAgUmVmUHRyPFJhbmdlPiBub2RlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUt
PmRvY3VtZW50KCksIG5vZGVSYW5nZVN0YXJ0LCBub2RlUmFuZ2VFbmQpOwotICAgIGVuZE9mZnNl
dCA9IHN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChub2RlUmFuZ2UuZ2V0
KCksIHRydWUpOworICAgIGludCByYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobm9kZVJhbmdlLmdldCgpLCB0cnVlKTsKKyAgICBlbmRPZmZzZXQgPSBzdGQ6Om1pbihzdGFy
dE9mZnNldCArIHJhbmdlTGVuZ3RoLCBzdGF0aWNfY2FzdDxpbnQ+KGFjY2Vzc2liaWxpdHlPYmpl
Y3RMZW5ndGgoY29yZU9iamVjdCkpKTsKIH0KIAogc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFRleHQoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRP
ZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggY2E2YTQ1Zi4uNTg4Y2Y3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA3LTE5ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8
bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gSXNzdWVzIHdpdGggZWRn
ZSBjYXNlcyB3aGVuIGdldHRpbmcgb2Zmc2V0cyBmb3IgYSB0ZXh0IHJhbmdlIGluIEF0a1RleHQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODkwOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMv
dGVzdGF0ay5jOgorICAgICAgICAocnVuR2V0VGV4dFRlc3RzKTogVXBkYXRlZCB1bml0IHRlc3Rz
IHRvIGNoZWNrIG1vcmUgY2FzZXMgb2YKKyAgICAgICAgY2FsbGluZyB0aGUgYXRrX3RleHRfZ2V0
X3RleHRfKl9vZmZzZXQoKSBmdW5jdGlvbnMgZm9yIFdPUkQuCisKIDIwMTMtMDctMDkgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQuIFVwZGF0ZSBORVdTIGFuZCBWZXJzaW9ucy5tNCBmb3IgMi4xLjMgcmVsZWFzZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRleCAyNDJmMWQ3Li42MGVjODkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMKKysrIGIvU291cmNlL1dlYktpdC9ndGsv
dGVzdHMvdGVzdGF0ay5jCkBAIC0xMzgsMTIgKzEzOCwyMSBAQCBzdGF0aWMgdm9pZCBydW5HZXRU
ZXh0VGVzdHMoQXRrVGV4dCogdGV4dE9iamVjdCkKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRl
eHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgIDU4LCAidGhpcmQuIiwgNTgsIDY0
KTsKIAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAg
ICAgICAgICAgICAgNjQsICJ0aGlyZC4iLCA1OCwgNjQpOworCisgICAgdGVzdEdldFRleHRGdW5j
dGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9XT1JEX1NUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgIiIsIDAs
IDApOworCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRf
dGV4dF9iZWZvcmVfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJULAogICAgICAg
ICAgICAgICAgICAgICAgICAgNSwgIlRoaXMgIiwgMCwgNSk7CiAKICAgICB0ZXN0R2V0VGV4dEZ1
bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19U
RVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCiAgICAgICAgICAgICAgICAgICAgICAgICA3LCAiVGhp
cyAiLCAwLCA1KTsKIAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3Rl
eHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIDY0LCAidGhlICIsIDU0LCA1OCk7CisKICAgICB0ZXN0
R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNl
dCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAg
IDAsICJpcyAiLCA1LCA4KTsKIApAQCAtMTUzLDYgKzE2Miw5IEBAIHN0YXRpYyB2b2lkIHJ1bkdl
dFRleHRUZXN0cyhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24o
dGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYWZ0ZXJfb2Zmc2V0LCBBVEtfVEVYVF9CT1VO
REFSWV9XT1JEX1NUQVJULAogICAgICAgICAgICAgICAgICAgICAgICAgMywgImlzICIsIDUsIDgp
OwogCisgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQsCisgICAgICAgICAg
ICAgICAgICAgICAgICA2NCwgIiIsIDY0LCA2NCk7CisKICAgICAvKiBBVEtfVEVYVF9CT1VOREFS
WV9XT1JEX0VORCAqLwogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3Rl
eHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsICJUaGlzIiwgMCwgNCk7CkBAIC0xNjYsNiArMTc4LDE1IEBA
IHN0YXRpYyB2b2lkIHJ1bkdldFRleHRUZXN0cyhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRl
c3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgIDks
ICIgdGVzdCIsIDksIDE0KTsKIAorICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwg
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIDU4LCAiIHRoaXJkIiwgNTcsIDYzKTsKKworICAgIHRl
c3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDY0
LCAiLiIsIDYzLCA2NCk7CisKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0
a190ZXh0X2dldF90ZXh0X2JlZm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5E
LAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgIiIsIDAsIDApOworCiAgICAgdGVzdEdldFRl
eHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9iZWZvcmVfb2Zmc2V0LCBB
VEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKICAgICAgICAgICAgICAgICAgICAgICAgIDUsICJU
aGlzIiwgMCwgNCk7CiAKQEAgLTE3NSwxNCArMTk2LDIwIEBAIHN0YXRpYyB2b2lkIHJ1bkdldFRl
eHRUZXN0cyhBdGtUZXh0KiB0ZXh0T2JqZWN0KQogICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4
dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYmVmb3JlX29mZnNldCwgQVRLX1RFWFRfQk9VTkRB
UllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA3LCAiIGlzIiwgNCwgNyk7CiAK
KyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2Jl
Zm9yZV9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAg
ICAgICAgICAgNjQsICIgdGhpcmQiLCA1NywgNjMpOworCisgICAgdGVzdEdldFRleHRGdW5jdGlv
bih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JP
VU5EQVJZX1dPUkRfRU5ELAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgIiBpcyIsIDQsIDcp
OworCiAgICAgdGVzdEdldFRleHRGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfdGV4
dF9hZnRlcl9vZmZzZXQsIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5ELAogICAgICAgICAgICAg
ICAgICAgICAgICAgNSwgIiBhIiwgNywgOSk7CiAKICAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRl
eHRPYmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRB
UllfV09SRF9FTkQsCiAgICAgICAgICAgICAgICAgICAgICAgICA0LCAiIGEiLCA3LCA5KTsKIAot
ICAgIHRlc3RHZXRUZXh0RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX0VORCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIDU4LCAiIHRoaXJkIiwgNTcsIDYzKTsKKyAgICB0ZXN0R2V0VGV4dEZ1bmN0aW9uKHRleHRP
YmplY3QsIGF0a190ZXh0X2dldF90ZXh0X2FmdGVyX29mZnNldCwgQVRLX1RFWFRfQk9VTkRBUllf
V09SRF9FTkQsCisgICAgICAgICAgICAgICAgICAgICAgICA2NCwgIiIsIDY0LCA2NCk7CiAKICAg
ICAvKiBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCAqLwogICAgIHRlc3RHZXRUZXh0
RnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVCwKLS0gCjEuNy4xMC40Cgo=
</data>
<flag name="review"
          id="228883"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>