<?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>67230</bug_id>
          
          <creation_ts>2011-08-30 14:27:10 -0700</creation_ts>
          <short_desc>[mac] Add text search API for getting the DOM range of a text match</short_desc>
          <delta_ts>2011-08-30 16:36:09 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>459197</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-08-30 14:27:10 -0700</bug_when>
    <thetext>Add text search API for getting the DOM range of a text match</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459198</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-08-30 14:27:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/9281695&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459219</commentid>
    <comment_count>2</comment_count>
      <attachid>105701</attachid>
    <who name="">mitz</who>
    <bug_when>2011-08-30 14:40:31 -0700</bug_when>
    <thetext>Created attachment 105701
Add -[WebView DOMRangeOfString:relativeTo:options:]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459224</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 14:43:39 -0700</bug_when>
    <thetext>Attachment 105701 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/mac/WebView/WebViewInternal.h:60:  The parameter name &quot;options&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459233</commentid>
    <comment_count>4</comment_count>
      <attachid>105701</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-30 14:53:15 -0700</bug_when>
    <thetext>Comment on attachment 105701
Add -[WebView DOMRangeOfString:relativeTo:options:]

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

&gt; Source/WebCore/editing/Editor.cpp:2928
&gt; +PassRefPtr&lt;Range&gt; Editor::findString(const String&amp; target, Range* referenceRange, FindOptions options)

I think it’s confusing that both functions are named findString, but one modifies the selection and the other does not. I would prefer that the two functions have different names rather than be differentiated only by overloading.

&gt; Source/WebCore/editing/Editor.cpp:2945
&gt; +            searchRange-&gt;setStart(startInReferenceRange ? referenceRange-&gt;startPosition() : referenceRange-&gt;endPosition(), ec);

You can just call setStart without passing (ec) now. It will assert if the range is detached. It’s the new hotness!

&gt; Source/WebCore/editing/Editor.cpp:2947
&gt; +            searchRange-&gt;setEnd(startInReferenceRange ? referenceRange-&gt;endPosition() : referenceRange-&gt;startPosition(), ec);

You can just call setEnd without passing (ec) now. It will assert if the range is detached. It’s the new hotness!

&gt; Source/WebCore/editing/Editor.cpp:2965
&gt; +            searchRange-&gt;setStart(referenceRange-&gt;endPosition(), ec);

Ditto.

&gt; Source/WebCore/editing/Editor.cpp:2967
&gt; +            searchRange-&gt;setEnd(referenceRange-&gt;startPosition(), ec);

Ditto.

