<?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>25617</bug_id>
          
          <creation_ts>2009-05-07 09:10:08 -0700</creation_ts>
          <short_desc>Fix memory/performance regression because of too much form control related abstraction just for WMLs sake</short_desc>
          <delta_ts>2009-05-08 12:13:47 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>20393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>hyatt</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>120284</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-07 09:10:08 -0700</bug_when>
    <thetext>As the summary says, the new abstraction layer(s): FormControlElement / FormControlElementWithState / InputElement etc. has caused ambiguity for several HTML*Element classes.

For instance HTMLInputElement now inherits from HTMLFormControlElementWithState and InputElement. HTMLFormControlElementWithState inherits from HTMLFormControlElement and FormControlElementWithState. In turn HTMLFormControlElement inherits from HTMLElement and FormControlElement. As you can see this is rather ambigious.

All methods now living in those abstract classes (FormControlElement etc.) previously mostly lived in Node and related classes. The idea to resolve the memory regressions while keeping a rather sane API is to group these methods as virtual functions in Element.

While one can argue (like I did, when I introduced this abstraction layer) this is not the nicest way to design it, it&apos;s for sure less memory-intensive to add some extra virtual functions then a whole set of new base classes (4 byte per extra inherited class!).

The first thing to fix is to remove the FormControlElement/FormControlElementWithState base classes completely and group their functionality in Element in a seperated section &quot;// FormControlElement API&quot;. The methods should be renamed to avoid confusion, unlike the previous version before my refactorization where functions like isEnabled() lived in Node - which is completely weird.
For instance isEnabled() should be renamed to isEnabledFormControl(), or isReadOnly() -&gt; isReadOnlyFormControl(). etc.

About to attach a patch.
NOTE: This bug is a blocker for all further WML work. Memory regressions should all be resolved first. WML doesn&apos;t want to hurt HTML in any way :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120286</commentid>
    <comment_count>1</comment_count>
      <attachid>30101</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-07 09:26:07 -0700</bug_when>
    <thetext>Created attachment 30101
Initial patch

No regressions, ran all tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120343</commentid>
    <comment_count>2</comment_count>
      <attachid>30101</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-05-07 14:36:41 -0700</bug_when>
    <thetext>Comment on attachment 30101
Initial patch

Looks good. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120346</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-07 14:44:16 -0700</bug_when>
    <thetext>Landed in r43367.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120450</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-08 12:13:47 -0700</bug_when>
    <thetext>*** Bug 23810 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30101</attachid>
            <date>2009-05-07 09:26:07 -0700</date>
            <delta_ts>2009-05-07 14:36:41 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>FormControlAbstraction.diff</filename>
            <type>text/plain</type>
            <size>78788</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzMzQ1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgxIEBACisyMDA5LTA1
