<?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>138552</bug_id>
          
          <creation_ts>2014-11-09 16:26:00 -0800</creation_ts>
          <short_desc>WK1: Support default actions for read-only text</short_desc>
          <delta_ts>2014-11-10 11:20:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1047434</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-11-09 16:26:00 -0800</bug_when>
    <thetext>WebKit 1 should support action menus for non-editable text.

rdar://problem/18877483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047435</commentid>
    <comment_count>1</comment_count>
      <attachid>241265</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-11-09 16:37:49 -0800</bug_when>
    <thetext>Created attachment 241265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047436</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-09 16:40:48 -0800</bug_when>
    <thetext>Attachment 241265 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebActionMenuController.mm:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/mac/WebView/WebActionMenuController.mm:320:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit/mac/WebView/WebActionMenuController.mm:409:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.h:40:  The parameter name &quot;position&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.h:40:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.h:41:  The parameter name &quot;position&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.h:41:  The parameter name &quot;selection&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.h:43:  The parameter name &quot;position&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.h:44:  The parameter name &quot;selection&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.h:45:  The parameter name &quot;hitTestResult&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/editing/DictionaryLookup.mm:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 11 in 16 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>1047502</commentid>
    <comment_count>3</comment_count>
      <attachid>241265</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-10 01:20:26 -0800</bug_when>
    <thetext>Comment on attachment 241265
Patch

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

Lots of stylebot comments.

&gt; Source/WebCore/editing/DictionaryLookup.h:43
&gt; +bool isPositionInRange(const VisiblePosition&amp; position, Range* range);
&gt; +bool shouldUseSelection(const VisiblePosition&amp; position, const VisibleSelection&amp; selection);
&gt; +
&gt; +PassRefPtr&lt;Range&gt; rangeExpandedAroundPositionByCharacters(const VisiblePosition&amp; position, int numberOfCharactersToExpand);

isPositionInRange and rangeExpandedAroundPositionByCharacters should probably be on VisiblePosition or Range or something, they&apos;re pretty generically useful (maybe there&apos;s already something there that we can replace these with?)

&gt; Source/WebCore/editing/DictionaryLookup.mm:29
&gt; +#include &quot;Document.h&quot;

all of these should be &apos;import&apos;

&gt; Source/WebCore/editing/DictionaryLookup.mm:77
&gt; +PassRefPtr&lt;Range&gt; rangeExpandedAroundPositionByCharacters(const VisiblePosition&amp; position, int numberOfCharactersToExpand)

Remind me to make use of this in Editor, where this code was originally stolen from.

&gt; Source/WebCore/editing/DictionaryLookup.mm:116
&gt; +    wkExtractWordDefinitionTokenRangeFromContextualString(fullPlainTextString, rangeToPass, options);

We should probably ditch the WKSI wrappers and add some LookUp SPI headers.

&gt; Source/WebKit/mac/WebView/WebActionMenuController.mm:297
&gt; +static DictionaryPopupInfo performDictionaryLookupForRange(Frame* frame, Range&amp; range, NSDictionary *options)

Can we put more of this in the WebCore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047568</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-11-10 11:16:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 241265 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241265&amp;action=review
&gt; 
&gt; Lots of stylebot comments.
&gt; 

Fixed!

&gt; &gt; Source/WebCore/editing/DictionaryLookup.h:43
&gt; &gt; +bool isPositionInRange(const VisiblePosition&amp; position, Range* range);
&gt; &gt; +bool shouldUseSelection(const VisiblePosition&amp; position, const VisibleSelection&amp; selection);
&gt; &gt; +
&gt; &gt; +PassRefPtr&lt;Range&gt; rangeExpandedAroundPositionByCharacters(const VisiblePosition&amp; position, int numberOfCharactersToExpand);
&gt; 
&gt; isPositionInRange and rangeExpandedAroundPositionByCharacters should
&gt; probably be on VisiblePosition or Range or something, they&apos;re pretty
&gt; generically useful (maybe there&apos;s already something there that we can
&gt; replace these with?)
&gt; 

Agreed. I filed https://bugs.webkit.org/show_bug.cgi?id=138567

&gt; &gt; Source/WebCore/editing/DictionaryLookup.mm:29
&gt; &gt; +#include &quot;Document.h&quot;
&gt; 
&gt; all of these should be &apos;import&apos;
&gt; 

Fixed!

&gt; &gt; Source/WebCore/editing/DictionaryLookup.mm:77
&gt; &gt; +PassRefPtr&lt;Range&gt; rangeExpandedAroundPositionByCharacters(const VisiblePosition&amp; position, int numberOfCharactersToExpand)
&gt; 
&gt; Remind me to make use of this in Editor, where this code was originally
&gt; stolen from.
&gt; 

Will do! I made a note of that in the bug I filed!

&gt; &gt; Source/WebCore/editing/DictionaryLookup.mm:116
&gt; &gt; +    wkExtractWordDefinitionTokenRangeFromContextualString(fullPlainTextString, rangeToPass, options);
&gt; 
&gt; We should probably ditch the WKSI wrappers and add some LookUp SPI headers.
&gt; 

Agreed. Will do this in the future.

&gt; &gt; Source/WebKit/mac/WebView/WebActionMenuController.mm:297
&gt; &gt; +static DictionaryPopupInfo performDictionaryLookupForRange(Frame* frame, Range&amp; range, NSDictionary *options)
&gt; 
&gt; Can we put more of this in the WebCore?

We talked about this in person. The answer is yes, but not trivially. There are small differences in the code for WK1, unfortunately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047569</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-11-10 11:20:41 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/175814</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241265</attachid>
            <date>2014-11-09 16:37:49 -0800</date>
            <delta_ts>2014-11-10 01:20:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>42872</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NTc5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE0LTExLTA5ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBXSzE6IFN1cHBvcnQgZGVmYXVsdCBh