&gt; Source/WebCore/editing/Editor.cpp:2980
&gt; +    if (resultRange-&gt;collapsed(ec) &amp;&amp; shadowTreeRoot) {

You can just call collapsed without passing (ec) now. It will assert if the range is detached. It’s the new hotness!

&gt; Source/WebCore/editing/Editor.cpp:2985
&gt; -            searchRange-&gt;setStartAfter(shadowTreeRoot-&gt;shadowAncestorNode(), exception);
&gt; +            searchRange-&gt;setStartAfter(shadowTreeRoot-&gt;shadowAncestorNode(), ec);
&gt;          else
&gt; -            searchRange-&gt;setEndBefore(shadowTreeRoot-&gt;shadowAncestorNode(), exception);
&gt; +            searchRange-&gt;setEndBefore(shadowTreeRoot-&gt;shadowAncestorNode(), ec);

If you wanted you could implement the ASSERT_NO_EXCEPTION thing for setStartAfter and setEndBefore too. While it would require modifying Range.h it would be forward looking and cool.

&gt; Source/WebCore/editing/Editor.cpp:2998
&gt; +    if (resultRange-&gt;collapsed(ec) &amp;&amp; options &amp; WrapAround) {

Ditto.

&gt; Source/WebCore/editing/Editor.cpp:3006
&gt; +    return resultRange-&gt;collapsed(ec) ? 0 : resultRange.release();

Same here.

&gt; Source/WebCore/page/Page.cpp:521
&gt; +    // We cheat a bit and just research with wrap on

Probably need to spell it re-search so it’s not confused with the word research.

Sentence needs a period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459250</commentid>
    <comment_count>5</comment_count>
      <attachid>105701</attachid>
    <who name="">mitz</who>
    <bug_when>2011-08-30 15:04:22 -0700</bug_when>
    <thetext>Comment on attachment 105701
Add -[WebView DOMRangeOfString:relativeTo:options:]

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

Thanks for the review! I am going to switch to the ExceptionCode-less variants and if there are no complications even add new ones.

&gt;&gt; Source/WebCore/editing/Editor.cpp:2928
&gt;&gt; +PassRefPtr&lt;Range&gt; Editor::findString(const String&amp; target, Range* referenceRange, FindOptions options)
&gt; 
&gt; I think it’s confusing that both functions are named findString, but one modifies the selection and the other does not. I would prefer that the two functions have different names rather than be differentiated only by overloading.

I’m going to use a different name here and in the Page class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459310</commentid>
    <comment_count>6</comment_count>
      <attachid>105718</attachid>
    <who name="">mitz</who>
    <bug_when>2011-08-30 16:27:11 -0700</bug_when>
    <thetext>Created attachment 105718
Add -[WebView DOMRangeOfString:relativeTo:options:]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459315</commentid>
    <comment_count>7</comment_count>
      <attachid>105718</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-30 16:29:37 -0700</bug_when>
    <thetext>Comment on attachment 105718
Add -[WebView DOMRangeOfString:relativeTo:options:]

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

&gt; Source/WebCore/dom/Range.h:107
&gt; -    void setStart(const Position&amp;, ExceptionCode&amp;);
&gt; -    void setEnd(const Position&amp;, ExceptionCode&amp;);
&gt; +    void setStart(const Position&amp;, ExceptionCode&amp; = ASSERT_NO_EXCEPTION);
&gt; +    void setEnd(const Position&amp;, ExceptionCode&amp; = ASSERT_NO_EXCEPTION);

I think that these should not even take ExceptionCode&amp; since they are internal functions, not DOM API. ExceptionCode&amp; is ugly for internal use, except where it&apos;s intended to be used for helper functions that in turn are used implement DOM API functions. ASSERT_NO_EXCEPTION is OK for now, but later we should just get rid of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459317</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 16:30:40 -0700</bug_when>
    <thetext>Attachment 105718 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit/mac/WebView/WebViewInternal.h:60:  The parameter name &quot;options&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459323</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-08-30 16:36:09 -0700</bug_when>
    <thetext>Added in &lt;http://trac.webkit.org/r94124&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105701</attachid>
            <date>2011-08-30 14:40:31 -0700</date>
            <delta_ts>2011-08-30 16:27:08 -0700</delta_ts>
            <desc>Add -[WebView DOMRangeOfString:relativeTo:options:]</desc>
            <filename>bug-67230-20110830144033.patch</filename>
            <type>text/plain</type>
            <size>26482</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MTExKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDgtMzAgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBXZWJDb3JlIHBhcnQgb2YgPHJkYXI6
Ly9wcm9ibGVtLzkyODE2OTU+IEFkZCB0ZXh0IHNlYXJjaCBBUEkgZm9yIGdldHRpbmcgdGhlIERP
TSByYW5nZSBvZiBhIHRleHQgbWF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY3MjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdDogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvRE9NUmFuZ2VPZlN0
cmluZy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBFeHBvcnQgbmV3IFBhZ2U6OmZpbmRT
dHJpbmcoKSBvdmVybG9hZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmZpbmRTdHJpbmcpOiBNb3ZlZCBtb3N0IG9mIHRoZSBvbGQgZmlu
ZFN0cmluZygpIGltcGxlbWVudGF0aW9uIGludG8gdGhpcyBuZXcKKyAgICAgICAgb3ZlcmxvYWQs
IHdoaWNoIHJldHVybnMgYSBSYW5nZSwgYW5kIGNoYW5nZWQgdGhlIG9sZCBmaW5kU3RyaW5nKCkg
dG8gY2FsbCBpdCwgcGFzc2luZyB0aGUgY3VycmVudAorICAgICAgICBzZWxlY3Rpb24gYXMgdGhl
IHJlZmVyZW5jZSByYW5nZSBhbmQgc2V0dGluZyB0aGUgc2VsZWN0aW9uIHRvIHRoZSByZXR1cm5l
ZCByYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIHBhZ2UvUGFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5kU3RyaW5nKTogQWRkZWQgdGhpcyBu
ZXcgb3ZlcmxvYWQgd2hpY2ggdGFrZXMgYW4gb3B0aW9uYWwgcmVmZXJlbmNlIHJhbmdlIGFuZAor
ICAgICAgICByZXR1cm5zIGEgUmFuZ2UsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBjdXJyZW50IHNl
bGVjdGlvbiBhcyB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCBzZXR0aW5nIHRoZQorICAgICAgICBz
ZWxlY3Rpb24gdG8gdGhlIG5leHQgbWF0Y2guCisgICAgICAgICogcGFnZS9QYWdlLmg6CisKIDIw
MTEtMDgtMzAgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBQcmVsb2FkU2Nhbm5lciBzaG91bGRuJ3QgbG9hZCBpbWFnZXMgaW5zaWRlIG5vc2NyaXB0IHZp
YSBkb2Mud3JpdGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA5NDA5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC02OTQsNiAr
Njk0LDcgQEAgX19aTjdXZWJDb3JlNE5vZGUxMHJlbmRlclJlY3RFUGIKIF9fWk43V2ViQ29yZTRO
b2RlMTdzdG9wSWdub3JpbmdMZWFrc0V2CiBfX1pON1dlYkNvcmU0Tm9kZTE4c3RhcnRJZ25vcmlu
Z0xlYWtzRXYKIF9fWk43V2ViQ29yZTROb2RlMTlzZXROZWVkc1N0eWxlUmVjYWxjRU5TXzE1U3R5
bGVDaGFuZ2VUeXBlRQorX19aTjdXZWJDb3JlNFBhZ2UxMGZpbmRTdHJpbmdFUktOM1dURjZTdHJp
bmdFUE5TXzVSYW5nZUVqCiBfX1pON1dlYkNvcmU0UGFnZTEwZmluZFN0cmluZ0VSS04zV1RGNlN0
cmluZ0VqCiBfX1pON1dlYkNvcmU0UGFnZTExUGFnZUNsaWVudHNDMUV2CiBfX1pON1dlYkNvcmU0
UGFnZTExUGFnZUNsaWVudHNEMUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShy
ZXZpc2lvbiA5NDA5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5MTMsMjcgKzI5MTMsNDIgQEAgYm9v
bCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YQogCiBib29sIEVkaXRvcjo6Zmlu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIHsKLSAg
ICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKworICAgIFJlZlB0cjxSYW5nZT4g
cmVzdWx0UmFuZ2UgPSBmaW5kU3RyaW5nKHRhcmdldCwgc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5n
ZXQoKSwgb3B0aW9ucyk7CisKKyAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bh
c3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
UmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIGlmICh0
YXJnZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIGlmIChtX2ZyYW1lLT5l
eGNsdWRlRnJvbVRleHRTZWFyY2goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIFN0YXJ0IGZyb20gYW4gZWRnZSBvZiB0aGUgc2VsZWN0aW9uLCBp
ZiB0aGVyZSdzIGEgc2VsZWN0aW9uIHRoYXQncyBub3QgaW4gc2hhZG93IGNvbnRlbnQuIFdoaWNo
IGVkZ2UKICAgICAvLyBpcyB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBzZWFyY2hpbmcg
Zm9yd2FyZCBvciBiYWNrd2FyZCwgYW5kIHdoZXRoZXIgc3RhcnRJblNlbGVjdGlvbiBpcyBzZXQu
CiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobV9mcmFtZS0+
ZG9jdW1lbnQoKSkpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogCiAgICAgYm9vbCBmb3J3YXJkID0gIShvcHRpb25z
ICYgQmFja3dhcmRzKTsKLSAgICBib29sIHN0YXJ0SW5TZWxlY3Rpb24gPSBvcHRpb25zICYgU3Rh
cnRJblNlbGVjdGlvbjsKLSAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgc2V0U3RhcnQoc2VhcmNo
UmFuZ2UuZ2V0KCksIHN0YXJ0SW5TZWxlY3Rpb24gPyBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkg
OiBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldEVuZChzZWFy
Y2hSYW5nZS5nZXQoKSwgc3RhcnRJblNlbGVjdGlvbiA/IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkg
OiBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpOworICAgIGJvb2wgc3RhcnRJblJlZmVyZW5jZVJh
bmdlID0gcmVmZXJlbmNlUmFuZ2UgJiYgKG9wdGlvbnMgJiBTdGFydEluU2VsZWN0aW9uKTsKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAocmVmZXJlbmNlUmFuZ2UpIHsKKyAgICAg
ICAgaWYgKGZvcndhcmQpCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnRJ
blJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSA6IHJlZmVy
ZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpLCBlYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRFbmQoc3RhcnRJblJlZmVyZW5jZVJhbmdlID8gcmVmZXJlbmNlUmFu
Z2UtPmVuZFBvc2l0aW9uKCkgOiByZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBlYyk7
CisgICAgfQogCi0gICAgUmVmUHRyPE5vZGU+IHNoYWRvd1RyZWVSb290ID0gc2VsZWN0aW9uLm5v
bkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCk7CisgICAgUmVmUHRyPE5vZGU+IHNoYWRvd1Ry
ZWVSb290ID0gcmVmZXJlbmNlUmFuZ2UgJiYgcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkgPyByZWZlcmVuY2VSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+bm9uQm91bmRhcnlTaGFkb3dU
cmVlUm9vdE5vZGUoKSA6IDA7CiAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBpZiAoZm9yd2FyZCkKICAgICAgICAgICAgIHNl
YXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIHNoYWRvd1RyZWVSb290LT5j
aGlsZE5vZGVDb3VudCgpLCBlYyk7CiAgICAgICAgIGVsc2UKQEAgLTI5NDQsMTUgKzI5NTksMTQg
QEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YQogICAgIC8vIElmIHdl
IHN0YXJ0ZWQgaW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhlIGZvdW5kIHJhbmdlIGV4YWN0bHkgbWF0
Y2hlcyB0aGUgZXhpc3Rpbmcgc2VsZWN0aW9uLCBmaW5kIGFnYWluLgogICAgIC8vIEJ1aWxkIGEg
c2VsZWN0aW9uIHdpdGggdGhlIGZvdW5kIHJhbmdlIHRvIHJlbW92ZSBjb2xsYXBzZWQgd2hpdGVz
cGFjZS4KICAgICAvLyBDb21wYXJlIHJhbmdlcyBpbnN0ZWFkIG9mIHNlbGVjdGlvbiBvYmplY3Rz
IHRvIGlnbm9yZSB0aGUgd2F5IHRoYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHdhcyBtYWRlLgot
ICAgIGlmIChzdGFydEluU2VsZWN0aW9uICYmIGFyZVJhbmdlc0VxdWFsKFZpc2libGVTZWxlY3Rp
b24ocmVzdWx0UmFuZ2UuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkgeworICAgIGlmIChzdGFydEluUmVmZXJlbmNl
UmFuZ2UgJiYgYXJlUmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQo
KSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcmVmZXJlbmNlUmFuZ2UpKSB7CiAgICAgICAg
IHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAg
ICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgp
LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRT
dGFydChyZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSwgZWMpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHJlZmVyZW5jZVJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIGVjKTsKIAogICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QpIHsKLSAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICAgICAgaWYgKGZvcndhcmQp
CiAgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVlUm9vdC5nZXQo
KSwgc2hhZG93VHJlZVJvb3QtPmNoaWxkTm9kZUNvdW50KCksIGVjKTsKICAgICAgICAgICAgIGVs
c2UKQEAgLTI5NjIsMTUgKzI5NzYsMTMgQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0YQogICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFu
Z2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgfQogCi0gICAgRXhjZXB0aW9uQ29kZSBl
eGNlcHRpb24gPSAwOwotCiAgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW4gdGhlIHNoYWRv
dyB0cmVlLCBzZWFyY2ggaW4gbWFpbiBjb250ZW50IGZvbGxvd2luZyB0aGUgc2hhZG93IHRyZWUu
Ci0gICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSAmJiBzaGFkb3dUcmVl
Um9vdCkgeworICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGVjKSAmJiBzaGFkb3dUcmVl
Um9vdCkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5k
b2N1bWVudCgpKTsKICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c2V0U3RhcnRBZnRlcihzaGFkb3dUcmVlUm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCksIGV4
Y2VwdGlvbik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnRBZnRlcihzaGFkb3dU
cmVlUm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCksIGVjKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dUcmVlUm9vdC0+c2hhZG93QW5j
ZXN0b3JOb2RlKCksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5k
QmVmb3JlKHNoYWRvd1RyZWVSb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSwgZWMpOwogCiAgICAg
ICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0
LCBvcHRpb25zKTsKICAgICB9CkBAIC0yOTc4LDEyICsyOTkwLDEyIEBAIGJvb2wgRWRpdG9yOjpm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICBpZiAoIWluc2lkZVZpc2libGVBcmVhKHJl
c3VsdFJhbmdlLmdldCgpKSkgewogICAgICAgICByZXN1bHRSYW5nZSA9IG5leHRWaXNpYmxlUmFu
Z2UocmVzdWx0UmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgICAgIGlmICghcmVz
dWx0UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhbmQgd2UncmUg
d3JhcHBpbmcsIHNlYXJjaCBhZ2FpbiBpbiB0aGUgZW50aXJlIGRvY3VtZW50ICh0aGlzIHdpbGwK
ICAgICAvLyByZWR1bmRhbnRseSByZS1zZWFyY2ggdGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hlZCBp
biBzb21lIGNhc2VzKS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24p
ICYmIG9wdGlvbnMgJiBXcmFwQXJvdW5kKSB7CisgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBz
ZWQoZWMpICYmIG9wdGlvbnMgJiBXcmFwQXJvdW5kKSB7CiAgICAgICAgIHNlYXJjaFJhbmdlID0g
cmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAgICAgICByZXN1bHRSYW5n
ZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgb3B0aW9ucyk7CiAg
ICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0
aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aApAQCAtMjk5MSwxMiArMzAwMyw3
IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGEKICAgICAgICAgLy8g
dGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNhc2UgaW5zdGVhZCwgc28gd2UnbGwganVzdCBmYWxs
IHRocm91Z2ggaW4gdGhhdCBjYXNlLgogICAgIH0KIAotICAgIGlmIChyZXN1bHRSYW5nZS0+Y29s
bGFwc2VkKGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXN1bHRSYW5nZS5n
ZXQoKSwgRE9XTlNUUkVBTSkpOwotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxl
Y3Rpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0UmFuZ2UtPmNvbGxh
cHNlZChlYykgPyAwIDogcmVzdWx0UmFuZ2UucmVsZWFzZSgpOwogfQogCiBzdGF0aWMgYm9vbCBp
c0ZyYW1lSW5SYW5nZShGcmFtZSogZnJhbWUsIFJhbmdlKiByYW5nZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAkocmV2aXNpb24gOTQwOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNiArMzM1LDggQEAgcHVibGljOgogICAg
IC8vIEZJWE1FOiBTd2l0Y2ggY2FsbGVycyBvdmVyIHRvIHRoZSBGaW5kT3B0aW9ucyB2ZXJzaW9u
IGFuZCByZXRpcmUgdGhpcyBvbmUuCiAgICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYs
IGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFydElu
U2VsZWN0aW9uKTsKIAorICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgUmFuZ2UqLCBGaW5kT3B0aW9ucyk7CisKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBpdC4KICAg
ICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAJKHJldmlzaW9uIDk0MDkxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDYgKzQ5OSwzNCBAQCBib29sIFBhZ2U6OmZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0YXJnCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitQYXNzUmVmUHRy
PFJhbmdlPiBQYWdlOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVm
ZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgaWYgKHRhcmdldC5pc0Vt
cHR5KCkgfHwgIW1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChyZWZl
cmVuY2VSYW5nZSAmJiByZWZlcmVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLT5wYWdlKCkgIT0g
dGhpcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29sIHNob3VsZFdyYXAgPSBvcHRpb25z
ICYgV3JhcEFyb3VuZDsKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VSYW5nZSA/IHJlZmVy
ZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCkgOiBtYWluRnJhbWUoKTsKKyAgICBG
cmFtZSogc3RhcnRGcmFtZSA9IGZyYW1lOworICAgIGRvIHsKKyAgICAgICAgaWYgKFJlZlB0cjxS
YW5nZT4gcmVzdWx0UmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBm
cmFtZSA9PSBzdGFydEZyYW1lID8gcmVmZXJlbmNlUmFuZ2UgOiAwLCAob3B0aW9ucyAmIH5XcmFw
QXJvdW5kKSB8IFN0YXJ0SW5TZWxlY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFJh
bmdlLnJlbGVhc2UoKTsKKworICAgICAgICBmcmFtZSA9IGluY3JlbWVudEZyYW1lKGZyYW1lLCAh
KG9wdGlvbnMgJiBCYWNrd2FyZHMpLCBzaG91bGRXcmFwKTsKKyAgICB9IHdoaWxlIChmcmFtZSAm
JiBmcmFtZSAhPSBzdGFydEZyYW1lKTsKKworICAgIC8vIFNlYXJjaCBjb250ZW50cyBvZiBzdGFy
dEZyYW1lLCBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgc2VsZWN0aW9uIHRoYXQgd2UgZGlkIGVh
cmxpZXIuCisgICAgLy8gV2UgY2hlYXQgYSBiaXQgYW5kIGp1c3QgcmVzZWFyY2ggd2l0aCB3cmFw
IG9uCisgICAgaWYgKHNob3VsZFdyYXAgJiYgIXN0YXJ0RnJhbWUtPnNlbGVjdGlvbigpLT5pc05v
bmUoKSkgeworICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHN0YXJ0RnJh
bWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKHRhcmdldCwgcmVmZXJlbmNlUmFuZ2UsIG9wdGlvbnMg
fCBXcmFwQXJvdW5kIHwgU3RhcnRJblNlbGVjdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0UmFuZ2UucmVsZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiB1bnNpZ25l
ZCBpbnQgUGFnZTo6bWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBU
ZXh0Q2FzZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRpdml0eSwgYm9vbCBzaG91bGRIaWdobGlnaHQs
IHVuc2lnbmVkIGxpbWl0KQogewogICAgIHJldHVybiBtYXJrQWxsTWF0Y2hlc0ZvclRleHQodGFy
Z2V0LCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VJbnNlbnNpdGl2ZSA/IENhc2VJbnNlbnNp
dGl2ZSA6IDAsIHNob3VsZEhpZ2hsaWdodCwgbGltaXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJl
dmlzaW9uIDk0MDkxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDYgKzc1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFBhZ2VH
cm91cDsKICAgICBjbGFzcyBQbHVnaW5EYXRhOwogICAgIGNsYXNzIFByb2dyZXNzVHJhY2tlcjsK
KyAgICBjbGFzcyBSYW5nZTsKICAgICBjbGFzcyBSZW5kZXJUaGVtZTsKICAgICBjbGFzcyBWaXNp
YmxlU2VsZWN0aW9uOwogICAgIGNsYXNzIFNjcm9sbGFibGVBcmVhOwpAQCAtMjEwLDYgKzIxMSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYsIEZpbmRPcHRpb25zKTsKICAgICAgICAgLy8gRklYTUU6IFN3aXRjaCBjYWxsZXJzIG92
ZXIgdG8gdGhlIEZpbmRPcHRpb25zIHZlcnNpb24gYW5kIHJldGlyZSB0aGlzIG9uZS4KICAgICAg
ICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIFRleHRDYXNlU2Vuc2l0aXZpdHksIEZp
bmREaXJlY3Rpb24sIGJvb2wgc2hvdWxkV3JhcCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxSYW5n
ZT4gZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRpb25zKTsKKwogICAg
ICAgICB1bnNpZ25lZCBtYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgRmluZE9w
dGlvbnMsIGJvb2wgc2hvdWxkSGlnaGxpZ2h0LCB1bnNpZ25lZCk7CiAgICAgICAgIC8vIEZJWE1F
OiBTd2l0Y2ggY2FsbGVycyBvdmVyIHRvIHRoZSBGaW5kT3B0aW9ucyB2ZXJzaW9uIGFuZCByZXRp
cmUgdGhpcyBvbmUuCiAgICAgICAgIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25z
dCBTdHJpbmcmLCBUZXh0Q2FzZVNlbnNpdGl2aXR5LCBib29sIHNob3VsZEhpZ2hsaWdodCwgdW5z
aWduZWQpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxMTEpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAx
MS0wOC0zMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgorCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS85MjgxNjk1PiBBZGQgdGV4dCBzZWFyY2ggQVBJIGZvciBnZXR0aW5nIHRoZSBE
T00gcmFuZ2Ugb2YgYSB0ZXh0IG1hdGNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NzIzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXcubW06CisgICAgICAgIChjb3JlT3B0aW9ucyk6IE1vdmVkIHRoaXMgZnVuY3Rp
b24gZnJvbSBXZWJIVE1MVmlldy5tbSB0byBoZXJlIGFuZCBtYWQKKyAgICAgICAgaXQgYWNjZXNz
aWJsZSBmcm9tIGJvdGggdGhpcyBmaWxlIGFuZCBXZWJIVE1MVmlldy5tbS4KKyAgICAgICAgKC1b
V2ViVmlldyBET01SYW5nZU9mU3RyaW5nOnJlbGF0aXZlVG86b3B0aW9uczpdKTogQWRkZWQgdGhp
cyBuZXcgQVBJLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6CisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oOgorCiAyMDExLTA4LTI5ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIER1bXBSZW5kZXJUcmVlIHNob3VsZCBi
ZWdpbiBlYWNoIHRlc3Qgd2l0aCBhbiBlbXB0eSBjb29raWUgc3RvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gOTQwOTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
MzQsMTYgKzUzNCw2IEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlTdGF0ZSBzdGEK
ICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKIH0KIAotc3RhdGljIEZpbmRPcHRpb25zIGNvcmVPcHRp
b25zKFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpCi17Ci0gICAgcmV0dXJuIChvcHRpb25zICYgV2Vi
RmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUgPyBDYXNlSW5zZW5zaXRpdmUgOiAwKQotICAgICAg
ICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNBdFdvcmRTdGFydHMgPyBBdFdvcmRTdGFydHMg
OiAwKQotICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0
YWxBc1dvcmRTdGFydCA/IFRyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0IDogMCkKLSAgICAg
ICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQmFja3dhcmRzID8gQmFja3dhcmRzIDogMCkK
LSAgICAgICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zV3JhcEFyb3VuZCA/IFdyYXBBcm91
bmQgOiAwKQotICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNTdGFydEluU2VsZWN0
aW9uID8gU3RhcnRJblNlbGVjdGlvbiA6IDApOwotfQotCiBAaW1wbGVtZW50YXRpb24gV2ViSFRN
TFZpZXdQcml2YXRlCiAKICsgKHZvaWQpaW5pdGlhbGl6ZQpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gOTQwOTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3NCw2ICszNzQsMTYgQEAgQGlu
dGVyZmFjZSBfV2ViU2FmZUZvcndhcmRlciA6IE5TT2JqZWN0CiAtIChpZClpbml0V2l0aFRhcmdl
dDooaWQpdGFyZ2V0IGRlZmF1bHRUYXJnZXQ6KGlkKWRlZmF1bHRUYXJnZXQgY2F0Y2hFeGNlcHRp
b25zOihCT09MKWNhdGNoRXhjZXB0aW9uczsKIEBlbmQKIAorRmluZE9wdGlvbnMgY29yZU9wdGlv
bnMoV2ViRmluZE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICByZXR1cm4gKG9wdGlvbnMgJiBXZWJG
aW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSA/IENhc2VJbnNlbnNpdGl2ZSA6IDApCisgICAgICAg
IHwgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyA/IEF0V29yZFN0YXJ0cyA6
IDApCisgICAgICAgIHwgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRh
bEFzV29yZFN0YXJ0ID8gVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQgOiAwKQorICAgICAg
ICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNCYWNrd2FyZHMgPyBCYWNrd2FyZHMgOiAwKQor
ICAgICAgICB8IChvcHRpb25zICYgV2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kID8gV3JhcEFyb3Vu
ZCA6IDApCisgICAgICAgIHwgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1N0YXJ0SW5TZWxlY3Rp
b24gPyBTdGFydEluU2VsZWN0aW9uIDogMCk7Cit9CisKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2Vi
RmlsZUludGVybmFsKQogLSAoZmxvYXQpX2RldmljZVNjYWxlRmFjdG9yOwogLSAoQk9PTClfaXNM
b2FkaW5nOwpAQCAtNDUzNyw2ICs0NTQ3LDE0IEBAIC0gKEJPT0wpZmluZFN0cmluZzooTlNTdHJp
bmcgKilzdHJpbmcgb3AKICAgICByZXR1cm4gTk87CiB9CiAKKy0gKERPTVJhbmdlICopRE9NUmFu
Z2VPZlN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgcmVsYXRpdmVUbzooRE9NUmFuZ2UgKilwcmV2
aW91c1JhbmdlIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnMKK3sKKyAgICBpZiAoIV9w
cml2YXRlLT5wYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIGtpdChfcHJp
dmF0ZS0+cGFnZS0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmUocHJldmlvdXNSYW5nZSksIGNvcmVP
cHRpb25zKG9wdGlvbnMpKS5nZXQoKSk7Cit9CisKIC0gKHZvaWQpc2V0SG92ZXJGZWVkYmFja1N1
c3BlbmRlZDooQk9PTCluZXdWYWx1ZQogewogICAgIGlmIChfcHJpdmF0ZS0+aG92ZXJGZWVkYmFj
a1N1c3BlbmRlZCA9PSBuZXdWYWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gOTQwOTEpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwor
I2ltcG9ydCA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
S2V5Ym9hcmRVSU1vZGUuaD4KIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC01Niw2ICs1
Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiAKK1dlYkNv
cmU6OkZpbmRPcHRpb25zIGNvcmVPcHRpb25zKFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpOworCiBA
aW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdFZGl0aW5nRXh0cmFzKQogLSAoQk9PTClfc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UgdG9ET01SYW5n
ZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5
KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7CiBAZW5kCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiA5
NDA5MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViUGVu
ZGluZ1B1YmxpYykKIC0gKHZvaWQpdW5zY2hlZHVsZUZyb21SdW5Mb29wOihOU1J1bkxvb3AgKily
dW5Mb29wIGZvck1vZGU6KE5TU3RyaW5nICopbW9kZTsKIAogLSAoQk9PTClmaW5kU3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihXZWJGaW5kT3B0aW9ucylvcHRpb25zOworLSAoRE9N
UmFuZ2UgKilET01SYW5nZU9mU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvOihE
T01SYW5nZSAqKXByZXZpb3VzUmFuZ2Ugb3B0aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9uczsK
IAogLSAodm9pZClzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5OihCT09MKW1haW5GcmFtZURvY3Vt
ZW50UmVhZHk7CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDk0MTExKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDgtMzAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFw
cGxlLmNvbT4KKworICAgICAgICBUZXN0IGZvciA8cmRhcjovL3Byb2JsZW0vOTI4MTY5NT4gQWRk
IHRleHQgc2VhcmNoIEFQSSBmb3IgZ2V0dGluZyB0aGUgRE9NIHJhbmdlIG9mIGEgdGV4dCBtYXRj
aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcyMzAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0RPTVJhbmdlT2ZTdHJpbmcuaHRtbDogQWRkZWQu
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvRE9NUmFuZ2VPZlN0cmluZy5tbTog
QWRkZWQuCisgICAgICAgICgtW0RPTVJhbmdlT2ZTdHJpbmdGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJW
aWV3OmRpZEZpbmlzaExvYWRGb3JGcmFtZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorCiAyMDExLTA4LTMwICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlv
Lm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgRW1pdCBsYXN0IHByb2dyZXNzIG5v
dGlmaWNhdGlvbiBiZWZvcmUgY2FsbGluZyBkaXNwYXRjaERpZEZpbmlzaExvYWQKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDA5MSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSw2ICsxOSw4IEBACiAJCTMzQkU1QUY5MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1v
dmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzM0JFNUFGODEzN0I1QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJD
cmFzaF9CdW5kbGUuY3BwICovOyB9OwogCQkzM0U3OUUwNjEzN0I1RkQ5MDBFMzJEOTkgLyogbW91
c2UtbW92ZS1saXN0ZW5lci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMzRTc5RTA1MTM3QjVGQ0UwMEUzMkQ5OSAvKiBtb3VzZS1tb3Zl
LWxpc3RlbmVyLmh0bWwgKi87IH07CiAJCTM3MjAwQjkyMTNBMTYyMzAwMDdBNEZBRCAvKiBWZWN0
b3JSZXZlcnNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3MjAwQjkxMTNBMTYyMzAwMDdBNEZBRCAvKiBWZWN0b3JSZXZlcnNlLmNwcCAqLzsgfTsK
KwkJMzdEQzY3OEQxNDBEN0M1MDAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0RDNjc4QjE0MEQ3QzUw
MDBBQkNDREIgLyogRE9NUmFuZ2VPZlN0cmluZy5tbSAqLzsgfTsKKwkJMzdEQzY3OTExNDBEN0Q3
NjAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0RDNjc4RjE0MEQ3RDNBMDBBQkNDREIg
LyogRE9NUmFuZ2VPZlN0cmluZy5odG1sICovOyB9OwogCQk0QkZERkZBNzEzMTQ3NzZDMDA2MUYy
NEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCRkRGRkE2MTMxNDc3NkMwMDYxRjI0QiAv
KiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwICovOyB9OwogCQk0QkZERkZBOTEz
MTQ3Nzc3MDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJGREZGQTgxMzE0Nzc3NzAwNjFG
MjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlLmNwcCAqLzsgfTsKIAkJQkMxMzE4ODUxMTcx
MTRCNjAwQjY5NzI3IC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzE4ODQxMTcxMTRCNjAwQjY5NzI3IC8q
IFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tICovOyB9OwpAQCAtMTEyLDYgKzExNCw3IEBACiAJCQkJ
QzBBREJFOTYxMkZDQTc5QjAwRDJDMTI5IC8qIHNpbXBsZS1mb3JtLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJQzAxQTIzRjIxMjY2MTU2NzAwQzlFRDU1IC8qIHNwYWNlYmFyLXNjcm9s
bGluZy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUJDMkQwMDY0MTJBQTA0Q0UwMEU3
MzJBMyAvKiBmaWxlLXdpdGgtYW5jaG9yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJ
MzdEQzY3OTExNDBEN0Q3NjAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLywKIAkJCQkxQURCRUZFMzEzMEM2QUExMDBENjFEMTkgLyogc2ltcGxlLWFj
Y2VsZXJhdGVkLWNvbXBvc2l0aW5nLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJbmFtZSA9ICJDb3B5IFJlc291cmNlcyI7CkBAIC0xMzEsNiArMTM0LDggQEAKIAkJMzNCRTVB
RjgxMzdCNUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVu
ZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNFNzlFMDUxMzdCNUZDRTAw
RTMyRDk5IC8qIG1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9ICJtb3VzZS1tb3ZlLWxpc3RlbmVyLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzIwMEI5MTEzQTE2MjMwMDA3QTRGQUQgLyogVmVjdG9yUmV2ZXJzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBWZWN0b3JSZXZlcnNlLmNwcDsgcGF0
aCA9IFdURi9WZWN0b3JSZXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzdEQzY3OEIxNDBEN0M1MDAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01SYW5nZU9mU3RyaW5nLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzN0RDNjc4RjE0MEQ3RDNBMDBBQkNDREIgLyogRE9N
UmFuZ2VPZlN0cmluZy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRE9NUmFuZ2VP
ZlN0cmluZy5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkZERkZBNjEzMTQ3
NzZDMDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCRkRGRkE4MTMxNDc3Nzcw
MDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBUZXN0V2Vi
S2l0QVBJICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBU
ZXN0V2ViS2l0QVBJOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNDAz
LDYgKzQwOCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUMw
N0U2Q0IwMTNGRDczN0MwMDM4QjIyQiAvKiBSZXNvdXJjZXMgKi8sCisJCQkJMzdEQzY3OEIxNDBE
N0M1MDAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gKi8sCiAJCQkJQzA3RTZDQUUxM0ZE
Njc2NTAwMzhCMjJCIC8qIER5bmFtaWNEZXZpY2VTY2FsZUZhY3Rvci5tbSAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gbWFjOwpAQCAtNDExLDYgKzQxNyw3IEBACiAJCUMwN0U2Q0IwMTNGRDczN0MwMDM4
QjIyQiAvKiBSZXNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTM3REM2NzhGMTQwRDdEM0EwMEFCQ0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLmh0
bWwgKi8sCiAJCQkJQzA3RTZDQjExM0ZENzM4QTAwMzhCMjJCIC8qIGRldmljZVBpeGVsUmF0aW8u
aHRtbCAqLywKIAkJCSk7CiAJCQluYW1lID0gUmVzb3VyY2VzOwpAQCAtNTUwLDYgKzU1Nyw3IEBA
CiAJCQkJQzA4NTg3QkYxM0ZFOTU2QzAwMUVGNEU1IC8qIFdlYktpdEFnbm9zdGljVGVzdC5tbSBp
biBTb3VyY2VzICovLAogCQkJCUMwODU4N0ZDMTNGRUMzOUIwMDFFRjRFNSAvKiBJbnN0YW5jZU1l
dGhvZFN3aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzA4NTg4MDAxM0ZFQzNBNjAwMUVG
NEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkzN0RD
Njc4RDE0MEQ3QzUwMDBBQkNDREIgLyogRE9NUmFuZ2VPZlN0cmluZy5tbSBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvRE9NUmFuZ2VPZlN0cmluZy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0RPTVJhbmdl
T2ZTdHJpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
bWFjL0RPTVJhbmdlT2ZTdHJpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CisgICAgVGhlcmUgaXMgb25seSBhIHNpbmds
ZSBuZWVkbGUgaW4gdGhpcyBzdGFjayBvZiBoYXkuCisgICAgPGlmcmFtZSBzcmM9ImRhdGE6dGV4
dC9odG1sLAorICAgICAgICBUaGVyZSBhcmUgbm8gZmVhdGhlcnMgaW4gaGVyZS4KKyAgICAiPjwv
aWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9tYWMvRE9NUmFuZ2VPZlN0cmluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL21hYy9ET01SYW5nZU9mU3RyaW5nLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvRE9NUmFuZ2VPZlN0cmluZy5tbQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVz
LmgiCisjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9E
T00uaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGludGVyZmFjZSBET01SYW5nZU9m
U3RyaW5nRnJhbWVMb2FkRGVsZWdhdGUgOiBOU09iamVjdCB7Cit9CitAZW5kCisKK3N0YXRpYyBi
b29sIGRpZEZpbmlzaExvYWQ7CisKK0BpbXBsZW1lbnRhdGlvbiBET01SYW5nZU9mU3RyaW5nRnJh
bWVMb2FkRGVsZWdhdGUKKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZp
bmlzaExvYWRGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworICAgIGRpZEZpbmlzaExvYWQg
PSB0cnVlOworfQorCitAZW5kCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChX
ZWJLaXQxLCBET01SYW5nZU9mU3RyaW5nKQoreworICAgIFJldGFpblB0cjxXZWJWaWV3PiB3ZWJW
aWV3KEFkb3B0TlMsIFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0IGZy
YW1lTmFtZTpuaWwgZ3JvdXBOYW1lOm5pbF0pOworICAgIFJldGFpblB0cjxET01SYW5nZU9mU3Ry
aW5nRnJhbWVMb2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlKEFkb3B0TlMsIFtET01SYW5n
ZU9mU3RyaW5nRnJhbWVMb2FkRGVsZWdhdGUgbmV3XSk7CisKKyAgICB3ZWJWaWV3LmdldCgpLmZy
YW1lTG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGUuZ2V0KCk7CisgICAgW1t3ZWJWaWV3
LmdldCgpIG1haW5GcmFtZV0gbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiRE9NUmFuZ2VPZlN0cmlu
ZyIgd2l0aEV4dGVuc2lvbjpAImh0bWwiXV1dOworCisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hM
b2FkKTsKKworICAgIERPTVJhbmdlICpyZXN1bHRSYW5nZSA9IFt3ZWJWaWV3LmdldCgpIERPTVJh
bmdlT2ZTdHJpbmc6QCJuZWVkbGVzIiByZWxhdGl2ZVRvOm5pbCBvcHRpb25zOjBdOworICAgIEVY
UEVDVF9FUShuaWwsIHJlc3VsdFJhbmdlKTsKKworICAgIERPTVJhbmdlICpuZWVkbGVSYW5nZSA9
IFt3ZWJWaWV3LmdldCgpIERPTVJhbmdlT2ZTdHJpbmc6QCJuZWVkbGUiIHJlbGF0aXZlVG86bmls
IG9wdGlvbnM6MF07CisgICAgRVhQRUNUX0VRKDI4LCBuZWVkbGVSYW5nZS5zdGFydE9mZnNldCk7
CisKKyAgICByZXN1bHRSYW5nZSA9IFt3ZWJWaWV3LmdldCgpIERPTVJhbmdlT2ZTdHJpbmc6QCJz
dGFjayIgcmVsYXRpdmVUbzpuZWVkbGVSYW5nZSBvcHRpb25zOjBdOworICAgIEVYUEVDVF9FUSg0
MywgcmVzdWx0UmFuZ2Uuc3RhcnRPZmZzZXQpOworCisgICAgcmVzdWx0UmFuZ2UgPSBbd2ViVmll
dy5nZXQoKSBET01SYW5nZU9mU3RyaW5nOkAic3RhY2siIHJlbGF0aXZlVG86bmVlZGxlUmFuZ2Ug
b3B0aW9uczpXZWJGaW5kT3B0aW9uc0JhY2t3YXJkc107CisgICAgRVhQRUNUX0VRKG5pbCwgcmVz
dWx0UmFuZ2UpOworCisgICAgUmV0YWluUHRyPFdlYlZpZXc+IG90aGVyV2ViVmlldyhBZG9wdE5T
LCBbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBmcmFtZU5hbWU6bmls
IGdyb3VwTmFtZTpuaWxdKTsKKyAgICBET01SYW5nZSAqZm9yZWlnblJhbmdlID0gW1tbb3RoZXJX
ZWJWaWV3LmdldCgpIG1haW5GcmFtZV0gRE9NRG9jdW1lbnRdIGNyZWF0ZVJhbmdlXTsKKyAgICBy
ZXN1bHRSYW5nZSA9IFt3ZWJWaWV3LmdldCgpIERPTVJhbmdlT2ZTdHJpbmc6QCJuZWVkbGUiIHJl
bGF0aXZlVG86Zm9yZWlnblJhbmdlIG9wdGlvbnM6MF07CisgICAgRVhQRUNUX0VRKG5pbCwgcmVz
dWx0UmFuZ2UpOworCisgICAgcmVzdWx0UmFuZ2UgPSBbd2ViVmlldy5nZXQoKSBET01SYW5nZU9m
U3RyaW5nOkAiaGVyZSIgcmVsYXRpdmVUbzpuZWVkbGVSYW5nZSBvcHRpb25zOjBdOworICAgIEVY
UEVDVF9FUSgxLCByZXN1bHRSYW5nZS5zdGFydE9mZnNldCk7CisKKyAgICByZXN1bHRSYW5nZSA9
IFt3ZWJWaWV3LmdldCgpIERPTVJhbmdlT2ZTdHJpbmc6QCJoZXJlIiByZWxhdGl2ZVRvOnJlc3Vs
dFJhbmdlIG9wdGlvbnM6MF07CisgICAgRVhQRUNUX0VRKDI1LCByZXN1bHRSYW5nZS5zdGFydE9m
ZnNldCk7CisKKyAgICByZXN1bHRSYW5nZSA9IFt3ZWJWaWV3LmdldCgpIERPTVJhbmdlT2ZTdHJp
bmc6QCJoZXJlIiByZWxhdGl2ZVRvOnJlc3VsdFJhbmdlIG9wdGlvbnM6V2ViRmluZE9wdGlvbnNX
cmFwQXJvdW5kXTsKKyAgICBFWFBFQ1RfRVEoNiwgcmVzdWx0UmFuZ2Uuc3RhcnRPZmZzZXQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105718</attachid>
            <date>2011-08-30 16:27:11 -0700</date>
            <delta_ts>2011-08-30 16:29:37 -0700</delta_ts>
            <desc>Add -[WebView DOMRangeOfString:relativeTo:options:]</desc>
            <filename>bug-67230-20110830162713.patch</filename>
            <type>text/plain</type>
            <size>28700</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MTIxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgtMzAgIERhbiBCZXJu
c3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBXZWJDb3JlIHBhcnQgb2YgPHJkYXI6
Ly9wcm9ibGVtLzkyODE2OTU+IEFkZCB0ZXh0IHNlYXJjaCBBUEkgZm9yIGdldHRpbmcgdGhlIERP
TSByYW5nZSBvZiBhIHRleHQgbWF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY3MjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdDogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvRE9NUmFuZ2VPZlN0
cmluZy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBFeHBvcnQgUGFnZTo6cmFuZ2VPZlN0
cmluZygpLgorICAgICAgICAqIGRvbS9SYW5nZS5oOiBBZGRlZCBhIGRlZmF1bHQgQVNTRVJUX05P
X0VYQ0VQVElPTiB0byBhIGZldyBtb3JlIG1lbWJlciBmdW5jdGlvbnMuCisgICAgICAgICogZWRp
dGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmaW5kU3RyaW5nKTog
TW92ZWQgbW9zdCBvZiB0aGUgbG9naWMgaW50byByYW5nZU9mU3RyaW5nKCksIHdoaWNoIHRoaXMg
ZnVuY3Rpb24KKyAgICAgICAgbm93IGNhbGxzLCBwYXNzaW5nIGluIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBhcyB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gdG8K
KyAgICAgICAgdGhlIHJldHVybmVkIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpy
YW5nZU9mU3RyaW5nKTogQWRkZWQuIENvbnRhaW5zIHRoZSBmaW5kIGxvZ2ljIGZyb20gZmluZFN0
cmluZygpLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogcGFnZS9QYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJhbmdlT2ZTdHJpbmcpOiBBZGRlZC4gVGhp
cyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGZpbmRTdHJpbmcoKSwgYnV0IGl0IHRha2VzIGFuIG9w
dGlvbmFsCisgICAgICAgIHJlZmVyZW5jZSByYW5nZSBhbmQgcmV0dXJucyBhIFJhbmdlLCByYXRo
ZXIgdGhhbiB1c2luZyB0aGUgY3VycmVudCBzZWxlY3Rpb24gYXMgdGhlIHJlZmVyZW5jZSByYW5n
ZSBhbmQgc2V0dGluZyB0aGUKKyAgICAgICAgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IG1hdGNoLgor
ICAgICAgICAqIHBhZ2UvUGFnZS5oOgorCiAyMDExLTA4LTMwICBBYXJvbiBDb2x3ZWxsICA8YWNv
bHdlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBNZWRpYVNvdXJjZSBBUEkgdG8gSFRN
TE1lZGlhRWxlbWVudApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDk0MDkxKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTY5OCw2
ICs2OTgsNyBAQCBfX1pON1dlYkNvcmU0UGFnZTEwZmluZFN0cmluZ0VSS04zV1RGNlN0CiBfX1pO
N1dlYkNvcmU0UGFnZTExUGFnZUNsaWVudHNDMUV2CiBfX1pON1dlYkNvcmU0UGFnZTExUGFnZUNs
aWVudHNEMUV2CiBfX1pON1dlYkNvcmU0UGFnZTEyc2V0R3JvdXBOYW1lRVJLTjNXVEY2U3RyaW5n
RQorX19aTjdXZWJDb3JlNFBhZ2UxM3JhbmdlT2ZTdHJpbmdFUktOM1dURjZTdHJpbmdFUE5TXzVS
YW5nZUVqCiBfX1pON1dlYkNvcmU0UGFnZTE0c2V0TWVkaWFWb2x1bWVFZgogX19aTjdXZWJDb3Jl
NFBhZ2UxNWFkZFNjaGVkdWxlUGFpckVOM1dURjEwUGFzc1JlZlB0cklOU18xMlNjaGVkdWxlUGFp
ckVFRQogX19aTjdXZWJDb3JlNFBhZ2UxNWRpZE1vdmVPbnNjcmVlbkV2CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuaAkocmV2aXNpb24gOTQwOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtOTMsMTggKzkzLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaChF
eGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gY2xvbmVSYW5nZShFeGNlcHRp
b25Db2RlJikgY29uc3Q7CiAKLSAgICB2b2lkIHNldFN0YXJ0QWZ0ZXIoTm9kZSosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIHNldEVuZEJlZm9yZShOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0RW5kQWZ0ZXIoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNl
bGVjdE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFN0YXJ0QWZ0ZXIo
Tm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgdm9pZCBz
ZXRFbmRCZWZvcmUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJUX05PX0VYQ0VQVElPTik7
CisgICAgdm9pZCBzZXRFbmRBZnRlcihOb2RlKiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKKyAgICB2b2lkIHNlbGVjdE5vZGUoTm9kZSosIEV4Y2VwdGlvbkNvZGUmID0g
QVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgdm9pZCBzZWxlY3ROb2RlQ29udGVudHMoTm9kZSos
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHN1cnJvdW5kQ29udGVudHMoUGFzc1JlZlB0cjxO
b2RlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0U3RhcnRCZWZvcmUoTm9kZSosIEV4
Y2VwdGlvbkNvZGUmKTsKIAogICAgIGNvbnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRpb24oKTsgfQogICAgIGNvbnN0IFBvc2l0aW9uIGVu
ZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9Ci0gICAgdm9p
ZCBzZXRTdGFydChjb25zdCBQb3NpdGlvbiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNl
dEVuZChjb25zdCBQb3NpdGlvbiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFN0YXJ0
KGNvbnN0IFBvc2l0aW9uJiwgRXhjZXB0aW9uQ29kZSYgPSBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
KyAgICB2b2lkIHNldEVuZChjb25zdCBQb3NpdGlvbiYsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJU
X05PX0VYQ0VQVElPTik7CiAKICAgICBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKICAgICBOb2Rl
KiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDk0MDkxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjkxMyw2NCArMjkxMyw3NSBAQCBi
b29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhCiAKIGJvb2wgRWRpdG9yOjpm
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogewot
ICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQorICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworCisgICAgUmVmUHRyPFJhbmdl
PiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5n
ZSgpLmdldCgpLCBvcHRpb25zKTsKKworICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYg
dGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEZpbmRPcHRpb25zIG9wdGlvbnMpCit7Cisg
ICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgaWYgKG1f
ZnJhbWUtPmV4Y2x1ZGVGcm9tVGV4dFNlYXJjaCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gU3RhcnQgZnJvbSBhbiBlZGdlIG9mIHRoZSBzZWxl
Y3Rpb24sIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24gdGhhdCdzIG5vdCBpbiBzaGFkb3cgY29udGVu
dC4gV2hpY2ggZWRnZQorICAgIC8vIFN0YXJ0IGZyb20gYW4gZWRnZSBvZiB0aGUgcmVmZXJlbmNl
IHJhbmdlLCBpZiB0aGVyZSdzIGEgcmVmZXJlbmNlIHJhbmdlIHRoYXQncyBub3QgaW4gc2hhZG93
IGNvbnRlbnQuIFdoaWNoIGVkZ2UKICAgICAvLyBpcyB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB3
ZSdyZSBzZWFyY2hpbmcgZm9yd2FyZCBvciBiYWNrd2FyZCwgYW5kIHdoZXRoZXIgc3RhcnRJblNl
bGVjdGlvbiBpcyBzZXQuCiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29u
dGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogCiAgICAgYm9vbCBmb3J3
YXJkID0gIShvcHRpb25zICYgQmFja3dhcmRzKTsKLSAgICBib29sIHN0YXJ0SW5TZWxlY3Rpb24g
PSBvcHRpb25zICYgU3RhcnRJblNlbGVjdGlvbjsKLSAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAg
c2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0SW5TZWxlY3Rpb24gPyBzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCkgOiBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgc3RhcnRJblNlbGVjdGlvbiA/IHNlbGVjdGlv
bi52aXNpYmxlRW5kKCkgOiBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpOworICAgIGJvb2wgc3Rh
cnRJblJlZmVyZW5jZVJhbmdlID0gcmVmZXJlbmNlUmFuZ2UgJiYgKG9wdGlvbnMgJiBTdGFydElu
U2VsZWN0aW9uKTsKKyAgICBpZiAocmVmZXJlbmNlUmFuZ2UpIHsKKyAgICAgICAgaWYgKGZvcndh
cmQpCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnRJblJlZmVyZW5jZVJh
bmdlID8gcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSA6IHJlZmVyZW5jZVJhbmdlLT5l
bmRQb3NpdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dEVuZChzdGFydEluUmVmZXJlbmNlUmFuZ2UgPyByZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24o
KSA6IHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIH0KIAotICAgIFJlZlB0
cjxOb2RlPiBzaGFkb3dUcmVlUm9vdCA9IHNlbGVjdGlvbi5ub25Cb3VuZGFyeVNoYWRvd1RyZWVS
b290Tm9kZSgpOworICAgIFJlZlB0cjxOb2RlPiBzaGFkb3dUcmVlUm9vdCA9IHJlZmVyZW5jZVJh
bmdlICYmIHJlZmVyZW5jZVJhbmdlLT5zdGFydENvbnRhaW5lcigpID8gcmVmZXJlbmNlUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCktPm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkgOiAwOwog
ICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNo
YWRvd1RyZWVSb290LmdldCgpLCBzaGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZWMp
OworICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVlUm9vdC5nZXQoKSwg
c2hhZG93VHJlZVJvb3QtPmNoaWxkTm9kZUNvdW50KCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDAsIGVjKTsK
KyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzaGFkb3dUcmVlUm9vdC5nZXQoKSwg
MCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0
KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIG9wdGlvbnMpKTsKLSAgICAvLyBJZiB3ZSBzdGFy
dGVkIGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMg
dGhlIGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBzdGFydGVk
IGluIHRoZSByZWZlcmVuY2UgcmFuZ2UgYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNo
ZXMgdGhlIHJlZmVyZW5jZSByYW5nZSwgZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVj
dGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2Uu
CiAgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBp
Z25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBp
ZiAoc3RhcnRJblNlbGVjdGlvbiAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uKHJl
c3VsdFJhbmdlLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpIHsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdl
ICYmIGFyZVJhbmdlc0VxdWFsKFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UuZ2V0KCkpLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgewogICAgICAgICBzZWFy
Y2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAg
aWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQo
cmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7Cisg
ICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpOwogCiAgICAgICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LmdldCgpLCBzaGFkb3dUcmVl
Um9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZWMpOworICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIHNoYWRvd1RyZWVSb290LT5jaGlsZE5vZGVD
b3VudCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDAsIGVjKTsKKyAgICAgICAgICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QuZ2V0KCksIDApOwogICAgICAgICB9
CiAKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgp
LCB0YXJnZXQsIG9wdGlvbnMpOwogICAgIH0KIAotICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9u
ID0gMDsKLQogICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFkb3cgdHJlZSwg
c2VhcmNoIGluIG1haW4gY29udGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVlLgotICAgIGlm
IChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpIHsK
KyAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZCgpICYmIHNoYWRvd1RyZWVSb290KSB7CiAg
ICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkp
OwogICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dEFmdGVyKHNoYWRvd1RyZWVSb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHNoYWRvd1RyZWVSb290LT5z
aGFkb3dBbmNlc3Rvck5vZGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRFbmRCZWZvcmUoc2hhZG93VHJlZVJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpLCBl
eGNlcHRpb24pOworICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dU
cmVlUm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOwogCiAgICAgICAgIHJlc3VsdFJhbmdlID0g
ZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBvcHRpb25zKTsKICAgICB9
CkBAIC0yOTc4LDI1ICsyOTg5LDIwIEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGEKICAgICBpZiAoIWluc2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkg
ewogICAgICAgICByZXN1bHRSYW5nZSA9IG5leHRWaXNpYmxlUmFuZ2UocmVzdWx0UmFuZ2UuZ2V0
KCksIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgICAgIGlmICghcmVzdWx0UmFuZ2UpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICAv
LyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBhbmQgd2UncmUgd3JhcHBpbmcsIHNlYXJjaCBh
Z2FpbiBpbiB0aGUgZW50aXJlIGRvY3VtZW50ICh0aGlzIHdpbGwKICAgICAvLyByZWR1bmRhbnRs
eSByZS1zZWFyY2ggdGhlIGFyZWEgYWxyZWFkeSBzZWFyY2hlZCBpbiBzb21lIGNhc2VzKS4KLSAg
ICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pICYmIG9wdGlvbnMgJiBXcmFw
QXJvdW5kKSB7CisgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoKSAmJiBvcHRpb25zICYg
V3JhcEFyb3VuZCkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2Zy
YW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIG9wdGlvbnMpOwogICAgICAgICAvLyBXZSB1c2VkIHRv
IHJldHVybiBmYWxzZSBoZXJlIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHNhbWUgcmFuZ2UgdGhh
dCB3ZSBzdGFydGVkIHdpdGgKLSAgICAgICAgLy8gKGUuZy4sIHRoZSBzZWxlY3Rpb24gd2FzIGFs
cmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyB0ZXh0KS4gQnV0IHdlIGRlY2lkZWQgdGhh
dAorICAgICAgICAvLyAoZS5nLiwgdGhlIHJlZmVyZW5jZSByYW5nZSB3YXMgYWxyZWFkeSB0aGUg
b25seSBpbnN0YW5jZSBvZiB0aGlzIHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0CiAgICAgICAg
IC8vIHRoaXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3Qg
ZmFsbCB0aHJvdWdoIGluIHRoYXQgY2FzZS4KICAgICB9CiAKLSAgICBpZiAocmVzdWx0UmFuZ2Ut
PmNvbGxhcHNlZChleGNlcHRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFu
Z2UuZ2V0KCksIERPV05TVFJFQU0pKTsKLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+cmV2ZWFs
U2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdFJhbmdlLT5j
b2xsYXBzZWQoKSA/IDAgOiByZXN1bHRSYW5nZS5yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBib29s
IGlzRnJhbWVJblJhbmdlKEZyYW1lKiBmcmFtZSwgUmFuZ2UqIHJhbmdlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiA5NDA5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw2ICszMzUsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gRklYTUU6IFN3aXRjaCBjYWxsZXJzIG92ZXIgdG8gdGhlIEZpbmRPcHRpb25zIHZlcnNp
b24gYW5kIHJldGlyZSB0aGlzIG9uZS4KICAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29sIHN0YXJ0
SW5TZWxlY3Rpb24pOwogCisgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VPZlN0cmluZyhjb25z
dCBTdHJpbmcmLCBSYW5nZSosIEZpbmRPcHRpb25zKTsKKwogICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0
LgogICAgIHZvaWQgc2V0TWFyayhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcAkocmV2aXNpb24gOTQwOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksNiArNDk5LDM0IEBAIGJvb2wgUGFnZTo6Zmlu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1Bhc3NS
ZWZQdHI8UmFuZ2U+IFBhZ2U6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJh
bmdlKiByZWZlcmVuY2VSYW5nZSwgRmluZE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBpZiAodGFy
Z2V0LmlzRW1wdHkoKSB8fCAhbWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKHJlZmVyZW5jZVJhbmdlICYmIHJlZmVyZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCktPnBh
Z2UoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgc2hvdWxkV3JhcCA9
IG9wdGlvbnMgJiBXcmFwQXJvdW5kOworICAgIEZyYW1lKiBmcmFtZSA9IHJlZmVyZW5jZVJhbmdl
ID8gcmVmZXJlbmNlUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSA6IG1haW5GcmFtZSgp
OworICAgIEZyYW1lKiBzdGFydEZyYW1lID0gZnJhbWU7CisgICAgZG8geworICAgICAgICBpZiAo
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS0+cmFuZ2VPZlN0cmlu
Zyh0YXJnZXQsIGZyYW1lID09IHN0YXJ0RnJhbWUgPyByZWZlcmVuY2VSYW5nZSA6IDAsIChvcHRp
b25zICYgfldyYXBBcm91bmQpIHwgU3RhcnRJblNlbGVjdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0UmFuZ2UucmVsZWFzZSgpOworCisgICAgICAgIGZyYW1lID0gaW5jcmVtZW50RnJh
bWUoZnJhbWUsICEob3B0aW9ucyAmIEJhY2t3YXJkcyksIHNob3VsZFdyYXApOworICAgIH0gd2hp
bGUgKGZyYW1lICYmIGZyYW1lICE9IHN0YXJ0RnJhbWUpOworCisgICAgLy8gU2VhcmNoIGNvbnRl
bnRzIG9mIHN0YXJ0RnJhbWUsIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSByZWZlcmVuY2UgcmFu
Z2UgdGhhdCB3ZSBkaWQgZWFybGllci4KKyAgICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVzdCBz
ZWFyY2ggYWdhaW4gd2l0aCB3cmFwIG9uLgorICAgIGlmIChzaG91bGRXcmFwICYmIHJlZmVyZW5j
ZVJhbmdlKSB7CisgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gc3RhcnRG
cmFtZS0+ZWRpdG9yKCktPnJhbmdlT2ZTdHJpbmcodGFyZ2V0LCByZWZlcmVuY2VSYW5nZSwgb3B0
aW9ucyB8IFdyYXBBcm91bmQgfCBTdGFydEluU2VsZWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHRSYW5nZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIHVu
c2lnbmVkIGludCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFRleHRDYXNlU2Vuc2l0aXZpdHkgY2FzZVNlbnNpdGl2aXR5LCBib29sIHNob3VsZEhpZ2hs
aWdodCwgdW5zaWduZWQgbGltaXQpCiB7CiAgICAgcmV0dXJuIG1hcmtBbGxNYXRjaGVzRm9yVGV4
dCh0YXJnZXQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZUluc2Vuc2l0aXZlID8gQ2FzZUlu
c2Vuc2l0aXZlIDogMCwgc2hvdWxkSGlnaGxpZ2h0LCBsaW1pdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAkocmV2aXNpb24gOTQwOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
UGFnZUdyb3VwOwogICAgIGNsYXNzIFBsdWdpbkRhdGE7CiAgICAgY2xhc3MgUHJvZ3Jlc3NUcmFj
a2VyOworICAgIGNsYXNzIFJhbmdlOwogICAgIGNsYXNzIFJlbmRlclRoZW1lOwogICAgIGNsYXNz
IFZpc2libGVTZWxlY3Rpb247CiAgICAgY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CkBAIC0yMTAsNiAr
MjExLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGZpbmRTdHJpbmcoY29u
c3QgU3RyaW5nJiwgRmluZE9wdGlvbnMpOwogICAgICAgICAvLyBGSVhNRTogU3dpdGNoIGNhbGxl
cnMgb3ZlciB0byB0aGUgRmluZE9wdGlvbnMgdmVyc2lvbiBhbmQgcmV0aXJlIHRoaXMgb25lLgog
ICAgICAgICBib29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgVGV4dENhc2VTZW5zaXRpdml0
eSwgRmluZERpcmVjdGlvbiwgYm9vbCBzaG91bGRXcmFwKTsKKworICAgICAgICBQYXNzUmVmUHRy
PFJhbmdlPiByYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRmluZE9wdGlvbnMp
OworCiAgICAgICAgIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucywgYm9vbCBzaG91bGRIaWdobGlnaHQsIHVuc2lnbmVkKTsKICAgICAgICAg
Ly8gRklYTUU6IFN3aXRjaCBjYWxsZXJzIG92ZXIgdG8gdGhlIEZpbmRPcHRpb25zIHZlcnNpb24g
YW5kIHJldGlyZSB0aGlzIG9uZS4KICAgICAgICAgdW5zaWduZWQgbWFya0FsbE1hdGNoZXNGb3JU
ZXh0KGNvbnN0IFN0cmluZyYsIFRleHRDYXNlU2Vuc2l0aXZpdHksIGJvb2wgc2hvdWxkSGlnaGxp
Z2h0LCB1bnNpZ25lZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDEyMSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4
IEBACisyMDExLTA4LTMwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzkyODE2OTU+IEFkZCB0ZXh0IHNlYXJjaCBBUEkgZm9yIGdldHRp
bmcgdGhlIERPTSByYW5nZSBvZiBhIHRleHQgbWF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKGNvcmVPcHRpb25zKTogTW92ZWQgdGhp
cyBmdW5jdGlvbiBmcm9tIFdlYkhUTUxWaWV3Lm1tIHRvIGhlcmUgYW5kIG1hZGUKKyAgICAgICAg
aXQgYWNjZXNzaWJsZSBmcm9tIGJvdGggdGhpcyBmaWxlIGFuZCBXZWJIVE1MVmlldy5tbS4KKyAg
ICAgICAgKC1bV2ViVmlldyBET01SYW5nZU9mU3RyaW5nOnJlbGF0aXZlVG86b3B0aW9uczpdKTog
QWRkZWQgdGhpcyBuZXcgQVBJLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6
CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oOgorCiAyMDExLTA4LTMwICBBYXJv
biBDb2x3ZWxsICA8YWNvbHdlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBNZWRpYVNv
dXJjZSBBUEkgdG8gSFRNTE1lZGlhRWxlbWVudApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA5NDA5MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzNCwxNiArNTM0LDYg
QEAgc3RhdGljIE5TQ2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0YXRlIHN0YQogICAgIHJldHVybiBO
U09mZlN0YXRlOwogfQogCi1zdGF0aWMgRmluZE9wdGlvbnMgY29yZU9wdGlvbnMoV2ViRmluZE9w
dGlvbnMgb3B0aW9ucykKLXsKLSAgICByZXR1cm4gKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc0Nh
c2VJbnNlbnNpdGl2ZSA/IENhc2VJbnNlbnNpdGl2ZSA6IDApCi0gICAgICAgIHwgKG9wdGlvbnMg
JiBXZWJGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyA/IEF0V29yZFN0YXJ0cyA6IDApCi0gICAgICAg
IHwgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0
ID8gVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQgOiAwKQotICAgICAgICB8IChvcHRpb25z
ICYgV2ViRmluZE9wdGlvbnNCYWNrd2FyZHMgPyBCYWNrd2FyZHMgOiAwKQotICAgICAgICB8IChv
cHRpb25zICYgV2ViRmluZE9wdGlvbnNXcmFwQXJvdW5kID8gV3JhcEFyb3VuZCA6IDApCi0gICAg
ICAgIHwgKG9wdGlvbnMgJiBXZWJGaW5kT3B0aW9uc1N0YXJ0SW5TZWxlY3Rpb24gPyBTdGFydElu
U2VsZWN0aW9uIDogMCk7Ci19Ci0KIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlld1ByaXZhdGUK
IAogKyAodm9pZClpbml0aWFsaXplCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCShyZXZpc2lvbiA5NDA5MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzc0LDYgKzM3NCwxNiBAQCBAaW50ZXJmYWNlIF9XZWJT
YWZlRm9yd2FyZGVyIDogTlNPYmplY3QKIC0gKGlkKWluaXRXaXRoVGFyZ2V0OihpZCl0YXJnZXQg
ZGVmYXVsdFRhcmdldDooaWQpZGVmYXVsdFRhcmdldCBjYXRjaEV4Y2VwdGlvbnM6KEJPT0wpY2F0
Y2hFeGNlcHRpb25zOwogQGVuZAogCitGaW5kT3B0aW9ucyBjb3JlT3B0aW9ucyhXZWJGaW5kT3B0
aW9ucyBvcHRpb25zKQoreworICAgIHJldHVybiAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zQ2Fz
ZUluc2Vuc2l0aXZlID8gQ2FzZUluc2Vuc2l0aXZlIDogMCkKKyAgICAgICAgfCAob3B0aW9ucyAm
IFdlYkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzID8gQXRXb3JkU3RhcnRzIDogMCkKKyAgICAgICAg
fCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQg
PyBUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCA6IDApCisgICAgICAgIHwgKG9wdGlvbnMg
JiBXZWJGaW5kT3B0aW9uc0JhY2t3YXJkcyA/IEJhY2t3YXJkcyA6IDApCisgICAgICAgIHwgKG9w
dGlvbnMgJiBXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQgPyBXcmFwQXJvdW5kIDogMCkKKyAgICAg
ICAgfCAob3B0aW9ucyAmIFdlYkZpbmRPcHRpb25zU3RhcnRJblNlbGVjdGlvbiA/IFN0YXJ0SW5T
ZWxlY3Rpb24gOiAwKTsKK30KKwogQGludGVyZmFjZSBXZWJWaWV3IChXZWJGaWxlSW50ZXJuYWwp
CiAtIChmbG9hdClfZGV2aWNlU2NhbGVGYWN0b3I7CiAtIChCT09MKV9pc0xvYWRpbmc7CkBAIC00
NTM3LDYgKzQ1NDcsMTQgQEAgLSAoQk9PTClmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBv
cAogICAgIHJldHVybiBOTzsKIH0KIAorLSAoRE9NUmFuZ2UgKilET01SYW5nZU9mU3RyaW5nOihO
U1N0cmluZyAqKXN0cmluZyByZWxhdGl2ZVRvOihET01SYW5nZSAqKXByZXZpb3VzUmFuZ2Ugb3B0
aW9uczooV2ViRmluZE9wdGlvbnMpb3B0aW9ucworeworICAgIGlmICghX3ByaXZhdGUtPnBhZ2Up
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5wYWdlLT5y
YW5nZU9mU3RyaW5nKHN0cmluZywgY29yZShwcmV2aW91c1JhbmdlKSwgY29yZU9wdGlvbnMob3B0
aW9ucykpLmdldCgpKTsKK30KKwogLSAodm9pZClzZXRIb3ZlckZlZWRiYWNrU3VzcGVuZGVkOihC
T09MKW5ld1ZhbHVlCiB7CiAgICAgaWYgKF9wcml2YXRlLT5ob3ZlckZlZWRiYWNrU3VzcGVuZGVk
ID09IG5ld1ZhbHVlKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50
ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJ
bnRlcm5hbC5oCShyZXZpc2lvbiA5NDA5MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBv
cnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCisjaW1wb3J0IDxX
ZWJDb3JlL0ZpbmRPcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVLZXlib2FyZFVJ
TW9kZS5oPgogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTU2LDYgKzU3LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWZkZWYgX19jcGx1c3BsdXMKIAorV2ViQ29yZTo6RmluZE9w
dGlvbnMgY29yZU9wdGlvbnMoV2ViRmluZE9wdGlvbnMgb3B0aW9ucyk7CisKIEBpbnRlcmZhY2Ug
V2ViVmlldyAoV2ViVmlld0VkaXRpbmdFeHRyYXMpCiAtIChCT09MKV9zaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOihET01SYW5n
ZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9u
QWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKIEBlbmQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDk0MDkxKQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsNiArMTE3LDcgQEAgQGludGVyZmFjZSBXZWJWaWV3IChXZWJQZW5kaW5nUHVibGlj
KQogLSAodm9pZCl1bnNjaGVkdWxlRnJvbVJ1bkxvb3A6KE5TUnVuTG9vcCAqKXJ1bkxvb3AgZm9y
TW9kZTooTlNTdHJpbmcgKiltb2RlOwogCiAtIChCT09MKWZpbmRTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nIG9wdGlvbnM6KFdlYkZpbmRPcHRpb25zKW9wdGlvbnM7CistIChET01SYW5nZSAqKURP
TVJhbmdlT2ZTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHJlbGF0aXZlVG86KERPTVJhbmdlICop
cHJldmlvdXNSYW5nZSBvcHRpb25zOihXZWJGaW5kT3B0aW9ucylvcHRpb25zOwogCiAtICh2b2lk
KXNldE1haW5GcmFtZURvY3VtZW50UmVhZHk6KEJPT0wpbWFpbkZyYW1lRG9jdW1lbnRSZWFkeTsK
IApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gOTQxMjEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNiBAQAorMjAxMS0wOC0zMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgor
CisgICAgICAgIFRlc3QgZm9yIDxyZGFyOi8vcHJvYmxlbS85MjgxNjk1PiBBZGQgdGV4dCBzZWFy
Y2ggQVBJIGZvciBnZXR0aW5nIHRoZSBET00gcmFuZ2Ugb2YgYSB0ZXh0IG1hdGNoCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzIzMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9tYWMvRE9NUmFuZ2VPZlN0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9ET01SYW5nZU9mU3RyaW5nLm1tOiBBZGRlZC4KKyAg
ICAgICAgKC1bRE9NUmFuZ2VPZlN0cmluZ0ZyYW1lTG9hZERlbGVnYXRlIHdlYlZpZXc6ZGlkRmlu
aXNoTG9hZEZvckZyYW1lOl0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIw
MTEtMDgtMzAgIEFhcm9uIENvbHdlbGwgIDxhY29sd2VsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgQWRkIE1lZGlhU291cmNlIEFQSSB0byBIVE1MTWVkaWFFbGVtZW50CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQwOTEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTksNiArMTksOCBAQAogCQkzM0JFNUFGOTEzN0I1QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0
ZXJDcmFzaF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzNCRTVBRjgxMzdCNUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hf
QnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNFNzlFMDYxMzdCNUZEOTAwRTMyRDk5IC8qIG1vdXNlLW1v
dmUtbGlzdGVuZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzM0U3OUUwNTEzN0I1RkNFMDBFMzJEOTkgLyogbW91c2UtbW92ZS1saXN0
ZW5lci5odG1sICovOyB9OwogCQkzNzIwMEI5MjEzQTE2MjMwMDA3QTRGQUQgLyogVmVjdG9yUmV2
ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
NzIwMEI5MTEzQTE2MjMwMDA3QTRGQUQgLyogVmVjdG9yUmV2ZXJzZS5jcHAgKi87IH07CisJCTM3
REM2NzhEMTQwRDdDNTAwMEFCQ0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdEQzY3OEIxNDBEN0M1MDAwQUJD
Q0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gKi87IH07CisJCTM3REM2NzkxMTQwRDdENzYwMEFC
Q0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdEQzY3OEYxNDBEN0QzQTAwQUJDQ0RCIC8qIERP
TVJhbmdlT2ZTdHJpbmcuaHRtbCAqLzsgfTsKIAkJNEJGREZGQTcxMzE0Nzc2QzAwNjFGMjRCIC8q
IEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QkZERkZBNjEzMTQ3NzZDMDA2MUYyNEIgLyogSGl0
VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCAqLzsgfTsKIAkJNEJGREZGQTkxMzE0Nzc3
NzAwNjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCRkRGRkE4MTMxNDc3NzcwMDYxRjI0QiAv
KiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgKi87IH07CiAJCUJDMTMxODg1MTE3MTE0QjYw
MEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxODg0MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0
Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKQEAgLTExMiw2ICsxMTQsNyBAQAogCQkJCUMwQURC
RTk2MTJGQ0E3OUIwMEQyQzEyOSAvKiBzaW1wbGUtZm9ybS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovLAogCQkJCUMwMUEyM0YyMTI2NjE1NjcwMEM5RUQ1NSAvKiBzcGFjZWJhci1zY3JvbGxpbmcu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlCQzJEMDA2NDEyQUEwNENFMDBFNzMyQTMg
LyogZmlsZS13aXRoLWFuY2hvci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTM3REM2
NzkxMTQwRDdENzYwMEFCQ0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJMUFEQkVGRTMxMzBDNkFBMTAwRDYxRDE5IC8qIHNpbXBsZS1hY2NlbGVy
YXRlZC1jb21wb3NpdGluZy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJKTsKIAkJCW5h
bWUgPSAiQ29weSBSZXNvdXJjZXMiOwpAQCAtMTMxLDYgKzEzNCw4IEBACiAJCTMzQkU1QUY4MTM3
QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzRTc5RTA1MTM3QjVGQ0UwMEUzMkQ5
OSAvKiBtb3VzZS1tb3ZlLWxpc3RlbmVyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGgg
PSAibW91c2UtbW92ZS1saXN0ZW5lci5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzcyMDBCOTExM0ExNjIzMDAwN0E0RkFEIC8qIFZlY3RvclJldmVyc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVmVjdG9yUmV2ZXJzZS5jcHA7IHBhdGggPSBX
VEYvVmVjdG9yUmV2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3REM2
NzhCMTQwRDdDNTAwMEFCQ0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NUmFuZ2VPZlN0cmluZy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzdEQzY3OEYxNDBEN0QzQTAwQUJDQ0RCIC8qIERPTVJhbmdl
T2ZTdHJpbmcuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IERPTVJhbmdlT2ZTdHJp
bmcuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJGREZGQTYxMzE0Nzc2QzAw
NjFGMjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkZERkZBODEzMTQ3Nzc3MDA2MUYy
NEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQ
SSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdl
YktpdEFQSTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTQwMyw2ICs0
MDgsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDMDdFNkNC
MDEzRkQ3MzdDMDAzOEIyMkIgLyogUmVzb3VyY2VzICovLAorCQkJCTM3REM2NzhCMTQwRDdDNTAw
MEFCQ0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLm1tICovLAogCQkJCUMwN0U2Q0FFMTNGRDY3NjUw
MDM4QjIyQiAvKiBEeW5hbWljRGV2aWNlU2NhbGVGYWN0b3IubW0gKi8sCiAJCQkpOwogCQkJcGF0
aCA9IG1hYzsKQEAgLTQxMSw2ICs0MTcsNyBAQAogCQlDMDdFNkNCMDEzRkQ3MzdDMDAzOEIyMkIg
LyogUmVzb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkzN0RDNjc4RjE0MEQ3RDNBMDBBQkNDREIgLyogRE9NUmFuZ2VPZlN0cmluZy5odG1sICov
LAogCQkJCUMwN0U2Q0IxMTNGRDczOEEwMDM4QjIyQiAvKiBkZXZpY2VQaXhlbFJhdGlvLmh0bWwg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IFJlc291cmNlczsKQEAgLTU1MCw2ICs1NTcsNyBAQAogCQkJ
CUMwODU4N0JGMTNGRTk1NkMwMDFFRjRFNSAvKiBXZWJLaXRBZ25vc3RpY1Rlc3QubW0gaW4gU291
cmNlcyAqLywKIAkJCQlDMDg1ODdGQzEzRkVDMzlCMDAxRUY0RTUgLyogSW5zdGFuY2VNZXRob2RT
d2l6emxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwODU4ODAwMTNGRUMzQTYwMDFFRjRFNSAv
KiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzdEQzY3OEQx
NDBEN0M1MDAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0RPTVJhbmdlT2ZTdHJpbmcuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9ET01SYW5nZU9mU3Ry
aW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9E
T01SYW5nZU9mU3RyaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorICAgIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbmVl
ZGxlIGluIHRoaXMgc3RhY2sgb2YgaGF5LgorICAgIDxpZnJhbWUgc3JjPSJkYXRhOnRleHQvaHRt
bCwKKyAgICAgICAgVGhlcmUgYXJlIG5vIGZlYXRoZXJzIGluIGhlcmUuCisgICAgIj48L2lmcmFt
ZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFj
L0RPTVJhbmdlT2ZTdHJpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9tYWMvRE9NUmFuZ2VPZlN0cmluZy5tbQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvbWFjL0RPTVJhbmdlT2ZTdHJpbmcubW0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgor
I2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvRE9NLmg+
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbnRlcmZhY2UgRE9NUmFuZ2VPZlN0cmlu
Z0ZyYW1lTG9hZERlbGVnYXRlIDogTlNPYmplY3QgeworfQorQGVuZAorCitzdGF0aWMgYm9vbCBk
aWRGaW5pc2hMb2FkOworCitAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2VPZlN0cmluZ0ZyYW1lTG9h
ZERlbGVnYXRlCisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRGaW5pc2hM
b2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKK3sKKyAgICBkaWRGaW5pc2hMb2FkID0gdHJ1
ZTsKK30KKworQGVuZAorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV2ViS2l0
MSwgRE9NUmFuZ2VPZlN0cmluZykKK3sKKyAgICBSZXRhaW5QdHI8V2ViVmlldz4gd2ViVmlldyhB
ZG9wdE5TLCBbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNaZXJvUmVjdCBmcmFtZU5h
bWU6bmlsIGdyb3VwTmFtZTpuaWxdKTsKKyAgICBSZXRhaW5QdHI8RE9NUmFuZ2VPZlN0cmluZ0Zy
YW1lTG9hZERlbGVnYXRlPiBmcmFtZUxvYWREZWxlZ2F0ZShBZG9wdE5TLCBbRE9NUmFuZ2VPZlN0
cmluZ0ZyYW1lTG9hZERlbGVnYXRlIG5ld10pOworCisgICAgd2ViVmlldy5nZXQoKS5mcmFtZUxv
YWREZWxlZ2F0ZSA9IGZyYW1lTG9hZERlbGVnYXRlLmdldCgpOworICAgIFtbd2ViVmlldy5nZXQo
KSBtYWluRnJhbWVdIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkRPTVJhbmdlT2ZTdHJpbmciIHdp
dGhFeHRlbnNpb246QCJodG1sIl1dXTsKKworICAgIFV0aWw6OnJ1bigmZGlkRmluaXNoTG9hZCk7
CisKKyAgICBET01SYW5nZSAqcmVzdWx0UmFuZ2UgPSBbd2ViVmlldy5nZXQoKSBET01SYW5nZU9m
U3RyaW5nOkAibmVlZGxlcyIgcmVsYXRpdmVUbzpuaWwgb3B0aW9uczowXTsKKyAgICBFWFBFQ1Rf
RVEobmlsLCByZXN1bHRSYW5nZSk7CisKKyAgICBET01SYW5nZSAqbmVlZGxlUmFuZ2UgPSBbd2Vi
Vmlldy5nZXQoKSBET01SYW5nZU9mU3RyaW5nOkAibmVlZGxlIiByZWxhdGl2ZVRvOm5pbCBvcHRp
b25zOjBdOworICAgIEVYUEVDVF9FUSgyOCwgbmVlZGxlUmFuZ2Uuc3RhcnRPZmZzZXQpOworCisg
ICAgcmVzdWx0UmFuZ2UgPSBbd2ViVmlldy5nZXQoKSBET01SYW5nZU9mU3RyaW5nOkAic3RhY2si
IHJlbGF0aXZlVG86bmVlZGxlUmFuZ2Ugb3B0aW9uczowXTsKKyAgICBFWFBFQ1RfRVEoNDMsIHJl
c3VsdFJhbmdlLnN0YXJ0T2Zmc2V0KTsKKworICAgIHJlc3VsdFJhbmdlID0gW3dlYlZpZXcuZ2V0
KCkgRE9NUmFuZ2VPZlN0cmluZzpAInN0YWNrIiByZWxhdGl2ZVRvOm5lZWRsZVJhbmdlIG9wdGlv
bnM6V2ViRmluZE9wdGlvbnNCYWNrd2FyZHNdOworICAgIEVYUEVDVF9FUShuaWwsIHJlc3VsdFJh
bmdlKTsKKworICAgIFJldGFpblB0cjxXZWJWaWV3PiBvdGhlcldlYlZpZXcoQWRvcHROUywgW1tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3QgZnJhbWVOYW1lOm5pbCBncm91
cE5hbWU6bmlsXSk7CisgICAgRE9NUmFuZ2UgKmZvcmVpZ25SYW5nZSA9IFtbW290aGVyV2ViVmll
dy5nZXQoKSBtYWluRnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVSYW5nZV07CisgICAgcmVzdWx0
UmFuZ2UgPSBbd2ViVmlldy5nZXQoKSBET01SYW5nZU9mU3RyaW5nOkAibmVlZGxlIiByZWxhdGl2
ZVRvOmZvcmVpZ25SYW5nZSBvcHRpb25zOjBdOworICAgIEVYUEVDVF9FUShuaWwsIHJlc3VsdFJh
bmdlKTsKKworICAgIHJlc3VsdFJhbmdlID0gW3dlYlZpZXcuZ2V0KCkgRE9NUmFuZ2VPZlN0cmlu
ZzpAImhlcmUiIHJlbGF0aXZlVG86bmVlZGxlUmFuZ2Ugb3B0aW9uczowXTsKKyAgICBFWFBFQ1Rf
RVEoMSwgcmVzdWx0UmFuZ2Uuc3RhcnRPZmZzZXQpOworCisgICAgcmVzdWx0UmFuZ2UgPSBbd2Vi
Vmlldy5nZXQoKSBET01SYW5nZU9mU3RyaW5nOkAiaGVyZSIgcmVsYXRpdmVUbzpyZXN1bHRSYW5n
ZSBvcHRpb25zOjBdOworICAgIEVYUEVDVF9FUSgyNSwgcmVzdWx0UmFuZ2Uuc3RhcnRPZmZzZXQp
OworCisgICAgcmVzdWx0UmFuZ2UgPSBbd2ViVmlldy5nZXQoKSBET01SYW5nZU9mU3RyaW5nOkAi
aGVyZSIgcmVsYXRpdmVUbzpyZXN1bHRSYW5nZSBvcHRpb25zOldlYkZpbmRPcHRpb25zV3JhcEFy
b3VuZF07CisgICAgRVhQRUNUX0VRKDYsIHJlc3VsdFJhbmdlLnN0YXJ0T2Zmc2V0KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="101952"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>