<?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>63541</bug_id>
          
          <creation_ts>2011-06-28 09:56:53 -0700</creation_ts>
          <short_desc>TextPosition refactoring: Merge ZeroBasedNumber and OneBasedNumber classes</short_desc>
          <delta_ts>2011-09-19 11:45:00 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">peter.rybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>428935</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-06-28 09:56:53 -0700</bug_when>
    <thetext>JavaScriptCore/wtf/text/TextPosition.h has dual types: [Zero/One]BasedNumber and TextPosition[0/1]. Intended only for transition phase, these dual types now ought to be merged down together.
This is a step 1.

Classes ZeroBasedNumber and OneBasedNumber should be replaced with one class BasedNumber (or maybe &quot;NumberWithBase?&quot;).
In source file TextPositions.h old classes should be replaced with the following text:

&quot;
class BasedNumber {
public:
    static BasedNumber fromZeroBasedInt(int zeroBasedInt) { return BasedNumber(zeroBasedInt); }
    static BasedNumber fromOneBasedInt(int oneBasedInt) { return BasedNumber(oneBasedInt - 1); }

    BasedNumber() {}

    int zeroBasedInt() const { return m_value0; }
    int oneBasedInt() const { return m_value0 + 1; }

    int convertAsOneBasedInt() const { return m_value0 + 1; }
    int convertAsZeroBasedInt() const { return m_value0; }

    BasedNumber convertToOneBased() const { return *this; }
    BasedNumber convertToZeroBased() const { return *this; }

    bool operator==(BasedNumber other) { return m_value0 == other.m_value0; }
    bool operator!=(BasedNumber other) { return !((*this) == other); }

    static BasedNumber base() { return BasedNumber(0); }
    static BasedNumber belowBase() { return BasedNumber(-1); }

private:
    BasedNumber(int value0) : m_value0(value0) {}
    int m_value0;
};

typedef BasedNumber ZeroBasedNumber;
typedef BasedNumber OneBasedNumber;
&quot;


P.s. next steps could be:
1. make TextPosition no longer template -- inline its only possible actual parameter BasedNumber;
2. inline such typedefs as &quot;typedef BasedNumber ZeroBasedNumber;&quot; and &quot;typedef TextPosition TextPosition0;&quot; etc throughout source base;
3. inline trivial methods BasedNumber::convertTo[Zero/One]Based.

Methods DocumentParser::lineNumber currently return &quot;int&quot; (0-based), they should better return BasedNumber instead.
Fixing bug in XMLDocumentParserQt  ( https://bugs.webkit.org/show_bug.cgi?id=63540 ) is a good thing to do before these refactorings above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468715</commentid>
    <comment_count>1</comment_count>
      <attachid>107705</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-09-16 12:36:21 -0700</bug_when>
    <thetext>Created attachment 107705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468717</commentid>
    <comment_count>2</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-09-16 12:42:56 -0700</bug_when>
    <thetext>I&apos;m not absolutely happy with &quot;BasedNumber&quot; type name, but it was the simplest option.

There are many places across the codebase that could use BasedNumber instead of int, but I&apos;m not sure I can propagate the new type throughout entire WebKit here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468732</commentid>
    <comment_count>3</comment_count>
      <attachid>107705</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-16 12:55:59 -0700</bug_when>
    <thetext>Comment on attachment 107705
Patch

This change is great.  Maybe instead of BasedNumber we should use the name OrdinalNumber?

http://en.wikipedia.org/wiki/Ordinal_number

That&apos;s a number used for ordering as opposed to a number use for counting, which is a cardinal number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469458</commentid>
    <comment_count>4</comment_count>
      <attachid>107875</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-09-19 09:47:36 -0700</bug_when>
    <thetext>Created attachment 107875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469492</commentid>
    <comment_count>5</comment_count>
      <attachid>107875</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-19 10:28:52 -0700</bug_when>
    <thetext>Comment on attachment 107875
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

This line will prevent the patch from being landed automatically.  In this case, you should explain that there are no new tests because this patch is not changing behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469516</commentid>
    <comment_count>6</comment_count>
      <attachid>107883</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-09-19 10:52:08 -0700</bug_when>
    <thetext>Created attachment 107883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469576</commentid>
    <comment_count>7</comment_count>
      <attachid>107883</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-19 11:44:55 -0700</bug_when>
    <thetext>Comment on attachment 107883
Patch

Clearing flags on attachment: 107883

Committed r95449: &lt;http://trac.webkit.org/changeset/95449&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469577</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-19 11:45:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107705</attachid>
            <date>2011-09-16 12:36:21 -0700</date>
            <delta_ts>2011-09-19 09:47:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63541-20110916233618.patch</filename>
            <type>text/plain</type>
            <size>80894</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUyMjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGQy
ZWYxMWI2MDYzMjJjMjJlODEwZTE5MmVmMDUwMWZiMTNhODZkMTIuLmZmZGM3YTVkY2UxZGQzNjIw
ZjNlZDZmMGNiZWRmYzBiMjAxMjljYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2IEBACisyMDExLTA5LTE2ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNv
bT4KKworICAgICAgICBUZXh0UG9zaXRpb24gcmVmYWN0b3Jpbmc6IE1lcmdlIFplcm9CYXNlZE51
bWJlciBhbmQgT25lQmFzZWROdW1iZXIgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAg
ICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgICogd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmg6CisgICAgICAgIChXVEY6OkJhc2VkTnVtYmVyOjpmcm9tWmVyb0Jh
c2VkSW50KToKKyAgICAgICAgKFdURjo6QmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludCk6Cisg
ICAgICAgIChXVEY6OkJhc2VkTnVtYmVyOjpCYXNlZE51bWJlcik6CisgICAgICAgIChXVEY6OkJh
c2VkTnVtYmVyOjp6ZXJvQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpCYXNlZE51bWJlcjo6b25l
QmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpCYXNlZE51bWJlcjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXVEY6OkJhc2VkTnVtYmVyOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6QmFzZWRO
dW1iZXI6OmJhc2UpOgorICAgICAgICAoV1RGOjpCYXNlZE51bWJlcjo6YmVsb3dCYXNlKToKKyAg
ICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjpUZXh0UG9zaXRpb24pOgorICAgICAgICAoV1RGOjpU
ZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbik6CisgICAgICAgIChXVEY6OlRleHRQb3NpdGlv
bjo6YmVsb3dSYW5nZVBvc2l0aW9uKToKKwogMjAxMS0wOS0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciBhc3NlcnRp
b24gb24gZXhpc3RlbmNlIG9mIGFsdGVybmF0aXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKaW5kZXggOThiYjZiMTM5ZDE2NmM0NTQ1NzExMWE0OTBl
NDI3NzcyOGUyOWRhYy4uM2I5MmI5MDMxNmQ2NzVhOTIwNTM3MjZiNWExYTM0OWU5MWRhN2U0OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaApAQCAt
NTksNyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBpbnQgbGVuZ3Ro
KCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJsKCkgeyBy
ZXR1cm4gbV91cmw7IH0KLSAgICAgICAgdmlydHVhbCBUZXh0UG9zaXRpb24xIHN0YXJ0UG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBUZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKTsgfQor
ICAgICAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKTsgfQogICAgICAgICBpbnRwdHJfdCBh
c0lEKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcyk7IH0KIAogICAg
ICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRlZDsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oCmluZGV4IDJiMDdmZjc1
OGM1YjIyNzE0MjVjYmQxNzY2ZDA2OGU2OWZjN2M0MGYuLjg1N2MxZWMxZmM3MDM0MmE0MDU5MmZj
YTYzY2Y2YjMyMzg2OGI4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9UZXh0UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQv
VGV4dFBvc2l0aW9uLmgKQEAgLTI5LDEyNCArMjksNTggQEAKIAogbmFtZXNwYWNlIFdURiB7CiAK
LS8qCi0gKiBUZXh0IFBvc2l0aW9uCi0gKgotICogVGV4dFBvc2l0aW9uIHN0cnVjdHVyZSBzcGVj
aWZpZXMgY29vcmRpbmF0ZXMgd2l0aGluIGFuIHRleHQgcmVzb3VyY2UuIEl0IGlzIHVzZWQgbW9z
dGx5Ci0gKiBmb3Igc2F2aW5nIHNjcmlwdCBzb3VyY2UgcG9zaXRpb24uCi0gKgotICogTGF0ZXIg
VGV4dFBvc2l0aW9uMCBhbmQgVGV4dFBvc2l0aW9uMSBhbmQgYm90aCBudW1iZXIgdHlwZXMgY2Fu
IGJlIG1lcmdlZCB0b2dldGhlciBxdWl0ZSBlYXNpbHkuCi0gKgotICogMC1iYXNlZCBhbmQgMS1i
YXNlZAotICoKLSAqIExpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGNvdWxkIGJlIGludGVycHJldGVk
IGFzIHplcm8tYmFzZWQgb3IgMS1iYXNlZC4gU2luY2UKLSAqIGJvdGggcHJhY3RpY2VzIGNvZXhp
c3QgaW4gV2ViS2l0IHNvdXJjZSBiYXNlLCAnaW50JyB0eXBlIHNob3VsZCBiZSByZXBsYWNlZCB3
aXRoCi0gKiBhIGRlZGljYXRlZCB3cmFwcGVyIHR5cGVzLCBzbyB0aGF0IGNvbXBpbGVyIGhlbHBl
ZCB1cyB3aXRoIHRoaXMgYW1iaWd1aXR5LgotICoKLSAqIEhlcmUgd2UgaW50cm9kdWNlIDIgdHlw
ZXMgb2YgbnVtYmVyczogWmVyb0Jhc2VkTnVtYmVyIGFuZCBPbmVCYXNlZE51bWJlciBhbmQKLSAq
IDIgY29ycmVzcG9uZGluZyB0eXBlcyBvZiBUZXh0UG9zaXRpb24gc3RydWN0dXJlLiBXaGlsZSBv
bmx5IG9uZSB0eXBlIG91Z2h0IHRvIGJlIGVub3VnaCwKLSAqIHRoaXMgaXMgZG9uZSB0byBrZWVw
IHRyYW5zaXRpb24gdG8gdGhlIG5ldyB0eXBlcyBhcyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZToK
LSAqIGUuZy4gaW4gYXJlYXMgd2hlcmUgMC1iYXNlZCBpbnRlZ2VycyBhcmUgdXNlZCwgVGV4dFBv
c2l0aW9uMCBzaG91bGQgYmUgaW50cm9kdWNlZC4gVGhpcwotICogd2F5IGFsbCBjaGFuZ2VzIHdp
bGwgcmVtYWluIHRyYWNrYWJsZS4KLSAqCi0gKiBMYXRlciBib3RoIG51bWJlciB0eXBlcyBjYW4g
YmUgbWVyZ2VkIGluIG9uZSB0eXBlIHF1aXRlIGVhc2lseS4KLSAqCi0gKiBGb3IgdHlwZSBzYWZl
dHkgYW5kIGZvciB0aGUgZnV0dXJlIHR5cGUgbWVyZ2UgaXQgaXMgaW1wb3J0YW50IHRoYXQgYWxs
IG9wZXJhdGlvbnMgaW4gQVBJCi0gKiB0aGF0IGFjY2VwdCBvciByZXR1cm4gaW50ZWdlciBoYXZl
IGEgbmFtZSBleHBsaWNpdGx5IGRlZmluaW5nIGJhc2Ugb2YgaW50ZWdlci4gRm9yIHRoaXMgcmVh
c29uCi0gKiBpbnQtcmVjZWl2aW5nIGNvbnN0cnVjdG9ycyBhcmUgaGlkZGVuIGZyb20gQVBJLgot
ICovCisvLyBBbiBhYnN0cmFjdCBudW1iZXIgb2YgZWxlbWVudCBpbiBhIHNlcXVlbmNlLiBUaGUg
c2VxdWVuY2UgaGFzIGEgZmlyc3QgZWxlbWVudCBhbmQgaXRzIG51bWJlcgorLy8gaXMgY2FsbGVk
ICdiYXNlJy4KKy8vIFRoaXMgdHlwZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGludGVnZXIg
YmVjYXVzZSAyIGNvbnRyYWRpY3RpbmcgdHJhZGl0aW9ucyBjYW4KKy8vIGNhbGwgYSBmaXJzdCBl
bGVtZW50ICcwJyBvciAnMScgd2hpY2ggbWFrZXMgaW50ZWdlciB0eXBlIGFtYmlndW91cy4KK2Ns
YXNzIEJhc2VkTnVtYmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQmFzZWROdW1iZXIgZnJvbVpl
cm9CYXNlZEludChpbnQgemVyb0Jhc2VkSW50KSB7IHJldHVybiBCYXNlZE51bWJlcih6ZXJvQmFz
ZWRJbnQpOyB9CisgICAgc3RhdGljIEJhc2VkTnVtYmVyIGZyb21PbmVCYXNlZEludChpbnQgb25l
QmFzZWRJbnQpIHsgcmV0dXJuIEJhc2VkTnVtYmVyKG9uZUJhc2VkSW50IC0gMSk7IH0KKyAgICBC
YXNlZE51bWJlcigpIHsgfQorCisgICAgaW50IHplcm9CYXNlZEludCgpIGNvbnN0IHsgcmV0dXJu
IG1femVyb0Jhc2VkVmFsdWU7IH0KKyAgICBpbnQgb25lQmFzZWRJbnQoKSBjb25zdCB7IHJldHVy
biBtX3plcm9CYXNlZFZhbHVlICsgMTsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJv
b2wgb3BlcmF0b3I9PShCYXNlZE51bWJlciBvdGhlcikgeyByZXR1cm4gbV96ZXJvQmFzZWRWYWx1
ZSA9PSBvdGhlci5tX3plcm9CYXNlZFZhbHVlOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEJhc2Vk
TnVtYmVyIG90aGVyKSB7IHJldHVybiAhKCgqdGhpcykgPT0gb3RoZXIpOyB9CisKKyAgICBzdGF0
aWMgQmFzZWROdW1iZXIgYmFzZSgpIHsgcmV0dXJuIEJhc2VkTnVtYmVyKDApOyB9CisgICAgc3Rh
dGljIEJhc2VkTnVtYmVyIGJlbG93QmFzZSgpIHsgcmV0dXJuIEJhc2VkTnVtYmVyKC0xKTsgfQor
Citwcml2YXRlOgorICAgIEJhc2VkTnVtYmVyKGludCB6ZXJvQmFzZWRJbnQpIDogbV96ZXJvQmFz
ZWRWYWx1ZSh6ZXJvQmFzZWRJbnQpIHsgfQorICAgIGludCBtX3plcm9CYXNlZFZhbHVlOworfTsK
KworCisvLyBUZXh0UG9zaXRpb24gc3RydWN0dXJlIHNwZWNpZmllcyBjb29yZGluYXRlcyB3aXRo
aW4gYW4gdGV4dCByZXNvdXJjZS4gSXQgaXMgdXNlZCBtb3N0bHkKKy8vIGZvciBzYXZpbmcgc2Ny
aXB0IHNvdXJjZSBwb3NpdGlvbi4KIGNsYXNzIFRleHRQb3NpdGlvbiB7CiBwdWJsaWM6Ci0gICAg
VGV4dFBvc2l0aW9uKFQgbGluZSwgVCBjb2x1bW4pCisgICAgVGV4dFBvc2l0aW9uKEJhc2VkTnVt
YmVyIGxpbmUsIEJhc2VkTnVtYmVyIGNvbHVtbikKICAgICAgICAgOiBtX2xpbmUobGluZSkKICAg
ICAgICAgLCBtX2NvbHVtbihjb2x1bW4pCiAgICAgewogICAgIH0KLSAgICBUZXh0UG9zaXRpb24o
KSB7fQorICAgIFRleHRQb3NpdGlvbigpIHsgfQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
ZXh0UG9zaXRpb24mIG90aGVyKSB7IHJldHVybiBtX2xpbmUgPT0gb3RoZXIubV9saW5lICYmIG1f
Y29sdW1uID09IG90aGVyLm1fY29sdW1uOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRl
eHRQb3NpdGlvbiYgb3RoZXIpIHsgcmV0dXJuICEoKCp0aGlzKSA9PSBvdGhlcik7IH0KIAogICAg
IC8vIEEgJ21pbmltdW0nIHZhbHVlIG9mIHBvc2l0aW9uLCB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1
ZS4KLSAgICBzdGF0aWMgVGV4dFBvc2l0aW9uPFQ+IG1pbmltdW1Qb3NpdGlvbigpIHsgcmV0dXJu
IFRleHRQb3NpdGlvbjxUPihUOjpiYXNlKCksIFQ6OmJhc2UoKSk7IH0KKyAgICBzdGF0aWMgVGV4
dFBvc2l0aW9uIG1pbmltdW1Qb3NpdGlvbigpIHsgcmV0dXJuIFRleHRQb3NpdGlvbihCYXNlZE51
bWJlcjo6YmFzZSgpLCBCYXNlZE51bWJlcjo6YmFzZSgpKTsgfQogCiAgICAgLy8gQSB2YWx1ZSB3
aXRoIGxpbmUgdmFsdWUgbGVzcyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxl
IHBvc2l0aW9uLgotICAgIHN0YXRpYyBUZXh0UG9zaXRpb248VD4gYmVsb3dSYW5nZVBvc2l0aW9u
KCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPFQ+KFQ6OmJlbG93QmFzZSgpLCBUOjpiZWxvd0Jhc2Uo
KSk7IH0KLQotICAgIFQgbV9saW5lOwotICAgIFQgbV9jb2x1bW47Ci19OwotCi1jbGFzcyBPbmVC
YXNlZE51bWJlcjsKLQotLy8gQW4gaW50IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3Ug
dGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAwLWJhc2VkCi1jbGFzcyBaZXJvQmFzZWROdW1iZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBaZXJvQmFzZWROdW1iZXIgZnJvbVplcm9CYXNlZEludChp
bnQgemVyb0Jhc2VkSW50KSB7IHJldHVybiBaZXJvQmFzZWROdW1iZXIoemVyb0Jhc2VkSW50KTsg
fQotCi0gICAgWmVyb0Jhc2VkTnVtYmVyKCkge30KLQotICAgIGludCB6ZXJvQmFzZWRJbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgaW50IGNvbnZlcnRBc09uZUJhc2VkSW50KCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZSArIDE7IH0KLSAgICBPbmVCYXNlZE51bWJlciBjb252ZXJ0
VG9PbmVCYXNlZCgpIGNvbnN0OworICAgIHN0YXRpYyBUZXh0UG9zaXRpb24gYmVsb3dSYW5nZVBv
c2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uKEJhc2VkTnVtYmVyOjpiZWxvd0Jhc2UoKSwg
QmFzZWROdW1iZXI6OmJlbG93QmFzZSgpKTsgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KFplcm9C
YXNlZE51bWJlciBvdGhlcikgeyByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvciE9KFplcm9CYXNlZE51bWJlciBvdGhlcikgeyByZXR1cm4gISgoKnRo
aXMpID09IG90aGVyKTsgfQotCi0gICAgc3RhdGljIFplcm9CYXNlZE51bWJlciBiYXNlKCkgeyBy
ZXR1cm4gMDsgfQotICAgIHN0YXRpYyBaZXJvQmFzZWROdW1iZXIgYmVsb3dCYXNlKCkgeyByZXR1
cm4gLTE7IH0KLQotcHJpdmF0ZToKLSAgICBaZXJvQmFzZWROdW1iZXIoaW50IHZhbHVlKSA6IG1f
dmFsdWUodmFsdWUpIHt9Ci0gICAgaW50IG1fdmFsdWU7CisgICAgQmFzZWROdW1iZXIgbV9saW5l
OworICAgIEJhc2VkTnVtYmVyIG1fY29sdW1uOwogfTsKIAotLy8gQW4gaW50IHdyYXBwZXIgdGhh
dCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAxLWJhc2VkCi1j
bGFzcyBPbmVCYXNlZE51bWJlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIE9uZUJhc2VkTnVtYmVy
IGZyb21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9uZUJhc2VkTnVtYmVy
KG9uZUJhc2VkSW50KTsgfQotICAgIE9uZUJhc2VkTnVtYmVyKCkge30KLQotICAgIGludCBvbmVC
YXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICBpbnQgY29udmVydEFzWmVy
b0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KLSAgICBaZXJvQmFzZWRO
dW1iZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVyb0Jhc2VkTnVtYmVy
Ojpmcm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KE9uZUJhc2VkTnVtYmVyIG90aGVyKSB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7
IH0KLSAgICBib29sIG9wZXJhdG9yIT0oT25lQmFzZWROdW1iZXIgb3RoZXIpIHsgcmV0dXJuICEo
KCp0aGlzKSA9PSBvdGhlcik7IH0KLQotICAgIHN0YXRpYyBPbmVCYXNlZE51bWJlciBiYXNlKCkg
eyByZXR1cm4gMTsgfQotICAgIHN0YXRpYyBPbmVCYXNlZE51bWJlciBiZWxvd0Jhc2UoKSB7IHJl
dHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgT25lQmFzZWROdW1iZXIoaW50IHZhbHVlKSA6IG1f
dmFsdWUodmFsdWUpIHt9Ci0gICAgaW50IG1fdmFsdWU7Ci19OwotCi10eXBlZGVmIFRleHRQb3Np
dGlvbjxaZXJvQmFzZWROdW1iZXI+IFRleHRQb3NpdGlvbjA7Ci10eXBlZGVmIFRleHRQb3NpdGlv
bjxPbmVCYXNlZE51bWJlcj4gVGV4dFBvc2l0aW9uMTsKLQotaW5saW5lIFRleHRQb3NpdGlvbjAg
dG9aZXJvQmFzZWRUZXh0UG9zaXRpb24oY29uc3QgVGV4dFBvc2l0aW9uMSYgcG9zaXRpb24pCi17
Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjAocG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb1plcm9C
YXNlZCgpLCBwb3NpdGlvbi5tX2NvbHVtbi5jb252ZXJ0VG9aZXJvQmFzZWQoKSk7Ci19Ci0KLWlu
bGluZSBUZXh0UG9zaXRpb24xIHRvT25lQmFzZWRUZXh0UG9zaXRpb24oY29uc3QgVGV4dFBvc2l0
aW9uMCYgcG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjEocG9zaXRpb24ubV9s
aW5lLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1uLmNvbnZlcnRUb09uZUJh
c2VkKCkpOwotfQotCi1pbmxpbmUgT25lQmFzZWROdW1iZXIgWmVyb0Jhc2VkTnVtYmVyOjpjb252
ZXJ0VG9PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE9uZUJhc2VkTnVtYmVyOjpmcm9t
T25lQmFzZWRJbnQobV92YWx1ZSArIDEpOwotfQotCiB9CiAKLXVzaW5nIFdURjo6VGV4dFBvc2l0
aW9uMDsKLXVzaW5nIFdURjo6VGV4dFBvc2l0aW9uMTsKK3VzaW5nIFdURjo6QmFzZWROdW1iZXI7
CiAKLXVzaW5nIFdURjo6WmVyb0Jhc2VkTnVtYmVyOwotdXNpbmcgV1RGOjpPbmVCYXNlZE51bWJl
cjsKK3VzaW5nIFdURjo6VGV4dFBvc2l0aW9uOwogCiAjZW5kaWYgLy8gVGV4dFBvc2l0aW9uX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMWFjZWRkMmExMWY1ZTRhMDUxNDJlNTE5MTI5ZDY3MWFjM2M5NGEzLi5k
YzIzOTJkMzU1MzVjMjlmZGQ0MmIyN2QzZjFiY2RmOTU2YjU5OTk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMxIEBACisyMDExLTA5LTE2ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBUZXh0UG9zaXRpb24gcmVmYWN0b3Jpbmc6IE1lcmdlIFplcm9CYXNl
ZE51bWJlciBhbmQgT25lQmFzZWROdW1iZXIgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5oOgorICAgICAgICAoV2ViQ29yZTo6SmF2
YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRD
YWxsRnJhbWU6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJh
bWU6OnVwZGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVt
YmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXJzZVNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6Y3JlYXRlQ2FsbEZyYW1lQW5kUGF1
c2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6dXBkYXRl
Q2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VDb2RlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6U3RyaW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6U3RyaW5nU291cmNlUHJvdmlkZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hl
ZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Ny
aXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpl
dmVudEhhbmRsZXJQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNlQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRTb3VyY2VDb2RlOjpzdGFydFBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOExh
enlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVu
ZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2
ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TGF6eUV2ZW50TGlzdGVuZXI6OmNy
ZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOFByb3h5Ojpjb21waWxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6
OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJ1blNjcmlwdCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxlbWVudEFuZENsZWFyKToK
KyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z1NjcmlwdDo6UGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0
OjpzdGFydGluZ1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnNl
dFN0YXJ0aW5nUG9zaXRpb24pOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQpOgorICAgICAgICAq
IGRvbS9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAgICogZG9tL1NjcmlwdGFibGVEb2N1bWVudFBh
cnNlci5oOgorICAgICAgICAqIGRvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZXJMaW5lTnVtYmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9j
dW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpy
dW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERv
Y3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudFBhcnNlcjo6bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQ
YXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3Jp
cHRSdW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1
bm5lci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyk6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTFRyZWVCdWlsZGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6YnVpbGRJbml0aWF0b3JPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU2VnbWVu
dGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6Y3VycmVu
dExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpjdXJyZW50Q29sdW1u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6c2V0Q3VycmVudFBvc2l0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oOgorICAgICAgICAq
IHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2Vy
TGluZU51bWJlcik6CisgICAgICAgICogeG1sL1hNTEVycm9ycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxFcnJvcnM6OlhNTEVycm9ycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxFcnJvcnM6
OmhhbmRsZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEVycm9yczo6YXBwZW5kRXJyb3JN
ZXNzYWdlKToKKyAgICAgICAgKiB4bWwvWE1MRXJyb3JzLmg6CisgICAgICAgICogeG1sL3BhcnNl
ci9NYXJrdXBUb2tlbml6ZXJCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBUb2tlbml6
ZXJCYXNlOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL05ld1hNTERvY3VtZW50
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5ld1hNTERvY3VtZW50UGFyc2VyOjpwcm9j
ZXNzU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ld1hNTERvY3VtZW50UGFyc2VyOjp0ZXh0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TmV3WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVO
dW1iZXIpOgorICAgICAgICAqIHhtbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAg
ICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjpwdXNoQ3VycmVudE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKToKKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBh
cnNlckxpYnhtbDIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ0NhbGxiYWNrczo6YXBw
ZW5kRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6
WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmRvV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxl
bWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24pOgorICAgICAgICAqIHhtbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1
bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9j
dW1lbnRQYXJzZXI6OmRvV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OmRvRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToKKwogMjAxMS0wOS0x
NSAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CiAKICAgICAgICAgWE1MRG9j
dW1lbnRQYXJzZXJRdC5jcHAgaW5jb3JyZWN0bHkgY29udmVydHMgMC1iYXNlZCBudW1iZXIgaW50
byAxLWJhc2VkIG51bWJlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZh
U2NyaXB0Q2FsbEZyYW1lLmNwcAppbmRleCA1YzRiOTVkNTI5MDQzYjUxYTI3ZjliYmE0MzkyZTMy
NWY3NGZhMTA4Li4yOWI3Mzk5ODdlZmI3YjE4MWQzMDJjMWJjNTgyZGFkZjM2OGM5ZDU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgCi1KYXZhU2NyaXB0Q2FsbEZyYW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1lKGNv
bnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZh
U2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIsIGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9z
aXRpb24wJiB0ZXh0UG9zaXRpb24pCitKYXZhU2NyaXB0Q2FsbEZyYW1lOjpKYXZhU2NyaXB0Q2Fs
bEZyYW1lKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgUGFzc1Jl
ZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIsIGludHB0cl90IHNvdXJjZUlELCBjb25z
dCBUZXh0UG9zaXRpb24mIHRleHRQb3NpdGlvbikKICAgICA6IG1fZGVidWdnZXJDYWxsRnJhbWUo
ZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgLCBtX2NhbGxlcihjYWxsZXIpCiAgICAgLCBtX3NvdXJj
ZUlEKHNvdXJjZUlEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2
YVNjcmlwdENhbGxGcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlw
dENhbGxGcmFtZS5oCmluZGV4IGYzYTExNGI5MGJlYWEwYTMzNGFmNWMwMzM3ZjVhZGVkZTNhMzA5
NTAuLmE1ODFjNGZjN2IyN2QyZmFjNzkwNmI4YTlmYjMwMWM2M2ZmYjBkZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKQEAgLTM5LDcg
KzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1l
IDogcHVibGljIFJlZkNvdW50ZWQ8SmF2YVNjcmlwdENhbGxGcmFtZT4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNyZWF0ZShjb25zdCBKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2Ny
aXB0Q2FsbEZyYW1lPiBjYWxsZXIsIGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRp
b24wJiB0ZXh0UG9zaXRpb24pCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxG
cmFtZT4gY3JlYXRlKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZy
YW1lLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlciwgaW50cHRyX3Qgc291
cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgdGV4dFBvc2l0aW9uKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKYXZhU2NyaXB0Q2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1l
LCBjYWxsZXIsIHNvdXJjZUlELCB0ZXh0UG9zaXRpb24pKTsKICAgICB9CkBAIC01NSwxMSArNTUs
MTEgQEAgcHVibGljOgogICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxlcigpOwogCiAgICAg
aW50cHRyX3Qgc291cmNlSUQoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUlEOyB9Ci0gICAgY29u
c3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RleHRQb3NpdGlv
bjsgfQorICAgIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3RleHRQb3NpdGlvbjsgfQogICAgIGludCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UG9z
aXRpb24ubV9saW5lLnplcm9CYXNlZEludCgpOyB9CiAgICAgaW50IGNvbHVtbigpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dFBvc2l0aW9uLm1fY29sdW1uLnplcm9CYXNlZEludCgpOyB9CiAKLSAgICB2
b2lkIHVwZGF0ZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSwgaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHRleHRQb3NpdGlvbikK
KyAgICB2b2lkIHVwZGF0ZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNh
bGxGcmFtZSwgaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgdGV4dFBvc2l0
aW9uKQogICAgIHsKICAgICAgICAgbV9kZWJ1Z2dlckNhbGxGcmFtZSA9IGRlYnVnZ2VyQ2FsbEZy
YW1lOwogICAgICAgICBtX3RleHRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbjsKQEAgLTc2LDEyICs3
NiwxMiBAQCBwdWJsaWM6CiAgICAgSlNDOjpKU1ZhbHVlIGV2YWx1YXRlKGNvbnN0IEpTQzo6VVN0
cmluZyYgc2NyaXB0LCBKU0M6OkpTVmFsdWUmIGV4Y2VwdGlvbikgY29uc3Q7CiAgICAgCiBwcml2
YXRlOgotICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFt
ZSYsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uMCYpOworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUoY29u
c3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFt
ZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJik7CiAKICAg
ICBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lIG1fZGVidWdnZXJDYWxsRnJhbWU7CiAgICAgUmVmUHRy
PEphdmFTY3JpcHRDYWxsRnJhbWU+IG1fY2FsbGVyOwogICAgIGludHB0cl90IG1fc291cmNlSUQ7
Ci0gICAgVGV4dFBvc2l0aW9uMCBtX3RleHRQb3NpdGlvbjsKKyAgICBUZXh0UG9zaXRpb24gbV90
ZXh0UG9zaXRpb247CiAgICAgYm9vbCBtX2lzVmFsaWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGYwZDVlYmE4Nzc5OGIy
ZjQ5MjI0N2Q3OTg2ZDJmNWIzOWVkYjBmNjcuLjhiM2YwNWIwZGQwODgxYTJkOTMyNWU4YzhkMDI0
YmRiNWU4Mjc3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgaW50IFNjcmlwdENvbnRyb2xsZXI6OmV2
ZW50SGFuZGxlckxpbmVOdW1iZXIoKSBjb25zdAogICAgIC8vIEpTQyBleHBlY3RzIDEtYmFzZWQg
bGluZSBudW1iZXJzLCBzbyB3ZSBtdXN0IGFkZCBvbmUgaGVyZSB0byBnZXQgaXQgcmlnaHQuCiAg
ICAgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKiBwYXJzZXIgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKICAgICBpZiAocGFyc2VyKQotICAgICAgICBy
ZXR1cm4gcGFyc2VyLT5saW5lTnVtYmVyKCkuY29udmVydEFzT25lQmFzZWRJbnQoKTsKKyAgICAg
ICAgcmV0dXJuIHBhcnNlci0+bGluZU51bWJlcigpLm9uZUJhc2VkSW50KCk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERl
YnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAppbmRleCA3ZDQ4YjAwOGZhM2JkOWQ5YWE2NDA0ZDJjYTAzZDczYWNjZmI2NGQyLi45
NzJlMzFmMDkxMTQ1Y2I4ZjQ4ZjFlN2M4ZjkzOGU1ZDI0YmQ2Njk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0xMDIsNyArMTAy
LDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGJyZWFrcG9pbnRJZCkKICAgICAgICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51bWJlciAr
IDEpOwogfQogCi1ib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90
IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbikgY29uc3QKK2Jvb2wgU2Ny
aXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRl
eHRQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2JyZWFrcG9pbnRzQWN0
aXZhdGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBT
Y3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3Qg
VGV4dFBvc2l0aW9uMCYgcG8KICAgICBTb3VyY2VJZFRvQnJlYWtwb2ludHNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9zb3VyY2VJZFRvQnJlYWtwb2ludHMuZmluZChzb3VyY2VJRCk7CiAgICAg
aWYgKGl0ID09IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaW50IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xpbmUuY29udmVydEFzT25l
QmFzZWRJbnQoKTsKKyAgICBpbnQgbGluZU51bWJlciA9IHBvc2l0aW9uLm1fbGluZS5vbmVCYXNl
ZEludCgpOwogICAgIGlmIChsaW5lTnVtYmVyIDw9IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBMaW5lVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBicmVha0l0ID0gaXQtPnNl
Y29uZC5maW5kKGxpbmVOdW1iZXIpOwpAQCAtMjI2LDggKzIyNiw4IEBAIHZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQmIGxpc3Rl
bmVycywgU291CiAgICAgU2NyaXB0RGVidWdMaXN0ZW5lcjo6U2NyaXB0IHNjcmlwdDsKICAgICBz
Y3JpcHQudXJsID0gdXN0cmluZ1RvU3RyaW5nKHNvdXJjZVByb3ZpZGVyLT51cmwoKSk7CiAgICAg
c2NyaXB0LnNvdXJjZSA9IHVzdHJpbmdUb1N0cmluZyhKU0M6OlVTdHJpbmcoc291cmNlUHJvdmlk
ZXItPmRhdGEoKSwgc291cmNlUHJvdmlkZXItPmxlbmd0aCgpKSk7Ci0gICAgc2NyaXB0LnN0YXJ0
TGluZSA9IHNvdXJjZVByb3ZpZGVyLT5zdGFydFBvc2l0aW9uKCkubV9saW5lLmNvbnZlcnRBc1pl
cm9CYXNlZEludCgpOwotICAgIHNjcmlwdC5zdGFydENvbHVtbiA9IHNvdXJjZVByb3ZpZGVyLT5z
dGFydFBvc2l0aW9uKCkubV9jb2x1bW4uY29udmVydEFzWmVyb0Jhc2VkSW50KCk7CisgICAgc2Ny
aXB0LnN0YXJ0TGluZSA9IHNvdXJjZVByb3ZpZGVyLT5zdGFydFBvc2l0aW9uKCkubV9saW5lLnpl
cm9CYXNlZEludCgpOworICAgIHNjcmlwdC5zdGFydENvbHVtbiA9IHNvdXJjZVByb3ZpZGVyLT5z
dGFydFBvc2l0aW9uKCkubV9jb2x1bW4uemVyb0Jhc2VkSW50KCk7CiAgICAgc2NyaXB0LmlzQ29u
dGVudFNjcmlwdCA9IGlzQ29udGVudFNjcmlwdDsKIAogICAgIGludCBzb3VyY2VMZW5ndGggPSBz
Y3JpcHQuc291cmNlLmxlbmd0aCgpOwpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgU2NyaXB0RGVi
dWdTZXJ2ZXI6OmRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhKYXZhU2NyaXB0RXhlY3V0aW9u
Q2FsbGJhY2sKIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y3JlYXRlQ2FsbEZyYW1lQW5kUGF1
c2VJZk5lZWRlZChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGlu
dHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKIHsKLSAgICBUZXh0UG9zaXRpb24wIHRl
eHRQb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGluZU51bWJl
cikuY29udmVydFRvWmVyb0Jhc2VkKCksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKCkpOwor
ICAgIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24oQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZElu
dChsaW5lTnVtYmVyKSwgQmFzZWROdW1iZXI6OmJhc2UoKSk7CiAgICAgbV9jdXJyZW50Q2FsbEZy
YW1lID0gSmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBtX2N1
cnJlbnRDYWxsRnJhbWUsIHNvdXJjZUlELCB0ZXh0UG9zaXRpb24pOwogICAgIHBhdXNlSWZOZWVk
ZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKIH0KQEAgLTMzOSw3
ICszMzksNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVz
ZUlmTmVlZGVkKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJgogICAgIGlmICghbV9jdXJyZW50Q2Fs
bEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlv
bihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGluZU51bWJlcikuY29udmVy
dFRvWmVyb0Jhc2VkKCksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKCkpOworICAgIFRleHRQ
b3NpdGlvbiB0ZXh0UG9zaXRpb24oQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChsaW5lTnVt
YmVyKSwgQmFzZWROdW1iZXI6OmJhc2UoKSk7CiAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLT51cGRh
dGUoZGVidWdnZXJDYWxsRnJhbWUsIHNvdXJjZUlELCB0ZXh0UG9zaXRpb24pOwogICAgIHBhdXNl
SWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCmluZGV4IDFh
YmJkZTVhMDAwODJhMzljMjM5NGE4NDQzZDdkODU2YWMzYjZlN2QuLmMzZGRkNmM2YjIxZDJhOTEw
NjM2NmE2MDg2ZDU4YzE1NTFiNjkyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtOTYsNyArOTYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIGRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGRpZENvbnRpbnVlKEpTQzo6SlNHbG9iYWxPYmplY3QqKSA9IDA7CiAKLSAgICBi
b29sIGhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbjAm
KSBjb25zdDsKKyAgICBib29sIGhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0
IFRleHRQb3NpdGlvbiYpIGNvbnN0OwogCiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0
ZW5lcnMoSmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CiAgICAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoY29uc3QgTGlzdGVuZXJTZXQm
IGxpc3RlbmVycywgSmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrIGNhbGxiYWNrKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAppbmRleCAzNzNkYjMx
M2M1MmNiNzkxNDJmOTk2NWIxYzQ2ZTdkZGU5OTQ1YTFkLi5mZTVhYjdiMDQ3NGRkZDA3NjhjYzI5
NjkzMWM5ZDAwZjVjMjhhMWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTb3VyY2VDb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0U291cmNlQ29kZS5oCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU2NyaXB0U291cmNlQ29kZSB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0U291cmNlQ29kZShj
b25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0
UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9u
KCkpCisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VS
TCYgdXJsID0gS1VSTCgpLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24gPSBUZXh0
UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbigpKQogICAgICAgICA6IG1fcHJvdmlkZXIoU3RyaW5n
U291cmNlUHJvdmlkZXI6OmNyZWF0ZShzb3VyY2UsIHVybC5pc051bGwoKSA/IFN0cmluZygpIDog
dXJsLnN0cmluZygpLCBzdGFydFBvc2l0aW9uKSkKICAgICAgICAgLCBtX2NvZGUobV9wcm92aWRl
ciwgc3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSkKICAgICAgICAgLCBtX3VybCh1
cmwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQ
cm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlk
ZXIuaAppbmRleCBlMjNmZTVjMzU3YjQ1NzE4NjU0OGNhMGI3NTFlOTk4MDljZWMzOThjLi5iZGVi
OTg2MGQ2MmIwYjI0NjY3ODVmODc2YTQxNjRhNzMyNzczNzdiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgKQEAgLTM3LDI2ICszNywy
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTdHJpbmdTb3VyY2VQcm92aWRl
ciA6IHB1YmxpYyBTY3JpcHRTb3VyY2VQcm92aWRlciB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc3RhcnRQ
b3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdTb3VyY2VQcm92aWRlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
c291cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0
aW9uID0gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdTb3VyY2VQcm92aWRlcihzb3VyY2UsIHVy
bCwgc3RhcnRQb3NpdGlvbikpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCBUZXh0UG9z
aXRpb24xIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb247IH0K
KyAgICAgICAgdmlydHVhbCBUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnRQb3NpdGlvbjsgfQogICAgICAgICBKU0M6OlVTdHJpbmcgZ2V0UmFuZ2UoaW50
IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCB7IHJldHVybiBKU0M6OlVTdHJpbmcobV9zb3VyY2UuY2hh
cmFjdGVycygpICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsgfQogICAgICAgICBjb25zdCBVQ2hhciog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmNoYXJhY3RlcnMoKTsgfQogICAgICAgICBp
bnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UubGVuZ3RoKCk7IH0KICAgICAgICAg
Y29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9u
KQorICAgICAgICBTdHJpbmdTb3VyY2VQcm92aWRlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbikKICAgICAg
ICAgICAgIDogU2NyaXB0U291cmNlUHJvdmlkZXIoc3RyaW5nVG9VU3RyaW5nKHVybCkpCiAgICAg
ICAgICAgICAsIG1fc3RhcnRQb3NpdGlvbihzdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgLCBt
X3NvdXJjZShzb3VyY2UpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
VGV4dFBvc2l0aW9uMSBtX3N0YXJ0UG9zaXRpb247CisgICAgICAgIFRleHRQb3NpdGlvbiBtX3N0
YXJ0UG9zaXRpb247CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZTsKICAgICB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAppbmRleCBkYzBmZTQ0
ODc5N2IxZWNiYWY2ODBhNjk5MjUwZDFkMTk5MTQyNTNjLi40NWNmN2EwODhkYTJmZjVlZjEzZmMz
ODY3NWJiNWU5ODRkNjMxNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
aGVkdWxlZEFjdGlvbi5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBTY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbih2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0LCB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuYywgaW50IGFyZ2MsIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBhcmd2W10pCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAs
IG1fY29kZShTdHJpbmcoKSwgS1VSTCgpLCBUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRp
b24oKSkKKyAgICAsIG1fY29kZShTdHJpbmcoKSwgS1VSTCgpLCBUZXh0UG9zaXRpb246OmJlbG93
UmFuZ2VQb3NpdGlvbigpKQogewogICAgIG1fZnVuY3Rpb24gPSB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb24+OjpOZXcoZnVuYyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggOTk2OTM4OWUzMzdiZjY1MTRlNjQwNDg3YzQyN2Jm
YzQwNzE5ZTEzMS4uNDljZWZjNTQ1YTdiOTZjZDE4NjVmNzVjOWMyMmIxODg0NzQ5ODNkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAg
LTE5OCwxMiArMTk4LDEyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAgcmV0dXJuIFNjcmlwdFZh
bHVlKG9iamVjdCk7CiB9CiAKLVRleHRQb3NpdGlvbjAgU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRI
YW5kbGVyUG9zaXRpb24oKSBjb25zdAorVGV4dFBvc2l0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2
ZW50SGFuZGxlclBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIqIHBhcnNlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdGFibGVEb2N1bWVudFBhcnNl
cigpOwogICAgIGlmIChwYXJzZXIpCiAgICAgICAgIHJldHVybiBwYXJzZXItPnRleHRQb3NpdGlv
bigpOwotICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICBy
ZXR1cm4gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKTsKIH0KIAogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpmaW5pc2hlZFdpdGhFdmVudChFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggMThkZGIyNzBkMmRmODc4
Y2EyMzVlNDkxMjUwMjRhYzM4MDY2MmMxNi4uMGUzMTUwYWRhMmVmY2U1MWM3OTE3MDBjODg5Mzll
ZGNkYWFlMzk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaApAQCAtMTU1LDcgKzE1NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmluaXNoZWRX
aXRoRXZlbnQoRXZlbnQqKTsKIAotICAgIFRleHRQb3NpdGlvbjAgZXZlbnRIYW5kbGVyUG9zaXRp
b24oKSBjb25zdDsKKyAgICBUZXh0UG9zaXRpb24gZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25z
dDsKIAogICAgIHN0YXRpYyBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRFdmVudExpc3RlbmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4
IDBkNzU4ZDk0NmM2MTJmY2RiMDAwMjU1N2ZmZDQzYzZkYTUzZWJiZDMuLmZhYWI1OTdkYzY1OWE0
MGU0YjJmZTQwOTY2NmNhODQ5M2NhYjk2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC01MCw3ICs1MCw3IEBAIFBhc3NS
ZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihO
b2RlKiBub2RlLCBBdHRyaWJ1CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IFZl
cnkgc3RyYW5nZTogd2UgaW5pdGlhbGl6ZSB6ZXJvLWJhc2VkIG51bWJlciB3aXRoICcxJy4KLSAg
ICBUZXh0UG9zaXRpb24wIHBvc2l0aW9uKFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jh
c2VkSW50KDEpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6YmFzZSgpKTsKKyAgICBUZXh0UG9zaXRp
b24gcG9zaXRpb24oQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoMSksIEJhc2VkTnVtYmVy
OjpiYXNlKCkpOwogICAgIFN0cmluZyBzb3VyY2VVUkw7CiAKICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpAQCAtNzgsNyArNzgsNyBAQCBQYXNzUmVm
UHRyPFY4TGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoRnJh
bWUqIGZyYW1lLCBBdHRyaQogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+Y2FuRXhlY3V0ZVNj
cmlwdHMoQWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFRl
eHRQb3NpdGlvbjAgcG9zaXRpb24gPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJQb3Np
dGlvbigpOworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IHNjcmlwdENvbnRyb2xsZXItPmV2
ZW50SGFuZGxlclBvc2l0aW9uKCk7CiAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKICAgICByZXR1cm4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKS0+aXNT
VkdEb2N1bWVudCgpLCBhdHRyLT52YWx1ZSgpLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCBXb3JsZENv
bnRleHRIYW5kbGUoVXNlTWFpbldvcmxkKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKaW5kZXggZDdkMTUxMDljMGZiMGE5YWExNTNhZWI5ZjNl
MDAzZmMwZWY2YmRjYy4uMGM2OGExNTYxOTA4NDViZTMzMDNiNDlkNDE2NDI1MjllMjMxN2MwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaApAQCAt
NDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcmlwdFNvdXJjZUNv
ZGUgewogcHVibGljOgotICAgIFNjcmlwdFNvdXJjZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc3RhcnRQb3Np
dGlvbiA9IFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQorICAgIFNjcmlwdFNvdXJj
ZUNvZGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCA9IEtVUkwoKSwgY29u
c3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9z
aXRpb24oKSkKICAgICAgICAgOiBtX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICwgbV9jYWNoZWRT
Y3JpcHQoMCkKICAgICAgICAgLCBtX3VybCh1cmwpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkpCiAgICAgICAgICwgbV9jYWNoZWRTY3Jp
cHQoY3MpCiAgICAgICAgICwgbV91cmwoUGFyc2VkVVJMU3RyaW5nLCBjcy0+dXJsKCkpCi0gICAg
ICAgICwgbV9zdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6Om1pbmltdW1Qb3NpdGlvbigpKQor
ICAgICAgICAsIG1fc3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbigp
KQogICAgIHsKICAgICB9CiAKQEAgLTcwLDEzICs3MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX3VybDsKICAgICB9CiAgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsgfQotICAgIGNvbnN0IFRleHRQb3Np
dGlvbjEmIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb247IH0K
KyAgICBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0UG9zaXRpb247IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKICAgICBL
VVJMIG1fdXJsOwotICAgIFRleHRQb3NpdGlvbjEgbV9zdGFydFBvc2l0aW9uOworICAgIFRleHRQ
b3NpdGlvbiBtX3N0YXJ0UG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3Bw
CmluZGV4IDE3MjE4YzI3ZmQ5ZGNhODU1NTVjZWNiYzFmNDAzOTM0MWM4MTEzNTUuLmVlZTI0NTdi
Njc3MzYxMDNjOTQyZTQ1NjhiNTFhYWM5NjQ0MjIxMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBAIC00Miw3ICs0Miw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZl
bnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBj
b25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3Np
dGlvbjAmIHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkK
K1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBm
dW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBT
dHJpbmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBXb3Js
ZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKICAgICA6IFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyKHRydWUsIHdvcmxkQ29udGV4dCkKICAgICAsIG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFt
ZSkKICAgICAsIG1faXNTVkdFdmVudChpc1NWR0V2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCmluZGV4IDA4NDY3ZmU1ZjdhYjk3MDE0
ZDk0NTNhZjI2ZmEzZjE2NmNlZTYzYjEuLjRkMzY0ODg4YTAxZjA4ZTFkOTFmNjcwNjI2OWJhZTk2
MzljODgxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2
ZW50TGlzdGVuZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVu
dExpc3RlbmVyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8v
IEEgVjhMYXp5RXZlbnRMaXN0ZW5lciBpcyBhbHdheXMgYSBIVE1MIGV2ZW50IGhhbmRsZXIuCiAg
ICAgY2xhc3MgVjhMYXp5RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOExhenlFdmVu
dExpc3RlbmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdF
dmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3Qg
VGV4dFBvc2l0aW9uMCYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRD
b250ZXh0KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3Qg
U3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhMYXp5RXZlbnRMaXN0ZW5l
cihmdW5jdGlvbk5hbWUsIGlzU1ZHRXZlbnQsIGNvZGUsIHNvdXJjZVVSTCwgcG9zaXRpb24sIHdv
cmxkQ29udGV4dCkpOwogICAgICAgICB9CkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVMaXN0ZW5lck9iamVjdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBWOExhenlFdmVudExp
c3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0
IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9u
MCYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KTsKKyAg
ICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9v
bCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkws
IGNvbnN0IFRleHRQb3NpdGlvbiYsIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYpOwogCiAgICAg
ICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVu
dCopOwogCkBAIC03MSw3ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBtX2lzU1ZHRXZlbnQ7CiAgICAgICAgIFN0cmluZyBtX2NvZGU7CiAgICAgICAgIFN0cmluZyBt
X3NvdXJjZVVSTDsKLSAgICAgICAgVGV4dFBvc2l0aW9uMCBtX3Bvc2l0aW9uOworICAgICAgICBU
ZXh0UG9zaXRpb24gbV9wb3NpdGlvbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCmluZGV4IDk5YmM1ZGRkNTU3OTdk
YTRmYTJjNWY3MDU1ZWE5NzVlMzc5ZjU2ZTQuLjJjMDhkZDY3MjNlNTViNWM3NGQxYjUwMzlhYmJh
Nzg1YTY3NGQzNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCkBAIC0y
MDEsNyArMjAxLDcgQEAgVjhQcm94eTo6flY4UHJveHkoKQogICAgIHdpbmRvd1NoZWxsKCktPmRl
c3Ryb3lHbG9iYWwoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21w
aWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgdjg6OlNjcmlw
dERhdGEqIHNjcmlwdERhdGEpCit2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBp
bGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHRE
YXRhKiBzY3JpcHREYXRhKQogewogICAgIGNvbnN0IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9
IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXcoZmlsZU5hbWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgp
KTsKQEAgLTM3NCw3ICszNzQsNyBAQCB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOFByb3h5OjpldmFs
dWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2UsIE5vZGUqIG5vZAogCiAgICAgICAg
IC8vIE5PVEU6IEZvciBjb21wYXRpYmlsaXR5IHdpdGggV2ViQ29yZSwgU2NyaXB0U291cmNlQ29k
ZSdzIGxpbmUgc3RhcnRzIGF0CiAgICAgICAgIC8vIDEsIHdoZXJlYXMgdjggc3RhcnRzIGF0IDAu
Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gY29tcGlsZVNjcmlwdChj
b2RlLCBzb3VyY2UudXJsKCksIFdURjo6dG9aZXJvQmFzZWRUZXh0UG9zaXRpb24oc291cmNlLnN0
YXJ0UG9zaXRpb24oKSksIHNjcmlwdERhdGEuZ2V0KCkpOworICAgICAgICB2ODo6SGFuZGxlPHY4
OjpTY3JpcHQ+IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBzb3Vy
Y2Uuc3RhcnRQb3NpdGlvbigpLCBzY3JpcHREYXRhLmdldCgpKTsKICNpZiBQTEFURk9STShDSFJP
TUlVTSkKICAgICAgICAgUGxhdGZvcm1TdXBwb3J0Ojp0cmFjZUV2ZW50RW5kKCJ2OC5jb21waWxl
Iiwgbm9kZSwgIiIpOwogCkBAIC00MDYsNyArNDA2LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
VjhQcm94eTo6cnVuU2NyaXB0KHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0LCBib29sIGlz
SW4KICAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlLXVz
ZSB0aGUgb3JpZ2luIG9mIHRoZQogICAgICAgICAvLyBzY3JpcHQgcGFzc2VkIHRvIHVzIGFzIHRo
ZSBhcmd1bWVudCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGVtcHR5IHN0cmluZwogICAgICAgICAvLyBh
bmQgMCBiYXNlTGluZS4KLSAgICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCAiIiwg
VGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOworICAgICAgICBzY3JpcHQgPSBjb21w
aWxlU2NyaXB0KGNvZGUsICIiLCBUZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbigpKTsKICAg
ICB9CiAKICAgICBpZiAoaGFuZGxlT3V0T2ZNZW1vcnkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UHJveHkuaAppbmRleCAxNjlmN2E1ZTkzMGNhMTYwNjk4ODIxODBmYTk0NTVjYTVhYjBiMjAx
Li5mNzc5NmM3MWQ5ZTA5NTY5OTljMDQwMTFmNDc0ZTMyZjM3ODljODU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5oCkBAIC0yMzgsNyArMjM4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2hlY2tOZXdMZWdh
bChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRp
b24sIHY4OjpTY3JpcHREYXRhKiA9IDApOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
U2NyaXB0PiBjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9u
LCB2ODo6U2NyaXB0RGF0YSogPSAwKTsKIAogICAgICAgICAvLyBJZiB0aGUgZXhjZXB0aW9uIGNv
ZGUgaXMgZGlmZmVyZW50IGZyb20gemVybywgYSBET00gZXhjZXB0aW9uIGlzCiAgICAgICAgIC8v
IHNjaGVkdWxlIHRvIGJlIHRocm93bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IDRhYTM1MGFl
MDM2YmFiMzhhNTljZDdmNzA3NGFmMDFmZjBkYmZmOGIuLmVmZjNkNWFiZmE0NjdiNjY1ZDQ4MWQw
OGExMDU3YzNmM2EyYWRmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApAQCAtMTkwLDcgKzE5MCw3
IEBAIGJvb2wgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpmb3JnZXRWOEV2ZW50T2JqZWN0
KEV2ZW50KiBldmVudCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVNjcmlwdFZhbHVlIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9z
aXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCitTY3JpcHRWYWx1ZSBX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0
UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CiAgICAgdjg6
OkhhbmRsZVNjb3BlIGhzOwogCkBAIC0yMzksNyArMjM5LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQodjg6OkhhbmRsZTx2ODo6
U2NyaXAKICAgICAvLyBDb21wdXRlIHRoZSBzb3VyY2Ugc3RyaW5nIGFuZCBwcmV2ZW50IGFnYWlu
c3QgaW5maW5pdGUgcmVjdXJzaW9uLgogICAgIGlmIChtX3JlY3Vyc2lvbiA+PSBrTWF4UmVjdXJz
aW9uRGVwdGgpIHsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IGNvZGUgPSB2OEV4dGVy
bmFsU3RyaW5nKCJ0aHJvdyBSYW5nZUVycm9yKCdSZWN1cnNpb24gdG9vIGRlZXAnKSIpOwotICAg
ICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCBUZXh0UG9zaXRp
b24wOjptaW5pbXVtUG9zaXRpb24oKSk7CisgICAgICAgIHNjcmlwdCA9IFY4UHJveHk6OmNvbXBp
bGVTY3JpcHQoY29kZSwgIiIsIFRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKCkpOwogICAg
IH0KIAogICAgIGlmIChWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
aAppbmRleCAwNTJmYjM2NDY1NjBhNjhjZDdmZThkYWNkMDY0NWZhMmEwNTJjNWNjLi43ZDRkNzBj
ZTZhYmE1ZDk2NzYzOWRlYjc3MTIxODU2ZGUwMDVmNjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaApAQCAt
NjcsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdHJhY2tFdmVu
dChFdmVudCopOwogCiAgICAgICAgIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGN1
cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LgotICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0
ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4
dFBvc2l0aW9uMCYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgV29ya2VyQ29udGV4dEV4ZWN1dGlvblN0
YXRlKik7CisgICAgICAgIFNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0
UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOwogCiAgICAgICAgIC8vIFJl
dHVybnMgYSBsb2NhbCBoYW5kbGUgb2YgdGhlIGNvbnRleHQuCiAgICAgICAgIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5l
dyhtX2NvbnRleHQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDU4NzU4MmU3MTk0MDAxNGQ1MDY0ZGViNjcz
YTgyZDAxZjY2NGFkZGQuLjcyMjY4M2YxZWNlYzY2MDE5MTAyNzlkOTA3NDBmODg4ZTBjODBlOWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCkBAIC04MSw3ICs4MSw3IEBAIFNjcmlwdFZhbHVlIFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsCiAg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOwogCiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlv
blN0YXRlIHN0YXRlOwotICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRl
KHNvdXJjZUNvZGUuc291cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIFdURjo6dG9a
ZXJvQmFzZWRUZXh0UG9zaXRpb24oc291cmNlQ29kZS5zdGFydFBvc2l0aW9uKCkpLCAmc3RhdGUp
OworICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcHJveHktPmV2YWx1YXRlKHNvdXJjZUNvZGUu
c291cmNlKCksIHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRQb3Np
dGlvbigpLCAmc3RhdGUpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24pIHsKICAgICAgICAg
aWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgICpleGNlcHRpb24gPSBzdGF0ZS5leGNlcHRpb247
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKaW5kZXggNjE1ZmE3ZGIxYzYwMTI5MjMw
ODY2ZjIwMzg1MTM4YjRhMjQ4NDA5NS4uYzYwMmExMTI2NjNmMzllNzIzMzI5NTkwM2VjYmFiYmJk
YTY3ZmE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApAQCAtNDEsNyArNDEs
NyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IFBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5k
Q2xlYXIoKQogewogICAgIHNldENhY2hlZFNjcmlwdCgwKTsKICAgICBtX3dhdGNoaW5nRm9yTG9h
ZCA9IGZhbHNlOwotICAgIG1fc3RhcnRpbmdQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6OmJlbG93
UmFuZ2VQb3NpdGlvbigpOworICAgIG1fc3RhcnRpbmdQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6
YmVsb3dSYW5nZVBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIG1fZWxlbWVudC5yZWxlYXNlKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCmluZGV4IGZjYmUwNmVlNzhlZDZiOWQ2NGRi
YmQwZDVkN2MzOTNkOWQ3NzgwM2YuLjM5OTY0NjI1ZTA4MmVjNGEwZjc5NTE0NmM4NmEyOTBjMTgx
NWU4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaApAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBQZW5kaW5nU2NyaXB0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1Ymxp
YzoKICAgICBQZW5kaW5nU2NyaXB0KCkKICAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxz
ZSkKLSAgICAgICAgLCBtX3N0YXJ0aW5nUG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5n
ZVBvc2l0aW9uKCkpCisgICAgICAgICwgbV9zdGFydGluZ1Bvc2l0aW9uKFRleHRQb3NpdGlvbjo6
YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgewogICAgIH0KIApAQCAtODAsOCArODAsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBUZXh0UG9zaXRpb24x
IHN0YXJ0aW5nUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nUG9zaXRpb247IH0K
LSAgICB2b2lkIHNldFN0YXJ0aW5nUG9zaXRpb24oY29uc3QgVGV4dFBvc2l0aW9uMSYgcG9zaXRp
b24pIHsgbV9zdGFydGluZ1Bvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBUZXh0UG9zaXRpb24g
c3RhcnRpbmdQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRpbmdQb3NpdGlvbjsgfQor
ICAgIHZvaWQgc2V0U3RhcnRpbmdQb3NpdGlvbihjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9u
KSB7IG1fc3RhcnRpbmdQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAKICAgICBib29sIHdhdGNoaW5n
Rm9yTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2F0Y2hpbmdGb3JMb2FkOyB9CiAgICAgdm9pZCBz
ZXRXYXRjaGluZ0ZvckxvYWQoYm9vbCBiKSB7IG1fd2F0Y2hpbmdGb3JMb2FkID0gYjsgfQpAQCAt
OTgsNyArOTgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgbV93YXRjaGluZ0Zvckxv
YWQ7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKLSAgICBUZXh0UG9zaXRpb24xIG1f
c3RhcnRpbmdQb3NpdGlvbjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCisg
ICAgVGV4dFBvc2l0aW9uIG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25seSB1c2VkIGZvciBpbmxp
bmUgc2NyaXB0IHRhZ3MuCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBt
X2NhY2hlZFNjcmlwdDsgCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKaW5k
ZXggNGJlYmUzN2ZhMjRiNjlkM2E4Y2NjMDhjYzRkOTc4YzM5ZDg5YmNiNi4uZjk4M2NjMWRhMjFl
ZDAwNjg5MDg2OTAxNjIyYTY2MmE0ODYwOGYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVt
ZW50LmNwcApAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgU2NyaXB0RWxlbWVudDo6aXNTY3JpcHRU
eXBlU3VwcG9ydGVkKExlZ2FjeVR5cGVTdXBwb3J0IHN1cHBvcnRMZWdhY3lUeXBlcykKIH0KIAog
Ly8gaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1sI3ByZXBhcmUtYS1z
Y3JpcHQKLWJvb2wgU2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdChjb25zdCBUZXh0UG9zaXRp
b24xJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5
VHlwZXMpCitib29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0
aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBMZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5
VHlwZXMpCiB7CiAgICAgaWYgKG1fYWxyZWFkeVN0YXJ0ZWQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCmluZGV4IDIxMTBmN2YxZjM5YmI0ZGRlMDI2
YzcyMjcyZjY0ZDI0MzVkMTgwYTIuLjc4NzI2MDAzNWU5ZDFmZTlhYmQxNzk5ZTE3ZjNkMjA2ZGZh
YzhjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsg
fQogCiAgICAgZW51bSBMZWdhY3lUeXBlU3VwcG9ydCB7IERpc2FsbG93TGVnYWN5VHlwZUluVHlw
ZUF0dHJpYnV0ZSwgQWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlIH07Ci0gICAgYm9vbCBw
cmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24gPSBU
ZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSwgTGVnYWN5VHlwZVN1cHBvcnQgPSBEaXNh
bGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOworICAgIGJvb2wgcHJlcGFyZVNjcmlwdChj
b25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1p
bmltdW1Qb3NpdGlvbigpLCBMZWdhY3lUeXBlU3VwcG9ydCA9IERpc2FsbG93TGVnYWN5VHlwZUlu
VHlwZUF0dHJpYnV0ZSk7CiAKICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hhcmFjdGVyRW5jb2Rpbmc7IH0KICAgICBTdHJpbmcgc2NyaXB0Q29udGVudCgpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBh
cnNlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCmlu
ZGV4IGRiZTA0ZjgyZTdiZGI1N2VmMjViNGZiZmVjMzgxNDcyYjdmYjAzZjkuLjYzOWI3NDlkNjI3
MzIzNWIyMzgzNmQ4NDAzMDE3NWQwZTI1Yjg1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3QgPSAwOwogCiAgICAgLy8g
VGhlc2UgYXJlIHVzZWQgdG8gZXhwb3NlIHRoZSBjdXJyZW50IGxpbmUvY29sdW1uIHRvIHRoZSBz
Y3JpcHRpbmcgc3lzdGVtLgotICAgIHZpcnR1YWwgWmVyb0Jhc2VkTnVtYmVyIGxpbmVOdW1iZXIo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEJhc2VkTnVtYmVyIGxpbmVOdW1iZXIoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkgY29uc3QgPSAwOwogCiAg
ICAgdm9pZCBzZXRXYXNDcmVhdGVkQnlTY3JpcHQoYm9vbCB3YXNDcmVhdGVkQnlTY3JpcHQpIHsg
bV93YXNDcmVhdGVkQnlTY3JpcHQgPSB3YXNDcmVhdGVkQnlTY3JpcHQ7IH0KICAgICBib29sIHdh
c0NyZWF0ZWRCeVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQ3JlYXRlZEJ5U2NyaXB0OyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAppbmRleCAyNGU3M2M5Njgy
NWY5NWNjMjJjYzhhYjg0MWE3Y2YxMmM3Yzk0MzMyLi5jYTcwODc5ODRiZmZlZThlZmUxMmMxYzQ3
ZWYxNGViYmIyM2NlMmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRB
cmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5j
cHAKQEAgLTM2OSw3ICszNjksNyBAQCBzdGF0aWMgaW50IHBhcnNlckxpbmVOdW1iZXIoRG9jdW1l
bnQqIGRvY3VtZW50KQogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0gZG9j
dW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwogICAgIGlmICghcGFyc2VyKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcGFyc2VyLT5saW5lTnVtYmVyKCkuY29udmVydEFz
T25lQmFzZWRJbnQoKTsKKyAgICByZXR1cm4gcGFyc2VyLT5saW5lTnVtYmVyKCkub25lQmFzZWRJ
bnQoKTsKIH0KIAogdm9pZCByZXBvcnRWaWV3cG9ydFdhcm5pbmcoRG9jdW1lbnQqIGRvY3VtZW50
LCBWaWV3cG9ydEVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQx
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50MikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IGI3YWZlZTY5ZWFkOGRmM2VlYjhh
ZDYwZjVhZGM0NTdiZGExMGUxMGEuLjVlZDVlMmZhNzc2MDk4ZDNiNzhlNGNhZjVjNjYxYTQ1OWY0
ODAzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpy
dW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQogewogICAgIEFTU0VSVChtX3RyZWVCdWls
ZGVyLT5pc1BhdXNlZCgpKTsKIAotICAgIFRleHRQb3NpdGlvbjEgc2NyaXB0U3RhcnRQb3NpdGlv
biA9IFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpOworICAgIFRleHRQb3NpdGlv
biBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24o
KTsKICAgICBSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRh
a2VTY3JpcHRUb1Byb2Nlc3Moc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAgLy8gV2Ugd2lsbCBu
b3QgaGF2ZSBhIHNjcmlwdFJ1bm5lciB3aGVuIHBhcnNpbmcgYSBEb2N1bWVudEZyYWdtZW50Lgog
ICAgIGlmICghbV9zY3JpcHRSdW5uZXIpCkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCiAgICAgLy8g
RklYTUU6IG1faW5wdXQuY3VycmVudCgpLmxlbmd0aCgpIGlzIG9ubHkgYWNjdXJhdGUgaWYgd2UK
ICAgICAvLyBlbmQgdXAgcGFyc2luZyB0aGUgd2hvbGUgYnVmZmVyIGluIHRoaXMgcHVtcC4gIFdl
IHNob3VsZCBwYXNzIGhvdwogICAgIC8vIG11Y2ggd2UgcGFyc2VkIGFzIHBhcnQgb2YgZGlkV3Jp
dGVIVE1MIGluc3RlYWQgb2Ygd2lsbFdyaXRlSFRNTC4KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVI
VE1MKGRvY3VtZW50KCksIG1faW5wdXQuY3VycmVudCgpLmxlbmd0aCgpLCBtX3Rva2VuaXplci0+
bGluZU51bWJlcigpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2ll
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MKGRvY3VtZW50KCksIG1f
aW5wdXQuY3VycmVudCgpLmxlbmd0aCgpLCBtX3Rva2VuaXplci0+bGluZU51bWJlcigpLnplcm9C
YXNlZEludCgpKTsKIAogICAgIHdoaWxlIChjYW5UYWtlTmV4dFRva2VuKG1vZGUsIHNlc3Npb24p
ICYmICFzZXNzaW9uLm5lZWRzWWllbGQpIHsKICAgICAgICAgaWYgKCFpc1BhcnNpbmdGcmFnbWVu
dCgpKQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9r
ZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQogICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5z
Y2FuKCk7CiAgICAgfQogCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhU
TUwoY29va2llLCBtX3Rva2VuaXplci0+bGluZU51bWJlcigpKTsKKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFdyaXRlSFRNTChjb29raWUsIG1fdG9rZW5pemVyLT5saW5lTnVtYmVy
KCkuemVyb0Jhc2VkSW50KCkpOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aGFzSW5z
ZXJ0aW9uUG9pbnQoKQpAQCAtNDQ2LDE5ICs0NDYsMTkgQEAgU3RyaW5nIEhUTUxEb2N1bWVudFBh
cnNlcjo6c291cmNlRm9yVG9rZW4oY29uc3QgSFRNTFRva2VuJiB0b2tlbikKICAgICByZXR1cm4g
bV9zb3VyY2VUcmFja2VyLnNvdXJjZUZvclRva2VuKHRva2VuKTsKIH0KIAotWmVyb0Jhc2VkTnVt
YmVyIEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CitCYXNlZE51bWJlciBI
VE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAogewotICAgIHJldHVybiBaZXJv
QmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSk7
CisgICAgcmV0dXJuIG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCk7CiB9CiAKLVRleHRQb3NpdGlv
bjAgSFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAorVGV4dFBvc2l0aW9u
IEhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmIGN1cnJlbnRTdHJpbmcgPSBtX2lucHV0LmN1cnJlbnQoKTsKLSAgICBa
ZXJvQmFzZWROdW1iZXIgbGluZSA9IGN1cnJlbnRTdHJpbmcuY3VycmVudExpbmUoKTsKLSAgICBa
ZXJvQmFzZWROdW1iZXIgY29sdW1uID0gY3VycmVudFN0cmluZy5jdXJyZW50Q29sdW1uKCk7Ci0g
ICAgQVNTRVJUKG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkgPT0gbGluZS56ZXJvQmFzZWRJbnQo
KSk7CisgICAgQmFzZWROdW1iZXIgbGluZSA9IGN1cnJlbnRTdHJpbmcuY3VycmVudExpbmUoKTsK
KyAgICBCYXNlZE51bWJlciBjb2x1bW4gPSBjdXJyZW50U3RyaW5nLmN1cnJlbnRDb2x1bW4oKTsK
KyAgICBBU1NFUlQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSA9PSBsaW5lKTsKIAotICAgIHJl
dHVybiBUZXh0UG9zaXRpb24wKGxpbmUsIGNvbHVtbik7CisgICAgcmV0dXJuIFRleHRQb3NpdGlv
bihsaW5lLCBjb2x1bW4pOwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5n
Rm9yU2NyaXB0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5oCmluZGV4IDczZTU3ZWYwZmYwN2JlNDNjZjFlNjQwYTVlMzA1OTdmMTRk
ZDkzOGYuLmNmZjFiZWRjZjExZGY3MTk0ZGU5NWZkNDVhZWY3ODA1YmU2MTgxYjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCkBAIC03OCw4
ICs3OCw4IEBAIHB1YmxpYzoKICAgICBIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Rva2VuaXplci5nZXQoKTsgfQogICAgIFN0cmluZyBzb3VyY2VGb3JUb2tlbihj
b25zdCBIVE1MVG9rZW4mKTsKIAotICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRp
b24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIFplcm9CYXNlZE51bWJlciBsaW5lTnVtYmVyKCkgY29u
c3Q7CisgICAgdmlydHVhbCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkgY29uc3Q7CisgICAg
dmlydHVhbCBCYXNlZE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZv
aWQgc3VzcGVuZFNjaGVkdWxlZFRhc2tzKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVNjaGVk
dWxlZFRhc2tzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
SW5wdXRTdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVh
bS5oCmluZGV4IDUxMmFlODhmYTU2NjZiOWU4ZTFmOTQ2ZDg1MjYyOGIxY2YzNjVjZjguLmEzNTQz
NjNkM2JkNmNjMzk3ZDNkNzZiNzlhMDU0OTY2NzQyNTdjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oCkBAIC0xNDcsOCArMTQ3LDggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBIVE1MSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07CiAgICAgU2Vn
bWVudGVkU3RyaW5nIG1fbmV4dDsKLSAgICBXVEY6Olplcm9CYXNlZE51bWJlciBtX2xpbmU7Ci0g
ICAgV1RGOjpaZXJvQmFzZWROdW1iZXIgbV9jb2x1bW47CisgICAgQmFzZWROdW1iZXIgbV9saW5l
OworICAgIEJhc2VkTnVtYmVyIG1fY29sdW1uOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCA0Y2NkNzc3ZjNjZjg5MGNi
ZmQzNGI3NjhkN2ZkZTU0Mjc1MmY5Y2IyLi5kMTRkNjlkMWQ2MzdkYjNiMTlmZWZkYmQwMGJlNTEw
NDViNDAwNDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2Ny
aXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmNwcApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3Rv
cFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlz
IGZ1bmN0aW9uIHNob3VsZCBtYXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5h
bWUgaXMgJ3NjcmlwdCciCiAvLyBTY3JpcHQgaGFuZGxpbmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJl
ZSBidWlsZGVyIHRvIGtlZXAgdGhlIGVhY2ggY2xhc3Mgc2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0
UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3Qg
VGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5l
cjo6ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGNvbnN0IFRleHRQ
b3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVu
dCk7CiAgICAgLy8gRklYTUU6IElmIHNjcmlwdGluZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3Qg
cmV0dXJuIHRydWU7CkBAIC0yNzUsNyArMjc1LDcgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpy
ZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW4K
IAogLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gbWF0Y2ggdGhlIEhUTUw1IGRlZmluaXRpb24g
b2YgInJ1bm5pbmcgYSBzY3JpcHQiCiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2Vi
LWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3J1bm5pbmctYS1z
Y3JpcHQKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwg
Y29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKK3ZvaWQgSFRNTFNjcmlw
dFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBz
Y3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NF
UlQoIWhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXggOTg2ZjdiZDNiZTJiYjUwMmYxYjZiMmEw
ZTRiMzNhZDQ1YjVjMGQ4Ny4uNzdhYWQ4YzljMDM3ZjVmMjk2MWQ1YWM0YzhjMWViNThmMjE4ZTU1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaApA
QCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKIAogICAgIC8vIFBy
b2Nlc3NlcyB0aGUgcGFzc2VkIGluIHNjcmlwdCBhbmQgYW55IHBlbmRpbmcgc2NyaXB0cyBpZiBw
b3NzaWJsZS4KLSAgICBib29sIGV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRUb1By
b2Nlc3MsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgIGJv
b2wgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgY29uc3QgVGV4
dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlw
dHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dh
aXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0czsgfQpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVx
dWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2Ny
aXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlw
dChFbGVtZW50KiwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7Cisg
ICAgdm9pZCBydW5TY3JpcHQoRWxlbWVudCosIGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3Rh
cnRQb3NpdGlvbik7CiAKICAgICAvLyBIZWxwZXJzIGZvciBkZWFsaW5nIHdpdGggSFRNTFNjcmlw
dFJ1bm5lckhvc3QKICAgICB2b2lkIHdhdGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0Jik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAzZjZk
MzJkYzFmMGJlOGRhNzE2NmY4MDNlZWY2NjUxODIxZTUxYmZkLi40NTYzYmIxZWVhMjI0MWQ5ZGJm
MjY0NTJlZTI0YWRlMTk2NTgzNmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAogc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVl
ID0gLTE7CiAKLXN0YXRpYyBUZXh0UG9zaXRpb24xIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVl
MSgpCitzdGF0aWMgVGV4dFBvc2l0aW9uIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCiB7
Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJh
c2VkSW50KC0xKSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSgpKTsKKyAgICByZXR1cm4gVGV4
dFBvc2l0aW9uKEJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoLTEpLCBCYXNlZE51bWJlcjo6
YmFzZSgpKTsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTM1MSw3ICszNTEsNyBAQCBIVE1MVHJlZUJ1
aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgSFRNTERv
Y3VtZW50KiBkb2N1bQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUp
CiAgICAgLCBtX3BhcnNlcihwYXJzZXIpCiAgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9z
aXRpb24odW5pbml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCkpCi0gICAgLCBtX2xhc3RTY3JpcHRF
bGVtZW50U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24wOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkK
KyAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjo6YmVs
b3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzKHVzZVBy
ZUhUTUw1UGFyc2VyUXVpcmtzKQogICAgICwgbV9oYXNQZW5kaW5nRm9yZWlnbkluc2VydGlvbk1v
ZGVTdGVwcyhmYWxzZSkKIHsKQEAgLTM3MCw3ICszNzAsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhU
TUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwgRG9jdW1lbnRGcmFnbWVu
dCogZgogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBt
X3BhcnNlcihwYXJzZXIpCiAgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24odW5p
bml0aWFsaXplZFBvc2l0aW9uVmFsdWUxKCkpCi0gICAgLCBtX2xhc3RTY3JpcHRFbGVtZW50U3Rh
cnRQb3NpdGlvbihUZXh0UG9zaXRpb24wOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBv
c2l0aW9uKCkpCiAgICAgLCBtX3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzKHVzZVByZUhUTUw1UGFy
c2VyUXVpcmtzKQogICAgICwgbV9oYXNQZW5kaW5nRm9yZWlnbkluc2VydGlvbk1vZGVTdGVwcyhm
YWxzZSkKIHsKQEAgLTQyMCw3ICs0MjAsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFy
c2luZ0NvbnRleHQ6On5GcmFnbWVudFBhcnNpbmdDb250ZXh0KCkKIHsKIH0KIAotUGFzc1JlZlB0
cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0
aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKK1Bhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVC
dWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3Np
dGlvbikKIHsKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMg
YWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCiAgICAgLy8gVGhlIEhUTUw1IHNwZWMg
aXMgd3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVl
CkBAIC0yMjIwLDcgKzIyMjAsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRh
ZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7
CiAgICAgICAgICAgICBBU1NFUlQobV90cmVlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUo
c2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJy
ZW50RWxlbWVudCgpOwotICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9u
ID0gV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0aW9uKG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBv
c2l0aW9uKTsKKyAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uOwogICAgICAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIGlmIChpc1BhcnNpbmdGcmFnbWVudCgpICYm
IG1fZnJhZ21lbnRDb250ZXh0LnNjcmlwdGluZ1Blcm1pc3Npb24oKSA9PSBGcmFnbWVudFNjcmlw
dGluZ05vdEFsbG93ZWQpCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3MtPnJlbW92
ZUFsbENoaWxkcmVuKCk7CkBAIC0yODA3LDkgKzI4MDcsOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbV9w
YXJzZXItPnRva2VuaXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyU3RhdGU6OlNjcmlwdERh
dGFTdGF0ZSk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7
CiAKLSAgICBUZXh0UG9zaXRpb24wIHBvc2l0aW9uID0gbV9wYXJzZXItPnRleHRQb3NpdGlvbigp
OworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbiA9IG1fcGFyc2VyLT50ZXh0UG9zaXRpb24oKTsK
IAotICAgIEFTU0VSVChwb3NpdGlvbi5tX2xpbmUuemVyb0Jhc2VkSW50KCkgPT0gbV9wYXJzZXIt
PnRva2VuaXplcigpLT5saW5lTnVtYmVyKCkpOworICAgIEFTU0VSVChwb3NpdGlvbi5tX2xpbmUg
PT0gbV9wYXJzZXItPnRva2VuaXplcigpLT5saW5lTnVtYmVyKCkpOwogCiAgICAgbV9sYXN0U2Ny
aXB0RWxlbWVudFN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCA4NjRjOTNjNWE2MDVlMjQ1NjA0ZDEw
NDJmNTkyNDk5ZDE1MGU2M2EwLi40ZWJkNDRlMmEyZjMyOTY2MzBlMDY3NTdmZTUyMWU4MTI2MTRk
NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApA
QCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJvbUF0b21p
Y1Rva2VuKEF0b21pY0hUTUxUb2tlbiYpOwogCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgd2hlbiBw
YXJzZXIgaXMgcGF1c2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCi0gICAgUGFz
c1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbjEmIHNjcmlw
dFN0YXJ0UG9zaXRpb24pOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJv
Y2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8gRG9uZSwg
Y2xvc2UgYW55IG9wZW4gdGFncywgZXRjLgogICAgIHZvaWQgZmluaXNoZWQoKTsKQEAgLTI0OSwx
MiArMjQ5LDEyIEBAIHByaXZhdGU6CiAgICAgSFRNTERvY3VtZW50UGFyc2VyKiBtX3BhcnNlcjsK
IAogICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdFRvUHJvY2VzczsgLy8gPHNjcmlwdD4gdGFn
IHdoaWNoIG5lZWRzIHByb2Nlc3NpbmcgYmVmb3JlIHJlc3VtaW5nIHRoZSBwYXJzZXIuCi0gICAg
VGV4dFBvc2l0aW9uMSBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb247IC8vIFN0YXJ0aW5n
IGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KKyAgICBU
ZXh0UG9zaXRpb24gbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uOyAvLyBTdGFydGluZyBs
aW5lIG51bWJlciBvZiB0aGUgc2NyaXB0IHRhZyBuZWVkaW5nIHByb2Nlc3NpbmcuCiAKICAgICAv
LyBGSVhNRTogV2UgcHJvYmFibHkgd2FudCB0byByZW1vdmUgdGhpcyBtZW1iZXIuICBPcmlnaW5h
bGx5LCBpdCB3YXMKICAgICAvLyBjcmVhdGVkIHRvIHNlcnZpY2UgdGhlIGxlZ2FjeSB0cmVlIGJ1
aWxkZXIsIGJ1dCBpdCBzZWVtcyB0byBiZSB1c2VkIGZvcgogICAgIC8vIHNvbWUgb3RoZXIgdGhp
bmdzIG5vdy4KLSAgICBUZXh0UG9zaXRpb24wIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0
aW9uOworICAgIFRleHRQb3NpdGlvbiBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbjsK
IAogICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmluZGV4IGI4ODFi
Y2M4NGRhNzk4MjZmZDY5M2U1MDVhOGM0NDhmODY1MmY4ZDUuLjdkOWFlNzBjMmRlMWQxNjEyMTU3
NmEzYmVlZjA5MDVmZmM1ZmIyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTM4Miw3ICszODIsNyBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6YnVpbGRJbml0aWF0
b3JPYmplY3QoRG9jdW1lbgogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0
b3JPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBpbml0aWF0b3JP
YmplY3QtPnNldFN0cmluZygidHlwZSIsICJwYXJzZXIiKTsKICAgICAgICAgaW5pdGlhdG9yT2Jq
ZWN0LT5zZXRTdHJpbmcoInVybCIsIGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAg
IGluaXRpYXRvck9iamVjdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgZG9jdW1lbnQtPnNjcmlw
dGFibGVEb2N1bWVudFBhcnNlcigpLT5saW5lTnVtYmVyKCkuY29udmVydEFzT25lQmFzZWRJbnQo
KSk7CisgICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgZG9j
dW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT5saW5lTnVtYmVyKCkub25lQmFzZWRJ
bnQoKSk7CiAgICAgICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Q7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKaW5kZXggMTUx
NWZlOGNhZGE1MzA0NWQ5YTExYmQ1NWM2Yjc3ZTZiNGU0MmEyOC4uYjk1OTkyN2Q5YjNmYWVmZGY3
ZjI1NGE1MDRhZGJlMWI5NDRlZTVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcApAQCAtMjM3LDE4ICsyMzcsMTggQEAgdm9pZCBTZWdt
ZW50ZWRTdHJpbmc6OmFkdmFuY2VTbG93Q2FzZShpbnQmIGxpbmVOdW1iZXIpCiAgICAgbV9jdXJy
ZW50Q2hhciA9IG1fcHVzaGVkQ2hhcjEgPyAmbV9wdXNoZWRDaGFyMSA6IG1fY3VycmVudFN0cmlu
Zy5tX2N1cnJlbnQ7CiB9CiAKLVdURjo6WmVyb0Jhc2VkTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6
Y3VycmVudExpbmUoKSBjb25zdAorQmFzZWROdW1iZXIgU2VnbWVudGVkU3RyaW5nOjpjdXJyZW50
TGluZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVy
b0Jhc2VkSW50KG1fY3VycmVudExpbmUpOworICAgIHJldHVybiBCYXNlZE51bWJlcjo6ZnJvbVpl
cm9CYXNlZEludChtX2N1cnJlbnRMaW5lKTsKIH0KIAotV1RGOjpaZXJvQmFzZWROdW1iZXIgU2Vn
bWVudGVkU3RyaW5nOjpjdXJyZW50Q29sdW1uKCkgY29uc3QKK0Jhc2VkTnVtYmVyIFNlZ21lbnRl
ZFN0cmluZzo6Y3VycmVudENvbHVtbigpIGNvbnN0CiB7CiAgICAgaW50IHplcm9CYXNlZENvbHVt
biA9IG51bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkKCkgLSBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lOwotICAgIHJldHVybiBXVEY6Olplcm9CYXNlZE51bWJl
cjo6ZnJvbVplcm9CYXNlZEludCh6ZXJvQmFzZWRDb2x1bW4pOworICAgIHJldHVybiBCYXNlZE51
bWJlcjo6ZnJvbVplcm9CYXNlZEludCh6ZXJvQmFzZWRDb2x1bW4pOwogfQogCi12b2lkIFNlZ21l
bnRlZFN0cmluZzo6c2V0Q3VycmVudFBvc2l0aW9uKFdURjo6WmVyb0Jhc2VkTnVtYmVyIGxpbmUs
IFdURjo6WmVyb0Jhc2VkTnVtYmVyIGNvbHVtbkFmdHJlUHJvbG9nLCBpbnQgcHJvbG9nTGVuZ3Ro
KQordm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNldEN1cnJlbnRQb3NpdGlvbihCYXNlZE51bWJlciBs
aW5lLCBCYXNlZE51bWJlciBjb2x1bW5BZnRyZVByb2xvZywgaW50IHByb2xvZ0xlbmd0aCkKIHsK
ICAgICBtX2N1cnJlbnRMaW5lID0gbGluZS56ZXJvQmFzZWRJbnQoKTsKICAgICBtX251bWJlck9m
Q2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lID0gbnVtYmVyT2ZDaGFyYWN0ZXJz
Q29uc3VtZWQoKSArIHByb2xvZ0xlbmd0aCAtIGNvbHVtbkFmdHJlUHJvbG9nLnplcm9CYXNlZElu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRT
dHJpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgK
aW5kZXggNDgzMTE2NmZhMTRjNDE3NGUyMWFiYzJmY2NkZjkyNWY1ODYyMmNiMy4uMmU0YzJkZGE5
OGE0ZmM0ZTE2ZmI3NjdiMjM5NzIwYzkzZjdiMGNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCkBAIC0yMjUsMTEgKzIyNSwxMSBAQCBwdWJs
aWM6CiAgICAgCiAKICAgICAvLyBUaGUgbWV0aG9kIGlzIG1vZGVyYXRlbHkgc2xvdywgY29tcGFy
aW5nIHRvIGN1cnJlbnRMaW5lIG1ldGhvZC4KLSAgICBXVEY6Olplcm9CYXNlZE51bWJlciBjdXJy
ZW50Q29sdW1uKCkgY29uc3Q7Ci0gICAgV1RGOjpaZXJvQmFzZWROdW1iZXIgY3VycmVudExpbmUo
KSBjb25zdDsKKyAgICBCYXNlZE51bWJlciBjdXJyZW50Q29sdW1uKCkgY29uc3Q7CisgICAgQmFz
ZWROdW1iZXIgY3VycmVudExpbmUoKSBjb25zdDsKICAgICAvLyBTZXRzIHZhbHVlIG9mIGxpbmUv
Y29sdW1uIHZhcmlhYmxlcy4gQ29sdW1uIGlzIHNwZWNpZmllZCBpbmRpcmVjdGx5IGJ5IGEgcGFy
YW1ldGVyIGNvbHVtbkFmdHJlUHJvbG9nCiAgICAgLy8gd2hpY2ggaXMgYSB2YWx1ZSBvZiBjb2x1
bW4gdGhhdCB3ZSBzaG91bGQgZ2V0IGFmdGVyIGEgcHJvbG9nIChmaXJzdCBwcm9sb2dMZW5ndGgg
Y2hhcmFjdGVycykgaGFzIGJlZW4gY29uc3VtZWQuCi0gICAgdm9pZCBzZXRDdXJyZW50UG9zaXRp
b24oV1RGOjpaZXJvQmFzZWROdW1iZXIgbGluZSwgV1RGOjpaZXJvQmFzZWROdW1iZXIgY29sdW1u
QWZ0cmVQcm9sb2csIGludCBwcm9sb2dMZW5ndGgpOworICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0
aW9uKEJhc2VkTnVtYmVyIGxpbmUsIEJhc2VkTnVtYmVyIGNvbHVtbkFmdHJlUHJvbG9nLCBpbnQg
cHJvbG9nTGVuZ3RoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZChjb25zdCBTZWdtZW50
ZWRTdWJzdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9u
cy5jcHAKaW5kZXggYTBhOWRjNjU1NmNlZTdhYzFkN2JhZjdjZDdmMjQ5NTg3NzNlOTM4OC4uYWQ0
NmM5OGM1NmQ0NGQ2M2M1NmQ5ODRmYjY1ODNhYjJhNDlhMzFiNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0
aWMgaW50IHBhcnNlckxpbmVOdW1iZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIFNjcmlwdGFi
bGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0gZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBh
cnNlcigpOwogICAgIGlmICghcGFyc2VyKQogICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4g
cGFyc2VyLT5saW5lTnVtYmVyKCkuY29udmVydEFzT25lQmFzZWRJbnQoKTsKKyAgICByZXR1cm4g
cGFyc2VyLT5saW5lTnVtYmVyKCkub25lQmFzZWRJbnQoKTsKIH0KIAogc3RhdGljIHZvaWQgcmVw
b3J0TWVzc2FnZShEb2N1bWVudCogZG9jdW1lbnQsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9y
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmNwcAppbmRleCA4NDJkNzRkYTdm
Nzk0MjllYzA2N2VkYmVmMDU1OGZhZTI4YjE5Zjg2Li45MjI3OWYwMjFmNGUzMzYyZDdiZWMzOTRm
MDU4YTI0YzllODkwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3Jz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmNwcApAQCAtNDksMTYgKzQ5
LDE2IEBAIGNvbnN0IGludCBtYXhFcnJvcnMgPSAyNTsKIFhNTEVycm9yczo6WE1MRXJyb3JzKERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX2Vy
cm9yQ291bnQoMCkKLSAgICAsIG1fbGFzdEVycm9yUG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVs
b3dSYW5nZVBvc2l0aW9uKCkpCisgICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlv
bjo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiB9CiAKIHZvaWQgWE1MRXJyb3JzOjpoYW5kbGVF
cnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIs
IGludCBjb2x1bW5OdW1iZXIpCiB7Ci0gICAgaGFuZGxlRXJyb3IodHlwZSwgbWVzc2FnZSwgVGV4
dFBvc2l0aW9uMShXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGluZU51bWJl
ciksIFdURjo6T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1iZXIpKSk7
CisgICAgaGFuZGxlRXJyb3IodHlwZSwgbWVzc2FnZSwgVGV4dFBvc2l0aW9uKEJhc2VkTnVtYmVy
Ojpmcm9tT25lQmFzZWRJbnQobGluZU51bWJlciksIEJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJ
bnQoY29sdW1uTnVtYmVyKSkpOwogfQogCi12b2lkIFhNTEVycm9yczo6aGFuZGxlRXJyb3IoRXJy
b3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIFRleHRQb3NpdGlvbjEgcG9zaXRpb24p
Cit2b2lkIFhNTEVycm9yczo6aGFuZGxlRXJyb3IoRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UsIFRleHRQb3NpdGlvbiBwb3NpdGlvbikKIHsKICAgICBpZiAodHlwZSA9PSBmYXRh
bCB8fCAobV9lcnJvckNvdW50IDwgbWF4RXJyb3JzICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9s
aW5lICE9IHBvc2l0aW9uLm1fbGluZSAmJiBtX2xhc3RFcnJvclBvc2l0aW9uLm1fY29sdW1uICE9
IHBvc2l0aW9uLm1fY29sdW1uKSkgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTc1LDcg
Kzc1LDcgQEAgdm9pZCBYTUxFcnJvcnM6OmhhbmRsZUVycm9yKEVycm9yVHlwZSB0eXBlLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCBUZXh0UG9zaXRpb24xIHAKICAgICB9CiB9CiAKLXZvaWQgWE1MRXJy
b3JzOjphcHBlbmRFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBUZXh0UG9z
aXRpb24xIHBvc2l0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBYTUxFcnJvcnM6OmFw
cGVuZEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIFRleHRQb3NpdGlvbiBw
b3NpdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICAvLyA8dHlwZVN0cmluZz4gb24g
bGluZSA8bGluZU51bWJlcj4gYXQgY29sdW1uIDxjb2x1bW5OdW1iZXI+OiA8bWVzc2FnZT4KICAg
ICBtX2Vycm9yTWVzc2FnZXMuYXBwZW5kKHR5cGVTdHJpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEVycm9ycy5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5o
CmluZGV4IGQwMzI5NDQ3YjE3YWJlMGY3OTM4YTg2ZTkxMTVmNzA1OGNmZTEyYjguLmQ0ZTQ4YjNl
NDQ5NjYzZmExZmNmMGNkYTY0MTBjOTJiYTQ5MTVjOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxFcnJvcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmgK
QEAgLTQ3LDE3ICs0NywxNyBAQCBwdWJsaWM6CiAgICAgLy8gRXhwb3NlZCBmb3IgY2FsbGJhY2tz
OgogICAgIGVudW0gRXJyb3JUeXBlIHsgd2FybmluZywgbm9uRmF0YWwsIGZhdGFsIH07CiAgICAg
dm9pZCBoYW5kbGVFcnJvcihFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBsaW5l
TnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKTsKLSAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlw
ZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7CisgICAgdm9pZCBoYW5kbGVF
cnJvcihFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIFRleHRQb3NpdGlvbik7CiAKICAg
ICB2b2lkIGluc2VydEVycm9yTWVzc2FnZUJsb2NrKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBh
cHBlbmRFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBUZXh0UG9zaXRpb24x
LCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICB2b2lkIGFwcGVuZEVycm9yTWVzc2FnZShjb25z
dCBTdHJpbmcmIHR5cGVTdHJpbmcsIFRleHRQb3NpdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSk7
CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIAogICAgIGludCBtX2Vycm9yQ291bnQ7Ci0g
ICAgVGV4dFBvc2l0aW9uMSBtX2xhc3RFcnJvclBvc2l0aW9uOworICAgIFRleHRQb3NpdGlvbiBt
X2xhc3RFcnJvclBvc2l0aW9uOwogICAgIFN0cmluZ0J1aWxkZXIgbV9lcnJvck1lc3NhZ2VzOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6
ZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplckJhc2Uu
aAppbmRleCBmZDg5OTUyYmEwNDMxM2FiODNkZWVmMTAzYzM2MTEzYmU5OWMzMWI2Li5kMDIwYzNl
ZTgyYThlYTU4MTllNDY1YzIxZDZkMjQwMDBlMmYyMTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXplckJhc2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3Np
dGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDggKzQ1LDcgQEAgY2xhc3Mg
TWFya3VwVG9rZW5pemVyQmFzZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+TWFya3VwVG9rZW5p
emVyQmFzZSgpIHsgfQogCi0gICAgaW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVOdW1iZXI7IH0KLSAgICBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gMTsgfSAv
LyBNYXRjaGVzIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIGJlaGF2aW9yLgorICAgIEJhc2Vk
TnVtYmVyIGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBCYXNlZE51bWJlcjo6ZnJvbVplcm9C
YXNlZEludChtX2xpbmVOdW1iZXIpOyB9CiAKICAgICB0eXBlbmFtZSBTdGF0ZTo6U3RhdGUgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgdm9pZCBzZXRTdGF0ZSh0eXBlbmFt
ZSBTdGF0ZTo6U3RhdGUgc3RhdGUpIHsgbV9zdGF0ZSA9IHN0YXRlOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDdkMDQ0
Nzk1NjJhM2ZjODdkNDY0MDg2NWViNWM2OWQ1NGMyNDAzMmMuLjZhZDMyMmM1ZmViYTVkZThmYTI5
NGQzMGMzZjJhNzhiMzQzZmJmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC04NCw5ICs4NCw5IEBAIHZvaWQgTmV3WE1M
RG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcoKQogCiB2b2lkIE5ld1hNTERvY3VtZW50UGFy
c2VyOjpwcm9jZXNzU2NyaXB0KFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQpCiB7Ci0gICAg
aWYgKHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQoVGV4dFBvc2l0aW9uMSgpLCBTY3JpcHRF
bGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpKSB7CisgICAgaWYgKHNjcmlw
dEVsZW1lbnQtPnByZXBhcmVTY3JpcHQoVGV4dFBvc2l0aW9uKCksIFNjcmlwdEVsZW1lbnQ6OkFs
bG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpIHsKICAgICAgICAgaWYgKHNjcmlwdEVsZW1l
bnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCi0gICAgICAgICAgICBzY3JpcHRFbGVtZW50
LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29u
dGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgVGV4dFBvc2l0aW9uMSgpKSk7CisgICAgICAgICAg
ICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgVGV4dFBvc2l0aW9uKCkp
KTsKICAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQo
KSkgewogICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVk
U2NyaXB0KCk7CiAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBzY3JpcHRFbGVtZW50LT5l
bGVtZW50KCk7CkBAIC0xMDAsMTUgKzEwMCwxNCBAQCB2b2lkIE5ld1hNTERvY3VtZW50UGFyc2Vy
Ojpwcm9jZXNzU2NyaXB0KFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQpCiAgICAgfQogfQog
Ci1UZXh0UG9zaXRpb24wIE5ld1hNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25z
dAorVGV4dFBvc2l0aW9uIE5ld1hNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25z
dAogewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9C
YXNlZEludCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBaZXJvQmFzZWROdW1iZXI6OmZy
b21aZXJvQmFzZWRJbnQoMCkpOworICAgIHJldHVybiBUZXh0UG9zaXRpb246Om1pbmltdW1Qb3Np
dGlvbigpOwogfQogCi1aZXJvQmFzZWROdW1iZXIgTmV3WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVO
dW1iZXIoKSBjb25zdAorQmFzZWROdW1iZXIgTmV3WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1i
ZXIoKSBjb25zdAogewotICAgIHJldHVybiBaZXJvQmFzZWROdW1iZXI6OmJlbG93QmFzZSgpOwor
ICAgIHJldHVybiBCYXNlZE51bWJlcjo6YmFzZSgpOwogfQogCiB2b2lkIE5ld1hNTERvY3VtZW50
UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCAwNzg0Y2M1ZjY5NjE5
OTg4MTM1MWNiMzg4MWU0MmIwMTAwZWE3ZWE2Li40NTc3MjgxYTE5OThkZWQ5YTk5ZmMyZjkzYzk3
MjgxZGFhMTU3ZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hN
TERvY3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxE
b2N1bWVudFBhcnNlci5oCkBAIC02MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc3Vt
ZVBhcnNpbmcoKTsKICAgICB2b2lkIHByb2Nlc3NTY3JpcHQoU2NyaXB0RWxlbWVudCopOwogCi0g
ICAgdmlydHVhbCBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0OwotICAgIHZpcnR1
YWwgWmVyb0Jhc2VkTnVtYmVyIGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRleHRQ
b3NpdGlvbiB0ZXh0UG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEJhc2VkTnVtYmVyIGxp
bmVOdW1iZXIoKSBjb25zdDsKIAogICAgIC8vIERvY3VtZW50UGFyc2VyCiAgICAgdmlydHVhbCBi
b29sIGhhc0luc2VydGlvblBvaW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDRjN2Y3NDBjZDRiZTA4ZTI2MDQ3NmI4YjVkMTg0
MzYxZGMxZDVjZDYuLjI0OTIzZWUzMmUyMDU1NTIyMGQ1YTI4YWQ2ODJhY2VkOWU0YWI1NTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBA
IC03NSw3ICs3NSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZShD
b250YWluZXJOb2RlKiBuKQogICAgIG1fY3VycmVudE5vZGVTdGFjay5hcHBlbmQobV9jdXJyZW50
Tm9kZSk7CiAgICAgbV9jdXJyZW50Tm9kZSA9IG47CiAgICAgaWYgKG1fY3VycmVudE5vZGVTdGFj
ay5zaXplKCkgPiBtYXhET01UcmVlRGVwdGgpCi0gICAgICAgIGhhbmRsZUVycm9yKFhNTEVycm9y
czo6ZmF0YWwsICJFeGNlc3NpdmUgbm9kZSBuZXN0aW5nLiIsIFdURjo6dG9PbmVCYXNlZFRleHRQ
b3NpdGlvbih0ZXh0UG9zaXRpb24oKSkpOworICAgICAgICBoYW5kbGVFcnJvcihYTUxFcnJvcnM6
OmZhdGFsLCAiRXhjZXNzaXZlIG5vZGUgbmVzdGluZy4iLCB0ZXh0UG9zaXRpb24oKSk7CiB9CiAK
IHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBvcEN1cnJlbnROb2RlKCkKQEAgLTEzMyw3ICsxMzMs
NyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjphcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5n
JiBzKQogICAgIEltYWdlTG9hZGVyOjpkaXNwYXRjaFBlbmRpbmdCZWZvcmVMb2FkRXZlbnRzKCk7
CiB9CiAKLXZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmhhbmRsZUVycm9yKFhNTEVycm9yczo6RXJy
b3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG0sIFRleHRQb3NpdGlvbjEgcG9zaXRpb24pCit2b2lk
IFhNTERvY3VtZW50UGFyc2VyOjpoYW5kbGVFcnJvcihYTUxFcnJvcnM6OkVycm9yVHlwZSB0eXBl
LCBjb25zdCBjaGFyKiBtLCBUZXh0UG9zaXRpb24gcG9zaXRpb24pCiB7CiAgICAgbV94bWxFcnJv
cnMuaGFuZGxlRXJyb3IodHlwZSwgbSwgcG9zaXRpb24pOwogICAgIGlmICh0eXBlICE9IFhNTEVy
cm9yczo6d2FybmluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuaAppbmRleCBkMmExYWQ3YTI4NDA2MzBlYmFmZTgwZWY0YjRkMmY0MjgzYjI0ZDc1Li4z
MWM3YmQ2MGU1NWUzNWY2NmE4NmQ5ZTg4NWFjZDg5YzA0MDJhNzgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oCkBAIC04Nyw3ICs4Nyw3IEBAIGNs
YXNzIFRleHQ7CiAgICAgICAgIH5YTUxEb2N1bWVudFBhcnNlcigpOwogCiAgICAgICAgIC8vIEV4
cG9zZWQgZm9yIGNhbGxiYWNrczoKLSAgICAgICAgdm9pZCBoYW5kbGVFcnJvcihYTUxFcnJvcnM6
OkVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSk7CisgICAgICAg
IHZvaWQgaGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIFRleHRQb3NpdGlvbik7CiAKICAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9v
bCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQogICAgICAgICBib29s
IGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CkBA
IC0xMDEsNyArMTAxLDcgQEAgY2xhc3MgVGV4dDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gdXNlZCB0byBiZSB1c2VkIGJ5IFdNTC4gQ2FuIHdlIHJlbW92ZSBpdD8KICAgICAgICAg
dmlydHVhbCBib29sIHdlbGxGb3JtZWQoKSBjb25zdCB7IHJldHVybiAhbV9zYXdFcnJvcjsgfQog
Ci0gICAgICAgIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7CisgICAgICAgIFRl
eHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24oKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0c1hNTFZlcnNpb24oY29uc3QgU3RyaW5nJik7CiAKQEAgLTExNyw4ICsxMTcsOCBAQCBj
bGFzcyBUZXh0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRldGFjaCgpOwotICAgICAgICB2aXJ0dWFsIFplcm9CYXNlZE51bWJlciBsaW5lTnVt
YmVyKCkgY29uc3Q7Ci0gICAgICAgIFplcm9CYXNlZE51bWJlciBjb2x1bW5OdW1iZXIoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBCYXNlZE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CisgICAg
ICAgIEJhc2VkTnVtYmVyIGNvbHVtbk51bWJlcigpIGNvbnN0OwogCiAgICAgICAgIC8vIGZyb20g
Q2FjaGVkUmVzb3VyY2VDbGllbnQKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVk
KENhY2hlZFJlc291cmNlKik7CkBAIC0yMDksNyArMjA5LDcgQEAgcHVibGljOgogCiAgICAgICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9wZW5kaW5nU2NyaXB0OwogICAg
ICAgICBSZWZQdHI8RWxlbWVudD4gbV9zY3JpcHRFbGVtZW50OwotICAgICAgICBUZXh0UG9zaXRp
b24xIG1fc2NyaXB0U3RhcnRQb3NpdGlvbjsKKyAgICAgICAgVGV4dFBvc2l0aW9uIG1fc2NyaXB0
U3RhcnRQb3NpdGlvbjsKIAogICAgICAgICBib29sIG1fcGFyc2luZ0ZyYWdtZW50OwogICAgICAg
ICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlVVJJOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGIvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCmluZGV4IDgy
ZWY2YjQwZTI0ZmFjYTU1ODY5NGFmMzI2YjY1NWZjNjc4MjhkM2MuLmY5YzQ5MTE5OWZkMzcxZThl
YWZmYjBlNTBhMDRlOTUyNDliODFlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKQEAgLTE3Miw3ICsxNzIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIG1fY2FsbGJhY2tzLmFwcGVuZChjYWxsYmFjay5yZWxlYXNlKCkp
OwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kRXJyb3JDYWxsYmFjayhYTUxFcnJvcnM6OkVycm9y
VHlwZSB0eXBlLCBjb25zdCB4bWxDaGFyKiBtZXNzYWdlLCBPbmVCYXNlZE51bWJlciBsaW5lTnVt
YmVyLCBPbmVCYXNlZE51bWJlciBjb2x1bW5OdW1iZXIpCisgICAgdm9pZCBhcHBlbmRFcnJvckNh
bGxiYWNrKFhNTEVycm9yczo6RXJyb3JUeXBlIHR5cGUsIGNvbnN0IHhtbENoYXIqIG1lc3NhZ2Us
IEJhc2VkTnVtYmVyIGxpbmVOdW1iZXIsIEJhc2VkTnVtYmVyIGNvbHVtbk51bWJlcikKICAgICB7
CiAgICAgICAgIE93blB0cjxQZW5kaW5nRXJyb3JDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0
cihuZXcgUGVuZGluZ0Vycm9yQ2FsbGJhY2spOwogCkBAIC0zMjUsMTMgKzMyNSwxMyBAQCBwcml2
YXRlOgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJz
ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+aGFuZGxlRXJyb3IodHlwZSwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4obWVzc2FnZSksIFRleHRQb3NpdGlvbjEobGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKSk7CisgICAgICAgICAgICBwYXJzZXItPmhhbmRsZUVycm9yKHR5cGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lc3NhZ2UpLCBUZXh0UG9zaXRpb24obGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKSk7CiAgICAgICAgIH0KIAogICAgICAgICBYTUxFcnJvcnM6OkVycm9yVHlw
ZSB0eXBlOwogICAgICAgICB4bWxDaGFyKiBtZXNzYWdlOwotICAgICAgICBPbmVCYXNlZE51bWJl
ciBsaW5lTnVtYmVyOwotICAgICAgICBPbmVCYXNlZE51bWJlciBjb2x1bW5OdW1iZXI7CisgICAg
ICAgIEJhc2VkTnVtYmVyIGxpbmVOdW1iZXI7CisgICAgICAgIEJhc2VkTnVtYmVyIGNvbHVtbk51
bWJlcjsKICAgICB9OwogCiAgICAgRGVxdWU8T3duUHRyPFBlbmRpbmdDYWxsYmFjaz4gPiBtX2Nh
bGxiYWNrczsKQEAgLTU2NCw3ICs1NjQsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1l
bnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmlldykKICAgICAs
IG1fZmluaXNoQ2FsbGVkKGZhbHNlKQogICAgICwgbV94bWxFcnJvcnMoZG9jdW1lbnQpCiAgICAg
LCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9z
aXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlv
bihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJh
Z21lbnQoZmFsc2UpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRp
bmdBbGxvd2VkKQogewpAQCAtNTkwLDcgKzU5MCw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxE
b2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50
CiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKICAgICAsIG1feG1sRXJyb3JzKGZyYWdtZW50
LT5kb2N1bWVudCgpKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0
YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAgLCBt
X3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkK
ICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Np
b24oc2NyaXB0aW5nUGVybWlzc2lvbikKIHsKQEAgLTY3NCw3ICs2NzQsNyBAQCB2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpkb1dyaXRlKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCiAgICAgLy8g
RklYTUU6IFdoeSBpcyB0aGlzIGhlcmU/ICBBbmQgd2h5IGlzIGl0IGFmdGVyIHdlIHByb2Nlc3Mg
dGhlIHBhc3NlZCBzb3VyY2U/CiAgICAgaWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1
bWVudCgpLT5kZWNvZGVyKCktPnNhd0Vycm9yKCkpIHsKICAgICAgICAgLy8gSWYgdGhlIGRlY29k
ZXIgc2F3IGFuIGVycm9yLCByZXBvcnQgaXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCi0gICAg
ICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZElu
dChjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5saW5lKSwgT25lQmFzZWROdW1iZXI6OmZyb21P
bmVCYXNlZEludChjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5jb2wpKTsKKyAgICAgICAgVGV4
dFBvc2l0aW9uIHBvc2l0aW9uKEJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+
Y29udGV4dCgpLT5pbnB1dC0+bGluZSksIEJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29u
dGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKSk7CiAgICAgICAgIGhhbmRsZUVycm9yKFhNTEVy
cm9yczo6ZmF0YWwsICJFbmNvZGluZyBlcnJvciIsIHBvc2l0aW9uKTsKICAgICB9CiB9CkBAIC04
MjIsNyArODIyLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMoY29u
c3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGEKIAogICAgIFNjcmlwdEVsZW1l
bnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CiAg
ICAgaWYgKHNjcmlwdEVsZW1lbnQpCi0gICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFdU
Rjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbih0ZXh0UG9zaXRpb24oKSk7CisgICAgICAgIG1fc2Ny
aXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbigpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+
cGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKQEAgLTk1MCw5ICs5NTAsOSBAQCB2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjplcnJvcihYTUxFcnJvcnM6OkVycm9yVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiBtZXNzYWdlLCB2YQogI2VuZGlmCiAKICAgICBpZiAobV9wYXJzZXJQYXVzZWQp
Ci0gICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kRXJyb3JDYWxsYmFjayh0eXBlLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPihtKSwgbGluZU51bWJlcigpLmNvbnZlcnRU
b09uZUJhc2VkKCksIGNvbHVtbk51bWJlcigpLmNvbnZlcnRUb09uZUJhc2VkKCkpOworICAgICAg
ICBtX3BlbmRpbmdDYWxsYmFja3MtPmFwcGVuZEVycm9yQ2FsbGJhY2sodHlwZSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB4bWxDaGFyKj4obSksIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkp
OwogICAgIGVsc2UKLSAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwgbSwgV1RGOjp0b09uZUJhc2Vk
VGV4dFBvc2l0aW9uKHRleHRQb3NpdGlvbigpKSk7CisgICAgICAgIGhhbmRsZUVycm9yKHR5cGUs
IG0sIHRleHRQb3NpdGlvbigpKTsKIAogI2lmIEhBVkUoVkFTUFJJTlRGKQogICAgIGZyZWUobSk7
CkBAIC0xMzY5LDI1ICsxMzY5LDIzIEBAIHZvaWQqIHhtbERvY1B0ckZvclN0cmluZyhDYWNoZWRS
ZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGNvbnN0IFN0cmluCiB9CiAjZW5k
aWYKIAotWmVyb0Jhc2VkTnVtYmVyIFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29u
c3QKK0Jhc2VkTnVtYmVyIFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKIHsK
LSAgICBPbmVCYXNlZE51bWJlciBudW1iZXIgPSBPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2Vk
SW50KGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxKTsKLSAgICByZXR1cm4g
bnVtYmVyLmNvbnZlcnRUb1plcm9CYXNlZCgpOworICAgIHJldHVybiBCYXNlZE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxKTsKIH0K
IAotWmVyb0Jhc2VkTnVtYmVyIFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25z
dAorQmFzZWROdW1iZXIgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CiB7
Ci0gICAgT25lQmFzZWROdW1iZXIgbnVtYmVyID0gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNl
ZEludChjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxKTsKLSAgICByZXR1cm4g
bnVtYmVyLmNvbnZlcnRUb1plcm9CYXNlZCgpOworICAgIHJldHVybiBCYXNlZE51bWJlcjo6ZnJv
bU9uZUJhc2VkSW50KGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmNvbCA6IDEpOwogfQog
Ci1UZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAor
VGV4dFBvc2l0aW9uIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAogewog
ICAgIHhtbFBhcnNlckN0eHRQdHIgY29udGV4dCA9IHRoaXMtPmNvbnRleHQoKTsKICAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24wOjptaW5pbXVtUG9zaXRpb24o
KTsKLSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2Vk
SW50KGNvbnRleHQtPmlucHV0LT5saW5lKS5jb252ZXJ0VG9aZXJvQmFzZWQoKSwKLSAgICAgICAg
T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+Y29sKS5jb252
ZXJ0VG9aZXJvQmFzZWQoKSk7CisgICAgICAgIHJldHVybiBUZXh0UG9zaXRpb246Om1pbmltdW1Q
b3NpdGlvbigpOworICAgIHJldHVybiBUZXh0UG9zaXRpb24oQmFzZWROdW1iZXI6OmZyb21PbmVC
YXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICBC
YXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQtPmlucHV0LT5jb2wpKTsKIH0KIAog
dm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKaW5kZXggZmE0YmQwZGY5YmY0
M2IzZDI4MjEzZDFmYjY3ZDMyMzFkMTM5NzcyNy4uNTNiMThlNTJhOWU4MTVjZTc3YzFkNzhmNzUx
YzhkNTZmMDU2YTM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyUXQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6
OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKICAgICAsIG1feG1sRXJyb3JzKGRvY3Vt
ZW50KQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRp
b24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAgLCBtX3NjcmlwdFN0
YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1f
cGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdt
ZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTEyOSw3ICsxMjksNyBAQCBYTUxEb2N1bWVudFBh
cnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1l
bnQqIHBhcmVudAogICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCiAgICAgLCBtX3htbEVycm9y
cyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwg
bV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigp
KQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBv
c2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9zY3JpcHRp
bmdQZXJtaXNzaW9uKHBlcm1pc3Npb24pCiB7CkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBYTUxE
b2N1bWVudFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQogCiAgICAg
aWYgKGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1bWVudCgpLT5kZWNvZGVyKCktPnNhd0Vy
cm9yKCkpIHsKICAgICAgICAgLy8gSWYgdGhlIGRlY29kZXIgc2F3IGFuIGVycm9yLCByZXBvcnQg
aXQgYXMgZmF0YWwgKHN0b3BzIHBhcnNpbmcpCi0gICAgICAgIGhhbmRsZUVycm9yKFhNTEVycm9y
czo6ZmF0YWwsICJFbmNvZGluZyBlcnJvciIsIFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbih0
ZXh0UG9zaXRpb24oKSkpOworICAgICAgICBoYW5kbGVFcnJvcihYTUxFcnJvcnM6OmZhdGFsLCAi
RW5jb2RpbmcgZXJyb3IiLCB0ZXh0UG9zaXRpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTIyMywyMiArMjIzLDIyIEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKCkK
IAogICAgIGlmIChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVy
ZUVuZE9mRG9jdW1lbnRFcnJvcgogICAgICAgICB8fCAobV93cm90ZVRleHQgJiYgIW1fc2F3Rmly
c3RFbGVtZW50ICYmICFtX3Nhd1hTTFRyYW5zZm9ybSAmJiAhbV9zYXdFcnJvcikpCi0gICAgICAg
IGhhbmRsZUVycm9yKFhNTEVycm9yczo6ZmF0YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JT
dHJpbmcoKSksIFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbih0ZXh0UG9zaXRpb24oKSkpOwor
ICAgICAgICBoYW5kbGVFcnJvcihYTUxFcnJvcnM6OmZhdGFsLCBxUHJpbnRhYmxlKG1fc3RyZWFt
LmVycm9yU3RyaW5nKCkpLCB0ZXh0UG9zaXRpb24oKSk7CiB9CiAKLVplcm9CYXNlZE51bWJlciBY
TUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CitCYXNlZE51bWJlciBYTUxEb2N1
bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIE9uZUJhc2VkTnVt
YmVyOjpmcm9tT25lQmFzZWRJbnQobV9zdHJlYW0ubGluZU51bWJlcigpKS5jb252ZXJ0VG9aZXJv
QmFzZWQoKTsKKyAgICByZXR1cm4gQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChtX3N0cmVh
bS5saW5lTnVtYmVyKCkpOwogfQogCi1aZXJvQmFzZWROdW1iZXIgWE1MRG9jdW1lbnRQYXJzZXI6
OmNvbHVtbk51bWJlcigpIGNvbnN0CitCYXNlZE51bWJlciBYTUxEb2N1bWVudFBhcnNlcjo6Y29s
dW1uTnVtYmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gT25lQmFzZWROdW1iZXI6OmZyb21PbmVC
YXNlZEludChtX3N0cmVhbS5jb2x1bW5OdW1iZXIoKSkuY29udmVydFRvWmVyb0Jhc2VkKCk7Cisg
ICAgcmV0dXJuIEJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV9zdHJlYW0uY29sdW1uTnVt
YmVyKCkpOwogfQogCi1UZXh0UG9zaXRpb24wIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRp
b24oKSBjb25zdAorVGV4dFBvc2l0aW9uIFhNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24o
KSBjb25zdAogewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKGxpbmVOdW1iZXIoKSwgY29sdW1u
TnVtYmVyKCkpOworICAgIHJldHVybiBUZXh0UG9zaXRpb24obGluZU51bWJlcigpLCBjb2x1bW5O
dW1iZXIoKSk7CiB9CiAKIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKQEAg
LTQzMyw3ICs0MzMsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSgpCiAgICAgICAg
ICAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVF
bmRPZkRvY3VtZW50RXJyb3IpIHsKICAgICAgICAgICAgICAgICBYTUxFcnJvcnM6OkVycm9yVHlw
ZSB0eXBlID0gKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6Tm90V2VsbEZv
cm1lZEVycm9yKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxFcnJvcnM6
OmZhdGFsIDogWE1MRXJyb3JzOjp3YXJuaW5nOwotICAgICAgICAgICAgICAgIGhhbmRsZUVycm9y
KHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIFdURjo6dG9PbmVCYXNl
ZFRleHRQb3NpdGlvbih0ZXh0UG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgIGhhbmRsZUVy
cm9yKHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIHRleHRQb3NpdGlv
bigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC01
MjEsNyArNTIxLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQo
KQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChu
ZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3Jp
cHRTdGFydFBvc2l0aW9uID0gV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0aW9uKHRleHRQb3NpdGlv
bigpKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9uKCk7CiAK
ICAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkMTk2NmM3YTg2OGE3ZmMzODk2YzlkYzI0MWVj
ZWQyZWRlMWUzZTc3Li40M2QwMWNkYmI3NTk1MDQ1NDZlOTQxYzkxMWE5YjI2MzM4Njg1NzY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTA5LTE2ICBQ
ZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBUZXh0UG9zaXRp
b24gcmVmYWN0b3Jpbmc6IE1lcmdlIFplcm9CYXNlZE51bWJlciBhbmQgT25lQmFzZWROdW1iZXIg
Y2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjM1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4
ZWN1dGVTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmV4ZWN1
dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSk6CisKIDIwMTEtMDktMTUgIEVyaWMgU2VpZGVsICA8ZXJp
Y0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEVfU1ZHX0FOSU1BVElPTiBhcyBh
bGwgbWFqb3IgcG9ydHMgaGF2ZSBpdCBvbiBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCA2NWY1NmYxMzhiZjMzZjE2MGNmNjg0NDVh
NWU1MDg0NDRjZjE2ZDc1Li43YjhhODA2NmY3ZWEzNTE0YWI2MzYwMTI2YjhlZDljMTU1N2MzNmEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc1
MCw3ICs3NTAsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6YmluZFRvV2luZG93T2JqZWN0KGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgTlBPYmplY3QqIG9iamVjdCkKIAogdm9pZCBXZWJGcmFtZUltcGw6
OmV4ZWN1dGVTY3JpcHQoY29uc3QgV2ViU2NyaXB0U291cmNlJiBzb3VyY2UpCiB7Ci0gICAgVGV4
dFBvc2l0aW9uMSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQo
c291cmNlLnN0YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OmJhc2UoKSk7CisgICAgVGV4
dFBvc2l0aW9uIHBvc2l0aW9uKEJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0
YXJ0TGluZSksIEJhc2VkTnVtYmVyOjpiYXNlKCkpOwogICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5l
eGVjdXRlU2NyaXB0KAogICAgICAgICBTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3Vy
Y2UudXJsLCBwb3NpdGlvbikpOwogfQpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgV2ViRnJhbWVJ
bXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKAogICAgIFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiBzb3VyY2VzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNvdXJj
ZXM7ICsraSkgewotICAgICAgICBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKFdURjo6T25lQmFzZWRO
dW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2VzSW5baV0uc3RhcnRMaW5lKSwgV1RGOjpPbmVC
YXNlZE51bWJlcjo6YmFzZSgpKTsKKyAgICAgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKEJhc2Vk
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlc0luW2ldLnN0YXJ0TGluZSksIEJhc2VkTnVt
YmVyOjpiYXNlKCkpOwogICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3JpcHRTb3VyY2VDb2RlKAog
ICAgICAgICAgICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9u
KSk7CiAgICAgfQpAQCAtODMyLDcgKzgzMiw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJG
cmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZShjb25zdCBXZWJTY3JpcHRTCiAg
ICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9
ODYzOTcKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmluaXRl
bHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogCi0gICAgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbihX
VEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIFdU
Rjo6T25lQmFzZWROdW1iZXI6OmJhc2UoKSk7CisgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKEJh
c2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIEJhc2VkTnVtYmVy
OjpiYXNlKCkpOwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChT
Y3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpLnY4VmFs
dWUoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107875</attachid>
            <date>2011-09-19 09:47:36 -0700</date>
            <delta_ts>2011-09-19 10:51:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63541-20110919204733.patch</filename>
            <type>text/plain</type>
            <size>81014</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU0MTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGRi
MzY5MDM3ZTUyOTMzODUxODU0ZjQ2ZjcxN2QwZGExMWI4Y2U3MzUuLjViNjVkOWMyZTEzMjdjZmQ1
Yjc4N2U1YjVhYjdjM2E2NjNjNWE0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2IEBACisyMDExLTA5LTE5ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNv
bT4KKworICAgICAgICBUZXh0UG9zaXRpb24gcmVmYWN0b3Jpbmc6IE1lcmdlIFplcm9CYXNlZE51
bWJlciBhbmQgT25lQmFzZWROdW1iZXIgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAg
ICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgICogd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmg6CisgICAgICAgIChXVEY6Ok9yZGluYWxOdW1iZXI6OmZyb21aZXJv
QmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQp
OgorICAgICAgICAoV1RGOjpPcmRpbmFsTnVtYmVyOjpPcmRpbmFsTnVtYmVyKToKKyAgICAgICAg
KFdURjo6T3JkaW5hbE51bWJlcjo6emVyb0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6T3JkaW5h
bE51bWJlcjo6b25lQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPcmRpbmFsTnVtYmVyOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdURjo6T3JkaW5hbE51bWJlcjo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChXVEY6Ok9yZGluYWxOdW1iZXI6OmZpcnN0KToKKyAgICAgICAgKFdURjo6T3JkaW5hbE51
bWJlcjo6YmVmb3JlRmlyc3QpOgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OlRleHRQb3Np
dGlvbik6CisgICAgICAgIChXVEY6OlRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKToKKyAg
ICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24pOgorCiAyMDExLTA5
LTE5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBGaXggZGlzdGNoZWNrIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZVByb3ZpZGVyLmgKaW5kZXggOThiYjZiMTM5ZDE2NmM0NTQ1NzExMWE0OTBlNDI3
NzcyOGUyOWRhYy4uM2I5MmI5MDMxNmQ2NzVhOTIwNTM3MjZiNWExYTM0OWU5MWRhN2U0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaApAQCAtNTks
NyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBpbnQgbGVuZ3RoKCkg
Y29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJsKCkgeyByZXR1
cm4gbV91cmw7IH0KLSAgICAgICAgdmlydHVhbCBUZXh0UG9zaXRpb24xIHN0YXJ0UG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBUZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKTsgfQorICAg
ICAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
VGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKTsgfQogICAgICAgICBpbnRwdHJfdCBhc0lE
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcyk7IH0KIAogICAgICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRlZDsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oCmluZGV4IDJiMDdmZjc1OGM1
YjIyNzE0MjVjYmQxNzY2ZDA2OGU2OWZjN2M0MGYuLjFmMGU4ZTU4OWI3YzZjOTk2NzNmYTY4YjI2
N2VmNGZlZjdiZGE3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4
dC9UZXh0UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4
dFBvc2l0aW9uLmgKQEAgLTI5LDEyNCArMjksNTcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLS8q
Ci0gKiBUZXh0IFBvc2l0aW9uCi0gKgotICogVGV4dFBvc2l0aW9uIHN0cnVjdHVyZSBzcGVjaWZp
ZXMgY29vcmRpbmF0ZXMgd2l0aGluIGFuIHRleHQgcmVzb3VyY2UuIEl0IGlzIHVzZWQgbW9zdGx5
Ci0gKiBmb3Igc2F2aW5nIHNjcmlwdCBzb3VyY2UgcG9zaXRpb24uCi0gKgotICogTGF0ZXIgVGV4
dFBvc2l0aW9uMCBhbmQgVGV4dFBvc2l0aW9uMSBhbmQgYm90aCBudW1iZXIgdHlwZXMgY2FuIGJl
IG1lcmdlZCB0b2dldGhlciBxdWl0ZSBlYXNpbHkuCi0gKgotICogMC1iYXNlZCBhbmQgMS1iYXNl
ZAotICoKLSAqIExpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGNvdWxkIGJlIGludGVycHJldGVkIGFz
IHplcm8tYmFzZWQgb3IgMS1iYXNlZC4gU2luY2UKLSAqIGJvdGggcHJhY3RpY2VzIGNvZXhpc3Qg
aW4gV2ViS2l0IHNvdXJjZSBiYXNlLCAnaW50JyB0eXBlIHNob3VsZCBiZSByZXBsYWNlZCB3aXRo
Ci0gKiBhIGRlZGljYXRlZCB3cmFwcGVyIHR5cGVzLCBzbyB0aGF0IGNvbXBpbGVyIGhlbHBlZCB1
cyB3aXRoIHRoaXMgYW1iaWd1aXR5LgotICoKLSAqIEhlcmUgd2UgaW50cm9kdWNlIDIgdHlwZXMg
b2YgbnVtYmVyczogWmVyb0Jhc2VkTnVtYmVyIGFuZCBPbmVCYXNlZE51bWJlciBhbmQKLSAqIDIg
Y29ycmVzcG9uZGluZyB0eXBlcyBvZiBUZXh0UG9zaXRpb24gc3RydWN0dXJlLiBXaGlsZSBvbmx5
IG9uZSB0eXBlIG91Z2h0IHRvIGJlIGVub3VnaCwKLSAqIHRoaXMgaXMgZG9uZSB0byBrZWVwIHRy
YW5zaXRpb24gdG8gdGhlIG5ldyB0eXBlcyBhcyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZToKLSAq
IGUuZy4gaW4gYXJlYXMgd2hlcmUgMC1iYXNlZCBpbnRlZ2VycyBhcmUgdXNlZCwgVGV4dFBvc2l0
aW9uMCBzaG91bGQgYmUgaW50cm9kdWNlZC4gVGhpcwotICogd2F5IGFsbCBjaGFuZ2VzIHdpbGwg
cmVtYWluIHRyYWNrYWJsZS4KLSAqCi0gKiBMYXRlciBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUg
bWVyZ2VkIGluIG9uZSB0eXBlIHF1aXRlIGVhc2lseS4KLSAqCi0gKiBGb3IgdHlwZSBzYWZldHkg
YW5kIGZvciB0aGUgZnV0dXJlIHR5cGUgbWVyZ2UgaXQgaXMgaW1wb3J0YW50IHRoYXQgYWxsIG9w
ZXJhdGlvbnMgaW4gQVBJCi0gKiB0aGF0IGFjY2VwdCBvciByZXR1cm4gaW50ZWdlciBoYXZlIGEg
bmFtZSBleHBsaWNpdGx5IGRlZmluaW5nIGJhc2Ugb2YgaW50ZWdlci4gRm9yIHRoaXMgcmVhc29u
Ci0gKiBpbnQtcmVjZWl2aW5nIGNvbnN0cnVjdG9ycyBhcmUgaGlkZGVuIGZyb20gQVBJLgotICov
CisvLyBBbiBhYnN0cmFjdCBudW1iZXIgb2YgZWxlbWVudCBpbiBhIHNlcXVlbmNlLiBUaGUgc2Vx
dWVuY2UgaGFzIGEgZmlyc3QgZWxlbWVudC4KKy8vIFRoaXMgdHlwZSBzaG91bGQgYmUgdXNlZCBp
bnN0ZWFkIG9mIGludGVnZXIgYmVjYXVzZSAyIGNvbnRyYWRpY3RpbmcgdHJhZGl0aW9ucyBjYW4K
Ky8vIGNhbGwgYSBmaXJzdCBlbGVtZW50ICcwJyBvciAnMScgd2hpY2ggbWFrZXMgaW50ZWdlciB0
eXBlIGFtYmlndW91cy4KK2NsYXNzIE9yZGluYWxOdW1iZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBPcmRpbmFsTnVtYmVyIGZyb21aZXJvQmFzZWRJbnQoaW50IHplcm9CYXNlZEludCkgeyByZXR1
cm4gT3JkaW5hbE51bWJlcih6ZXJvQmFzZWRJbnQpOyB9CisgICAgc3RhdGljIE9yZGluYWxOdW1i
ZXIgZnJvbU9uZUJhc2VkSW50KGludCBvbmVCYXNlZEludCkgeyByZXR1cm4gT3JkaW5hbE51bWJl
cihvbmVCYXNlZEludCAtIDEpOyB9CisgICAgT3JkaW5hbE51bWJlcigpIHsgfQorCisgICAgaW50
IHplcm9CYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb0Jhc2VkVmFsdWU7IH0KKyAgICBp
bnQgb25lQmFzZWRJbnQoKSBjb25zdCB7IHJldHVybiBtX3plcm9CYXNlZFZhbHVlICsgMTsgfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgb3BlcmF0b3I9PShPcmRpbmFsTnVtYmVy
IG90aGVyKSB7IHJldHVybiBtX3plcm9CYXNlZFZhbHVlID09IG90aGVyLm1femVyb0Jhc2VkVmFs
dWU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oT3JkaW5hbE51bWJlciBvdGhlcikgeyByZXR1cm4g
ISgoKnRoaXMpID09IG90aGVyKTsgfQorCisgICAgc3RhdGljIE9yZGluYWxOdW1iZXIgZmlyc3Qo
KSB7IHJldHVybiBPcmRpbmFsTnVtYmVyKDApOyB9CisgICAgc3RhdGljIE9yZGluYWxOdW1iZXIg
YmVmb3JlRmlyc3QoKSB7IHJldHVybiBPcmRpbmFsTnVtYmVyKC0xKTsgfQorCitwcml2YXRlOgor
ICAgIE9yZGluYWxOdW1iZXIoaW50IHplcm9CYXNlZEludCkgOiBtX3plcm9CYXNlZFZhbHVlKHpl
cm9CYXNlZEludCkgeyB9CisgICAgaW50IG1femVyb0Jhc2VkVmFsdWU7Cit9OworCisKKy8vIFRl
eHRQb3NpdGlvbiBzdHJ1Y3R1cmUgc3BlY2lmaWVzIGNvb3JkaW5hdGVzIHdpdGhpbiBhbiB0ZXh0
IHJlc291cmNlLiBJdCBpcyB1c2VkIG1vc3RseQorLy8gZm9yIHNhdmluZyBzY3JpcHQgc291cmNl
IHBvc2l0aW9uLgogY2xhc3MgVGV4dFBvc2l0aW9uIHsKIHB1YmxpYzoKLSAgICBUZXh0UG9zaXRp
b24oVCBsaW5lLCBUIGNvbHVtbikKKyAgICBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlciBsaW5l
LCBPcmRpbmFsTnVtYmVyIGNvbHVtbikKICAgICAgICAgOiBtX2xpbmUobGluZSkKICAgICAgICAg
LCBtX2NvbHVtbihjb2x1bW4pCiAgICAgewogICAgIH0KLSAgICBUZXh0UG9zaXRpb24oKSB7fQor
ICAgIFRleHRQb3NpdGlvbigpIHsgfQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0UG9z
aXRpb24mIG90aGVyKSB7IHJldHVybiBtX2xpbmUgPT0gb3RoZXIubV9saW5lICYmIG1fY29sdW1u
ID09IG90aGVyLm1fY29sdW1uOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRQb3Np
dGlvbiYgb3RoZXIpIHsgcmV0dXJuICEoKCp0aGlzKSA9PSBvdGhlcik7IH0KIAogICAgIC8vIEEg
J21pbmltdW0nIHZhbHVlIG9mIHBvc2l0aW9uLCB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KLSAg
ICBzdGF0aWMgVGV4dFBvc2l0aW9uPFQ+IG1pbmltdW1Qb3NpdGlvbigpIHsgcmV0dXJuIFRleHRQ
b3NpdGlvbjxUPihUOjpiYXNlKCksIFQ6OmJhc2UoKSk7IH0KKyAgICBzdGF0aWMgVGV4dFBvc2l0
aW9uIG1pbmltdW1Qb3NpdGlvbigpIHsgcmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVy
OjpmaXJzdCgpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsgfQogCiAgICAgLy8gQSB2YWx1ZSB3
aXRoIGxpbmUgdmFsdWUgbGVzcyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxl
IHBvc2l0aW9uLgotICAgIHN0YXRpYyBUZXh0UG9zaXRpb248VD4gYmVsb3dSYW5nZVBvc2l0aW9u
KCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPFQ+KFQ6OmJlbG93QmFzZSgpLCBUOjpiZWxvd0Jhc2Uo
KSk7IH0KLQotICAgIFQgbV9saW5lOwotICAgIFQgbV9jb2x1bW47Ci19OwotCi1jbGFzcyBPbmVC
YXNlZE51bWJlcjsKLQotLy8gQW4gaW50IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3Ug
dGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAwLWJhc2VkCi1jbGFzcyBaZXJvQmFzZWROdW1iZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBaZXJvQmFzZWROdW1iZXIgZnJvbVplcm9CYXNlZEludChp
bnQgemVyb0Jhc2VkSW50KSB7IHJldHVybiBaZXJvQmFzZWROdW1iZXIoemVyb0Jhc2VkSW50KTsg
fQotCi0gICAgWmVyb0Jhc2VkTnVtYmVyKCkge30KLQotICAgIGludCB6ZXJvQmFzZWRJbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgaW50IGNvbnZlcnRBc09uZUJhc2VkSW50KCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZSArIDE7IH0KLSAgICBPbmVCYXNlZE51bWJlciBjb252ZXJ0
VG9PbmVCYXNlZCgpIGNvbnN0OworICAgIHN0YXRpYyBUZXh0UG9zaXRpb24gYmVsb3dSYW5nZVBv
c2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0
KCksIE9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCkpOyB9CiAKLSAgICBib29sIG9wZXJhdG9y
PT0oWmVyb0Jhc2VkTnVtYmVyIG90aGVyKSB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFs
dWU7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oWmVyb0Jhc2VkTnVtYmVyIG90aGVyKSB7IHJldHVy
biAhKCgqdGhpcykgPT0gb3RoZXIpOyB9Ci0KLSAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGJh
c2UoKSB7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIFplcm9CYXNlZE51bWJlciBiZWxvd0Jhc2Uo
KSB7IHJldHVybiAtMTsgfQotCi1wcml2YXRlOgotICAgIFplcm9CYXNlZE51bWJlcihpbnQgdmFs
dWUpIDogbV92YWx1ZSh2YWx1ZSkge30KLSAgICBpbnQgbV92YWx1ZTsKKyAgICBPcmRpbmFsTnVt
YmVyIG1fbGluZTsKKyAgICBPcmRpbmFsTnVtYmVyIG1fY29sdW1uOwogfTsKIAotLy8gQW4gaW50
IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBi
ZSAxLWJhc2VkCi1jbGFzcyBPbmVCYXNlZE51bWJlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIE9u
ZUJhc2VkTnVtYmVyIGZyb21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9u
ZUJhc2VkTnVtYmVyKG9uZUJhc2VkSW50KTsgfQotICAgIE9uZUJhc2VkTnVtYmVyKCkge30KLQot
ICAgIGludCBvbmVCYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICBpbnQg
Y29udmVydEFzWmVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KLSAg
ICBaZXJvQmFzZWROdW1iZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVy
b0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj09KE9uZUJhc2VkTnVtYmVyIG90aGVyKSB7IHJldHVybiBtX3ZhbHVlID09IG90
aGVyLm1fdmFsdWU7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oT25lQmFzZWROdW1iZXIgb3RoZXIp
IHsgcmV0dXJuICEoKCp0aGlzKSA9PSBvdGhlcik7IH0KLQotICAgIHN0YXRpYyBPbmVCYXNlZE51
bWJlciBiYXNlKCkgeyByZXR1cm4gMTsgfQotICAgIHN0YXRpYyBPbmVCYXNlZE51bWJlciBiZWxv
d0Jhc2UoKSB7IHJldHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgT25lQmFzZWROdW1iZXIoaW50
IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHt9Ci0gICAgaW50IG1fdmFsdWU7Ci19OwotCi10eXBl
ZGVmIFRleHRQb3NpdGlvbjxaZXJvQmFzZWROdW1iZXI+IFRleHRQb3NpdGlvbjA7Ci10eXBlZGVm
IFRleHRQb3NpdGlvbjxPbmVCYXNlZE51bWJlcj4gVGV4dFBvc2l0aW9uMTsKLQotaW5saW5lIFRl
eHRQb3NpdGlvbjAgdG9aZXJvQmFzZWRUZXh0UG9zaXRpb24oY29uc3QgVGV4dFBvc2l0aW9uMSYg
cG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjAocG9zaXRpb24ubV9saW5lLmNv
bnZlcnRUb1plcm9CYXNlZCgpLCBwb3NpdGlvbi5tX2NvbHVtbi5jb252ZXJ0VG9aZXJvQmFzZWQo
KSk7Ci19Ci0KLWlubGluZSBUZXh0UG9zaXRpb24xIHRvT25lQmFzZWRUZXh0UG9zaXRpb24oY29u
c3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjEo
cG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1uLmNv
bnZlcnRUb09uZUJhc2VkKCkpOwotfQotCi1pbmxpbmUgT25lQmFzZWROdW1iZXIgWmVyb0Jhc2Vk
TnVtYmVyOjpjb252ZXJ0VG9PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE9uZUJhc2Vk
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV92YWx1ZSArIDEpOwotfQotCiB9CiAKLXVzaW5nIFdU
Rjo6VGV4dFBvc2l0aW9uMDsKLXVzaW5nIFdURjo6VGV4dFBvc2l0aW9uMTsKK3VzaW5nIFdURjo6
T3JkaW5hbE51bWJlcjsKIAotdXNpbmcgV1RGOjpaZXJvQmFzZWROdW1iZXI7Ci11c2luZyBXVEY6
Ok9uZUJhc2VkTnVtYmVyOwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb247CiAKICNlbmRpZiAvLyBU
ZXh0UG9zaXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDlmZmEwMzZlNGM4ZDUzY2I0OTM4ODExZGY3MGVk
OTU5NGI0YmM2ZmIuLjQ5MzhkMDViYzEyYTg4YzE5YmZhMDFmNzY1N2MxYWIwMWFiN2UxZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMzEgQEAKKzIwMTEtMDktMTkgIFBldGVyIFJ5YmluICA8cGV0
ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFRleHRQb3NpdGlvbiByZWZhY3RvcmluZzog
TWVyZ2UgWmVyb0Jhc2VkTnVtYmVyIGFuZCBPbmVCYXNlZE51bWJlciBjbGFzc2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzU0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQorCisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1l
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAg
IChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6cG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SmF2
YVNjcmlwdENhbGxGcmFtZTo6dXBkYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2ZW50
SGFuZGxlckxpbmVOdW1iZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBh
cnNlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjcmVhdGVD
YWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dFNvdXJjZUNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlw
dFNvdXJjZUNvZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ1NvdXJjZVByb3ZpZGVyOjpzdGFydFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ1NvdXJjZVByb3ZpZGVyOjpTdHJpbmdTb3VyY2VQcm92aWRl
cik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlclBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRM
aXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjpTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OnN0YXJ0UG9zaXRpb24pOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhM
YXp5RXZlbnRMaXN0ZW5lcjo6VjhMYXp5RXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZl
bnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6cnVu
U2NyaXB0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpydW5TY3JpcHQpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRvbS9QZW5kaW5n
U2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVt
ZW50QW5kQ2xlYXIpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdTY3JpcHQ6OnN0YXJ0aW5nUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGVu
ZGluZ1NjcmlwdDo6c2V0U3RhcnRpbmdQb3NpdGlvbik6CisgICAgICAgICogZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlw
dCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlckxpbmVOdW1iZXIpOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MSW5wdXRT
dHJlYW0uaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JSZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVk
U3RyaW5nOjpjdXJyZW50TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6
OmN1cnJlbnRDb2x1bW4pOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpzZXRD
dXJyZW50UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5n
Lmg6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZXJMaW5lTnVtYmVyKToKKyAgICAgICAgKiB4bWwvWE1MRXJyb3JzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEVycm9yczo6WE1MRXJyb3JzKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEVycm9yczo6aGFuZGxlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRXJyb3Jz
OjphcHBlbmRFcnJvck1lc3NhZ2UpOgorICAgICAgICAqIHhtbC9YTUxFcnJvcnMuaDoKKyAgICAg
ICAgKiB4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplckJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cFRva2VuaXplckJhc2U6OmxpbmVOdW1iZXIpOgorICAgICAgICAqIHhtbC9wYXJzZXIv
TmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV3WE1MRG9jdW1l
bnRQYXJzZXI6OnByb2Nlc3NTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6TmV3WE1MRG9jdW1l
bnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVu
dFBhcnNlcjo6bGluZU51bWJlcik6CisgICAgICAgICogeG1sL3BhcnNlci9OZXdYTUxEb2N1bWVu
dFBhcnNlci5oOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IpOgorICAgICAg
ICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5n
Q2FsbGJhY2tzOjphcHBlbmRFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERv
Y3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6ZG9Xcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJz
ZXI6OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6Cisg
ICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQ
YXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OmNvbHVtbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQp
OgorCiAyMDExLTA5LTE5ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBkaWRNYXJrRE9NQ29udGVudEV2ZW50KCkgc2hvdWxk
IHNlbmQgZXZlbnQgb2YgTWFya0RPTUNvbnRlbnQgdHlwZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKaW5kZXggNWM0Yjk1ZDUyOTA0
M2I1MWEyN2Y5YmJhNDM5MmUzMjVmNzRmYTEwOC4uMjliNzM5OTg3ZWZiN2IxODFkMzAyYzFiYzU4
MmRhZGYzNjhjOWQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2
YVNjcmlwdENhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2
YVNjcmlwdENhbGxGcmFtZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotSmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2
YVNjcmlwdENhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJh
bWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgdGV4dFBvc2l0aW9uKQorSmF2YVNjcmlwdENhbGxG
cmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRw
dHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiB0ZXh0UG9zaXRpb24pCiAgICAgOiBt
X2RlYnVnZ2VyQ2FsbEZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICwgbV9jYWxsZXIoY2Fs
bGVyKQogICAgICwgbV9zb3VyY2VJRChzb3VyY2VJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaAppbmRleCBmM2ExMTRiOTBiZWFhMGEzMzRh
ZjVjMDMzN2Y1YWRlZGUzYTMwOTUwLi5hNTgxYzRmYzdiMjdkMmZhYzc5MDZiOGE5ZmIzMDFjNjNm
ZmIwZGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0
Q2FsbEZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENh
bGxGcmFtZS5oCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SmF2YVNjcmlwdENhbGxGcmFtZSA6IHB1YmxpYyBSZWZDb3VudGVkPEphdmFTY3JpcHRDYWxsRnJh
bWU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1l
PiBjcmVhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUs
IFBhc3NSZWZQdHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgdGV4dFBvc2l0aW9uKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNyZWF0ZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZy
YW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBj
YWxsZXIsIGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHRleHRQb3NpdGlv
bikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2YVNjcmlwdENhbGxGcmFt
ZShkZWJ1Z2dlckNhbGxGcmFtZSwgY2FsbGVyLCBzb3VyY2VJRCwgdGV4dFBvc2l0aW9uKSk7CiAg
ICAgfQpAQCAtNTUsMTEgKzU1LDExIEBAIHB1YmxpYzoKICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1l
KiBjYWxsZXIoKTsKIAogICAgIGludHB0cl90IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VJRDsgfQotICAgIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0UG9zaXRpb247IH0KKyAgICBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UG9zaXRpb247IH0KICAgICBpbnQgbGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dFBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsgfQogICAgIGlu
dCBjb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3RleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFz
ZWRJbnQoKTsgfQogCi0gICAgdm9pZCB1cGRhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFt
ZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRp
b24wJiB0ZXh0UG9zaXRpb24pCisgICAgdm9pZCB1cGRhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNh
bGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0
UG9zaXRpb24mIHRleHRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIG1fZGVidWdnZXJDYWxsRnJh
bWUgPSBkZWJ1Z2dlckNhbGxGcmFtZTsKICAgICAgICAgbV90ZXh0UG9zaXRpb24gPSB0ZXh0UG9z
aXRpb247CkBAIC03NiwxMiArNzYsMTIgQEAgcHVibGljOgogICAgIEpTQzo6SlNWYWx1ZSBldmFs
dWF0ZShjb25zdCBKU0M6OlVTdHJpbmcmIHNjcmlwdCwgSlNDOjpKU1ZhbHVlJiBleGNlcHRpb24p
IGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpT
Qzo6RGVidWdnZXJDYWxsRnJhbWUmLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNh
bGxlciwgaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbjAmKTsKKyAgICBKYXZh
U2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBQYXNzUmVmUHRy
PEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlciwgaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRl
eHRQb3NpdGlvbiYpOwogCiAgICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSBtX2RlYnVnZ2VyQ2Fs
bEZyYW1lOwogICAgIFJlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBtX2NhbGxlcjsKICAgICBp
bnRwdHJfdCBtX3NvdXJjZUlEOwotICAgIFRleHRQb3NpdGlvbjAgbV90ZXh0UG9zaXRpb247Cisg
ICAgVGV4dFBvc2l0aW9uIG1fdGV4dFBvc2l0aW9uOwogICAgIGJvb2wgbV9pc1ZhbGlkOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApp
bmRleCBmMGQ1ZWJhODc3OThiMmY0OTIyNDdkNzk4NmQyZjViMzllZGIwZjY3Li44YjNmMDViMGRk
MDg4MWEyZDkzMjVlOGM4ZDAyNGJkYjVlODI3NzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIGludCBT
Y3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkgY29uc3QKICAgICAvLyBK
U0MgZXhwZWN0cyAxLWJhc2VkIGxpbmUgbnVtYmVycywgc28gd2UgbXVzdCBhZGQgb25lIGhlcmUg
dG8gZ2V0IGl0IHJpZ2h0LgogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7CiAgICAgaWYg
KHBhcnNlcikKLSAgICAgICAgcmV0dXJuIHBhcnNlci0+bGluZU51bWJlcigpLmNvbnZlcnRBc09u
ZUJhc2VkSW50KCk7CisgICAgICAgIHJldHVybiBwYXJzZXItPmxpbmVOdW1iZXIoKS5vbmVCYXNl
ZEludCgpOwogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggN2Q0OGIwMDhmYTNiZDlkOWFhNjQwNGQy
Y2EwM2Q3M2FjY2ZiNjRkMi4uN2MyZDhmYzdmNmE2YTdjNGEwMjBkODQxNjM0YWY5MDdlM2E5NjBl
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVy
LmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCiAgICAgICAgIGl0LT5zZWNvbmQu
cmVtb3ZlKGxpbmVOdW1iZXIgKyAxKTsKIH0KIAotYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFz
QnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRp
b24pIGNvbnN0Citib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90
IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlm
ICghbV9icmVha3BvaW50c0FjdGl2YXRlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEw
LDcgKzExMCw3IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRy
X3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvCiAgICAgU291cmNlSWRUb0JyZWFr
cG9pbnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZp
bmQoc291cmNlSUQpOwogICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCBsaW5lTnVtYmVyID0gcG9zaXRpb24u
bV9saW5lLmNvbnZlcnRBc09uZUJhc2VkSW50KCk7CisgICAgaW50IGxpbmVOdW1iZXIgPSBwb3Np
dGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKTsKICAgICBpZiAobGluZU51bWJlciA8PSAwKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0
b3IgYnJlYWtJdCA9IGl0LT5zZWNvbmQuZmluZChsaW5lTnVtYmVyKTsKQEAgLTIyNiw4ICsyMjYs
OCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0
IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIFNvdQogICAgIFNjcmlwdERlYnVnTGlzdGVuZXI6OlNj
cmlwdCBzY3JpcHQ7CiAgICAgc2NyaXB0LnVybCA9IHVzdHJpbmdUb1N0cmluZyhzb3VyY2VQcm92
aWRlci0+dXJsKCkpOwogICAgIHNjcmlwdC5zb3VyY2UgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpV
U3RyaW5nKHNvdXJjZVByb3ZpZGVyLT5kYXRhKCksIHNvdXJjZVByb3ZpZGVyLT5sZW5ndGgoKSkp
OwotICAgIHNjcmlwdC5zdGFydExpbmUgPSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigp
Lm1fbGluZS5jb252ZXJ0QXNaZXJvQmFzZWRJbnQoKTsKLSAgICBzY3JpcHQuc3RhcnRDb2x1bW4g
PSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigpLm1fY29sdW1uLmNvbnZlcnRBc1plcm9C
YXNlZEludCgpOworICAgIHNjcmlwdC5zdGFydExpbmUgPSBzb3VyY2VQcm92aWRlci0+c3RhcnRQ
b3NpdGlvbigpLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKKyAgICBzY3JpcHQuc3RhcnRDb2x1bW4g
PSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigpLm1fY29sdW1uLnplcm9CYXNlZEludCgp
OwogICAgIHNjcmlwdC5pc0NvbnRlbnRTY3JpcHQgPSBpc0NvbnRlbnRTY3JpcHQ7CiAKICAgICBp
bnQgc291cmNlTGVuZ3RoID0gc2NyaXB0LnNvdXJjZS5sZW5ndGgoKTsKQEAgLTMyOCw3ICszMjgs
NyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMo
SmF2YVNjcmlwdEV4ZWN1dGlvbkNhbGxiYWNrCiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNy
ZWF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRl
YnVnZ2VyQ2FsbEZyYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7Ci0g
ICAgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9u
ZUJhc2VkSW50KGxpbmVOdW1iZXIpLmNvbnZlcnRUb1plcm9CYXNlZCgpLCBXVEY6Olplcm9CYXNl
ZE51bWJlcjo6YmFzZSgpKTsKKyAgICBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKE9yZGluYWxO
dW1iZXI6OmZyb21PbmVCYXNlZEludChsaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmlyc3Qo
KSk7CiAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gSmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRl
KGRlYnVnZ2VyQ2FsbEZyYW1lLCBtX2N1cnJlbnRDYWxsRnJhbWUsIHNvdXJjZUlELCB0ZXh0UG9z
aXRpb24pOwogICAgIHBhdXNlSWZOZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKIH0KQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVy
Ojp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1l
JgogICAgIGlmICghbV9jdXJyZW50Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBU
ZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFz
ZWRJbnQobGluZU51bWJlcikuY29udmVydFRvWmVyb0Jhc2VkKCksIFdURjo6WmVyb0Jhc2VkTnVt
YmVyOjpiYXNlKCkpOworICAgIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24oT3JkaW5hbE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsK
ICAgICBtX2N1cnJlbnRDYWxsRnJhbWUtPnVwZGF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgc291cmNl
SUQsIHRleHRQb3NpdGlvbik7CiAgICAgcGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZS5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggMWFiYmRlNWEwMDA4MmEzOWMyMzk0YTg0NDNkN2Q4
NTZhYzNiNmU3ZC4uYzNkZGQ2YzZiMjFkMmE5MTA2MzY2YTYwODZkNThjMTU1MWI2OTI2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC05
Niw3ICs5Niw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoSlNDOjpK
U0dsb2JhbE9iamVjdCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpK
U0dsb2JhbE9iamVjdCopID0gMDsKIAotICAgIGJvb2wgaGFzQnJlYWtwb2ludChpbnRwdHJfdCBz
b3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uMCYpIGNvbnN0OworICAgIGJvb2wgaGFzQnJlYWtw
b2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJikgY29uc3Q7CiAKICAg
ICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhKYXZhU2NyaXB0RXhlY3V0aW9uQ2Fs
bGJhY2ssIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25U
b0xpc3RlbmVycyhjb25zdCBMaXN0ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZhU2NyaXB0RXhlY3V0
aW9uQ2FsbGJhY2sgY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0U291cmNlQ29kZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0U291cmNlQ29kZS5oCmluZGV4IDM3M2RiMzEzYzUyY2I3OTE0MmY5OTY1YjFjNDZlN2RkZTk5
NDVhMWQuLmZlNWFiN2IwNDc0ZGRkMDc2OGNjMjk2OTMxYzlkMDBmNWMyOGExZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKQEAgLTQyLDcgKzQy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlIHsKIHB1
YmxpYzoKLSAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBL
VVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IFRleHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24gPSBU
ZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSkKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNv
bnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IFRleHRQ
b3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKCkp
CiAgICAgICAgIDogbV9wcm92aWRlcihTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJj
ZSwgdXJsLmlzTnVsbCgpID8gU3RyaW5nKCkgOiB1cmwuc3RyaW5nKCksIHN0YXJ0UG9zaXRpb24p
KQogICAgICAgICAsIG1fY29kZShtX3Byb3ZpZGVyLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVC
YXNlZEludCgpKQogICAgICAgICAsIG1fdXJsKHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCmluZGV4IGUyM2ZlNWMzNTdiNDU3MTg2
NTQ4Y2EwYjc1MWU5OTgwOWNlYzM5OGMuLmJkZWI5ODYwZDYyYjBiMjQ2Njc4NWY4NzZhNDE2NGE3
MzI3NzM3N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1Nv
dXJjZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291
cmNlUHJvdmlkZXIuaApAQCAtMzcsMjYgKzM3LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIFN0cmluZ1NvdXJjZVByb3ZpZGVyIDogcHVibGljIFNjcmlwdFNvdXJjZVByb3Zp
ZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ1NvdXJj
ZVByb3ZpZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWlu
aW11bVBvc2l0aW9uKCkpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ1NvdXJjZVBy
b3ZpZGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1pbmltdW1Q
b3NpdGlvbigpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
cmluZ1NvdXJjZVByb3ZpZGVyKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSk7CiAgICAgICAg
IH0KIAotICAgICAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbjEgc3RhcnRQb3NpdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnRQb3NpdGlvbjsgfQorICAgICAgICB2aXJ0dWFsIFRleHRQb3NpdGlv
biBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CiAgICAg
ICAgIEpTQzo6VVN0cmluZyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0IHsgcmV0
dXJuIEpTQzo6VVN0cmluZyhtX3NvdXJjZS5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgZW5kIC0gc3Rh
cnQpOyB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2UuY2hhcmFjdGVycygpOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZS5sZW5ndGgoKTsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmdTb3Vy
Y2VQcm92aWRlcihjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFRleHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24pCisgICAgICAgIFN0cmluZ1NvdXJjZVByb3Zp
ZGVyKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVGV4dFBv
c2l0aW9uJiBzdGFydFBvc2l0aW9uKQogICAgICAgICAgICAgOiBTY3JpcHRTb3VyY2VQcm92aWRl
cihzdHJpbmdUb1VTdHJpbmcodXJsKSkKICAgICAgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKHN0
YXJ0UG9zaXRpb24pCiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgewog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRQb3NpdGlv
bjsKKyAgICAgICAgVGV4dFBvc2l0aW9uIG1fc3RhcnRQb3NpdGlvbjsKICAgICAgICAgU3RyaW5n
IG1fc291cmNlOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hl
ZHVsZWRBY3Rpb24uY3BwCmluZGV4IGRjMGZlNDQ4Nzk3YjFlY2JhZjY4MGE2OTkyNTBkMWQxOTkx
NDI1M2MuLjQ1Y2Y3YTA4OGRhMmZmNWVmMTNmYzM4Njc1YmI1ZTk4NGQ2MzE3OTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcApAQCAtNDksNyAr
NDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVk
QWN0aW9uKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBmdW5jLCBpbnQgYXJnYywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSkKICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9jb2RlKFN0cmluZygpLCBLVVJMKCksIFRl
eHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9jb2RlKFN0cmluZygp
LCBLVVJMKCksIFRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiAgICAgbV9m
dW5jdGlvbiA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA5
OTY5Mzg5ZTMzN2JmNjUxNGU2NDA0ODdjNDI3YmZjNDA3MTllMTMxLi40OWNlZmM1NDVhN2I5NmNk
MTg2NWY3NWM5YzIyYjE4ODQ3NDk4M2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMTk4LDEyICsxOTgsMTIgQEAgU2NyaXB0VmFs
dWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291
cmNlQ29kZSkKICAgICByZXR1cm4gU2NyaXB0VmFsdWUob2JqZWN0KTsKIH0KIAotVGV4dFBvc2l0
aW9uMCBTY3JpcHRDb250cm9sbGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0CitUZXh0
UG9zaXRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdAog
ewogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7CiAgICAgaWYgKHBhcnNlcikKICAgICAg
ICAgcmV0dXJuIHBhcnNlci0+dGV4dFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlv
bjA6Om1pbmltdW1Qb3NpdGlvbigpOworICAgIHJldHVybiBUZXh0UG9zaXRpb246Om1pbmltdW1Q
b3NpdGlvbigpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50
KEV2ZW50KiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaAppbmRleCAxOGRkYjI3MGQyZGY4NzhjYTIzNWU0OTEyNTAyNGFjMzgwNjYyYzE2Li4w
ZTMxNTBhZGEyZWZjZTUxYzc5MTcwMGM4ODkzOWVkY2RhYWUzOTk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNTUsNyArMTU1LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBmaW5pc2hlZFdpdGhFdmVudChFdmVudCopOwogCi0gICAgVGV4
dFBvc2l0aW9uMCBldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0OworICAgIFRleHRQb3NpdGlv
biBldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgcHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggMGQ3NThkOTQ2YzYxMmZjZGIwMDAyNTU3ZmZk
NDNjNmRhNTNlYmJkMy4uMzRiMDI4Y2JkNjY4ZTk5YzE0YmJhYWFhN2Y2YWEzMmVmZmNmZDY1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5l
ci5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBj
cmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogVmVyeSBzdHJhbmdlOiB3ZSBpbml0aWFsaXplIHpl
cm8tYmFzZWQgbnVtYmVyIHdpdGggJzEnLgotICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24oV1RG
OjpaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoMSksIFdURjo6WmVyb0Jhc2VkTnVt
YmVyOjpiYXNlKCkpOworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpm
cm9tWmVyb0Jhc2VkSW50KDEpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKICAgICBTdHJpbmcg
c291cmNlVVJMOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZy
YW1lKCkpIHsKQEAgLTc4LDcgKzc4LDcgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVy
PiBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAgICBp
ZiAoIXNjcmlwdENvbnRyb2xsZXItPmNhbkV4ZWN1dGVTY3JpcHRzKEFib3V0VG9FeGVjdXRlU2Ny
aXB0KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBUZXh0UG9zaXRpb24wIHBvc2l0aW9uID0g
c2NyaXB0Q29udHJvbGxlci0+ZXZlbnRIYW5kbGVyUG9zaXRpb24oKTsKKyAgICBUZXh0UG9zaXRp
b24gcG9zaXRpb24gPSBzY3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJQb3NpdGlvbigpOwog
ICAgIFN0cmluZyBzb3VyY2VVUkwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7
CiAgICAgcmV0dXJuIFY4TGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUo
KS5zdHJpbmcoKSwgZnJhbWUtPmRvY3VtZW50KCktPmlzU1ZHRG9jdW1lbnQoKSwgYXR0ci0+dmFs
dWUoKSwgc291cmNlVVJMLCBwb3NpdGlvbiwgV29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5Xb3Js
ZCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291
cmNlQ29kZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5o
CmluZGV4IGQ3ZDE1MTA5YzBmYjBhOWFhMTUzYWViOWYzZTAwM2ZjMGVmNmJkY2MuLjBjNjhhMTU2
MTkwODQ1YmUzMzAzYjQ5ZDQxNjQyNTI5ZTIzMTdjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBTY3Jp
cHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJM
KCksIGNvbnN0IFRleHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjpt
aW5pbXVtUG9zaXRpb24oKSkKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQ
b3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9z
b3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KDApCiAgICAgICAgICwgbV91
cmwodXJsKQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9zb3VyY2UoY3Mt
PnNjcmlwdCgpKQogICAgICAgICAsIG1fY2FjaGVkU2NyaXB0KGNzKQogICAgICAgICAsIG1fdXJs
KFBhcnNlZFVSTFN0cmluZywgY3MtPnVybCgpKQotICAgICAgICAsIG1fc3RhcnRQb3NpdGlvbihU
ZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSkKKyAgICAgICAgLCBtX3N0YXJ0UG9zaXRp
b24oVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKSkKICAgICB7CiAgICAgfQogCkBAIC03
MCwxMyArNzAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV91cmw7CiAgICAgfQogICAg
IGludCBzdGFydExpbmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb24ubV9saW5lLm9u
ZUJhc2VkSW50KCk7IH0KLSAgICBjb25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CisgICAgY29uc3QgVGV4dFBvc2l0aW9u
JiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CiAKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiAgICAgS1VSTCBtX3VybDsKLSAgICBUZXh0UG9z
aXRpb24xIG1fc3RhcnRQb3NpdGlvbjsKKyAgICBUZXh0UG9zaXRpb24gbV9zdGFydFBvc2l0aW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAppbmRleCAxNzIxOGMyN2ZkOWRjYTg1
NTU1Y2VjYmMxZjQwMzkzNDFjODExMzU1Li5lZWUyNDU3YjY3NzM2MTAzYzk0MmU0NTY4YjUxYWFj
OTY0NDIyMTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcApAQCAtNDIsNyArNDIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25z
dCBTdHJpbmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3Qg
V29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCitWOExhenlFdmVudExpc3RlbmVyOjpW
OExhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZH
RXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgY29uc3Qg
VGV4dFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENv
bnRleHQpCiAgICAgOiBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcih0cnVlLCB3b3JsZENvbnRleHQp
CiAgICAgLCBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCiAgICAgLCBtX2lzU1ZHRXZlbnQo
aXNTVkdFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6
eUV2ZW50TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuaAppbmRleCAwODQ2N2ZlNWY3YWI5NzAxNGQ5NDUzYWYyNmZhM2YxNjZjZWU2M2Ix
Li40ZDM2NDg4OGEwMWYwOGUxZDkxZjY3MDYyNjliYWU5NjM5Yzg4MWViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCkBAIC00Niw3ICs0
Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBBIFY4TGF6eUV2ZW50TGlzdGVuZXIg
aXMgYWx3YXlzIGEgSFRNTCBldmVudCBoYW5kbGVyLgogICAgIGNsYXNzIFY4TGF6eUV2ZW50TGlz
dGVuZXIgOiBwdWJsaWMgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29k
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9u
LCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCkKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFdvcmxk
Q29udGV4dEhhbmRsZSYgd29ybGRDb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFY4TGF6eUV2ZW50TGlzdGVuZXIoZnVuY3Rpb25OYW1lLCBpc1NWR0V2
ZW50LCBjb2RlLCBzb3VyY2VVUkwsIHBvc2l0aW9uLCB3b3JsZENvbnRleHQpKTsKICAgICAgICAg
fQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlTGlzdGVuZXJPYmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgVjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1
bmN0aW9uTmFtZSwgYm9vbCBpc1NWR0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0
cmluZyBzb3VyY2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uLCBjb25zdCBXb3Js
ZENvbnRleHRIYW5kbGUmIHdvcmxkQ29udGV4dCk7CisgICAgICAgIFY4TGF6eUV2ZW50TGlzdGVu
ZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3Ry
aW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24mLCBj
b25zdCBXb3JsZENvbnRleHRIYW5kbGUmKTsKIAogICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqKTsKIApAQCAtNzEsNyArNzEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9pc1NWR0V2ZW50OwogICAgICAg
ICBTdHJpbmcgbV9jb2RlOwogICAgICAgICBTdHJpbmcgbV9zb3VyY2VVUkw7Ci0gICAgICAgIFRl
eHRQb3NpdGlvbjAgbV9wb3NpdGlvbjsKKyAgICAgICAgVGV4dFBvc2l0aW9uIG1fcG9zaXRpb247
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAppbmRleCBhMzljZmFmNTdhZTRiZDdhNTExYWNmNGJiYzdhMDBkODI2NjU0
ZTVhLi5hYjFkZjRmMjg1NWEwZmQ5NTRjNWRlYTllNjMyNjUzYzEzNjk2M2UwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIFY4UHJveHk6
On5WOFByb3h5KCkKICAgICB3aW5kb3dTaGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CiB9CiAKLXY4
OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlv
bjAmIHNjcmlwdFN0YXJ0UG9zaXRpb24sIHY4OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQordjg6
OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6
OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9u
JiBzY3JpcHRTdGFydFBvc2l0aW9uLCB2ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKIHsKICAg
ICBjb25zdCB1aW50MTZfdCogZmlsZU5hbWVTdHJpbmcgPSBmcm9tV2ViQ29yZVN0cmluZyhmaWxl
TmFtZSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBuYW1lID0gdjg6OlN0cmluZzo6TmV3
KGZpbGVOYW1lU3RyaW5nLCBmaWxlTmFtZS5sZW5ndGgoKSk7CkBAIC0zNzQsNyArMzc0LDcgQEAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhQcm94eTo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNl
Q29kZSYgc291cmNlLCBOb2RlKiBub2QKIAogICAgICAgICAvLyBOT1RFOiBGb3IgY29tcGF0aWJp
bGl0eSB3aXRoIFdlYkNvcmUsIFNjcmlwdFNvdXJjZUNvZGUncyBsaW5lIHN0YXJ0cyBhdAogICAg
ICAgICAvLyAxLCB3aGVyZWFzIHY4IHN0YXJ0cyBhdCAwLgotICAgICAgICB2ODo6SGFuZGxlPHY4
OjpTY3JpcHQ+IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBXVEY6
OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNvdXJjZS5zdGFydFBvc2l0aW9uKCkpLCBzY3JpcHRE
YXRhLmdldCgpKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21w
aWxlU2NyaXB0KGNvZGUsIHNvdXJjZS51cmwoKSwgc291cmNlLnN0YXJ0UG9zaXRpb24oKSwgc2Ny
aXB0RGF0YS5nZXQoKSk7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBsYXRmb3Jt
U3VwcG9ydDo6dHJhY2VFdmVudEVuZCgidjguY29tcGlsZSIsIG5vZGUsICIiKTsKIApAQCAtNDA2
LDcgKzQwNiw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCh2ODo6
SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCwgYm9vbCBpc0luCiAgICAgICAgIC8vIEZJWE1FOiBJ
ZGVhbGx5LCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZS11c2UgdGhlIG9yaWdpbiBvZiB0aGUKICAg
ICAgICAgLy8gc2NyaXB0IHBhc3NlZCB0byB1cyBhcyB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiB1
c2luZyBhbiBlbXB0eSBzdHJpbmcKICAgICAgICAgLy8gYW5kIDAgYmFzZUxpbmUuCi0gICAgICAg
IHNjcmlwdCA9IGNvbXBpbGVTY3JpcHQoY29kZSwgIiIsIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Q
b3NpdGlvbigpKTsKKyAgICAgICAgc2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCAiIiwgVGV4
dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKGhhbmRsZU91
dE9mTWVtb3J5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKaW5kZXggNmU4NzZl
MmQ4NDZjZGExNzY5MTcxNjNjOTE4YzJkYzJiN2JhNDA1OC4uYjM0YzdhODdiNTc5ZTAzMjRiYWFj
NmM1NWE3YjNkZjM2MjU0ODNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApA
QCAtMjM4LDcgKzIzOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYp
OwogCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQo
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25z
dCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCB2ODo6U2NyaXB0RGF0YSogPSAw
KTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0
IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgdjg6OlNjcmlwdERhdGEqID0gMCk7
CiAKICAgICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBjb2RlIGlzIGRpZmZlcmVudCBmcm9tIHpl
cm8sIGEgRE9NIGV4Y2VwdGlvbiBpcwogICAgICAgICAvLyBzY2hlZHVsZSB0byBiZSB0aHJvd24u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcAppbmRleCAxZmMwYmQ3ZjE5YmI3NTkwYjE3OGQ5MzkwZTgzZjM5
MmFlNTVlOWRlLi5kMjg0MGJkMDg4ODIxMDc1OWRkYjRhYmVkYzJjMzcxNGU3Y2ZjMjJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAKQEAgLTE4Nyw3ICsxODcsNyBAQCBib29sIFdvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1TY3JpcHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBj
b25zdCBUZXh0UG9zaXRpb24wJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uU3RhdGUqIHN0YXRlKQorU2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uU3RhdGUqIHN0YXRlKQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoczsKIApAQCAt
MjM2LDcgKzIzNiw3IEBAIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRp
b25Qcm94eTo6cnVuU2NyaXB0KHY4OjpIYW5kbGU8djg6OlNjcmlwCiAgICAgLy8gQ29tcHV0ZSB0
aGUgc291cmNlIHN0cmluZyBhbmQgcHJldmVudCBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbi4K
ICAgICBpZiAobV9yZWN1cnNpb24gPj0ga01heFJlY3Vyc2lvbkRlcHRoKSB7CiAgICAgICAgIHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBjb2RlID0gdjhFeHRlcm5hbFN0cmluZygidGhyb3cgUmFuZ2VF
cnJvcignUmVjdXJzaW9uIHRvbyBkZWVwJykiKTsKLSAgICAgICAgc2NyaXB0ID0gVjhQcm94eTo6
Y29tcGlsZVNjcmlwdChjb2RlLCAiIiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkp
OworICAgICAgICBzY3JpcHQgPSBWOFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCBUZXh0
UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoVjhQcm94eTo6
aGFuZGxlT3V0T2ZNZW1vcnkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKaW5kZXggMDUyZmIzNjQ2NTYwYTY4
Y2Q3ZmU4ZGFjZDA2NDVmYTJhMDUyYzVjYy4uN2Q0ZDcwY2U2YWJhNWQ5Njc2MzlkZWI3NzEyMTg1
NmRlMDA1ZjYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYWNrRXZlbnQoRXZlbnQqKTsKIAogICAgICAgICAv
LyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9u
bWVudC4KLSAgICAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQs
IGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0
UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSopOworICAgICAgICBTY3JpcHRW
YWx1ZSBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uU3RhdGUqKTsKIAogICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9m
IHRoZSBjb250ZXh0LgogICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7
IHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cAppbmRleCA1ODc1ODJlNzE5NDAwMTRkNTA2NGRlYjY3M2E4MmQwMWY2NjRhZGRkLi43MjI2ODNm
MWVjZWM2NjAxOTEwMjc5ZDkwNzQwZjg4OGUwYzgwZTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtODEsNyAr
ODEsNyBAQCBTY3JpcHRWYWx1ZSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLAogICAgICAgICByZXR1cm4gU2NyaXB0VmFs
dWUoKTsKIAogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKLSAgICBTY3Jp
cHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBz
b3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNv
dXJjZUNvZGUuc3RhcnRQb3NpdGlvbigpKSwgJnN0YXRlKTsKKyAgICBTY3JpcHRWYWx1ZSByZXN1
bHQgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVy
bCgpLnN0cmluZygpLCBzb3VyY2VDb2RlLnN0YXJ0UG9zaXRpb24oKSwgJnN0YXRlKTsKICAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAg
ICAgICAqZXhjZXB0aW9uID0gc3RhdGUuZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdT
Y3JpcHQuY3BwCmluZGV4IDYxNWZhN2RiMWM2MDEyOTIzMDg2NmYyMDM4NTEzOGI0YTI0ODQwOTUu
LmM2MDJhMTEyNjYzZjM5ZTcyMzMyOTU5MDNlY2JhYmJiZGE2N2ZhOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUGVuZGluZ1NjcmlwdC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50
PiBQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxlbWVudEFuZENsZWFyKCkKIHsKICAgICBzZXRDYWNo
ZWRTY3JpcHQoMCk7CiAgICAgbV93YXRjaGluZ0ZvckxvYWQgPSBmYWxzZTsKLSAgICBtX3N0YXJ0
aW5nUG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKKyAgICBt
X3N0YXJ0aW5nUG9zaXRpb24gPSBUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpOwog
ICAgIHJldHVybiBtX2VsZW1lbnQucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdT
Y3JpcHQuaAppbmRleCBmY2JlMDZlZTc4ZWQ2YjlkNjRkYmJkMGQ1ZDdjMzkzZDlkNzc4MDNmLi4z
OTk2NDYyNWUwODJlYzRhMGY3OTUxNDZjODZhMjkwYzE4MTVlODE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
ZW5kaW5nU2NyaXB0LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgUGVuZGluZ1NjcmlwdCA6IHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgUGVuZGluZ1NjcmlwdCgp
CiAgICAgICAgIDogbV93YXRjaGluZ0ZvckxvYWQoZmFsc2UpCi0gICAgICAgICwgbV9zdGFydGlu
Z1Bvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICAgICAs
IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQog
ICAgIHsKICAgICB9CiAKQEAgLTgwLDggKzgwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQogCi0gICAgVGV4dFBvc2l0aW9uMSBzdGFydGluZ1Bvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydGluZ1Bvc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRTdGFydGluZ1Bv
c2l0aW9uKGNvbnN0IFRleHRQb3NpdGlvbjEmIHBvc2l0aW9uKSB7IG1fc3RhcnRpbmdQb3NpdGlv
biA9IHBvc2l0aW9uOyB9CisgICAgVGV4dFBvc2l0aW9uIHN0YXJ0aW5nUG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0aW5nUG9zaXRpb247IH0KKyAgICB2b2lkIHNldFN0YXJ0aW5nUG9z
aXRpb24oY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlvbikgeyBtX3N0YXJ0aW5nUG9zaXRpb24g
PSBwb3NpdGlvbjsgfQogCiAgICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7IHJldHVy
biBtX3dhdGNoaW5nRm9yTG9hZDsgfQogICAgIHZvaWQgc2V0V2F0Y2hpbmdGb3JMb2FkKGJvb2wg
YikgeyBtX3dhdGNoaW5nRm9yTG9hZCA9IGI7IH0KQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBib29sIG1fd2F0Y2hpbmdGb3JMb2FkOwogICAgIFJlZlB0cjxFbGVtZW50
PiBtX2VsZW1lbnQ7Ci0gICAgVGV4dFBvc2l0aW9uMSBtX3N0YXJ0aW5nUG9zaXRpb247IC8vIE9u
bHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgorICAgIFRleHRQb3NpdGlvbiBtX3N0YXJ0
aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgogICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7IAogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCmluZGV4IDRiZWJlMzdmYTI0YjY5ZDNhOGNj
YzA4Y2M0ZDk3OGMzOWQ4OWJjYjYuLmY5ODNjYzFkYTIxZWQwMDY4OTA4NjkwMTYyMmE2NjJhNDg2
MDhmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTE2Miw3ICsxNjIs
NyBAQCBib29sIFNjcmlwdEVsZW1lbnQ6OmlzU2NyaXB0VHlwZVN1cHBvcnRlZChMZWdhY3lUeXBl
U3VwcG9ydCBzdXBwb3J0TGVnYWN5VHlwZXMpCiB9CiAKIC8vIGh0dHA6Ly9kZXYudzMub3JnL2h0
bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNwcmVwYXJlLWEtc2NyaXB0Ci1ib29sIFNjcmlwdEVsZW1l
bnQ6OnByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlv
biwgTGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKQorYm9vbCBTY3JpcHRFbGVt
ZW50OjpwcmVwYXJlU2NyaXB0KGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlv
biwgTGVnYWN5VHlwZVN1cHBvcnQgc3VwcG9ydExlZ2FjeVR5cGVzKQogewogICAgIGlmIChtX2Fs
cmVhZHlTdGFydGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuaAppbmRleCAyMTEwZjdmMWYzOWJiNGRkZTAyNmM3MjI3MmY2NGQyNDM1ZDE4MGEyLi43
ODcyNjAwMzVlOWQxZmU5YWJkMTc5OWUxN2YzZDIwNmRmYWM4Y2ViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRFbGVtZW50LmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KIAogICAgIGVudW0gTGVnYWN5VHlw
ZVN1cHBvcnQgeyBEaXNhbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUsIEFsbG93TGVnYWN5
VHlwZUluVHlwZUF0dHJpYnV0ZSB9OwotICAgIGJvb2wgcHJlcGFyZVNjcmlwdChjb25zdCBUZXh0
UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBv
c2l0aW9uKCksIExlZ2FjeVR5cGVTdXBwb3J0ID0gRGlzYWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0
cmlidXRlKTsKKyAgICBib29sIHByZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uJiBzY3Jp
cHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKSwgTGVnYWN5
VHlwZVN1cHBvcnQgPSBEaXNhbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOwogCiAgICAg
U3RyaW5nIHNjcmlwdENoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlckVuY29kaW5n
OyB9CiAgICAgU3RyaW5nIHNjcmlwdENvbnRlbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAppbmRleCBkYmUwNGY4MmU3YmRiNTdlZjI1
YjRmYmZlYzM4MTQ3MmI3ZmIwM2Y5Li5iMTQwY2YxNzYxOGExZDAyZTBlZWI3NzIwNTBmOWVmNTRl
ZDBlMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNl
ci5oCkBAIC00NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5n
Rm9yU2NyaXB0cygpIGNvbnN0ID0gMDsKIAogICAgIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGV4cG9z
ZSB0aGUgY3VycmVudCBsaW5lL2NvbHVtbiB0byB0aGUgc2NyaXB0aW5nIHN5c3RlbS4KLSAgICB2
aXJ0dWFsIFplcm9CYXNlZE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBP
cmRpbmFsTnVtYmVyIGxpbmVOdW1iZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUZXh0UG9z
aXRpb24gdGV4dFBvc2l0aW9uKCkgY29uc3QgPSAwOwogCiAgICAgdm9pZCBzZXRXYXNDcmVhdGVk
QnlTY3JpcHQoYm9vbCB3YXNDcmVhdGVkQnlTY3JpcHQpIHsgbV93YXNDcmVhdGVkQnlTY3JpcHQg
PSB3YXNDcmVhdGVkQnlTY3JpcHQ7IH0KICAgICBib29sIHdhc0NyZWF0ZWRCeVNjcmlwdCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2FzQ3JlYXRlZEJ5U2NyaXB0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Zp
ZXdwb3J0QXJndW1lbnRzLmNwcAppbmRleCAyNGU3M2M5NjgyNWY5NWNjMjJjYzhhYjg0MWE3Y2Yx
MmM3Yzk0MzMyLi5jYTcwODc5ODRiZmZlZThlZmUxMmMxYzQ3ZWYxNGViYmIyM2NlMmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKQEAgLTM2OSw3ICszNjksNyBA
QCBzdGF0aWMgaW50IHBhcnNlckxpbmVOdW1iZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIFNj
cmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0gZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1
bWVudFBhcnNlcigpOwogICAgIGlmICghcGFyc2VyKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gcGFyc2VyLT5saW5lTnVtYmVyKCkuY29udmVydEFzT25lQmFzZWRJbnQoKTsKKyAgICBy
ZXR1cm4gcGFyc2VyLT5saW5lTnVtYmVyKCkub25lQmFzZWRJbnQoKTsKIH0KIAogdm9pZCByZXBv
cnRWaWV3cG9ydFdhcm5pbmcoRG9jdW1lbnQqIGRvY3VtZW50LCBWaWV3cG9ydEVycm9yQ29kZSBl
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQxLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50MikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCmluZGV4IGI3YWZlZTY5ZWFkOGRmM2VlYjhhZDYwZjVhZGM0NTdiZGExMGUxMGEu
LmUyNGUxZTM5MGU2NWU5MTdlMzE0OWMwOTUyYTg5NWRlNjkyMWJhYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMTk5LDcg
KzE5OSw3IEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJl
ZUJ1aWxkZXIoKQogewogICAgIEFTU0VSVChtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKTsKIAot
ICAgIFRleHRQb3NpdGlvbjEgc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6OmJl
bG93UmFuZ2VQb3NpdGlvbigpOworICAgIFRleHRQb3NpdGlvbiBzY3JpcHRTdGFydFBvc2l0aW9u
ID0gVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKICAgICBSZWZQdHI8RWxlbWVu
dD4gc2NyaXB0RWxlbWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2Ny
aXB0U3RhcnRQb3NpdGlvbik7CiAgICAgLy8gV2Ugd2lsbCBub3QgaGF2ZSBhIHNjcmlwdFJ1bm5l
ciB3aGVuIHBhcnNpbmcgYSBEb2N1bWVudEZyYWdtZW50LgogICAgIGlmICghbV9zY3JpcHRSdW5u
ZXIpCkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tl
bml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCiAgICAgLy8gRklYTUU6IG1faW5wdXQuY3VycmVu
dCgpLmxlbmd0aCgpIGlzIG9ubHkgYWNjdXJhdGUgaWYgd2UKICAgICAvLyBlbmQgdXAgcGFyc2lu
ZyB0aGUgd2hvbGUgYnVmZmVyIGluIHRoaXMgcHVtcC4gIFdlIHNob3VsZCBwYXNzIGhvdwogICAg
IC8vIG11Y2ggd2UgcGFyc2VkIGFzIHBhcnQgb2YgZGlkV3JpdGVIVE1MIGluc3RlYWQgb2Ygd2ls
bFdyaXRlSFRNTC4KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MKGRvY3VtZW50KCksIG1faW5w
dXQuY3VycmVudCgpLmxlbmd0aCgpLCBtX3Rva2VuaXplci0+bGluZU51bWJlcigpKTsKKyAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsV3JpdGVIVE1MKGRvY3VtZW50KCksIG1faW5wdXQuY3VycmVudCgpLmxlbmd0
aCgpLCBtX3Rva2VuaXplci0+bGluZU51bWJlcigpLnplcm9CYXNlZEludCgpKTsKIAogICAgIHdo
aWxlIChjYW5UYWtlTmV4dFRva2VuKG1vZGUsIHNlc3Npb24pICYmICFzZXNzaW9uLm5lZWRzWWll
bGQpIHsKICAgICAgICAgaWYgKCFpc1BhcnNpbmdGcmFnbWVudCgpKQpAQCAtMjk4LDcgKzI5OCw3
IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9k
ZSBtb2RlKQogICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CiAgICAgfQogCi0gICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhUTUwoY29va2llLCBtX3Rva2VuaXpl
ci0+bGluZU51bWJlcigpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFdyaXRl
SFRNTChjb29raWUsIG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkuemVyb0Jhc2VkSW50KCkpOwog
fQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aGFzSW5zZXJ0aW9uUG9pbnQoKQpAQCAtNDQ2
LDE5ICs0NDYsMTkgQEAgU3RyaW5nIEhUTUxEb2N1bWVudFBhcnNlcjo6c291cmNlRm9yVG9rZW4o
Y29uc3QgSFRNTFRva2VuJiB0b2tlbikKICAgICByZXR1cm4gbV9zb3VyY2VUcmFja2VyLnNvdXJj
ZUZvclRva2VuKHRva2VuKTsKIH0KIAotWmVyb0Jhc2VkTnVtYmVyIEhUTUxEb2N1bWVudFBhcnNl
cjo6bGluZU51bWJlcigpIGNvbnN0CitPcmRpbmFsTnVtYmVyIEhUTUxEb2N1bWVudFBhcnNlcjo6
bGluZU51bWJlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFplcm9CYXNlZE51bWJlcjo6ZnJvbVpl
cm9CYXNlZEludChtX3Rva2VuaXplci0+bGluZU51bWJlcigpKTsKKyAgICByZXR1cm4gbV90b2tl
bml6ZXItPmxpbmVOdW1iZXIoKTsKIH0KIAotVGV4dFBvc2l0aW9uMCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnRleHRQb3NpdGlvbigpIGNvbnN0CitUZXh0UG9zaXRpb24gSFRNTERvY3VtZW50UGFyc2Vy
Ojp0ZXh0UG9zaXRpb24oKSBjb25zdAogewogICAgIGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgY3Vy
cmVudFN0cmluZyA9IG1faW5wdXQuY3VycmVudCgpOwotICAgIFplcm9CYXNlZE51bWJlciBsaW5l
ID0gY3VycmVudFN0cmluZy5jdXJyZW50TGluZSgpOwotICAgIFplcm9CYXNlZE51bWJlciBjb2x1
bW4gPSBjdXJyZW50U3RyaW5nLmN1cnJlbnRDb2x1bW4oKTsKLSAgICBBU1NFUlQobV90b2tlbml6
ZXItPmxpbmVOdW1iZXIoKSA9PSBsaW5lLnplcm9CYXNlZEludCgpKTsKKyAgICBPcmRpbmFsTnVt
YmVyIGxpbmUgPSBjdXJyZW50U3RyaW5nLmN1cnJlbnRMaW5lKCk7CisgICAgT3JkaW5hbE51bWJl
ciBjb2x1bW4gPSBjdXJyZW50U3RyaW5nLmN1cnJlbnRDb2x1bW4oKTsKKyAgICBBU1NFUlQobV90
b2tlbml6ZXItPmxpbmVOdW1iZXIoKSA9PSBsaW5lKTsKIAotICAgIHJldHVybiBUZXh0UG9zaXRp
b24wKGxpbmUsIGNvbHVtbik7CisgICAgcmV0dXJuIFRleHRQb3NpdGlvbihsaW5lLCBjb2x1bW4p
OwogfQogCiBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5o
CmluZGV4IDczZTU3ZWYwZmYwN2JlNDNjZjFlNjQwYTVlMzA1OTdmMTRkZDkzOGYuLmVlZTg4MmM3
MjRlM2UzYjBkNmRkNzRmYmQ2YTg2ZDVjYjcyMmJhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCkBAIC03OCw4ICs3OCw4IEBAIHB1Ymxp
YzoKICAgICBIVE1MVG9rZW5pemVyKiB0b2tlbml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rva2Vu
aXplci5nZXQoKTsgfQogICAgIFN0cmluZyBzb3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4m
KTsKIAotICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFplcm9CYXNlZE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVh
bCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBPcmRpbmFs
TnVtYmVyIGxpbmVOdW1iZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kU2No
ZWR1bGVkVGFza3MoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lU2NoZWR1bGVkVGFza3MoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKaW5kZXggNTEy
YWU4OGZhNTY2NmI5ZThlMWY5NDZkODUyNjI4YjFjZjM2NWNmOC4uZGE2OTMyZmQ0MjIzYjhhZDFj
Yjc2YzFkOTc2MjJmOTkwNmVmMWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTElucHV0U3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTElucHV0U3RyZWFtLmgKQEAgLTE0Nyw4ICsxNDcsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEhUTUxJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKICAgICBTZWdtZW50ZWRTdHJpbmcg
bV9uZXh0OwotICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyIG1fbGluZTsKLSAgICBXVEY6Olplcm9C
YXNlZE51bWJlciBtX2NvbHVtbjsKKyAgICBPcmRpbmFsTnVtYmVyIG1fbGluZTsKKyAgICBPcmRp
bmFsTnVtYmVyIG1fY29sdW1uOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAppbmRleCA0Y2NkNzc3ZjNjZjg5MGNiZmQzNGI3Njhk
N2ZkZTU0Mjc1MmY5Y2IyLi5kMTRkNjlkMWQ2MzdkYjNiMTlmZWZkYmQwMGJlNTEwNDViNDAwNDhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3RvcFdhdGNoaW5n
Rm9yTG9hZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBtYXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgJ3Nj
cmlwdCciCiAvLyBTY3JpcHQgaGFuZGxpbmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJlZSBidWlsZGVy
IHRvIGtlZXAgdGhlIGVhY2ggY2xhc3Mgc2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0
aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0
ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGNvbnN0IFRleHRQb3NpdGlvbiYg
c2NyaXB0U3RhcnRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CiAgICAg
Ly8gRklYTUU6IElmIHNjcmlwdGluZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3QgcmV0dXJuIHRy
dWU7CkBAIC0yNzUsNyArMjc1LDcgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVu
ZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW4KIAogLy8gVGhp
cyBtZXRob2QgaXMgbWVhbnQgdG8gbWF0Y2ggdGhlIEhUTUw1IGRlZmluaXRpb24gb2YgInJ1bm5p
bmcgYSBzY3JpcHQiCiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3Vy
cmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI3J1bm5pbmctYS1zY3JpcHQKLXZv
aWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4
dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbikKK3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6
cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFy
dFBvc2l0aW9uKQogewogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQoIWhhdmVQ
YXJzaW5nQmxvY2tpbmdTY3JpcHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmgKaW5kZXggOTg2ZjdiZDNiZTJiYjUwMmYxYjZiMmEwZTRiMzNhZDQ1
YjVjMGQ4Ny4uNzdhYWQ4YzljMDM3ZjVmMjk2MWQ1YWM0YzhjMWViNThmMjE4ZTU1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaApAQCAtNTMsNyAr
NTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2goKTsKIAogICAgIC8vIFByb2Nlc3NlcyB0
aGUgcGFzc2VkIGluIHNjcmlwdCBhbmQgYW55IHBlbmRpbmcgc2NyaXB0cyBpZiBwb3NzaWJsZS4K
LSAgICBib29sIGV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRUb1Byb2Nlc3MsIGNv
bnN0IFRleHRQb3NpdGlvbjEmIHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgIGJvb2wgZXhlY3V0
ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgY29uc3QgVGV4dFBvc2l0aW9u
JiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JT
dHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNo
ZWV0czsgfQpAQCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdERlZmVy
cmVkU2NyaXB0KEVsZW1lbnQqKTsKICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRp
bmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50
KiwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CisgICAgdm9pZCBy
dW5TY3JpcHQoRWxlbWVudCosIGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlv
bik7CiAKICAgICAvLyBIZWxwZXJzIGZvciBkZWFsaW5nIHdpdGggSFRNTFNjcmlwdFJ1bm5lckhv
c3QKICAgICB2b2lkIHdhdGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0Jik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCA3ZGU1NDkzM2VmM2Yy
YTBlMDY3N2YzZDgxY2I2ZGFmZjI5NmY2ZDM3Li4yN2I1ODk2MWUwNGJlZDM0MTlmNGIzNGY4ZjRk
YWIyYTdmMzA5NzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAogc3RhdGljIGNvbnN0IGludCB1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlID0gLTE7CiAK
LXN0YXRpYyBUZXh0UG9zaXRpb24xIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCitzdGF0
aWMgVGV4dFBvc2l0aW9uIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCiB7Ci0gICAgcmV0
dXJuIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KC0x
KSwgV1RGOjpPbmVCYXNlZE51bWJlcjo6YmFzZSgpKTsKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9u
KE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludCgtMSksIE9yZGluYWxOdW1iZXI6OmZpcnN0
KCkpOwogfQogCiBuYW1lc3BhY2UgewpAQCAtMzUxLDcgKzM1MSw3IEBAIEhUTUxUcmVlQnVpbGRl
cjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBIVE1MRG9jdW1l
bnQqIGRvY3VtCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAg
ICAsIG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlv
bih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1l
bnRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjA6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAg
ICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1Jh
bmdlUG9zaXRpb24oKSkKICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRN
TDVQYXJzZXJRdWlya3MpCiAgICAgLCBtX2hhc1BlbmRpbmdGb3JlaWduSW5zZXJ0aW9uTW9kZVN0
ZXBzKGZhbHNlKQogewpAQCAtMzcwLDcgKzM3MCw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRy
ZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBm
CiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fcGFy
c2VyKHBhcnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRp
YWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBv
c2l0aW9uKFRleHRQb3NpdGlvbjA6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9sYXN0
U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRp
b24oKSkKICAgICAsIG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJR
dWlya3MpCiAgICAgLCBtX2hhc1BlbmRpbmdGb3JlaWduSW5zZXJ0aW9uTW9kZVN0ZXBzKGZhbHNl
KQogewpAQCAtNDIwLDcgKzQyMCw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5n
Q29udGV4dDo6fkZyYWdtZW50UGFyc2luZ0NvbnRleHQoKQogewogfQogCi1QYXNzUmVmUHRyPEVs
ZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24x
JiBzY3JpcHRTdGFydFBvc2l0aW9uKQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxk
ZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9u
KQogewogICAgIC8vIFVucGF1c2Ugb3Vyc2VsdmVzLCBjYWxsZXJzIG1heSBwYXVzZSB1cyBhZ2Fp
biB3aGVuIHByb2Nlc3NpbmcgdGhlIHNjcmlwdC4KICAgICAvLyBUaGUgSFRNTDUgc3BlYyBpcyB3
cml0dGVuIGFzIHRob3VnaCBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbnNpZGUgdGhlIHRyZWUKQEAg
LTIyMjAsNyArMjIyMCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgIEFTU0VSVChtX3RyZWUuY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShzY3Jp
cHRUYWcpKTsKICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRF
bGVtZW50KCk7Ci0gICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSBX
VEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24obV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRp
b24pOworICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gbV9sYXN0
U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb247CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1l
bnRzKCktPnBvcCgpOwogICAgICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV9m
cmFnbWVudENvbnRleHQuc2NyaXB0aW5nUGVybWlzc2lvbigpID09IEZyYWdtZW50U2NyaXB0aW5n
Tm90QWxsb3dlZCkKICAgICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3ZlQWxs
Q2hpbGRyZW4oKTsKQEAgLTI4MDcsOSArMjgwNyw5IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBtX3BhcnNl
ci0+dG9rZW5pemVyKCktPnNldFN0YXRlKEhUTUxUb2tlbml6ZXJTdGF0ZTo6U2NyaXB0RGF0YVN0
YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKIAot
ICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24gPSBtX3BhcnNlci0+dGV4dFBvc2l0aW9uKCk7Cisg
ICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uID0gbV9wYXJzZXItPnRleHRQb3NpdGlvbigpOwogCi0g
ICAgQVNTRVJUKHBvc2l0aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKSA9PSBtX3BhcnNlci0+dG9r
ZW5pemVyKCktPmxpbmVOdW1iZXIoKSk7CisgICAgQVNTRVJUKHBvc2l0aW9uLm1fbGluZSA9PSBt
X3BhcnNlci0+dG9rZW5pemVyKCktPmxpbmVOdW1iZXIoKSk7CiAKICAgICBtX2xhc3RTY3JpcHRF
bGVtZW50U3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IDg2NGM5M2M1YTYwNWUyNDU2MDRkMTA0MmY1
OTI0OTlkMTUwZTYzYTAuLjRlYmQ0NGUyYTJmMzI5NjYzMGUwNjc1N2ZlNTIxZTgxMjYxNGQ3MTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCkBAIC03
OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9r
ZW4oQXRvbWljSFRNTFRva2VuJik7CiAKICAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVuIHBhcnNl
ciBpcyBwYXVzZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KLSAgICBQYXNzUmVm
UHRyPEVsZW1lbnQ+IHRha2VTY3JpcHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3Rh
cnRQb3NpdGlvbik7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNz
KFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBEb25lLCBjbG9z
ZSBhbnkgb3BlbiB0YWdzLCBldGMuCiAgICAgdm9pZCBmaW5pc2hlZCgpOwpAQCAtMjQ5LDEyICsy
NDksMTIgQEAgcHJpdmF0ZToKICAgICBIVE1MRG9jdW1lbnRQYXJzZXIqIG1fcGFyc2VyOwogCiAg
ICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hp
Y2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVzdW1pbmcgdGhlIHBhcnNlci4KLSAgICBUZXh0
UG9zaXRpb24xIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsgLy8gU3RhcnRpbmcgbGlu
ZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNzaW5nLgorICAgIFRleHRQ
b3NpdGlvbiBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb247IC8vIFN0YXJ0aW5nIGxpbmUg
bnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KIAogICAgIC8vIEZJ
WE1FOiBXZSBwcm9iYWJseSB3YW50IHRvIHJlbW92ZSB0aGlzIG1lbWJlci4gIE9yaWdpbmFsbHks
IGl0IHdhcwogICAgIC8vIGNyZWF0ZWQgdG8gc2VydmljZSB0aGUgbGVnYWN5IHRyZWUgYnVpbGRl
ciwgYnV0IGl0IHNlZW1zIHRvIGJlIHVzZWQgZm9yCiAgICAgLy8gc29tZSBvdGhlciB0aGluZ3Mg
bm93LgotICAgIFRleHRQb3NpdGlvbjAgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb247
CisgICAgVGV4dFBvc2l0aW9uIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uOwogCiAg
ICAgYm9vbCBtX3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggYjg4MWJjYzg0
ZGE3OTgyNmZkNjkzZTUwNWE4YzQ0OGY4NjUyZjhkNS4uN2Q5YWU3MGMyZGUxZDE2MTIxNTc2YTNi
ZWVmMDkwNWZmYzVmYjI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMzgyLDcgKzM4Miw3IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9i
amVjdChEb2N1bWVuCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvck9i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGluaXRpYXRvck9iamVj
dC0+c2V0U3RyaW5nKCJ0eXBlIiwgInBhcnNlciIpOwogICAgICAgICBpbml0aWF0b3JPYmplY3Qt
PnNldFN0cmluZygidXJsIiwgZG9jdW1lbnQtPnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgaW5p
dGlhdG9yT2JqZWN0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCBkb2N1bWVudC0+c2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyKCktPmxpbmVOdW1iZXIoKS5jb252ZXJ0QXNPbmVCYXNlZEludCgpKTsK
KyAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCBkb2N1bWVu
dC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCktPmxpbmVOdW1iZXIoKS5vbmVCYXNlZEludCgp
KTsKICAgICAgICAgcmV0dXJuIGluaXRpYXRvck9iamVjdDsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAppbmRleCAxNTE1ZmU4
Y2FkYTUzMDQ1ZDlhMTFiZDU1YzZiNzdlNmI0ZTQyYTI4Li5hNWFiM2E2NTgwM2JmZjQyOTBjYmM5
ZDVlNjc0NDNjYzY2ZTU0YjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TZWdtZW50ZWRTdHJpbmcuY3BwCkBAIC0yMzcsMTggKzIzNywxOCBAQCB2b2lkIFNlZ21lbnRl
ZFN0cmluZzo6YWR2YW5jZVNsb3dDYXNlKGludCYgbGluZU51bWJlcikKICAgICBtX2N1cnJlbnRD
aGFyID0gbV9wdXNoZWRDaGFyMSA/ICZtX3B1c2hlZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLm1f
Y3VycmVudDsKIH0KIAotV1RGOjpaZXJvQmFzZWROdW1iZXIgU2VnbWVudGVkU3RyaW5nOjpjdXJy
ZW50TGluZSgpIGNvbnN0CitPcmRpbmFsTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudExp
bmUoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9C
YXNlZEludChtX2N1cnJlbnRMaW5lKTsKKyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVpl
cm9CYXNlZEludChtX2N1cnJlbnRMaW5lKTsKIH0KIAotV1RGOjpaZXJvQmFzZWROdW1iZXIgU2Vn
bWVudGVkU3RyaW5nOjpjdXJyZW50Q29sdW1uKCkgY29uc3QKK09yZGluYWxOdW1iZXIgU2VnbWVu
dGVkU3RyaW5nOjpjdXJyZW50Q29sdW1uKCkgY29uc3QKIHsKICAgICBpbnQgemVyb0Jhc2VkQ29s
dW1uID0gbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWQoKSAtIG1fbnVtYmVyT2ZDaGFyYWN0ZXJz
Q29uc3VtZWRQcmlvclRvQ3VycmVudExpbmU7Ci0gICAgcmV0dXJuIFdURjo6WmVyb0Jhc2VkTnVt
YmVyOjpmcm9tWmVyb0Jhc2VkSW50KHplcm9CYXNlZENvbHVtbik7CisgICAgcmV0dXJuIE9yZGlu
YWxOdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoemVyb0Jhc2VkQ29sdW1uKTsKIH0KIAotdm9pZCBT
ZWdtZW50ZWRTdHJpbmc6OnNldEN1cnJlbnRQb3NpdGlvbihXVEY6Olplcm9CYXNlZE51bWJlciBs
aW5lLCBXVEY6Olplcm9CYXNlZE51bWJlciBjb2x1bW5BZnRyZVByb2xvZywgaW50IHByb2xvZ0xl
bmd0aCkKK3ZvaWQgU2VnbWVudGVkU3RyaW5nOjpzZXRDdXJyZW50UG9zaXRpb24oT3JkaW5hbE51
bWJlciBsaW5lLCBPcmRpbmFsTnVtYmVyIGNvbHVtbkFmdHJlUHJvbG9nLCBpbnQgcHJvbG9nTGVu
Z3RoKQogewogICAgIG1fY3VycmVudExpbmUgPSBsaW5lLnplcm9CYXNlZEludCgpOwogICAgIG1f
bnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNo
YXJhY3RlcnNDb25zdW1lZCgpICsgcHJvbG9nTGVuZ3RoIC0gY29sdW1uQWZ0cmVQcm9sb2cuemVy
b0Jhc2VkSW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Nl
Z21lbnRlZFN0cmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRT
dHJpbmcuaAppbmRleCA0ODMxMTY2ZmExNGM0MTc0ZTIxYWJjMmZjY2RmOTI1ZjU4NjIyY2IzLi40
NDYyMTgzODhkMWZjNzU2OGI4Y2YxMDJiYTJkZjU2MzE5MWFjYjk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgKQEAgLTIyNSwxMSArMjI1LDEx
IEBAIHB1YmxpYzoKICAgICAKIAogICAgIC8vIFRoZSBtZXRob2QgaXMgbW9kZXJhdGVseSBzbG93
LCBjb21wYXJpbmcgdG8gY3VycmVudExpbmUgbWV0aG9kLgotICAgIFdURjo6WmVyb0Jhc2VkTnVt
YmVyIGN1cnJlbnRDb2x1bW4oKSBjb25zdDsKLSAgICBXVEY6Olplcm9CYXNlZE51bWJlciBjdXJy
ZW50TGluZSgpIGNvbnN0OworICAgIE9yZGluYWxOdW1iZXIgY3VycmVudENvbHVtbigpIGNvbnN0
OworICAgIE9yZGluYWxOdW1iZXIgY3VycmVudExpbmUoKSBjb25zdDsKICAgICAvLyBTZXRzIHZh
bHVlIG9mIGxpbmUvY29sdW1uIHZhcmlhYmxlcy4gQ29sdW1uIGlzIHNwZWNpZmllZCBpbmRpcmVj
dGx5IGJ5IGEgcGFyYW1ldGVyIGNvbHVtbkFmdHJlUHJvbG9nCiAgICAgLy8gd2hpY2ggaXMgYSB2
YWx1ZSBvZiBjb2x1bW4gdGhhdCB3ZSBzaG91bGQgZ2V0IGFmdGVyIGEgcHJvbG9nIChmaXJzdCBw
cm9sb2dMZW5ndGggY2hhcmFjdGVycykgaGFzIGJlZW4gY29uc3VtZWQuCi0gICAgdm9pZCBzZXRD
dXJyZW50UG9zaXRpb24oV1RGOjpaZXJvQmFzZWROdW1iZXIgbGluZSwgV1RGOjpaZXJvQmFzZWRO
dW1iZXIgY29sdW1uQWZ0cmVQcm9sb2csIGludCBwcm9sb2dMZW5ndGgpOworICAgIHZvaWQgc2V0
Q3VycmVudFBvc2l0aW9uKE9yZGluYWxOdW1iZXIgbGluZSwgT3JkaW5hbE51bWJlciBjb2x1bW5B
ZnRyZVByb2xvZywgaW50IHByb2xvZ0xlbmd0aCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBl
bmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IGEwYTlkYzY1NTZjZWU3YWMxZDdiYWY3Y2Q3ZjI0
OTU4NzczZTkzODguLmFkNDZjOThjNTZkNDRkNjNjNTZkOTg0ZmI2NTgzYWIyYTQ5YTMxYjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBAIC0xNzks
NyArMTc5LDcgQEAgc3RhdGljIGludCBwYXJzZXJMaW5lTnVtYmVyKERvY3VtZW50KiBkb2N1bWVu
dCkKICAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9IGRvY3VtZW50LT5zY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKICAgICBpZiAoIXBhcnNlcikKICAgICAgICAgcmV0dXJu
IDE7Ci0gICAgcmV0dXJuIHBhcnNlci0+bGluZU51bWJlcigpLmNvbnZlcnRBc09uZUJhc2VkSW50
KCk7CisgICAgcmV0dXJuIHBhcnNlci0+bGluZU51bWJlcigpLm9uZUJhc2VkSW50KCk7CiB9CiAK
IHN0YXRpYyB2b2lkIHJlcG9ydE1lc3NhZ2UoRG9jdW1lbnQqIGRvY3VtZW50LCBNZXNzYWdlTGV2
ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxFcnJvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5jcHAK
aW5kZXggODQyZDc0ZGE3Zjc5NDI5ZWMwNjdlZGJlZjA1NThmYWUyOGIxOWY4Ni4uODdmY2YyNzA0
ZWY1NGVhNTAzMTk3MDE5ZTk2N2IzNzg4MWY1MjcyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hNTEVycm9ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5j
cHAKQEAgLTQ5LDE2ICs0OSwxNiBAQCBjb25zdCBpbnQgbWF4RXJyb3JzID0gMjU7CiBYTUxFcnJv
cnM6OlhNTEVycm9ycyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3Vt
ZW50KQogICAgICwgbV9lcnJvckNvdW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRl
eHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9sYXN0RXJyb3JQb3Np
dGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogewogfQogCiB2b2lkIFhN
TEVycm9yczo6aGFuZGxlRXJyb3IoRXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2Us
IGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQogewotICAgIGhhbmRsZUVycm9yKHR5
cGUsIG1lc3NhZ2UsIFRleHRQb3NpdGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJh
c2VkSW50KGxpbmVOdW1iZXIpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQo
Y29sdW1uTnVtYmVyKSkpOworICAgIGhhbmRsZUVycm9yKHR5cGUsIG1lc3NhZ2UsIFRleHRQb3Np
dGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGluZU51bWJlciksIE9yZGluYWxO
dW1iZXI6OmZyb21PbmVCYXNlZEludChjb2x1bW5OdW1iZXIpKSk7CiB9CiAKLXZvaWQgWE1MRXJy
b3JzOjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4
dFBvc2l0aW9uMSBwb3NpdGlvbikKK3ZvaWQgWE1MRXJyb3JzOjpoYW5kbGVFcnJvcihFcnJvclR5
cGUgdHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKQogewog
ICAgIGlmICh0eXBlID09IGZhdGFsIHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9s
YXN0RXJyb3JQb3NpdGlvbi5tX2xpbmUgIT0gcG9zaXRpb24ubV9saW5lICYmIG1fbGFzdEVycm9y
UG9zaXRpb24ubV9jb2x1bW4gIT0gcG9zaXRpb24ubV9jb2x1bW4pKSB7CiAgICAgICAgIHN3aXRj
aCAodHlwZSkgewpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFhNTEVycm9yczo6aGFuZGxlRXJyb3Io
RXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIFRleHRQb3NpdGlvbjEgcAogICAg
IH0KIH0KIAotdm9pZCBYTUxFcnJvcnM6OmFwcGVuZEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcm
IHR5cGVTdHJpbmcsIFRleHRQb3NpdGlvbjEgcG9zaXRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
Cit2b2lkIFhNTEVycm9yczo6YXBwZW5kRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgdHlwZVN0
cmluZywgVGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAg
IC8vIDx0eXBlU3RyaW5nPiBvbiBsaW5lIDxsaW5lTnVtYmVyPiBhdCBjb2x1bW4gPGNvbHVtbk51
bWJlcj46IDxtZXNzYWdlPgogICAgIG1fZXJyb3JNZXNzYWdlcy5hcHBlbmQodHlwZVN0cmluZyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmggYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MRXJyb3JzLmgKaW5kZXggZDAzMjk0NDdiMTdhYmUwZjc5MzhhODZlOTExNWY3
MDU4Y2ZlMTJiOC4uZDRlNDhiM2U0NDk2NjNmYTFmY2YwY2RhNjQxMGM5MmJhNDkxNWM5YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxFcnJvcnMuaApAQCAtNDcsMTcgKzQ3LDE3IEBAIHB1YmxpYzoKICAgICAvLyBF
eHBvc2VkIGZvciBjYWxsYmFja3M6CiAgICAgZW51bSBFcnJvclR5cGUgeyB3YXJuaW5nLCBub25G
YXRhbCwgZmF0YWwgfTsKICAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hh
ciogbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwotICAgIHZvaWQg
aGFuZGxlRXJyb3IoRXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBUZXh0UG9zaXRpb24x
KTsKKyAgICB2b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwg
VGV4dFBvc2l0aW9uKTsKIAogICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKIAog
cHJpdmF0ZToKLSAgICB2b2lkIGFwcGVuZEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIHR5cGVT
dHJpbmcsIFRleHRQb3NpdGlvbjEsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgIHZvaWQgYXBw
ZW5kRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZywgVGV4dFBvc2l0aW9uLCBj
b25zdCBjaGFyKiBtZXNzYWdlKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogCiAgICAg
aW50IG1fZXJyb3JDb3VudDsKLSAgICBUZXh0UG9zaXRpb24xIG1fbGFzdEVycm9yUG9zaXRpb247
CisgICAgVGV4dFBvc2l0aW9uIG1fbGFzdEVycm9yUG9zaXRpb247CiAgICAgU3RyaW5nQnVpbGRl
ciBtX2Vycm9yTWVzc2FnZXM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL01hcmt1cFRva2VuaXplckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
TWFya3VwVG9rZW5pemVyQmFzZS5oCmluZGV4IGZkODk5NTJiYTA0MzEzYWI4M2RlZWYxMDNjMzYx
MTNiZTk5YzMxYjYuLmExY2E0MDJiOTU1ZWUxNTg5Mjk1MjRhMTkzYTE4YWZhODE2MzY2NDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5oCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDQsOCArNDUsNyBAQCBjbGFzcyBNYXJrdXBUb2tlbml6ZXJCYXNlIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5NYXJrdXBUb2tlbml6ZXJCYXNlKCkgeyB9CiAKLSAgICBpbnQgbGluZU51bWJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQotICAgIGludCBjb2x1bW5OdW1iZXIoKSBj
b25zdCB7IHJldHVybiAxOyB9IC8vIE1hdGNoZXMgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgg
YmVoYXZpb3IuCisgICAgT3JkaW5hbE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
T3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2xpbmVOdW1iZXIpOyB9CiAKICAgICB0
eXBlbmFtZSBTdGF0ZTo6U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAg
ICAgdm9pZCBzZXRTdGF0ZSh0eXBlbmFtZSBTdGF0ZTo6U3RhdGUgc3RhdGUpIHsgbV9zdGF0ZSA9
IHN0YXRlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERv
Y3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1l
bnRQYXJzZXIuY3BwCmluZGV4IDdkMDQ0Nzk1NjJhM2ZjODdkNDY0MDg2NWViNWM2OWQ1NGMyNDAz
MmMuLmJlNzJjNWRiZjFmYTY3MGFmMDg0MWEwMmRkNDc4MGZjZDIzMjZjM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC04
NCw5ICs4NCw5IEBAIHZvaWQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcoKQog
CiB2b2lkIE5ld1hNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzU2NyaXB0KFNjcmlwdEVsZW1lbnQq
IHNjcmlwdEVsZW1lbnQpCiB7Ci0gICAgaWYgKHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQo
VGV4dFBvc2l0aW9uMSgpLCBTY3JpcHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRy
aWJ1dGUpKSB7CisgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQoVGV4dFBvc2l0
aW9uKCksIFNjcmlwdEVsZW1lbnQ6OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpIHsK
ICAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCi0g
ICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUo
c2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgVGV4dFBv
c2l0aW9uMSgpKSk7CisgICAgICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNj
cmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgp
LT51cmwoKSwgVGV4dFBvc2l0aW9uKCkpKTsKICAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVu
dC0+d2lsbEJlUGFyc2VyRXhlY3V0ZWQoKSkgewogICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0
ID0gc2NyaXB0RWxlbWVudC0+Y2FjaGVkU2NyaXB0KCk7CiAgICAgICAgICAgICBtX3NjcmlwdEVs
ZW1lbnQgPSBzY3JpcHRFbGVtZW50LT5lbGVtZW50KCk7CkBAIC0xMDAsMTUgKzEwMCwxNCBAQCB2
b2lkIE5ld1hNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzU2NyaXB0KFNjcmlwdEVsZW1lbnQqIHNj
cmlwdEVsZW1lbnQpCiAgICAgfQogfQogCi1UZXh0UG9zaXRpb24wIE5ld1hNTERvY3VtZW50UGFy
c2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAorVGV4dFBvc2l0aW9uIE5ld1hNTERvY3VtZW50UGFy
c2VyOjp0ZXh0UG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFpl
cm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludCgwKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBaZXJvQmFzZWROdW1iZXI6OmZyb21aZXJvQmFzZWRJbnQoMCkpOworICAgIHJldHVybiBU
ZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbigpOwogfQogCi1aZXJvQmFzZWROdW1iZXIgTmV3
WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAorT3JkaW5hbE51bWJlciBOZXdY
TUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFplcm9C
YXNlZE51bWJlcjo6YmVsb3dCYXNlKCk7CisgICAgcmV0dXJuIE9yZGluYWxOdW1iZXI6OmZpcnN0
KCk7CiB9CiAKIHZvaWQgTmV3WE1MRG9jdW1lbnRQYXJzZXI6Omluc2VydChjb25zdCBTZWdtZW50
ZWRTdHJpbmcmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxE
b2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxEb2N1bWVu
dFBhcnNlci5oCmluZGV4IDA3ODRjYzVmNjk2MTk5ODgxMzUxY2IzODgxZTQyYjAxMDBlYTdlYTYu
LjAzYWQzMGJjODIxNDU5NTk1MGFmZWRiZTA4MzI5YjY2ZWZmMzU5NzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTYxLDggKzYx
LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVzdW1lUGFyc2luZygpOwogICAgIHZvaWQgcHJvY2Vz
c1NjcmlwdChTY3JpcHRFbGVtZW50Kik7CiAKLSAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbjAgdGV4
dFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBaZXJvQmFzZWROdW1iZXIgbGluZU51bWJl
cigpIGNvbnN0OworICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgT3JkaW5hbE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CiAKICAgICAv
LyBEb2N1bWVudFBhcnNlcgogICAgIHZpcnR1YWwgYm9vbCBoYXNJbnNlcnRpb25Qb2ludCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAppbmRl
eCA0YzdmNzQwY2Q0YmUwOGUyNjA0NzZiOGI1ZDE4NDM2MWRjMWQ1Y2Q2Li4yNDkyM2VlMzJlMjA1
NTUyMjBkNWEyOGFkNjgyYWNlZDllNGFiNTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjpwdXNoQ3VycmVudE5vZGUoQ29udGFpbmVyTm9kZSogbikKICAgICBtX2N1
cnJlbnROb2RlU3RhY2suYXBwZW5kKG1fY3VycmVudE5vZGUpOwogICAgIG1fY3VycmVudE5vZGUg
PSBuOwogICAgIGlmIChtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpID4gbWF4RE9NVHJlZURlcHRo
KQotICAgICAgICBoYW5kbGVFcnJvcihYTUxFcnJvcnM6OmZhdGFsLCAiRXhjZXNzaXZlIG5vZGUg
bmVzdGluZy4iLCBXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24odGV4dFBvc2l0aW9uKCkpKTsK
KyAgICAgICAgaGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpmYXRhbCwgIkV4Y2Vzc2l2ZSBub2RlIG5l
c3RpbmcuIiwgdGV4dFBvc2l0aW9uKCkpOwogfQogCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpw
b3BDdXJyZW50Tm9kZSgpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6YXBwZW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcykKICAgICBJbWFnZUxvYWRlcjo6ZGlz
cGF0Y2hQZW5kaW5nQmVmb3JlTG9hZEV2ZW50cygpOwogfQogCi12b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpoYW5kbGVFcnJvcihYTUxFcnJvcnM6OkVycm9yVHlwZSB0eXBlLCBjb25zdCBjaGFyKiBt
LCBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKQordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxl
RXJyb3IoWE1MRXJyb3JzOjpFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgVGV4dFBvc2l0
aW9uIHBvc2l0aW9uKQogewogICAgIG1feG1sRXJyb3JzLmhhbmRsZUVycm9yKHR5cGUsIG0sIHBv
c2l0aW9uKTsKICAgICBpZiAodHlwZSAhPSBYTUxFcnJvcnM6Ondhcm5pbmcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZDJhMWFkN2EyODQw
NjMwZWJhZmU4MGVmNGI0ZDJmNDI4M2IyNGQ3NS4uZDUxNDU5NmJiYWM3MjBmNDAwYjIzODViOTE2
OTI4NGZhMzQyODI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1l
bnRQYXJzZXIuaApAQCAtODcsNyArODcsNyBAQCBjbGFzcyBUZXh0OwogICAgICAgICB+WE1MRG9j
dW1lbnRQYXJzZXIoKTsKIAogICAgICAgICAvLyBFeHBvc2VkIGZvciBjYWxsYmFja3M6Ci0gICAg
ICAgIHZvaWQgaGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UsIFRleHRQb3NpdGlvbjEpOworICAgICAgICB2b2lkIGhhbmRsZUVycm9yKFhNTEVycm9y
czo6RXJyb3JUeXBlLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBUZXh0UG9zaXRpb24pOwogCiAgICAg
ICAgIHZvaWQgc2V0SXNYSFRNTERvY3VtZW50KGJvb2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxEb2N1
bWVudCA9IGlzWEhUTUw7IH0KICAgICAgICAgYm9vbCBpc1hIVE1MRG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQpAQCAtMTAxLDcgKzEwMSw3IEBAIGNsYXNzIFRl
eHQ7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYmUgdXNlZCBieSBX
TUwuIENhbiB3ZSByZW1vdmUgaXQ/CiAgICAgICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9ybWVkKCkg
Y29uc3QgeyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KIAotICAgICAgICBUZXh0UG9zaXRpb24wIHRl
eHRQb3NpdGlvbigpIGNvbnN0OworICAgICAgICBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkg
Y29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0
cmluZyYpOwogCkBAIC0xMTcsOCArMTE3LDggQEAgY2xhc3MgVGV4dDsKICAgICAgICAgdmlydHVh
bCBib29sIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0b3BQYXJzaW5nKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICAgICAg
dmlydHVhbCBaZXJvQmFzZWROdW1iZXIgbGluZU51bWJlcigpIGNvbnN0OwotICAgICAgICBaZXJv
QmFzZWROdW1iZXIgY29sdW1uTnVtYmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgT3JkaW5h
bE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CisgICAgICAgIE9yZGluYWxOdW1iZXIgY29sdW1u
TnVtYmVyKCkgY29uc3Q7CiAKICAgICAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKQEAg
LTIwOSw3ICsyMDksNyBAQCBwdWJsaWM6CiAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBtX3BlbmRpbmdTY3JpcHQ7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBt
X3NjcmlwdEVsZW1lbnQ7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRTdGFydFBvc2l0
aW9uOworICAgICAgICBUZXh0UG9zaXRpb24gbV9zY3JpcHRTdGFydFBvc2l0aW9uOwogCiAgICAg
ICAgIGJvb2wgbV9wYXJzaW5nRnJhZ21lbnQ7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1
bHROYW1lc3BhY2VVUkk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggODJlZjZiNDBlMjRmYWNhNTU4Njk0YWYz
MjZiNjU1ZmM2NzgyOGQzYy4uZDQwMWE4ZWRiMGYyMmRhNzJlNjIxZjM0MTY1Y2JjNjdhYTI0YmVm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNl
ckxpYnhtbDIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXJMaWJ4bWwyLmNwcApAQCAtMTcyLDcgKzE3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9j
YWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgdm9pZCBh
cHBlbmRFcnJvckNhbGxiYWNrKFhNTEVycm9yczo6RXJyb3JUeXBlIHR5cGUsIGNvbnN0IHhtbENo
YXIqIG1lc3NhZ2UsIE9uZUJhc2VkTnVtYmVyIGxpbmVOdW1iZXIsIE9uZUJhc2VkTnVtYmVyIGNv
bHVtbk51bWJlcikKKyAgICB2b2lkIGFwcGVuZEVycm9yQ2FsbGJhY2soWE1MRXJyb3JzOjpFcnJv
clR5cGUgdHlwZSwgY29uc3QgeG1sQ2hhciogbWVzc2FnZSwgT3JkaW5hbE51bWJlciBsaW5lTnVt
YmVyLCBPcmRpbmFsTnVtYmVyIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIE93blB0cjxQ
ZW5kaW5nRXJyb3JDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFB0cihuZXcgUGVuZGluZ0Vycm9y
Q2FsbGJhY2spOwogCkBAIC0zMjUsMTMgKzMyNSwxMyBAQCBwcml2YXRlOgogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBjYWxsKFhNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHBhcnNlci0+aGFuZGxlRXJyb3IodHlwZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obWVzc2FnZSksIFRleHRQb3NpdGlvbjEobGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7Cisg
ICAgICAgICAgICBwYXJzZXItPmhhbmRsZUVycm9yKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KG1lc3NhZ2UpLCBUZXh0UG9zaXRpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBYTUxFcnJvcnM6OkVycm9yVHlwZSB0eXBlOwogICAgICAgICB4
bWxDaGFyKiBtZXNzYWdlOwotICAgICAgICBPbmVCYXNlZE51bWJlciBsaW5lTnVtYmVyOwotICAg
ICAgICBPbmVCYXNlZE51bWJlciBjb2x1bW5OdW1iZXI7CisgICAgICAgIE9yZGluYWxOdW1iZXIg
bGluZU51bWJlcjsKKyAgICAgICAgT3JkaW5hbE51bWJlciBjb2x1bW5OdW1iZXI7CiAgICAgfTsK
IAogICAgIERlcXVlPE93blB0cjxQZW5kaW5nQ2FsbGJhY2s+ID4gbV9jYWxsYmFja3M7CkBAIC01
NjQsNyArNTY0LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3Vt
ZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2ZpbmlzaENhbGxl
ZChmYWxzZSkKICAgICAsIG1feG1sRXJyb3JzKGRvY3VtZW50KQogICAgICwgbV9wZW5kaW5nU2Ny
aXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dS
YW5nZVBvc2l0aW9uKCkpCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9u
OjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQog
ICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsK
QEAgLTU5MCw3ICs1OTAsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIo
RG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudAogICAgICwgbV9maW5p
c2hDYWxsZWQoZmFsc2UpCiAgICAgLCBtX3htbEVycm9ycyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkK
ICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQotICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRl
eHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9zY3JpcHRTdGFydFBv
c2l0aW9uKFRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNp
bmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Bl
cm1pc3Npb24pCiB7CkBAIC02NzQsNyArNjc0LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQogICAgIC8vIEZJWE1FOiBXaHkgaXMg
dGhpcyBoZXJlPyAgQW5kIHdoeSBpcyBpdCBhZnRlciB3ZSBwcm9jZXNzIHRoZSBwYXNzZWQgc291
cmNlPwogICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQoKS0+ZGVjb2Rl
cigpLT5zYXdFcnJvcigpKSB7CiAgICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNhdyBhbiBlcnJv
ciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5nKQotICAgICAgICBUZXh0UG9zaXRp
b24xIHBvc2l0aW9uKE9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+Y29u
dGV4dCgpLT5pbnB1dC0+bGluZSksIE9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29u
dGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKSk7CisgICAgICAgIFRleHRQb3NpdGlvbiBwb3Np
dGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+Y29udGV4dCgpLT5p
bnB1dC0+bGluZSksIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5jb250
ZXh0KCktPmlucHV0LT5jb2wpKTsKICAgICAgICAgaGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpmYXRh
bCwgIkVuY29kaW5nIGVycm9yIiwgcG9zaXRpb24pOwogICAgIH0KIH0KQEAgLTgyMiw3ICs4MjIs
NyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFy
KiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0
RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2Ny
aXB0RWxlbWVudCkKLSAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gV1RGOjp0b09uZUJh
c2VkVGV4dFBvc2l0aW9uKHRleHRQb3NpdGlvbigpKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBv
c2l0aW9uID0gdGV4dFBvc2l0aW9uKCk7CiAKICAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRD
aGlsZChuZXdFbGVtZW50LmdldCgpKTsKIApAQCAtOTUwLDkgKzk1MCw5IEBAIHZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmVycm9yKFhNTEVycm9yczo6RXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UsIHZhCiAjZW5kaWYKIAogICAgIGlmIChtX3BhcnNlclBhdXNlZCkKLSAgICAgICAg
bV9wZW5kaW5nQ2FsbGJhY2tzLT5hcHBlbmRFcnJvckNhbGxiYWNrKHR5cGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+KG0pLCBsaW5lTnVtYmVyKCkuY29udmVydFRvT25lQmFzZWQo
KSwgY29sdW1uTnVtYmVyKCkuY29udmVydFRvT25lQmFzZWQoKSk7CisgICAgICAgIG1fcGVuZGlu
Z0NhbGxiYWNrcy0+YXBwZW5kRXJyb3JDYWxsYmFjayh0eXBlLCByZWludGVycHJldF9jYXN0PGNv
bnN0IHhtbENoYXIqPihtKSwgbGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CiAgICAgZWxz
ZQotICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBtLCBXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRp
b24odGV4dFBvc2l0aW9uKCkpKTsKKyAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwgbSwgdGV4dFBv
c2l0aW9uKCkpOwogCiAjaWYgSEFWRShWQVNQUklOVEYpCiAgICAgZnJlZShtKTsKQEAgLTEzNjks
MjUgKzEzNjksMjMgQEAgdm9pZCogeG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgY29uc3QgU3RyaW4KIH0KICNlbmRpZgogCi1aZXJv
QmFzZWROdW1iZXIgWE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAorT3JkaW5h
bE51bWJlciBYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7Ci0gICAgT25l
QmFzZWROdW1iZXIgbnVtYmVyID0gT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250
ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5saW5lIDogMSk7Ci0gICAgcmV0dXJuIG51bWJlci5j
b252ZXJ0VG9aZXJvQmFzZWQoKTsKKyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJh
c2VkSW50KGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxKTsKIH0KIAotWmVy
b0Jhc2VkTnVtYmVyIFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAorT3Jk
aW5hbE51bWJlciBYTUxEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKIHsKLSAg
ICBPbmVCYXNlZE51bWJlciBudW1iZXIgPSBPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KGNvbnRleHQoKSA/IGNvbnRleHQoKS0+aW5wdXQtPmNvbCA6IDEpOwotICAgIHJldHVybiBudW1i
ZXIuY29udmVydFRvWmVyb0Jhc2VkKCk7CisgICAgcmV0dXJuIE9yZGluYWxOdW1iZXI6OmZyb21P
bmVCYXNlZEludChjb250ZXh0KCkgPyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxKTsKIH0KIAot
VGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK1Rl
eHRQb3NpdGlvbiBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKIHsKICAg
ICB4bWxQYXJzZXJDdHh0UHRyIGNvbnRleHQgPSB0aGlzLT5jb250ZXh0KCk7CiAgICAgaWYgKCFj
b250ZXh0KQotICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7
Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjAoT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZElu
dChjb250ZXh0LT5pbnB1dC0+bGluZSkuY29udmVydFRvWmVyb0Jhc2VkKCksCi0gICAgICAgIE9u
ZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkuY29udmVy
dFRvWmVyb0Jhc2VkKCkpOworICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9z
aXRpb24oKTsKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVC
YXNlZEludChjb250ZXh0LT5pbnB1dC0+bGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICBP
cmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkpOwogfQog
CiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAppbmRleCBmYTRiZDBkZjli
ZjQzYjNkMjgyMTNkMWZiNjdkMzIzMWQxMzk3NzI3Li4yYzA3ZTVhMDU0ZTQ0NmRhYTVlYjQ4ZDg4
NGFkYjBhZGE5MmRlNjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBYTUxEb2N1bWVudFBhcnNl
cjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1l
VmlldykKICAgICAsIG1fZmluaXNoQ2FsbGVkKGZhbHNlKQogICAgICwgbV94bWxFcnJvcnMoZG9j
dW1lbnQpCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRQb3Np
dGlvbihUZXh0UG9zaXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fc2NyaXB0
U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwg
bV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKQogewpAQCAtMTI5LDcgKzEyOSw3IEBAIFhNTERvY3VtZW50
UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxl
bWVudCogcGFyZW50CiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKICAgICAsIG1feG1sRXJy
b3JzKGZyYWdtZW50LT5kb2N1bWVudCgpKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAg
LCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9u
KCkpCisgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1Jhbmdl
UG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3Njcmlw
dGluZ1Blcm1pc3Npb24ocGVybWlzc2lvbikKIHsKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpkb1dyaXRlKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCiAKICAg
ICBpZiAoZG9jdW1lbnQoKS0+ZGVjb2RlcigpICYmIGRvY3VtZW50KCktPmRlY29kZXIoKS0+c2F3
RXJyb3IoKSkgewogICAgICAgICAvLyBJZiB0aGUgZGVjb2RlciBzYXcgYW4gZXJyb3IsIHJlcG9y
dCBpdCBhcyBmYXRhbCAoc3RvcHMgcGFyc2luZykKLSAgICAgICAgaGFuZGxlRXJyb3IoWE1MRXJy
b3JzOjpmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0aW9u
KHRleHRQb3NpdGlvbigpKSk7CisgICAgICAgIGhhbmRsZUVycm9yKFhNTEVycm9yczo6ZmF0YWws
ICJFbmNvZGluZyBlcnJvciIsIHRleHRQb3NpdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMjIzLDIyICsyMjMsMjIgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQo
KQogCiAgICAgaWYgKG1fc3RyZWFtLmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0
dXJlRW5kT2ZEb2N1bWVudEVycm9yCiAgICAgICAgIHx8IChtX3dyb3RlVGV4dCAmJiAhbV9zYXdG
aXJzdEVsZW1lbnQgJiYgIW1fc2F3WFNMVHJhbnNmb3JtICYmICFtX3Nhd0Vycm9yKSkKLSAgICAg
ICAgaGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpmYXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJv
clN0cmluZygpKSwgV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0aW9uKHRleHRQb3NpdGlvbigpKSk7
CisgICAgICAgIGhhbmRsZUVycm9yKFhNTEVycm9yczo6ZmF0YWwsIHFQcmludGFibGUobV9zdHJl
YW0uZXJyb3JTdHJpbmcoKSksIHRleHRQb3NpdGlvbigpKTsKIH0KIAotWmVyb0Jhc2VkTnVtYmVy
IFhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKK09yZGluYWxOdW1iZXIgWE1M
RG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAogewotICAgIHJldHVybiBPbmVCYXNl
ZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fc3RyZWFtLmxpbmVOdW1iZXIoKSkuY29udmVydFRv
WmVyb0Jhc2VkKCk7CisgICAgcmV0dXJuIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludCht
X3N0cmVhbS5saW5lTnVtYmVyKCkpOwogfQogCi1aZXJvQmFzZWROdW1iZXIgWE1MRG9jdW1lbnRQ
YXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CitPcmRpbmFsTnVtYmVyIFhNTERvY3VtZW50UGFy
c2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAogewotICAgIHJldHVybiBPbmVCYXNlZE51bWJlcjo6
ZnJvbU9uZUJhc2VkSW50KG1fc3RyZWFtLmNvbHVtbk51bWJlcigpKS5jb252ZXJ0VG9aZXJvQmFz
ZWQoKTsKKyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fc3RyZWFt
LmNvbHVtbk51bWJlcigpKTsKIH0KIAotVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6
dGV4dFBvc2l0aW9uKCkgY29uc3QKK1RleHRQb3NpdGlvbiBYTUxEb2N1bWVudFBhcnNlcjo6dGV4
dFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmVOdW1iZXIo
KSwgY29sdW1uTnVtYmVyKCkpOwogfQogCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFy
c2luZygpCkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2Uo
KQogICAgICAgICAgICAgaWYgKG1fc3RyZWFtLmVycm9yKCkgIT0gUVhtbFN0cmVhbVJlYWRlcjo6
UHJlbWF0dXJlRW5kT2ZEb2N1bWVudEVycm9yKSB7CiAgICAgICAgICAgICAgICAgWE1MRXJyb3Jz
OjpFcnJvclR5cGUgdHlwZSA9IChtX3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6
Ok5vdFdlbGxGb3JtZWRFcnJvcikgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WE1MRXJyb3JzOjpmYXRhbCA6IFhNTEVycm9yczo6d2FybmluZzsKLSAgICAgICAgICAgICAgICBo
YW5kbGVFcnJvcih0eXBlLCBxUHJpbnRhYmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBXVEY6
OnRvT25lQmFzZWRUZXh0UG9zaXRpb24odGV4dFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAg
ICBoYW5kbGVFcnJvcih0eXBlLCBxUHJpbnRhYmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCB0
ZXh0UG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNTIxLDcgKzUyMSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3Rh
cnRFbGVtZW50KCkKIAogICAgIFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Njcmlw
dEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSk7CiAgICAgaWYgKHNjcmlwdEVsZW1lbnQpCi0gICAg
ICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbih0
ZXh0UG9zaXRpb24oKSk7CisgICAgICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3Np
dGlvbigpOwogCiAgICAgbV9jdXJyZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5n
ZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTc2YzBhMjA1ZWJiNTQwMGM3
OWEyYWI4M2QxMGVhM2NjOThhZDFhMC4uOWQ1OTUzMWFiMmI5YzRhODc2ZGMwZmNhYTcwODBjMzZk
MmFkNDg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
MS0wOS0xOSAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAg
VGV4dFBvc2l0aW9uIHJlZmFjdG9yaW5nOiBNZXJnZSBaZXJvQmFzZWROdW1iZXIgYW5kIE9uZUJh
c2VkTnVtYmVyIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYzNTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpleGVjdXRlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpl
eGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpleGVjdXRlU2NyaXB0QW5kUmV0dXJuVmFsdWUpOgorCiAyMDExLTA5LTE5ICBJbHlhIFRp
a2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBleHRlbmQgdGltZWxpbmUgY292ZXJhZ2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmNwcAppbmRleCA2NWY1NmYxMzhiZjMzZjE2MGNmNjg0NDVhNWU1MDg0NDRj
ZjE2ZDc1Li5iYWJlMzcyM2MyNzAyZmFhZjVhZDc2MzU3ODdjZTFjNDMxYzRkNjE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc1MCw3ICs3NTAs
NyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6YmluZFRvV2luZG93T2JqZWN0KGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgTlBPYmplY3QqIG9iamVjdCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVT
Y3JpcHQoY29uc3QgV2ViU2NyaXB0U291cmNlJiBzb3VyY2UpCiB7Ci0gICAgVGV4dFBvc2l0aW9u
MSBwb3NpdGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0
YXJ0TGluZSksIFdURjo6T25lQmFzZWROdW1iZXI6OmJhc2UoKSk7CisgICAgVGV4dFBvc2l0aW9u
IHBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3RhcnRMaW5l
KSwgT3JkaW5hbE51bWJlcjo6Zmlyc3QoKSk7CiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1
dGVTY3JpcHQoCiAgICAgICAgIFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51
cmwsIHBvc2l0aW9uKSk7CiB9CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6
OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCiAgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+IHNvdXJjZXM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291cmNlczsg
KytpKSB7Ci0gICAgICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJl
cjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZXNJbltpXS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2Vk
TnVtYmVyOjpiYXNlKCkpOworICAgICAgICBUZXh0UG9zaXRpb24gcG9zaXRpb24oT3JkaW5hbE51
bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZXNJbltpXS5zdGFydExpbmUpLCBPcmRpbmFsTnVt
YmVyOjpmaXJzdCgpKTsKICAgICAgICAgc291cmNlcy5hcHBlbmQoU2NyaXB0U291cmNlQ29kZSgK
ICAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlv
bikpOwogICAgIH0KQEAgLTgzMiw3ICs4MzIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2Vi
RnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0QW5kUmV0dXJuVmFsdWUoY29uc3QgV2ViU2NyaXB0Uwog
ICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lk
PTg2Mzk3CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0
ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKIAotICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24o
V1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUpLCBX
VEY6Ok9uZUJhc2VkTnVtYmVyOjpiYXNlKCkpOworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbihP
cmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIE9yZGluYWxO
dW1iZXI6OmZpcnN0KCkpOwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNj
cmlwdChTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikp
LnY4VmFsdWUoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107883</attachid>
            <date>2011-09-19 10:52:08 -0700</date>
            <delta_ts>2011-09-19 11:44:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63541-20110919215205.patch</filename>
            <type>text/plain</type>
            <size>81050</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU0MTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGRi
MzY5MDM3ZTUyOTMzODUxODU0ZjQ2ZjcxN2QwZGExMWI4Y2U3MzUuLjViNjVkOWMyZTEzMjdjZmQ1
Yjc4N2U1YjVhYjdjM2E2NjNjNWE0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2IEBACisyMDExLTA5LTE5ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNv
bT4KKworICAgICAgICBUZXh0UG9zaXRpb24gcmVmYWN0b3Jpbmc6IE1lcmdlIFplcm9CYXNlZE51
bWJlciBhbmQgT25lQmFzZWROdW1iZXIgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAg
ICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6c3RhcnRQb3NpdGlvbik6CisgICAgICAgICogd3RmL3Rl
eHQvVGV4dFBvc2l0aW9uLmg6CisgICAgICAgIChXVEY6Ok9yZGluYWxOdW1iZXI6OmZyb21aZXJv
QmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQp
OgorICAgICAgICAoV1RGOjpPcmRpbmFsTnVtYmVyOjpPcmRpbmFsTnVtYmVyKToKKyAgICAgICAg
KFdURjo6T3JkaW5hbE51bWJlcjo6emVyb0Jhc2VkSW50KToKKyAgICAgICAgKFdURjo6T3JkaW5h
bE51bWJlcjo6b25lQmFzZWRJbnQpOgorICAgICAgICAoV1RGOjpPcmRpbmFsTnVtYmVyOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdURjo6T3JkaW5hbE51bWJlcjo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChXVEY6Ok9yZGluYWxOdW1iZXI6OmZpcnN0KToKKyAgICAgICAgKFdURjo6T3JkaW5hbE51
bWJlcjo6YmVmb3JlRmlyc3QpOgorICAgICAgICAoV1RGOjpUZXh0UG9zaXRpb246OlRleHRQb3Np
dGlvbik6CisgICAgICAgIChXVEY6OlRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKToKKyAg
ICAgICAgKFdURjo6VGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24pOgorCiAyMDExLTA5
LTE5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBGaXggZGlzdGNoZWNrIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZVByb3ZpZGVyLmgKaW5kZXggOThiYjZiMTM5ZDE2NmM0NTQ1NzExMWE0OTBlNDI3
NzcyOGUyOWRhYy4uM2I5MmI5MDMxNmQ2NzVhOTIwNTM3MjZiNWExYTM0OWU5MWRhN2U0OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaApAQCAtNTks
NyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBpbnQgbGVuZ3RoKCkg
Y29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJsKCkgeyByZXR1
cm4gbV91cmw7IH0KLSAgICAgICAgdmlydHVhbCBUZXh0UG9zaXRpb24xIHN0YXJ0UG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBUZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKTsgfQorICAg
ICAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
VGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKTsgfQogICAgICAgICBpbnRwdHJfdCBhc0lE
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odGhpcyk7IH0KIAogICAgICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRlZDsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1RleHRQb3NpdGlvbi5oCmluZGV4IDJiMDdmZjc1OGM1
YjIyNzE0MjVjYmQxNzY2ZDA2OGU2OWZjN2M0MGYuLjFmMGU4ZTU4OWI3YzZjOTk2NzNmYTY4YjI2
N2VmNGZlZjdiZGE3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4
dC9UZXh0UG9zaXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvVGV4
dFBvc2l0aW9uLmgKQEAgLTI5LDEyNCArMjksNTcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLS8q
Ci0gKiBUZXh0IFBvc2l0aW9uCi0gKgotICogVGV4dFBvc2l0aW9uIHN0cnVjdHVyZSBzcGVjaWZp
ZXMgY29vcmRpbmF0ZXMgd2l0aGluIGFuIHRleHQgcmVzb3VyY2UuIEl0IGlzIHVzZWQgbW9zdGx5
Ci0gKiBmb3Igc2F2aW5nIHNjcmlwdCBzb3VyY2UgcG9zaXRpb24uCi0gKgotICogTGF0ZXIgVGV4
dFBvc2l0aW9uMCBhbmQgVGV4dFBvc2l0aW9uMSBhbmQgYm90aCBudW1iZXIgdHlwZXMgY2FuIGJl
IG1lcmdlZCB0b2dldGhlciBxdWl0ZSBlYXNpbHkuCi0gKgotICogMC1iYXNlZCBhbmQgMS1iYXNl
ZAotICoKLSAqIExpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGNvdWxkIGJlIGludGVycHJldGVkIGFz
IHplcm8tYmFzZWQgb3IgMS1iYXNlZC4gU2luY2UKLSAqIGJvdGggcHJhY3RpY2VzIGNvZXhpc3Qg
aW4gV2ViS2l0IHNvdXJjZSBiYXNlLCAnaW50JyB0eXBlIHNob3VsZCBiZSByZXBsYWNlZCB3aXRo
Ci0gKiBhIGRlZGljYXRlZCB3cmFwcGVyIHR5cGVzLCBzbyB0aGF0IGNvbXBpbGVyIGhlbHBlZCB1
cyB3aXRoIHRoaXMgYW1iaWd1aXR5LgotICoKLSAqIEhlcmUgd2UgaW50cm9kdWNlIDIgdHlwZXMg
b2YgbnVtYmVyczogWmVyb0Jhc2VkTnVtYmVyIGFuZCBPbmVCYXNlZE51bWJlciBhbmQKLSAqIDIg
Y29ycmVzcG9uZGluZyB0eXBlcyBvZiBUZXh0UG9zaXRpb24gc3RydWN0dXJlLiBXaGlsZSBvbmx5
IG9uZSB0eXBlIG91Z2h0IHRvIGJlIGVub3VnaCwKLSAqIHRoaXMgaXMgZG9uZSB0byBrZWVwIHRy
YW5zaXRpb24gdG8gdGhlIG5ldyB0eXBlcyBhcyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZToKLSAq
IGUuZy4gaW4gYXJlYXMgd2hlcmUgMC1iYXNlZCBpbnRlZ2VycyBhcmUgdXNlZCwgVGV4dFBvc2l0
aW9uMCBzaG91bGQgYmUgaW50cm9kdWNlZC4gVGhpcwotICogd2F5IGFsbCBjaGFuZ2VzIHdpbGwg
cmVtYWluIHRyYWNrYWJsZS4KLSAqCi0gKiBMYXRlciBib3RoIG51bWJlciB0eXBlcyBjYW4gYmUg
bWVyZ2VkIGluIG9uZSB0eXBlIHF1aXRlIGVhc2lseS4KLSAqCi0gKiBGb3IgdHlwZSBzYWZldHkg
YW5kIGZvciB0aGUgZnV0dXJlIHR5cGUgbWVyZ2UgaXQgaXMgaW1wb3J0YW50IHRoYXQgYWxsIG9w
ZXJhdGlvbnMgaW4gQVBJCi0gKiB0aGF0IGFjY2VwdCBvciByZXR1cm4gaW50ZWdlciBoYXZlIGEg
bmFtZSBleHBsaWNpdGx5IGRlZmluaW5nIGJhc2Ugb2YgaW50ZWdlci4gRm9yIHRoaXMgcmVhc29u
Ci0gKiBpbnQtcmVjZWl2aW5nIGNvbnN0cnVjdG9ycyBhcmUgaGlkZGVuIGZyb20gQVBJLgotICov
CisvLyBBbiBhYnN0cmFjdCBudW1iZXIgb2YgZWxlbWVudCBpbiBhIHNlcXVlbmNlLiBUaGUgc2Vx
dWVuY2UgaGFzIGEgZmlyc3QgZWxlbWVudC4KKy8vIFRoaXMgdHlwZSBzaG91bGQgYmUgdXNlZCBp
bnN0ZWFkIG9mIGludGVnZXIgYmVjYXVzZSAyIGNvbnRyYWRpY3RpbmcgdHJhZGl0aW9ucyBjYW4K
Ky8vIGNhbGwgYSBmaXJzdCBlbGVtZW50ICcwJyBvciAnMScgd2hpY2ggbWFrZXMgaW50ZWdlciB0
eXBlIGFtYmlndW91cy4KK2NsYXNzIE9yZGluYWxOdW1iZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBPcmRpbmFsTnVtYmVyIGZyb21aZXJvQmFzZWRJbnQoaW50IHplcm9CYXNlZEludCkgeyByZXR1
cm4gT3JkaW5hbE51bWJlcih6ZXJvQmFzZWRJbnQpOyB9CisgICAgc3RhdGljIE9yZGluYWxOdW1i
ZXIgZnJvbU9uZUJhc2VkSW50KGludCBvbmVCYXNlZEludCkgeyByZXR1cm4gT3JkaW5hbE51bWJl
cihvbmVCYXNlZEludCAtIDEpOyB9CisgICAgT3JkaW5hbE51bWJlcigpIHsgfQorCisgICAgaW50
IHplcm9CYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1femVyb0Jhc2VkVmFsdWU7IH0KKyAgICBp
bnQgb25lQmFzZWRJbnQoKSBjb25zdCB7IHJldHVybiBtX3plcm9CYXNlZFZhbHVlICsgMTsgfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgb3BlcmF0b3I9PShPcmRpbmFsTnVtYmVy
IG90aGVyKSB7IHJldHVybiBtX3plcm9CYXNlZFZhbHVlID09IG90aGVyLm1femVyb0Jhc2VkVmFs
dWU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oT3JkaW5hbE51bWJlciBvdGhlcikgeyByZXR1cm4g
ISgoKnRoaXMpID09IG90aGVyKTsgfQorCisgICAgc3RhdGljIE9yZGluYWxOdW1iZXIgZmlyc3Qo
KSB7IHJldHVybiBPcmRpbmFsTnVtYmVyKDApOyB9CisgICAgc3RhdGljIE9yZGluYWxOdW1iZXIg
YmVmb3JlRmlyc3QoKSB7IHJldHVybiBPcmRpbmFsTnVtYmVyKC0xKTsgfQorCitwcml2YXRlOgor
ICAgIE9yZGluYWxOdW1iZXIoaW50IHplcm9CYXNlZEludCkgOiBtX3plcm9CYXNlZFZhbHVlKHpl
cm9CYXNlZEludCkgeyB9CisgICAgaW50IG1femVyb0Jhc2VkVmFsdWU7Cit9OworCisKKy8vIFRl
eHRQb3NpdGlvbiBzdHJ1Y3R1cmUgc3BlY2lmaWVzIGNvb3JkaW5hdGVzIHdpdGhpbiBhbiB0ZXh0
IHJlc291cmNlLiBJdCBpcyB1c2VkIG1vc3RseQorLy8gZm9yIHNhdmluZyBzY3JpcHQgc291cmNl
IHBvc2l0aW9uLgogY2xhc3MgVGV4dFBvc2l0aW9uIHsKIHB1YmxpYzoKLSAgICBUZXh0UG9zaXRp
b24oVCBsaW5lLCBUIGNvbHVtbikKKyAgICBUZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlciBsaW5l
LCBPcmRpbmFsTnVtYmVyIGNvbHVtbikKICAgICAgICAgOiBtX2xpbmUobGluZSkKICAgICAgICAg
LCBtX2NvbHVtbihjb2x1bW4pCiAgICAgewogICAgIH0KLSAgICBUZXh0UG9zaXRpb24oKSB7fQor
ICAgIFRleHRQb3NpdGlvbigpIHsgfQogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0UG9z
aXRpb24mIG90aGVyKSB7IHJldHVybiBtX2xpbmUgPT0gb3RoZXIubV9saW5lICYmIG1fY29sdW1u
ID09IG90aGVyLm1fY29sdW1uOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRQb3Np
dGlvbiYgb3RoZXIpIHsgcmV0dXJuICEoKCp0aGlzKSA9PSBvdGhlcik7IH0KIAogICAgIC8vIEEg
J21pbmltdW0nIHZhbHVlIG9mIHBvc2l0aW9uLCB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZS4KLSAg
ICBzdGF0aWMgVGV4dFBvc2l0aW9uPFQ+IG1pbmltdW1Qb3NpdGlvbigpIHsgcmV0dXJuIFRleHRQ
b3NpdGlvbjxUPihUOjpiYXNlKCksIFQ6OmJhc2UoKSk7IH0KKyAgICBzdGF0aWMgVGV4dFBvc2l0
aW9uIG1pbmltdW1Qb3NpdGlvbigpIHsgcmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVy
OjpmaXJzdCgpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsgfQogCiAgICAgLy8gQSB2YWx1ZSB3
aXRoIGxpbmUgdmFsdWUgbGVzcyB0aGFuIGEgbWluaW11bTsgdXNlZCBhcyBhbiBpbXBvc3NpYmxl
IHBvc2l0aW9uLgotICAgIHN0YXRpYyBUZXh0UG9zaXRpb248VD4gYmVsb3dSYW5nZVBvc2l0aW9u
KCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uPFQ+KFQ6OmJlbG93QmFzZSgpLCBUOjpiZWxvd0Jhc2Uo
KSk7IH0KLQotICAgIFQgbV9saW5lOwotICAgIFQgbV9jb2x1bW47Ci19OwotCi1jbGFzcyBPbmVC
YXNlZE51bWJlcjsKLQotLy8gQW4gaW50IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3Ug
dGhhdCB0aGUgbnVtYmVyIHNob3VsZCBiZSAwLWJhc2VkCi1jbGFzcyBaZXJvQmFzZWROdW1iZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBaZXJvQmFzZWROdW1iZXIgZnJvbVplcm9CYXNlZEludChp
bnQgemVyb0Jhc2VkSW50KSB7IHJldHVybiBaZXJvQmFzZWROdW1iZXIoemVyb0Jhc2VkSW50KTsg
fQotCi0gICAgWmVyb0Jhc2VkTnVtYmVyKCkge30KLQotICAgIGludCB6ZXJvQmFzZWRJbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgaW50IGNvbnZlcnRBc09uZUJhc2VkSW50KCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZSArIDE7IH0KLSAgICBPbmVCYXNlZE51bWJlciBjb252ZXJ0
VG9PbmVCYXNlZCgpIGNvbnN0OworICAgIHN0YXRpYyBUZXh0UG9zaXRpb24gYmVsb3dSYW5nZVBv
c2l0aW9uKCkgeyByZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0
KCksIE9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCkpOyB9CiAKLSAgICBib29sIG9wZXJhdG9y
PT0oWmVyb0Jhc2VkTnVtYmVyIG90aGVyKSB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFs
dWU7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oWmVyb0Jhc2VkTnVtYmVyIG90aGVyKSB7IHJldHVy
biAhKCgqdGhpcykgPT0gb3RoZXIpOyB9Ci0KLSAgICBzdGF0aWMgWmVyb0Jhc2VkTnVtYmVyIGJh
c2UoKSB7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIFplcm9CYXNlZE51bWJlciBiZWxvd0Jhc2Uo
KSB7IHJldHVybiAtMTsgfQotCi1wcml2YXRlOgotICAgIFplcm9CYXNlZE51bWJlcihpbnQgdmFs
dWUpIDogbV92YWx1ZSh2YWx1ZSkge30KLSAgICBpbnQgbV92YWx1ZTsKKyAgICBPcmRpbmFsTnVt
YmVyIG1fbGluZTsKKyAgICBPcmRpbmFsTnVtYmVyIG1fY29sdW1uOwogfTsKIAotLy8gQW4gaW50
IHdyYXBwZXIgdGhhdCBhbHdheXMgcmVtaW5kcyB5b3UgdGhhdCB0aGUgbnVtYmVyIHNob3VsZCBi
ZSAxLWJhc2VkCi1jbGFzcyBPbmVCYXNlZE51bWJlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIE9u
ZUJhc2VkTnVtYmVyIGZyb21PbmVCYXNlZEludChpbnQgb25lQmFzZWRJbnQpIHsgcmV0dXJuIE9u
ZUJhc2VkTnVtYmVyKG9uZUJhc2VkSW50KTsgfQotICAgIE9uZUJhc2VkTnVtYmVyKCkge30KLQot
ICAgIGludCBvbmVCYXNlZEludCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICBpbnQg
Y29udmVydEFzWmVyb0Jhc2VkSW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAtIDE7IH0KLSAg
ICBaZXJvQmFzZWROdW1iZXIgY29udmVydFRvWmVyb0Jhc2VkKCkgY29uc3QgeyByZXR1cm4gWmVy
b0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KG1fdmFsdWUgLSAxKTsgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj09KE9uZUJhc2VkTnVtYmVyIG90aGVyKSB7IHJldHVybiBtX3ZhbHVlID09IG90
aGVyLm1fdmFsdWU7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oT25lQmFzZWROdW1iZXIgb3RoZXIp
IHsgcmV0dXJuICEoKCp0aGlzKSA9PSBvdGhlcik7IH0KLQotICAgIHN0YXRpYyBPbmVCYXNlZE51
bWJlciBiYXNlKCkgeyByZXR1cm4gMTsgfQotICAgIHN0YXRpYyBPbmVCYXNlZE51bWJlciBiZWxv
d0Jhc2UoKSB7IHJldHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgT25lQmFzZWROdW1iZXIoaW50
IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHt9Ci0gICAgaW50IG1fdmFsdWU7Ci19OwotCi10eXBl
ZGVmIFRleHRQb3NpdGlvbjxaZXJvQmFzZWROdW1iZXI+IFRleHRQb3NpdGlvbjA7Ci10eXBlZGVm
IFRleHRQb3NpdGlvbjxPbmVCYXNlZE51bWJlcj4gVGV4dFBvc2l0aW9uMTsKLQotaW5saW5lIFRl
eHRQb3NpdGlvbjAgdG9aZXJvQmFzZWRUZXh0UG9zaXRpb24oY29uc3QgVGV4dFBvc2l0aW9uMSYg
cG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjAocG9zaXRpb24ubV9saW5lLmNv
bnZlcnRUb1plcm9CYXNlZCgpLCBwb3NpdGlvbi5tX2NvbHVtbi5jb252ZXJ0VG9aZXJvQmFzZWQo
KSk7Ci19Ci0KLWlubGluZSBUZXh0UG9zaXRpb24xIHRvT25lQmFzZWRUZXh0UG9zaXRpb24oY29u
c3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjEo
cG9zaXRpb24ubV9saW5lLmNvbnZlcnRUb09uZUJhc2VkKCksIHBvc2l0aW9uLm1fY29sdW1uLmNv
bnZlcnRUb09uZUJhc2VkKCkpOwotfQotCi1pbmxpbmUgT25lQmFzZWROdW1iZXIgWmVyb0Jhc2Vk
TnVtYmVyOjpjb252ZXJ0VG9PbmVCYXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE9uZUJhc2Vk
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobV92YWx1ZSArIDEpOwotfQotCiB9CiAKLXVzaW5nIFdU
Rjo6VGV4dFBvc2l0aW9uMDsKLXVzaW5nIFdURjo6VGV4dFBvc2l0aW9uMTsKK3VzaW5nIFdURjo6
T3JkaW5hbE51bWJlcjsKIAotdXNpbmcgV1RGOjpaZXJvQmFzZWROdW1iZXI7Ci11c2luZyBXVEY6
Ok9uZUJhc2VkTnVtYmVyOwordXNpbmcgV1RGOjpUZXh0UG9zaXRpb247CiAKICNlbmRpZiAvLyBU
ZXh0UG9zaXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDlmZmEwMzZlNGM4ZDUzY2I0OTM4ODExZGY3MGVk
OTU5NGI0YmM2ZmIuLjU5MmQxNjM0ZmQxYTFmYmRhNGE0ZGViNWM5OTQ3NGEzOWZiMDdiNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMzEgQEAKKzIwMTEtMDktMTkgIFBldGVyIFJ5YmluICA8cGV0
ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFRleHRQb3NpdGlvbiByZWZhY3RvcmluZzog
TWVyZ2UgWmVyb0Jhc2VkTnVtYmVyIGFuZCBPbmVCYXNlZE51bWJlciBjbGFzc2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzU0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNh
dXNlIHRoaXMgcGF0Y2ggaXMgbm90IGNoYW5naW5nIGJlaGF2aW9yLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpKYXZhU2NyaXB0Q2FsbEZyYW1lKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFt
ZTo6cG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6dXBk
YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFuZGxlckxpbmVOdW1iZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpjcmVhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJh
bWVBbmRQYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OlNjcmlwdFNvdXJjZUNvZGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z1NvdXJjZVByb3ZpZGVyOjpzdGFydFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z1NvdXJjZVByb3ZpZGVyOjpTdHJpbmdTb3VyY2VQcm92aWRlcik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFj
dGlvbjo6U2NoZWR1bGVkQWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2ZW50SGFu
ZGxlclBvc2l0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3Vy
Y2VDb2RlOjpTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJj
ZUNvZGU6OnN0YXJ0UG9zaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6VjhM
YXp5RXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0
ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmNvbXBpbGVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6cnVuU2NyaXB0KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOFByb3h5Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5OjpydW5TY3JpcHQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUpOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIpOgorICAgICAg
ICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0
OjpQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnN0YXJ0
aW5nUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6c2V0U3RhcnRp
bmdQb3NpdGlvbik6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6cHJlcGFyZVNjcmlwdCk6CisgICAgICAgICogZG9tL1Nj
cmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmg6
CisgICAgICAgICogZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlckxpbmVOdW1iZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlw
dHNGb3JQYXVzZWRUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQ
YXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFy
c2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6
dGV4dFBvc2l0aW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
aDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0uaDoKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
Y3JpcHRSdW5uZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5l
cjo6cnVuU2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpidWls
ZEluaXRpYXRvck9iamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpjdXJyZW50TGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OmN1cnJlbnRDb2x1bW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjpzZXRDdXJyZW50UG9zaXRpb24pOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmg6CisgICAgICAgICogc3ZnL1NW
R0RvY3VtZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZXJMaW5lTnVt
YmVyKToKKyAgICAgICAgKiB4bWwvWE1MRXJyb3JzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEVycm9yczo6WE1MRXJyb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEVycm9yczo6aGFuZGxl
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRXJyb3JzOjphcHBlbmRFcnJvck1lc3NhZ2Up
OgorICAgICAgICAqIHhtbC9YTUxFcnJvcnMuaDoKKyAgICAgICAgKiB4bWwvcGFyc2VyL01hcmt1
cFRva2VuaXplckJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cFRva2VuaXplckJhc2U6
OmxpbmVOdW1iZXIpOgorICAgICAgICAqIHhtbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV3WE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6TmV3WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpOZXdYTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcik6
CisgICAgICAgICogeG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAq
IHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxE
b2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nQ2FsbGJhY2tzOjphcHBlbmRFcnJv
ckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1
bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbik6CisgICAgICAgICogeG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFy
c2VyOjpYTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBh
cnNlcjo6ZG9Xcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9F
bmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbnQpOgorCiAyMDExLTA5LTE5ICBJbHlh
IFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBkaWRNYXJrRE9NQ29udGVudEV2ZW50KCkgc2hvdWxkIHNlbmQgZXZlbnQgb2YgTWFya0RP
TUNvbnRlbnQgdHlwZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNj
cmlwdENhbGxGcmFtZS5jcHAKaW5kZXggNWM0Yjk1ZDUyOTA0M2I1MWEyN2Y5YmJhNDM5MmUzMjVm
NzRmYTEwOC4uMjliNzM5OTg3ZWZiN2IxODFkMzAyYzFiYzU4MmRhZGYzNjhjOWQ1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAK
QEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIAotSmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2YVNjcmlwdENhbGxGcmFtZShjb25z
dCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNj
cmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0
aW9uMCYgdGV4dFBvc2l0aW9uKQorSmF2YVNjcmlwdENhbGxGcmFtZTo6SmF2YVNjcmlwdENhbGxG
cmFtZShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQ
dHI8SmF2YVNjcmlwdENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3Qg
VGV4dFBvc2l0aW9uJiB0ZXh0UG9zaXRpb24pCiAgICAgOiBtX2RlYnVnZ2VyQ2FsbEZyYW1lKGRl
YnVnZ2VyQ2FsbEZyYW1lKQogICAgICwgbV9jYWxsZXIoY2FsbGVyKQogICAgICwgbV9zb3VyY2VJ
RChzb3VyY2VJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFT
Y3JpcHRDYWxsRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRD
YWxsRnJhbWUuaAppbmRleCBmM2ExMTRiOTBiZWFhMGEzMzRhZjVjMDMzN2Y1YWRlZGUzYTMwOTUw
Li5hNTgxYzRmYzdiMjdkMmZhYzc5MDZiOGE5ZmIzMDFjNjNmZmIwZGRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5oCkBAIC0zOSw3ICsz
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZSA6
IHB1YmxpYyBSZWZDb3VudGVkPEphdmFTY3JpcHRDYWxsRnJhbWU+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjcmVhdGUoY29uc3QgSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIFBhc3NSZWZQdHI8SmF2YVNjcmlw
dENhbGxGcmFtZT4gY2FsbGVyLCBpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9u
MCYgdGV4dFBvc2l0aW9uKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJh
bWU+IGNyZWF0ZShjb25zdCBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFt
ZSwgUGFzc1JlZlB0cjxKYXZhU2NyaXB0Q2FsbEZyYW1lPiBjYWxsZXIsIGludHB0cl90IHNvdXJj
ZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHRleHRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSmF2YVNjcmlwdENhbGxGcmFtZShkZWJ1Z2dlckNhbGxGcmFtZSwg
Y2FsbGVyLCBzb3VyY2VJRCwgdGV4dFBvc2l0aW9uKSk7CiAgICAgfQpAQCAtNTUsMTEgKzU1LDEx
IEBAIHB1YmxpYzoKICAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKiBjYWxsZXIoKTsKIAogICAgIGlu
dHB0cl90IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJRDsgfQotICAgIGNvbnN0
IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UG9zaXRpb247
IH0KKyAgICBjb25zdCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0UG9zaXRpb247IH0KICAgICBpbnQgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFBvc2l0
aW9uLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsgfQogICAgIGludCBjb2x1bW4oKSBjb25zdCB7IHJl
dHVybiBtX3RleHRQb3NpdGlvbi5tX2NvbHVtbi56ZXJvQmFzZWRJbnQoKTsgfQogCi0gICAgdm9p
ZCB1cGRhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUs
IGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24wJiB0ZXh0UG9zaXRpb24pCisg
ICAgdm9pZCB1cGRhdGUoY29uc3QgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxs
RnJhbWUsIGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mIHRleHRQb3NpdGlv
bikKICAgICB7CiAgICAgICAgIG1fZGVidWdnZXJDYWxsRnJhbWUgPSBkZWJ1Z2dlckNhbGxGcmFt
ZTsKICAgICAgICAgbV90ZXh0UG9zaXRpb24gPSB0ZXh0UG9zaXRpb247CkBAIC03NiwxMiArNzYs
MTIgQEAgcHVibGljOgogICAgIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShjb25zdCBKU0M6OlVTdHJp
bmcmIHNjcmlwdCwgSlNDOjpKU1ZhbHVlJiBleGNlcHRpb24pIGNvbnN0OwogICAgIAogcHJpdmF0
ZToKLSAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUm
LCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+IGNhbGxlciwgaW50cHRyX3Qgc291cmNl
SUQsIGNvbnN0IFRleHRQb3NpdGlvbjAmKTsKKyAgICBKYXZhU2NyaXB0Q2FsbEZyYW1lKGNvbnN0
IEpTQzo6RGVidWdnZXJDYWxsRnJhbWUmLCBQYXNzUmVmUHRyPEphdmFTY3JpcHRDYWxsRnJhbWU+
IGNhbGxlciwgaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYpOwogCiAgICAg
SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSBtX2RlYnVnZ2VyQ2FsbEZyYW1lOwogICAgIFJlZlB0cjxK
YXZhU2NyaXB0Q2FsbEZyYW1lPiBtX2NhbGxlcjsKICAgICBpbnRwdHJfdCBtX3NvdXJjZUlEOwot
ICAgIFRleHRQb3NpdGlvbjAgbV90ZXh0UG9zaXRpb247CisgICAgVGV4dFBvc2l0aW9uIG1fdGV4
dFBvc2l0aW9uOwogICAgIGJvb2wgbV9pc1ZhbGlkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCBmMGQ1ZWJhODc3OThiMmY0
OTIyNDdkNzk4NmQyZjViMzllZGIwZjY3Li44YjNmMDViMGRkMDg4MWEyZDkzMjVlOGM4ZDAyNGJk
YjVlODI3NzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIGludCBTY3JpcHRDb250cm9sbGVyOjpldmVu
dEhhbmRsZXJMaW5lTnVtYmVyKCkgY29uc3QKICAgICAvLyBKU0MgZXhwZWN0cyAxLWJhc2VkIGxp
bmUgbnVtYmVycywgc28gd2UgbXVzdCBhZGQgb25lIGhlcmUgdG8gZ2V0IGl0IHJpZ2h0LgogICAg
IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogcGFyc2VyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7CiAgICAgaWYgKHBhcnNlcikKLSAgICAgICAgcmV0
dXJuIHBhcnNlci0+bGluZU51bWJlcigpLmNvbnZlcnRBc09uZUJhc2VkSW50KCk7CisgICAgICAg
IHJldHVybiBwYXJzZXItPmxpbmVOdW1iZXIoKS5vbmVCYXNlZEludCgpOwogICAgIHJldHVybiAw
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1
Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5jcHAKaW5kZXggN2Q0OGIwMDhmYTNiZDlkOWFhNjQwNGQyY2EwM2Q3M2FjY2ZiNjRkMi4uN2My
ZDhmYzdmNmE2YTdjNGEwMjBkODQxNjM0YWY5MDdlM2E5NjBlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMTAyLDcgKzEwMiw3
IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBicmVha3BvaW50SWQpCiAgICAgICAgIGl0LT5zZWNvbmQucmVtb3ZlKGxpbmVOdW1iZXIgKyAx
KTsKIH0KIAotYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzQnJlYWtwb2ludChpbnRwdHJfdCBz
b3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uMCYgcG9zaXRpb24pIGNvbnN0Citib29sIFNjcmlw
dERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGludHB0cl90IHNvdXJjZUlELCBjb25zdCBUZXh0
UG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICghbV9icmVha3BvaW50c0FjdGl2
YXRlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgU2Ny
aXB0RGVidWdTZXJ2ZXI6Omhhc0JyZWFrcG9pbnQoaW50cHRyX3Qgc291cmNlSUQsIGNvbnN0IFRl
eHRQb3NpdGlvbjAmIHBvCiAgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSUQpOwogICAgIGlm
IChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGludCBsaW5lTnVtYmVyID0gcG9zaXRpb24ubV9saW5lLmNvbnZlcnRBc09uZUJh
c2VkSW50KCk7CisgICAgaW50IGxpbmVOdW1iZXIgPSBwb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJ
bnQoKTsKICAgICBpZiAobGluZU51bWJlciA8PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgTGluZVRvQnJlYWtwb2ludE1hcDo6Y29uc3RfaXRlcmF0b3IgYnJlYWtJdCA9IGl0LT5zZWNv
bmQuZmluZChsaW5lTnVtYmVyKTsKQEAgLTIyNiw4ICsyMjYsOCBAQCB2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpkaXNwYXRjaERpZFBhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5l
cnMsIFNvdQogICAgIFNjcmlwdERlYnVnTGlzdGVuZXI6OlNjcmlwdCBzY3JpcHQ7CiAgICAgc2Ny
aXB0LnVybCA9IHVzdHJpbmdUb1N0cmluZyhzb3VyY2VQcm92aWRlci0+dXJsKCkpOwogICAgIHNj
cmlwdC5zb3VyY2UgPSB1c3RyaW5nVG9TdHJpbmcoSlNDOjpVU3RyaW5nKHNvdXJjZVByb3ZpZGVy
LT5kYXRhKCksIHNvdXJjZVByb3ZpZGVyLT5sZW5ndGgoKSkpOwotICAgIHNjcmlwdC5zdGFydExp
bmUgPSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigpLm1fbGluZS5jb252ZXJ0QXNaZXJv
QmFzZWRJbnQoKTsKLSAgICBzY3JpcHQuc3RhcnRDb2x1bW4gPSBzb3VyY2VQcm92aWRlci0+c3Rh
cnRQb3NpdGlvbigpLm1fY29sdW1uLmNvbnZlcnRBc1plcm9CYXNlZEludCgpOworICAgIHNjcmlw
dC5zdGFydExpbmUgPSBzb3VyY2VQcm92aWRlci0+c3RhcnRQb3NpdGlvbigpLm1fbGluZS56ZXJv
QmFzZWRJbnQoKTsKKyAgICBzY3JpcHQuc3RhcnRDb2x1bW4gPSBzb3VyY2VQcm92aWRlci0+c3Rh
cnRQb3NpdGlvbigpLm1fY29sdW1uLnplcm9CYXNlZEludCgpOwogICAgIHNjcmlwdC5pc0NvbnRl
bnRTY3JpcHQgPSBpc0NvbnRlbnRTY3JpcHQ7CiAKICAgICBpbnQgc291cmNlTGVuZ3RoID0gc2Ny
aXB0LnNvdXJjZS5sZW5ndGgoKTsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFNjcmlwdERlYnVn
U2VydmVyOjpkaXNwYXRjaEZ1bmN0aW9uVG9MaXN0ZW5lcnMoSmF2YVNjcmlwdEV4ZWN1dGlvbkNh
bGxiYWNrCiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmNyZWF0ZUNhbGxGcmFtZUFuZFBhdXNl
SWZOZWVkZWQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1lLCBpbnRw
dHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCiB7Ci0gICAgVGV4dFBvc2l0aW9uMCB0ZXh0
UG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIp
LmNvbnZlcnRUb1plcm9CYXNlZCgpLCBXVEY6Olplcm9CYXNlZE51bWJlcjo6YmFzZSgpKTsKKyAg
ICBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZElu
dChsaW5lTnVtYmVyKSwgT3JkaW5hbE51bWJlcjo6Zmlyc3QoKSk7CiAgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gSmF2YVNjcmlwdENhbGxGcmFtZTo6Y3JlYXRlKGRlYnVnZ2VyQ2FsbEZyYW1lLCBt
X2N1cnJlbnRDYWxsRnJhbWUsIHNvdXJjZUlELCB0ZXh0UG9zaXRpb24pOwogICAgIHBhdXNlSWZO
ZWVkZWQoZGVidWdnZXJDYWxsRnJhbWUuZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKIH0KQEAgLTMz
OSw3ICszMzksNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjp1cGRhdGVDYWxsRnJhbWVBbmRQ
YXVzZUlmTmVlZGVkKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJgogICAgIGlmICghbV9jdXJyZW50
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0UG9zaXRpb24wIHRleHRQb3Np
dGlvbihXVEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQobGluZU51bWJlcikuY29u
dmVydFRvWmVyb0Jhc2VkKCksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKCkpOworICAgIFRl
eHRQb3NpdGlvbiB0ZXh0UG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGxp
bmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKICAgICBtX2N1cnJlbnRDYWxsRnJh
bWUtPnVwZGF0ZShkZWJ1Z2dlckNhbGxGcmFtZSwgc291cmNlSUQsIHRleHRQb3NpdGlvbik7CiAg
ICAgcGF1c2VJZk5lZWRlZChkZWJ1Z2dlckNhbGxGcmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgK
aW5kZXggMWFiYmRlNWEwMDA4MmEzOWMyMzk0YTg0NDNkN2Q4NTZhYzNiNmU3ZC4uYzNkZGQ2YzZi
MjFkMmE5MTA2MzY2YTYwODZkNThjMTU1MWI2OTI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC05Niw3ICs5Niw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGF1c2UoSlNDOjpKU0dsb2JhbE9iamVjdCopID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoSlNDOjpKU0dsb2JhbE9iamVjdCopID0gMDsK
IAotICAgIGJvb2wgaGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJRCwgY29uc3QgVGV4dFBv
c2l0aW9uMCYpIGNvbnN0OworICAgIGJvb2wgaGFzQnJlYWtwb2ludChpbnRwdHJfdCBzb3VyY2VJ
RCwgY29uc3QgVGV4dFBvc2l0aW9uJikgY29uc3Q7CiAKICAgICB2b2lkIGRpc3BhdGNoRnVuY3Rp
b25Ub0xpc3RlbmVycyhKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2ssIEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKICAgICB2b2lkIGRpc3BhdGNoRnVuY3Rpb25Ub0xpc3RlbmVycyhjb25zdCBMaXN0
ZW5lclNldCYgbGlzdGVuZXJzLCBKYXZhU2NyaXB0RXhlY3V0aW9uQ2FsbGJhY2sgY2FsbGJhY2sp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29k
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oCmluZGV4
IDM3M2RiMzEzYzUyY2I3OTE0MmY5OTY1YjFjNDZlN2RkZTk5NDVhMWQuLmZlNWFiN2IwNDc0ZGRk
MDc2OGNjMjk2OTMxYzlkMDBmNWMyOGExZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTb3VyY2VDb2RlLmgKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRTb3Vy
Y2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNv
bnN0IFRleHRQb3NpdGlvbjEmIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjptaW5pbXVt
UG9zaXRpb24oKSkKKyAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBj
b25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlv
biA9IFRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9wcm92aWRl
cihTdHJpbmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLmlzTnVsbCgpID8gU3Ry
aW5nKCkgOiB1cmwuc3RyaW5nKCksIHN0YXJ0UG9zaXRpb24pKQogICAgICAgICAsIG1fY29kZSht
X3Byb3ZpZGVyLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpKQogICAgICAgICAs
IG1fdXJsKHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmlu
Z1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3Vy
Y2VQcm92aWRlci5oCmluZGV4IGUyM2ZlNWMzNTdiNDU3MTg2NTQ4Y2EwYjc1MWU5OTgwOWNlYzM5
OGMuLmJkZWI5ODYwZDYyYjBiMjQ2Njc4NWY4NzZhNDE2NGE3MzI3NzM3N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaApAQCAtMzcs
MjYgKzM3LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFN0cmluZ1NvdXJj
ZVByb3ZpZGVyIDogcHVibGljIFNjcmlwdFNvdXJjZVByb3ZpZGVyIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ1NvdXJjZVByb3ZpZGVyPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24x
JiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCkpCisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ1NvdXJjZVByb3ZpZGVyPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0
YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbigpKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ1NvdXJjZVByb3ZpZGVyKHNv
dXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFs
IFRleHRQb3NpdGlvbjEgc3RhcnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRQb3Np
dGlvbjsgfQorICAgICAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CiAgICAgICAgIEpTQzo6VVN0cmluZyBnZXRS
YW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0IHsgcmV0dXJuIEpTQzo6VVN0cmluZyhtX3Nv
dXJjZS5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgZW5kIC0gc3RhcnQpOyB9CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuY2hhcmFjdGVycygpOyB9CiAg
ICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5sZW5ndGgoKTsgfQog
ICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICBTdHJpbmdTb3VyY2VQcm92aWRlcihjb25zdCBTdHJp
bmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHN0YXJ0
UG9zaXRpb24pCisgICAgICAgIFN0cmluZ1NvdXJjZVByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc291
cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9u
KQogICAgICAgICAgICAgOiBTY3JpcHRTb3VyY2VQcm92aWRlcihzdHJpbmdUb1VTdHJpbmcodXJs
KSkKICAgICAgICAgICAgICwgbV9zdGFydFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pCiAgICAgICAg
ICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgVGV4dFBvc2l0
aW9uIG1fc3RhcnRQb3NpdGlvbjsKICAgICAgICAgU3RyaW5nIG1fc291cmNlOwogICAgIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCmluZGV4
IGRjMGZlNDQ4Nzk3YjFlY2JhZjY4MGE2OTkyNTBkMWQxOTkxNDI1M2MuLjQ1Y2Y3YTA4OGRhMmZm
NWVmMTNmYzM4Njc1YmI1ZTk4NGQ2MzE3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFNjaGVkdWxlZEFjdGlvbjo6U2NoZWR1bGVkQWN0aW9uKHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNvbnRleHQsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jLCBpbnQgYXJn
Yywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSkKICAgICA6IG1fY29udGV4dChjb250ZXh0
KQotICAgICwgbV9jb2RlKFN0cmluZygpLCBLVVJMKCksIFRleHRQb3NpdGlvbjE6OmJlbG93UmFu
Z2VQb3NpdGlvbigpKQorICAgICwgbV9jb2RlKFN0cmluZygpLCBLVVJMKCksIFRleHRQb3NpdGlv
bjo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiB7CiAgICAgbV9mdW5jdGlvbiA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhmdW5jKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA5OTY5Mzg5ZTMzN2JmNjUxNGU2NDA0
ODdjNDI3YmZjNDA3MTllMTMxLi40OWNlZmM1NDVhN2I5NmNkMTg2NWY3NWM5YzIyYjE4ODQ3NDk4
M2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtMTk4LDEyICsxOTgsMTIgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKICAgICByZXR1cm4g
U2NyaXB0VmFsdWUob2JqZWN0KTsKIH0KIAotVGV4dFBvc2l0aW9uMCBTY3JpcHRDb250cm9sbGVy
OjpldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0CitUZXh0UG9zaXRpb24gU2NyaXB0Q29udHJv
bGxlcjo6ZXZlbnRIYW5kbGVyUG9zaXRpb24oKSBjb25zdAogewogICAgIFNjcmlwdGFibGVEb2N1
bWVudFBhcnNlciogcGFyc2VyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0YWJsZURvY3Vt
ZW50UGFyc2VyKCk7CiAgICAgaWYgKHBhcnNlcikKICAgICAgICAgcmV0dXJuIHBhcnNlci0+dGV4
dFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigp
OworICAgIHJldHVybiBUZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlvbigpOwogfQogCiB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCAxOGRkYjI3
MGQyZGY4NzhjYTIzNWU0OTEyNTAyNGFjMzgwNjYyYzE2Li4wZTMxNTBhZGEyZWZjZTUxYzc5MTcw
MGM4ODkzOWVkY2RhYWUzOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0Q29udHJvbGxlci5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBm
aW5pc2hlZFdpdGhFdmVudChFdmVudCopOwogCi0gICAgVGV4dFBvc2l0aW9uMCBldmVudEhhbmRs
ZXJQb3NpdGlvbigpIGNvbnN0OworICAgIFRleHRQb3NpdGlvbiBldmVudEhhbmRsZXJQb3NpdGlv
bigpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEV2ZW50TGlzdGVu
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5j
cHAKaW5kZXggMGQ3NThkOTQ2YzYxMmZjZGIwMDAyNTU3ZmZkNDNjNmRhNTNlYmJkMy4uMzRiMDI4
Y2JkNjY4ZTk5YzE0YmJhYWFhN2Y2YWEzMmVmZmNmZDY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKE5vZGUqIG5vZGUsIEF0dHJpYnUKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBG
SVhNRTogVmVyeSBzdHJhbmdlOiB3ZSBpbml0aWFsaXplIHplcm8tYmFzZWQgbnVtYmVyIHdpdGgg
JzEnLgotICAgIFRleHRQb3NpdGlvbjAgcG9zaXRpb24oV1RGOjpaZXJvQmFzZWROdW1iZXI6OmZy
b21aZXJvQmFzZWRJbnQoMSksIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpiYXNlKCkpOworICAgIFRl
eHRQb3NpdGlvbiBwb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50KDEpLCBP
cmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKICAgICBTdHJpbmcgc291cmNlVVJMOwogCiAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAgLTc4LDcgKzc4
LDcgQEAgUGFzc1JlZlB0cjxWOExhenlFdmVudExpc3RlbmVyPiBjcmVhdGVBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmkKICAgICBpZiAoIXNjcmlwdENvbnRyb2xsZXIt
PmNhbkV4ZWN1dGVTY3JpcHRzKEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBUZXh0UG9zaXRpb24wIHBvc2l0aW9uID0gc2NyaXB0Q29udHJvbGxlci0+ZXZl
bnRIYW5kbGVyUG9zaXRpb24oKTsKKyAgICBUZXh0UG9zaXRpb24gcG9zaXRpb24gPSBzY3JpcHRD
b250cm9sbGVyLT5ldmVudEhhbmRsZXJQb3NpdGlvbigpOwogICAgIFN0cmluZyBzb3VyY2VVUkwg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAgICAgcmV0dXJuIFY4TGF6eUV2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZnJhbWUtPmRv
Y3VtZW50KCktPmlzU1ZHRG9jdW1lbnQoKSwgYXR0ci0+dmFsdWUoKSwgc291cmNlVVJMLCBwb3Np
dGlvbiwgV29ybGRDb250ZXh0SGFuZGxlKFVzZU1haW5Xb3JsZCkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oCmluZGV4IGQ3ZDE1MTA5YzBmYjBh
OWFhMTUzYWViOWYzZTAwM2ZjMGVmNmJkY2MuLjBjNjhhMTU2MTkwODQ1YmUzMzAzYjQ5ZDQxNjQy
NTI5ZTIzMTdjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFNvdXJjZUNvZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTb3Vy
Y2VDb2RlLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBT
Y3JpcHRTb3VyY2VDb2RlIHsKIHB1YmxpYzoKLSAgICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwgPSBLVVJMKCksIGNvbnN0IFRleHRQb3NpdGlv
bjEmIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb24xOjptaW5pbXVtUG9zaXRpb24oKSkKKyAg
ICBTY3JpcHRTb3VyY2VDb2RlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwg
PSBLVVJMKCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlv
bjo6bWluaW11bVBvc2l0aW9uKCkpCiAgICAgICAgIDogbV9zb3VyY2Uoc291cmNlKQogICAgICAg
ICAsIG1fY2FjaGVkU2NyaXB0KDApCiAgICAgICAgICwgbV91cmwodXJsKQpAQCAtNTUsNyArNTUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9zb3VyY2UoY3MtPnNjcmlwdCgpKQogICAgICAgICAs
IG1fY2FjaGVkU2NyaXB0KGNzKQogICAgICAgICAsIG1fdXJsKFBhcnNlZFVSTFN0cmluZywgY3Mt
PnVybCgpKQotICAgICAgICAsIG1fc3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjptaW5pbXVt
UG9zaXRpb24oKSkKKyAgICAgICAgLCBtX3N0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjptaW5p
bXVtUG9zaXRpb24oKSkKICAgICB7CiAgICAgfQogCkBAIC03MCwxMyArNzAsMTMgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV91cmw7CiAgICAgfQogICAgIGludCBzdGFydExpbmUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCk7IH0KLSAgICBj
b25zdCBUZXh0UG9zaXRpb24xJiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dFBvc2l0aW9uOyB9CisgICAgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydFBvc2l0aW9uOyB9CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1f
c291cmNlOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRT
Y3JpcHQ7CiAgICAgS1VSTCBtX3VybDsKLSAgICBUZXh0UG9zaXRpb24xIG1fc3RhcnRQb3NpdGlv
bjsKKyAgICBUZXh0UG9zaXRpb24gbV9zdGFydFBvc2l0aW9uOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5
RXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVu
dExpc3RlbmVyLmNwcAppbmRleCAxNzIxOGMyN2ZkOWRjYTg1NTU1Y2VjYmMxZjQwMzkzNDFjODEx
MzU1Li5lZWUyNDU3YjY3NzM2MTAzYzk0MmU0NTY4YjUxYWFjOTY0NDIyMTJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcApAQCAt
NDIsNyArNDIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4TGF6eUV2ZW50TGlzdGVu
ZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGJvb2wg
aXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJpbmcgc291cmNlVVJMLCBj
b25zdCBUZXh0UG9zaXRpb24wJiBwb3NpdGlvbiwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3
b3JsZENvbnRleHQpCitWOExhenlFdmVudExpc3RlbmVyOjpWOExhenlFdmVudExpc3RlbmVyKGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYg
Y29kZSwgY29uc3QgU3RyaW5nIHNvdXJjZVVSTCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlv
biwgY29uc3QgV29ybGRDb250ZXh0SGFuZGxlJiB3b3JsZENvbnRleHQpCiAgICAgOiBWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcih0cnVlLCB3b3JsZENvbnRleHQpCiAgICAgLCBtX2Z1bmN0aW9uTmFt
ZShmdW5jdGlvbk5hbWUpCiAgICAgLCBtX2lzU1ZHRXZlbnQoaXNTVkdFdmVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuaAppbmRleCAwODQ2
N2ZlNWY3YWI5NzAxNGQ5NDUzYWYyNmZhM2YxNjZjZWU2M2IxLi40ZDM2NDg4OGEwMWYwOGUxZDkx
ZjY3MDYyNjliYWU5NjM5Yzg4MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAvLyBBIFY4TGF6eUV2ZW50TGlzdGVuZXIgaXMgYWx3YXlzIGEgSFRNTCBldmVu
dCBoYW5kbGVyLgogICAgIGNsYXNzIFY4TGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1l
LCBib29sIGlzU1ZHRXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRI
YW5kbGUmIHdvcmxkQ29udGV4dCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhMYXp5RXZl
bnRMaXN0ZW5lcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBib29sIGlzU1ZH
RXZlbnQsIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0
IFRleHRQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFdvcmxkQ29udGV4dEhhbmRsZSYgd29ybGRD
b250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4TGF6
eUV2ZW50TGlzdGVuZXIoZnVuY3Rpb25OYW1lLCBpc1NWR0V2ZW50LCBjb2RlLCBzb3VyY2VVUkws
IHBvc2l0aW9uLCB3b3JsZENvbnRleHQpKTsKICAgICAgICAgfQpAQCAtNTcsNyArNTcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlTGlzdGVuZXJP
YmplY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
VjhMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgYm9vbCBpc1NW
R0V2ZW50LCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyBzb3VyY2VVUkwsIGNvbnN0
IFRleHRQb3NpdGlvbjAmIHBvc2l0aW9uLCBjb25zdCBXb3JsZENvbnRleHRIYW5kbGUmIHdvcmxk
Q29udGV4dCk7CisgICAgICAgIFY4TGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5j
dGlvbk5hbWUsIGJvb2wgaXNTVkdFdmVudCwgY29uc3QgU3RyaW5nJiBjb2RlLCBjb25zdCBTdHJp
bmcgc291cmNlVVJMLCBjb25zdCBUZXh0UG9zaXRpb24mLCBjb25zdCBXb3JsZENvbnRleHRIYW5k
bGUmKTsKIAogICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5l
ckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
anNFdmVudCwgRXZlbnQqKTsKIApAQCAtNzEsNyArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgbV9pc1NWR0V2ZW50OwogICAgICAgICBTdHJpbmcgbV9jb2RlOwogICAg
ICAgICBTdHJpbmcgbV9zb3VyY2VVUkw7Ci0gICAgICAgIFRleHRQb3NpdGlvbjAgbV9wb3NpdGlv
bjsKKyAgICAgICAgVGV4dFBvc2l0aW9uIG1fcG9zaXRpb247CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCBh
MzljZmFmNTdhZTRiZDdhNTExYWNmNGJiYzdhMDBkODI2NjU0ZTVhLi5hYjFkZjRmMjg1NWEwZmQ5
NTRjNWRlYTllNjMyNjUzYzEzNjk2M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIFY4UHJveHk6On5WOFByb3h5KCkKICAgICB3aW5k
b3dTaGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlNjcmlwdD4g
VjhQcm94eTo6Y29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRp
b24sIHY4OjpTY3JpcHREYXRhKiBzY3JpcHREYXRhKQordjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBW
OFByb3h5Ojpjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9u
LCB2ODo6U2NyaXB0RGF0YSogc2NyaXB0RGF0YSkKIHsKICAgICBjb25zdCB1aW50MTZfdCogZmls
ZU5hbWVTdHJpbmcgPSBmcm9tV2ViQ29yZVN0cmluZyhmaWxlTmFtZSk7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6U3RyaW5nPiBuYW1lID0gdjg6OlN0cmluZzo6TmV3KGZpbGVOYW1lU3RyaW5nLCBmaWxl
TmFtZS5sZW5ndGgoKSk7CkBAIC0zNzQsNyArMzc0LDcgQEAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
VjhQcm94eTo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlLCBOb2RlKiBu
b2QKIAogICAgICAgICAvLyBOT1RFOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdlYkNvcmUsIFNj
cmlwdFNvdXJjZUNvZGUncyBsaW5lIHN0YXJ0cyBhdAogICAgICAgICAvLyAxLCB3aGVyZWFzIHY4
IHN0YXJ0cyBhdCAwLgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNjcmlwdCA9IGNv
bXBpbGVTY3JpcHQoY29kZSwgc291cmNlLnVybCgpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0
aW9uKHNvdXJjZS5zdGFydFBvc2l0aW9uKCkpLCBzY3JpcHREYXRhLmdldCgpKTsKKyAgICAgICAg
djg6OkhhbmRsZTx2ODo6U2NyaXB0PiBzY3JpcHQgPSBjb21waWxlU2NyaXB0KGNvZGUsIHNvdXJj
ZS51cmwoKSwgc291cmNlLnN0YXJ0UG9zaXRpb24oKSwgc2NyaXB0RGF0YS5nZXQoKSk7CiAjaWYg
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6dHJhY2VFdmVudEVu
ZCgidjguY29tcGlsZSIsIG5vZGUsICIiKTsKIApAQCAtNDA2LDcgKzQwNiw3IEBAIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IFY4UHJveHk6OnJ1blNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IHNj
cmlwdCwgYm9vbCBpc0luCiAgICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQgYmUg
YWJsZSB0byByZS11c2UgdGhlIG9yaWdpbiBvZiB0aGUKICAgICAgICAgLy8gc2NyaXB0IHBhc3Nl
ZCB0byB1cyBhcyB0aGUgYXJndW1lbnQgaW5zdGVhZCBvZiB1c2luZyBhbiBlbXB0eSBzdHJpbmcK
ICAgICAgICAgLy8gYW5kIDAgYmFzZUxpbmUuCi0gICAgICAgIHNjcmlwdCA9IGNvbXBpbGVTY3Jp
cHQoY29kZSwgIiIsIFRleHRQb3NpdGlvbjA6Om1pbmltdW1Qb3NpdGlvbigpKTsKKyAgICAgICAg
c2NyaXB0ID0gY29tcGlsZVNjcmlwdChjb2RlLCAiIiwgVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9z
aXRpb24oKSk7CiAgICAgfQogCiAgICAgaWYgKGhhbmRsZU91dE9mTWVtb3J5KCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKaW5kZXggNmU4NzZlMmQ4NDZjZGExNzY5MTcxNjNjOTE4
YzJkYzJiN2JhNDA1OC4uYjM0YzdhODdiNTc5ZTAzMjRiYWFjNmM1NWE3YjNkZjM2MjU0ODNiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaApAQCAtMjM4LDcgKzIzOCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogCi0gICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24wJiBzY3Jp
cHRTdGFydFBvc2l0aW9uLCB2ODo6U2NyaXB0RGF0YSogPSAwKTsKKyAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlNjcmlwdD4gY29tcGlsZVNjcmlwdCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0
U3RhcnRQb3NpdGlvbiwgdjg6OlNjcmlwdERhdGEqID0gMCk7CiAKICAgICAgICAgLy8gSWYgdGhl
IGV4Y2VwdGlvbiBjb2RlIGlzIGRpZmZlcmVudCBmcm9tIHplcm8sIGEgRE9NIGV4Y2VwdGlvbiBp
cwogICAgICAgICAvLyBzY2hlZHVsZSB0byBiZSB0aHJvd24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApp
bmRleCAxZmMwYmQ3ZjE5YmI3NTkwYjE3OGQ5MzkwZTgzZjM5MmFlNTVlOWRlLi5kMjg0MGJkMDg4
ODIxMDc1OWRkYjRhYmVkYzJjMzcxNGU3Y2ZjMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAg
LTE4Nyw3ICsxODcsNyBAQCBib29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0
VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TY3Jp
cHRWYWx1ZSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKGNvbnN0IFN0cmlu
ZyYgc2NyaXB0LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBUZXh0UG9zaXRpb24wJiBz
Y3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRlKQor
U2NyaXB0VmFsdWUgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpldmFsdWF0ZShjb25zdCBT
dHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9u
JiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqIHN0YXRl
KQogewogICAgIHY4OjpIYW5kbGVTY29wZSBoczsKIApAQCAtMjM2LDcgKzIzNiw3IEBAIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cnVuU2NyaXB0KHY4
OjpIYW5kbGU8djg6OlNjcmlwCiAgICAgLy8gQ29tcHV0ZSB0aGUgc291cmNlIHN0cmluZyBhbmQg
cHJldmVudCBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbi4KICAgICBpZiAobV9yZWN1cnNpb24g
Pj0ga01heFJlY3Vyc2lvbkRlcHRoKSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBj
b2RlID0gdjhFeHRlcm5hbFN0cmluZygidGhyb3cgUmFuZ2VFcnJvcignUmVjdXJzaW9uIHRvbyBk
ZWVwJykiKTsKLSAgICAgICAgc2NyaXB0ID0gVjhQcm94eTo6Y29tcGlsZVNjcmlwdChjb2RlLCAi
IiwgVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCkpOworICAgICAgICBzY3JpcHQgPSBW
OFByb3h5Ojpjb21waWxlU2NyaXB0KGNvZGUsICIiLCBUZXh0UG9zaXRpb246Om1pbmltdW1Qb3Np
dGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoVjhQcm94eTo6aGFuZGxlT3V0T2ZNZW1vcnkoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmgKaW5kZXggMDUyZmIzNjQ2NTYwYTY4Y2Q3ZmU4ZGFjZDA2NDVmYTJhMDUy
YzVjYy4uN2Q0ZDcwY2U2YWJhNWQ5Njc2MzlkZWI3NzEyMTg1NmRlMDA1ZjYzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmgKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHRyYWNrRXZlbnQoRXZlbnQqKTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBm
aWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KLSAgICAgICAgU2NyaXB0
VmFsdWUgZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25TdGF0ZSopOworICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBT
dHJpbmcmIHNjcmlwdCwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgVGV4dFBvc2l0aW9u
JiBzY3JpcHRTdGFydFBvc2l0aW9uLCBXb3JrZXJDb250ZXh0RXhlY3V0aW9uU3RhdGUqKTsKIAog
ICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRoZSBjb250ZXh0LgogICAgICAg
ICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA1ODc1ODJlNzE5NDAw
MTRkNTA2NGRlYjY3M2E4MmQwMWY2NjRhZGRkLi43MjI2ODNmMWVjZWM2NjAxOTEwMjc5ZDkwNzQw
Zjg4OGUwYzgwZTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApAQCAtODEsNyArODEsNyBAQCBTY3JpcHRWYWx1ZSBX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBz
b3VyY2VDb2RlLAogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKIAogICAgIFdvcmtlckNv
bnRleHRFeGVjdXRpb25TdGF0ZSBzdGF0ZTsKLSAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3By
b3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmlu
ZygpLCBXVEY6OnRvWmVyb0Jhc2VkVGV4dFBvc2l0aW9uKHNvdXJjZUNvZGUuc3RhcnRQb3NpdGlv
bigpKSwgJnN0YXRlKTsKKyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3Byb3h5LT5ldmFsdWF0
ZShzb3VyY2VDb2RlLnNvdXJjZSgpLCBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpLCBzb3VyY2VD
b2RlLnN0YXJ0UG9zaXRpb24oKSwgJnN0YXRlKTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgICAgICAqZXhjZXB0aW9uID0gc3Rh
dGUuZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3Jp
cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDYxNWZh
N2RiMWM2MDEyOTIzMDg2NmYyMDM4NTEzOGI0YTI0ODQwOTUuLmM2MDJhMTEyNjYzZjM5ZTcyMzMy
OTU5MDNlY2JhYmJiZGE2N2ZhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5k
aW5nU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAK
QEAgLTQxLDcgKzQxLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBQZW5kaW5nU2NyaXB0OjpyZWxl
YXNlRWxlbWVudEFuZENsZWFyKCkKIHsKICAgICBzZXRDYWNoZWRTY3JpcHQoMCk7CiAgICAgbV93
YXRjaGluZ0ZvckxvYWQgPSBmYWxzZTsKLSAgICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBUZXh0UG9z
aXRpb24xOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKKyAgICBtX3N0YXJ0aW5nUG9zaXRpb24gPSBU
ZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpOwogICAgIHJldHVybiBtX2VsZW1lbnQu
cmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1Nj
cmlwdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCBmY2JlMDZl
ZTc4ZWQ2YjlkNjRkYmJkMGQ1ZDdjMzkzZDlkNzc4MDNmLi4zOTk2NDYyNWUwODJlYzRhMGY3OTUx
NDZjODZhMjkwYzE4MTVlODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGlu
Z1NjcmlwdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTQ1
LDcgKzQ1LDcgQEAgY2xhc3MgUGVuZGluZ1NjcmlwdCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudCB7CiBwdWJsaWM6CiAgICAgUGVuZGluZ1NjcmlwdCgpCiAgICAgICAgIDogbV93YXRjaGlu
Z0ZvckxvYWQoZmFsc2UpCi0gICAgICAgICwgbV9zdGFydGluZ1Bvc2l0aW9uKFRleHRQb3NpdGlv
bjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICAgICAsIG1fc3RhcnRpbmdQb3NpdGlvbihU
ZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgIHsKICAgICB9CiAKQEAgLTgw
LDggKzgwLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAg
VGV4dFBvc2l0aW9uMSBzdGFydGluZ1Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGlu
Z1Bvc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRTdGFydGluZ1Bvc2l0aW9uKGNvbnN0IFRleHRQb3Np
dGlvbjEmIHBvc2l0aW9uKSB7IG1fc3RhcnRpbmdQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CisgICAg
VGV4dFBvc2l0aW9uIHN0YXJ0aW5nUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5n
UG9zaXRpb247IH0KKyAgICB2b2lkIHNldFN0YXJ0aW5nUG9zaXRpb24oY29uc3QgVGV4dFBvc2l0
aW9uJiBwb3NpdGlvbikgeyBtX3N0YXJ0aW5nUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogCiAgICAg
Ym9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7IHJldHVybiBtX3dhdGNoaW5nRm9yTG9hZDsg
fQogICAgIHZvaWQgc2V0V2F0Y2hpbmdGb3JMb2FkKGJvb2wgYikgeyBtX3dhdGNoaW5nRm9yTG9h
ZCA9IGI7IH0KQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIG1f
d2F0Y2hpbmdGb3JMb2FkOwogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0gICAgVGV4
dFBvc2l0aW9uMSBtX3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNj
cmlwdCB0YWdzLgorICAgIFRleHRQb3NpdGlvbiBtX3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkg
dXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0YWdzLgogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7IAogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVs
ZW1lbnQuY3BwCmluZGV4IDRiZWJlMzdmYTI0YjY5ZDNhOGNjYzA4Y2M0ZDk3OGMzOWQ4OWJjYjYu
LmY5ODNjYzFkYTIxZWQwMDY4OTA4NjkwMTYyMmE2NjJhNDg2MDhmMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RWxlbWVudC5jcHAKQEAgLTE2Miw3ICsxNjIsNyBAQCBib29sIFNjcmlwdEVsZW1l
bnQ6OmlzU2NyaXB0VHlwZVN1cHBvcnRlZChMZWdhY3lUeXBlU3VwcG9ydCBzdXBwb3J0TGVnYWN5
VHlwZXMpCiB9CiAKIC8vIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRt
bCNwcmVwYXJlLWEtc2NyaXB0Ci1ib29sIFNjcmlwdEVsZW1lbnQ6OnByZXBhcmVTY3JpcHQoY29u
c3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVnYWN5VHlwZVN1cHBvcnQg
c3VwcG9ydExlZ2FjeVR5cGVzKQorYm9vbCBTY3JpcHRFbGVtZW50OjpwcmVwYXJlU2NyaXB0KGNv
bnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbiwgTGVnYWN5VHlwZVN1cHBvcnQg
c3VwcG9ydExlZ2FjeVR5cGVzKQogewogICAgIGlmIChtX2FscmVhZHlTdGFydGVkKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAppbmRleCAyMTEwZjdm
MWYzOWJiNGRkZTAyNmM3MjI3MmY2NGQyNDM1ZDE4MGEyLi43ODcyNjAwMzVlOWQxZmU5YWJkMTc5
OWUxN2YzZDIwNmRmYWM4Y2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnQ7IH0KIAogICAgIGVudW0gTGVnYWN5VHlwZVN1cHBvcnQgeyBEaXNhbGxvd0xl
Z2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUsIEFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSB9
OwotICAgIGJvb2wgcHJlcGFyZVNjcmlwdChjb25zdCBUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFy
dFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6bWluaW11bVBvc2l0aW9uKCksIExlZ2FjeVR5cGVT
dXBwb3J0ID0gRGlzYWxsb3dMZWdhY3lUeXBlSW5UeXBlQXR0cmlidXRlKTsKKyAgICBib29sIHBy
ZXBhcmVTY3JpcHQoY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4
dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKSwgTGVnYWN5VHlwZVN1cHBvcnQgPSBEaXNhbGxv
d0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpOwogCiAgICAgU3RyaW5nIHNjcmlwdENoYXJzZXQo
KSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlckVuY29kaW5nOyB9CiAgICAgU3RyaW5nIHNjcmlw
dENvbnRlbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIuaAppbmRleCBkYmUwNGY4MmU3YmRiNTdlZjI1YjRmYmZlYzM4MTQ3MmI3ZmIwM2Y5
Li5iMTQwY2YxNzYxOGExZDAyZTBlZWI3NzIwNTBmOWVmNTRlZDBlMGIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCkBAIC00NCw4ICs0NCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0ID0g
MDsKIAogICAgIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGV4cG9zZSB0aGUgY3VycmVudCBsaW5lL2Nv
bHVtbiB0byB0aGUgc2NyaXB0aW5nIHN5c3RlbS4KLSAgICB2aXJ0dWFsIFplcm9CYXNlZE51bWJl
ciBsaW5lTnVtYmVyKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9uMCB0ZXh0
UG9zaXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBPcmRpbmFsTnVtYmVyIGxpbmVOdW1i
ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkg
Y29uc3QgPSAwOwogCiAgICAgdm9pZCBzZXRXYXNDcmVhdGVkQnlTY3JpcHQoYm9vbCB3YXNDcmVh
dGVkQnlTY3JpcHQpIHsgbV93YXNDcmVhdGVkQnlTY3JpcHQgPSB3YXNDcmVhdGVkQnlTY3JpcHQ7
IH0KICAgICBib29sIHdhc0NyZWF0ZWRCeVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQ3Jl
YXRlZEJ5U2NyaXB0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRB
cmd1bWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcApp
bmRleCAyNGU3M2M5NjgyNWY5NWNjMjJjYzhhYjg0MWE3Y2YxMmM3Yzk0MzMyLi5jYTcwODc5ODRi
ZmZlZThlZmUxMmMxYzQ3ZWYxNGViYmIyM2NlMmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3
cG9ydEFyZ3VtZW50cy5jcHAKQEAgLTM2OSw3ICszNjksNyBAQCBzdGF0aWMgaW50IHBhcnNlckxp
bmVOdW1iZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIFNjcmlwdGFibGVEb2N1bWVudFBhcnNl
ciogcGFyc2VyID0gZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwogICAgIGlm
ICghcGFyc2VyKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcGFyc2VyLT5saW5lTnVt
YmVyKCkuY29udmVydEFzT25lQmFzZWRJbnQoKTsKKyAgICByZXR1cm4gcGFyc2VyLT5saW5lTnVt
YmVyKCkub25lQmFzZWRJbnQoKTsKIH0KIAogdm9pZCByZXBvcnRWaWV3cG9ydFdhcm5pbmcoRG9j
dW1lbnQqIGRvY3VtZW50LCBWaWV3cG9ydEVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnQxLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50MikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IGI3YWZl
ZTY5ZWFkOGRmM2VlYjhhZDYwZjVhZGM0NTdiZGExMGUxMGEuLmUyNGUxZTM5MGU2NWU5MTdlMzE0
OWMwOTUyYTg5NWRlNjkyMWJhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIGJvb2wgSFRNTERv
Y3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQogewogICAgIEFT
U0VSVChtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKTsKIAotICAgIFRleHRQb3NpdGlvbjEgc2Ny
aXB0U3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjE6OmJlbG93UmFuZ2VQb3NpdGlvbigpOwor
ICAgIFRleHRQb3NpdGlvbiBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpiZWxv
d1JhbmdlUG9zaXRpb24oKTsKICAgICBSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCA9IG1f
dHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAg
ICAgLy8gV2Ugd2lsbCBub3QgaGF2ZSBhIHNjcmlwdFJ1bm5lciB3aGVuIHBhcnNpbmcgYSBEb2N1
bWVudEZyYWdtZW50LgogICAgIGlmICghbV9zY3JpcHRSdW5uZXIpCkBAIC0yNTgsNyArMjU4LDcg
QEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2Rl
IG1vZGUpCiAgICAgLy8gRklYTUU6IG1faW5wdXQuY3VycmVudCgpLmxlbmd0aCgpIGlzIG9ubHkg
YWNjdXJhdGUgaWYgd2UKICAgICAvLyBlbmQgdXAgcGFyc2luZyB0aGUgd2hvbGUgYnVmZmVyIGlu
IHRoaXMgcHVtcC4gIFdlIHNob3VsZCBwYXNzIGhvdwogICAgIC8vIG11Y2ggd2UgcGFyc2VkIGFz
IHBhcnQgb2YgZGlkV3JpdGVIVE1MIGluc3RlYWQgb2Ygd2lsbFdyaXRlSFRNTC4KLSAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsV3JpdGVIVE1MKGRvY3VtZW50KCksIG1faW5wdXQuY3VycmVudCgpLmxlbmd0aCgp
LCBtX3Rva2VuaXplci0+bGluZU51bWJlcigpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1M
KGRvY3VtZW50KCksIG1faW5wdXQuY3VycmVudCgpLmxlbmd0aCgpLCBtX3Rva2VuaXplci0+bGlu
ZU51bWJlcigpLnplcm9CYXNlZEludCgpKTsKIAogICAgIHdoaWxlIChjYW5UYWtlTmV4dFRva2Vu
KG1vZGUsIHNlc3Npb24pICYmICFzZXNzaW9uLm5lZWRzWWllbGQpIHsKICAgICAgICAgaWYgKCFp
c1BhcnNpbmdGcmFnbWVudCgpKQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgSFRNTERvY3VtZW50
UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQogICAgICAgICBtX3By
ZWxvYWRTY2FubmVyLT5zY2FuKCk7CiAgICAgfQogCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRXcml0ZUhUTUwoY29va2llLCBtX3Rva2VuaXplci0+bGluZU51bWJlcigpKTsKKyAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFdyaXRlSFRNTChjb29raWUsIG1fdG9rZW5p
emVyLT5saW5lTnVtYmVyKCkuemVyb0Jhc2VkSW50KCkpOwogfQogCiBib29sIEhUTUxEb2N1bWVu
dFBhcnNlcjo6aGFzSW5zZXJ0aW9uUG9pbnQoKQpAQCAtNDQ2LDE5ICs0NDYsMTkgQEAgU3RyaW5n
IEhUTUxEb2N1bWVudFBhcnNlcjo6c291cmNlRm9yVG9rZW4oY29uc3QgSFRNTFRva2VuJiB0b2tl
bikKICAgICByZXR1cm4gbV9zb3VyY2VUcmFja2VyLnNvdXJjZUZvclRva2VuKHRva2VuKTsKIH0K
IAotWmVyb0Jhc2VkTnVtYmVyIEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0
CitPcmRpbmFsTnVtYmVyIEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX3Rva2VuaXpl
ci0+bGluZU51bWJlcigpKTsKKyAgICByZXR1cm4gbV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKTsK
IH0KIAotVGV4dFBvc2l0aW9uMCBIVE1MRG9jdW1lbnRQYXJzZXI6OnRleHRQb3NpdGlvbigpIGNv
bnN0CitUZXh0UG9zaXRpb24gSFRNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBjb25z
dAogewogICAgIGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgY3VycmVudFN0cmluZyA9IG1faW5wdXQu
Y3VycmVudCgpOwotICAgIFplcm9CYXNlZE51bWJlciBsaW5lID0gY3VycmVudFN0cmluZy5jdXJy
ZW50TGluZSgpOwotICAgIFplcm9CYXNlZE51bWJlciBjb2x1bW4gPSBjdXJyZW50U3RyaW5nLmN1
cnJlbnRDb2x1bW4oKTsKLSAgICBBU1NFUlQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSA9PSBs
aW5lLnplcm9CYXNlZEludCgpKTsKKyAgICBPcmRpbmFsTnVtYmVyIGxpbmUgPSBjdXJyZW50U3Ry
aW5nLmN1cnJlbnRMaW5lKCk7CisgICAgT3JkaW5hbE51bWJlciBjb2x1bW4gPSBjdXJyZW50U3Ry
aW5nLmN1cnJlbnRDb2x1bW4oKTsKKyAgICBBU1NFUlQobV90b2tlbml6ZXItPmxpbmVOdW1iZXIo
KSA9PSBsaW5lKTsKIAotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKGxpbmUsIGNvbHVtbik7Cisg
ICAgcmV0dXJuIFRleHRQb3NpdGlvbihsaW5lLCBjb2x1bW4pOwogfQogCiBib29sIEhUTUxEb2N1
bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IDczZTU3ZWYwZmYwN2Jl
NDNjZjFlNjQwYTVlMzA1OTdmMTRkZDkzOGYuLmVlZTg4MmM3MjRlM2UzYjBkNmRkNzRmYmQ2YTg2
ZDVjYjcyMmJhYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5oCkBAIC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICBIVE1MVG9rZW5pemVy
KiB0b2tlbml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rva2VuaXplci5nZXQoKTsgfQogICAgIFN0
cmluZyBzb3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKIAotICAgIHZpcnR1YWwgVGV4
dFBvc2l0aW9uMCB0ZXh0UG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIFplcm9CYXNlZE51
bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBUZXh0UG9zaXRpb24gdGV4dFBv
c2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBPcmRpbmFsTnVtYmVyIGxpbmVOdW1iZXIoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kU2NoZWR1bGVkVGFza3MoKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lU2NoZWR1bGVkVGFza3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKaW5kZXggNTEyYWU4OGZhNTY2NmI5ZThlMWY5NDZk
ODUyNjI4YjFjZjM2NWNmOC4uZGE2OTMyZmQ0MjIzYjhhZDFjYjc2YzFkOTc2MjJmOTkwNmVmMWU4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTElucHV0U3RyZWFtLmgKQEAg
LTE0Nyw4ICsxNDcsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhUTUxJbnB1dFN0cmVhbSog
bV9pbnB1dFN0cmVhbTsKICAgICBTZWdtZW50ZWRTdHJpbmcgbV9uZXh0OwotICAgIFdURjo6WmVy
b0Jhc2VkTnVtYmVyIG1fbGluZTsKLSAgICBXVEY6Olplcm9CYXNlZE51bWJlciBtX2NvbHVtbjsK
KyAgICBPcmRpbmFsTnVtYmVyIG1fbGluZTsKKyAgICBPcmRpbmFsTnVtYmVyIG1fY29sdW1uOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVy
LmNwcAppbmRleCA0Y2NkNzc3ZjNjZjg5MGNiZmQzNGI3NjhkN2ZkZTU0Mjc1MmY5Y2IyLi5kMTRk
NjlkMWQ2MzdkYjNiMTlmZWZkYmQwMGJlNTEwNDViNDAwNDhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcApAQCAtMTU5LDcgKzE1OSw3IEBA
IHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0
JiBwZW5kaW5nU2NyaXB0KQogCiAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCAxMC4yLjUu
MTEgIkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMgJ3NjcmlwdCciCiAvLyBTY3JpcHQgaGFu
ZGxpbmcgbGl2ZXMgb3V0c2lkZSB0aGUgdHJlZSBidWlsZGVyIHRvIGtlZXAgdGhlIGVhY2ggY2xh
c3Mgc2ltcGxlLgotYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3Np
dGlvbikKK2Jvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+
IHNjcmlwdEVsZW1lbnQsIGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbikK
IHsKICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CiAgICAgLy8gRklYTUU6IElmIHNjcmlwdGlu
ZyBpcyBkaXNhYmxlZCwgYWx3YXlzIGp1c3QgcmV0dXJuIHRydWU7CkBAIC0yNzUsNyArMjc1LDcg
QEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2Ny
aXB0JiBwZW5kaW5nU2NyaXB0LCBFbGVtZW4KIAogLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8g
bWF0Y2ggdGhlIEhUTUw1IGRlZmluaXRpb24gb2YgInJ1bm5pbmcgYSBzY3JpcHQiCiAvLyBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9z
Y3JpcHRpbmctMS5odG1sI3J1bm5pbmctYS1zY3JpcHQKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6
cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3Rh
cnRQb3NpdGlvbikKK3ZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNj
cmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIEFT
U0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQoIWhhdmVQYXJzaW5nQmxvY2tpbmdTY3JpcHQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5k
ZXggOTg2ZjdiZDNiZTJiYjUwMmYxYjZiMmEwZTRiMzNhZDQ1YjVjMGQ4Ny4uNzdhYWQ4YzljMDM3
ZjVmMjk2MWQ1YWM0YzhjMWViNThmMjE4ZTU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZXRhY2goKTsKIAogICAgIC8vIFByb2Nlc3NlcyB0aGUgcGFzc2VkIGluIHNjcmlwdCBh
bmQgYW55IHBlbmRpbmcgc2NyaXB0cyBpZiBwb3NzaWJsZS4KLSAgICBib29sIGV4ZWN1dGUoUGFz
c1JlZlB0cjxFbGVtZW50PiBzY3JpcHRUb1Byb2Nlc3MsIGNvbnN0IFRleHRQb3NpdGlvbjEmIHNj
cmlwdFN0YXJ0UG9zaXRpb24pOworICAgIGJvb2wgZXhlY3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+
IHNjcmlwdFRvUHJvY2VzcywgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9u
KTsKIAogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJj
ZSopOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQpAQCAtNzYsNyArNzYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsK
ICAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50Kikg
Y29uc3Q7CiAKLSAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgY29uc3QgVGV4dFBvc2l0aW9u
MSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CisgICAgdm9pZCBydW5TY3JpcHQoRWxlbWVudCosIGNv
bnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBIZWxwZXJz
IGZvciBkZWFsaW5nIHdpdGggSFRNTFNjcmlwdFJ1bm5lckhvc3QKICAgICB2b2lkIHdhdGNoRm9y
TG9hZChQZW5kaW5nU2NyaXB0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAppbmRleCA3ZGU1NDkzM2VmM2YyYTBlMDY3N2YzZDgxY2I2ZGFmZjI5
NmY2ZDM3Li4yN2I1ODk2MWUwNGJlZDM0MTlmNGIzNGY4ZjRkYWIyYTdmMzA5NzdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTU4LDkg
KzU4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGNvbnN0IGludCB1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlID0gLTE7CiAKLXN0YXRpYyBUZXh0UG9zaXRpb24x
IHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCitzdGF0aWMgVGV4dFBvc2l0aW9uIHVuaW5p
dGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCiB7Ci0gICAgcmV0dXJuIFRleHRQb3NpdGlvbjEoV1RG
OjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KC0xKSwgV1RGOjpPbmVCYXNlZE51bWJl
cjo6YmFzZSgpKTsKKyAgICByZXR1cm4gVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21P
bmVCYXNlZEludCgtMSksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpOwogfQogCiBuYW1lc3BhY2Ug
ewpAQCAtMzUxLDcgKzM1MSw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhU
TUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBIVE1MRG9jdW1lbnQqIGRvY3VtCiAgICAgLCBtX29y
aWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fcGFyc2VyKHBhcnNlcikK
ICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRp
b25WYWx1ZTEoKSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQ
b3NpdGlvbjA6OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVu
dFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAs
IG1fdXNlUHJlSFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCiAgICAg
LCBtX2hhc1BlbmRpbmdGb3JlaWduSW5zZXJ0aW9uTW9kZVN0ZXBzKGZhbHNlKQogewpAQCAtMzcw
LDcgKzM3MCw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVu
dFBhcnNlciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBmCiAgICAgLCBtX29yaWdpbmFsSW5z
ZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1f
c2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEo
KSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjA6
OmJlbG93UmFuZ2VQb3NpdGlvbigpKQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9z
aXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fdXNlUHJl
SFRNTDVQYXJzZXJRdWlya3ModXNlUHJlSFRNTDVQYXJzZXJRdWlya3MpCiAgICAgLCBtX2hhc1Bl
bmRpbmdGb3JlaWduSW5zZXJ0aW9uTW9kZVN0ZXBzKGZhbHNlKQogewpAQCAtNDIwLDcgKzQyMCw3
IEBAIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6fkZyYWdtZW50UGFy
c2luZ0NvbnRleHQoKQogewogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRl
cjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24xJiBzY3JpcHRTdGFydFBvc2l0aW9u
KQorUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nl
c3MoVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewogICAgIC8vIFVucGF1c2Ug
b3Vyc2VsdmVzLCBjYWxsZXJzIG1heSBwYXVzZSB1cyBhZ2FpbiB3aGVuIHByb2Nlc3NpbmcgdGhl
IHNjcmlwdC4KICAgICAvLyBUaGUgSFRNTDUgc3BlYyBpcyB3cml0dGVuIGFzIHRob3VnaCBzY3Jp
cHRzIGFyZSBleGVjdXRlZCBpbnNpZGUgdGhlIHRyZWUKQEAgLTIyMjAsNyArMjIyMCw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIEFTU0VSVChtX3Ry
ZWUuY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICAgICAgICAg
IG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7Ci0gICAgICAgICAg
ICBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRpb24gPSBXVEY6OnRvT25lQmFzZWRUZXh0UG9z
aXRpb24obV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb24pOworICAgICAgICAgICAgbV9z
Y3JpcHRUb1Byb2Nlc3NTdGFydFBvc2l0aW9uID0gbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9z
aXRpb247CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAg
ICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV9mcmFnbWVudENvbnRleHQuc2NyaXB0
aW5nUGVybWlzc2lvbigpID09IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkKICAgICAgICAg
ICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKQEAgLTI4MDcs
OSArMjgwNyw5IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNldFN0
YXRlKEhUTUxUb2tlbml6ZXJTdGF0ZTo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFs
SW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKIAotICAgIFRleHRQb3NpdGlvbjAgcG9z
aXRpb24gPSBtX3BhcnNlci0+dGV4dFBvc2l0aW9uKCk7CisgICAgVGV4dFBvc2l0aW9uIHBvc2l0
aW9uID0gbV9wYXJzZXItPnRleHRQb3NpdGlvbigpOwogCi0gICAgQVNTRVJUKHBvc2l0aW9uLm1f
bGluZS56ZXJvQmFzZWRJbnQoKSA9PSBtX3BhcnNlci0+dG9rZW5pemVyKCktPmxpbmVOdW1iZXIo
KSk7CisgICAgQVNTRVJUKHBvc2l0aW9uLm1fbGluZSA9PSBtX3BhcnNlci0+dG9rZW5pemVyKCkt
PmxpbmVOdW1iZXIoKSk7CiAKICAgICBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRQb3NpdGlvbiA9
IHBvc2l0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5oCmluZGV4IDg2NGM5M2M1YTYwNWUyNDU2MDRkMTA0MmY1OTI0OTlkMTUwZTYzYTAuLjRlYmQ0
NGUyYTJmMzI5NjYzMGUwNjc1N2ZlNTIxZTgxMjYxNGQ3MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRvbWljSFRNTFRva2VuJik7
CiAKICAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVuIHBhcnNlciBpcyBwYXVzZWQgYmVmb3JlIGNh
bGxpbmcgdGhlIHBhcnNlciBhZ2Fpbi4KLSAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHRha2VTY3Jp
cHRUb1Byb2Nlc3MoVGV4dFBvc2l0aW9uMSYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CisgICAgUGFz
c1JlZlB0cjxFbGVtZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbiYgc2NyaXB0
U3RhcnRQb3NpdGlvbik7CiAKICAgICAvLyBEb25lLCBjbG9zZSBhbnkgb3BlbiB0YWdzLCBldGMu
CiAgICAgdm9pZCBmaW5pc2hlZCgpOwpAQCAtMjQ5LDEyICsyNDksMTIgQEAgcHJpdmF0ZToKICAg
ICBIVE1MRG9jdW1lbnRQYXJzZXIqIG1fcGFyc2VyOwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1f
c2NyaXB0VG9Qcm9jZXNzOyAvLyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBi
ZWZvcmUgcmVzdW1pbmcgdGhlIHBhcnNlci4KLSAgICBUZXh0UG9zaXRpb24xIG1fc2NyaXB0VG9Q
cm9jZXNzU3RhcnRQb3NpdGlvbjsgLy8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlw
dCB0YWcgbmVlZGluZyBwcm9jZXNzaW5nLgorICAgIFRleHRQb3NpdGlvbiBtX3NjcmlwdFRvUHJv
Y2Vzc1N0YXJ0UG9zaXRpb247IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQg
dGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KIAogICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3YW50
IHRvIHJlbW92ZSB0aGlzIG1lbWJlci4gIE9yaWdpbmFsbHksIGl0IHdhcwogICAgIC8vIGNyZWF0
ZWQgdG8gc2VydmljZSB0aGUgbGVnYWN5IHRyZWUgYnVpbGRlciwgYnV0IGl0IHNlZW1zIHRvIGJl
IHVzZWQgZm9yCiAgICAgLy8gc29tZSBvdGhlciB0aGluZ3Mgbm93LgotICAgIFRleHRQb3NpdGlv
bjAgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0UG9zaXRpb247CisgICAgVGV4dFBvc2l0aW9uIG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydFBvc2l0aW9uOwogCiAgICAgYm9vbCBtX3VzZVByZUhUTUw1
UGFyc2VyUXVpcmtzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggYjg4MWJjYzg0ZGE3OTgyNmZkNjkzZTUwNWE4YzQ0
OGY4NjUyZjhkNS4uN2Q5YWU3MGMyZGUxZDE2MTIxNTc2YTNiZWVmMDkwNWZmYzVmYjI4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcApAQCAtMzgyLDcgKzM4Miw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVuCiAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIiwg
InBhcnNlciIpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0cmluZygidXJsIiwgZG9j
dW1lbnQtPnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXROdW1i
ZXIoImxpbmVOdW1iZXIiLCBkb2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCktPmxp
bmVOdW1iZXIoKS5jb252ZXJ0QXNPbmVCYXNlZEludCgpKTsKKyAgICAgICAgaW5pdGlhdG9yT2Jq
ZWN0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCBkb2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyKCktPmxpbmVOdW1iZXIoKS5vbmVCYXNlZEludCgpKTsKICAgICAgICAgcmV0dXJuIGlu
aXRpYXRvck9iamVjdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU2VnbWVudGVkU3RyaW5nLmNwcAppbmRleCAxNTE1ZmU4Y2FkYTUzMDQ1ZDlhMTFiZDU1YzZi
NzdlNmI0ZTQyYTI4Li5hNWFiM2E2NTgwM2JmZjQyOTBjYmM5ZDVlNjc0NDNjYzY2ZTU0YjcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3Bw
CkBAIC0yMzcsMTggKzIzNywxOCBAQCB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVNsb3dD
YXNlKGludCYgbGluZU51bWJlcikKICAgICBtX2N1cnJlbnRDaGFyID0gbV9wdXNoZWRDaGFyMSA/
ICZtX3B1c2hlZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsKIH0KIAotV1RGOjpa
ZXJvQmFzZWROdW1iZXIgU2VnbWVudGVkU3RyaW5nOjpjdXJyZW50TGluZSgpIGNvbnN0CitPcmRp
bmFsTnVtYmVyIFNlZ21lbnRlZFN0cmluZzo6Y3VycmVudExpbmUoKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6Olplcm9CYXNlZE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2N1cnJlbnRMaW5l
KTsKKyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVplcm9CYXNlZEludChtX2N1cnJlbnRM
aW5lKTsKIH0KIAotV1RGOjpaZXJvQmFzZWROdW1iZXIgU2VnbWVudGVkU3RyaW5nOjpjdXJyZW50
Q29sdW1uKCkgY29uc3QKK09yZGluYWxOdW1iZXIgU2VnbWVudGVkU3RyaW5nOjpjdXJyZW50Q29s
dW1uKCkgY29uc3QKIHsKICAgICBpbnQgemVyb0Jhc2VkQ29sdW1uID0gbnVtYmVyT2ZDaGFyYWN0
ZXJzQ29uc3VtZWQoKSAtIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29uc3VtZWRQcmlvclRvQ3VycmVu
dExpbmU7Ci0gICAgcmV0dXJuIFdURjo6WmVyb0Jhc2VkTnVtYmVyOjpmcm9tWmVyb0Jhc2VkSW50
KHplcm9CYXNlZENvbHVtbik7CisgICAgcmV0dXJuIE9yZGluYWxOdW1iZXI6OmZyb21aZXJvQmFz
ZWRJbnQoemVyb0Jhc2VkQ29sdW1uKTsKIH0KIAotdm9pZCBTZWdtZW50ZWRTdHJpbmc6OnNldEN1
cnJlbnRQb3NpdGlvbihXVEY6Olplcm9CYXNlZE51bWJlciBsaW5lLCBXVEY6Olplcm9CYXNlZE51
bWJlciBjb2x1bW5BZnRyZVByb2xvZywgaW50IHByb2xvZ0xlbmd0aCkKK3ZvaWQgU2VnbWVudGVk
U3RyaW5nOjpzZXRDdXJyZW50UG9zaXRpb24oT3JkaW5hbE51bWJlciBsaW5lLCBPcmRpbmFsTnVt
YmVyIGNvbHVtbkFmdHJlUHJvbG9nLCBpbnQgcHJvbG9nTGVuZ3RoKQogewogICAgIG1fY3VycmVu
dExpbmUgPSBsaW5lLnplcm9CYXNlZEludCgpOwogICAgIG1fbnVtYmVyT2ZDaGFyYWN0ZXJzQ29u
c3VtZWRQcmlvclRvQ3VycmVudExpbmUgPSBudW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZCgpICsg
cHJvbG9nTGVuZ3RoIC0gY29sdW1uQWZ0cmVQcm9sb2cuemVyb0Jhc2VkSW50KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaAppbmRleCA0ODMxMTY2
ZmExNGM0MTc0ZTIxYWJjMmZjY2RmOTI1ZjU4NjIyY2IzLi40NDYyMTgzODhkMWZjNzU2OGI4Y2Yx
MDJiYTJkZjU2MzE5MWFjYjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1NlZ21lbnRlZFN0cmluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U2VnbWVudGVkU3RyaW5nLmgKQEAgLTIyNSwxMSArMjI1LDExIEBAIHB1YmxpYzoKICAgICAKIAog
ICAgIC8vIFRoZSBtZXRob2QgaXMgbW9kZXJhdGVseSBzbG93LCBjb21wYXJpbmcgdG8gY3VycmVu
dExpbmUgbWV0aG9kLgotICAgIFdURjo6WmVyb0Jhc2VkTnVtYmVyIGN1cnJlbnRDb2x1bW4oKSBj
b25zdDsKLSAgICBXVEY6Olplcm9CYXNlZE51bWJlciBjdXJyZW50TGluZSgpIGNvbnN0OworICAg
IE9yZGluYWxOdW1iZXIgY3VycmVudENvbHVtbigpIGNvbnN0OworICAgIE9yZGluYWxOdW1iZXIg
Y3VycmVudExpbmUoKSBjb25zdDsKICAgICAvLyBTZXRzIHZhbHVlIG9mIGxpbmUvY29sdW1uIHZh
cmlhYmxlcy4gQ29sdW1uIGlzIHNwZWNpZmllZCBpbmRpcmVjdGx5IGJ5IGEgcGFyYW1ldGVyIGNv
bHVtbkFmdHJlUHJvbG9nCiAgICAgLy8gd2hpY2ggaXMgYSB2YWx1ZSBvZiBjb2x1bW4gdGhhdCB3
ZSBzaG91bGQgZ2V0IGFmdGVyIGEgcHJvbG9nIChmaXJzdCBwcm9sb2dMZW5ndGggY2hhcmFjdGVy
cykgaGFzIGJlZW4gY29uc3VtZWQuCi0gICAgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oV1RGOjpa
ZXJvQmFzZWROdW1iZXIgbGluZSwgV1RGOjpaZXJvQmFzZWROdW1iZXIgY29sdW1uQWZ0cmVQcm9s
b2csIGludCBwcm9sb2dMZW5ndGgpOworICAgIHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKE9yZGlu
YWxOdW1iZXIgbGluZSwgT3JkaW5hbE51bWJlciBjb2x1bW5BZnRyZVByb2xvZywgaW50IHByb2xv
Z0xlbmd0aCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3Vi
c3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRl
bnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3Bw
CmluZGV4IGEwYTlkYzY1NTZjZWU3YWMxZDdiYWY3Y2Q3ZjI0OTU4NzczZTkzODguLmFkNDZjOThj
NTZkNDRkNjNjNTZkOTg0ZmI2NTgzYWIyYTQ5YTMxYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGljIGlu
dCBwYXJzZXJMaW5lTnVtYmVyKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBTY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIqIHBhcnNlciA9IGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIo
KTsKICAgICBpZiAoIXBhcnNlcikKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHBhcnNl
ci0+bGluZU51bWJlcigpLmNvbnZlcnRBc09uZUJhc2VkSW50KCk7CisgICAgcmV0dXJuIHBhcnNl
ci0+bGluZU51bWJlcigpLm9uZUJhc2VkSW50KCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlcG9ydE1l
c3NhZ2UoRG9jdW1lbnQqIGRvY3VtZW50LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxFcnJvcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5jcHAKaW5kZXggODQyZDc0ZGE3Zjc5NDI5
ZWMwNjdlZGJlZjA1NThmYWUyOGIxOWY4Ni4uODdmY2YyNzA0ZWY1NGVhNTAzMTk3MDE5ZTk2N2Iz
Nzg4MWY1MjcyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEVycm9ycy5jcHAKQEAgLTQ5LDE2ICs0OSwxNiBA
QCBjb25zdCBpbnQgbWF4RXJyb3JzID0gMjU7CiBYTUxFcnJvcnM6OlhNTEVycm9ycyhEb2N1bWVu
dCogZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9lcnJvckNv
dW50KDApCi0gICAgLCBtX2xhc3RFcnJvclBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFu
Z2VQb3NpdGlvbigpKQorICAgICwgbV9sYXN0RXJyb3JQb3NpdGlvbihUZXh0UG9zaXRpb246OmJl
bG93UmFuZ2VQb3NpdGlvbigpKQogewogfQogCiB2b2lkIFhNTEVycm9yczo6aGFuZGxlRXJyb3Io
RXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyKQogewotICAgIGhhbmRsZUVycm9yKHR5cGUsIG1lc3NhZ2UsIFRleHRQb3Np
dGlvbjEoV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGxpbmVOdW1iZXIpLCBX
VEY6Ok9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29sdW1uTnVtYmVyKSkpOworICAg
IGhhbmRsZUVycm9yKHR5cGUsIG1lc3NhZ2UsIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQobGluZU51bWJlciksIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZElu
dChjb2x1bW5OdW1iZXIpKSk7CiB9CiAKLXZvaWQgWE1MRXJyb3JzOjpoYW5kbGVFcnJvcihFcnJv
clR5cGUgdHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbikK
K3ZvaWQgWE1MRXJyb3JzOjpoYW5kbGVFcnJvcihFcnJvclR5cGUgdHlwZSwgY29uc3QgY2hhciog
bWVzc2FnZSwgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKQogewogICAgIGlmICh0eXBlID09IGZhdGFs
IHx8IChtX2Vycm9yQ291bnQgPCBtYXhFcnJvcnMgJiYgbV9sYXN0RXJyb3JQb3NpdGlvbi5tX2xp
bmUgIT0gcG9zaXRpb24ubV9saW5lICYmIG1fbGFzdEVycm9yUG9zaXRpb24ubV9jb2x1bW4gIT0g
cG9zaXRpb24ubV9jb2x1bW4pKSB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewpAQCAtNzUsNyAr
NzUsNyBAQCB2b2lkIFhNTEVycm9yczo6aGFuZGxlRXJyb3IoRXJyb3JUeXBlIHR5cGUsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UsIFRleHRQb3NpdGlvbjEgcAogICAgIH0KIH0KIAotdm9pZCBYTUxFcnJv
cnM6OmFwcGVuZEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIFRleHRQb3Np
dGlvbjEgcG9zaXRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit2b2lkIFhNTEVycm9yczo6YXBw
ZW5kRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZywgVGV4dFBvc2l0aW9uIHBv
c2l0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIC8vIDx0eXBlU3RyaW5nPiBvbiBs
aW5lIDxsaW5lTnVtYmVyPiBhdCBjb2x1bW4gPGNvbHVtbk51bWJlcj46IDxtZXNzYWdlPgogICAg
IG1fZXJyb3JNZXNzYWdlcy5hcHBlbmQodHlwZVN0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MRXJyb3JzLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MRXJyb3JzLmgK
aW5kZXggZDAzMjk0NDdiMTdhYmUwZjc5MzhhODZlOTExNWY3MDU4Y2ZlMTJiOC4uZDRlNDhiM2U0
NDk2NjNmYTFmY2YwY2RhNjQxMGM5MmJhNDkxNWM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUveG1sL1hNTEVycm9ycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxFcnJvcnMuaApA
QCAtNDcsMTcgKzQ3LDE3IEBAIHB1YmxpYzoKICAgICAvLyBFeHBvc2VkIGZvciBjYWxsYmFja3M6
CiAgICAgZW51bSBFcnJvclR5cGUgeyB3YXJuaW5nLCBub25GYXRhbCwgZmF0YWwgfTsKICAgICB2
b2lkIGhhbmRsZUVycm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIsIGludCBjb2x1bW5OdW1iZXIpOwotICAgIHZvaWQgaGFuZGxlRXJyb3IoRXJyb3JUeXBl
LCBjb25zdCBjaGFyKiBtZXNzYWdlLCBUZXh0UG9zaXRpb24xKTsKKyAgICB2b2lkIGhhbmRsZUVy
cm9yKEVycm9yVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSwgVGV4dFBvc2l0aW9uKTsKIAogICAg
IHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGFw
cGVuZEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcsIFRleHRQb3NpdGlvbjEs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgIHZvaWQgYXBwZW5kRXJyb3JNZXNzYWdlKGNvbnN0
IFN0cmluZyYgdHlwZVN0cmluZywgVGV4dFBvc2l0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsK
IAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogCiAgICAgaW50IG1fZXJyb3JDb3VudDsKLSAg
ICBUZXh0UG9zaXRpb24xIG1fbGFzdEVycm9yUG9zaXRpb247CisgICAgVGV4dFBvc2l0aW9uIG1f
bGFzdEVycm9yUG9zaXRpb247CiAgICAgU3RyaW5nQnVpbGRlciBtX2Vycm9yTWVzc2FnZXM7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuaXpl
ckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5o
CmluZGV4IGZkODk5NTJiYTA0MzEzYWI4M2RlZWYxMDNjMzYxMTNiZTk5YzMxYjYuLmExY2E0MDJi
OTU1ZWUxNTg5Mjk1MjRhMTkzYTE4YWZhODE2MzY2NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvTWFya3VwVG9rZW5pemVyQmFzZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0
aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsOCArNDUsNyBAQCBjbGFzcyBN
YXJrdXBUb2tlbml6ZXJCYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5NYXJrdXBUb2tlbml6
ZXJCYXNlKCkgeyB9CiAKLSAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZU51bWJlcjsgfQotICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdCB7IHJldHVybiAxOyB9IC8v
IE1hdGNoZXMgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggYmVoYXZpb3IuCisgICAgT3JkaW5h
bE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbVpl
cm9CYXNlZEludChtX2xpbmVOdW1iZXIpOyB9CiAKICAgICB0eXBlbmFtZSBTdGF0ZTo6U3RhdGUg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgdm9pZCBzZXRTdGF0ZSh0eXBl
bmFtZSBTdGF0ZTo6U3RhdGUgc3RhdGUpIHsgbV9zdGF0ZSA9IHN0YXRlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL05ld1hNTERvY3VtZW50UGFyc2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDdk
MDQ0Nzk1NjJhM2ZjODdkNDY0MDg2NWViNWM2OWQ1NGMyNDAzMmMuLmJlNzJjNWRiZjFmYTY3MGFm
MDg0MWEwMmRkNDc4MGZjZDIzMjZjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9w
YXJzZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC04NCw5ICs4NCw5IEBAIHZvaWQgTmV3
WE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmcoKQogCiB2b2lkIE5ld1hNTERvY3VtZW50
UGFyc2VyOjpwcm9jZXNzU2NyaXB0KFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQpCiB7Ci0g
ICAgaWYgKHNjcmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQoVGV4dFBvc2l0aW9uMSgpLCBTY3Jp
cHRFbGVtZW50OjpBbGxvd0xlZ2FjeVR5cGVJblR5cGVBdHRyaWJ1dGUpKSB7CisgICAgaWYgKHNj
cmlwdEVsZW1lbnQtPnByZXBhcmVTY3JpcHQoVGV4dFBvc2l0aW9uKCksIFNjcmlwdEVsZW1lbnQ6
OkFsbG93TGVnYWN5VHlwZUluVHlwZUF0dHJpYnV0ZSkpIHsKICAgICAgICAgaWYgKHNjcmlwdEVs
ZW1lbnQtPnJlYWR5VG9CZVBhcnNlckV4ZWN1dGVkKCkpCi0gICAgICAgICAgICBzY3JpcHRFbGVt
ZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0
Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgVGV4dFBvc2l0aW9uMSgpKSk7CisgICAgICAg
ICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0
RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgVGV4dFBvc2l0aW9u
KCkpKTsKICAgICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEJlUGFyc2VyRXhlY3V0
ZWQoKSkgewogICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0ID0gc2NyaXB0RWxlbWVudC0+Y2Fj
aGVkU2NyaXB0KCk7CiAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSBzY3JpcHRFbGVtZW50
LT5lbGVtZW50KCk7CkBAIC0xMDAsMTUgKzEwMCwxNCBAQCB2b2lkIE5ld1hNTERvY3VtZW50UGFy
c2VyOjpwcm9jZXNzU2NyaXB0KFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQpCiAgICAgfQog
fQogCi1UZXh0UG9zaXRpb24wIE5ld1hNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBj
b25zdAorVGV4dFBvc2l0aW9uIE5ld1hNTERvY3VtZW50UGFyc2VyOjp0ZXh0UG9zaXRpb24oKSBj
b25zdAogewotICAgIHJldHVybiBUZXh0UG9zaXRpb24wKFplcm9CYXNlZE51bWJlcjo6ZnJvbVpl
cm9CYXNlZEludCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBaZXJvQmFzZWROdW1iZXI6
OmZyb21aZXJvQmFzZWRJbnQoMCkpOworICAgIHJldHVybiBUZXh0UG9zaXRpb246Om1pbmltdW1Q
b3NpdGlvbigpOwogfQogCi1aZXJvQmFzZWROdW1iZXIgTmV3WE1MRG9jdW1lbnRQYXJzZXI6Omxp
bmVOdW1iZXIoKSBjb25zdAorT3JkaW5hbE51bWJlciBOZXdYTUxEb2N1bWVudFBhcnNlcjo6bGlu
ZU51bWJlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFplcm9CYXNlZE51bWJlcjo6YmVsb3dCYXNl
KCk7CisgICAgcmV0dXJuIE9yZGluYWxOdW1iZXI6OmZpcnN0KCk7CiB9CiAKIHZvaWQgTmV3WE1M
RG9jdW1lbnRQYXJzZXI6Omluc2VydChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5oIGIvU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9OZXdYTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IDA3ODRj
YzVmNjk2MTk5ODgxMzUxY2IzODgxZTQyYjAxMDBlYTdlYTYuLjAzYWQzMGJjODIxNDU5NTk1MGFm
ZWRiZTA4MzI5YjY2ZWZmMzU5NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvTmV3WE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L05ld1hNTERvY3VtZW50UGFyc2VyLmgKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgIHZv
aWQgcmVzdW1lUGFyc2luZygpOwogICAgIHZvaWQgcHJvY2Vzc1NjcmlwdChTY3JpcHRFbGVtZW50
Kik7CiAKLSAgICB2aXJ0dWFsIFRleHRQb3NpdGlvbjAgdGV4dFBvc2l0aW9uKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBaZXJvQmFzZWROdW1iZXIgbGluZU51bWJlcigpIGNvbnN0OworICAgIHZpcnR1
YWwgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgT3JkaW5h
bE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CiAKICAgICAvLyBEb2N1bWVudFBhcnNlcgogICAg
IHZpcnR1YWwgYm9vbCBoYXNJbnNlcnRpb25Qb2ludCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA0YzdmNzQwY2Q0YmUwOGUyNjA0
NzZiOGI1ZDE4NDM2MWRjMWQ1Y2Q2Li4yNDkyM2VlMzJlMjA1NTUyMjBkNWEyOGFkNjgyYWNlZDll
NGFiNTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyLmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwdXNoQ3Vy
cmVudE5vZGUoQ29udGFpbmVyTm9kZSogbikKICAgICBtX2N1cnJlbnROb2RlU3RhY2suYXBwZW5k
KG1fY3VycmVudE5vZGUpOwogICAgIG1fY3VycmVudE5vZGUgPSBuOwogICAgIGlmIChtX2N1cnJl
bnROb2RlU3RhY2suc2l6ZSgpID4gbWF4RE9NVHJlZURlcHRoKQotICAgICAgICBoYW5kbGVFcnJv
cihYTUxFcnJvcnM6OmZhdGFsLCAiRXhjZXNzaXZlIG5vZGUgbmVzdGluZy4iLCBXVEY6OnRvT25l
QmFzZWRUZXh0UG9zaXRpb24odGV4dFBvc2l0aW9uKCkpKTsKKyAgICAgICAgaGFuZGxlRXJyb3Io
WE1MRXJyb3JzOjpmYXRhbCwgIkV4Y2Vzc2l2ZSBub2RlIG5lc3RpbmcuIiwgdGV4dFBvc2l0aW9u
KCkpOwogfQogCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwb3BDdXJyZW50Tm9kZSgpCkBAIC0x
MzMsNyArMTMzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYgcykKICAgICBJbWFnZUxvYWRlcjo6ZGlzcGF0Y2hQZW5kaW5nQmVmb3JlTG9h
ZEV2ZW50cygpOwogfQogCi12b2lkIFhNTERvY3VtZW50UGFyc2VyOjpoYW5kbGVFcnJvcihYTUxF
cnJvcnM6OkVycm9yVHlwZSB0eXBlLCBjb25zdCBjaGFyKiBtLCBUZXh0UG9zaXRpb24xIHBvc2l0
aW9uKQordm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6aGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpFcnJv
clR5cGUgdHlwZSwgY29uc3QgY2hhciogbSwgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKQogewogICAg
IG1feG1sRXJyb3JzLmhhbmRsZUVycm9yKHR5cGUsIG0sIHBvc2l0aW9uKTsKICAgICBpZiAodHlw
ZSAhPSBYTUxFcnJvcnM6Ondhcm5pbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TERvY3VtZW50UGFyc2VyLmgKaW5kZXggZDJhMWFkN2EyODQwNjMwZWJhZmU4MGVmNGI0ZDJmNDI4
M2IyNGQ3NS4uZDUxNDU5NmJiYWM3MjBmNDAwYjIzODViOTE2OTI4NGZhMzQyODI1NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtODcsNyAr
ODcsNyBAQCBjbGFzcyBUZXh0OwogICAgICAgICB+WE1MRG9jdW1lbnRQYXJzZXIoKTsKIAogICAg
ICAgICAvLyBFeHBvc2VkIGZvciBjYWxsYmFja3M6Ci0gICAgICAgIHZvaWQgaGFuZGxlRXJyb3Io
WE1MRXJyb3JzOjpFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIFRleHRQb3NpdGlvbjEp
OworICAgICAgICB2b2lkIGhhbmRsZUVycm9yKFhNTEVycm9yczo6RXJyb3JUeXBlLCBjb25zdCBj
aGFyKiBtZXNzYWdlLCBUZXh0UG9zaXRpb24pOwogCiAgICAgICAgIHZvaWQgc2V0SXNYSFRNTERv
Y3VtZW50KGJvb2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxEb2N1bWVudCA9IGlzWEhUTUw7IH0KICAg
ICAgICAgYm9vbCBpc1hIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1
bWVudDsgfQpAQCAtMTAxLDcgKzEwMSw3IEBAIGNsYXNzIFRleHQ7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYmUgdXNlZCBieSBXTUwuIENhbiB3ZSByZW1vdmUgaXQ/
CiAgICAgICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9ybWVkKCkgY29uc3QgeyByZXR1cm4gIW1fc2F3
RXJyb3I7IH0KIAotICAgICAgICBUZXh0UG9zaXRpb24wIHRleHRQb3NpdGlvbigpIGNvbnN0Owor
ICAgICAgICBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNYTUxWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xMTcsOCAr
MTE3LDggQEAgY2xhc3MgVGV4dDsKICAgICAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0ZvclNj
cmlwdHMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0b3BQYXJzaW5nKCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICAgICAgdmlydHVhbCBaZXJvQmFzZWROdW1i
ZXIgbGluZU51bWJlcigpIGNvbnN0OwotICAgICAgICBaZXJvQmFzZWROdW1iZXIgY29sdW1uTnVt
YmVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgT3JkaW5hbE51bWJlciBsaW5lTnVtYmVyKCkg
Y29uc3Q7CisgICAgICAgIE9yZGluYWxOdW1iZXIgY29sdW1uTnVtYmVyKCkgY29uc3Q7CiAKICAg
ICAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAogICAgICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX3BlbmRp
bmdTY3JpcHQ7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdEVsZW1lbnQ7Ci0gICAg
ICAgIFRleHRQb3NpdGlvbjEgbV9zY3JpcHRTdGFydFBvc2l0aW9uOworICAgICAgICBUZXh0UG9z
aXRpb24gbV9zY3JpcHRTdGFydFBvc2l0aW9uOwogCiAgICAgICAgIGJvb2wgbV9wYXJzaW5nRnJh
Z21lbnQ7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1lc3BhY2VVUkk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1s
Mi5jcHAKaW5kZXggODJlZjZiNDBlMjRmYWNhNTU4Njk0YWYzMjZiNjU1ZmM2NzgyOGQzYy4uZDQw
MWE4ZWRiMGYyMmRhNzJlNjIxZjM0MTY1Y2JjNjdhYTI0YmVmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcApAQCAt
MTcyLDcgKzE3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxi
YWNrLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRFcnJvckNhbGxiYWNrKFhN
TEVycm9yczo6RXJyb3JUeXBlIHR5cGUsIGNvbnN0IHhtbENoYXIqIG1lc3NhZ2UsIE9uZUJhc2Vk
TnVtYmVyIGxpbmVOdW1iZXIsIE9uZUJhc2VkTnVtYmVyIGNvbHVtbk51bWJlcikKKyAgICB2b2lk
IGFwcGVuZEVycm9yQ2FsbGJhY2soWE1MRXJyb3JzOjpFcnJvclR5cGUgdHlwZSwgY29uc3QgeG1s
Q2hhciogbWVzc2FnZSwgT3JkaW5hbE51bWJlciBsaW5lTnVtYmVyLCBPcmRpbmFsTnVtYmVyIGNv
bHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIE93blB0cjxQZW5kaW5nRXJyb3JDYWxsYmFjaz4g
Y2FsbGJhY2sgPSBhZG9wdFB0cihuZXcgUGVuZGluZ0Vycm9yQ2FsbGJhY2spOwogCkBAIC0zMjUs
MTMgKzMyNSwxMyBAQCBwcml2YXRlOgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxsKFhNTERv
Y3VtZW50UGFyc2VyKiBwYXJzZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlci0+aGFu
ZGxlRXJyb3IodHlwZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWVzc2FnZSksIFRleHRQb3Np
dGlvbjEobGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7CisgICAgICAgICAgICBwYXJzZXItPmhh
bmRsZUVycm9yKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1lc3NhZ2UpLCBUZXh0UG9z
aXRpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7CiAgICAgICAgIH0KIAogICAgICAgICBY
TUxFcnJvcnM6OkVycm9yVHlwZSB0eXBlOwogICAgICAgICB4bWxDaGFyKiBtZXNzYWdlOwotICAg
ICAgICBPbmVCYXNlZE51bWJlciBsaW5lTnVtYmVyOwotICAgICAgICBPbmVCYXNlZE51bWJlciBj
b2x1bW5OdW1iZXI7CisgICAgICAgIE9yZGluYWxOdW1iZXIgbGluZU51bWJlcjsKKyAgICAgICAg
T3JkaW5hbE51bWJlciBjb2x1bW5OdW1iZXI7CiAgICAgfTsKIAogICAgIERlcXVlPE93blB0cjxQ
ZW5kaW5nQ2FsbGJhY2s+ID4gbV9jYWxsYmFja3M7CkBAIC01NjQsNyArNTY0LDcgQEAgWE1MRG9j
dW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCwgRnJhbWVW
aWV3KiBmcmFtZVZpZXcpCiAgICAgLCBtX2ZpbmlzaENhbGxlZChmYWxzZSkKICAgICAsIG1feG1s
RXJyb3JzKGRvY3VtZW50KQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3Njcmlw
dFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAg
LCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24o
KSkKICAgICAsIG1fcGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9zY3JpcHRpbmdQZXJt
aXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKIHsKQEAgLTU5MCw3ICs1OTAsNyBAQCBY
TUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIEVsZW1lbnQqIHBhcmVudAogICAgICwgbV9maW5pc2hDYWxsZWQoZmFsc2UpCiAgICAg
LCBtX3htbEVycm9ycyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fcGVuZGluZ1Njcmlw
dCgwKQotICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjE6OmJlbG93UmFu
Z2VQb3NpdGlvbigpKQorICAgICwgbV9zY3JpcHRTdGFydFBvc2l0aW9uKFRleHRQb3NpdGlvbjo6
YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAg
ICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CkBAIC02NzQs
NyArNjc0LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcm
IHBhcnNlU3RyaW5nKQogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBoZXJlPyAgQW5kIHdoeSBp
cyBpdCBhZnRlciB3ZSBwcm9jZXNzIHRoZSBwYXNzZWQgc291cmNlPwogICAgIGlmIChkb2N1bWVu
dCgpLT5kZWNvZGVyKCkgJiYgZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7CiAg
ICAgICAgIC8vIElmIHRoZSBkZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFs
IChzdG9wcyBwYXJzaW5nKQotICAgICAgICBUZXh0UG9zaXRpb24xIHBvc2l0aW9uKE9uZUJhc2Vk
TnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+bGluZSks
IE9uZUJhc2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoY29udGV4dC0+Y29udGV4dCgpLT5pbnB1
dC0+Y29sKSk7CisgICAgICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpm
cm9tT25lQmFzZWRJbnQoY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+bGluZSksIE9yZGluYWxO
dW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5jb250ZXh0KCktPmlucHV0LT5jb2wpKTsK
ICAgICAgICAgaGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwg
cG9zaXRpb24pOwogICAgIH0KIH0KQEAgLTgyMiw3ICs4MjIsNyBAQCB2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0
IHhtbENoYQogCiAgICAgU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxl
bWVudChuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAoc2NyaXB0RWxlbWVudCkKLSAgICAgICAg
bV9zY3JpcHRTdGFydFBvc2l0aW9uID0gV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0aW9uKHRleHRQ
b3NpdGlvbigpKTsKKyAgICAgICAgbV9zY3JpcHRTdGFydFBvc2l0aW9uID0gdGV4dFBvc2l0aW9u
KCk7CiAKICAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChuZXdFbGVtZW50LmdldCgp
KTsKIApAQCAtOTUwLDkgKzk1MCw5IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVycm9yKFhN
TEVycm9yczo6RXJyb3JUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZhCiAjZW5kaWYK
IAogICAgIGlmIChtX3BhcnNlclBhdXNlZCkKLSAgICAgICAgbV9wZW5kaW5nQ2FsbGJhY2tzLT5h
cHBlbmRFcnJvckNhbGxiYWNrKHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgeG1sQ2hhcio+
KG0pLCBsaW5lTnVtYmVyKCkuY29udmVydFRvT25lQmFzZWQoKSwgY29sdW1uTnVtYmVyKCkuY29u
dmVydFRvT25lQmFzZWQoKSk7CisgICAgICAgIG1fcGVuZGluZ0NhbGxiYWNrcy0+YXBwZW5kRXJy
b3JDYWxsYmFjayh0eXBlLCByZWludGVycHJldF9jYXN0PGNvbnN0IHhtbENoYXIqPihtKSwgbGlu
ZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CiAgICAgZWxzZQotICAgICAgICBoYW5kbGVFcnJv
cih0eXBlLCBtLCBXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRpb24odGV4dFBvc2l0aW9uKCkpKTsK
KyAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwgbSwgdGV4dFBvc2l0aW9uKCkpOwogCiAjaWYgSEFW
RShWQVNQUklOVEYpCiAgICAgZnJlZShtKTsKQEAgLTEzNjksMjUgKzEzNjksMjMgQEAgdm9pZCog
eG1sRG9jUHRyRm9yU3RyaW5nKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxv
YWRlciwgY29uc3QgU3RyaW4KIH0KICNlbmRpZgogCi1aZXJvQmFzZWROdW1iZXIgWE1MRG9jdW1l
bnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAorT3JkaW5hbE51bWJlciBYTUxEb2N1bWVudFBh
cnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7Ci0gICAgT25lQmFzZWROdW1iZXIgbnVtYmVyID0g
T25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0KCkgPyBjb250ZXh0KCktPmlu
cHV0LT5saW5lIDogMSk7Ci0gICAgcmV0dXJuIG51bWJlci5jb252ZXJ0VG9aZXJvQmFzZWQoKTsK
KyAgICByZXR1cm4gT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQoKSA/IGNv
bnRleHQoKS0+aW5wdXQtPmxpbmUgOiAxKTsKIH0KIAotWmVyb0Jhc2VkTnVtYmVyIFhNTERvY3Vt
ZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjb25zdAorT3JkaW5hbE51bWJlciBYTUxEb2N1bWVu
dFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKIHsKLSAgICBPbmVCYXNlZE51bWJlciBudW1i
ZXIgPSBPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KGNvbnRleHQoKSA/IGNvbnRleHQo
KS0+aW5wdXQtPmNvbCA6IDEpOwotICAgIHJldHVybiBudW1iZXIuY29udmVydFRvWmVyb0Jhc2Vk
KCk7CisgICAgcmV0dXJuIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0KCkg
PyBjb250ZXh0KCktPmlucHV0LT5jb2wgOiAxKTsKIH0KIAotVGV4dFBvc2l0aW9uMCBYTUxEb2N1
bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKK1RleHRQb3NpdGlvbiBYTUxEb2N1bWVu
dFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICB4bWxQYXJzZXJDdHh0UHRyIGNv
bnRleHQgPSB0aGlzLT5jb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1
cm4gVGV4dFBvc2l0aW9uMDo6bWluaW11bVBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFRleHRQb3Np
dGlvbjAoT25lQmFzZWROdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1dC0+bGlu
ZSkuY29udmVydFRvWmVyb0Jhc2VkKCksCi0gICAgICAgIE9uZUJhc2VkTnVtYmVyOjpmcm9tT25l
QmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkuY29udmVydFRvWmVyb0Jhc2VkKCkpOworICAg
ICAgICByZXR1cm4gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9zaXRpb24oKTsKKyAgICByZXR1cm4g
VGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChjb250ZXh0LT5pbnB1
dC0+bGluZSksCisgICAgICAgICAgICAgICAgICAgICAgICBPcmRpbmFsTnVtYmVyOjpmcm9tT25l
QmFzZWRJbnQoY29udGV4dC0+aW5wdXQtPmNvbCkpOwogfQogCiB2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpzdG9wUGFyc2luZygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlclF0LmNwcAppbmRleCBmYTRiZDBkZjliZjQzYjNkMjgyMTNkMWZiNjdkMzIz
MWQxMzk3NzI3Li4yYzA3ZTVhMDU0ZTQ0NmRhYTVlYjQ4ZDg4NGFkYjBhZGE5MmRlNjliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAK
QEAgLTEwMyw3ICsxMDMsNyBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIo
RG9jdW1lbnQqIGRvY3VtZW50LCBGcmFtZVZpZXcqIGZyYW1lVmlldykKICAgICAsIG1fZmluaXNo
Q2FsbGVkKGZhbHNlKQogICAgICwgbV94bWxFcnJvcnMoZG9jdW1lbnQpCiAgICAgLCBtX3BlbmRp
bmdTY3JpcHQoMCkKLSAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb24xOjpi
ZWxvd1JhbmdlUG9zaXRpb24oKSkKKyAgICAsIG1fc2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9z
aXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFs
c2UpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2Vk
KQogewpAQCAtMTI5LDcgKzEyOSw3IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBh
cnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50CiAgICAgLCBt
X2ZpbmlzaENhbGxlZChmYWxzZSkKICAgICAsIG1feG1sRXJyb3JzKGZyYWdtZW50LT5kb2N1bWVu
dCgpKQogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCi0gICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRp
b24oVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCisgICAgLCBtX3NjcmlwdFN0
YXJ0UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1f
cGFyc2luZ0ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24ocGVybWlz
c2lvbikKIHsKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkb1dy
aXRlKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCiAKICAgICBpZiAoZG9jdW1lbnQoKS0+ZGVj
b2RlcigpICYmIGRvY3VtZW50KCktPmRlY29kZXIoKS0+c2F3RXJyb3IoKSkgewogICAgICAgICAv
LyBJZiB0aGUgZGVjb2RlciBzYXcgYW4gZXJyb3IsIHJlcG9ydCBpdCBhcyBmYXRhbCAoc3RvcHMg
cGFyc2luZykKLSAgICAgICAgaGFuZGxlRXJyb3IoWE1MRXJyb3JzOjpmYXRhbCwgIkVuY29kaW5n
IGVycm9yIiwgV1RGOjp0b09uZUJhc2VkVGV4dFBvc2l0aW9uKHRleHRQb3NpdGlvbigpKSk7Cisg
ICAgICAgIGhhbmRsZUVycm9yKFhNTEVycm9yczo6ZmF0YWwsICJFbmNvZGluZyBlcnJvciIsIHRl
eHRQb3NpdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjIzLDIyICsyMjMs
MjIgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQogCiAgICAgaWYgKG1fc3RyZWFt
LmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0dXJlRW5kT2ZEb2N1bWVudEVycm9y
CiAgICAgICAgIHx8IChtX3dyb3RlVGV4dCAmJiAhbV9zYXdGaXJzdEVsZW1lbnQgJiYgIW1fc2F3
WFNMVHJhbnNmb3JtICYmICFtX3Nhd0Vycm9yKSkKLSAgICAgICAgaGFuZGxlRXJyb3IoWE1MRXJy
b3JzOjpmYXRhbCwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgV1RGOjp0b09u
ZUJhc2VkVGV4dFBvc2l0aW9uKHRleHRQb3NpdGlvbigpKSk7CisgICAgICAgIGhhbmRsZUVycm9y
KFhNTEVycm9yczo6ZmF0YWwsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIHRl
eHRQb3NpdGlvbigpKTsKIH0KIAotWmVyb0Jhc2VkTnVtYmVyIFhNTERvY3VtZW50UGFyc2VyOjps
aW5lTnVtYmVyKCkgY29uc3QKK09yZGluYWxOdW1iZXIgWE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVO
dW1iZXIoKSBjb25zdAogewotICAgIHJldHVybiBPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2Vk
SW50KG1fc3RyZWFtLmxpbmVOdW1iZXIoKSkuY29udmVydFRvWmVyb0Jhc2VkKCk7CisgICAgcmV0
dXJuIE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChtX3N0cmVhbS5saW5lTnVtYmVyKCkp
OwogfQogCi1aZXJvQmFzZWROdW1iZXIgWE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigp
IGNvbnN0CitPcmRpbmFsTnVtYmVyIFhNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBj
b25zdAogewotICAgIHJldHVybiBPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fc3Ry
ZWFtLmNvbHVtbk51bWJlcigpKS5jb252ZXJ0VG9aZXJvQmFzZWQoKTsKKyAgICByZXR1cm4gT3Jk
aW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KG1fc3RyZWFtLmNvbHVtbk51bWJlcigpKTsKIH0K
IAotVGV4dFBvc2l0aW9uMCBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QK
K1RleHRQb3NpdGlvbiBYTUxEb2N1bWVudFBhcnNlcjo6dGV4dFBvc2l0aW9uKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gVGV4dFBvc2l0aW9uMChsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsK
KyAgICByZXR1cm4gVGV4dFBvc2l0aW9uKGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwog
fQogCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCkBAIC00MzMsNyArNDMz
LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgaWYgKG1f
c3RyZWFtLmVycm9yKCkgIT0gUVhtbFN0cmVhbVJlYWRlcjo6UHJlbWF0dXJlRW5kT2ZEb2N1bWVu
dEVycm9yKSB7CiAgICAgICAgICAgICAgICAgWE1MRXJyb3JzOjpFcnJvclR5cGUgdHlwZSA9ICht
X3N0cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJvcikg
PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MRXJyb3JzOjpmYXRhbCA6IFhN
TEVycm9yczo6d2FybmluZzsKLSAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBxUHJp
bnRhYmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBXVEY6OnRvT25lQmFzZWRUZXh0UG9zaXRp
b24odGV4dFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBx
UHJpbnRhYmxlKG1fc3RyZWFtLmVycm9yU3RyaW5nKCkpLCB0ZXh0UG9zaXRpb24oKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTIxLDcgKzUyMSw3
IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKIAogICAgIFNj
cmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5n
ZXQoKSk7CiAgICAgaWYgKHNjcmlwdEVsZW1lbnQpCi0gICAgICAgIG1fc2NyaXB0U3RhcnRQb3Np
dGlvbiA9IFdURjo6dG9PbmVCYXNlZFRleHRQb3NpdGlvbih0ZXh0UG9zaXRpb24oKSk7CisgICAg
ICAgIG1fc2NyaXB0U3RhcnRQb3NpdGlvbiA9IHRleHRQb3NpdGlvbigpOwogCiAgICAgbV9jdXJy
ZW50Tm9kZS0+cGFyc2VyQWRkQ2hpbGQobmV3RWxlbWVudC5nZXQoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggOTc2YzBhMjA1ZWJiNTQwMGM3OWEyYWI4M2QxMGVhM2NjOThhZDFh
MC4uOWQ1OTUzMWFiMmI5YzRhODc2ZGMwZmNhYTcwODBjMzZkMmFkNDg5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wOS0xOSAgUGV0ZXIgUnliaW4g
IDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgVGV4dFBvc2l0aW9uIHJlZmFjdG9y
aW5nOiBNZXJnZSBaZXJvQmFzZWROdW1iZXIgYW5kIE9uZUJhc2VkTnVtYmVyIGNsYXNzZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTQxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvV2ViRnJh
bWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0QW5k
UmV0dXJuVmFsdWUpOgorCiAyMDExLTA5LTE5ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBleHRlbmQgdGltZWxpbmUgY292
ZXJhZ2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRl
eCA2NWY1NmYxMzhiZjMzZjE2MGNmNjg0NDVhNWU1MDg0NDRjZjE2ZDc1Li5iYWJlMzcyM2MyNzAy
ZmFhZjVhZDc2MzU3ODdjZTFjNDMxYzRkNjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTc1MCw3ICs3NTAsNyBAQCB2b2lkIFdlYkZyYW1lSW1w
bDo6YmluZFRvV2luZG93T2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgTlBPYmplY3QqIG9i
amVjdCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHQoY29uc3QgV2ViU2NyaXB0
U291cmNlJiBzb3VyY2UpCiB7Ci0gICAgVGV4dFBvc2l0aW9uMSBwb3NpdGlvbihXVEY6Ok9uZUJh
c2VkTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIFdURjo6T25lQmFz
ZWROdW1iZXI6OmJhc2UoKSk7CisgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKE9yZGluYWxOdW1i
ZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2Uuc3RhcnRMaW5lKSwgT3JkaW5hbE51bWJlcjo6Zmly
c3QoKSk7CiAgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoCiAgICAgICAgIFNj
cmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSk7CiB9CkBA
IC03NjIsNyArNzYyLDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xh
dGVkV29ybGQoCiAgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+IHNvdXJjZXM7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291cmNlczsgKytpKSB7Ci0gICAgICAgIFRleHRQ
b3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNv
dXJjZXNJbltpXS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpiYXNlKCkpOworICAg
ICAgICBUZXh0UG9zaXRpb24gcG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50
KHNvdXJjZXNJbltpXS5zdGFydExpbmUpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKICAgICAg
ICAgc291cmNlcy5hcHBlbmQoU2NyaXB0U291cmNlQ29kZSgKICAgICAgICAgICAgIHNvdXJjZXNJ
bltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlvbikpOwogICAgIH0KQEAgLTgzMiw3
ICs4MzIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpleGVjdXRlU2Ny
aXB0QW5kUmV0dXJuVmFsdWUoY29uc3QgV2ViU2NyaXB0UwogICAgIC8vIGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg2Mzk3CiAgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKIAotICAgIFRleHRQb3NpdGlvbjEgcG9zaXRpb24oV1RGOjpPbmVCYXNlZE51bWJlcjo6
ZnJvbU9uZUJhc2VkSW50KHNvdXJjZS5zdGFydExpbmUpLCBXVEY6Ok9uZUJhc2VkTnVtYmVyOjpi
YXNlKCkpOworICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25l
QmFzZWRJbnQoc291cmNlLnN0YXJ0TGluZSksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpOwogICAg
IHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2Rl
KHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpLnY4VmFsdWUoKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>