Y3Rpb25zIGZvciByZWFkLW9ubHkgdGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NTUyCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMTg4Nzc0ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXSzEgbm93IG5lZWRzIHRvIGRvIGEgbG90IG9mIGRpY3Rp
b25hcnkgbG9va3VwIG9wZXJhdGlvbnMgdGhhdCBpdCBkaWQgbm90IAorICAgICAgICBwcmV2aW91
c2x5IGhhdmUgdG8gaGFuZGxlLiBTbyB0aGlzIHBhdGNoIHRha2VzIGEgbG90IG9mIHRoYXQgZnVu
Y3Rpb25hbGl0eSwgd2hpY2ggCisgICAgICAgIHdhcyBpbXBsZW1lbnRlZCBhcyBzdGF0aWMgZnVu
Y3Rpb25zIGluIFdlYlBhZ2VNYWMgZm9yIFdLMiBhbmQgbW92ZXMgaXQgaW50byAKKyAgICAgICAg
V2ViQ29yZS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0RpY3Rpb25hcnlM
b29rdXAuaDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9EaWN0aW9uYXJ5TG9va3VwLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzUG9zaXRpb25JblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNob3VsZFVzZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyYW5nZUV4cGFu
ZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6cmFuZ2VG
b3JEaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdl
Rm9yRGljdGlvbmFyeUxvb2t1cEF0SGl0VGVzdFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5tbToKKwogMjAxNC0xMS0wOSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIG1vcmUgY29ycmVjdCB3YXkgdG8gY29tcGFy
ZSBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFuZCB1c2UgaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCShyZXZpc2lvbiAxNzU3OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
d29ya2luZyBjb3B5KQpAQCAtMzE2LDcgKzMxNiw5IEBAIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJl
c3VsdEMxRVJLTlNfMTFMYXkKIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfMTFM
YXlvdXRQb2ludEVqampqCiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVSS05TXzE1SGl0
VGVzdExvY2F0aW9uRQogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktTMF8KK19fWk43
V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRXYKIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEQx
RXYKK19fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdGFTRVJLUzBfCiBfX1pON1dlYkNvcmUxM0lk
ZW50aWZpZXJSZXAzZ2V0RVBLYwogX19aTjdXZWJDb3JlMTNJZGVudGlmaWVyUmVwM2dldEVpCiBf
X1pON1dlYkNvcmUxM0pTSFRNTEVsZW1lbnQ2c19pbmZvRQpAQCAtMTA5Nyw2ICsxMDk5LDggQEAg
X19aTjdXZWJDb3JlMzdXaWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcAogX19aTjdXZWJDb3JlMzdX
aWRnZXRIaWVyYXJjaHlVcGRhdGVzU3VzcGVuc2lvblNjb3BlMzVzX3dpZGdldEhpZXJhcmNoeVVw
ZGF0ZVN1c3BlbmRDb3VudEUKIF9fWk43V2ViQ29yZTM3Y29tcHV0ZUZyZXNobmVzc0xpZmV0aW1l
Rm9ySFRUUEZhbWlseUVSS05TXzE2UmVzb3VyY2VSZXNwb25zZUVkCiBfX1pON1dlYkNvcmUzOHVw
ZGF0ZVJlc3BvbnNlSGVhZGVyc0FmdGVyUmV2YWxpZGF0aW9uRVJOU18xNlJlc291cmNlUmVzcG9u
c2VFUktTMF8KK19fWk43V2ViQ29yZTM5cmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFy
YWN0ZXJzRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FaQorX19aTjdXZWJDb3JlMzlyYW5nZUZvckRp
Y3Rpb25hcnlMb29rdXBBdEhpdFRlc3RSZXN1bHRFUktOU18xM0hpdFRlc3RSZXN1bHRFUFAxMk5T
RGljdGlvbmFyeQogX19aTjdXZWJDb3JlM1VSTDEwaW52YWxpZGF0ZUV2CiBfX1pON1dlYkNvcmUz
VVJMMTFzZXRQcm90b2NvbEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTNVUkw3c2V0UGF0
aEVSS04zV1RGNlN0cmluZ0UKQEAgLTIzNzMsNiArMjM3Nyw3IEBAIF9fWk43V2ViQ29yZTM0Y29u
dGV4dE1lbnVJdGVtVGFnRGVmYXVsdEQKIF9fWk43V2ViQ29yZTM1Y29udGV4dE1lbnVJdGVtVGFn
U2hvd1NwZWxsaW5nUGFuZWxFYgogX19aTjdXZWJDb3JlMzVjb250ZXh0TWVudUl0ZW1UYWdTaG93
U3Vic3RpdHV0aW9uc0ViCiBfX1pON1dlYkNvcmUzNWNvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1
dGlvbnNNZW51RXYKK19fWk43V2ViQ29yZTM2cmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uRVJLTlNfMTZWaXNpYmxlU2VsZWN0aW9uRVBQMTJOU0RpY3Rpb25hcnkKIF9fWk43V2Vi
Q29yZTM3Y29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25zTWVudUV2CiBfX1pON1dlYkNv
cmUzOGNvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51RXYKIF9fWk43V2ViQ29y
ZTQyY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nRXYKQEAgLTI0MzYs
NiArMjQ0MSw3IEBAIF93a0RyYXdGb2N1c1JpbmdBdFRpbWUKIF93a0RyYXdNZWRpYVNsaWRlclRy
YWNrCiBfd2tEcmF3TWVkaWFVSVBhcnQKIF93a0V4ZWN1dGFibGVXYXNMaW5rZWRPbk9yQmVmb3Jl
U25vd0xlb3BhcmQKK193a0V4dHJhY3RXb3JkRGVmaW5pdGlvblRva2VuUmFuZ2VGcm9tQ29udGV4
dHVhbFN0cmluZwogX3drR2V0QVhUZXh0TWFya2VyUmFuZ2VUeXBlSUQKIF93a0dldEFYVGV4dE1h
cmtlclR5cGVJRAogX3drR2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2VyCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NzU3OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTMyNzEsNiArMzI3MSw4IEBACiAJCTkzNjI2NDBCMERFMTEz
N0QwMDlENUEwMCAvKiBDU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzYyNjQwQTBERTExMzdEMDA5RDVBMDAgLyog
Q1NTUmVmbGVjdGlvbkRpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzNzA5MThEMTQxNkQ4NkIwMDQ3NzMzMyAvKiB0ZXh0QXJlYVJl
c2l6ZUNvcm5lckAyeC5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzNzA5MThDMTQxNkQ4NkIwMDQ3NzMzMyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5l
ckAyeC5wbmcgKi87IH07CiAJCTkzNzdBQkEwMTVERUZFRUYwMDMxRkQwNCAvKiBQYWdpbmF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc3QUI5
RjE1REVGRUVGMDAzMUZEMDQgLyogUGFnaW5hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzN0ZGM0Q1MUExMDEyRDYwMDhFQkEzMSAvKiBE
aWN0aW9uYXJ5TG9va3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzdGRjNENDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3RkYzRDYxQTEwMTMxQjAwOEVCQTMxIC8q
IERpY3Rpb25hcnlMb29rdXAubW0gKi87IH07CiAJCTkzODBGNDczMDlBMTFBQjQwMDFGREIzNCAv
KiBXaWRnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM4MEY0NzEwOUExMUFCNDAwMUZEQjM0IC8qIFdpZGdldC5jcHAgKi87IH07CiAJCTkzODBG
NDc0MDlBMTFBQjQwMDFGREIzNCAvKiBXaWRnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzODBGNDcyMDlBMTFBQjQwMDFGREIzNCAvKiBXaWRnZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5Mzgw
RjQ3ODA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4MEY0NzcwOUExMUFDQzAwMUZEQjM0IC8qIFdp
ZGdldE1hYy5tbSAqLzsgfTsKQEAgLTEwNDMxLDYgKzEwNDMzLDggQEAKIAkJOTM2REQwM0EwOUNF
QUMyNzAwNTZBRThDIC8qIFJhbmdlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSYW5nZS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzA5MThDMTQxNkQ4NkIwMDQ3NzMz
MyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeC5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSAidGV4dEFyZWFSZXNp
emVDb3JuZXJAMngucG5nIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3N0FCOUYx
NURFRkVFRjAwMzFGRDA0IC8qIFBhZ2luYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnaW5hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzdG
RjNENDFBMTAxMkQ2MDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0aW9uYXJ5TG9va3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTkzN0ZGM0Q2MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3Vw
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGljdGlvbmFyeUxv
b2t1cC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4MEY0NzEwOUExMUFCNDAw
MUZEQjM0IC8qIFdpZGdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2lkZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4MEY0NzIwOUEx
MUFCNDAwMUZEQjM0IC8qIFdpZGdldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2lkZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzODBGNDc3MDlBMTFB
Q0MwMDFGREIzNCAvKiBXaWRnZXRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2lkZ2V0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjE5OTAsNiArMjE5OTQsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQ0U3QjJEQUYxNTg2QUJB
RDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oICovLAogCQkJCUNFN0Iy
REIwMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi8s
CisJCQkJOTM3RkYzRDQxQTEwMTJENjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCAqLywK
KwkJCQk5MzdGRjNENjFBMTAxMzFCMDA4RUJBMzEgLyogRGljdGlvbmFyeUxvb2t1cC5tbSAqLywK
IAkJCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovLAogCQkJCTRB
OEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBGcmFtZVNlbGVjdGlvbk1hYy5tbSAqLywKIAkJCQlD
RTdCMkRCMTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLmggKi8s
CkBAIC0yNjcwNyw2ICsyNjcxMyw3IEBACiAJCQkJOTM4MEY0NzQwOUExMUFCNDAwMUZEQjM0IC8q
IFdpZGdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBOUQ5RUExOTVCOTMxRjAwMUIyQjVDIC8q
IEdhbWVwYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDExRENCMTE2NEMzOUE4MDBE
NDlCQzEgLyogV2lkdGhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM3RkYzRDUxQTEwMTJE
NjAwOEVCQTMxIC8qIERpY3Rpb25hcnlMb29rdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOUIw
MkVGMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzgyNDNFOTBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdFOTlBRjUzMEIxMzg0NjQ2OEZCMDFBNSAvKiBXaW5kb3dGb2N1c0FsbG93ZWRJ
bmRpY2F0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjcxNDAsNiArMjcxNDcsNyBAQAogCQkJCTQ5
RTkxMkFDMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb25MaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5REQ2MDk5RTY0OTIwMDU2RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQThGNkJCQzBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRp
b25DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MzdGRjNENzFBMTAxMzFCMDA4RUJBMzEg
LyogRGljdGlvbmFyeUxvb2t1cC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBOEY2QkJFMERCNTVD
REMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMjRGNTRFQUMxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBOEY2QkMwMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RpY3Rpb25hcnlMb29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RpY3Rpb25hcnlMb29rdXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGljdGlvbmFyeUxvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpY3Rpb25hcnlMb29rdXBfaAorI2RlZmluZSBEaWN0
aW9uYXJ5TG9va3VwX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK0BjbGFzcyBO
U0RpY3Rpb25hcnk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSGl0VGVzdFJlc3Vs
dDsKK2NsYXNzIFJhbmdlOworY2xhc3MgVmlzaWJsZVBvc2l0aW9uOworY2xhc3MgVmlzaWJsZVNl
bGVjdGlvbjsKKworYm9vbCBpc1Bvc2l0aW9uSW5SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBSYW5nZSogcmFuZ2UpOworYm9vbCBzaG91bGRVc2VTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKTsKKworUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlD
aGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJPZkNo
YXJhY3RlcnNUb0V4cGFuZCk7CitQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUZvckRpY3Rpb25hcnlM
b29rdXBGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOU0Rp
Y3Rpb25hcnkgKipvcHRpb25zKTsKK1Bhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yRGljdGlvbmFy
eUxvb2t1cEF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0
LCBOU0RpY3Rpb25hcnkgKipvcHRpb25zKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRGljdGlvbmFyeUxvb2t1cF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RpY3Rpb25hcnlMb29rdXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EaWN0aW9uYXJ5TG9va3VwLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EaWN0aW9uYXJ5TG9va3VwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpY3Rpb25hcnlM
b29rdXAuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgor
I2luY2x1ZGUgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisj
aW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0
aW9uLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIlZpc2libGVV
bml0cy5oIgorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIGlzUG9zaXRpb25JblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIFJhbmdlKiByYW5nZSkKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IHBvc2l0aW9uUmFuZ2Ug
PSBtYWtlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIHJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NU
QVJULCBwb3NpdGlvblJhbmdlLmdldCgpLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIXJhbmdlLT5pc1BvaW50SW5SYW5nZShwb3NpdGlvblJhbmdl
LT5zdGFydENvbnRhaW5lcigpLCBwb3NpdGlvblJhbmdlLT5zdGFydE9mZnNldCgpLCBlYykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNob3VsZFVzZVNlbGVjdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pCit7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBpc1Bvc2l0aW9uSW5SYW5nZShwb3NpdGlvbiwgc2VsZWN0ZWRS
YW5nZS5nZXQoKSk7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRXhwYW5kZWRBcm91bmRQ
b3NpdGlvbkJ5Q2hhcmFjdGVycyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQg
bnVtYmVyT2ZDaGFyYWN0ZXJzVG9FeHBhbmQpCit7CisgICAgUG9zaXRpb24gc3RhcnQgPSBwb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIGVuZCA9IHBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYXJhY3RlcnNU
b0V4cGFuZDsgKytpKSB7CisgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHN0
YXJ0KSA9PSBMVFIpCisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0LnByZXZpb3VzKENoYXJhY3Rl
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQubmV4dChDaGFyYWN0
ZXIpOworCisgICAgICAgIGlmIChkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKGVuZCkgPT0gTFRS
KQorICAgICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZW5kID0gZW5kLnByZXZpb3VzKENoYXJhY3Rlcik7CisgICAgfQorCisgICAg
cmV0dXJuIG1ha2VSYW5nZShzdGFydCwgZW5kKTsKK30KKworUGFzc1JlZlB0cjxSYW5nZT4gcmFu
Z2VGb3JEaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucykKK3sKKyAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgVmlzaWJsZVBv
c2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIFZp
c2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworCisg
ICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFy
YWdyYXBocyBvZiB0ZXh0LgorICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAgIFZpc2libGVQb3NpdGlvbiBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworCisgICAgaW50IGxlbmd0
aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBpbnQgbGVuZ3RoVG9T
ZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9
IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5k
IC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7CisKKyAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0
cmluZyA9IHBsYWluVGV4dChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCku
Z2V0KCkpOworCisgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50
LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KKyAgICB3a0V4dHJh
Y3RXb3JkRGVmaW5pdGlvblRva2VuUmFuZ2VGcm9tQ29udGV4dHVhbFN0cmluZyhmdWxsUGxhaW5U
ZXh0U3RyaW5nLCByYW5nZVRvUGFzcywgb3B0aW9ucyk7CisgICAgCisgICAgcmV0dXJuIHNlbGVj
dGVkUmFuZ2UucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUZvckRpY3Rp
b25hcnlMb29rdXBBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJl
c3VsdCwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucykKK3sKKyAgICBOb2RlKiBub2RlID0gaGl0VGVz
dFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGVyZSBp
cyBubyBjaGFyYWN0ZXIgYXQgdGhlIHBvaW50LgorICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9p
bnQoaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHJlbmRl
cmVyLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1bHQubG9jYWxQb2ludCgpLCBudWxscHRy
KTsKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHBvc2l0aW9uID0gZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2hvdWxkVXNlU2VsZWN0aW9u
KHBvc2l0aW9uLCBzZWxlY3Rpb24pKQorICAgICAgICByZXR1cm4gcmFuZ2VGb3JEaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyk7CisKKyAgICAvLyBBcyBjb250
ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFu
ZCBhZnRlciB0aGUgcG9pbnQuCisgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2Ug
PSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7
CisgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBw
b3NpdGlvbikuZ2V0KCkpLCAwKTsKKworICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0g
cGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7CisKKyAgICBOU1JhbmdlIGV4dHJh
Y3RlZFJhbmdlID0gd2tFeHRyYWN0V29yZERlZmluaXRpb25Ub2tlblJhbmdlRnJvbUNvbnRleHR1
YWxTdHJpbmcoZnVsbFBsYWluVGV4dFN0cmluZywgcmFuZ2VUb1Bhc3MsIG9wdGlvbnMpOworCisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBzb21ldGltZXMgcmV0dXJucyB7TlNOb3RGb3VuZCwgMH0gaWYg
aXQgd2FzIHVuYWJsZSB0byBkZXRlcm1pbmUgYSBnb29kIHN0cmluZy4KKyAgICBpZiAoZXh0cmFj
dGVkUmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2Uu
Z2V0KCksIGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uLCBleHRyYWN0ZWRSYW5nZS5sZW5ndGgpOwor
fQorCit9IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5oCShyZXZpc2lvbiAxNzU3OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsNiArMTAzLDcgQEAgT0JKQ19DTEFTUyBOU0NvbnRyb2w7CiBPQkpDX0NMQVNTIE5TQ3Vy
c29yOwogT0JKQ19DTEFTUyBOU0RhdGE7CiBPQkpDX0NMQVNTIE5TRGF0ZTsKK09CSkNfQ0xBU1Mg
TlNEaWN0aW9uYXJ5OwogT0JKQ19DTEFTUyBOU0V2ZW50OwogT0JKQ19DTEFTUyBOU0ZvbnQ7CiBP
QkpDX0NMQVNTIE5TSFRUUENvb2tpZTsKQEAgLTI2MCw2ICsyNjEsOCBAQCBleHRlcm4gaW50ICgq
d2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUpCiAKIGV4dGVybiBib29sICgqd2tFeGVjdXRhYmxl
V2FzTGlua2VkT25PckJlZm9yZVNub3dMZW9wYXJkKSh2b2lkKTsKIAorZXh0ZXJuIE5TUmFuZ2Ug
KCp3a0V4dHJhY3RXb3JkRGVmaW5pdGlvblRva2VuUmFuZ2VGcm9tQ29udGV4dHVhbFN0cmluZyko
TlNTdHJpbmcgKmNvbnRleHRTdHJpbmcsIE5TUmFuZ2UgcmFuZ2UsIE5TRGljdGlvbmFyeSAqKm9w
dGlvbnMpOworCiBleHRlcm4gQ0ZTdHJpbmdSZWYgKCp3a0NvcHlEZWZhdWx0U2VhcmNoUHJvdmlk
ZXJEaXNwbGF5TmFtZSkodm9pZCk7CiAKIGV4dGVybiBOU0N1cnNvciAqKCp3a0N1cnNvcikoY29u
c3QgY2hhciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDE3NTc5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDggQEAgaW50ICgqd2tSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUp
KHZvaWQpOwogCiBib29sICgqd2tFeGVjdXRhYmxlV2FzTGlua2VkT25PckJlZm9yZVNub3dMZW9w
YXJkKSh2b2lkKTsKIAorTlNSYW5nZSAoKndrRXh0cmFjdFdvcmREZWZpbml0aW9uVG9rZW5SYW5n
ZUZyb21Db250ZXh0dWFsU3RyaW5nKShOU1N0cmluZyAqY29udGV4dFN0cmluZywgTlNSYW5nZSBy
YW5nZSwgTlNEaWN0aW9uYXJ5ICoqb3B0aW9ucyk7CisKIENGU3RyaW5nUmVmICgqd2tDb3B5RGVm
YXVsdFNlYXJjaFByb3ZpZGVyRGlzcGxheU5hbWUpKHZvaWQpOwogCiBOU0N1cnNvciAqKCp3a0N1
cnNvcikoY29uc3QgY2hhciopOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTc1Nzk2KQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTQtMTEtMDkgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFdL
MTogU3VwcG9ydCBkZWZhdWx0IGFjdGlvbnMgZm9yIHJlYWQtb25seSB0ZXh0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg1NTIKKyAgICAgICAgLWFu
ZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8xODg3NzQ4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdLMSBub3cgbmVlZHMg
dG8gZG8gYSBsb3Qgb2YgZGljdGlvbmFyeSBsb29rdXAgb3BlcmF0aW9ucyB0aGF0IGl0IGRpZCBu
b3QgCisgICAgICAgIHByZXZpb3VzbHkgaGF2ZSB0byBoYW5kbGUuIFNvIHRoaXMgcGF0Y2ggdGFr
ZXMgYSBsb3Qgb2YgdGhhdCBmdW5jdGlvbmFsaXR5LCB3aGljaCAKKyAgICAgICAgd2FzIGltcGxl
bWVudGVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gV2ViUGFnZU1hYyBmb3IgV0syIGFuZCBtb3Zl
cyBpdCBpbnRvIAorICAgICAgICBXZWJDb3JlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAoSW5pdFdlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlM
b29rdXBGb3JSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OmlzUG9zaXRpb25JblJhbmdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6c2hvdWxkVXNlU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6cmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6cmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6cmFuZ2VGb3JEaWN0aW9uYXJ5TG9v
a3VwQXRIaXRUZXN0UmVzdWx0KTogRGVsZXRlZC4KKwogMjAxNC0xMS0wOSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIG1vcmUgY29ycmVjdCB3YXkgdG8g
Y29tcGFyZSBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFuZCB1c2UgaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDE3NTc5NikKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw3IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2Uodm9pZCkKICNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBJTklUKFJlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZSk7CiAgICAgICAgIElOSVQoRXhlY3V0YWJsZVdhc0xpbmtlZE9u
T3JCZWZvcmVTbm93TGVvcGFyZCk7CisgICAgICAgIElOSVQoRXh0cmFjdFdvcmREZWZpbml0aW9u
VG9rZW5SYW5nZUZyb21Db250ZXh0dWFsU3RyaW5nKTsKICAgICAgICAgSU5JVChDb3B5RGVmYXVs
dFNlYXJjaFByb3ZpZGVyRGlzcGxheU5hbWUpOwogICAgICAgICBJTklUKEN1cnNvcik7CiAgICAg
ICAgIElOSVQoV2luZG93U2V0U2NhbGVkRnJhbWUpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gMTc1
Nzk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FY
T2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRDb250cm9sbGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0RhdGFEZXRlY3RvcnNTUEkuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RGljdGlvbmFyeUxvb2t1cC5oPgogI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
TG9hZGVyLmg+CkBAIC00NzYsMTIzICs0NzcsNiBAQCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRT
dWJzdHJpbmdGb3JDaGFyCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1
dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhyZXN1bHQsIEVkaXRpbmdSYW5nZShl
ZGl0aW5nUmFuZ2UubG9jYXRpb24sIFtyZXN1bHQuc3RyaW5nIGxlbmd0aF0pLCBjYWxsYmFja0lE
KSk7CiB9CiAKLXN0YXRpYyBib29sIGlzUG9zaXRpb25JblJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIFJhbmdlKiByYW5nZSkKLXsKLSAgICBSZWZQdHI8UmFuZ2U+IHBvc2l0
aW9uUmFuZ2UgPSBtYWtlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTsKLQotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIHJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNU
QVJUX1RPX1NUQVJULCBwb3NpdGlvblJhbmdlLmdldCgpLCBlYyk7Ci0gICAgaWYgKGVjKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJhbmdlLT5pc1BvaW50SW5SYW5nZShwb3Np
dGlvblJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBwb3NpdGlvblJhbmdlLT5zdGFydE9mZnNldCgp
LCBlYykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0g
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaXNQb3NpdGlvbkluUmFuZ2UocG9z
aXRpb24sIHNlbGVjdGVkUmFuZ2UuZ2V0KCkpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxSYW5n
ZT4gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zaXRpb24sIGludCBudW1iZXJPZkNoYXJhY3RlcnNUb0V4cGFuZCkKLXsKLSAg
ICBQb3NpdGlvbiBzdGFydCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgUG9zaXRp
b24gZW5kID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlck9mQ2hhcmFjdGVyc1RvRXhwYW5kOyArK2kpIHsKLSAgICAgICAgaWYgKGRpcmVj
dGlvbk9mRW5jbG9zaW5nQmxvY2soc3RhcnQpID09IExUUikKLSAgICAgICAgICAgIHN0YXJ0ID0g
c3RhcnQucHJldmlvdXMoQ2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Rh
cnQgPSBzdGFydC5uZXh0KENoYXJhY3Rlcik7Ci0KLSAgICAgICAgaWYgKGRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2soZW5kKSA9PSBMVFIpCi0gICAgICAgICAgICBlbmQgPSBlbmQubmV4dChDaGFy
YWN0ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbmQgPSBlbmQucHJldmlvdXMoQ2hh
cmFjdGVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFrZVJhbmdlKHN0YXJ0LCBlbmQpOwotfQot
Ci1zdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTlNEaWN0aW9uYXJ5ICoq
b3B0aW9ucykKLXsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQg
PSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdv
aW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgIFZpc2li
bGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3Rh
cnQpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChz
ZWxlY3Rpb25FbmQpOwotCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3Rh
cnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQo
KSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0
aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7
Ci0KLSAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCkuZ2V0KCkpOwotCi0gICAgLy8gU2luY2Ugd2Ug
YWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUg
cmV0dXJuZWQgb3B0aW9ucy4KLSAgICBXS0V4dHJhY3RXb3JkRGVmaW5pdGlvblRva2VuUmFuZ2VG
cm9tQ29udGV4dHVhbFN0cmluZyhmdWxsUGxhaW5UZXh0U3RyaW5nLCByYW5nZVRvUGFzcywgb3B0
aW9ucyk7Ci0gICAgCi0gICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UucmVsZWFzZSgpOwotfQotCi1z
dGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwQXRIaXRUZXN0
UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIE5TRGljdGlvbmFyeSAq
Km9wdGlvbnMpCi17Ci0gICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1l
bnQoKS5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhcmFjdGVyIGF0IHRo
ZSBwb2ludC4KLSAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGhpdFRlc3RSZXN1bHQucm91
bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2lu
dChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7Ci0gICAgaWYgKHNob3VsZFVzZVNlbGVjdGlvbihwb3NpdGlvbiwgc2VsZWN0aW9u
KSkKLSAgICAgICAgcmV0dXJuIHJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihz
ZWxlY3Rpb24sIG9wdGlvbnMpOwotCi0gICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRv
IHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50Lgot
ICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3Vu
ZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgIGlmICghZnVsbENoYXJh
Y3RlclJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIE5TUmFuZ2UgcmFuZ2VU
b1Bhc3MgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShm
dWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKSwgMCk7
Ci0KLSAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFj
dGVyUmFuZ2UuZ2V0KCkpOwotCi0gICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IFdLRXh0cmFj
dFdvcmREZWZpbml0aW9uVG9rZW5SYW5nZUZyb21Db250ZXh0dWFsU3RyaW5nKGZ1bGxQbGFpblRl
eHRTdHJpbmcsIHJhbmdlVG9QYXNzLCBvcHRpb25zKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24g
c29tZXRpbWVzIHJldHVybnMge05TTm90Rm91bmQsIDB9IGlmIGl0IHdhcyB1bmFibGUgdG8gZGV0
ZXJtaW5lIGEgZ29vZCBzdHJpbmcuCi0gICAgaWYgKGV4dHJhY3RlZFJhbmdlLmxvY2F0aW9uID09
IE5TTm90Rm91bmQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFRleHRJ
dGVyYXRvcjo6c3VicmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpLCBleHRyYWN0ZWRSYW5n
ZS5sb2NhdGlvbiwgZXh0cmFjdGVkUmFuZ2UubGVuZ3RoKTsKLX0KLQogdm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQ
b2ludCkKIHsKICAgICBpZiAoUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JG
cmFtZSgmbV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKQEAgLTY0MCw3ICs1MjQsNyBAQCB2b2lkIFdl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yCiAgICAgICAgIHJldHVybjsKIAogICAg
IEludFJlY3QgcmFuZ2VSZWN0ID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFk
c1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKLSAgICAKKwogICAgIERpY3Rpb25hcnlQb3B1
cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdp
biA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIChzdHlsZS5mb250
TWV0cmljcygpLmFzY2VudCgpICogcGFnZVNjYWxlRmFjdG9yKCkpKTsKICAgICBkaWN0aW9uYXJ5
UG9wdXBJbmZvLm9wdGlvbnMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKW9wdGlvbnM7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNzU3OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NyBAQAorMjAxNC0xMS0wOSAgQmV0aCBEYWtp
biAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgV0sxOiBTdXBwb3J0IGRlZmF1bHQgYWN0
aW9ucyBmb3IgcmVhZC1vbmx5IHRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzODU1MgorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzE4ODc3NDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTmV3IFdLU3lzdGVtSW50ZXJmYWNlIGZ1bmN0aW9ucyB0aGF0
IFdlYkNvcmUgbmVlZHMgdG8gdXNlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlN5c3Rl
bUludGVyZmFjZS5tbToKKyAgICAgICAgKEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKToKKwor
ICAgICAgICBXZWJBY3Rpb25NZW51Q29udHJvbGxlciBub3cga2VlcHMgYW4gaXZhciBmb3IgdGhl
IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQuIFRoaXMgCisgICAgICAgIG1ha2VzIGEgbG90IG9mIHRo
aW5ncyBlYXNpZXIuCisgICAgICAgICogV2ViVmlldy9XZWJBY3Rpb25NZW51Q29udHJvbGxlci5o
OgorICAgICAgICAqIFdlYlZpZXcvV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIubW06CisKKyAgICAg
ICAgUGVyZm9ybSB0aGUgaGl0IHRlc3Qgb3Vyc2VsdmVzIGluc3RlYWQgb2YgY2FsbGluZyBpbnRv
IFdlYlZpZXcgc28gdGhhdCB3ZSBjYW4gbW9yZSAKKyAgICAgICAgZWFzaWx5IHNhdmUgdGhlIFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQgZm9yIG91cnNlbHZlcy4KKyAgICAgICAgKC1bV2ViQWN0aW9u
TWVudUNvbnRyb2xsZXIgcGVyZm9ybUhpdFRlc3RBdFBvaW50Ol0pOgorCisgICAgICAgIENsZWFy
IHNlbGVjdGlvbiBmb3Igbm9uLXRleHQgbWVudXMuCisgICAgICAgICgtW1dlYkFjdGlvbk1lbnVD
b250cm9sbGVyIHByZXBhcmVGb3JNZW51OndpdGhFdmVudDpdKToKKworICAgICAgICBSZS1zZXQg
dGhlIF90eXBlIGhlcmUganVzdCB0byBiZSBzYWZlLgorICAgICAgICAoLVtXZWJBY3Rpb25NZW51
Q29udHJvbGxlciBkaWRDbG9zZU1lbnU6d2l0aEV2ZW50Ol0pOgorCisgICAgICAgIE1vdmluZyB0
aGlzIG1ldGhvZCB0byBiZSBuZXh0IHRvIHRoZSBsaW5rIGFjdGlvbnMgc28gdGhleSBjYW4gYmUg
d2l0aGluIGEgcHJhZ21hIAorICAgICAgICBtYXJrLgorICAgICAgICAoLVtXZWJBY3Rpb25NZW51
Q29udHJvbGxlciBfZGVmYXVsdE1lbnVJdGVtc0Zvckxpbms6XSk6CisKKyAgICAgICAgTmV3IG1l
dGhvZCBmb3IgZGVmYXVsdCB0ZXh0IGFjdGlvbnMg4oCUIGxvb2t1cCBhbmQgY29weS4KKyAgICAg
ICAgKC1bV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIgX2RlZmF1bHRNZW51SXRlbXNGb3JUZXh0Ol0p
OgorICAgICAgICAoLVtXZWJBY3Rpb25NZW51Q29udHJvbGxlciBfY29weVNlbGVjdGlvbjpdKToK
KyAgICAgICAgKC1bV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIgX2xvb2t1cFRleHQ6XSk6CisKKyAg
ICAgICAgSWYgdGhlcmUgaXMgbm90IGFscmVhZHkgYSBzZWxlY3Rpb24sIGludm9raW5nIHRoZSBh
Y3Rpb24gbWVudSBvbiB0ZXh0IHNob3VsZCAKKyAgICAgICAgc2VsZWN0IHRoZSBsb29rdXAgdGV4
dC4KKyAgICAgICAgKC1bV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIgX3NlbGVjdExvb2t1cFRleHRd
KToKKyAgICAgICAgKHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UpOgorCisgICAgICAgIEhhbmRsZSB0
ZXh0IG5vdy4KKyAgICAgICAgKC1bV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIgX2NyZWF0ZUFjdGlv
bk1lbnVJdGVtRm9yVGFnOndpdGhIaXRUZXN0UmVzdWx0Ol0pOgorICAgICAgICAoLVtXZWJBY3Rp
b25NZW51Q29udHJvbGxlciBfZGVmYXVsdE1lbnVJdGVtc0ZvckhpdFRlc3RSZXN1bHQ6XSk6CisK
KyAgICAgICAgTmV3IGVudW0gdmFsdWVzLgorICAgICAgICAqIFdlYlZpZXcvV2ViVUlEZWxlZ2F0
ZVByaXZhdGUuaDoKKworICAgICAgICBQYXNzIGRpZENsb3NlTWVudSBvbiB0byB0aGUgY29udHJv
bGxlci4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
ZGlkQ2xvc2VNZW51OndpdGhFdmVudDpdKToKKwogMjAxNC0xMS0wOSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIG1vcmUgY29ycmVjdCB3YXkgdG8gY29t
cGFyZSBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFuZCB1c2UgaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0J
KHJldmlzaW9uIDE3NTc5NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YlN5c3RlbUludGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw3IEBAIHZv
aWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKICNpZiAhUExBVEZPUk0oSU9TKQog
ICAgIElOSVQoUmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKTsKICAgICBJTklUKEV4ZWN1dGFibGVX
YXNMaW5rZWRPbk9yQmVmb3JlU25vd0xlb3BhcmQpOworICAgIElOSVQoRXh0cmFjdFdvcmREZWZp
bml0aW9uVG9rZW5SYW5nZUZyb21Db250ZXh0dWFsU3RyaW5nKTsKICAgICBJTklUKENvcHlEZWZh
dWx0U2VhcmNoUHJvdmlkZXJEaXNwbGF5TmFtZSk7CiAgICAgSU5JVChDdXJzb3IpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkFjdGlvbk1lbnVDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJBY3Rpb25NZW51
Q29udHJvbGxlci5oCShyZXZpc2lvbiAxNzU3OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkFjdGlvbk1lbnVDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDcgQEAKICAqLwogCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCA8
V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAKIEBjbGFzcyBXZWJWaWV3OwogCkBAIC0zMSwxMCAr
MzIsMTIgQEAgQGludGVyZmFjZSBXZWJBY3Rpb25NZW51Q29udHJvbGxlciA6IE5TTwogQHByaXZh
dGUKICAgICBXZWJWaWV3ICpfd2ViVmlldzsKICAgICBXZWJBY3Rpb25NZW51VHlwZSBfdHlwZTsK
KyAgICBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0IF9oaXRUZXN0UmVzdWx0OwogfQogCiAtIChpZClp
bml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OwogLSAodm9pZCl3ZWJWaWV3Q2xvc2Vk
OwogLSAodm9pZClwcmVwYXJlRm9yTWVudTooTlNNZW51ICopbWVudSB3aXRoRXZlbnQ6KE5TRXZl
bnQgKilldmVudDsKKy0gKHZvaWQpZGlkQ2xvc2VNZW51OihOU01lbnUgKiltZW51IHdpdGhFdmVu
dDooTlNFdmVudCAqKWV2ZW50OwogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkFjdGlvbk1lbnVDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDE3NTc5
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDEzICsyNywyNiBAQAogCiAjaW1wb3J0ICJET01FbGVt
ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2Vi
RG9jdW1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRWxlbWVudERpY3Rpb25hcnkuaCIKKyNp
bXBvcnQgIldlYkhUTUxWaWV3LmgiCisjaW1wb3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCisj
aW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2Uu
aCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50
ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRGljdGlvbmFyeUxvb2t1cC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1ZpZXdT
UEkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29m
dExpbmtpbmcuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8
b2JqYy9vYmpjLWNsYXNzLmg+CiAjaW1wb3J0IDxvYmpjL29iamMuaD4KIApAQCAtNTIsNiArNjUs
MTIgQEAgLSAodm9pZClzZXRBdXRvbWF0aWNhbGx5Q2xvc2VXaXRoTWFzazooTgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAorc3RydWN0IERpY3Rpb25hcnlQb3B1cEluZm8geworICAgIE5T
UG9pbnQgb3JpZ2luOworICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IG9wdGlvbnM7CisgICAg
UmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZzsKK307CisKIEBp
bXBsZW1lbnRhdGlvbiBXZWJBY3Rpb25NZW51Q29udHJvbGxlcgogCiAtIChpZClpbml0V2l0aFdl
YlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3CkBAIC03MCw2ICs4OSwyMCBAQCAtICh2b2lkKXdlYlZp
ZXdDbG9zZWQKICAgICBfd2ViVmlldyA9IG5pbDsKIH0KIAorLSAoV2ViRWxlbWVudERpY3Rpb25h
cnkgKilwZXJmb3JtSGl0VGVzdEF0UG9pbnQ6KE5TUG9pbnQpd2luZG93UG9pbnQKK3sKKyAgICBX
ZWJIVE1MVmlldyAqZG9jdW1lbnRWaWV3ID0gW1tbX3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJh
bWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBOU1BvaW50IHBvaW50ID0gW2RvY3Vt
ZW50VmlldyBjb252ZXJ0UG9pbnQ6d2luZG93UG9pbnQgZnJvbVZpZXc6bmlsXTsKKworICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtkb2N1bWVudFZpZXcgX2ZyYW1lXSk7CisgICAgaWYgKCFj
b3JlRnJhbWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRl
c3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVz
dFJlcXVlc3Q6OkFjdGl2ZTsKKyAgICBfaGl0VGVzdFJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRI
YW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQocG9pbnQpLCBoaXRUeXBlKTsK
KworICAgIHJldHVybiBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRU
ZXN0UmVzdWx0Ol9oaXRUZXN0UmVzdWx0XSBhdXRvcmVsZWFzZV07Cit9CisKIC0gKHZvaWQpcHJl
cGFyZUZvck1lbnU6KE5TTWVudSAqKW1lbnUgd2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKIHsK
ICAgICBpZiAoIV93ZWJWaWV3KQpAQCAtODEsMTAgKzExNCwxMiBAQCAtICh2b2lkKXByZXBhcmVG
b3JNZW51OihOU01lbnUgKiltZW51IHdpCiAKICAgICBbYWN0aW9uTWVudSByZW1vdmVBbGxJdGVt
c107CiAKLSAgICBOU0RpY3Rpb25hcnkgKmhpdFRlc3RSZXN1bHQgPSBbX3dlYlZpZXcgZWxlbWVu
dEF0UG9pbnQ6W193ZWJWaWV3IGNvbnZlcnRQb2ludDpldmVudC5sb2NhdGlvbkluV2luZG93IGZy
b21WaWV3Om5pbF1dOwotCisgICAgV2ViRWxlbWVudERpY3Rpb25hcnkgKmhpdFRlc3RSZXN1bHQg
PSBbc2VsZiBwZXJmb3JtSGl0VGVzdEF0UG9pbnQ6W193ZWJWaWV3IGNvbnZlcnRQb2ludDpldmVu
dC5sb2NhdGlvbkluV2luZG93IGZyb21WaWV3Om5pbF1dOwogICAgIE5TQXJyYXkgKm1lbnVJdGVt
cyA9IFtzZWxmIF9kZWZhdWx0TWVudUl0ZW1zRm9ySGl0VGVzdFJlc3VsdDpoaXRUZXN0UmVzdWx0
XTsKIAorICAgIGlmIChfdHlwZSAhPSBXZWJBY3Rpb25NZW51UmVhZE9ubHlUZXh0KQorICAgICAg
ICBbW193ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBfY2xlYXJTZWxlY3Rpb25dOworCiAg
ICAgLy8gQWxsb3cgY2xpZW50cyB0byBjdXN0b21pemUgdGhlIG1lbnUgaXRlbXMuCiAgICAgaWYg
KFtbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2Vi
VmlldzphY3Rpb25NZW51SXRlbXNGb3JIaXRUZXN0UmVzdWx0OndpdGhUeXBlOmRlZmF1bHRBY3Rp
b25NZW51SXRlbXM6KV0pCiAgICAgICAgIG1lbnVJdGVtcyA9IFtbX3dlYlZpZXcgVUlEZWxlZ2F0
ZV0gX3dlYlZpZXc6X3dlYlZpZXcgYWN0aW9uTWVudUl0ZW1zRm9ySGl0VGVzdFJlc3VsdDpoaXRU
ZXN0UmVzdWx0IHdpdGhUeXBlOl90eXBlIGRlZmF1bHRBY3Rpb25NZW51SXRlbXM6bWVudUl0ZW1z
XTsKQEAgLTkzLDYgKzEyOCwxNiBAQCAtICh2b2lkKXByZXBhcmVGb3JNZW51OihOU01lbnUgKilt
ZW51IHdpCiAgICAgICAgIFthY3Rpb25NZW51IGFkZEl0ZW06aXRlbV07CiB9CiAKKy0gKHZvaWQp
ZGlkQ2xvc2VNZW51OihOU01lbnUgKiltZW51IHdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7
CisgICAgaWYgKG1lbnUgIT0gX3dlYlZpZXcuYWN0aW9uTWVudSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgX3R5cGUgPSBXZWJBY3Rpb25NZW51Tm9uZTsKK30KKworI3ByYWdtYSBtYXJrIExpbmsg
YWN0aW9ucworCiAtICh2b2lkKV9vcGVuVVJMRnJvbUFjdGlvbk1lbnU6KGlkKXNlbmRlcgogewog
ICAgIGlmICghX3dlYlZpZXcpCkBAIC0xNzQsNyArMjE5LDEyMyBAQCAtICh2b2lkKV9xdWlja0xv
b2tVUkxGcm9tQWN0aW9uTWVudTooaWQpCiAgICAgW2J1YmJsZSBzaG93UHJldmlld0l0ZW06dXJs
IGl0ZW1GcmFtZTppdGVtRnJhbWVdOwogfQogCi0tIChSZXRhaW5QdHI8TlNNZW51SXRlbT4pX2Ny
ZWF0ZUFjdGlvbk1lbnVJdGVtRm9yVGFnOih1aW50MzJfdCl0YWcgd2l0aEhpdFRlc3RSZXN1bHQ6
KE5TRGljdGlvbmFyeSAqKWhpdFRlc3RSZXN1bHQKKy0gKE5TQXJyYXkgKilfZGVmYXVsdE1lbnVJ
dGVtc0Zvckxpbms6KFdlYkVsZW1lbnREaWN0aW9uYXJ5ICopaGl0VGVzdFJlc3VsdAoreworICAg
IE5TVVJMICp1cmwgPSBbaGl0VGVzdFJlc3VsdCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudExpbmtV
UkxLZXldOworICAgIGlmICghdXJsKQorICAgICAgICByZXR1cm4gQFsgXTsKKworICAgIGlmICgh
V2ViQ29yZTo6cHJvdG9jb2xJc0luSFRUUEZhbWlseShbdXJsIGFic29sdXRlU3RyaW5nXSkpCisg
ICAgICAgIHJldHVybiBAWyBdOworCisgICAgUmV0YWluUHRyPE5TTWVudUl0ZW0+IG9wZW5MaW5r
SXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25NZW51SXRlbUZvclRhZzpXZWJBY3Rpb25NZW51SXRl
bVRhZ09wZW5MaW5rSW5EZWZhdWx0QnJvd3NlciB3aXRoSGl0VGVzdFJlc3VsdDpoaXRUZXN0UmVz
dWx0XTsKKyAgICBSZXRhaW5QdHI8TlNNZW51SXRlbT4gcHJldmlld0xpbmtJdGVtID0gW3NlbGYg
X2NyZWF0ZUFjdGlvbk1lbnVJdGVtRm9yVGFnOldlYkFjdGlvbk1lbnVJdGVtVGFnUHJldmlld0xp
bmsgd2l0aEhpdFRlc3RSZXN1bHQ6aGl0VGVzdFJlc3VsdF07CisgICAgUmV0YWluUHRyPE5TTWVu
dUl0ZW0+IHJlYWRpbmdMaXN0SXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25NZW51SXRlbUZvclRh
ZzpXZWJBY3Rpb25NZW51SXRlbVRhZ0FkZExpbmtUb1NhZmFyaVJlYWRpbmdMaXN0IHdpdGhIaXRU
ZXN0UmVzdWx0OmhpdFRlc3RSZXN1bHRdOworCisgICAgcmV0dXJuIEBbIG9wZW5MaW5rSXRlbS5n
ZXQoKSwgcHJldmlld0xpbmtJdGVtLmdldCgpLCBbTlNNZW51SXRlbSBzZXBhcmF0b3JJdGVtXSwg
cmVhZGluZ0xpc3RJdGVtLmdldCgpIF07Cit9CisKKyNwcmFnbWEgbWFyayBUZXh0IGFjdGlvbnMK
KworLSAoTlNBcnJheSAqKV9kZWZhdWx0TWVudUl0ZW1zRm9yVGV4dDooV2ViRWxlbWVudERpY3Rp
b25hcnkgKiloaXRUZXN0UmVzdWx0Cit7CisgICAgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNvcHlU
ZXh0SXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25NZW51SXRlbUZvclRhZzpXZWJBY3Rpb25NZW51
SXRlbVRhZ0NvcHlUZXh0IHdpdGhIaXRUZXN0UmVzdWx0OmhpdFRlc3RSZXN1bHRdOworICAgIFJl
dGFpblB0cjxOU01lbnVJdGVtPiBsb29rdXBUZXh0SXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25N
ZW51SXRlbUZvclRhZzpXZWJBY3Rpb25NZW51SXRlbVRhZ0xvb2t1cFRleHQgd2l0aEhpdFRlc3RS
ZXN1bHQ6aGl0VGVzdFJlc3VsdF07CisKKyAgICByZXR1cm4gQFsgY29weVRleHRJdGVtLmdldCgp
LCBsb29rdXBUZXh0SXRlbS5nZXQoKSBdOworfQorCistICh2b2lkKV9jb3B5U2VsZWN0aW9uOihp
ZClzZW5kZXIKK3sKKyAgICBbX3dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTpAImNv
cHkiIHZhbHVlOm5pbF07Cit9CisKKy0gKHZvaWQpX2xvb2t1cFRleHQ6KGlkKXNlbmRlcgorewor
ICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW193ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGljdGlvbmFyeVBvcHVw
SW5mbyBwb3B1cEluZm8gPSBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFt
ZSwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBpZiAoIXBvcHVwSW5mby5h
dHRyaWJ1dGVkU3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1BvaW50IHRleHRCYXNl
bGluZU9yaWdpbiA9IHBvcHVwSW5mby5vcmlnaW47CisKKyAgICAvLyBDb252ZXJ0IHRvIHNjcmVl
biBjb29yZGluYXRlcy4KKyAgICB0ZXh0QmFzZWxpbmVPcmlnaW4gPSBbX3dlYlZpZXcgY29udmVy
dFBvaW50OnRleHRCYXNlbGluZU9yaWdpbiB0b1ZpZXc6bmlsXTsKKyAgICB0ZXh0QmFzZWxpbmVP
cmlnaW4gPSBbX3dlYlZpZXcud2luZG93IGNvbnZlcnRSZWN0VG9TY3JlZW46TlNNYWtlUmVjdCh0
ZXh0QmFzZWxpbmVPcmlnaW4ueCwgdGV4dEJhc2VsaW5lT3JpZ2luLnksIDAsIDApXS5vcmlnaW47
CisKKyAgICBXS1Nob3dXb3JkRGVmaW5pdGlvbldpbmRvdyhwb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZy5nZXQoKSwgdGV4dEJhc2VsaW5lT3JpZ2luLCBwb3B1cEluZm8ub3B0aW9ucy5nZXQoKSk7
Cit9CisKKy0gKEJPT0wpX3NlbGVjdExvb2t1cFRleHQKK3sKKyAgICBOU0RpY3Rpb25hcnkgKm9w
dGlvbnMgPSBuaWw7CisgICAgUmVmUHRyPFJhbmdlPiBsb29rdXBSYW5nZSA9IHJhbmdlRm9yRGlj
dGlvbmFyeUxvb2t1cEF0SGl0VGVzdFJlc3VsdChfaGl0VGVzdFJlc3VsdCwgJm9wdGlvbnMpOwor
ICAgIGlmICghbG9va3VwUmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZyYW1l
KiBmcmFtZSA9IF9oaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZnJhbWUtPnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobG9va3VwUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0s
IHRydWUpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgRGljdGlvbmFyeVBvcHVwSW5m
byBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlv
bnMgPSBuaWw7CisgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBwb3B1cEluZm87CisgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gcmFuZ2VGb3JEaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0
aW9uKHNlbGVjdGlvbiwgJm9wdGlvbnMpOworICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgICAg
ICBwb3B1cEluZm8gPSBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCAqc2Vs
ZWN0ZWRSYW5nZSwgb3B0aW9ucyk7CisgICAgcmV0dXJuIHBvcHVwSW5mbzsKK30KKworc3RhdGlj
IERpY3Rpb25hcnlQb3B1cEluZm8gcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFt
ZSogZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zKQoreworICAgIERp
Y3Rpb25hcnlQb3B1cEluZm8gcG9wdXBJbmZvOworICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBX
aGl0ZVNwYWNlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcG9wdXBJbmZvOworICAgIAor
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLT5yZW5k
ZXJlcigpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgp
OworCisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgcmFuZ2UudGV4dFF1YWRzKHF1
YWRzKTsKKyAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcG9wdXBJbmZv
OworCisgICAgSW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworCisgICAgcG9wdXBJbmZvLm9y
aWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyAoc3R5bGUu
Zm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKiBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3Io
KSkpOworICAgIHBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKKworICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2UocmFuZ2UpOworICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBz
Y2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7
CisgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRG
b250TWFuYWdlcl07CisKKyAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0
ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0
aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFu
Z2UsIEJPT0wgKnN0b3ApIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+
IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7CisK
KyAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5T
Rm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICBpZiAoZm9udCkgeworICAgICAgICAgICAgZm9u
dCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpbZm9udCBwb2ludFNpemVd
ICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCldOworICAgICAgICAgICAgW3NjYWxl
ZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwor
ICAgICAgICB9CisKKyAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1
dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgIH1dOworCisgICAg
cG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcuZ2V0
KCk7CisgICAgcmV0dXJuIHBvcHVwSW5mbzsKK30KKworI3ByYWdtYSBtYXJrIE1lbnUgSXRlbXMK
KworLSAoUmV0YWluUHRyPE5TTWVudUl0ZW0+KV9jcmVhdGVBY3Rpb25NZW51SXRlbUZvclRhZzoo
dWludDMyX3QpdGFnIHdpdGhIaXRUZXN0UmVzdWx0OihXZWJFbGVtZW50RGljdGlvbmFyeSAqKWhp
dFRlc3RSZXN1bHQKIHsKICAgICBTRUwgc2VsZWN0b3IgPSBudWxscHRyOwogICAgIE5TU3RyaW5n
ICp0aXRsZSA9IG5pbDsKQEAgLTIwNCw2ICszNjUsMTggQEAgLSAoUmV0YWluUHRyPE5TTWVudUl0
ZW0+KV9jcmVhdGVBY3Rpb25NZQogICAgICAgICByZXByZXNlbnRlZE9iamVjdCA9IFtoaXRUZXN0
UmVzdWx0IG9iamVjdEZvcktleTpXZWJFbGVtZW50TGlua1VSTEtleV07CiAgICAgICAgIGJyZWFr
OwogCisgICAgY2FzZSBXZWJBY3Rpb25NZW51SXRlbVRhZ0NvcHlUZXh0OgorICAgICAgICBzZWxl
Y3RvciA9IEBzZWxlY3RvcihfY29weVNlbGVjdGlvbjopOworICAgICAgICB0aXRsZSA9IEAiQ29w
eSI7CisgICAgICAgIGltYWdlID0gW05TSW1hZ2UgaW1hZ2VOYW1lZDpAIk5TQWN0aW9uTWVudUNv
cHkiXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdlYkFjdGlvbk1lbnVJdGVtVGFnTG9v
a3VwVGV4dDoKKyAgICAgICAgc2VsZWN0b3IgPSBAc2VsZWN0b3IoX2xvb2t1cFRleHQ6KTsKKyAg
ICAgICAgdGl0bGUgPSBAIkxvb2sgVXAiOworICAgICAgICBpbWFnZSA9IFtOU0ltYWdlIGltYWdl
TmFtZWQ6QCJOU0FjdGlvbk1lbnVMb29rdXAiXTsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZh
dWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG5pbDsK
QEAgLTIyMiwzMSArMzk1LDI0IEBAIHN0YXRpYyBOU0ltYWdlICp3ZWJLaXRCdW5kbGVJbWFnZU5h
bWVkKE4KICAgICByZXR1cm4gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpOU0NsYXNzRnJvbVN0
cmluZyhAIldLVmlldyIpXSBpbWFnZUZvclJlc291cmNlOm5hbWVdOwogfQogCi0tIChOU0FycmF5
ICopX2RlZmF1bHRNZW51SXRlbXNGb3JMaW5rOihOU0RpY3Rpb25hcnkgKiloaXRUZXN0UmVzdWx0
CistIChOU0FycmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JIaXRUZXN0UmVzdWx0OihXZWJFbGVt
ZW50RGljdGlvbmFyeSAqKWhpdFRlc3RSZXN1bHQKIHsKICAgICBOU1VSTCAqdXJsID0gW2hpdFRl
c3RSZXN1bHQgb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRMaW5rVVJMS2V5XTsKLSAgICBpZiAoIXVy
bCkKLSAgICAgICAgcmV0dXJuIEBbIF07Ci0KLSAgICBpZiAoIVdlYkNvcmU6OnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoW3VybCBhYnNvbHV0ZVN0cmluZ10pKQotICAgICAgICByZXR1cm4gQFsgXTsK
LQotICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiBvcGVuTGlua0l0ZW0gPSBbc2VsZiBfY3JlYXRl
QWN0aW9uTWVudUl0ZW1Gb3JUYWc6V2ViQWN0aW9uTWVudUl0ZW1UYWdPcGVuTGlua0luRGVmYXVs
dEJyb3dzZXIgd2l0aEhpdFRlc3RSZXN1bHQ6aGl0VGVzdFJlc3VsdF07Ci0gICAgUmV0YWluUHRy
PE5TTWVudUl0ZW0+IHByZXZpZXdMaW5rSXRlbSA9IFtzZWxmIF9jcmVhdGVBY3Rpb25NZW51SXRl
bUZvclRhZzpXZWJBY3Rpb25NZW51SXRlbVRhZ1ByZXZpZXdMaW5rIHdpdGhIaXRUZXN0UmVzdWx0
OmhpdFRlc3RSZXN1bHRdOwotICAgIFJldGFpblB0cjxOU01lbnVJdGVtPiByZWFkaW5nTGlzdEl0
ZW0gPSBbc2VsZiBfY3JlYXRlQWN0aW9uTWVudUl0ZW1Gb3JUYWc6V2ViQWN0aW9uTWVudUl0ZW1U
YWdBZGRMaW5rVG9TYWZhcmlSZWFkaW5nTGlzdCB3aXRoSGl0VGVzdFJlc3VsdDpoaXRUZXN0UmVz
dWx0XTsKLQotICAgIHJldHVybiBAWyBvcGVuTGlua0l0ZW0uZ2V0KCksIHByZXZpZXdMaW5rSXRl
bS5nZXQoKSwgW05TTWVudUl0ZW0gc2VwYXJhdG9ySXRlbV0sIHJlYWRpbmdMaXN0SXRlbS5nZXQo
KSBdOwotfQotCi0tIChOU0FycmF5ICopX2RlZmF1bHRNZW51SXRlbXNGb3JIaXRUZXN0UmVzdWx0
OihOU0RpY3Rpb25hcnkgKiloaXRUZXN0UmVzdWx0Ci17Ci0gICAgTlNVUkwgKnVybCA9IFtoaXRU
ZXN0UmVzdWx0IG9iamVjdEZvcktleTpXZWJFbGVtZW50TGlua1VSTEtleV07Ci0KICAgICBpZiAo
dXJsKSB7CiAgICAgICAgIF90eXBlID0gV2ViQWN0aW9uTWVudUxpbms7CiAgICAgICAgIHJldHVy
biBbc2VsZiBfZGVmYXVsdE1lbnVJdGVtc0Zvckxpbms6aGl0VGVzdFJlc3VsdF07CiAgICAgfQog
CisgICAgTm9kZSogbm9kZSA9IF9oaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOworICAgIGlmIChu
b2RlICYmIG5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBpZiAoIVtbaGl0VGVzdFJlc3Vs
dCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV0pIHsKKyAg
ICAgICAgICAgIGlmKCFbc2VsZiBfc2VsZWN0TG9va3VwVGV4dF0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIEBbIF07CisgICAgICAgIH0KKyAgICAgICAgX3R5cGUgPSBXZWJBY3Rpb25NZW51UmVh
ZE9ubHlUZXh0OworICAgICAgICByZXR1cm4gW3NlbGYgX2RlZmF1bHRNZW51SXRlbXNGb3JUZXh0
OmhpdFRlc3RSZXN1bHRdOworICAgIH0KKwogICAgIF90eXBlID0gV2ViQWN0aW9uTWVudU5vbmU7
CiAgICAgcmV0dXJuIEBbIF07CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlVJRGVsZWdhdGVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oCShyZXZpc2lvbiAxNzU3OTYpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlVJRGVsZWdhdGVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNiwxMiArMTE2LDE1IEBAIGVudW0gewogICAgIFdlYkFjdGlvbk1lbnVJdGVtVGFnTm9B
Y3Rpb24gPSAwLAogICAgIFdlYkFjdGlvbk1lbnVJdGVtVGFnT3BlbkxpbmtJbkRlZmF1bHRCcm93
c2VyLAogICAgIFdlYkFjdGlvbk1lbnVJdGVtVGFnUHJldmlld0xpbmssCi0gICAgV2ViQWN0aW9u
TWVudUl0ZW1UYWdBZGRMaW5rVG9TYWZhcmlSZWFkaW5nTGlzdAorICAgIFdlYkFjdGlvbk1lbnVJ
dGVtVGFnQWRkTGlua1RvU2FmYXJpUmVhZGluZ0xpc3QsCisgICAgV2ViQWN0aW9uTWVudUl0ZW1U
YWdDb3B5VGV4dCwKKyAgICBXZWJBY3Rpb25NZW51SXRlbVRhZ0xvb2t1cFRleHQKIH07CiAKIHR5
cGVkZWYgZW51bSB7CiAgICAgV2ViQWN0aW9uTWVudU5vbmUgPSAwLAotICAgIFdlYkFjdGlvbk1l
bnVMaW5rCisgICAgV2ViQWN0aW9uTWVudUxpbmssCisgICAgV2ViQWN0aW9uTWVudVJlYWRPbmx5
VGV4dAogfSBXZWJBY3Rpb25NZW51VHlwZTsKIAogLy8gTWVzc2FnZSBTb3VyY2VzLgpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTc1Nzk2KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NTQz
LDYgKzg1NDMsMTQgQEAgLSAodm9pZClwcmVwYXJlRm9yTWVudTooTlNNZW51ICopbWVudSB3aQog
CiAgICAgW19wcml2YXRlLT5hY3Rpb25NZW51Q29udHJvbGxlciBwcmVwYXJlRm9yTWVudTptZW51
IHdpdGhFdmVudDpldmVudF07CiB9CisKKy0gKHZvaWQpZGlkQ2xvc2VNZW51OihOU01lbnUgKilt
ZW51IHdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKG1lbnUgIT0gc2VsZi5h
Y3Rpb25NZW51KQorICAgICAgICByZXR1cm47CisKKyAgICBbX3ByaXZhdGUtPmFjdGlvbk1lbnVD
b250cm9sbGVyIGRpZENsb3NlTWVudTptZW51IHdpdGhFdmVudDpldmVudF07Cit9CiAjZW5kaWYK
IAogQGVuZAo=
</data>
<flag name="review"
          id="266103"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>