LTA3ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVzIG9uZSBwYXJ0IG9mOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU2MTcKKworICAgICAgICBGaXggbWVtb3J5L3BlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gYmVjYXVz
ZSBvZiB0b28gbXVjaCBmb3JtIGNvbnRyb2wgcmVsYXRlZCBhYnN0cmFjdGlvbiBqdXN0IGZvciBX
TUxzIHNha2UuCisKKyAgICAgICAgUmVtb3ZlIEZvcm1Db250cm9sRWxlbWVudCBhbmQgRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlIGJhc2UgY2xhc3NlcywgYXMgdGhlIG92ZXJoZWFkIGlzIHRv
byBoaWdoIGZvciB0aGUKKyAgICAgICAgZ2Fpbi4gSFRNTCBoYXMgbm8gYmVuZWZpdCBvZiB0aGF0
IGtpbmQgb2YgYWJzdHJhY3Rpb24sIHNvIHdlJ3JlIGdvaW5nIHRvIG1vdmUgdGhlIGZ1bmN0aW9u
YWxpdHkgdG8gRWxlbWVudCBkaXJlY3RseS4KKworICAgICAgICBUaGUgZnVuY3Rpb25zIG5vdyBs
aXZpbmcgaW4gRm9ybUNvbnRyb2xFbGVtZW50KFdpdGhTdGF0ZSkgbGl2ZWQgaW4gTm9kZS9FbGVt
ZW50L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQgYmVmb3JlLgorICAgICAgICBUaGlzIHBhdGNoZXMg
bW92ZXMgYWxsIG9mIHRoZW0gaW4gYSBjZW50cmFsIHBsYWNlIGluIEVsZW1lbnQuaCwgYXMgdmly
dHVhbCBmdW5jdGlvbnMgd2l0aCBhbiBpbmxpbmUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgVG8gYXZvaWQgY29uZnVzaW9uIGxpa2UgaXNFbmFibGVkKCkgbGl2aW5nIG9uIE5vZGUs
IGJlZm9yZSB0aGUgY3JlYXRpb24gb2YgdGhlIEZvcm1Db250cm9sRWxlbWVudCBhYnN0cmFjdGlv
biBsYXllciwgYWxsCisgICAgICAgIG1ldGhvZHMgYXJlIHJlbmFtZWQgdG8gY2xhcmlmeSB3aGVy
ZSB0aGV5IGJlbG9uZyB0by4gQWxsIHJlbmFtZXMgYXJlIGxpc3RlZCBoZXJlOgorCisgICAgICAg
IEZyb20gRm9ybUNvbnRyb2xFbGVtZW50OgorICAgICAgICAtIGlzRW5hYmxlZCgpIC0+IGlzRW5h
YmxlZEZvcm1Db250cm9sKCkKKyAgICAgICAgLSBpc1JlYWRPbmx5KCkgLT4gaXNSZWFkT25seUZv
cm1Db250cm9sKCkKKyAgICAgICAgLSBpc1RleHRDb250cm9sKCkgLT4gaXNUZXh0Rm9ybUNvbnRy
b2woKQorICAgICAgICAtIHZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgLT4gZm9ybUNvbnRyb2xWYWx1
ZU1hdGNoZXNSZW5kZXJlcigpCisgICAgICAgIC0gc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKSAt
PiBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkKKyAgICAgICAgLSBuYW1lKCkg
LT4gZm9ybUNvbnRyb2xOYW1lKCkKKyAgICAgICAgLSB0eXBlKCkgLT4gZm9ybUNvbnRyb2xUeXBl
KCkKKworICAgICAgICBGcm9tIEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZToKKyAgICAgICAg
LSBzYXZlU3RhdGUoKSAtPiBzYXZlRm9ybUNvbnRyb2xTdGF0ZSgpCisgICAgICAgIC0gcmVzdG9y
ZVN0YXRlKCkgLT4gcmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKQorCisgICAgICAgIEEgbG90IG9m
IEVsZW1lbnQgLT4gRm9ybUNvbnRyb2xFbGVtZW50KFdpdGhTdGF0ZSkgY2FzdGluZyBpcyBnb25l
IGFnYWluLCBzbyBpdCdzIG5vdCBvbmx5IGEgbWVtb3J5LCBidXQgYWxzbyBhIHBlcmZvcm1hbmNl
IHByb2dyZXNzaW9uLgorCisgICAgICAgIE5vIHRlc3RjYXNlcyBhZmZlY3RlZCwgbm8gbmV3IHRl
c3RzIG5lZWRlZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNv
cmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
U291cmNlcy5ia2w6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3Rvcik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojpmb3JtRWxlbWVudHNTdGF0ZSk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudFdp
dGhTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aFN0YXRlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6aXNGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6aXNFbmFibGVkRm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
aXNSZWFkT25seUZvcm1Db250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzVGV4
dEZvcm1Db250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZvcm1Db250cm9sVmFs
dWVNYXRjaGVzUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0Rm9ybUNv
bnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpm
b3JtQ29udHJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9ybUNvbnRyb2xU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNhdmVGb3JtQ29udHJvbFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAg
ICAgICAgKiBkb20vRm9ybUNvbnRyb2xFbGVtZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBk
b20vRm9ybUNvbnRyb2xFbGVtZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0Zvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0Zvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5k
ZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxCdXR0b25FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmZvcm1Db250
cm9sVHlwZSk6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6d2lsbFZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6
ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOgorICAgICAgICAq
IGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aXNUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNFbmFibGVkRm9ybUNvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRG
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmlzUmVhZE9ubHlGb3JtQ29udHJvbCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6Om5hbWUpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJv
bE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNhdmVGb3JtQ29udHJv
bFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnJlc3RvcmVGb3Jt
Q29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRl
dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJl
cik6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojppc1RleHRGb3JtQ29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MS2V5Z2Vu
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudDo6Zm9ybUNv
bnRyb2xUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxLZXlnZW5FbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVn
ZW5kRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSk6CisgICAg
ICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6Zm9y
bUNvbnRyb2xUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAqIGh0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRB
cmVhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpmb3Jt
Q29udHJvbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2F2
ZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6dXBkYXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVh
RWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6cmVhZE9ubHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6aXNUZXh0Rm9ybUNvbnRyb2wpOgor
ICAgICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0VuYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUp
OgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6aXRl
bUlzRW5hYmxlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVVzZXJNb2RpZnlQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2V0SW5uZXJUZXh0VmFsdWUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzUmVhZE9ubHlD
b250cm9sKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdE1lbnVMaXN0
U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAqIHdtbC9XTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAqIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldNTEZvcm1Db250cm9sRWxlbWVudDo6aXNSZWFkT25s
eUZvcm1Db250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OldNTEZvcm1Db250cm9sRWxlbWVudDo6
aXNUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6V01MRm9ybUNvbnRyb2xFbGVt
ZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cik6CisgICAgICAgICogd21sL1dNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXTUxJbnB1dEVsZW1lbnQ6OldNTElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpX
TUxJbnB1dEVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6
V01MSW5wdXRFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OldN
TElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V01M
SW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5w
dXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5wdXRF
bGVtZW50OjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OnNh
dmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6
cmVzdG9yZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5wdXRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVs
ZW1lbnQ6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmFwcGVu
ZEZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6aW5pdCk6Cisg
ICAgICAgICogd21sL1dNTElucHV0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5w
dXRFbGVtZW50Ojppc1RleHRGb3JtQ29udHJvbCk6CisgICAgICAgICogd21sL1dNTE9wdEdyb3Vw
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxPcHRHcm91cEVsZW1lbnQ6OmZvcm1D
b250cm9sVHlwZSk6CisgICAgICAgICogd21sL1dNTE9wdEdyb3VwRWxlbWVudC5oOgorICAgICAg
ICAqIHdtbC9XTUxPcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTE9wdGlv
bkVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSk6CisgICAgICAgICogd21sL1dNTE9wdGlvbkVsZW1l
bnQuaDoKKwogMjAwOS0wNS0wNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCkluZGV4OiBHTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBHTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDMzNDUpCisrKyBHTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtNjIyLDEwICs2MjIsNiBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJhc2UuaCBcCiAJV2ViQ29yZS9kb20v
RXhjZXB0aW9uQ29kZS5jcHAgXAogCVdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaCBcCi0JV2Vi
Q29yZS9kb20vRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcCBcCi0JV2ViQ29yZS9kb20v
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggXAotCVdlYkNvcmUvZG9tL0Zvcm1Db250cm9s
RWxlbWVudC5jcHAgXAotCVdlYkNvcmUvZG9tL0Zvcm1Db250cm9sRWxlbWVudC5oIFwKIAlXZWJD
b3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwIFwKIAlXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaCBc
CiAJV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgXApJbmRleDogV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQzMzQ1KQorKysgV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTYxNyw4ICs2MTcsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20v
RXZlbnRUYXJnZXQuY3BwIFwKICAgICBkb20vRXhjZXB0aW9uQmFzZS5jcHAgXAogICAgIGRvbS9F
eGNlcHRpb25Db2RlLmNwcCBcCi0gICAgZG9tL0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5j
cHAgXAotICAgIGRvbS9Gb3JtQ29udHJvbEVsZW1lbnQuY3BwIFwKICAgICBkb20vSW5wdXRFbGVt
ZW50LmNwcCBcCiAgICAgZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKICAgICBkb20vTWFwcGVkQXR0
cmlidXRlLmNwcCBcCkluZGV4OiBXZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MzM0NSkKKysrIFdlYkNvcmVTb3VyY2VzLmJrbAko
d29ya2luZyBjb3B5KQpAQCAtNDI5LDggKzQyOSw2IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUg
bGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgZG9tL0V2ZW50VGFyZ2V0LmNwcAogICAgICAgICBk
b20vRXhjZXB0aW9uQmFzZS5jcHAKICAgICAgICAgZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCi0gICAg
ICAgIGRvbS9Gb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCi0gICAgICAgIGRvbS9Gb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCiAgICAgICAgIGRvbS9JbnB1dEVsZW1lbnQuY3BwCiAgICAgICAg
IGRvbS9LZXlib2FyZEV2ZW50LmNwcAogICAgICAgICBkb20vTWFwcGVkQXR0cmlidXRlLmNwcApJ
bmRleDogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQzMzQ1KQorKysgV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTg4ODgsMjIgKzg4ODgsNiBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21c
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0K
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxGb3JtQ29udHJvbEVsZW1lbnQuaCINCi0JCQkJPg0K
LQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxl
DQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5o
Ig0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZG9tXElucHV0RWxlbWVudC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDMzNDUpCisrKyBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDYgQEAKIAkJMDg0
Q0U1Q0UwRjI3REFEQzAwRTYyNDBFIC8qIFdNTE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NENFNUNBMEYyN0RBREMwMEU2MjQw
RSAvKiBXTUxPcHRpb25FbGVtZW50LmggKi87IH07CiAJCTA4NERCQUExMEVEMzlEMzYwMDM4QzIy
NiAvKiBXTUxWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg0REJBOUQwRUQzOUQzNTAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5jcHAg
Ki87IH07CiAJCTA4NERCQUEyMEVEMzlEMzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERCQTlFMEVEMzlE
MzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCAqLzsgfTsKLQkJMDg1NzczMzUwRjA4NDYwMTAw
ODA1ODNFIC8qIEZvcm1Db250cm9sRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NzczMzQwRjA4NDYwMTAwODA1ODNFIC8qIEZvcm1Db250
cm9sRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTA4NTkxQUE1MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTkxQUE0MEYwODVDNEUw
MDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwODVBRkRDODBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNv
bnRyb2xFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NUFGREM2MEYyOTc3MzUwMDYxRjJCMyAvKiBXTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwICovOyB9OwogCQkwODVBRkRDOTBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODVBRkRDNzBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKQEAgLTExNiw5ICsxMTUsNiBAQAogCQkw
OEE0ODQ3NzBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEE0ODQ3NTBFNTI3MkM1MDBDM0ZF
NzYgLyogU2NyaXB0RWxlbWVudC5jcHAgKi87IH07CiAJCTA4QTQ4NDc4MEU1MjcyQzUwMEMzRkU3
NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwOEE0ODQ3NjBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVudC5oICov
OyB9OwogCQkwOEE0OEE2RTBFODZDRjZEMDBFMjI1REQgLyogSlNTVkdFbGVtZW50SW5zdGFuY2VD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDhBNDhBNkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNw
cCAqLzsgfTsKLQkJMDhCOTNGNzUwRjI5MzQ4MTAwMDcyMEMyIC8qIEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwOEI5M0Y3MzBGMjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmNwcCAqLzsgfTsKLQkJMDhCOTNGNzYwRjI5MzQ4MTAwMDcyMEMyIC8qIEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDhCOTNGNzQwRjI5MzQ4MTAwMDcyMEMyIC8qIEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTA4QkZERkM0MEYwOTlFNzAwMDdEQzJCRiAvKiBGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhCRkRGQzMwRjA5
OUU3MDAwN0RDMkJGIC8qIEZvcm1Db250cm9sRWxlbWVudC5jcHAgKi87IH07CiAJCTA4QzRDNTE4
MEVGMTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNEM1MTQwRUYxOUE0MDAwRTQ4NDBGIC8q
IFdNTEltYWdlRWxlbWVudC5jcHAgKi87IH07CiAJCTA4QzRDNTE5MEVGMTlBNDAwMEU0ODQwRiAv
KiBXTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA4QzRDNTE1MEVGMTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUVsZW1lbnQuaCAq
LzsgfTsKIAkJMDhDNEM1MUEwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlTG9hZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzRDNTE2MEVG
MTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUxvYWRlci5jcHAgKi87IH07CkBAIC00OTQ5LDcgKzQ5
NDUsNiBAQAogCQkwODRDRTVDQTBGMjdEQURDMDBFNjI0MEUgLyogV01MT3B0aW9uRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxPcHRpb25FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NERCQTlEMEVEMzlEMzUwMDM4QzIyNiAvKiBX
TUxWYXJpYWJsZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
VmFyaWFibGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0REJBOUUwRUQz
OUQzNjAwMzhDMjI2IC8qIFdNTFZhcmlhYmxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXTUxWYXJpYWJsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1
NzczMzQwRjA4NDYwMTAwODA1ODNFIC8qIEZvcm1Db250cm9sRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtQ29udHJvbEVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1dEVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QUZEQzYwRjI5NzczNTAwNjFGMkIzIC8qIFdN
TEZvcm1Db250cm9sRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODVBRkRDNzBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEZvcm1Db250cm9sRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk4OSw5ICs0OTg0LDYgQEAKIAkJMDhB
NDg0NzUwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4QTQ4NDc2MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhBNDhBNkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpT
U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMDhCOTNGNzMwRjI5MzQ4MTAwMDcyMEMyIC8qIEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwOEI5M0Y3NDBGMjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEJGREZDMzBGMDk5
RTcwMDA3REMyQkYgLyogRm9ybUNvbnRyb2xFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Db250cm9sRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4QzRDNTE0MEVGMTlBNDAwMEU0ODQwRiAvKiBXTUxJbWFnZUVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW1hZ2VFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDNEM1MTUwRUYxOUE0MDAw
RTQ4NDBGIC8qIFdNTEltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhD
NEM1MTYwRUYxOUE0MDAwRTQ4NDBGIC8qIFdNTEltYWdlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEltYWdlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDgyLDEwICsxNDQ3NCw2IEBACiAJCQkJQkM2MEQ4RjEwRDJB
MTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlvbkJhc2UuaCAqLywKIAkJCQk5MzgzMUI1NjBEMDg3RDYw
MDBFNUM5ODQgLyogRXhjZXB0aW9uQ29kZS5jcHAgKi8sCiAJCQkJOTM1RkJDRjEwOUJBMTQzQjAw
RTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLywKLQkJCQkwOEJGREZDMzBGMDk5RTcwMDA3REMy
QkYgLyogRm9ybUNvbnRyb2xFbGVtZW50LmNwcCAqLywKLQkJCQkwODU3NzMzNDBGMDg0NjAxMDA4
MDU4M0UgLyogRm9ybUNvbnRyb2xFbGVtZW50LmggKi8sCi0JCQkJMDhCOTNGNzMwRjI5MzQ4MTAw
MDcyMEMyIC8qIEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHAgKi8sCi0JCQkJMDhCOTNG
NzQwRjI5MzQ4MTAwMDcyMEMyIC8qIEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oICovLAog
CQkJCTA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwICovLAogCQkJ
CTA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCAqLywKIAkJCQk4NTAz
MUIyRDBBNDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9hcmRFdmVudC5jcHAgKi8sCkBAIC0xNTYxNCw4
ICsxNTYwMiw2IEBACiAJCQkJQjJDM0RBNkIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRTZWxlY3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc4NEMzNEIwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRU
cmFpdHNNYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFRDBBMTk4OUNBMDA3RkI4QzUg
LyogRm9udFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwODU3NzMzNTBGMDg0NjAxMDA4MDU4
M0UgLyogRm9ybUNvbnRyb2xFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkwOEI5M0Y3NjBG
MjkzNDgxMDAwNzIwQzIgLyogRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2RDM4MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0
YUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTc2NTAsOCArMTc2MzYsNiBAQAogCQkJCTM3MjRD
QTdFMEU2OEIyMDUwMERCNDM4NCAvKiBGb250TWFjQ29yZVRleHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjJBRkZDODIwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRQbGF0Zm9ybURhdGFNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBODBFNkNGMTBBMTk4OUNBMDA3RkI4QzUgLyogRm9udFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4QkZERkM0MEYwOTlFNzAwMDdEQzJCRiAvKiBGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDhCOTNGNzUwRjI5MzQ4MTAw
MDcyMEMyIC8qIEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTRDNzY2RjBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDg1QjkyQkEwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODEzNkQzOTA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFM
aXN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNDMzNDUpCisr
KyBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OSwxMiArOTc5
LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aAogICAgICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgICAgICAgICBGb3JtQ29udHJvbEVsZW1lbnQqIHRoaXNGb3JtQ29udHJvbEVsZW1lbnQgPSB0
b0Zvcm1Db250cm9sRWxlbWVudChzKTsKLSAgICAgICAgICAgICAgICBGb3JtQ29udHJvbEVsZW1l
bnQqIG90aGVyRm9ybUNvbnRyb2xFbGVtZW50ID0gdG9Gb3JtQ29udHJvbEVsZW1lbnQobV9lbGVt
ZW50KTsKLSAgICAgICAgICAgICAgICBpZiAodGhpc0Zvcm1Db250cm9sRWxlbWVudCAmJiBvdGhl
ckZvcm1Db250cm9sRWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0Zvcm1D
b250cm9sRWxlbWVudC0+aXNFbmFibGVkKCkgIT0gb3RoZXJGb3JtQ29udHJvbEVsZW1lbnQtPmlz
RW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlmIChzLT5pc0VuYWJsZWRGb3JtQ29u
dHJvbCgpICE9IG1fZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCkBAIC0yMzIyLDcgKzIzMTcs
NyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBVSSBzcGVjIHN0YXRlcyB0aGF0IHlvdSBjYW4ndCBtYXRjaCA6ZW5h
YmxlZCB1bmxlc3MgeW91IGFyZSBhbiBvYmplY3QgdGhhdCBjYW4KICAgICAgICAgICAgICAgICAg
ICAgLy8gInJlY2VpdmUgZm9jdXMgYW5kIGJlIGFjdGl2YXRlZC4iICBXZSB3aWxsIGxpbWl0IG1h
dGNoaW5nIG9mIHRoaXMgcHNldWRvLWNsYXNzIHRvIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAg
ICAgIC8vIHRoYXQgYXJlIG5vbi0iaGlkZGVuIiBjb250cm9scy4KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRvRm9ybUNvbnRyb2xFbGVtZW50KGUpLT5pc0VuYWJsZWQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRnVsbFBhZ2VNZWRpYToKQEAgLTIzMzcsMjAgKzIzMzIsMTggQEAgYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OgogICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgVUkgc3BlYyBzdGF0ZXMgdGhhdCB5b3UgY2FuJ3QgbWF0Y2ggOmVuYWJsZWQgdW5sZXNz
IHlvdSBhcmUgYW4gb2JqZWN0IHRoYXQgY2FuCiAgICAgICAgICAgICAgICAgICAgIC8vICJyZWNl
aXZlIGZvY3VzIGFuZCBiZSBhY3RpdmF0ZWQuIiAgV2Ugd2lsbCBsaW1pdCBtYXRjaGluZyBvZiB0
aGlzIHBzZXVkby1jbGFzcyB0byBlbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0
IGFyZSBub24tImhpZGRlbiIgY29udHJvbHMuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAh
dG9Gb3JtQ29udHJvbEVsZW1lbnQoZSktPmlzRW5hYmxlZCgpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIWUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvUmVhZE9ubHk6IHsKICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250cm9sRWxlbWVudCA9IHRvRm9ybUNv
bnRyb2xFbGVtZW50KGUpOwotICAgICAgICAgICAgICAgIHJldHVybiBmb3JtQ29udHJvbEVsZW1l
bnQtPmlzVGV4dENvbnRyb2woKSAmJiBmb3JtQ29udHJvbEVsZW1lbnQtPmlzUmVhZE9ubHlDb250
cm9sKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYg
ZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6IHsKICAgICAgICAgICAgICAgICBpZiAo
IWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250
cm9sRWxlbWVudCA9IHRvRm9ybUNvbnRyb2xFbGVtZW50KGUpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBmb3JtQ29udHJvbEVsZW1lbnQtPmlzVGV4dENvbnRyb2woKSAmJiAhZm9ybUNvbnRyb2xF
bGVtZW50LT5pc1JlYWRPbmx5Q29udHJvbCgpOworICAgICAgICAgICAgICAgIHJldHVybiBlLT5p
c1RleHRGb3JtQ29udHJvbCgpICYmICFlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NoZWNrZWQ6IHsK
ICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCklu
ZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDQzMzQ1KQorKysgZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1
OSwxNyArMzg1OSwxNCBAQCBWZWN0b3I8U3RyaW5nPiBEb2N1bWVudDo6Zm9ybUVsZW1lbnRzU3Rh
CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gc3RhdGVWZWN0b3I7CiAgICAgc3RhdGVWZWN0b3IucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5zaXplKCkgKiAzKTsK
LSAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSo+Ojpj
b25zdF9pdGVyYXRvciBJdGVyYXRvcjsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEVsZW1lbnQq
Pjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0gbV9mb3JtRWxl
bWVudHNXaXRoU3RhdGUuZW5kKCk7CiAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fZm9ybUVsZW1l
bnRzV2l0aFN0YXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUqIGUgPSAqaXQ7CisgICAgICAgIEVsZW1lbnQqIGUgPSAqaXQ7
CiAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgaWYgKGUtPnNhdmVTdGF0ZSh2YWx1ZSkp
IHsKLSAgICAgICAgICAgIEZvcm1Db250cm9sRWxlbWVudCogZm9ybUNvbnRyb2xFbGVtZW50ID0g
ZS0+dG9Gb3JtQ29udHJvbEVsZW1lbnQoKTsKLSAgICAgICAgICAgIEFTU0VSVChmb3JtQ29udHJv
bEVsZW1lbnQpOwotCi0gICAgICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQoZm9ybUNvbnRyb2xF
bGVtZW50LT5uYW1lKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBwZW5k
KGZvcm1Db250cm9sRWxlbWVudC0+dHlwZSgpLnN0cmluZygpKTsKKyAgICAgICAgaWYgKGUtPnNh
dmVGb3JtQ29udHJvbFN0YXRlKHZhbHVlKSkgeworICAgICAgICAgICAgc3RhdGVWZWN0b3IuYXBw
ZW5kKGUtPmZvcm1Db250cm9sTmFtZSgpLnN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXRlVmVj
dG9yLmFwcGVuZChlLT5mb3JtQ29udHJvbFR5cGUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICBz
dGF0ZVZlY3Rvci5hcHBlbmQodmFsdWUpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogZG9tL0Rv
Y3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDQzMzQ1KQor
KysgZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVudGl0eVJlZmVyZW5jZTsKICAgICBjbGFzcyBFdmVu
dDsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwotICAgIGNsYXNzIEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZTsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBGcmFtZVZpZXc7CiAgICAg
Y2xhc3MgSGl0VGVzdFJlcXVlc3Q7CkBAIC0zNzUsOCArMzc0LDggQEAgcHVibGljOgogICAgIHZv
aWQgc2V0VXNlc0JlZm9yZUFmdGVyUnVsZXMoYm9vbCBiKSB7IG1fdXNlc0JlZm9yZUFmdGVyUnVs
ZXMgPSBiOyB9CiAKICAgICAvLyBNYWNoaW5lcnkgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHN0
YXRlIHdoZW4geW91IGxlYXZlIGFuZCB0aGVuIGdvIGJhY2sgdG8gYSBwYWdlLgotICAgIHZvaWQg
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZShGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUq
IGUpIHsgbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuYWRkKGUpOyB9Ci0gICAgdm9pZCB1bnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUoRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiBlKSB7
IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLnJlbW92ZShlKTsgfQorICAgIHZvaWQgcmVnaXN0ZXJG
b3JtRWxlbWVudFdpdGhTdGF0ZShFbGVtZW50KiBlKSB7IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRl
LmFkZChlKTsgfQorICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKEVsZW1l
bnQqIGUpIHsgbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUucmVtb3ZlKGUpOyB9CiAgICAgVmVjdG9y
PFN0cmluZz4gZm9ybUVsZW1lbnRzU3RhdGUoKSBjb25zdDsKICAgICB2b2lkIHNldFN0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgYm9vbCBoYXNTdGF0
ZUZvck5ld0Zvcm1FbGVtZW50cygpIGNvbnN0OwpAQCAtODc2LDcgKzg3NSw3IEBAIHByaXZhdGU6
CiAgICAgTGlzdEhhc2hTZXQ8Tm9kZSo+IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzOyAvLyBB
bGwgb2YgdGhlIG5vZGVzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgcHJvdmlkZSBzdHlsZXNoZWV0
cyB0byB0aGUgZG9jdW1lbnQgKDxsaW5rPiwgPHN0eWxlPiwgPD94bWwtc3R5bGVzaGVldD4pCiAK
ICAgICB0eXBlZGVmIEhhc2hNYXA8Rm9ybUVsZW1lbnRLZXksIFZlY3RvcjxTdHJpbmc+LCBGb3Jt
RWxlbWVudEtleUhhc2gsIEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cz4gRm9ybUVsZW1lbnRTdGF0
ZU1hcDsKLSAgICBMaXN0SGFzaFNldDxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqPiBtX2Zv
cm1FbGVtZW50c1dpdGhTdGF0ZTsKKyAgICBMaXN0SGFzaFNldDxFbGVtZW50Kj4gbV9mb3JtRWxl
bWVudHNXaXRoU3RhdGU7CiAgICAgRm9ybUVsZW1lbnRTdGF0ZU1hcCBtX3N0YXRlRm9yTmV3Rm9y
bUVsZW1lbnRzOwogICAgIAogICAgIENvbG9yIG1fbGlua0NvbG9yOwpJbmRleDogZG9tL0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vRWxlbWVudC5oCShyZXZpc2lvbiA0MzM0NSkKKysrIGRv
bS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBub3JtYWxpemVBdHRyaWJ1dGVzKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICBTdHJpbmcgbm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpIGNvbnN0OwogCkBAIC0yMDMs
NiArMjAyLDIwIEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBj
b25zdDsKICAgICB1bnNpZ25lZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0OwogCisgICAgLy8g
Rm9ybUNvbnRyb2xFbGVtZW50IEFQSQorICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWRGb3JtQ29u
dHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25s
eUZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Rm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRl
cmVyKGJvb2wpIHsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250
cm9sTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG51bGxBdG9tOyB9CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG51bGxBdG9tOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgc2F2ZUZvcm1Db250cm9sU3RhdGUoU3RyaW5nJikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZvcm1Db250cm9sU3Rh
dGUoY29uc3QgU3RyaW5nJikgeyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZUF0dHJpYnV0ZU1hcCgpIGNvbnN0OwogCkluZGV4OiBkb20vRm9ybUNvbnRyb2xFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBkb20vRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDMz
NDUpCisrKyBkb20vRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9ybUNvbnRyb2xFbGVtZW50LmgiCi0K
LSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
IgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBFTkFCTEUoV01MKQotI2luY2x1
ZGUgIldNTEZvcm1Db250cm9sRWxlbWVudC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotRm9ybUNvbnRyb2xFbGVtZW50KiB0b0Zvcm1Db250cm9sRWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQotewotICAgIGlmICghZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQp
OwotCi0jaWYgRU5BQkxFKFdNTCkKLSAgICBpZiAoZWxlbWVudC0+aXNXTUxFbGVtZW50KCkpCi0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50
KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KSW5kZXg6IGRvbS9Gb3JtQ29udHJv
bEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlz
aW9uIDQzMzQ1KQorKysgZG9tL0Zvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgot
ICovCi0KLSNpZm5kZWYgRm9ybUNvbnRyb2xFbGVtZW50X2gKLSNkZWZpbmUgRm9ybUNvbnRyb2xF
bGVtZW50X2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdG9taWNTdHJpbmc7Ci1j
bGFzcyBFbGVtZW50OwotCi1jbGFzcyBGb3JtQ29udHJvbEVsZW1lbnQgewotcHVibGljOgotICAg
IHZpcnR1YWwgfkZvcm1Db250cm9sRWxlbWVudCgpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlz
RW5hYmxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUNvbnRyb2wo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dENvbnRyb2woKSBjb25zdCA9IDA7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgdmFsdWUgPSB0cnVl
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0ID0gMDsKLQot
cHJvdGVjdGVkOgotICAgIEZvcm1Db250cm9sRWxlbWVudCgpIHsgfQotfTsKLQotRm9ybUNvbnRy
b2xFbGVtZW50KiB0b0Zvcm1Db250cm9sRWxlbWVudChFbGVtZW50Kik7Ci0KLX0KLQotI2VuZGlm
CkluZGV4OiBkb20vRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcAkocmV2aXNpb24gNDMzNDUpCisr
KyBkb20vRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLQotI2lmIEVOQUJMRShXTUwpCi0jaW5jbHVkZSAiV01MRm9ybUNvbnRyb2xFbGVtZW50Lmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZTo6cmVnaXN0ZXJGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlKiBlbGVtZW50LCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAg
ZG9jdW1lbnQtPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUoZWxlbWVudCk7Ci19Ci0KLXZv
aWQgRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp1bnJlZ2lzdGVyRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlKEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSogZWxlbWVudCwgRG9jdW1l
bnQqIGRvY3VtZW50KQotewotICAgIGRvY3VtZW50LT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRo
U3RhdGUoZWxlbWVudCk7Ci19Ci0KLXZvaWQgRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpm
aW5pc2hQYXJzaW5nQ2hpbGRyZW4oRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKiBlbGVtZW50
LCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFkb2N1bWVudC0+aGFzU3RhdGVGb3JO
ZXdGb3JtRWxlbWVudHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRm9ybUNvbnRyb2xFbGVt
ZW50KiBmb3JtQ29udHJvbEVsZW1lbnQgPSBlbGVtZW50LT50b0Zvcm1Db250cm9sRWxlbWVudCgp
OwotICAgIEFTU0VSVChmb3JtQ29udHJvbEVsZW1lbnQpOwotCi0gICAgU3RyaW5nIHN0YXRlOwot
ICAgIGlmIChkb2N1bWVudC0+dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQoZm9ybUNvbnRyb2xFbGVt
ZW50LT5uYW1lKCkuaW1wbCgpLCBmb3JtQ29udHJvbEVsZW1lbnQtPnR5cGUoKS5pbXBsKCksIHN0
YXRlKSkKLSAgICAgICAgZWxlbWVudC0+cmVzdG9yZVN0YXRlKHN0YXRlKTsKLX0KLQotRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlKiB0b0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShFbGVt
ZW50KiBlbGVtZW50KQotewotICAgIGlmICghZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSo+KGVsZW1lbnQpOwotCi0jaWYgRU5BQkxFKFdNTCkKLSAgICBpZiAoZWxl
bWVudC0+aXNXTUxFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXTUxGb3Jt
Q29udHJvbEVsZW1lbnRXaXRoU3RhdGUqPihlbGVtZW50KTsKLSNlbmRpZgotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLX0KSW5kZXg6IGRvbS9Gb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBkb20vRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmgJKHJldmlzaW9uIDQz
MzQ1KQorKysgZG9tL0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpZm5kZWYgRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlX2gKLSNkZWZpbmUgRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBE
b2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGb3JtQ29udHJvbEVsZW1lbnQ7Ci1jbGFz
cyBTdHJpbmc7Ci0KLWNsYXNzIEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSB7IAotcHVibGlj
OgotICAgIHZpcnR1YWwgfkZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpIHsgfQotCi0gICAg
dmlydHVhbCBib29sIHNhdmVTdGF0ZShTdHJpbmcmIHZhbHVlKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlc3RvcmVTdGF0ZShjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7Ci0KLSAgICAv
LyBFdmVyeSBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgY2xhc3MsIGlzIGFsc28gYSBGb3Jt
Q29udHJvbEVsZW1lbnQgY2xhc3MgYnkgZGVmaW5pdGlvbi4KLSAgICB2aXJ0dWFsIEZvcm1Db250
cm9sRWxlbWVudCogdG9Gb3JtQ29udHJvbEVsZW1lbnQoKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAg
ICBGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKSB7IH0KLQotICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSosIERvY3VtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZShGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqLCBEb2N1bWVudCop
OwotICAgIHN0YXRpYyB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbihGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUqLCBEb2N1bWVudCopOwotfTsKLQotRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlKiB0b0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShFbGVtZW50Kik7Ci0KLX0KLQotI2Vu
ZGlmCkluZGV4OiBkb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vSW5wdXRF
bGVtZW50LmNwcAkocmV2aXNpb24gNDMzNDUpCisrKyBkb20vSW5wdXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9ybUNv
bnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0xNDQsOSArMTQzLDcgQEAgdm9p
ZCBJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKAogICAgICAgICBkYXRhLnNldFZh
bHVlKHZhbHVlKTsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkYXRhLmVsZW1lbnQoKTsKLSAg
ICBGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250cm9sRWxlbWVudCA9IHRvRm9ybUNvbnRyb2xF
bGVtZW50KGVsZW1lbnQpOwotICAgIEFTU0VSVChmb3JtQ29udHJvbEVsZW1lbnQpOwotICAgIGZv
cm1Db250cm9sRWxlbWVudC0+c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKKyAgICBlbGVtZW50
LT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogCiAgICAgLy8gRmly
ZSB0aGUgImlucHV0IiBET00gZXZlbnQKICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGV2ZW50
TmFtZXMoKS5pbnB1dEV2ZW50LCB0cnVlLCBmYWxzZSk7CkluZGV4OiBodG1sL0hUTUxCdXR0b25F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkocmV2
aXNpb24gNDMzNDUpCisrKyBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCBSZW5kZXJPYmplY3QqIEhUTUxCdXR0b25FbGVtZW50OjpjcmVh
dGVSCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckJ1dHRvbih0aGlzKTsKIH0KIAotY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MQnV0dG9uRWxlbWVudDo6dHlwZSgpIGNvbnN0Citjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxCdXR0b25FbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAog
ewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgU1VCTUlUOiB7CkluZGV4OiBo
dG1sL0hUTUxCdXR0b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5oCShyZXZpc2lvbiA0MzM0NSkKKysrIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBwdWJsaWM6CiAgICAgSFRNTEJ1dHRvbkVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDAp
OwogICAgIHZpcnR1YWwgfkhUTUxCdXR0b25FbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICAgICAgCiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIApJ
bmRleDogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hU
TUxGaWVsZFNldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MzM0NSkKKysrIGh0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIAogICAgIHJldHVybiBIVE1MRWxlbWVudDo6
aXNGb2N1c2FibGUoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRmllbGRTZXRFbGVt
ZW50Ojp0eXBlKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEZpZWxkU2V0RWxlbWVu
dDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgZmllbGRzZXQsICgiZmllbGRzZXQiKSk7CiAgICAgcmV0dXJuIGZp
ZWxkc2V0OwpJbmRleDogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgJKHJldmlzaW9uIDQzMzQ1KQorKysgaHRtbC9IVE1M
RmllbGRTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBS
ZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsK
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogfTsKSW5k
ZXg6IGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDMzNDUpCisrKyBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAg
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdHRhY2goKQogICAgIGlmIChoYXNUYWdOYW1l
KGlucHV0VGFnKSkKICAgICAgICAgaXNJbnB1dFR5cGVIaWRkZW4gPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4odGhpcyktPmlzSW5wdXRUeXBlSGlkZGVuKCk7CiAKLSAgICBpZiAoYXV0
b2ZvY3VzKCkgJiYgcmVuZGVyZXIoKSAmJiAhZG9jdW1lbnQoKS0+aWdub3JlQXV0b2ZvY3VzKCkg
JiYgIWlzUmVhZE9ubHlDb250cm9sKCkgJiYKKyAgICBpZiAoYXV0b2ZvY3VzKCkgJiYgcmVuZGVy
ZXIoKSAmJiAhZG9jdW1lbnQoKS0+aWdub3JlQXV0b2ZvY3VzKCkgJiYgIWlzUmVhZE9ubHlGb3Jt
Q29udHJvbCgpICYmCiAgICAgICAgICAgICAoKGhhc1RhZ05hbWUoaW5wdXRUYWcpICYmICFpc0lu
cHV0VHlwZUhpZGRlbikgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8CiAgICAgICAgICAgICAg
IGhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkpCiAgICAg
ICAgICBmb2N1cygpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6cmVtb3ZlZEZyb20KICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXAp
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Om5hbWUo
KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3Jt
Q29udHJvbE5hbWUoKSBjb25zdAogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbiA9IGdldEF0
dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgcmV0dXJuIG4uaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBu
OwpAQCAtMjM5LDcgKzIzOSw3IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbFZh
bGlkYXQKICAgICAvLyAgICAgIFRoZSBjb250cm9sIGRvZXMgbm90IGhhdmUgYSByZXBldGl0aW9u
IHRlbXBsYXRlIGFzIGFuIGFuY2VzdG9yLgogICAgIC8vICAgICAgVGhlIGNvbnRyb2wgZG9lcyBu
b3QgaGF2ZSBhIGRhdGFsaXN0IGVsZW1lbnQgYXMgYW4gYW5jZXN0b3IuCiAgICAgLy8gICAgICBU
aGUgY29udHJvbCBpcyBub3QgYW4gb3V0cHV0IGVsZW1lbnQuCi0gICAgcmV0dXJuIGZvcm0oKSAm
JiBuYW1lKCkubGVuZ3RoKCkgJiYgIWRpc2FibGVkKCkgJiYgIWlzUmVhZE9ubHlDb250cm9sKCk7
CisgICAgcmV0dXJuIGZvcm0oKSAmJiBuYW1lKCkubGVuZ3RoKCkgJiYgIWRpc2FibGVkKCkgJiYg
IWlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOwogfQogICAgIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKQEAgLTI2MywyMyArMjYzLDIzIEBAIHZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUYKIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQogICAg
IDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCiB7Ci0gICAgRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZWdpc3RlckZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZSh0aGlzLCBkb2N1bWVudCgpKTsKKyAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50
V2l0aFN0YXRlKHRoaXMpOwogfQogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp+
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpCiB7Ci0gICAgRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjp1bnJlZ2lzdGVyRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRoaXMs
IGRvY3VtZW50KCkpOworICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhT
dGF0ZSh0aGlzKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3
aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCiB7Ci0gICAgRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjp1bnJlZ2lzdGVyRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRoaXMsIGRvY3Vt
ZW50KCkpOworICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0
aGlzKTsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1
bWVudCgpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpZE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKQogewotICAgIEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6cmVnaXN0ZXJGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGhpcywgZG9jdW1lbnQoKSk7
CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiB9
CiAKQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGU6OmZpCiAgICAgaWYgKGRvYy0+aGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSkgewogICAg
ICAgICBTdHJpbmcgc3RhdGU7CiAgICAgICAgIGlmIChkb2MtPnRha2VTdGF0ZUZvckZvcm1FbGVt
ZW50KG5hbWUoKS5pbXBsKCksIHR5cGUoKS5pbXBsKCksIHN0YXRlKSkKLSAgICAgICAgICAgIHJl
c3RvcmVTdGF0ZShzdGF0ZSk7CisgICAgICAgICAgICByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShz
dGF0ZSk7CiAgICAgfQogfQogCkluZGV4OiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gNDMz
NDUpCisrKyBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQsOCArMjQsNiBAQAogI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKICNkZWZpbmUg
SFRNTEZvcm1Db250cm9sRWxlbWVudF9oCiAKLSNpbmNsdWRlICJGb3JtQ29udHJvbEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCIKICNpbmNsdWRlICJI
VE1MRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMyw3ICszMSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZvcm1EYXRhTGlzdDsKIGNsYXNzIEhUTUxGb3JtRWxl
bWVudDsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dCwgcHVibGljIEZvcm1Db250cm9sRWxlbWVudCB7CitjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1F
bGVtZW50Kik7CiAgICAgdmlydHVhbCB+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpOwpAQCAtNDMs
MTAgKzQxLDggQEAgcHVibGljOgogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JtOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gIWRpc2FibGVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Rm9ybUNvbnRyb2wo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWRGb3Jt
Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuICFkaXNhYmxlZCgpOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaCgpOwpAQCAtNTUsOCArNTEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoKSB7fQogCi0gICAgdmlydHVhbCBib29sIHZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIgPSB0cnVlKSB7IG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIgPSBiOyB9CisgICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVz
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7
IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9CiAKICAgICB2b2lkIG9uQ2hhbmdlKCk7CiAK
QEAgLTY5LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNh
YmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Q29udHJvbCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUZv
cm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQogICAgIHZvaWQgc2V0UmVh
ZE9ubHkoYm9vbCk7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29udHJv
bCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZApAQCAtNzgsNyArNzQsMTIgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKIAotICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CisKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbFR5cGUoKTsg
fQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250
cm9sTmFtZSgpOyB9CisKICAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KQEAgLTExMSwxNCArMTEyLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Zh
bHVlTWF0Y2hlc1JlbmRlcmVyOwogfTsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZSA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlICB7CitjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0
YXRlIDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIEZv
cm1Db250cm9sRWxlbWVudCogdG9Gb3JtQ29udHJvbEVsZW1lbnQoKSB7IHJldHVybiB0aGlzOyB9
CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogCiBwcm90ZWN0ZWQ6
CkluZGV4OiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQzMzQ1KQorKysgaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBIVE1MSW5wdXRFbGVtZW50
Ojp+SFRNTElucHV0RWxlbWVudCgpCiAgICAgcmVtb3ZlRnJvbUZvcm0oKTsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50OjpuYW1lKCkgY29uc3QKK2NvbnN0IEF0b21p
Y1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9kYXRhLm5hbWUoKTsKIH0KQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldElucHV0VHlwZShjb25zCiAgICAgICAgIG1faW1hZ2VMb2FkZXIuY2xl
YXIoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojp0eXBlKCkg
Y29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xU
eXBlKCkgY29uc3QKIHsKICAgICAvLyBuZWVkcyB0byBiZSBsb3dlcmNhc2UgYWNjb3JkaW5nIHRv
IERPTSBzcGVjCiAgICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgewpAQCAtMzgzLDcgKzM4Myw3IEBA
IGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6dHkKICAgICByZXR1cm4gZW1w
dHlBdG9tOwogfQogCi1ib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNhdmVTdGF0ZShTdHJpbmcmIHJl
c3VsdCkgY29uc3QKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUo
U3RyaW5nJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKCFhdXRvQ29tcGxldGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNDE2LDcgKzQxNiw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVu
dDo6c2F2ZVN0YXRlKFN0cmluZyYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSFRNTElu
cHV0RWxlbWVudDo6cmVzdG9yZVN0YXRlKGNvbnN0IFN0cmluZyYgc3RhdGUpCit2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IFN0cmluZyYgc3RhdGUp
CiB7CiAgICAgQVNTRVJUKGlucHV0VHlwZSgpICE9IFBBU1NXT1JEKTsgLy8gc2hvdWxkIG5ldmVy
IHNhdmUvcmVzdG9yZSBwYXNzd29yZCBmaWVsZHMKICAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7
CkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYgogICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gc2V0Q2hhbmdlZCBpZiB0aGUgZm9ybSBp
cyBsb29raW5nIGF0IHRoZSBkZWZhdWx0IHZhbHVlIHJpZ2h0IG5vdy4KICAgICAgICAgaWYgKG1f
ZGF0YS52YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygp
OwotICAgICAgICBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CisgICAgICAgIHNldEZv
cm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGNoZWNrZWRBdHRyKSB7CiAgICAgICAgIG1fZGVmYXVsdENoZWNrZWQgPSAh
YXR0ci0+aXNOdWxsKCk7CiAgICAgICAgIGlmIChtX3VzZURlZmF1bHRDaGVja2VkKSB7CkBAIC03
NTIsNyArNzUyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphdHRhY2goKQogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZXRhY2goKQogewogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OmRldGFjaCgpOwotICAgIHNldFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKKyAg
ICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKIH0KIAogU3RyaW5n
IEhUTUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQoKSBjb25zdApAQCAtOTg3LDcgKzk4Nyw3IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3QKICAgICBpZiAoaW5wdXRUeXBl
KCkgPT0gRklMRSAmJiAhdmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBz
ZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CisgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1h
dGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgaWYgKHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0
cmlidXRlKCkpIHsKICAgICAgICAgaWYgKGlucHV0VHlwZSgpID09IEZJTEUpCiAgICAgICAgICAg
ICBtX2ZpbGVMaXN0LT5jbGVhcigpOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKQogICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ld
KSk7CiAKLSAgICBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOworICAgIHNldEZvcm1Db250cm9s
VmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3Jt
U3RhdGVDaGFuZ2VkKG1fZGF0YSwgZG9jdW1lbnQoKSk7CiB9CiAKSW5kZXg6IGh0bWwvSFRNTElu
cHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZp
c2lvbiA0MzM0NSkKKysrIGh0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJvdXRUb1VubG9hZCgp
OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7CiAgCiAgICAgYm9vbCBh
dXRvQ29tcGxldGUoKSBjb25zdDsKIApAQCAtODYsOSArODYsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIGNoZWNrZWQoKSAmJiAoaW5wdXRU
eXBlKCkgPT0gQ0hFQ0tCT1ggfHwgaW5wdXRUeXBlKCkgPT0gUkFESU8pOyB9CiAgICAgdmlydHVh
bCBib29sIGlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV0ZXJtaW5hdGUoKTsg
fQogICAgIAotICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBpc1JlYWRPbmx5Q29u
dHJvbCgpOyB9CisgICAgYm9vbCByZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIGlzUmVhZE9ubHlG
b3JtQ29udHJvbCgpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29udHJvbCgpIGNvbnN0
IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Rm9ybUNv
bnRyb2woKSBjb25zdCB7IHJldHVybiBpc1RleHRGaWVsZCgpOyB9CiAKICAgICBib29sIGlzVGV4
dEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBTVUJNSVQgfHwgbV90eXBlID09IFJF
U0VUIHx8IG1fdHlwZSA9PSBCVVRUT047IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBSQURJTzsgfQpAQCAtMTAyLDcgKzEwMiw3IEBA
IHB1YmxpYzoKICAgICBib29sIGluZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2luZGV0
ZXJtaW5hdGU7IH0KICAgICB2b2lkIHNldEluZGV0ZXJtaW5hdGUoYm9vbCk7CiAgICAgdmlydHVh
bCBpbnQgc2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CkBAIC0xMTYsOCArMTE2LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKICAgICB2
b2lkIHNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgc2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCByZXN0b3JlU3RhdGUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIHNh
dmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5TdGFydFNlbGVjdGlvbigpIGNvbnN0OwogICAgIApJbmRleDogaHRtbC9IVE1MS2V5
Z2VuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDQzMzQ1KQorKysgaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDcgKzU1LDcgQEAgSFRNTEtleWdlbkVsZW1lbnQ6OkhUTUxLZXlnZW5FbGVt
ZW50KGNvbgogICAgIH0KIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MS2V5Z2VuRWxlbWVu
dDo6dHlwZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxLZXlnZW5FbGVtZW50Ojpm
b3JtQ29udHJvbFR5cGUoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
QXRvbWljU3RyaW5nLCBrZXlnZW4sICgia2V5Z2VuIikpOwogICAgIHJldHVybiBrZXlnZW47Cklu
ZGV4OiBodG1sL0hUTUxLZXlnZW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MS2V5
Z2VuRWxlbWVudC5oCShyZXZpc2lvbiA0MzM0NSkKKysrIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBwdWJsaWM6CiAgICAgSFRNTEtleWdl
bkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50
KiA9IDApOwogCiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAg
ICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpOwpJbmRl
eDogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MTGVn
ZW5kRWxlbWVudC5jcHAJKHJldmlzaW9uIDQzMzQ1KQorKysgaHRtbC9IVE1MTGVnZW5kRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgYm9vbCBIVE1MTGVnZW5kRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjbwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MTGVnZW5kRWxlbWVudDo6dHlwZSgp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxMZWdlbmRFbGVtZW50Ojpmb3JtQ29udHJv
bFR5cGUoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBsZWdlbmQsICgibGVnZW5kIikpOwogICAgIHJldHVybiBsZWdlbmQ7CkluZGV4OiBodG1s
L0hUTUxMZWdlbmRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MTGVnZW5kRWxlbWVu
dC5oCShyZXZpc2lvbiA0MzM0NSkKKysrIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRNTExlZ2Vu
ZEVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKIAogICAgIC8qKgpJ
bmRleDogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hU
TUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MzM0NSkKKysrIGh0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBIVE1M
T3B0R3JvdXBFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIAogICAgIHJldHVybiBIVE1MRWxlbWVudDo6
aXNGb2N1c2FibGUoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT3B0R3JvdXBFbGVt
ZW50Ojp0eXBlKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTE9wdEdyb3VwRWxlbWVu
dDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgb3B0Z3JvdXAsICgib3B0Z3JvdXAiKSk7CiAgICAgcmV0dXJuIG9w
dGdyb3VwOwpJbmRleDogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgJKHJldmlzaW9uIDQzMzQ1KQorKysgaHRtbC9IVE1M
T3B0R3JvdXBFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGlj
OgogICAgIEhUTUxPcHRHcm91cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGUqKTsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBi
b29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQpJbmRl
eDogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDQzMzQ1KQorKysgaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBIVE1MT3B0aW9uRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjbwogICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT3B0aW9uRWxlbWVudDo6dHlwZSgp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxPcHRpb25FbGVtZW50Ojpmb3JtQ29udHJv
bFR5cGUoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBvcHRpb24sICgib3B0aW9uIikpOwogICAgIHJldHVybiBvcHRpb247CkluZGV4OiBodG1s
L0hUTUxPcHRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5oCShyZXZpc2lvbiA0MzM0NSkKKysrIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRldGFj
aCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPik7CiAgICAgCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29u
c3Q7CiAKICAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGV4dChjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDMz
NDUpCisrKyBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDcgKzEwOSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWwKICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZWNhbGNTdHlsZShjaCk7CiB9CiAK
LWNvbnN0IEF0b21pY1N0cmluZyYgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGUoKSBjb25zdAorY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MU2VsZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29u
c3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2VsZWN0
TXVsdGlwbGUsICgic2VsZWN0LW11bHRpcGxlIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBzZWxlY3RPbmUsICgic2VsZWN0LW9uZSIpKTsKQEAgLTI3MCw3
ICsyNzAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTCiAgICAg
ICAgIH0KIH0KIAotYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZVN0YXRlKFN0cmluZyYgdmFs
dWUpIGNvbnN0Citib29sIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZShT
dHJpbmcmIHZhbHVlKSBjb25zdAogewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBp
dGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBsID0gaXRlbXMuc2l6ZSgpOwpAQCAtMjg0LDcg
KzI4NCw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVTdGF0ZShTdHJpbmcKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZVN0YXRlKGNv
bnN0IFN0cmluZyYgc3RhdGUpCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNv
bnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmIHN0YXRlKQogewogICAgIHJlY2FsY0xpc3RJdGVtcygp
OwogICAgIApJbmRleDogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gNDMzNDUpCisrKyBodG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNjsgfQogICAgIHZpcnR1
YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7CiAKLSAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wg
aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKQEAgLTc4LDggKzc4LDggQEAgcHVibGljOgog
ICAgIAogICAgIFBhc3NSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBvcHRpb25zKCk7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgc2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29s
IHNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9k
ZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3Vu
dERlbHRhID0gMCk7CiAKSW5kZXg6IGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gNDMzNDUpCisr
KyBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywyMyAr
NjcsMjMgQEAgSFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudAogICAgICwg
bV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUodGV4dGFy
ZWFUYWcpKTsKLSAgICBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOworICAgIHNldEZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdl
ZCh0aGlzKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGV4dEFyZWFFbGVtZW50Ojp0
eXBlKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRleHRBcmVhRWxlbWVudDo6Zm9y
bUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgdGV4dGFyZWEsICgidGV4dGFyZWEiKSk7CiAgICAgcmV0dXJuIHRleHRhcmVh
OwogfQogCi1ib29sIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNhdmVTdGF0ZShTdHJpbmcmIHJlc3Vs
dCkgY29uc3QKK2Jvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUo
U3RyaW5nJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgcmVzdWx0ID0gdmFsdWUoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpyZXN0b3JlU3RhdGUoY29u
c3QgU3RyaW5nJiBzdGF0ZSkKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6cmVzdG9yZUZvcm1D
b250cm9sU3RhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZSkKIHsKICAgICBzZXREZWZhdWx0VmFsdWUo
c3RhdGUpOwogfQpAQCAtMjY2LDEyICsyNjYsMTIgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50
OjpyZW5kZXJlcldpbGxCZQogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnVwZGF0ZVZhbHVl
KCkgY29uc3QKIHsKLSAgICBpZiAodmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkKKyAgICBpZiAoZm9y
bUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlQocmVuZGVyZXIoKSk7CiAgICAgbV92YWx1ZSA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVu
ZGVyZXIoKSktPnRleHQoKTsKLSAgICBjb25zdF9jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPih0
aGlzKS0+c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKKyAgICBjb25zdF9jYXN0PEhUTUxUZXh0
QXJlYUVsZW1lbnQqPih0aGlzKS0+c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0
cnVlKTsKICAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwogfQogCkBAIC0yOTUsNyAr
Mjk1LDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZShjb25zdAogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3ZhbHVlID0gbm9ybWFsaXplZFZhbHVlOwotICAgIHNldFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKCk7CisgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cih0cnVlKTsKICAgICBpZiAoaW5Eb2N1bWVudCgpKQogICAgICAgICBkb2N1bWVudCgpLT51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCkluZGV4OiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
aAkocmV2aXNpb24gNDMzNDUpCisrKyBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMTQgKzQzLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBp
c0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHNhdmVT
dGF0ZShTdHJpbmcmIHZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRl
KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBzYXZlRm9ybUNvbnRyb2xTdGF0ZShT
dHJpbmcmIHZhbHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZvcm1Db250cm9s
U3RhdGUoY29uc3QgU3RyaW5nJik7CiAKLSAgICBib29sIHJlYWRPbmx5KCkgY29uc3QgeyByZXR1
cm4gaXNSZWFkT25seUNvbnRyb2woKTsgfQorICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJl
dHVybiBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzVGV4
dENvbnRyb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVGV4
dEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgaW50IHNlbGVjdGlv
blN0YXJ0KCk7CiAgICAgaW50IHNlbGVjdGlvbkVuZCgpOwpJbmRleDogcGFnZS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0MzM0NSkKKysrIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDcsMTQgKzE1MDcsMTEgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRWYWx1ZQogYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojppc0VuYWJsZWQoKSBjb25zdAogewogICAgIEFTU0VSVChtX3JlbmRlcmVyKTsK
LSAgICBpZiAoIW1fcmVuZGVyZXItPm5vZGUoKSB8fCAhbV9yZW5kZXJlci0+bm9kZSgpLT5pc0Vs
ZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgRm9ybUNvbnRyb2xFbGVt
ZW50KiBmb3JtQ29udHJvbEVsZW1lbnQgPSB0b0Zvcm1Db250cm9sRWxlbWVudChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obV9yZW5kZXJlci0+bm9kZSgpKSk7Ci0gICAgaWYgKCFmb3JtQ29udHJvbEVs
ZW1lbnQpCisgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKKyAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICByZXR1cm4gZm9ybUNvbnRyb2xFbGVtZW50LT5pc0VuYWJsZWQoKTsgICAgCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKTsKIH0K
IAogUmVuZGVyVmlldyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dG9wUmVuZGVyZXIoKSBj
b25zdApAQCAtMjI4OSwxNSArMjI4NiwxNSBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFyaWFSb2xlCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhblNldEZvY3Vz
QXR0cmlidXRlKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9yZW5kZXJlcik7CisgICAgTm9kZSog
bm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKIAogICAgIC8vIE5PVEU6IEl0IHdvdWxkIGJlIG1v
cmUgYWNjdXJhdGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3aGV0aGVyIHNldEZvY3VzZWROb2RlKCkg
d291bGQKICAgICAvLyBkbyBhbnl0aGluZy4gIEZvciBleGFtcGxlLCBpdCBzZXRGb2N1c2VkTm9k
ZSgpIHdpbGwgZG8gbm90aGluZyBpZiB0aGUgY3VycmVudCBmb2N1c2VkCiAgICAgLy8gbm9kZSB3
aWxsIG5vdCByZWxpbnF1aXNoIHRoZSBmb2N1cy4KLSAgICBpZiAoIW1fcmVuZGVyZXItPm5vZGUo
KSB8fCAhbV9yZW5kZXJlci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpCisgICAgaWYgKCFub2Rl
IHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEZvcm1Db250cm9sRWxlbWVudCogZm9ybUNvbnRyb2xFbGVtZW50ID0gdG9Gb3JtQ29udHJvbEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fcmVuZGVyZXItPm5vZGUoKSkpOwotICAgIGlm
IChmb3JtQ29udHJvbEVsZW1lbnQgJiYgIWZvcm1Db250cm9sRWxlbWVudC0+aXNFbmFibGVkKCkp
CisgICAgaWYgKCFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRW5hYmxlZEZvcm1Db250
cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAocm9sZVZhbHVlKCkp
IHsKSW5kZXg6IHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MzM0NSkKKysrIHBhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsOCArMzU3LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgIH0KICAgICAKICAgICBpZiAoSFRNTElucHV0RWxl
bWVudCogZmlsZUlucHV0ID0gYXNGaWxlSW5wdXQoZWxlbWVudCkpIHsKLSAgICAgICAgCi0gICAg
ICAgIGlmICghZmlsZUlucHV0LT5pc0VuYWJsZWQoKSkKKyAgICAgICAgaWYgKCFmaWxlSW5wdXQt
PmlzRW5hYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWRyYWdEYXRhLT5jb250YWluc0ZpbGVzKCkpCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAJKHJldmlzaW9uIDQzMzQ1KQorKysgcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDE1ICszMjQsMTIgQEAgYm9vbCBSZW5kZXJNZW51
TGlzdDo6aXRlbUlzRW5hYmxlZCh1bnNpZwogICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShv
cHRpb25UYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBncm91cEVuYWJsZWQg
PSB0cnVlOwotICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkgJiYgZWxlbWVudC0+cGFyZW50
Tm9kZSgpLT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkgewotICAgICAgICBGb3JtQ29udHJvbEVs
ZW1lbnQqIGZvcm1Db250cm9sRWxlbWVudCA9IHRvRm9ybUNvbnRyb2xFbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihlbGVtZW50LT5wYXJlbnROb2RlKCkpKTsKLSAgICAgICAgZ3JvdXBFbmFi
bGVkID0gZm9ybUNvbnRyb2xFbGVtZW50LT5pc0VuYWJsZWQoKTsKLSAgICB9Ci0KKyAgICBpZiAo
ZWxlbWVudC0+cGFyZW50Tm9kZSgpICYmIGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFt
ZShvcHRncm91cFRhZykpCisgICAgICAgIGdyb3VwRW5hYmxlZCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihlbGVtZW50LT5wYXJlbnROb2RlKCkpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOwogICAg
IGlmICghZ3JvdXBFbmFibGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
dG9Gb3JtQ29udHJvbEVsZW1lbnQoZWxlbWVudCktPmlzRW5hYmxlZCgpOworICAgIHJldHVybiBl
bGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOwogfQogCiBQb3B1cE1lbnVTdHlsZSBSZW5k
ZXJNZW51TGlzdDo6aXRlbVN0eWxlKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNDMzNDUpCisrKyByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEJSRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKQEAgLTEwOSwxMSArMTA4LDkgQEAgc3RhdGljIGlubGluZSBib29sIHVwZGF0ZVVz
ZXJNb2RpZnlQcm9wZQogICAgIGJvb2wgaXNSZWFkT25seUNvbnRyb2wgPSBmYWxzZTsKIAogICAg
IGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgRm9ybUNvbnRyb2xFbGVtZW50
KiBmb3JtQ29udHJvbEVsZW1lbnQgPSB0b0Zvcm1Db250cm9sRWxlbWVudChzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSkpOwotICAgICAgICBBU1NFUlQoZm9ybUNvbnRyb2xFbGVtZW50KTsKLQot
ICAgICAgICBpc0VuYWJsZWQgPSBmb3JtQ29udHJvbEVsZW1lbnQtPmlzRW5hYmxlZCgpOwotICAg
ICAgICBpc1JlYWRPbmx5Q29udHJvbCA9IGZvcm1Db250cm9sRWxlbWVudC0+aXNSZWFkT25seUNv
bnRyb2woKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKKyAgICAgICAgaXNFbmFibGVkID0gZWxlbWVudC0+aXNFbmFibGVkRm9ybUNvbnRy
b2woKTsKKyAgICAgICAgaXNSZWFkT25seUNvbnRyb2wgPSBlbGVtZW50LT5pc1JlYWRPbmx5Rm9y
bUNvbnRyb2woKTsKICAgICB9CiAKICAgICBzdHlsZS0+c2V0VXNlck1vZGlmeSgoaXNSZWFkT25s
eUNvbnRyb2wgfHwgIWlzRW5hYmxlZCkgPyBSRUFEX09OTFkgOiBSRUFEX1dSSVRFX1BMQUlOVEVY
VF9PTkxZKTsKQEAgLTE5Myw3ICsxOTAsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRJ
bm5lclRleHRWYWx1CiAgICAgICAgIG1fdXNlckVkaXRlZCA9IGZhbHNlOwogICAgIH0KIAotICAg
IGZvcm1Db250cm9sRWxlbWVudCgpLT5zZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOworICAgIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKHRydWUpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRVc2VyRWRpdGVk
KGJvb2wgaXNVc2VyRWRpdGVkKQpAQCAtNTMzLDkgKzUzMCw0IEBAIEhUTUxFbGVtZW50KiBSZW5k
ZXJUZXh0Q29udHJvbDo6aW5uZXJUZXgKICAgICByZXR1cm4gbV9pbm5lclRleHQuZ2V0KCk7CiB9
CiAKLUZvcm1Db250cm9sRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2w6OmZvcm1Db250cm9sRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRvRm9ybUNvbnRyb2xFbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKCkpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9uIDQzMzQ1KQorKysgcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGb3JtQ29udHJvbEVsZW1lbnQ7CiBjbGFzcyBWaXNpYmxl
U2VsZWN0aW9uOwogY2xhc3MgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ7CiBjbGFzcyBUZXh0Q29u
dHJvbElubmVyVGV4dEVsZW1lbnQ7CkBAIC05Niw4ICs5NSw2IEBAIHByb3RlY3RlZDoKICAgICBm
cmllbmQgY2xhc3MgVGV4dEl0ZXJhdG9yOwogICAgIEhUTUxFbGVtZW50KiBpbm5lclRleHRFbGVt
ZW50KCkgY29uc3Q7CiAKLSAgICBGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250cm9sRWxlbWVu
dCgpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIFN0cmluZyBmaW5pc2hUZXh0KFZlY3RvcjxVQ2hh
cj4mKSBjb25zdDsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwCShyZXZpc2lvbiA0MzM0NSkKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmU6On5SZW5kZXJUZXh0Qwogdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZTo6c3VidHJlZUhhc0NoYW5nZWQoKQogewogICAgIFJlbmRlclRleHRDb250cm9sOjpzdWJ0cmVl
SGFzQ2hhbmdlZCgpOwotICAgIGZvcm1Db250cm9sRWxlbWVudCgpLT5zZXRWYWx1ZU1hdGNoZXNS
ZW5kZXJlcihmYWxzZSk7CisgICAgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPnNldEZv
cm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwogCiAgICAgaWYgKCFub2RlKCkt
PmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDQzMzQ1KQorKysgcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Niw3ICs0ODYs
NyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlCiAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBpbm5lclRleHRFbGVtZW50KCktPnNldElubmVy
VGV4dChpbnB1dEVsZW1lbnQoKS0+cGxhY2Vob2xkZXJWYWx1ZSgpLCBlYyk7CiAgICAgICAgIEFT
U0VSVCghZWMpOwotICAgIH0gZWxzZSBpZiAoIWZvcm1Db250cm9sRWxlbWVudCgpLT52YWx1ZU1h
dGNoZXNSZW5kZXJlcigpIHx8IHBsYWNlaG9sZGVyVmlzaWJpbGl0eVNob3VsZENoYW5nZSkKKyAg
ICB9IGVsc2UgaWYgKCFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Zm9ybUNvbnRyb2xW
YWx1ZU1hdGNoZXNSZW5kZXJlcigpIHx8IHBsYWNlaG9sZGVyVmlzaWJpbGl0eVNob3VsZENoYW5n
ZSkKICAgICAgICAgc2V0SW5uZXJUZXh0VmFsdWUoaW5wdXRFbGVtZW50KCktPnZhbHVlKCkpOwog
CiAgICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2libGUpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlz
aW9uIDQzMzQ1KQorKysgcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjE4LDE0ICs2MTgsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKGNv
bnN0IAogCiBib29sIFJlbmRlclRoZW1lOjppc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBv
KSBjb25zdAogewotICAgIGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2RlKCktPmlzRWxlbWVudE5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBGb3JtQ29udHJvbEVsZW1lbnQqIGZv
cm1Db250cm9sRWxlbWVudCA9IHRvRm9ybUNvbnRyb2xFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1l
bnQqPihvLT5ub2RlKCkpKTsKLSAgICBpZiAoIWZvcm1Db250cm9sRWxlbWVudCkKKyAgICBOb2Rl
KiBub2RlID0gby0+bm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmb3JtQ29udHJvbEVsZW1l
bnQtPmlzRW5hYmxlZCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkt
PmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWU6OmlzRm9jdXNl
ZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CkBAIC02NDcsMTQgKzY0MywxMCBAQCBib29s
IFJlbmRlclRoZW1lOjppc1ByZXNzZWQoY29uc3QgUmVuZGVyCiAKIGJvb2wgUmVuZGVyVGhlbWU6
OmlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKIHsKLSAgICBp
ZiAoIW8tPm5vZGUoKSB8fCAhby0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEZvcm1Db250cm9sRWxlbWVudCogZm9ybUNvbnRyb2xFbGVtZW50
ID0gdG9Gb3JtQ29udHJvbEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG8tPm5vZGUoKSkp
OwotICAgIGlmICghZm9ybUNvbnRyb2xFbGVtZW50KQorICAgIE5vZGUqIG5vZGUgPSBvLT5ub2Rl
KCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBmb3JtQ29udHJvbEVsZW1lbnQtPmlzUmVhZE9ubHlD
b250cm9sKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNSZWFk
T25seUZvcm1Db250cm9sKCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWU6OmlzSG92ZXJlZChjb25z
dCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5tbQkocmV2aXNpb24gNDMzNDUpCisrKyByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMyMSwxMSArMTMyMSw3IEBAIHZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVudUwKIAogICAgIC8vIFNldCB0aGUgZm9yZWdyb3VuZCBj
b2xvciB0byBibGFjayBvciBncmF5IHdoZW4gd2UgaGF2ZSB0aGUgYXF1YSBsb29rLgogICAgIC8v
IENhc3QgdG8gUkdCMzIgaXMgdG8gd29yayBhcm91bmQgYSBjb21waWxlciBidWcuCi0gICAgYm9v
bCBpc0VuYWJsZWQgPSB0cnVlOwotICAgIGlmIChGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1Db250
cm9sRWxlbWVudCA9IHRvRm9ybUNvbnRyb2xFbGVtZW50KGUpKQotICAgICAgICBpc0VuYWJsZWQg
PSBmb3JtQ29udHJvbEVsZW1lbnQtPmlzRW5hYmxlZCgpOwotCi0gICAgc3R5bGUtPnNldENvbG9y
KGlzRW5hYmxlZCA/IHN0YXRpY19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpk
YXJrR3JheSk7CisgICAgc3R5bGUtPnNldENvbG9yKGUgJiYgZS0+aXNFbmFibGVkRm9ybUNvbnRy
b2woKSA/IHN0YXRpY19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3Jh
eSk7CiAKICAgICAvLyBTZXQgdGhlIGJ1dHRvbidzIHZlcnRpY2FsIHNpemUuCiAgICAgc2V0U2l6
ZUZyb21Gb250KHN0eWxlLCBtZW51TGlzdEJ1dHRvblNpemVzKCkpOwpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQkocmV2aXNpb24gNDMzNDUpCisrKyByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTk1MSwxMSArOTUxLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0TWVudUxpc3RTdHlsZQogCiAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJs
YWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBhcXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBS
R0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1Zy4KLSAgICBib29sIGlzRW5hYmxl
ZCA9IHRydWU7Ci0gICAgaWYgKEZvcm1Db250cm9sRWxlbWVudCogZm9ybUNvbnRyb2xFbGVtZW50
ID0gdG9Gb3JtQ29udHJvbEVsZW1lbnQoZSkpCi0gICAgICAgIGlzRW5hYmxlZCA9IGZvcm1Db250
cm9sRWxlbWVudC0+aXNFbmFibGVkKCk7Ci0KLSAgICBzdHlsZS0+c2V0Q29sb3IoaXNFbmFibGVk
ID8gc3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsK
KyAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiBlLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpID8gc3Rh
dGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAg
IC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRTaXplRnJvbUZvbnQo
c3R5bGUsIG1lbnVMaXN0QnV0dG9uU2l6ZXMoKSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGhl
bWVTYWZhcmkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5j
cHAJKHJldmlzaW9uIDQzMzQ1KQorKysgcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAg
LTgzNiw3ICs4MzUsNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZW51TGlzdFN0
CiAKICAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3IgdG8gYmxhY2sgb3IgZ3JheSB3aGVu
IHdlIGhhdmUgdGhlIGFxdWEgbG9vay4KICAgICAvLyBDYXN0IHRvIFJHQjMyIGlzIHRvIHdvcmsg
YXJvdW5kIGEgY29tcGlsZXIgYnVnLgotICAgIHN0eWxlLT5zZXRDb2xvcihlLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpICYmIHRvRm9ybUNvbnRyb2xFbGVtZW50KGUpLT5pc0VuYWJsZWQoKSA/IHN0
YXRpY19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3JheSk7CisgICAg
c3R5bGUtPnNldENvbG9yKGUgJiYgZS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSA/IHN0YXRpY19j
YXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3JheSk7CiAKICAgICAvLyBT
ZXQgdGhlIGJ1dHRvbidzIHZlcnRpY2FsIHNpemUuCiAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7
CkluZGV4OiB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwv
V01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDMzNDUpCisrKyB3bWwvV01MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFdNTEZvcm1Db250cm9sRWxlbWVudAogV01MRm9ybUNv
bnRyb2xFbGVtZW50OjpXTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogV01MRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkKICAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCkBAIC01NiwxNiAr
NTUsNiBAQCBib29sIFdNTEZvcm1Db250cm9sRWxlbWVudDo6aXNGb2N1c2FibGUoCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLS8vIFdNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZQotV01MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDog
V01MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotewotfQotCi1XTUxGb3Jt
Q29udHJvbEVsZW1lbnRXaXRoU3RhdGU6On5XTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUo
KQotewotfQotCiB9CiAKICNlbmRpZgpJbmRleDogd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gNDMz
NDUpCisrKyB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDI2ICsyMiwyMSBAQAogI2RlZmluZSBXTUxGb3JtQ29udHJvbEVsZW1lbnRfaAogCiAjaWYgRU5B
QkxFKFdNTCkKLSNpbmNsdWRlICJGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuaCIKLSNpbmNs
dWRlICJGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJXTUxFbGVtZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV01MRm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGlj
IFdNTEVsZW1lbnQsIHB1YmxpYyBGb3JtQ29udHJvbEVsZW1lbnQgeworY2xhc3MgV01MRm9ybUNv
bnRyb2xFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgewogcHVibGljOgogICAgIFdNTEZvcm1D
b250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQpOwogICAgIHZpcnR1YWwgfldNTEZvcm1Db250cm9sRWxlbWVudCgpOwogCi0gICAgdmly
dHVhbCBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzUmVhZE9ubHlDb250cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzUmVhZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVGV4dEZvcm1Db250cm9sKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2YWx1ZU1hdGNoZXNSZW5kZXJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiID0gdHJ1ZSkgeyBtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyID0gYjsgfQotCi0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBlbXB0eUF0b207IH0KKyAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRy
b2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcihib29sIGIgPSB0cnVlKSB7IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKIApAQCAtNDksMTUgKzQ0LDYgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7CiB9OwogCi1jbGFzcyBX
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgOiBwdWJsaWMgV01MRm9ybUNvbnRyb2xFbGVt
ZW50LCBwdWJsaWMgRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsKLXB1YmxpYzoKLSAgICBX
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5XTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIEZvcm1Db250cm9sRWxlbWVudCog
dG9Gb3JtQ29udHJvbEVsZW1lbnQoKSB7IHJldHVybiB0aGlzOyB9Ci19OwotCiB9CiAKICNlbmRp
ZgpJbmRleDogd21sL1dNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTElu
cHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQzMzQ1KQorKysgd21sL1dNTElucHV0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogV01MSW5wdXRFbGVtZW50OjpXTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IFdNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSh0YWdOYW1lLCBkb2MpCisgICAgOiBXTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwg
ZG9jKQogICAgICwgbV9kYXRhKHRoaXMsIHRoaXMpCiAgICAgLCBtX2lzUGFzc3dvcmRGaWVsZChm
YWxzZSkKICAgICAsIG1faXNFbXB0eU9rKGZhbHNlKQpAQCAtNjAsMTIgKzYwLDEyIEBAIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVzKCkKIAogYm9vbCBXTUxJbnB1dEVsZW1l
bnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFdNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6aXNGb2N1c2FibGUoKTsKKyAgICBy
ZXR1cm4gV01MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogfQogCiBib29sIFdN
TElucHV0RWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6aXNGb2N1c2FibGUoKTsKKyAgICByZXR1cm4g
V01MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogfQogCiB2b2lkIFdNTElucHV0
RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBXTUxJ
bnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KAogICAgIH0KIAogICAgIC8vIHVwZGF0ZSB0
aGUgbmFtZSB2YXJpYWJsZSBvZiBXTUwgaW5wdXQgZWxtZW5ldAotICAgIFN0cmluZyBuYW1lVmFy
aWFibGUgPSBuYW1lKCk7CisgICAgU3RyaW5nIG5hbWVWYXJpYWJsZSA9IGZvcm1Db250cm9sTmFt
ZSgpOwogICAgIGlmICghbmFtZVZhcmlhYmxlLmlzRW1wdHkoKSkKICAgICAgICAgd21sUGFnZVN0
YXRlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSktPnN0b3JlVmFyaWFibGUobmFtZVZhcmlhYmxlLCB2
YWwpOyAKIApAQCAtMTA3LDcgKzEwNyw3IEBAIGludCBXTUxJbnB1dEVsZW1lbnQ6OnNpemUoKSBj
b25zdAogICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IFdNTElucHV0RWxlbWVudDo6dHlwZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFdNTElu
cHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICAvLyBuZWVkcyB0byBi
ZSBsb3dlcmNhc2UgYWNjb3JkaW5nIHRvIERPTSBzcGVjCiAgICAgaWYgKG1faXNQYXNzd29yZEZp
ZWxkKSB7CkBAIC0xMTksNyArMTE5LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBXTUxJbnB1dEVs
ZW1lbnQ6OnR5cAogICAgIHJldHVybiB0ZXh0OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdN
TElucHV0RWxlbWVudDo6bmFtZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFdNTElucHV0
RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLm5h
bWUoKTsKIH0KQEAgLTEzNiw3ICsxMzYsNyBAQCBTdHJpbmcgV01MSW5wdXRFbGVtZW50Ojp2YWx1
ZSgpIGNvbnN0CiB2b2lkIFdNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSht
X2RhdGEsIGRvY3VtZW50KCkpOwotICAgIHNldFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsK
KyAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAgICBtX2Rh
dGEuc2V0VmFsdWUoY29uc3RyYWluVmFsdWUodmFsdWUpKTsKICAgICBpZiAoaW5Eb2N1bWVudCgp
KQogICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CkBAIC0xNTgsNyAr
MTU4LDcgQEAgdm9pZCBXTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcgogICAgIElu
cHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIobV9kYXRhLCBkb2N1bWVudCgpLCB2YWx1
ZSk7CiB9CiAKLWJvb2wgV01MSW5wdXRFbGVtZW50OjpzYXZlU3RhdGUoU3RyaW5nJiByZXN1bHQp
IGNvbnN0Citib29sIFdNTElucHV0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUoU3RyaW5n
JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKG1faXNQYXNzd29yZEZpZWxkKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNjcsNyArMTY3LDcgQEAgYm9vbCBXTUxJbnB1dEVsZW1lbnQ6OnNh
dmVTdGF0ZShTdHJpbmcmIAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdNTElucHV0RWxl
bWVudDo6cmVzdG9yZVN0YXRlKGNvbnN0IFN0cmluZyYgc3RhdGUpCit2b2lkIFdNTElucHV0RWxl
bWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZSkKIHsKICAg
ICBBU1NFUlQoIW1faXNQYXNzd29yZEZpZWxkKTsgLy8gc2hvdWxkIG5ldmVyIHNhdmUvcmVzdG9y
ZSBwYXNzd29yZCBmaWVsZHMKICAgICBzZXRWYWx1ZShzdGF0ZSk7CkBAIC0xOTYsNyArMTk2LDcg
QEAgdm9pZCBXTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgICAgICAvLyBX
ZSBvbmx5IG5lZWQgdG8gc2V0Q2hhbmdlZCBpZiB0aGUgZm9ybSBpcyBsb29raW5nIGF0IHRoZSBk
ZWZhdWx0IHZhbHVlIHJpZ2h0IG5vdy4KICAgICAgICAgaWYgKG1fZGF0YS52YWx1ZSgpLmlzTnVs
bCgpKQogICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgICAgICBzZXRWYWx1
ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CisgICAgICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIoZmFsc2UpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxO
YW1lczo6bWF4bGVuZ3RoQXR0cikKICAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZU1heExlbmd0
aEF0dHJpYnV0ZShtX2RhdGEsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBI
VE1MTmFtZXM6OnNpemVBdHRyKQpAQCAtMjQ3LDE1ICsyNDcsMTUgQEAgdm9pZCBXTUxJbnB1dEVs
ZW1lbnQ6OmF0dGFjaCgpCiB2b2lkIFdNTElucHV0RWxlbWVudDo6ZGV0YWNoKCkKIHsKICAgICBX
TUxFbGVtZW50OjpkZXRhY2goKTsKLSAgICBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7
CisgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiB9CiAgICAg
CiBib29sIFdNTElucHV0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNv
ZGluZywgYm9vbCkKIHsKLSAgICBpZiAobmFtZSgpLmlzRW1wdHkoKSkKKyAgICBpZiAoZm9ybUNv
bnRyb2xOYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBlbmNv
ZGluZy5hcHBlbmREYXRhKG5hbWUoKSwgdmFsdWUoKSk7CisgICAgZW5jb2RpbmcuYXBwZW5kRGF0
YShmb3JtQ29udHJvbE5hbWUoKSwgdmFsdWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTM2Miw3ICszNjIsNyBAQCB2b2lkIFdNTElucHV0RWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJE
CiAKIHZvaWQgV01MSW5wdXRFbGVtZW50Ojppbml0KCkKIHsKLSAgICBTdHJpbmcgbmFtZVZhcmlh
YmxlID0gbmFtZSgpOworICAgIFN0cmluZyBuYW1lVmFyaWFibGUgPSBmb3JtQ29udHJvbE5hbWUo
KTsKICAgICBTdHJpbmcgdmFyaWFibGVWYWx1ZTsKICAgICBXTUxQYWdlU3RhdGUqIHBhZ2VTYXRl
ID0gd21sUGFnZVN0YXRlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSk7IAogICAgIEFTU0VSVChwYWdl
U2F0ZSk7CkluZGV4OiB3bWwvV01MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dN
TElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA0MzM0NSkKKysrIHdtbC9XTUxJbnB1dEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZvcm1EYXRhTGlzdDsKIAotY2xhc3MgV01MSW5wdXRFbGVtZW50IDogcHVibGljIFdN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSwgcHVibGljIElucHV0RWxlbWVudCB7CitjbGFz
cyBXTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgV01MRm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMg
SW5wdXRFbGVtZW50IHsKIHB1YmxpYzoKICAgICBXTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5XTUxJbnB1dEVsZW1l
bnQoKTsKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNr
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9maWxs
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJt
aW5hdGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRD
b250cm9sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1RleHRG
b3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNS
YWRpb0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
VGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Nl
YXJjaEZpZWxkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTU0LDE1ICs1NCwxNSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJp
bmcgdmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5n
Jik7CiAgICAgdmlydHVhbCBTdHJpbmcgcGxhY2Vob2xkZXJWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IFN0cmluZygpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0
IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBib29sIHNhdmVTdGF0ZShTdHJpbmcmIHZhbHVlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKGNvbnN0IFN0cmluZyYpOworICAg
IHZpcnR1YWwgYm9vbCBzYXZlRm9ybUNvbnRyb2xTdGF0ZShTdHJpbmcmIHZhbHVlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgU3RyaW5nJik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0KCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tl
eUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOwpJbmRleDogd21sL1dNTE9wdEdyb3VwRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlz
aW9uIDQzMzQ1KQorKysgd21sL1dNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgV01MT3B0R3JvdXBFbGVtZW50Ojp+V01MT3B0R3JvdXBFbGVtZW50
KAogewogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFdNTE9wdEdyb3VwRWxlbWVudDo6dHlwZSgp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFdNTE9wdEdyb3VwRWxlbWVudDo6Zm9ybUNvbnRy
b2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgb3B0Z3JvdXAsICgib3B0Z3JvdXAiKSk7CiAgICAgcmV0dXJuIG9wdGdyb3VwOwpJbmRl
eDogd21sL1dNTE9wdEdyb3VwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxPcHRHcm91
cEVsZW1lbnQuaAkocmV2aXNpb24gNDMzNDUpCisrKyB3bWwvV01MT3B0R3JvdXBFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIHRp
dGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05l
ZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IHdtbC9XTUxPcHRp
b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MT3B0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQzMzQ1KQorKysgd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw3ICs0Myw3IEBAIFdNTE9wdGlvbkVsZW1lbnQ6On5XTUxPcHRpb25FbGVtZW50KCkK
IHsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBXTUxPcHRpb25FbGVtZW50Ojp0eXBlKCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgV01MT3B0aW9uRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBl
KCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
b3B0aW9uLCAoIm9wdGlvbiIpKTsKICAgICByZXR1cm4gb3B0aW9uOwpJbmRleDogd21sL1dNTE9w
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MT3B0aW9uRWxlbWVudC5oCShyZXZp
c2lvbiA0MzM0NSkKKysrIHdtbC9XTUxPcHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIFdNTE9wdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5XTUxPcHRpb25FbGVt
ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1
cm4gZmFsc2U7IH0KIAo=
</data>
<flag name="review"
          id="15116"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>