<?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>229529</bug_id>
          
          <creation_ts>2021-08-25 16:51:12 -0700</creation_ts>
          <short_desc>Make AXCoreObject::setSelectedVisiblePositionRange work in native text controls on MacOS.</short_desc>
          <delta_ts>2021-08-27 03:54:12 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1787386</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-08-25 16:51:12 -0700</bug_when>
    <thetext>Make AXCoreObject::setSelectedVisiblePositionRange work in native text controls on MacOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787390</commentid>
    <comment_count>1</comment_count>
      <attachid>436441</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-08-25 17:11:26 -0700</bug_when>
    <thetext>Created attachment 436441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787399</commentid>
    <comment_count>2</comment_count>
      <attachid>436441</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2021-08-25 17:29:02 -0700</bug_when>
    <thetext>Comment on attachment 436441
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2294
&gt; +    if (isNativeTextControl()) {

is isNativeTextControl check identical to downcast&lt;RenderTextControl&gt;.

Should we use is&lt;RenderTextControl&gt;(m_renderr) instead?

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2300
&gt; +        // the above indexs will be 0, leading to an incorrect selected range

indexs &gt; indexes

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2304
&gt; +        // Thus, the following corrects the start and end indexes in such scenario.

such &quot;a&quot; scenario

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2307
&gt; +            if (range.start &lt; innerRange.start)

is there ever a case where we would expect the range coming into setSelectedVisiblePosition to WANT to select beyond the range of the text field?

In otherwords, should we make this change in the range we return for a text field element?

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2598
&gt; +        return (id)Accessibility::retrieveAutoreleasedValueFromMainThread&lt;AXTextMarkerRangeRef&gt;([protectedSelf = retainPtr(self)] () -&gt; RetainPtr&lt;AXTextMarkerRangeRef&gt; {

this feels like a step backwards to remove the function and inline more code into this long method

&gt; LayoutTests/accessibility/mac/textarea-set-selected-textmarker-range.html:9
&gt; +&lt;textarea id=&quot;textarea&quot;&gt;This is a textarea.&lt;/textarea&gt;

should we also check a &lt;input type=text&gt; and a &lt;input type=password&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787722</commentid>
    <comment_count>3</comment_count>
      <attachid>436542</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-08-26 12:12:59 -0700</bug_when>
    <thetext>Created attachment 436542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787723</commentid>
    <comment_count>4</comment_count>
      <attachid>436542</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2021-08-26 12:15:35 -0700</bug_when>
    <thetext>Comment on attachment 436542
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2307
&gt; +        if (range.start.deepEquivalent().anchorNode() == range.end.deepEquivalent().anchorNode()

we should cache range.start.deepEquivalent().anchorNode() if possible since we use it twice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787736</commentid>
    <comment_count>5</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-08-26 12:29:34 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #2)
&gt; Comment on attachment 436441 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=436441&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2294
&gt; &gt; +    if (isNativeTextControl()) {
&gt; 
&gt; is isNativeTextControl check identical to downcast&lt;RenderTextControl&gt;.
&gt; 
&gt; Should we use is&lt;RenderTextControl&gt;(m_renderr) instead?

I changed it to downcast&lt;HTmLTextFormControlElement&gt; which is more clear it is safe if isNativeTextControl() returns true.

&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2300
&gt; &gt; +        // the above indexs will be 0, leading to an incorrect selected range
&gt; 
&gt; indexs &gt; indexes

Fixed.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2304
&gt; &gt; +        // Thus, the following corrects the start and end indexes in such scenario.
&gt; 
&gt; such &quot;a&quot; scenario

Fixed.
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2307
&gt; &gt; +            if (range.start &lt; innerRange.start)
&gt; 
&gt; is there ever a case where we would expect the range coming into
&gt; setSelectedVisiblePosition to WANT to select beyond the range of the text
&gt; field?
&gt; 
&gt; In otherwords, should we make this change in the range we return for a text
&gt; field element?

Good point. that was my initial attempt, but that creates a new array of problems because the range we would return for the object is such that the element obtained from range.start doesn&apos;t match the original object, and furthermore it can be an object that is not exposed in the AX tree.

So the alternative in this revision is to ensure that the range is contained in this object before trying to do this. The check in question is:

        if (range.start.deepEquivalent().anchorNode() == range.end.deepEquivalent().anchorNode()
            &amp;&amp; range.start.deepEquivalent().anchorNode() == textControl) {

&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:2598
&gt; &gt; +        return (id)Accessibility::retrieveAutoreleasedValueFromMainThread&lt;AXTextMarkerRangeRef&gt;([protectedSelf = retainPtr(self)] () -&gt; RetainPtr&lt;AXTextMarkerRangeRef&gt; {
&gt; 
&gt; this feels like a step backwards to remove the function and inline more code
&gt; into this long method

OK, put it back but renamed it to selectedTextMarkerRange for naming consistency.

&gt; 
&gt; &gt; LayoutTests/accessibility/mac/textarea-set-selected-textmarker-range.html:9
&gt; &gt; +&lt;textarea id=&quot;textarea&quot;&gt;This is a textarea.&lt;/textarea&gt;
&gt; 
&gt; should we also check a &lt;input type=text&gt; and a &lt;input type=password&gt;

Added &lt;input type=&quot;text&quot;&gt; test case. Password fields are left out at this time because it has a whole host of other problems with ranges. Will have to fix password fields in a separate patch.
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787741</commentid>
    <comment_count>6</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-08-26 12:33:11 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #4)
&gt; Comment on attachment 436542 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=436542&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2307
&gt; &gt; +        if (range.start.deepEquivalent().anchorNode() == range.end.deepEquivalent().anchorNode()
&gt; 
&gt; we should cache range.start.deepEquivalent().anchorNode() if possible since
&gt; we use it twice

Is that for clarity/style? I believe these are all inline accessors to member variables, so it should have little to no perf impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787749</commentid>
    <comment_count>7</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-08-26 12:50:28 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #4)
&gt; Comment on attachment 436542 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=436542&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2307
&gt; &gt; +        if (range.start.deepEquivalent().anchorNode() == range.end.deepEquivalent().anchorNode()
&gt; 
&gt; we should cache range.start.deepEquivalent().anchorNode() if possible since
&gt; we use it twice

I think it is more expensive to cache in this case because it will mean a copy, while this way we are essentially just accessing the member variable directly since deepEquivalent and anchorNode are both inline accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787916</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-26 18:26:04 -0700</bug_when>
    <thetext>&lt;rdar://problem/82416769&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787986</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-27 03:54:11 -0700</bug_when>
    <thetext>Committed r281691 (241041@main): &lt;https://commits.webkit.org/241041@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436542.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436441</attachid>
            <date>2021-08-25 17:11:26 -0700</date>
            <delta_ts>2021-08-26 12:12:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229529-20210825201125.patch</filename>
            <type>text/plain</type>
            <size>18081</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBmODNhNzgyOTZhODFi
YTQyMDllY2E4NjljODlkY2JkZTM2ZDk0MC4uYzI5YzhkNDk2NGI5NGYzYjU2NmJjYTg3NDkzYjcx
YmNiYWZjOTA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIxLTA4LTI1ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFYQ29y
ZU9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSB3b3JrIGluIG5hdGl2ZSB0
ZXh0IGNvbnRyb2xzIG9uIE1hY09TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5NTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dGFyZWEtc2V0LXNlbGVj
dGVkLXRleHRtYXJrZXItcmFuZ2UuaHRtbAorCisgICAgICAgIFRyeWluZyB0byBzZXQgdGhlIHNl
bGVjdGlvbiBpbiBuYXRpdmUgdGV4dCBjb250cm9scyB1c2luZyB0aGUgYXRyaWJ1dGUKKyAgICAg
ICAgQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSBkaWRuJ3Qgd29yayBmb3IgTWFjT1MgQVggY2xp
ZW50cy4gVGhpcyBwYXRjaAorICAgICAgICBpbXBsZW1lbnRzIHRoaXMgZnVuY3Rpb25hbGl0eSBi
eSBwcm9wZXJseSBoYW5kbGluZyBuYXRpdmUgdGV4dCBjb250cm9scworICAgICAgICBpbiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmg6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvY3VtZW50QmFzZWRTZWxlY3Rl
ZFRleHRSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpzZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlIGNvbnN0KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2li
bGVQb3NpdGlvblJhbmdlIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29uc3QpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0
TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKTogRGVsZXRlZC4KKwogMjAyMS0wOC0yMCAgQWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0lGQ10gVW5kbyBpbmNvcnJlY3Qg
SW5saW5lVGV4dEJveCAtPiBMZWdhY3lJbmxpbmVUZXh0Qm94IHJlbmFtaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGI4
YTFmZDdkNTQzNDU1OGY5ZTdjMjIxMjM2MzEzZDE2YWNmYTM0NWYuLjI4MzlkYThkMGU1NzA4OGUw
ZWJlNzE4ODU4Mzg0MGJmZjViYjlmMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC01MzYsNiArNTM2LDcgQEAgcHVibGlj
OgogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZTsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgbGluZVJhbmdlRm9yUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBv
c2l0aW9uUmFuZ2Ugc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHsgfTsgfQogCiAgICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VG
b3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwog
I2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggMThhZTY5NTU4M2Q5
ZDg0Y2ZhNDM2MmQ0ZWE5YWU5YTdiOGNkMmVkNC4uMjE2ODQ1NDhiYTQzYThiYjQxZmM2YjkzNWJh
YzJkYzQ1NWM0ZGJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAgLTEyNzQsNiArMTI3NCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VG
b3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0
IFBsYWluVGV4dFJhbmdlJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgbGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc2VsZWN0ZWRWaXNpYmxlUG9z
aXRpb25SYW5nZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNv
bnN0ID0gMDsKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA5MjEz
OTc1ZWU3OGQ0Zjk3NWY5YmZkM2IxZWViYTUyNjQwMGExMmJlLi42YmY0NmVmOGU5YjdhMmU2N2Zm
OTQzOTU4MDI4N2Q0ZTVkNDQ2MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE2MDQsMTcg
KzE2MDQsMTIgQEAgaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRMZW5ndGgoKSBj
b25zdAogCiBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVu
dEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBtX3Jl
bmRlcmVyLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gUGxhaW5UZXh0
UmFuZ2UoKTsKLQotICAgIGF1dG8gdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSB2aXNpYmxlU2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKLSAg
ICBpZiAoIXNlbGVjdGlvblJhbmdlIHx8ICFpbnRlcnNlY3RzPENvbXBvc2VkVHJlZT4oKnNlbGVj
dGlvblJhbmdlLCAqbm9kZSkpCi0gICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgpOworICAg
IGF1dG8gc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSA9IHRoaXMtPnNlbGVjdGVkVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKTsKKyAgICBpZiAoc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZS5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGludCBzdGFydCA9IGluZGV4Rm9y
VmlzaWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSk7Ci0gICAgaW50IGVuZCA9
IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uZW5kKCkpOworICAgIGlu
dCBzdGFydCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGVkVmlzaWJsZVBvc2l0aW9u
UmFuZ2Uuc3RhcnQpOworICAgIGludCBlbmQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxl
Y3RlZFZpc2libGVQb3NpdGlvblJhbmdlLmVuZCk7CiAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdl
KHN0YXJ0LCBlbmQgLSBzdGFydCk7CiB9CiAKQEAgLTIyNzEsNiArMjI2NiwxNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzVmlzaWJsZVBvc2l0aW9uUmFuZ2VJbkRpZmZlcmVu
dERvY3VtZW50KGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitWaXNpYmxlUG9zaXRpb25S
YW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFZpc2libGVQb3NpdGlvblJh
bmdlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBhdXRvIHNlbGVjdGlvbiA9IG1fcmVuZGVyZXItPmZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICByZXR1cm4gc2VsZWN0aW9uOworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmIHJhbmdlKSBjb25zdAogewogICAgIGlmIChyYW5nZS5pc051bGwoKSkKQEAg
LTIyODUsMjIgKzIyOTEsNDUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRT
ZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3MKICAgICBpZiAoYXV0
byBjbGllbnQgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpKQogICAg
ICAgICBjbGllbnQtPndpbGxDaGFuZ2VTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KCk7CiAKLSAg
ICAvLyBtYWtlIHNlbGVjdGlvbiBhbmQgdGVsbCB0aGUgZG9jdW1lbnQgdG8gdXNlIGl0LiBpZiBp
dCdzIHplcm8gbGVuZ3RoLCB0aGVuIG1vdmUgdG8gdGhhdCBwb3NpdGlvbgotICAgIGlmIChyYW5n
ZS5zdGFydCA9PSByYW5nZS5lbmQpIHsKLSAgICAgICAgc2V0VGV4dFNlbGVjdGlvbkludGVudChh
eE9iamVjdENhY2hlKCksIEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbk1vdmUpOwotCi0g
ICAgICAgIGF1dG8gc3RhcnQgPSByYW5nZS5zdGFydDsKLSAgICAgICAgaWYgKGF1dG8gZWxlbWVu
dFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmICghY29udGFp
bnM8Q29tcG9zZWRUcmVlPigqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFydCkp
KQotICAgICAgICAgICAgICAgIHN0YXJ0ID0gbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKGVs
ZW1lbnRSYW5nZS0+c3RhcnQpOworICAgIGlmIChpc05hdGl2ZVRleHRDb250cm9sKCkpIHsKKyAg
ICAgICAgYXV0byYgdGV4dENvbnRyb2wgPSBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbD4oKm1f
cmVuZGVyZXIpLnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAgICAgaW50IHN0YXJ0ID0g
dGV4dENvbnRyb2wuaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOworICAgICAg
ICBpbnQgZW5kID0gdGV4dENvbnRyb2wuaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24ocmFuZ2UuZW5k
KTsKKworICAgICAgICAvLyBJZiByYW5nZS5zdGFydCBvciByYW5nZS5lbmQgYXJlIG5vdCBjb250
YWluZWQgaW4gdGhlIHRleHRDb250cm9sIGlubmVyVGV4dEVsZW1lbnQsCisgICAgICAgIC8vIHRo
ZSBhYm92ZSBpbmRleHMgd2lsbCBiZSAwLCBsZWFkaW5nIHRvIGFuIGluY29ycmVjdCBzZWxlY3Rl
ZCByYW5nZQorICAgICAgICAvLyAoc2VlIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjppbmRl
eEZvclZpc2libGVQb3NpdGlvbikuIFRoaXMgaXMKKyAgICAgICAgLy8gdGhlIGNhc2Ugd2hlbiBy
YW5nZSBpcyBvYnRhaW5lZCBmcm9tIEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRz
CisgICAgICAgIC8vIGZvciB0aGUgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuCisgICAgICAg
IC8vIFRodXMsIHRoZSBmb2xsb3dpbmcgY29ycmVjdHMgdGhlIHN0YXJ0IGFuZCBlbmQgaW5kZXhl
cyBpbiBzdWNoIHNjZW5hcmlvLgorICAgICAgICBpZiAoYXV0byBpbm5lclRleHQgPSB0ZXh0Q29u
dHJvbC5pbm5lclRleHRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaW5uZXJSYW5nZSA9
IG1ha2VWaXNpYmxlUG9zaXRpb25SYW5nZShBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250
ZW50cygqaW5uZXJUZXh0KSk7CisgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgPCBpbm5lclJh
bmdlLnN0YXJ0KQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgIGlmIChy
YW5nZS5lbmQgPj0gaW5uZXJSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgZW5kID0gdGV4dENv
bnRyb2wuaW5uZXJUZXh0VmFsdWUoKS5sZW5ndGgoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1f
cmVuZGVyZXItPmZyYW1lKCkuc2VsZWN0aW9uKCkubW92ZVRvKHN0YXJ0LCBVc2VyVHJpZ2dlcmVk
KTsKKyAgICAgICAgc2V0VGV4dFNlbGVjdGlvbkludGVudChheE9iamVjdENhY2hlKCksIHN0YXJ0
ID09IGVuZCA/IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbk1vdmUgOiBBWFRleHRTdGF0
ZUNoYW5nZVR5cGVTZWxlY3Rpb25FeHRlbmQpOworICAgICAgICB0ZXh0Q29udHJvbC5zZXRTZWxl
Y3Rpb25SYW5nZShzdGFydCwgZW5kKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZXRUZXh0U2Vs
ZWN0aW9uSW50ZW50KGF4T2JqZWN0Q2FjaGUoKSwgQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0
aW9uRXh0ZW5kKTsKKyAgICAgICAgLy8gTWFrZSBzZWxlY3Rpb24gYW5kIHRlbGwgdGhlIGRvY3Vt
ZW50IHRvIHVzZSBpdC4gSWYgaXQncyB6ZXJvIGxlbmd0aCwgdGhlbiBtb3ZlIHRvIHRoYXQgcG9z
aXRpb24uCisgICAgICAgIGlmIChyYW5nZS5zdGFydCA9PSByYW5nZS5lbmQpIHsKKyAgICAgICAg
ICAgIHNldFRleHRTZWxlY3Rpb25JbnRlbnQoYXhPYmplY3RDYWNoZSgpLCBBWFRleHRTdGF0ZUNo
YW5nZVR5cGVTZWxlY3Rpb25Nb3ZlKTsKKworICAgICAgICAgICAgYXV0byBzdGFydCA9IHJhbmdl
LnN0YXJ0OworICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVu
dFJhbmdlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW5zPENvbXBvc2VkVHJlZT4o
KmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpKSkKKyAgICAgICAgICAgICAg
ICAgICAgc3RhcnQgPSBtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24oZWxlbWVudFJhbmdlLT5z
dGFydCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotICAgICAg
ICBtX3JlbmRlcmVyLT5mcmFtZSgpLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rp
b24sIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dl
cmVkKSk7CisgICAgICAgICAgICBtX3JlbmRlcmVyLT5mcmFtZSgpLnNlbGVjdGlvbigpLm1vdmVU
byhzdGFydCwgVXNlclRyaWdnZXJlZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
ZXRUZXh0U2VsZWN0aW9uSW50ZW50KGF4T2JqZWN0Q2FjaGUoKSwgQVhUZXh0U3RhdGVDaGFuZ2VU
eXBlU2VsZWN0aW9uRXh0ZW5kKTsKKworICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdT
ZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOworICAg
ICAgICAgICAgbV9yZW5kZXJlci0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNl
clRyaWdnZXJlZCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgY2xlYXJUZXh0U2VsZWN0aW9u
SW50ZW50KGF4T2JqZWN0Q2FjaGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCmluZGV4IDBjNGRmZWI2MTMx
NTNiYzVlN2Y0MWY2NzI1YjQ1N2ExNTQ5NzBlNTIuLjMxMTFlNDRkOTlhZTA0ZDdjMjExYWEzMTkw
YjVkZjE3NzY5OTQ5M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCkBAIC0xNjUsNiArMTY1LDcgQEAgcHVi
bGljOgogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGlu
ZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxl
UG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBzZWxlY3RlZFZpc2libGVQb3NpdGlv
blJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3Np
dGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBpc1Zpc2libGVQb3NpdGlvblJhbmdlSW5EaWZmZXJlbnREb2N1bWVudChjb25zdCBW
aXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0OwogICAgIGJvb2wgaGFzUG9wdXAoKSBjb25zdCBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKaW5kZXggYjcwYWRiYTY0OGVkYjcy
M2U0M2YxNjA3MmVmZTRhNzFkNzg1NzljMi4uYjBiY2Y1NTI2MGZhMTM4NGE0ZTRhYmUwNTcxZDcz
NjUzOTI5MDMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTE0MzUsNiArMTQz
NSwxNSBAQCBWaXNpYmxlU2VsZWN0aW9uIEFYSXNvbGF0ZWRPYmplY3Q6OnNlbGVjdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+c2VsZWN0aW9uKCkgOiBWaXNpYmxlU2Vs
ZWN0aW9uKCk7CiB9CiAKK1Zpc2libGVQb3NpdGlvblJhbmdlIEFYSXNvbGF0ZWRPYmplY3Q6OnNl
bGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdAoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBpZiAoYXV0byogYXhPYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3Qo
KSkKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT5zZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdl
KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRTZWxl
Y3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiB2aXNp
YmxlUG9zaXRpb25SYW5nZSkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5oCmluZGV4IDcyNTVmMmM0ZGJmMmNhZGM1NmMyMTU5ZjQ1ZGYz
ZWVmYzU0NjdjZjQuLjZmYjFhZGFjOGRhZTNmMjYzN2FlNGI2NDE1NGExNDQ1YWQwOTVkYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKQEAgLTM4NCw2ICszODQsNyBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIGRvQVhMaW5lRm9ySW5kZXgodW5zaWduZWQpIG92ZXJyaWRlOwogCiAgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSBzZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQ
b3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBUT0RPOiBUZXh0IHJhbmdl
cyBhbmQgc2VsZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpp
bmRleCAzZTcxYzM3ZDI2MjBhYTI0MDZlY2UyYjBiMmE0MTk1YjlhNmIxMTBjLi42NGQ3ODZlZDFi
ZTAwMTAyNTM0ZmY5NzZlN2VlMDQwNTkwZWQzYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQpAQCAtMTY3OSwyMSArMTY3OSw2IEBAIHN0YXRpYyB2b2lkIGNvbnZl
cnRUb1ZlY3RvcihOU0FycmF5KiBhcnJheSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoCiAgICAgfQogfQogCi0tIChBWFRleHRNYXJrZXJSYW5nZVJlZil0ZXh0TWFya2VyUmFu
Z2VGb3JTZWxlY3Rpb24KLXsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRv
cmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPEFYVGV4dE1hcmtlclJhbmdlUmVmPihbcHJvdGVj
dGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPEFYVGV4dE1hcmtlclJh
bmdlUmVmPiB7Ci0gICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdDsKLSAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQotICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGJhY2tpbmdPYmplY3QtPnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLmlzTm9u
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgICAgICByZXR1cm4gdGV4dE1hcmtl
clJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAg
IH0pOwotfQotCiAtIChpZClhc3NvY2lhdGVkUGx1Z2luUGFyZW50CiB7CiAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4o
W3Byb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewpA
QCAtMjYwOSw4ICsyNTk0LDE4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VO
RAogICAgIGlmIChiYWNraW5nT2JqZWN0LT5pc0xpc3QoKSAmJiBbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb25BdHRyaWJ1dGVdKQogICAgICAg
ICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5VmVydGljYWxPcmllbnRhdGlvblZhbHVlOwogCi0gICAg
aWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYU2VsZWN0ZWRUZXh0TWFya2Vy
UmFuZ2UiXSkKLSAgICAgICAgcmV0dXJuIChpZClbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxl
Y3Rpb25dOworICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbGVj
dGVkVGV4dE1hcmtlclJhbmdlIl0pIHsKKyAgICAgICAgcmV0dXJuIChpZClBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8QVhUZXh0TWFya2VyUmFu
Z2VSZWY+KFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8
QVhUZXh0TWFya2VyUmFuZ2VSZWY+IHsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3Qg
PSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICgh
YmFja2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAg
ICBhdXRvIHNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5zZWxl
Y3RlZFZpc2libGVQb3NpdGlvblJhbmdlKCk7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWaXNp
YmxlUG9zaXRpb25SYW5nZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwor
ICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKGJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5n
ZS5zdGFydCwgc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZS5lbmQpOworICAgICAgICB9KTsK
KyAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFy
dFRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IHJldGFp
blB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTM3M2MyOTg0MjFlNGZj
NzM0ODdhMjU0YjY2ZjFjNGI0ZmM5NGZhZS4uNGQ5NmI4Njg5NDZiMTg0Mzc0MTkxZTkwNTA1ZWIz
YmE3MmFjMzkzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA4LTI1ICBBbmRyZXMgR29u
emFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFYQ29yZU9iamVj
dDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSB3b3JrIGluIG5hdGl2ZSB0ZXh0IGNv
bnRyb2xzIG9uIE1hY09TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI5NTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0YXJlYS1zZXQtc2VsZWN0ZWQtdGV4dG1h
cmtlci1yYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
bWFjL3RleHRhcmVhLXNldC1zZWxlY3RlZC10ZXh0bWFya2VyLXJhbmdlLmh0bWw6IEFkZGVkLgor
CiAyMDIxLTA4LTIwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDXVtJbnRlZ3JhdGlvbl0gRW5hYmxlIGZ1bGwgdW5kZXJsaW5lIHN1cHBvcnQKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHRhcmVhLXNldC1zZWxlY3Rl
ZC10ZXh0bWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL3RleHRhcmVhLXNldC1zZWxlY3RlZC10ZXh0bWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hOTAxZTI3MWFkZTI5M2M3ZWI3Zjg4YTZmMmY5NzAyMGM5MTdiMThmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dGFyZWEt
c2V0LXNlbGVjdGVkLXRleHRtYXJrZXItcmFuZ2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIg
QEAKK1Rlc3QgZm9yIHNldHRpbmcgdGhlIHNlbGVjdGVkIFRleHRNYXJrZXJSYW5nZSBpbiBhIHRl
eHRhcmVhLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworc2VsZWN0ZWQgdGV4dCAi
VGhpcyBpcyBhIHRleHRhcmVhLiIKK3NlbGVjdGVkIHRleHQgIlRoaXMgaXMgYSAiCitzZWxlY3Rl
ZCB0ZXh0ICIgaXMgYSAiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dGFyZWEtc2V0LXNlbGVjdGVkLXRleHRtYXJrZXItcmFuZ2UuaHRtbCBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL3RleHRhcmVhLXNldC1zZWxlY3RlZC10ZXh0bWFya2VyLXJhbmdlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTc2NDUxOGRkOGIwNGZkNzQ3NmRkMzZiMmE3ZWQ3NTI0MjE0NmY2Ywot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHRhcmVh
LXNldC1zZWxlY3RlZC10ZXh0bWFya2VyLXJhbmdlLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8dGV4dGFyZWEgaWQ9InRleHRhcmVhIj5UaGlzIGlz
IGEgdGV4dGFyZWEuPC90ZXh0YXJlYT4KKworPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVz
dCBmb3Igc2V0dGluZyB0aGUgc2VsZWN0ZWQgVGV4dE1hcmtlclJhbmdlIGluIGEgdGV4dGFyZWEu
Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAg
IHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICBsZXQgZWxlbWVudElEID0g
InRleHRhcmVhIjsKKworICAgICAgICBsZXQgcCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZChlbGVtZW50SUQpOworICAgICAgICBsZXQgcmFuZ2UgPSBwLnRl
eHRNYXJrZXJSYW5nZUZvckVsZW1lbnQocCk7CisKKyAgICAgICAgc2V0VGltZW91dChhc3luYyAo
KSA9PiB7CisgICAgICAgICAgICAvLyBTZWxlY3QgYWxsIHRleHQgaW4gdGhlIHRleHRhcmVhLgor
ICAgICAgICAgICAgcC5zZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZShyYW5nZSk7CisgICAgICAg
ICAgICBsZXQgc2VsZWN0ZWRSYW5nZSA9IG51bGw7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9y
KCgpID0+IHsKKyAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gcC5zZWxlY3RlZFRleHRN
YXJrZXJSYW5nZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBwLnRleHRNYXJrZXJSYW5nZUxl
bmd0aChzZWxlY3RlZFJhbmdlKSA9PSAxOTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ZGVidWcoYHNlbGVjdGVkIHRleHQgIiR7cC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uoc2VsZWN0
ZWRSYW5nZSl9ImApOworCisgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIGZpcnN0IDEwIGNoYXJh
Y3RlcnMuCisgICAgICAgICAgICBsZXQgc3RhcnQgPSBwLnN0YXJ0VGV4dE1hcmtlckZvclRleHRN
YXJrZXJSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAgICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAgJiYgZW5kICE9IG51bGw7ICsraSkKKyAgICAgICAgICAg
ICAgICBlbmQgPSBwLm5leHRUZXh0TWFya2VyKGVuZCk7CisgICAgICAgICAgICByYW5nZSA9IHAu
dGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIHAuc2V0
U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgYXdhaXQgd2FpdEZv
cigoKSA9PiB7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IHAuc2VsZWN0ZWRUZXh0
TWFya2VyUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcC50ZXh0TWFya2VyUmFuZ2VM
ZW5ndGgoc2VsZWN0ZWRSYW5nZSkgPT0gMTA7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGRlYnVnKGBzZWxlY3RlZCB0ZXh0ICIke3Auc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHNlbGVj
dGVkUmFuZ2UpfSJgKTsKKworICAgICAgICAgICAgLy8gU2VsZWN0IHNvbWUgY2hhcmFjdGVycyBp
biB0aGUgbWlkZGxlLgorICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0ICYmIGVuZCAh
PSBudWxsOyArK2kpCisgICAgICAgICAgICAgICAgc3RhcnQgPSBwLm5leHRUZXh0TWFya2VyKHN0
YXJ0KTsKKyAgICAgICAgICAgIHJhbmdlID0gcC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0
YXJ0LCBlbmQpOworICAgICAgICAgICAgcC5zZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZShyYW5n
ZSk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHsKKyAgICAgICAgICAgICAgICBz
ZWxlY3RlZFJhbmdlID0gcC5zZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBwLnRleHRNYXJrZXJSYW5nZUxlbmd0aChzZWxlY3RlZFJhbmdlKSA9PSA2Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBkZWJ1Zyhgc2VsZWN0ZWQgdGV4dCAiJHtwLnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZShzZWxlY3RlZFJhbmdlKX0iYCk7CisKKyAgICAgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9LCAwKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436542</attachid>
            <date>2021-08-26 12:12:59 -0700</date>
            <delta_ts>2021-08-27 03:54:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229529-20210826151258.patch</filename>
            <type>text/plain</type>
            <size>20083</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBmODNhNzgyOTZhODFi
YTQyMDllY2E4NjljODlkY2JkZTM2ZDk0MC4uMmZiNTcyODYwYTY4NjJlYWEyNDAzMTQ0ODRmZjJh
NWRhMTdhODFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIxLTA4LTI2ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFYQ29y
ZU9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSB3b3JrIGluIG5hdGl2ZSB0
ZXh0IGNvbnRyb2xzIG9uIE1hY09TLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5NTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXph
Y2guCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvbmF0aXZlLXRleHQtY29udHJv
bC1zZXQtc2VsZWN0ZWQtdGV4dG1hcmtlci1yYW5nZS5odG1sCisKKyAgICAgICAgVHJ5aW5nIHRv
IHNldCB0aGUgc2VsZWN0aW9uIGluIG5hdGl2ZSB0ZXh0IGNvbnRyb2xzIHVzaW5nIHRoZSBhdHJp
YnV0ZQorICAgICAgICBBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlIGRpZG4ndCB3b3JrIGZvciBN
YWNPUyBBWCBjbGllbnRzLiBUaGlzIHBhdGNoCisgICAgICAgIGltcGxlbWVudHMgdGhpcyBmdW5j
dGlvbmFsaXR5IGJ5IHByb3Blcmx5IGhhbmRsaW5nIG5hdGl2ZSB0ZXh0IGNvbnRyb2xzCisgICAg
ICAgIGluIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0
aW9uUmFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9jdW1lbnRC
YXNlZFNlbGVjdGVkVGV4dFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29uc3QpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNl
bGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJ
c29sYXRlZE9iamVjdDo6c2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdCk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbl0pOiBSZW5hbWVkIHNlbGVjdGVkVGV4
dE1hcmtlclJhbmdlIGZvciBjb25zaXN0ZW5jeS4KKwogMjAyMS0wOC0yMCAgQWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0lGQ10gVW5kbyBpbmNvcnJlY3QgSW5saW5l
VGV4dEJveCAtPiBMZWdhY3lJbmxpbmVUZXh0Qm94IHJlbmFtaW5nCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGI4YTFmZDdk
NTQzNDU1OGY5ZTdjMjIxMjM2MzEzZDE2YWNmYTM0NWYuLjI4MzlkYThkMGU1NzA4OGUwZWJlNzE4
ODU4Mzg0MGJmZjViYjlmMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC01MzYsNiArNTM2LDcgQEAgcHVibGljOgogICAg
IFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZTsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgbGluZVJhbmdlRm9yUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2Ugc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHsgfTsgfQogCiAgICAgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQbGFp
blRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwogI2lmIFBM
QVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggMThhZTY5NTU4M2Q5ZDg0Y2Zh
NDM2MmQ0ZWE5YWU5YTdiOGNkMmVkNC4uMjE2ODQ1NDhiYTQzYThiYjQxZmM2YjkzNWJhYzJkYzQ1
NWM0ZGJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKQEAgLTEyNzQsNiArMTI3NCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWlu
VGV4dFJhbmdlJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
bGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25S
YW5nZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0ID0g
MDsKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA5MjEzOTc1ZWU3
OGQ0Zjk3NWY5YmZkM2IxZWViYTUyNjQwMGExMmJlLi4zM2E1NDAyZTY1NjRkYmFhNTVhMThlYzlh
MzJiYmIwNWI2NzVlZTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE2MDQsMTcgKzE2MDQs
MTIgQEAgaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRMZW5ndGgoKSBjb25zdAog
CiBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVy
LT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2Uo
KTsKLQotICAgIGF1dG8gdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIGF1dG8g
c2VsZWN0aW9uUmFuZ2UgPSB2aXNpYmxlU2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKLSAgICBpZiAo
IXNlbGVjdGlvblJhbmdlIHx8ICFpbnRlcnNlY3RzPENvbXBvc2VkVHJlZT4oKnNlbGVjdGlvblJh
bmdlLCAqbm9kZSkpCi0gICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgpOworICAgIGF1dG8g
c2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSA9IHRoaXMtPnNlbGVjdGVkVmlzaWJsZVBvc2l0
aW9uUmFuZ2UoKTsKKyAgICBpZiAoc2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGludCBzdGFydCA9IGluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSk7Ci0gICAgaW50IGVuZCA9IGluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uZW5kKCkpOworICAgIGludCBzdGFy
dCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2Uu
c3RhcnQpOworICAgIGludCBlbmQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3RlZFZp
c2libGVQb3NpdGlvblJhbmdlLmVuZCk7CiAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKHN0YXJ0
LCBlbmQgLSBzdGFydCk7CiB9CiAKQEAgLTIyNzEsNiArMjI2NiwxNyBAQCBib29sIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmlzVmlzaWJsZVBvc2l0aW9uUmFuZ2VJbkRpZmZlcmVudERvY3Vt
ZW50KGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitWaXNpYmxlUG9zaXRpb25SYW5nZSBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBhdXRvIHNlbGVjdGlvbiA9IG1fcmVuZGVyZXItPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICByZXR1cm4gc2VsZWN0aW9uOworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UmIHJhbmdlKSBjb25zdAogewogICAgIGlmIChyYW5nZS5pc051bGwoKSkKQEAgLTIyODUs
MjIgKzIyOTEsNTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rl
ZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3MKICAgICBpZiAoYXV0byBjbGll
bnQgPSBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpKQogICAgICAgICBj
bGllbnQtPndpbGxDaGFuZ2VTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KCk7CiAKLSAgICAvLyBt
YWtlIHNlbGVjdGlvbiBhbmQgdGVsbCB0aGUgZG9jdW1lbnQgdG8gdXNlIGl0LiBpZiBpdCdzIHpl
cm8gbGVuZ3RoLCB0aGVuIG1vdmUgdG8gdGhhdCBwb3NpdGlvbgotICAgIGlmIChyYW5nZS5zdGFy
dCA9PSByYW5nZS5lbmQpIHsKLSAgICAgICAgc2V0VGV4dFNlbGVjdGlvbkludGVudChheE9iamVj
dENhY2hlKCksIEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbk1vdmUpOwotCi0gICAgICAg
IGF1dG8gc3RhcnQgPSByYW5nZS5zdGFydDsKLSAgICAgICAgaWYgKGF1dG8gZWxlbWVudFJhbmdl
ID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmICghY29udGFpbnM8Q29t
cG9zZWRUcmVlPigqZWxlbWVudFJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChzdGFydCkpKQotICAg
ICAgICAgICAgICAgIHN0YXJ0ID0gbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKGVsZW1lbnRS
YW5nZS0+c3RhcnQpOworICAgIGlmIChpc05hdGl2ZVRleHRDb250cm9sKCkpIHsKKyAgICAgICAg
Ly8gaXNOYXRpdmVUZXh0Q29udHJvbCByZXR1cm5zIHRydWUgb25seSBpZiB0aGlzLT5ub2RlKCkg
aXM8SFRNTFRleHRBcmVhRWxlbWVudD4gb3IgaXM8SFRNTElucHV0RWxlbWVudD4uCisgICAgICAg
IC8vIFNpbmNlIGJvdGggSFRNTFRleHRBcmVhRWxlbWVudCBhbmQgSFRNTElucHV0RWxlbWVudCBk
ZXJpdmUgZnJvbSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCwgaXQgaXMgc2FmZSB0byBkb3du
Y2FzdCBoZXJlLgorICAgICAgICBhdXRvKiB0ZXh0Q29udHJvbCA9IGRvd25jYXN0PEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50Pihub2RlKCkpOworICAgICAgICBpbnQgc3RhcnQgPSB0ZXh0Q29u
dHJvbC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOworICAgICAgICBpbnQg
ZW5kID0gdGV4dENvbnRyb2wtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHJhbmdlLmVuZCk7CisK
KyAgICAgICAgLy8gRm9yIHJhbmdlcyBlbnRpcmVseSBjb250YWluZWQgaW4gdGV4dENvbnRyb2ws
IHRoZSBzdGFydCBvciBlbmQgcG9zaXRpb24gbWF5IG5vdCBiZSBpbnNpZGUgdGV4dENvbnRyb2wu
aW5uZXJUZXh0RWxlbWVudC4KKyAgICAgICAgLy8gVGhpcyB3b3VsZCBjYXVzZSB0aGF0IHRoZSBh
Ym92ZSBpbmRleGVzIHdpbGwgYmUgMCwgbGVhZGluZyB0byBhbiBpbmNvcnJlY3Qgc2VsZWN0ZWQg
cmFuZ2UKKyAgICAgICAgLy8gKHNlZSBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pLiBUaGlzIGlzCisgICAgICAgIC8vIHRoZSBjYXNlIHdoZW4gcmFu
Z2UgaXMgb2J0YWluZWQgZnJvbSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cwor
ICAgICAgICAvLyBmb3IgdGhlIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAv
LyBUaHVzLCB0aGUgZm9sbG93aW5nIGNvcnJlY3RzIHRoZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMg
aW4gc3VjaCBhIGNhc2UuLgorICAgICAgICBpZiAocmFuZ2Uuc3RhcnQuZGVlcEVxdWl2YWxlbnQo
KS5hbmNob3JOb2RlKCkgPT0gcmFuZ2UuZW5kLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgp
CisgICAgICAgICAgICAmJiByYW5nZS5zdGFydC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUo
KSA9PSB0ZXh0Q29udHJvbCkgeworICAgICAgICAgICAgaWYgKGF1dG8gaW5uZXJUZXh0ID0gdGV4
dENvbnRyb2wtPmlubmVyVGV4dEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gaW5u
ZXJSYW5nZSA9IG1ha2VWaXNpYmxlUG9zaXRpb25SYW5nZShBWE9iamVjdENhY2hlOjpyYW5nZUZv
ck5vZGVDb250ZW50cygqaW5uZXJUZXh0KSk7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0
YXJ0IDwgaW5uZXJSYW5nZS5zdGFydCkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAwOwor
ICAgICAgICAgICAgICAgIGlmIChyYW5nZS5lbmQgPj0gaW5uZXJSYW5nZS5lbmQpCisgICAgICAg
ICAgICAgICAgICAgIGVuZCA9IHRleHRDb250cm9sLT52YWx1ZSgpLmxlbmd0aCgpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbV9yZW5kZXJlci0+ZnJhbWUoKS5zZWxlY3Rp
b24oKS5tb3ZlVG8oc3RhcnQsIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICBzZXRUZXh0U2VsZWN0
aW9uSW50ZW50KGF4T2JqZWN0Q2FjaGUoKSwgc3RhcnQgPT0gZW5kID8gQVhUZXh0U3RhdGVDaGFu
Z2VUeXBlU2VsZWN0aW9uTW92ZSA6IEFYVGV4dFN0YXRlQ2hhbmdlVHlwZVNlbGVjdGlvbkV4dGVu
ZCk7CisgICAgICAgIHRleHRDb250cm9sLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBzZXRUZXh0U2VsZWN0aW9uSW50ZW50KGF4T2JqZWN0Q2Fj
aGUoKSwgQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uRXh0ZW5kKTsKKyAgICAgICAgLy8g
TWFrZSBzZWxlY3Rpb24gYW5kIHRlbGwgdGhlIGRvY3VtZW50IHRvIHVzZSBpdC4gSWYgaXQncyB6
ZXJvIGxlbmd0aCwgdGhlbiBtb3ZlIHRvIHRoYXQgcG9zaXRpb24uCisgICAgICAgIGlmIChyYW5n
ZS5zdGFydCA9PSByYW5nZS5lbmQpIHsKKyAgICAgICAgICAgIHNldFRleHRTZWxlY3Rpb25JbnRl
bnQoYXhPYmplY3RDYWNoZSgpLCBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Nb3ZlKTsK
KworICAgICAgICAgICAgYXV0byBzdGFydCA9IHJhbmdlLnN0YXJ0OworICAgICAgICAgICAgaWYg
KGF1dG8gZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRhaW5zPENvbXBvc2VkVHJlZT4oKmVsZW1lbnRSYW5nZSwgbWFrZUJvdW5k
YXJ5UG9pbnQoc3RhcnQpKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtYWtlQ29udGFp
bmVyT2Zmc2V0UG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9u
KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwotICAgICAgICBtX3JlbmRlcmVyLT5mcmFtZSgpLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uOjpkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CisgICAgICAgICAgICBtX3Jl
bmRlcmVyLT5mcmFtZSgpLnNlbGVjdGlvbigpLm1vdmVUbyhzdGFydCwgVXNlclRyaWdnZXJlZCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXRUZXh0U2VsZWN0aW9uSW50ZW50KGF4
T2JqZWN0Q2FjaGUoKSwgQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uRXh0ZW5kKTsKKwor
ICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0
aW9uKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOworICAgICAgICAgICAgbV9yZW5kZXJlci0+ZnJh
bWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlv
bjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgY2xlYXJUZXh0U2VsZWN0aW9uSW50ZW50KGF4T2JqZWN0Q2FjaGUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oCmluZGV4IDBjNGRmZWI2MTMxNTNiYzVlN2Y0MWY2NzI1YjQ1N2ExNTQ5
NzBlNTIuLjMxMTFlNDRkOTlhZTA0ZDdjMjExYWEzMTkwYjVkZjE3NzY5OTQ5M2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5oCkBAIC0xNjUsNiArMTY1LDcgQEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNp
YmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgYm91bmRzRm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSBzZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQ
b3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc1Zpc2libGVQb3NpdGlv
blJhbmdlSW5EaWZmZXJlbnREb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNv
bnN0OwogICAgIGJvb2wgaGFzUG9wdXAoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5jcHAKaW5kZXggYjcwYWRiYTY0OGVkYjcyM2U0M2YxNjA3MmVmZTRhNzFkNzg1Nzlj
Mi4uYjBiY2Y1NTI2MGZhMTM4NGE0ZTRhYmUwNTcxZDczNjUzOTI5MDMxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5jcHAKQEAgLTE0MzUsNiArMTQzNSwxNSBAQCBWaXNpYmxlU2VsZWN0aW9u
IEFYSXNvbGF0ZWRPYmplY3Q6OnNlbGVjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG9iamVjdCA/
IG9iamVjdC0+c2VsZWN0aW9uKCkgOiBWaXNpYmxlU2VsZWN0aW9uKCk7CiB9CiAKK1Zpc2libGVQ
b3NpdGlvblJhbmdlIEFYSXNvbGF0ZWRPYmplY3Q6OnNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoKSBjb25zdAoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoYXV0
byogYXhPYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGF4T2Jq
ZWN0LT5zZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKCk7CisgICAgcmV0dXJuIHsgfTsKK30K
Kwogdm9pZCBBWElzb2xhdGVkT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdl
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiB2aXNpYmxlUG9zaXRpb25SYW5nZSkgY29uc3QK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCmlu
ZGV4IDcyNTVmMmM0ZGJmMmNhZGM1NmMyMTU5ZjQ1ZGYzZWVmYzU0NjdjZjQuLjZmYjFhZGFjOGRh
ZTNmMjYzN2FlNGI2NDE1NGExNDQ1YWQwOTVkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgK
QEAgLTM4NCw2ICszODQsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIGRvQVhMaW5lRm9ySW5k
ZXgodW5zaWduZWQpIG92ZXJyaWRlOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBzZWxlY3RlZFZpc2li
bGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTZWxlY3RlZFZp
c2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICAvLyBUT0RPOiBUZXh0IHJhbmdlcyBhbmQgc2VsZWN0aW9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCAzZTcxYzM3ZDI2MjBhYTI0MDZl
Y2UyYjBiMmE0MTk1YjlhNmIxMTBjLi5hMmNhMTRkNTk0NTVjN2RhZjYwZDQ2NzJhOTJmMjg5OGNi
NDUxN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtMTY3
OSwxOCArMTY3OSwxNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0VG9WZWN0b3IoTlNBcnJheSogYXJy
YXksIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaAogICAgIH0KIH0KIAotLSAo
QVhUZXh0TWFya2VyUmFuZ2VSZWYpdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCistIChBWFRl
eHRNYXJrZXJSYW5nZVJlZilzZWxlY3RlZFRleHRNYXJrZXJSYW5nZQogewogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8QVhU
ZXh0TWFya2VyUmFuZ2VSZWY+KFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8QVhUZXh0TWFya2VyUmFuZ2VSZWY+IHsKICAgICAgICAgYXV0byogYmFja2lu
Z09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICBp
ZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gYmFja2luZ09iamVjdC0+c2VsZWN0aW9uKCk7Ci0g
ICAgICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgIGF1dG8gc2VsZWN0ZWRWaXNp
YmxlUG9zaXRpb25SYW5nZSA9IGJhY2tpbmdPYmplY3QtPnNlbGVjdGVkVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoKTsKKyAgICAgICAgaWYgKHNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UuaXNOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgICAgIHJldHVybiB0ZXh0TWFya2Vy
UmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCks
IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAg
ICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhiYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCksIHNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQs
IHNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKICAgICB9KTsKIH0KIApAQCAtMjYx
MCw3ICsyNjA5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0aW9uVmFsdWU7CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTZWxlY3RlZFRleHRNYXJr
ZXJSYW5nZSJdKQotICAgICAgICByZXR1cm4gKGlkKVtzZWxmIHRleHRNYXJrZXJSYW5nZUZvclNl
bGVjdGlvbl07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgc2VsZWN0ZWRUZXh0TWFya2VyUmFu
Z2VdOwogCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RhcnRU
ZXh0TWFya2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0
b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5Q
dHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDkzNzNjMjk4NDIxZTRmYzcz
NDg3YTI1NGI2NmYxYzRiNGZjOTRmYWUuLmY0ZGZiYjViNTQzN2ExNWE0NWJmMmQwZGE0MzViNGU3
MjcwYWM3ZjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wOC0yNiAgQW5kcmVzIEdvbnph
bGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBWENvcmVPYmplY3Q6
OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugd29yayBpbiBuYXRpdmUgdGV4dCBjb250
cm9scyBvbiBNYWNPUy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyOTUyOQorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZsZWl6YWNoLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvbmF0aXZlLXRleHQtY29udHJvbC1zZXQtc2VsZWN0
ZWQtdGV4dG1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvbWFjL25hdGl2ZS10ZXh0LWNvbnRyb2wtc2V0LXNlbGVjdGVkLXRleHRtYXJrZXIt
cmFuZ2UuaHRtbDogQWRkZWQuCisKIDIwMjEtMDgtMjAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVncmF0aW9uXSBFbmFibGUgZnVsbCB1bmRl
cmxpbmUgc3VwcG9ydApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
bmF0aXZlLXRleHQtY29udHJvbC1zZXQtc2VsZWN0ZWQtdGV4dG1hcmtlci1yYW5nZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9uYXRpdmUtdGV4dC1jb250cm9s
LXNldC1zZWxlY3RlZC10ZXh0bWFya2VyLXJhbmdlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
YTM1ZWE5OGMyNGI3Y2NlZGEwYmNkMWQzOWY4MDM0M2MzM2RhMWJlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvbmF0aXZlLXRleHQtY29udHJvbC1zZXQt
c2VsZWN0ZWQtdGV4dG1hcmtlci1yYW5nZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNSBAQAor
VGVzdCBmb3Igc2V0dGluZyB0aGUgc2VsZWN0ZWQgVGV4dE1hcmtlclJhbmdlIGluIGEgbmF0aXZl
IHRleHQgY29udHJvbDogdGV4dGFyZWEgYW5kIHRleHQgZmllbGQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitzZWxlY3RlZCB0ZXh0ICJUaGlzIGlzIGEgdGV4dGFyZWEuIgorc2Vs
ZWN0ZWQgdGV4dCAiVGhpcyBpcyBhICIKK3NlbGVjdGVkIHRleHQgIiBpcyBhICIKK3NlbGVjdGVk
IHRleHQgIlRoaXMgaXMgYSB0ZXh0IGZpZWxkLiIKK3NlbGVjdGVkIHRleHQgIlRoaXMgaXMgYSAi
CitzZWxlY3RlZCB0ZXh0ICIgaXMgYSB0ZXh0IgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL25hdGl2ZS10ZXh0LWNvbnRyb2wtc2V0LXNlbGVjdGVkLXRleHRtYXJrZXItcmFu
Z2UuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL25hdGl2ZS10ZXh0LWNvbnRy
b2wtc2V0LXNlbGVjdGVkLXRleHRtYXJrZXItcmFuZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzk1NWU4
NDI1MTNiYzM3ZDJlNjBlMDIxZGEzMzQxMzlhNTIyZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvbmF0aXZlLXRleHQtY29udHJvbC1zZXQtc2VsZWN0
ZWQtdGV4dG1hcmtlci1yYW5nZS5odG1sCkBAIC0wLDAgKzEsMTAzIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+CisKKzx0ZXh0YXJlYSBpZD0idGV4dGFyZWEiPlRoaXMgaXMgYSB0ZXh0YXJl
YS48L3RleHRhcmVhPgorCis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InRleHRmaWVsZCIgdmFsdWU9
IlRoaXMgaXMgYSB0ZXh0IGZpZWxkLiIgLz4KKworPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigi
VGVzdCBmb3Igc2V0dGluZyB0aGUgc2VsZWN0ZWQgVGV4dE1hcmtlclJhbmdlIGluIGEgbmF0aXZl
IHRleHQgY29udHJvbDogdGV4dGFyZWEgYW5kIHRleHQgZmllbGQuIik7CisKKyAgICBpZiAod2lu
ZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKworICAgICAgICBsZXQgZWxlbWVudElEID0gInRleHRhcmVhIjsKKworICAg
ICAgICBsZXQgcCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZChlbGVtZW50SUQpOworICAgICAgICBsZXQgcmFuZ2UgPSBwLnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQocCk7CisKKyAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CisgICAgICAgICAg
ICAvLyBTZWxlY3QgYWxsIHRleHQuCisgICAgICAgICAgICBwLnNldFNlbGVjdGVkVGV4dE1hcmtl
clJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGxldCBzZWxlY3RlZFJhbmdlID0gbnVsbDsKKyAg
ICAgICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4geworICAgICAgICAgICAgICAgIHNlbGVjdGVk
UmFuZ2UgPSBwLnNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHAudGV4dE1hcmtlclJhbmdlTGVuZ3RoKHNlbGVjdGVkUmFuZ2UpID09IDE5OworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBkZWJ1Zyhgc2VsZWN0ZWQgdGV4dCAiJHtwLnN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZShzZWxlY3RlZFJhbmdlKX0iYCk7CisKKyAgICAgICAgICAgIC8vIFNl
bGVjdCB0aGUgZmlyc3QgMTAgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIGxldCBzdGFydCA9IHAu
c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGVu
ZCA9IHN0YXJ0OworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgKytpKQorICAg
ICAgICAgICAgICAgIGVuZCA9IHAubmV4dFRleHRNYXJrZXIoZW5kKTsKKyAgICAgICAgICAgIHJh
bmdlID0gcC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0YXJ0LCBlbmQpOworICAgICAgICAg
ICAgcC5zZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBhd2Fp
dCB3YWl0Rm9yKCgpID0+IHsKKyAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gcC5zZWxl
Y3RlZFRleHRNYXJrZXJSYW5nZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBwLnRleHRNYXJr
ZXJSYW5nZUxlbmd0aChzZWxlY3RlZFJhbmdlKSA9PSAxMDsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgZGVidWcoYHNlbGVjdGVkIHRleHQgIiR7cC5zdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2Uoc2VsZWN0ZWRSYW5nZSl9ImApOworCisgICAgICAgICAgICAvLyBTZWxlY3Qgc29tZSBjaGFy
YWN0ZXJzIGluIHRoZSBtaWRkbGUuCisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7
ICsraSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IHAubmV4dFRleHRNYXJrZXIoc3RhcnQpOwor
ICAgICAgICAgICAgcmFuZ2UgPSBwLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoc3RhcnQsIGVu
ZCk7CisgICAgICAgICAgICBwLnNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKHJhbmdlKTsKKyAg
ICAgICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4geworICAgICAgICAgICAgICAgIHNlbGVjdGVk
UmFuZ2UgPSBwLnNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHAudGV4dE1hcmtlclJhbmdlTGVuZ3RoKHNlbGVjdGVkUmFuZ2UpID09IDY7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGRlYnVnKGBzZWxlY3RlZCB0ZXh0ICIke3Auc3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlKHNlbGVjdGVkUmFuZ2UpfSJgKTsKKworICAgICAgICAgICAgZWxlbWVu
dElEID0gInRleHRmaWVsZCI7CisKKyAgICAgICAgICAgIHAgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoZWxlbWVudElEKTsKKyAgICAgICAgICAgIHJhbmdl
ID0gcC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHApOworCisgICAgICAgICAgICAvLyBTZWxl
Y3QgYWxsIHRleHQuCisgICAgICAgICAgICBwLnNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKHJh
bmdlKTsKKyAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBudWxsOworICAgICAgICAgICAgYXdh
aXQgd2FpdEZvcigoKSA9PiB7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IHAuc2Vs
ZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcC50ZXh0TWFy
a2VyUmFuZ2VMZW5ndGgoc2VsZWN0ZWRSYW5nZSkgPT0gMjE7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGRlYnVnKGBzZWxlY3RlZCB0ZXh0ICIke3Auc3RyaW5nRm9yVGV4dE1hcmtlclJh
bmdlKHNlbGVjdGVkUmFuZ2UpfSJgKTsKKworICAgICAgICAgICAgLy8gU2VsZWN0IHRoZSBmaXJz
dCAxMCBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgc3RhcnQgPSBwLnN0YXJ0VGV4dE1hcmtlckZv
clRleHRNYXJrZXJSYW5nZShyYW5nZSk7CisgICAgICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICAgICAgICAgICAgICBlbmQg
PSBwLm5leHRUZXh0TWFya2VyKGVuZCk7CisgICAgICAgICAgICByYW5nZSA9IHAudGV4dE1hcmtl
clJhbmdlRm9yTWFya2VycyhzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIHAuc2V0U2VsZWN0ZWRU
ZXh0TWFya2VyUmFuZ2UocmFuZ2UpOworICAgICAgICAgICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7
CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IHAuc2VsZWN0ZWRUZXh0TWFya2VyUmFu
Z2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgoc2Vs
ZWN0ZWRSYW5nZSkgPT0gMTA7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGRlYnVnKGBz
ZWxlY3RlZCB0ZXh0ICIke3Auc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHNlbGVjdGVkUmFuZ2Up
fSJgKTsKKworICAgICAgICAgICAgLy8gU2VsZWN0IHNvbWUgY2hhcmFjdGVycyBpbiB0aGUgbWlk
ZGxlLgorICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAg
ICAgICAgc3RhcnQgPSBwLm5leHRUZXh0TWFya2VyKHN0YXJ0KTsKKyAgICAgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgIGVuZCA9IHAubmV4dFRleHRN
YXJrZXIoZW5kKTsKKyAgICAgICAgICAgIHJhbmdlID0gcC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJr
ZXJzKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgcC5zZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5n
ZShyYW5nZSk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHsKKyAgICAgICAgICAg
ICAgICBzZWxlY3RlZFJhbmdlID0gcC5zZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBwLnRleHRNYXJrZXJSYW5nZUxlbmd0aChzZWxlY3RlZFJhbmdlKSA9
PSAxMDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZGVidWcoYHNlbGVjdGVkIHRleHQg
IiR7cC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uoc2VsZWN0ZWRSYW5nZSl9ImApOworCisgICAg
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSwgMCk7CisgICAgfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>