<?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>214215</bug_id>
          
          <creation_ts>2020-07-10 21:42:59 -0700</creation_ts>
          <short_desc>Remove live ranges from AccessibilityObject.h, AccessibilityObjectInterface.h, AccessibilityRenderObject.h, AXIsolatedObject.h</short_desc>
          <delta_ts>2020-07-11 15:38:51 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1670716</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 21:42:59 -0700</bug_when>
    <thetext>Remove live ranges from AccessibilityObject.h, AccessibilityObjectInterface.h, AccessibilityRenderObject.h, AXIsolatedObject.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670720</commentid>
    <comment_count>1</comment_count>
      <attachid>404044</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 21:55:46 -0700</bug_when>
    <thetext>Created attachment 404044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670721</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-10 21:56:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/65382291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670724</commentid>
    <comment_count>3</comment_count>
      <attachid>404046</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-10 22:25:42 -0700</bug_when>
    <thetext>Created attachment 404046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670749</commentid>
    <comment_count>4</comment_count>
      <attachid>404056</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 09:47:33 -0700</bug_when>
    <thetext>Created attachment 404056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670753</commentid>
    <comment_count>5</comment_count>
      <attachid>404056</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-11 10:27:23 -0700</bug_when>
    <thetext>Comment on attachment 404056
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:309
&gt; +            if (misspellingRange-&gt;compareBoundaryPoints(Range::END_TO_END, createLiveRange(start)).releaseReturnValue() &gt; 0)

It&apos;s a bit unfortunate that this live range needs to get created each time through the loop. Might be worth caching it until we have a version of compareBoundaryPoints that can take a SimpleRange.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1278
&gt; +    auto start = makeBoundaryPoint(visiblePositionRange.start);
&gt; +    auto end = makeBoundaryPoint(visiblePositionRange.end);
&gt; +    if (!start || !end)
&gt;          return String();

I&apos;d probably break this up into:

    auto start = makeBoundaryPoint(visiblePositionRange.start);
    if (!start)
        return { };
    auto end = makeBoundaryPoint(visiblePositionRange.end);
    if (!end)
        return { };

to skip the unnecessary construction of end if start is null.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1281
&gt; +    for (TextIterator it({ *start, *end }); !it.atEnd(); it.advance()) {

One day, I will quietly turn this into a proper c++ style iterator.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1303
&gt; +    auto start = makeBoundaryPoint(visiblePositionRange.start);
&gt; +    auto end = makeBoundaryPoint(visiblePositionRange.end);
&gt; +    if (!start || !end)
&gt; +        return -1; // FIXME: Why not return 0?

Same comment about splitting this up (and in a few more places below.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:917
&gt; +        auto start = VisiblePosition { createLegacyEditingPosition(range-&gt;start) };

This could be moved within the if-statement below.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2170
&gt; +    CharacterOffset start = cache-&gt;startOrEndCharacterOffsetForRange(range, true);
&gt; +    CharacterOffset end = cache-&gt;startOrEndCharacterOffsetForRange(range, false);

Could use auto here. function name makes it very clear what the return type is.

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:698
&gt; +        operation.textRanges.reserveInitialCapacity(markerRanges.count);
&gt; +        for (id markerRange : markerRanges) {
&gt; +            if (auto range = [obj rangeForTextMarkerRange:markerRange])
&gt; +                operation.textRanges.append(*range);
&gt; +        }

This could be slightly more optimal by using uncheckedAppend. I don&apos;t think we have a map() for this case, but it would be nice if you could write something like:

operation.textRanges = WTF::mapIgnoringNullopts(markerRanges, [] (const auto&amp; v) -&gt; Optional&lt;SimpleRange&gt; { 
     if (auto range = [obj rangeForTextMarkerRange:markerRange])
         return *range;
    return WTF::nullopt;   
});</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670761</commentid>
    <comment_count>6</comment_count>
      <attachid>404056</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 11:50:47 -0700</bug_when>
    <thetext>Comment on attachment 404056
Patch

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

I guess I still have a crash to fix.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:309
&gt;&gt; +            if (misspellingRange-&gt;compareBoundaryPoints(Range::END_TO_END, createLiveRange(start)).releaseReturnValue() &gt; 0)
&gt; 
&gt; It&apos;s a bit unfortunate that this live range needs to get created each time through the loop. Might be worth caching it until we have a version of compareBoundaryPoints that can take a SimpleRange.

I’ve been pretty cavalier about such things, often valuing clarity of future refactoring over efficiency. I’m fine hosting it out of the loop in this case, though.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1278
&gt;&gt;          return String();
&gt; 
&gt; I&apos;d probably break this up into:
&gt; 
&gt;     auto start = makeBoundaryPoint(visiblePositionRange.start);
&gt;     if (!start)
&gt;         return { };
&gt;     auto end = makeBoundaryPoint(visiblePositionRange.end);
&gt;     if (!end)
&gt;         return { };
&gt; 
&gt; to skip the unnecessary construction of end if start is null.

I’d be willing to do this, but I intentionally used the more economical style, even though it’s less efficient for the null case.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1281
&gt;&gt; +    for (TextIterator it({ *start, *end }); !it.atEnd(); it.advance()) {
&gt; 
&gt; One day, I will quietly turn this into a proper c++ style iterator.

Yes, making some style of TextIterator work in a range-based for loop would not even be all that hard!

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:917
&gt;&gt; +        auto start = VisiblePosition { createLegacyEditingPosition(range-&gt;start) };
&gt; 
&gt; This could be moved within the if-statement below.

It can’t, because end is computed based on start.

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:2170
&gt;&gt; +    CharacterOffset end = cache-&gt;startOrEndCharacterOffsetForRange(range, false);
&gt; 
&gt; Could use auto here. function name makes it very clear what the return type is.

OK.

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:698
&gt;&gt; +        }
&gt; 
&gt; This could be slightly more optimal by using uncheckedAppend. I don&apos;t think we have a map() for this case, but it would be nice if you could write something like:
&gt; 
&gt; operation.textRanges = WTF::mapIgnoringNullopts(markerRanges, [] (const auto&amp; v) -&gt; Optional&lt;SimpleRange&gt; { 
&gt;      if (auto range = [obj rangeForTextMarkerRange:markerRange])
&gt;          return *range;
&gt;     return WTF::nullopt;   
&gt; });

I think we are *very* close to having a map() for this case. We have makeVector in VectorCocoa.h that does things like this. However, unlike the createNSArray function in the same file, it does yet not have a version that takes a mapping function, so I would have to overload makeVectorElement to use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670779</commentid>
    <comment_count>7</comment_count>
      <attachid>404068</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 13:48:38 -0700</bug_when>
    <thetext>Created attachment 404068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670780</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 13:49:12 -0700</bug_when>
    <thetext>Did everything you suggested, and it changed the patch a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670793</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 15:38:51 -0700</bug_when>
    <thetext>Committed r264271: &lt;https://trac.webkit.org/changeset/264271&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404044</attachid>
            <date>2020-07-10 21:55:46 -0700</date>
            <delta_ts>2020-07-10 22:25:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214215-20200710215545.patch</filename>
            <type>text/plain</type>
            <size>61949</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmMwZjI1MWE0NjYwNzQz
NjQ3MjA3MTNlMDc0M2FkMzhkOTAxMmU4Yi4uYWYyMDUzZmI5OTkxZjNjMjlkMjM1MzFiNzk3Y2Mx
YmRkY2ZlYjczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIwLTA3LTEwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBBY2Nlc3NpYmlsaXR5T2JqZWN0LmgsIEFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aCwgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oLCBBWElzb2xhdGVkT2JqZWN0LmgKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDIxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gdXNlIHRoZSBJ
bnRQb2ludCBhbmQgTGF5b3V0UG9pbnQgY2VudGVyKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygcm9s
bGluZyBvdXIgb3duLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxs
aW5nUmFuZ2UgY29uc3QpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuIEFsc28KKyAgICAgICAgcmVuYW1l
ZCBmcm9tIGdldE1pc3NwZWxsaW5nUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nl
c3RUb1JhbmdlKTogVGFrZSBhbmQgcmV0dXJuIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJl
Y3Rpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2UgY29uc3QpOiBUYWtlIGFu
ZCByZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpmaW5kVGV4dFJhbmdlcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6cGVyZm9ybVRleHRPcGVyYXRpb24pOiBVc2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KTogVXNl
IGNlbnRlcigpLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VG
b3JQbGFpblRleHRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdlIGNvbnN0KTogVGFrZSBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmlu
Z0ZvclZpc2libGVQb3NpdGlvblJhbmdlKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJl
cGxhY2VUZXh0SW5SYW5nZSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oOiBUYWtlIGFuZCBy
ZXR1cm4gU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6bGlua0NsaWNrUG9pbnQpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjbGlja1BvaW50KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRS
YW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Ym91bmRzRm9yUmFuZ2UgY29uc3QpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRp
b25SYW5nZSBjb25zdCk6CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hh
cmFjdGVyT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOiBVcGRhdGUgZm9yIGFi
b3ZlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IG1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlOmZvcndhcmQ6XSk6IFVzZSBTaW1wbGVSYW5nZS4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6c3RyaW5nRm9yUmFuZ2Ug
Y29uc3QpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9i
amVjdDo6ZmluZFRleHRSYW5nZXMgY29uc3QpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOiBVcGRhdGUg
Zm9yIGFib3ZlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlv
bkZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICgt
W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFu
Z2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBh
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOiBEaXR0by4KKworICAg
ICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0
ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQpOiBVc2UgY2VudGVyKCkuCisKIDIwMjAtMDctMTAgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCBmb3IgUExB
VEZPUk0oSU9TX0ZBTUlMWSkgJiYgIUVOQUJMRShSRVZFQUwpLCBmb3IgZXhhbXBsZSwgdHZPUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKaW5kZXggNTdhMDE5ZGZmZjFiODYwYzczODA3MDIwMzE3Mjg1YTEyMTkyMDQwZC4uMTBk
YjY5MGZjNDU1Zjc1OTY5NWU4NmRkNWRhZGZmOTY5YWZmNTNkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0yNzQs
MjQgKzI3NCwyNCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKCkg
Y29uc3QKICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwogfQogCi1SZWZQdHI8UmFuZ2U+IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYg
c3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAorT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKIHsKICAgICBhdXRvIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAgICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGlmICghdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChmcmFtZSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CiAKICAgICBUZXh0Q2hlY2tl
ckNsaWVudCogdGV4dENoZWNrZXIgPSBlZGl0b3IudGV4dENoZWNrZXIoKTsKICAgICBpZiAoIXRl
eHRDaGVja2VyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IG1pc3NwZWxsaW5nczsK
ICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIsIHN0cmluZ1ZhbHVlKCksIFRl
eHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBtaXNzcGVsbGluZ3MsIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CkBAIC0zMDYsOCArMzA2LDggQEAgUmVmUHRyPFJhbmdlPiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpnZXRNaXNzcGVsbGluZ1JhbmdlKFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0
YXIKICAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKnN0YXJ0KS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAg
ICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpF
TkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+
IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1pc3NwZWxsaW5nUmFu
Z2UgfTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IEFjY2Vzc2liaWxp
dHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKSB7CiAgICAgICAgIGZvciAoYXV0byByaXQgPSBt
aXNzcGVsbGluZ3MucmJlZ2luKCk7IHJpdCAhPSBtaXNzcGVsbGluZ3MucmVuZCgpOyArK3JpdCkg
ewpAQCAtMzE1LDEyICszMTUsMTIgQEAgUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpnZXRNaXNzcGVsbGluZ1JhbmdlKFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXIKICAgICAgICAg
ICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhS
YW5nZTo6U1RBUlRfVE9fU1RBUlQsICpzdGFydCkucmVsZWFzZVJldHVyblZhbHVlKCkgPCAwKQot
ICAgICAgICAgICAgICAgIHJldHVybiBtaXNzcGVsbGluZ1JhbmdlOworICAgICAgICAgICAgaWYg
KG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9f
U1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWlzc3BlbGxpbmdSYW5nZSB9
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YmxvY2txdW90
ZUxldmVsKCkgY29uc3QKQEAgLTU2Miw2NyArNTYyLDYyIEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNy
aXRlCiAvLyBSZXR1cm5zIHRoZSByYW5nZSB0aGF0IGlzIGZld2VyIHBvc2l0aW9ucyBhd2F5IGZy
b20gdGhlIHJlZmVyZW5jZSByYW5nZS4KIC8vIE5PVEU6IFRoZSBhZnRlciByYW5nZSBpcyBleHBl
Y3RlZCB0byBBQ1RVQUxMWSBiZSBhZnRlciB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCB0aGUgYmVm
b3JlCiAvLyByYW5nZSBpcyBleHBlY3RlZCB0byBBQ1RVQUxMWSBiZSBiZWZvcmUuIFRoZXNlIGFy
ZSBub3QgY2hlY2tlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KLXN0YXRpYyBSZWZQdHI8UmFu
Z2U+IHJhbmdlQ2xvc2VzdFRvUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYgcmVmZXJlbmNlUmFu
Z2UsIFJlZlB0cjxSYW5nZT4mJiBhZnRlclJhbmdlLCBSZWZQdHI8UmFuZ2U+JiYgYmVmb3JlUmFu
Z2UpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQ2xvc2VzdFRvUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJlZmVyZW5jZVJhbmdlLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mJiBh
ZnRlclJhbmdlLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mJiBiZWZvcmVSYW5nZSkKIHsKLSAgICBp
ZiAoIXJlZmVyZW5jZVJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIC8vIFRo
ZSB0cmVlU2NvcGUgZm9yIHNoYWRvdyBub2RlcyBtYXkgbm90IGJlIHRoZSBzYW1lIHNjb3BlIGFz
IGFub3RoZXIgZWxlbWVudCBpbiBhIGRvY3VtZW50LgogICAgIC8vIENvbXBhcmlzb25zIG1heSBm
YWlsIGluIHRoYXQgY2FzZSwgd2hpY2ggYXJlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBzaG91bGQg
bm90IGFzc2VydC4KLSAgICBpZiAoYWZ0ZXJSYW5nZSAmJiAocmVmZXJlbmNlUmFuZ2UtPmVuZFBv
c2l0aW9uKCkuaXNOdWxsKCkgfHwgKChhZnRlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkuYW5jaG9y
Tm9kZSgpLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigqcmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0
aW9uKCkuYW5jaG9yTm9kZSgpKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RF
RCkgPT0gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIEFTU0VSVCghYWZ0ZXJSYW5nZSB8fCBhZnRlclJhbmdlLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqcmVmZXJlbmNlUmFuZ2Up
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDApOworICAgIGlmIChhZnRlclJhbmdlICYmICgoYWZ0
ZXJSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZlcmVu
Y2VSYW5nZS5lbmQuY29udGFpbmVyKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5F
Q1RFRCkgPT0gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBBU1NFUlQoIWFmdGVyUmFuZ2UgfHwgY3JlYXRlTGl2
ZVJhbmdlKGFmdGVyUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RP
X1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpKS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA+PSAwKTsKIAotICAgIGlmIChiZWZvcmVSYW5nZSAmJiAocmVmZXJlbmNlUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKS5pc051bGwoKSB8fCAoKGJlZm9yZVJhbmdlLT5lbmRQb3NpdGlvbigpLmFu
Y2hvck5vZGUoKS0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24oKnJlZmVyZW5jZVJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NP
Tk5FQ1RFRCkgPT0gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghYmVmb3JlUmFuZ2UgfHwgYmVmb3JlUmFu
Z2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyZWZlcmVu
Y2VSYW5nZSkucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCk7CisgICAgaWYgKGJlZm9yZVJhbmdl
ICYmICgoYmVmb3JlUmFuZ2UtPmVuZC5jb250YWluZXItPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
KHJlZmVyZW5jZVJhbmdlLnN0YXJ0LmNvbnRhaW5lcikgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElP
Tl9ESVNDT05ORUNURUQpID09IE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgQVNTRVJUKCFiZWZvcmVSYW5nZSB8
fCBjcmVhdGVMaXZlUmFuZ2UoYmVmb3JlUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpKS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA8PSAwKTsKIAogICAgIGlmICghYWZ0ZXJSYW5nZSAmJiAhYmVmb3Jl
UmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIGlmIChhZnRlclJhbmdlICYmICFiZWZvcmVSYW5nZSkKICAgICAgICAgcmV0dXJu
IFdURk1vdmUoYWZ0ZXJSYW5nZSk7CiAgICAgaWYgKCFhZnRlclJhbmdlICYmIGJlZm9yZVJhbmdl
KQogICAgICAgICByZXR1cm4gV1RGTW92ZShiZWZvcmVSYW5nZSk7Ci0gICAgCi0gICAgdW5zaWdu
ZWQgcG9zaXRpb25zVG9BZnRlclJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9uQ291bnRCZXR3ZWVu
UG9zaXRpb25zKGFmdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmVmZXJlbmNlUmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpOwotICAgIHVuc2lnbmVkIHBvc2l0aW9uc1RvQmVmb3JlUmFuZ2UgPSBQb3Np
dGlvbjo6cG9zaXRpb25Db3VudEJldHdlZW5Qb3NpdGlvbnMoYmVmb3JlUmFuZ2UtPmVuZFBvc2l0
aW9uKCksIHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIAotICAgIHJldHVy
biBwb3NpdGlvbnNUb0FmdGVyUmFuZ2UgPCBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID8gYWZ0ZXJS
YW5nZSA6IGJlZm9yZVJhbmdlOworCisgICAgYXV0byBkaXN0YW5jZVRvQWZ0ZXJSYW5nZSA9IGNo
YXJhY3RlckNvdW50KHsgYWZ0ZXJSYW5nZS0+c3RhcnQsIHJlZmVyZW5jZVJhbmdlLmVuZCB9KTsK
KyAgICBhdXRvIGRpc3RhbmNlVG9CZWZvcmVSYW5nZSA9IGNoYXJhY3RlckNvdW50KHsgYmVmb3Jl
UmFuZ2UtPmVuZCwgcmVmZXJlbmNlUmFuZ2Uuc3RhcnQgfSk7CisKKyAgICByZXR1cm4gZGlzdGFu
Y2VUb0FmdGVyUmFuZ2UgPCBkaXN0YW5jZVRvQmVmb3JlUmFuZ2UgPyBhZnRlclJhbmdlIDogYmVm
b3JlUmFuZ2U7CiB9CiAKLVJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VP
ZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqIHJlZmVyZW5jZVJhbmdlLCBB
Y2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uIHNlYXJjaERpcmVjdGlvbiwgVmVjdG9yPFN0cmlu
Zz4gY29uc3QmIHNlYXJjaFN0cmluZ3MpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNj
ZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24o
Y29uc3QgU2ltcGxlUmFuZ2UmIHJlZmVyZW5jZVJhbmdlLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGly
ZWN0aW9uIHNlYXJjaERpcmVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaFN0cmlu
Z3MpIGNvbnN0CiB7CiAgICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoIXJlZmVyZW5j
ZVJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAKICAgICBib29sIGlzQmFja3dhcmRTZWFyY2ggPSBzZWFyY2hEaXJlY3Rpb24g
PT0gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXM7CiAgICAgRmluZE9wdGlv
bnMgZmluZE9wdGlvbnMgeyBBdFdvcmRTdGFydHMsIEF0V29yZEVuZHMsIENhc2VJbnNlbnNpdGl2
ZSwgU3RhcnRJblNlbGVjdGlvbiB9OwogICAgIGlmIChpc0JhY2t3YXJkU2VhcmNoKQogICAgICAg
ICBmaW5kT3B0aW9ucy5hZGQoRmluZE9wdGlvbkZsYWc6OkJhY2t3YXJkcyk7CiAgICAgCi0gICAg
UmVmUHRyPFJhbmdlPiBjbG9zZXN0U3RyaW5nUmFuZ2UgPSBudWxscHRyOwotICAgIGZvciAoY29u
c3QgYXV0byYgc2VhcmNoU3RyaW5nIDogc2VhcmNoU3RyaW5ncykgewotICAgICAgICBpZiAoUmVm
UHRyPFJhbmdlPiBzZWFyY2hTdHJpbmdSYW5nZSA9IGZyYW1lLT5lZGl0b3IoKS5yYW5nZU9mU3Ry
aW5nKHNlYXJjaFN0cmluZywgcmVmZXJlbmNlUmFuZ2UsIGZpbmRPcHRpb25zKSkgeworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBjbG9zZXN0U3RyaW5nUmFuZ2U7CisgICAgZm9yIChhdXRvJiBz
ZWFyY2hTdHJpbmcgOiBzZWFyY2hTdHJpbmdzKSB7CisgICAgICAgIGlmIChhdXRvIHNlYXJjaFN0
cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3RyaW5nLCBj
cmVhdGVMaXZlUmFuZ2UocmVmZXJlbmNlUmFuZ2UpLnB0cigpLCBmaW5kT3B0aW9ucykpIHsKKyAg
ICAgICAgICAgIGF1dG8gZm91bmRTdHJpbmdSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnNlYXJjaFN0
cmluZ1JhbmdlIH07CiAgICAgICAgICAgICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAg
ICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSBzZWFyY2hTdHJpbmdSYW5nZTsKKyAgICAg
ICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgc2VhcmNoaW5nIGJhY2t3YXJkLCB1
c2UgdGhlIHRyYWlsaW5nIHJhbmdlIGVkZ2VzIHRvIGNvcnJlY3RseSBkZXRlcm1pbmUgd2hpY2gK
ICAgICAgICAgICAgICAgICAvLyByYW5nZSBpcyBjbG9zZXN0LiBTaW1pbGFybHksIGlmIHNlYXJj
aGluZyBmb3J3YXJkLCB1c2UgdGhlIGxlYWRpbmcgcmFuZ2UgZWRnZXMuCi0gICAgICAgICAgICAg
ICAgUG9zaXRpb24gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uID0gaXNCYWNrd2FyZFNlYXJjaCA/IGNs
b3Nlc3RTdHJpbmdSYW5nZS0+ZW5kUG9zaXRpb24oKSA6IGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpOwotICAgICAgICAgICAgICAgIFBvc2l0aW9uIHNlYXJjaFN0cmluZ1Bvc2l0
aW9uID0gaXNCYWNrd2FyZFNlYXJjaCA/IHNlYXJjaFN0cmluZ1JhbmdlLT5lbmRQb3NpdGlvbigp
IDogc2VhcmNoU3RyaW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBh
dXRvJiBjbG9zZXN0U3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0
cmluZ1JhbmdlLT5lbmQgOiBjbG9zZXN0U3RyaW5nUmFuZ2UtPnN0YXJ0OworICAgICAgICAgICAg
ICAgIGF1dG8mIGZvdW5kU3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gZm91bmRT
dHJpbmdSYW5nZS5lbmQgOiBmb3VuZFN0cmluZ1JhbmdlLnN0YXJ0OwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGludCBjbG9zZXN0UG9zaXRpb25PZmZzZXQgPSBjbG9zZXN0U3Ry
aW5nUG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAg
ICAgIGludCBzZWFyY2hQb3NpdGlvbk9mZnNldCA9IHNlYXJjaFN0cmluZ1Bvc2l0aW9uLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBjbG9zZXN0
Q29udGFpbmVyTm9kZSA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0g
ICAgICAgICAgICAgICAgTm9kZSogc2VhcmNoQ29udGFpbmVyTm9kZSA9IHNlYXJjaFN0cmluZ1Bv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsb3Nlc3RQb3Np
dGlvbk9mZnNldCA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5vZmZzZXQ7CisgICAgICAgICAgICAg
ICAgYXV0byBzZWFyY2hQb3NpdGlvbk9mZnNldCA9IGZvdW5kU3RyaW5nUG9zaXRpb24ub2Zmc2V0
OworICAgICAgICAgICAgICAgIGF1dG8gY2xvc2VzdENvbnRhaW5lck5vZGUgPSBjbG9zZXN0U3Ry
aW5nUG9zaXRpb24uY29udGFpbmVyLnB0cigpOworICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNo
Q29udGFpbmVyTm9kZSA9IGZvdW5kU3RyaW5nUG9zaXRpb24uY29udGFpbmVyLnB0cigpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNob3J0IHJlc3VsdCA9IFJhbmdlOjpjb21w
YXJlQm91bmRhcnlQb2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlvbk9m
ZnNldCwgc2VhcmNoQ29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhjbG9zZXN0Q29udGFpbmVyTm9kZSwgY2xvc2VzdFBvc2l0aW9uT2Zm
c2V0LCBzZWFyY2hDb250YWluZXJOb2RlLCBzZWFyY2hQb3NpdGlvbk9mZnNldCkucmVsZWFzZVJl
dHVyblZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCghaXNCYWNrd2FyZFNlYXJjaCAmJiBy
ZXN1bHQgPiAwKSB8fCAoaXNCYWNrd2FyZFNlYXJjaCAmJiByZXN1bHQgPCAwKSkKLSAgICAgICAg
ICAgICAgICAgICAgY2xvc2VzdFN0cmluZ1JhbmdlID0gc2VhcmNoU3RyaW5nUmFuZ2U7CisgICAg
ICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5nUmFuZ2U7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02NDQsODMgKzYzOSw3MyBAQCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UoKSBj
b25zdAogICAgIHJldHVybiB7IHsgeyBkb2N1bWVudCwgMCB9LCB7IGRvY3VtZW50LCAwIH0gfSB9
OwogfQogCi1SZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgp
IGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVu
dFJhbmdlKCkgY29uc3QKIHsKICAgICBhdXRvIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uo
QVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUpKTsKKyAgICByZXR1cm4g
QVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUpOwogfQogCi1SZWZQdHI8
UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2UoVmVjdG9yPFN0cmluZz4g
Y29uc3QmIHNlYXJjaFN0cmluZ3MsIFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXJ0LCBBY2Nlc3Np
YmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZFRleHRSYW5nZShjb25zdCBWZWN0b3I8
U3RyaW5nPiYgc2VhcmNoU3RyaW5ncywgY29uc3QgU2ltcGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3Np
YmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiBmb3VuZDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZm91bmQ7CiAgICAgaWYg
KGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Rm9yd2FyZCkK
LSAgICAgICAgZm91bmQgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihz
dGFydC5nZXQoKSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCwgc2VhcmNoU3Ry
aW5ncyk7CisgICAgICAgIGZvdW5kID0gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJl
Y3Rpb24oc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246Ok5leHQsIHNlYXJjaFN0
cmluZ3MpOwogICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4
dERpcmVjdGlvbjo6QmFja3dhcmQpCi0gICAgICAgIGZvdW5kID0gcmFuZ2VPZlN0cmluZ0Nsb3Nl
c3RUb1JhbmdlSW5EaXJlY3Rpb24oc3RhcnQuZ2V0KCksIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJl
Y3Rpb246OlByZXZpb3VzLCBzZWFyY2hTdHJpbmdzKTsKKyAgICAgICAgZm91bmQgPSByYW5nZU9m
U3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJj
aERpcmVjdGlvbjo6UHJldmlvdXMsIHNlYXJjaFN0cmluZ3MpOwogICAgIGVsc2UgaWYgKGRpcmVj
dGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Q2xvc2VzdCkgewotICAg
ICAgICBhdXRvIGZvdW5kQWZ0ZXIgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVj
dGlvbihzdGFydC5nZXQoKSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCwgc2Vh
cmNoU3RyaW5ncyk7Ci0gICAgICAgIGF1dG8gZm91bmRCZWZvcmUgPSByYW5nZU9mU3RyaW5nQ2xv
c2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFydC5nZXQoKSwgQWNjZXNzaWJpbGl0eVNlYXJjaERp
cmVjdGlvbjo6UHJldmlvdXMsIHNlYXJjaFN0cmluZ3MpOwotICAgICAgICBmb3VuZCA9IHJhbmdl
Q2xvc2VzdFRvUmFuZ2Uoc3RhcnQuZ2V0KCksIFdURk1vdmUoZm91bmRBZnRlciksIFdURk1vdmUo
Zm91bmRCZWZvcmUpKTsKKyAgICAgICAgYXV0byBmb3VuZEFmdGVyID0gcmFuZ2VPZlN0cmluZ0Ns
b3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rp
b246Ok5leHQsIHNlYXJjaFN0cmluZ3MpOworICAgICAgICBhdXRvIGZvdW5kQmVmb3JlID0gcmFu
Z2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oc3RhcnQsIEFjY2Vzc2liaWxpdHlT
ZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzLCBzZWFyY2hTdHJpbmdzKTsKKyAgICAgICAgZm91bmQg
PSByYW5nZUNsb3Nlc3RUb1JhbmdlKHN0YXJ0LCBXVEZNb3ZlKGZvdW5kQWZ0ZXIpLCBXVEZNb3Zl
KGZvdW5kQmVmb3JlKSk7CiAgICAgfQotCiAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgIC8vIElm
IHRoZSBzZWFyY2ggc3RhcnRlZCB3aXRoaW4gYSB0ZXh0IGNvbnRyb2wsIGVuc3VyZSB0aGF0IHRo
ZSByZXN1bHQgaXMgaW5zaWRlIHRoYXQgZWxlbWVudC4KICAgICAgICAgaWYgKGVsZW1lbnQoKSAm
JiBlbGVtZW50KCktPmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgICAgIGlmICghZm91bmQtPnN0
YXJ0Q29udGFpbmVyKCkuaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YoZWxlbWVudCgp
KQogICAgICAgICAgICAgICAgIHx8ICFmb3VuZC0+ZW5kQ29udGFpbmVyKCkuaXNEZXNjZW5kYW50
T3JTaGFkb3dEZXNjZW5kYW50T2YoZWxlbWVudCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9
CiAgICAgfQogICAgIHJldHVybiBmb3VuZDsKIH0KIAotVmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0
Q3JpdGVyaWEgY29uc3QmIGNyaXRlcmlhKSBjb25zdAorVmVjdG9yPFNpbXBsZVJhbmdlPiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpmaW5kVGV4dFJhbmdlcyhjb25zdCBBY2Nlc3NpYmlsaXR5U2VhcmNo
VGV4dENyaXRlcmlhJiBjcml0ZXJpYSkgY29uc3QKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdl
Pj4gcmVzdWx0OwotCi0gICAgLy8gRGV0ZXJtaW5lIHN0YXJ0IHJhbmdlLgotICAgIFJlZlB0cjxS
YW5nZT4gc3RhcnRSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAg
aWYgKGNyaXRlcmlhLnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpT
ZWxlY3Rpb24pCi0gICAgICAgIHN0YXJ0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
UmFuZ2UoKSk7CisgICAgICAgIHJhbmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKICAgICBlbHNlCi0g
ICAgICAgIHN0YXJ0UmFuZ2UgPSBlbGVtZW50UmFuZ2UoKTsKLQotICAgIGlmIChzdGFydFJhbmdl
KSB7Ci0gICAgICAgIC8vIENvbGxhcHNlIHRoZSByYW5nZSB0byB0aGUgc3RhcnQgdW5sZXNzIHNl
YXJjaGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIGRvYyBvciBzZWFyY2hpbmcgYmFja3dhcmRzLgot
ICAgICAgICBpZiAoY3JpdGVyaWEuc3RhcnQgPT0gQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRTdGFy
dEZyb206OkJlZ2luKQotICAgICAgICAgICAgc3RhcnRSYW5nZS0+Y29sbGFwc2UodHJ1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGNyaXRlcmlhLnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0
U3RhcnRGcm9tOjpFbmQpCi0gICAgICAgICAgICBzdGFydFJhbmdlLT5jb2xsYXBzZShmYWxzZSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXJ0UmFuZ2UtPmNvbGxhcHNlKGNyaXRlcmlh
LmRpcmVjdGlvbiAhPSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6QmFja3dhcmQp
OwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByYW5nZSA9IGVs
ZW1lbnRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBpZiAoY3JpdGVyaWEuc3RhcnQgPT0gQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRTdGFydEZyb206
OkJlZ2luKQorICAgICAgICByYW5nZS0+ZW5kID0gcmFuZ2UtPnN0YXJ0OworICAgIGVsc2UgaWYg
KGNyaXRlcmlhLnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpFbmQp
CisgICAgICAgIHJhbmdlLT5zdGFydCA9IHJhbmdlLT5lbmQ7CisgICAgZWxzZSBpZiAoY3JpdGVy
aWEuZGlyZWN0aW9uID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpCYWNrd2Fy
ZCkKKyAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gcmFuZ2UtPmVuZDsKKyAgICBlbHNlCisgICAgICAg
IHJhbmdlLT5lbmQgPSByYW5nZS0+c3RhcnQ7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZvdW5kOwor
ICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0OwogICAgIHN3aXRjaCAoY3JpdGVyaWEuZGly
ZWN0aW9uKSB7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Rm9y
d2FyZDoKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpCYWNrd2Fy
ZDoKICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpDbG9zZXN0Ogot
ICAgICAgICBmb3VuZCA9IGZpbmRUZXh0UmFuZ2UoY3JpdGVyaWEuc2VhcmNoU3RyaW5ncywgc3Rh
cnRSYW5nZSwgY3JpdGVyaWEuZGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKGZvdW5kKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChmb3VuZCk7CisgICAgICAgIGlmICgocmFuZ2UgPSBmaW5kVGV4
dFJhbmdlKGNyaXRlcmlhLnNlYXJjaFN0cmluZ3MsICpyYW5nZSwgY3JpdGVyaWEuZGlyZWN0aW9u
KSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpyYW5nZSk7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkFsbDogewotICAgICAg
ICBhdXRvIGZpbmRBbGwgPSBbJl0oQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24gZGly
KSB7Ci0gICAgICAgICAgICBmb3VuZCA9IGZpbmRUZXh0UmFuZ2UoY3JpdGVyaWEuc2VhcmNoU3Ry
aW5ncywgc3RhcnRSYW5nZSwgZGlyKTsKLSAgICAgICAgICAgIHdoaWxlIChmb3VuZCkgewotICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZm91bmQpOwotICAgICAgICAgICAgICAgIGZvdW5k
ID0gZmluZFRleHRSYW5nZShjcml0ZXJpYS5zZWFyY2hTdHJpbmdzLCBmb3VuZCwgZGlyKTsKLSAg
ICAgICAgICAgIH0KKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpB
bGw6CisgICAgICAgIGF1dG8gZmluZEFsbCA9IFsmXShBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIHdoaWxlICgocmFuZ2UgPSBmaW5kVGV4
dFJhbmdlKGNyaXRlcmlhLnNlYXJjaFN0cmluZ3MsICpyYW5nZSwgZGlyZWN0aW9uKSkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqcmFuZ2UpOwogICAgICAgICB9OwogICAgICAgICBm
aW5kQWxsKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpGb3J3YXJkKTsKICAgICAg
ICAgZmluZEFsbChBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6QmFja3dhcmQpOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgfQotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNzM2LDEwICs3MjEsMTAgQEAgVmVjdG9yPFN0cmluZz4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
cGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXQKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dFJhbmdlIDogb3BlcmF0aW9u
LnRleHRSYW5nZXMpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZSh0ZXh0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzKSkKKyAgICAgICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UodGV4dFJhbmdlKS5wdHIoKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSB0ZXh0UmFuZ2UtPnRleHQoKTsKKyAg
ICAgICAgU3RyaW5nIHRleHQgPSBwbGFpblRleHQodGV4dFJhbmdlKTsKICAgICAgICAgU3RyaW5n
IHJlcGxhY2VtZW50U3RyaW5nID0gb3BlcmF0aW9uLnJlcGxhY2VtZW50VGV4dDsKICAgICAgICAg
Ym9vbCByZXBsYWNlU2VsZWN0aW9uID0gZmFsc2U7CiAgICAgICAgIHN3aXRjaCAob3BlcmF0aW9u
LnR5cGUpIHsKQEAgLTg0Myw4ICs4MjgsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omlz
TWV0ZXIoKSBjb25zdAogCiBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1BvaW50
KCkKIHsKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBlbGVtZW50UmVjdCgpOwotICAgIHJldHVybiBy
b3VuZGVkSW50UG9pbnQoTGF5b3V0UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAyLCBy
ZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyKSk7CisgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2lu
dChlbGVtZW50UmVjdCgpLmNlbnRlcigpKTsKIH0KIAogSW50UmVjdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojpib3VuZGluZ0JveEZvclF1YWRzKFJlbmRlck9iamVjdCogb2JqLCBjb25zdCBWZWN0b3I8
RmxvYXRRdWFkPiYgcXVhZHMpCkBAIC0xMTgwLDIxICsxMTY0LDIxIEBAIFZpc2libGVQb3NpdGlv
blJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2Uo
Y29uc3QgUGxhCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpy
YW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QK
K09wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZvclBsYWlu
VGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKIHsKICAgICB1bnNp
Z25lZCB0ZXh0TGVuZ3RoID0gZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCk7CiAgICAgaWYgKHJhbmdl
LnN0YXJ0ICsgcmFuZ2UubGVuZ3RoID4gdGV4dExlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgLy8gQXZvaWQgc2V0dGluZyBz
ZWxlY3Rpb24gdG8gdW5lZGl0YWJsZSBwYXJlbnQgbm9kZSBpbiBGcmFtZVNlbGVjdGlvbjo6c2V0
U2VsZWN0ZWRSYW5nZS4gU2VlIHdlYmtpdC5vcmcvYi8yMDYwOTMuCiAgICAgaWYgKHJhbmdlLmlz
TnVsbCgpICYmICF0ZXh0TGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUg
PSBheE9iamVjdENhY2hlKCkpIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2Fj
aGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLnN0YXJ0LCB0aGlzKTsKICAgICAgICAg
Q2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5n
ZS5zdGFydCArIHJhbmdlLmxlbmd0aCwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5k
KSk7CisgICAgICAgIHJldHVybiBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZz
ZXRzKHN0YXJ0LCBlbmQpOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpsaW5lUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3NpdGlvbikgY29uc3QKQEAgLTEyNTksMTIgKzEyNDMsOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU9iamVjdDo6bGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oTm9kZSogbm9kZSwgY29u
c3QgVgogICAgIHJldHVybiBsaXN0TWFya2VyVGV4dEZvck5vZGUobm9kZSk7CiB9CiAKLVN0cmlu
ZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+IHJhbmdl
KSBjb25zdAorU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7CisgICAg
VGV4dEl0ZXJhdG9yIGl0KHJhbmdlKTsKICAgICBpZiAoaXQuYXRFbmQoKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIApAQCAtMTI3NCw4ICsxMjU1LDEwIEBAIFN0cmluZyBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb25zdAog
ICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgYSB0
ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGZvciBsaXN0IG1hcmtlciB0ZXh0LgogICAgICAgICAgICAg
Ly8gRG9uJ3QgYWRkIGxpc3QgbWFya2VyIHRleHQgZm9yIG5ldyBsaW5lIGNoYXJhY3Rlci4KLSAg
ICAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkgIT0gMSB8fCAhaXNTcGFjZU9yTmV3bGlu
ZShpdC50ZXh0KClbMF0pKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxpc3RNYXJr
ZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKGl0Lm5vZGUoKSwgVmlzaWJsZVBvc2l0aW9uKHJhbmdl
LT5zdGFydFBvc2l0aW9uKCkpKSk7CisgICAgICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgp
ICE9IDEgfHwgIWlzU3BhY2VPck5ld2xpbmUoaXQudGV4dCgpWzBdKSkgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBTZWVtcyBsaWtlIHRoZSBwb3NpdGlvbiBzaG91bGQgYmUgYmFzZWQgb24g
aXQucmFuZ2UoKSwgbm90IHJhbmdlLgorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxp
c3RNYXJrZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKGl0Lm5vZGUoKSwgVmlzaWJsZVBvc2l0aW9u
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCkpKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpdC5hcHBlbmRUZXh0VG9TdHJpbmdCdWlsZGVyKGJ1aWxkZXIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFj
dGVyKGl0Lm5vZGUoKSkpCkBAIC0xMjg4LDE1ICsxMjcxLDEzIEBAIFN0cmluZyBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpzdHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb25zdAogCiBT
dHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHZpc2libGVQb3NpdGlvblJhbmdlKQogewotICAg
IGlmICh2aXNpYmxlUG9zaXRpb25SYW5nZS5pc051bGwoKSkKKyAgICBhdXRvIHN0YXJ0ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQpOworICAgIGF1dG8gZW5k
ID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKKyAgICBpZiAo
IXN0YXJ0IHx8ICFlbmQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHZpc2li
bGVQb3NpdGlvblJhbmdlLnN0YXJ0LCB2aXNpYmxlUG9zaXRpb25SYW5nZS5lbmQpOwotICAgIGlm
ICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGZvciAoVGV4dEl0ZXJh
dG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRl
eHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVuZCB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2Uo
KSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2RlLCB6ZXJv
IGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBBWCkKICAg
ICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gQWRkIGEgdGV4
dHVhbCByZXByZXNlbnRhdGlvbiBmb3IgbGlzdCBtYXJrZXIgdGV4dC4KQEAgLTEzMDgsMjIgKzEy
ODksMjEgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblIKICAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcik7CiAgICAgICAgIH0KICAgICB9Ci0K
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UmIHZpc2libGVQb3NpdGlvblJhbmdlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBNdWx0
aS1ieXRlIHN1cHBvcnQKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uUmFuZ2UuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiAtMTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uo
dmlzaWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQsIHZpc2libGVQb3NpdGlvblJhbmdlLmVuZCk7Ci0g
ICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGF1dG8gc3RhcnQgPSBtYWtl
Qm91bmRhcnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCk7CisgICAgYXV0byBlbmQg
PSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5lbmQpOworICAgIGlmICgh
c3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIC0xOyAvLyBGSVhNRTogV2h5IG5vdCByZXR1
cm4gMD8KIAorICAgIC8vIEZJWE1FOiBVc2UgY2hhcmFjdGVyQ291bnQgaW5zdGVhZCBvZiB3cml0
aW5nIG91ciBvd24gbG9vcD8KICAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICBmb3IgKFRleHRJdGVy
YXRvciBpdCgqcmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChU
ZXh0SXRlcmF0b3IgaXQoeyAqc3RhcnQsICplbmQgfSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNl
KCkpIHsKICAgICAgICAgLy8gbm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVy
byBsZW5ndGggbWVhbnMgcmVwbGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCiAg
ICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpCiAgICAgICAgICAgICBsZW5ndGggKz0gaXQu
dGV4dCgpLmxlbmd0aCgpOwpAQCAtMTQ0NywxNCArMTQyNywxNCBAQCBWaXNpYmxlUG9zaXRpb24g
QWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4dFNlbnRlbmNlRW5kUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aQogCiAgICAgLy8gTWFrZSBzdXJlIHdlIG1vdmUgb2ZmIG9mIGEgc2VudGVuY2UgZW5k
LgogICAgIGF1dG8gbmV4dFBvc2l0aW9uID0gcG9zaXRpb24ubmV4dCgpOwotICAgIGF1dG8gbGlu
ZVJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbiksIGVuZE9mTGluZShu
ZXh0UG9zaXRpb24pKTsKLSAgICBpZiAoIWxpbmVSYW5nZSkKKyAgICBhdXRvIHN0YXJ0ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgYXV0byBlbmQg
PSBtYWtlQm91bmRhcnlQb2ludChlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgaWYgKCFz
dGFydCB8fCAhZW5kKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gQW4gZW1wdHkgbGlu
ZSBpcyBjb25zaWRlcmVkIGEgc2VudGVuY2UuIElmIGl0J3Mgc2tpcHBlZCwgdGhlbiB0aGUgc2Vu
dGVuY2UgcGFyc2VyIHdpbGwgbm90CiAgICAgLy8gc2VlIHRoaXMgZW1wdHkgbGluZS4gSW5zdGVh
ZCwgcmV0dXJuIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIGVtcHR5IGxpbmUuCi0gICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBoYXNBbnlQbGFpblRleHQgaW5z
dGVhZCBvZiBwbGFpblRleHQuaXNFbXB0eS4KLSAgICByZXR1cm4gcGxhaW5UZXh0KCpsaW5lUmFu
Z2UpLmlzRW1wdHkoKSA/IG5leHRQb3NpdGlvbiA6IGVuZE9mU2VudGVuY2UobmV4dFBvc2l0aW9u
KTsKKyAgICByZXR1cm4gaGFzQW55UGxhaW5UZXh0KHsgKnN0YXJ0LCAqZW5kIH0pID8gZW5kT2ZT
ZW50ZW5jZShuZXh0UG9zaXRpb24pIDogbmV4dFBvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRp
b24gQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTE0NjQsMTMgKzE0NDQsMTMg
QEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnByZXZpb3VzU2VudGVuY2VT
dGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGUKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9m
ZiBvZiBhIHNlbnRlbmNlIHN0YXJ0LgogICAgIGF1dG8gcHJldmlvdXNQb3NpdGlvbiA9IHBvc2l0
aW9uLnByZXZpb3VzKCk7Ci0gICAgYXV0byBsaW5lUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRPZkxp
bmUocHJldmlvdXNQb3NpdGlvbiksIGVuZE9mTGluZShwcmV2aW91c1Bvc2l0aW9uKSk7Ci0gICAg
aWYgKCFsaW5lUmFuZ2UpCisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
T2ZMaW5lKHByZXZpb3VzUG9zaXRpb24pKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBv
aW50KGVuZE9mTGluZShwcmV2aW91c1Bvc2l0aW9uKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5k
KQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gVHJlYXQgZW1wdHkgbGluZSBhcyBhIHNl
cGFyYXRlIHNlbnRlbmNlLgotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBtb3JlIGVmZmljaWVu
dCB0byB1c2UgaGFzQW55UGxhaW5UZXh0IGluc3RlYWQgb2YgcGxhaW5UZXh0LmlzRW1wdHkuCi0g
ICAgcmV0dXJuIHBsYWluVGV4dCgqbGluZVJhbmdlKS5pc0VtcHR5KCkgPyBwcmV2aW91c1Bvc2l0
aW9uIDogc3RhcnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pOworICAgIHJldHVybiBoYXNB
bnlQbGFpblRleHQoeyAqc3RhcnQsICplbmQgfSkgPyBzdGFydE9mU2VudGVuY2UocHJldmlvdXNQ
b3NpdGlvbikgOiBwcmV2aW91c1Bvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNz
aWJpbGl0eU9iamVjdDo6bmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24pIGNvbnN0CkBAIC0yMDQzLDcgKzIwMjMsNyBAQCBib29sIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnJlcGxhY2VUZXh0SW5SYW5nZShjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjbwogICAgIC8vIEFsc28gb25seSBkbyB0aGlzIHdoZW4gdGhlIGZpZWxkIGlzIGlu
IGVkaXRpbmcgbW9kZS4KICAgICBhdXRvJiBmcmFtZSA9IHJlbmRlcmVyKCktPmZyYW1lKCk7CiAg
ICAgaWYgKGVsZW1lbnQuc2hvdWxkVXNlSW5wdXRNZXRob2QoKSkgewotICAgICAgICBmcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2Up
LmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cyk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKS5nZXQoKSwgRE9XTlNUUkVBTSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZW1lbnRTdHJpbmcsIEVkaXRv
cjo6U2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBFZGl0b3I6OlNtYXJ0UmVwbGFjZTo6Tm8pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDk1MzhmZTQxNWIzZjc5YTdmNTlmMGM5
ZjMyOTNhM2M1MGJlZTE4OWEuLjZmOWJmODViODY5ODgwYzlkNWY2NzJiZTNjMTQzOTcwMTIzNjgy
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5j
bHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMjMyLDcgKzIzMSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc0JvbGRGb250KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBi
b29sIGhhc0l0YWxpY0ZvbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaGFzTWlzc3BlbGxpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8UmFuZ2U+
IGdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYgc3RhcnQsIEFjY2Vzc2li
aWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzdGFydCwgQWNjZXNz
aWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBoYXNQbGFp
blRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaGFzU2Ft
ZUZvbnQoY29uc3QgQVhDb3JlT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KICAgICBib29sIGhhc1NhbWVGb250Q29sb3IoY29uc3QgQVhDb3JlT2JqZWN0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTM1NiwxMiArMzU1LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNEZXNjZW5kYW50T2ZSb2xlKEFjY2Vzc2liaWxpdHlSb2xlKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIC8vIFRleHQgc2VsZWN0aW9uCi1wcml2YXRlOgotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqLCBBY2Nlc3Np
YmlsaXR5U2VhcmNoRGlyZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiBjb25zdCYpIGNvbnN0OwotICAg
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzZWxlY3Rpb25SYW5nZSgpIGNvbnN0OwotICAgIFJlZlB0
cjxSYW5nZT4gZmluZFRleHRSYW5nZShWZWN0b3I8U3RyaW5nPiBjb25zdCYgc2VhcmNoU3RyaW5n
cywgUmVmUHRyPFJhbmdlPiBjb25zdCYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGly
ZWN0aW9uKSBjb25zdDsKLXB1YmxpYzoKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRl
eHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBjb25zdCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gZmluZFRleHRSYW5nZXMoY29uc3QgQWNj
ZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rv
cjxTdHJpbmc+IHBlcmZvcm1UZXh0T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9u
IGNvbnN0Jikgb3ZlcnJpZGU7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYnNlcnZhYmxl
T2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQpAQCAtNTIyLDcgKzUx
Niw3IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25S
YW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5z
aWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
IAotICAgIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHN0YXRpYyBib29sIHJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKE5vZGUqIHJlcGxhY2VkTm9k
ZSk7CiAKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclVu
b3JkZXJlZFBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTUzNiwxMiArNTMwLDEyIEBAIHB1YmxpYzoKICAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0
IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgbGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3Qg
UGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgc3RhdGljIFN0cmluZyBzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpOwotICAgIFN0cmluZyBzdHJpbmdGb3JSYW5n
ZShSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgc3RyaW5nRm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICBJbnRSZWN0IGJvdW5k
c0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgSW50UmVjdCBib3VuZHNGb3JS
YW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0
KCk7IH0KKyAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CiAgICAgaW50IGxlbmd0aEZvclZpc2li
bGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2li
bGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyB9CiAKQEAgLTc0Niw3ICs3NDAsNyBA
QCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcqIGFuY2VzdG9yQWNj
ZXNzaWJpbGl0eVNjcm9sbFZpZXcoYm9vbCBpbmNsdWRlU2VsZikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogd2ViQXJlYU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KIAotICAgIHZvaWQgY2xlYXJJc0lnbm9yZWRGcm9tUGFyZW50RGF0
YSgpIG92ZXJyaWRlIHsgbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YSA9IEFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWRGcm9tUGFyZW50RGF0YSgpOyB9CisgICAgdm9pZCBjbGVhcklzSWdub3JlZEZyb21Q
YXJlbnREYXRhKCkgb3ZlcnJpZGUgeyBtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhID0geyB9OyB9
CiAgICAgdm9pZCBzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YUZvckNoaWxkKEFYQ29yZU9iamVj
dCopIG92ZXJyaWRlOwogCiAgICAgdWludDY0X3Qgc2Vzc2lvbklEKCkgY29uc3Qgb3ZlcnJpZGU7
CkBAIC03NTYsMjEgKzc1MCwxMiBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KCkgPSBkZWZhdWx0OworCisgICAgLy8gRklYTUU6IE1ha2UgbW9yZSBvZiB0
aGVzZSBtZW1iZXIgZnVuY3Rpb25zIHByaXZhdGUuCisKICAgICB2b2lkIGRldGFjaFJlbW90ZVBh
cnRzKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRh
Y2hQbGF0Zm9ybVdyYXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlKSBvdmVycmlkZTsK
IAotICAgIEFYSUQgbV9pZCB7IDAgfTsKLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
bV9jaGlsZHJlbjsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlQ2hpbGRyZW4geyBmYWxzZSB9Owot
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fcm9sZSB7IEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtub3du
IH07Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBtX2xhc3RLbm93bklzSWdub3Jl
ZFZhbHVlIHsgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yIH07
Ci0gICAgQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhIG1faXNJZ25vcmVkRnJv
bVBhcmVudERhdGEgeyB9OwotICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5IHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fc3VidHJlZURpcnR5IHsgZmFsc2UgfTsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElU
WV9JU09MQVRFRF9UUkVFKQotICAgIGJvb2wgbV9pc29sYXRlZFRyZWVOb2RlSW5pdGlhbGl6ZWQg
eyBmYWxzZSB9OwotI2VuZGlmCi0KICAgICB2b2lkIHNldElzSWdub3JlZEZyb21QYXJlbnREYXRh
KEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSYgZGF0YSkgb3ZlcnJpZGUgeyBt
X2lzSWdub3JlZEZyb21QYXJlbnREYXRhID0gZGF0YTsgfQogCiAgICAgdmlydHVhbCBib29sIGNv
bXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAt
NzkyLDEyICs3NzcsMjggQEAgcHJvdGVjdGVkOgogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
cmFkaW9Hcm91cEFuY2VzdG9yKCkgY29uc3Q7CiAKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkg
JiYgVVNFKEFUSykKICAgICBib29sIGFsbG93c1RleHRSYW5nZXMoKSBjb25zdDsKICAgICB1bnNp
Z25lZCBnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKSBjb25zdDsKLSNlbHNlCi0gICAgYm9vbCBhbGxv
d3NUZXh0UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0Q29udHJvbCgpOyB9Ci0gICAgdW5z
aWduZWQgZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4gdGV4dCgpLmxlbmd0
aCgpOyB9CisKK3ByaXZhdGU6CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlT2ZTdHJp
bmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiwgQWNjZXNzaWJp
bGl0eVNlYXJjaERpcmVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKKyAgICBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gc2VsZWN0aW9uUmFuZ2UoKSBjb25zdDsKKyAgICBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gZmluZFRleHRSYW5nZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNo
U3RyaW5ncywgY29uc3QgU2ltcGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4
dERpcmVjdGlvbikgY29uc3Q7CisKKyAgICBBWElEIG1faWQgeyAwIH07Citwcm90ZWN0ZWQ6IC8v
IEZJWE1FOiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgcHJpdmF0ZS4KKyAgICBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXZlQ2hpbGRy
ZW4geyBmYWxzZSB9OworICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fcm9sZSB7IEFjY2Vzc2liaWxp
dHlSb2xlOjpVbmtub3duIH07Citwcml2YXRlOgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
dXNpb24gbV9sYXN0S25vd25Jc0lnbm9yZWRWYWx1ZSB7IEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
dXNpb246OkRlZmF1bHRCZWhhdmlvciB9OworcHJvdGVjdGVkOiAvLyBGSVhNRTogTWFrZSB0aGUg
ZGF0YSBtZW1iZXJzIHByaXZhdGUuCisgICAgQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJl
bnREYXRhIG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGE7CisgICAgYm9vbCBtX2NoaWxkcmVuRGly
dHkgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdWJ0cmVlRGlydHkgeyBmYWxzZSB9OworcHJpdmF0
ZToKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQorICAgIGJvb2wgbV9p
c29sYXRlZFRyZWVOb2RlSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwogI2VuZGlmCiB9OwogCkBAIC04
MDksNiArODEwLDExIEBAIGlubGluZSB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpIHsgfQogaW5saW5lIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZGV0YWNo
UGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSkgeyB9CiAjZW5kaWYK
IAorI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspKQoraW5saW5lIGJvb2wg
QWNjZXNzaWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIGlz
VGV4dENvbnRyb2woKTsgfQoraW5saW5lIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omdl
dExlbmd0aEZvclRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHRleHQoKS5sZW5ndGgoKTsgfQor
I2VuZGlmCisKIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21O
b2RlKGNvbnN0IE5vZGUqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2woY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCYpPiYgaXNBY2Nlc3NpYmxlKTsKIAogbmFtZXNwYWNlIEFjY2Vzc2liaWxpdHkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3RJbnRlcmZhY2UuaAppbmRleCAwNWRiODY0OTM4MTlkYzVjODZmZGViYzE1YmNm
ZWRiMGM0ZTdkMGM4Li5mN2E2ZTY4YWFiOWNhYzIxMjNkNTBlNmVlMzUyOGViNTM1MDczMWU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3RJbnRlcmZhY2UuaApAQCAtMjUsMTIgKzI1LDEyIEBACiAKICNwcmFnbWEgb25j
ZQogCisvLyBGSVhNRTogU2hvdWxkIHJlbmFtZSB0aGlzIGZpbGUgQVhDb3JlT2JqZWN0LmguCisK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9u
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKQEAgLTQyLDYgKzQyLDcgQEAKICNpZiBQTEFURk9STShDT0NPQSkKIE9CSkNfQ0xB
U1MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI7CiB0eXBlZGVmIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyOwordHlwZWRlZiBzdHJ1
Y3QgX05TUmFuZ2UgTlNSYW5nZTsKICNlbGlmIFVTRShBVEspCiB0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0QWNjZXNzaWJsZSBXZWJLaXRBY2Nlc3NpYmxlOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEFj
Y2Vzc2libGUgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI7CkBAIC01NSwyNCArNTYsMjUgQEAg
Y2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBOb2RlOwot
Y2xhc3MgRWxlbWVudDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFF1YWxpZmllZE5hbWU7
Ci1jbGFzcyBQYXRoOwotY2xhc3MgV2lkZ2V0OwotY2xhc3MgUGFnZTsKK2NsYXNzIEFYQ29yZU9i
amVjdDsKK2NsYXNzIEFYT2JqZWN0Q2FjaGU7CitjbGFzcyBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dzsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3Mg
RnJhbWVWaWV3OworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CitjbGFzcyBQYXRoOworY2xhc3Mg
UXVhbGlmaWVkTmFtZTsKK2NsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNjcm9sbFZpZXc7Ci1j
bGFzcyBBWE9iamVjdENhY2hlOwotY2xhc3MgQVhDb3JlT2JqZWN0OwotY2xhc3MgQWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXc7CitjbGFzcyBXaWRnZXQ7CisKIHN0cnVjdCBBY2Nlc3NpYmlsaXR5VGV4
dDsKIHN0cnVjdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9uczsKIAotdHlwZWRlZiBzaXplX3Qg
QVhJRDsKK3VzaW5nIEFYSUQgPSBzaXplX3Q7CiBleHRlcm4gY29uc3QgQVhJRCBJbnZhbGlkQVhJ
RDsKIAogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5Um9sZSB7CkBAIC0zNzEsNyArMzczLDcgQEAg
ZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvblR5cGUgewogfTsKIAogc3RydWN0
IEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIHsKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4g
dGV4dFJhbmdlczsgLy8gdGV4dCBvbiB3aGljaCBwZXJmb3JtIHRoZSBvcGVyYXRpb24uCisgICAg
VmVjdG9yPFNpbXBsZVJhbmdlPiB0ZXh0UmFuZ2VzOyAvLyB0ZXh0IG9uIHdoaWNoIHBlcmZvcm0g
dGhlIG9wZXJhdGlvbi4KICAgICBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvblR5cGUgdHlwZTsK
ICAgICBTdHJpbmcgcmVwbGFjZW1lbnRUZXh0OyAvLyBGb3IgdHlwZSA9IHJlcGxhY2UuCiAKQEAg
LTQwNCwxMCArNDA2LDcgQEAgc3RydWN0IEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9k
ZSB7CiAgICAgeyB9CiB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi10eXBlZGVmIHN0cnVjdCBf
TlNSYW5nZSBOU1JhbmdlOwotI2VuZGlmCi0KKy8vIEZJWE1FOiBNZXJnZSB0aGlzIHdpdGggQ2hh
cmFjdGVyUmFuZ2UgKGJ5IGRlbGV0aW5nIHRoaXMgYW5kIHVzaW5nIENoYXJhY3RlclJhbmdlIGlu
c3RlYWQpLgogc3RydWN0IFBsYWluVGV4dFJhbmdlIHsKICAgICB1bnNpZ25lZCBzdGFydCB7IDAg
fTsKICAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07CkBAIC02NjMsNyArNjYyLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBoYXNCb2xkRm9udCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgaGFzSXRhbGljRm9udCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzTWlz
c3BlbGxpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8UmFuZ2U+IGdldE1pc3Nw
ZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFy
Y2hEaXJlY3Rpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzdGFydCwgQWNjZXNzaWJpbGl0
eVNlYXJjaERpcmVjdGlvbikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGFpblRl
eHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1NhbWVGb250KGNvbnN0IEFYQ29y
ZU9iamVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2FtZUZvbnRDb2xvcihj
b25zdCBBWENvcmVPYmplY3QmKSBjb25zdCA9IDA7CkBAIC03ODUsNyArNzg0LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNzaWJpbGl0eVJvbGUp
IGNvbnN0ID0gMDsKIAogICAgIC8vIFRleHQgc2VsZWN0aW9uCi0gICAgdmlydHVhbCBWZWN0b3I8
UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0
ZXJpYSBjb25zdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTaW1wbGVSYW5nZT4g
ZmluZFRleHRSYW5nZXMoY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSYpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1UZXh0T3BlcmF0aW9u
KEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0JikgPSAwOwogCiAgICAgdmlydHVhbCBB
WENvcmVPYmplY3QqIG9ic2VydmFibGVPYmplY3QoKSBjb25zdCA9IDA7CkBAIC05NTQsNyArOTUz
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxl
UG9zaXRpb25SYW5nZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJh
bmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgUmVmUHRyPFJhbmdlPiBlbGVtZW50UmFuZ2UoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9y
ZGVyZWRQb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcG9zaXRp
b25PZkxlZnRXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHBvc2l0aW9uT2ZSaWdodFdvcmQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJikgY29uc3QgPSAwOwpAQCAtOTY2LDExICs5NjUsMTEgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5n
ZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZpc2libGVQ
b3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
IGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPFJhbmdlPiByYW5nZUZvclBsYWluVGV4
dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdGb3JSYW5nZShS
ZWZQdHI8UmFuZ2U+KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0IGJv
dW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZHNGb3JSYW5nZShjb25zdCBSZWZQ
dHI8UmFuZ2U+KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kc0ZvclJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGxlbmd0aEZv
clZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3QgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAppbmRleCA1MGYxYjc4MTg1NWIxODkxMmRiOGI1N2ZkZmI3MmVlODNhMzcyMmNiLi4xZWZjMDgw
MjgxZjFkMDYwNDQ0YmI3OTEyNzdiNmIyNzRlZWQ5ZGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
QEAgLTkxMywxNSArOTEzLDExIEBAIEludFBvaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmxpbmtDbGlja1BvaW50KCkKICAgICAgbWF5IG5vdCBiZWxvbmcgdG8gdGhlIGxpbmsgZWxlbWVu
dCBhbmQgdGh1cyBtYXkgbm90IGFjdGl2YXRlIHRoZSBsaW5rLgogICAgICBIZW5jZSwgcmV0dXJu
IHRoZSBtaWRkbGUgcG9pbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgbGluayBpZiBl
eGlzdHMuCiAgICAgICovCi0gICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50UmFu
Z2UoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSByYW5nZS0+c3RhcnRQb3Np
dGlvbigpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbmV4dFZpc2libGVQb3NpdGlv
bihzdGFydCk7Ci0gICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCAhcmFuZ2UtPmNvbnRhaW5z
KGVuZCkpCi0gICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2lu
dCgpOwotCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gY2hhclJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0
LCBlbmQpOwotICAgICAgICBJbnRSZWN0IHJlY3QgPSBib3VuZHNGb3JSYW5nZShjaGFyUmFuZ2Up
OwotICAgICAgICByZXR1cm4geyByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSAvIDIgfTsKKyAgICBpZiAoYXV0byByYW5nZSA9IGVsZW1lbnRSYW5n
ZSgpKSB7CisgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24geyBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OworICAgICAgICBhdXRvIGVuZCA9IG5l
eHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOworICAgICAgICBpZiAoIWVuZC5pc051bGwoKSAmJiBj
cmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhlbmQpKQorICAgICAgICAgICAgcmV0dXJu
IHsgYm91bmRzRm9yUmFuZ2UoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kKSB9KS5jZW50ZXIoKSB9OwogICAgIH0KICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwogfQpAQCAtOTQxLDggKzkzNyw3IEBAIEludFBvaW50
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNsaWNrUG9pbnQoKQogICAgIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gdmlzU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7CiAgICAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNTZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCksIHZpc1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAgIEludFJlY3QgYm91bmRz
ID0gYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2UpOwotICAgIHJldHVybiB7IGJv
dW5kcy54KCkgKyAoYm91bmRzLndpZHRoKCkgLyAyKSwgYm91bmRzLnkoKSArIChib3VuZHMuaGVp
Z2h0KCkgLyAyKSB9OworICAgIHJldHVybiBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShy
YW5nZSkuY2VudGVyKCk7CiB9CiAgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjppbnRlcm5hbExpbmtFbGVtZW50KCkgY29uc3QKQEAgLTE2NjEsMTcg
KzE2NTYsMTUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRl
eHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKICAgICAgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sID0gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2w+
KCptX3JlbmRlcmVyKS50ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCk7CiAgICAgICAgIHRleHRDb250
cm9sLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJhbmdlLmxl
bmd0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBub2RlID0gdGhpcy0+bm9kZSgpOwot
ICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgIEFTU0VSVChub2RlKCkpOworICAgICAgICBh
dXRvJiBub2RlID0gKnRoaXMtPm5vZGUoKTsKICAgICAgICAgYXV0byBlbGVtZW50UmFuZ2UgPSB0
aGlzLT5lbGVtZW50UmFuZ2UoKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gdmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKCpub2RlLCByYW5nZS5z
dGFydCk7Ci0gICAgICAgIGlmICghZWxlbWVudFJhbmdlLT5jb250YWlucyhzdGFydCkpCi0gICAg
ICAgICAgICBzdGFydCA9IFZpc2libGVQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSk7Ci0gICAgICAgIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gdmlzaWJsZVBv
c2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKCpub2RlLCByYW5nZS5zdGFydCAr
IHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIGlmICghZWxlbWVudFJhbmdlLT5jb250YWlucyhlbmQp
KQotICAgICAgICAgICAgZW5kID0gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnRSYW5nZS0+ZW5kUG9z
aXRpb24oKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9u
Rm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0KTsKKyAgICAg
ICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQor
ICAgICAgICAgICAgc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudFJh
bmdlLT5zdGFydCk7CisgICAgICAgIGF1dG8gZW5kID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhV
c2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsK
KyAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFpbnMoZW5k
KSkKKyAgICAgICAgICAgIGVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50
UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgbV9yZW5kZXJlci0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kKSwgRnJhbWVTZWxlY3Rpb246
OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKICAgICB9CiAgICAg
CkBAIC0yMTY3LDE3ICsyMTYwLDE0IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvCiAgICAgcmV0
dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgKm1ha2VSYW5nZShyYW5nZS5zdGFydCwg
cmFuZ2UuZW5kKSk7CiB9CiAKLUludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91
bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKK0ludFJlY3QgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKSBjb25zdAogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgCiAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSB0aGlzLT5heE9iamVjdENhY2hl
KCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKICAgICAKLSAg
ICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNl
dEZvclJhbmdlKCpyYW5nZSwgdHJ1ZSk7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hl
LT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoKnJhbmdlLCBmYWxzZSk7CisgICAg
Q2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRG
b3JSYW5nZShyYW5nZSwgdHJ1ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5z
dGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIGZhbHNlKTsKICAgICAKICAg
ICBMYXlvdXRSZWN0IHJlY3QxID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0
ZXJPZmZzZXQoc3RhcnQpOwogICAgIExheW91dFJlY3QgcmVjdDIgPSBjYWNoZS0+YWJzb2x1dGVD
YXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChlbmQpOwpAQCAtMjE5NSw3ICsyMTg1LDcgQEAg
SW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSYW5nZShjb25zdCBS
ZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb24KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICByZXR1
cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqcmFuZ2UpOworICAgIHJldHVybiBib3Vu
ZHNGb3JSZWN0cyhyZWN0MSwgcmVjdDIsIHJhbmdlKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojppc1Zpc2libGVQb3NpdGlvblJhbmdlSW5EaWZmZXJlbnREb2N1bWVudChj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgcmFuZ2UpIGNvbnN0CkBAIC0yMjMwLDEwICsyMjIw
LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxl
UG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zCiAgICAgaWYgKHJhbmdlLnN0YXJ0ID09IHJh
bmdlLmVuZCkgewogICAgICAgICBzZXRUZXh0U2VsZWN0aW9uSW50ZW50KGF4T2JqZWN0Q2FjaGUo
KSwgQVhUZXh0U3RhdGVDaGFuZ2VUeXBlU2VsZWN0aW9uTW92ZSk7CiAKLSAgICAgICAgYXV0byBl
bGVtZW50UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKTsKICAgICAgICAgYXV0byBzdGFydCA9
IHJhbmdlLnN0YXJ0OwotICAgICAgICBpZiAoZWxlbWVudFJhbmdlICYmICFlbGVtZW50UmFuZ2Ut
PmNvbnRhaW5zKHN0YXJ0KSkKLSAgICAgICAgICAgIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKGVs
ZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKGF1dG8gZWxlbWVudFJh
bmdlID0gdGhpcy0+ZWxlbWVudFJhbmdlKCkpIHsKKyAgICAgICAgICAgIGlmICghY3JlYXRlTGl2
ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKHN0YXJ0KSkKKyAgICAgICAgICAgICAgICBz
dGFydCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsK
KyAgICAgICAgfQogCiAgICAgICAgIG1fcmVuZGVyZXItPmZyYW1lKCkuc2VsZWN0aW9uKCkubW92
ZVRvKHN0YXJ0LCBVc2VyVHJpZ2dlcmVkKTsKICAgICB9IGVsc2UgewpAQCAtMjQxOSwxMSArMjQx
MCwxNCBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JS
YW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZwogICAgIHJldHVybiBJbnRSZWN0KCk7CiB9
CiAKLUludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdl
VXNpbmdDaGFyYWN0ZXJPZmZzZXQoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAor
SW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2VVc2lu
Z0NoYXJhY3Rlck9mZnNldChjb25zdCBQbGFpblRleHRSYW5nZSYgY2hhcmFjdGVyUmFuZ2UpIGNv
bnN0CiB7Ci0gICAgaWYgKGFsbG93c1RleHRSYW5nZXMoKSkKLSAgICAgICAgcmV0dXJuIGJvdW5k
c0ZvclJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKTsKLSAgICByZXR1cm4gSW50
UmVjdCgpOworICAgIGlmICghYWxsb3dzVGV4dFJhbmdlcygpKQorICAgICAgICByZXR1cm4geyB9
OworICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNoYXJhY3RlclJhbmdl
KTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBib3Vu
ZHNGb3JSYW5nZSgqcmFuZ2UpOwogfQogCiBBWENvcmVPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNTEFyZWFFbGVtZW50KiBh
cmVhLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCmluZGV4IDk5
MjM1NzZlYTMxYTA1N2RjNTNkOTNhMzNmN2IzNjY3ZDVhZWJmMTYuLmNkMGJhMjNlZmE5YmNiOWJj
MzBkMTg5ZjZhNjUyYTcxMzhlNGE5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCkBAIC0xNjYsNyArMTY2
LDcgQEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJh
bmdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBv
c2l0aW9uUmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdCBvdmVycmlkZTsKICAgICBJbnRSZWN0
IGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdl
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBib3VuZHNGb3JSYW5nZShjb25zdCBSZWZQ
dHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZTsKKyAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTZWxlY3RlZFZp
c2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgYm9vbCBpc1Zpc2libGVQb3NpdGlvblJhbmdlSW5EaWZmZXJlbnREb2N1bWVu
dChjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0OwogICAgIGJvb2wgaGFzUG9wdXAo
KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0K
aW5kZXggM2JhM2ZhM2I3NWNlNDJhMDU1ODUzYjY4YjE2MGE3OGI1ODY3ZTg5My4uOTkxZGNhZjI4
Zjg4NDY0MTVjMmYwNzg0MTAxMGZjYTRiMjU0NmJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0KQEAgLTI2OTAsNyArMjY5MCw3IEBAIC0gKE5TQXJyYXkgKiltaXNz
cGVsbGluZ1RleHRNYXJrZXJSYW5nZTooTlNBcnJheSAqKXN0YXJ0VGV4dE1hcmtlclJhbmdlIGZv
cndhcmQ6CiAgICAgaWYgKCFzdGFydFJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
UmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmdl
dE1pc3NwZWxsaW5nUmFuZ2Uoc3RhcnRSYW5nZSwKKyAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2Ug
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+bWlzc3BlbGxpbmdSYW5nZShzdGFydFJhbmdlLAogICAg
ICAgICBmb3J3YXJkID8gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCA6IEFjY2Vz
c2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKTsKICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlcnNGb3JSYW5nZTptaXNzcGVsbGluZ1JhbmdlXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9i
amVjdC5jcHAKaW5kZXggZTU2YzI5ZmVkZjA1MTM2MGFmNDhkZmNhODQxZWFmMjM2MjUzYmM0ZC4u
YjBjMWIwOGUyMTM4ZjU0N2JmMWJmZWE3MzhmODE2ODU2NTIzMmU3MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZE9iamVjdC5jcHAKQEAgLTg5OCw3ICs4OTgsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMo
KTsKIH0KIAotU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OnN0cmluZ0ZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcmFuZ2UpIGNvbnN0CitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6c3RyaW5nRm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewogICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8U3RyaW5nPihbJnJhbmdlLCB0aGlz
XSAoKSAtPiBTdHJpbmcgewogICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFY
T2JqZWN0KCkpCkBAIC05MDcsMTIgKzkwNywxMiBAQCBTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6
c3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKICAgICB9KTsKIH0KIAot
VmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFYSXNvbGF0ZWRPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFj
Y2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmIGNyaXRlcmlhKSBjb25zdAorVmVj
dG9yPFNpbXBsZVJhbmdlPiBBWElzb2xhdGVkT2JqZWN0OjpmaW5kVGV4dFJhbmdlcyhjb25zdCBB
Y2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhJiBjcml0ZXJpYSkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+Pj4oWyZjcml0ZXJpYSwgdGhpc10gKCkgLT4gVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhy
ZWFkPFZlY3RvcjxTaW1wbGVSYW5nZT4+KFsmY3JpdGVyaWEsIHRoaXNdICgpIC0+IFZlY3RvcjxT
aW1wbGVSYW5nZT4gewogICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2Jq
ZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJp
YSk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4oKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCmluZGV4IDU5ODRh
MjM2MWJmZDBkNGRiMDMwNDlmMGJkOWU5NDIxOTgxODQ5MjQuLmRkYjhjYmJmZjU1ODVmYWFjMDQ1
NjlkOWZiN2NhYjBlYzVkM2I0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKQEAgLTYzNiw3
ICs2MzYsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdHJpbmdW
YWx1ZSk7IH0KIAogICAgIC8vIFBhcmFtZXRlcml6ZWQgYXR0cmlidXRlIHJldHJpZXZhbC4KLSAg
ICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJj
aFRleHRDcml0ZXJpYSBjb25zdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3RvcjxTaW1wbGVS
YW5nZT4gZmluZFRleHRSYW5nZXMoY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJp
YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1UZXh0T3BlcmF0
aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0Jikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSosIEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlOwogCkBAIC02NTUsNyArNjU1LDcgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gU3RyaW5nKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25S
YW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5z
aWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
LSAgICBSZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQogICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHBvc2l0aW9uT2ZMZWZ0V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgcG9zaXRpb25PZlJpZ2h0V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CkBAIC02NjYsMTAgKzY2
NiwxMCBAQCBwcml2YXRlOgogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KICAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSBsaW5lUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIFN0cmluZyBzdHJpbmdGb3JSYW5n
ZShSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIFN0cmluZyBzdHJpbmdGb3JSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgYm91bmRz
Rm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICBJbnRSZWN0IGJvdW5kc0ZvclJh
bmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3Qo
KTsgfQorICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KICAgICBpbnQgbGVuZ3RoRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAwOyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckJv
dW5kcyhjb25zdCBJbnRSZWN0JiwgQWNjZXNzaWJpbGl0eVZpc2libGVQb3NpdGlvbkZvckJvdW5k
cykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KICAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQpAQCAtNzE3LDcgKzcxNyw3
IEBAIHByaXZhdGU6CiAKICAgICAvLyBUT0RPOiBGdW5jdGlvbnMKICAgICBTdHJpbmcgdGV4dFVu
ZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUgPSBBY2Nlc3NpYmls
aXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoKSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5n
KCk7IH0KLSAgICBSZWZQdHI8UmFuZ2U+IGdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdl
PiBjb25zdCYsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlzc3BlbGxpbmdS
YW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogICAgIEZsb2F0UmVjdCBjb252
ZXJ0RnJhbWVUb1NwYWNlKGNvbnN0IEZsb2F0UmVjdCYsIEFjY2Vzc2liaWxpdHlDb252ZXJzaW9u
U3BhY2UpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAgICAgdm9pZCBp
bmNyZW1lbnQoKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGRlY3JlbWVudCgpIG92ZXJyaWRlIHsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA4MTNjOGRlNjk3
ZTZiZTQzMjdiM2M4OGI2ZDNlYWRiOTY1NTM3YzcwLi4yNjBjNDkyOGQwMTFmZWY5YTJiZDQ4N2Uz
MDEwNTVmN2VhYzllNzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bQpAQCAtNjkxLDEwICs2OTEsMTEgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9u
IGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXplZEF0dHIKICAgICBOU1N0
cmluZyAqcmVwbGFjZW1lbnRTdHJpbmcgPSBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBvYmplY3RG
b3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvblJlcGxhY2VtZW50U3RyaW5nXTsKIAog
ICAgIGlmIChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkgewot
ICAgICAgICBzaXplX3QgY291bnQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1hcmtlclJhbmdlcy5j
b3VudCk7Ci0gICAgICAgIG9wZXJhdGlvbi50ZXh0UmFuZ2VzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoY291bnQpOwotICAgICAgICBmb3IgKGlkIG1hcmtlclJhbmdlIDogbWFya2VyUmFuZ2VzKQot
ICAgICAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMuYXBwZW5kKFtvYmogcmFuZ2VGb3JUZXh0
TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXJrZXJSYW5nZXMuY291bnQpOworICAgICAgICBmb3Ig
KGlkIG1hcmtlclJhbmdlIDogbWFya2VyUmFuZ2VzKSB7CisgICAgICAgICAgICBpZiAoYXV0byBy
YW5nZSA9IFtvYmogcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKQorICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbi50ZXh0UmFuZ2VzLmFwcGVuZCgqcmFuZ2UpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgaWYgKFtvcGVyYXRpb25UeXBlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5n
IGNsYXNzXV0pIHsKQEAgLTM2MjMsMTEgKzM2MjQsMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECiAKIC8vIFRoZSBDRkF0dHJpYnV0ZWRTdHJpbmdUeXBlIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkKIC8v
IG9iamVjdCB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gcmFuZ2UuCi0tIChOU0F0dHJp
YnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UK
Ky0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2UKIHsKLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBQbGFpblRleHRS
YW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdl
YlJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UodGV4
dFJhbmdlKTsKLSAgICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFy
a2VyUmFuZ2U6W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOndlYlJhbmdlXSBzcGVsbENo
ZWNrOllFU107CisgICAgYXV0byB3ZWJSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5yYW5n
ZUZvclBsYWluVGV4dFJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0
ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdl
OmNyZWF0ZUxpdmVSYW5nZSh3ZWJSYW5nZSldIHNwZWxsQ2hlY2s6WUVTXTsKIH0KIAogLSAoTlNS
YW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCkBAIC0zOTYzLDcgKzM5NjMsNyBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGlmIChy
YW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlTlNBcnJheShyYW5nZXMsIFsmXSAoYXV0byYgcmFuZ2UpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdl
OnJhbmdlXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtl
clJhbmdlRnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZShyYW5nZSldOwogICAgICAgICAgICAgfSku
YXV0b3JlbGVhc2UoKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDAzOCw4ICs0MDM4LDggQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBpZiAoIWJh
Y2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICAgICAg
aWYgKGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGJhY2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5n
UmFuZ2UoY3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlhLnNlY29uZCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTptaXNzcGVsbGlu
Z1JhbmdlXTsKKyAgICAgICAgICAgIGlmIChhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBiYWNraW5n
T2JqZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpjcml0ZXJpYS5maXJzdCwgY3JpdGVyaWEuc2Vjb25k
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdl
RnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSldOwogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDA3OSw4ICs0MDc5LDcgQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCJdKSB7CiAg
ICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJv
bU1haW5UaHJlYWQ8aWQ+KFsmdWlFbGVtZW50LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNl
bGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSB1aUVsZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5nZSgpOwotICAgICAgICAgICAgcmV0dXJu
IFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5nZV07CisgICAgICAg
ICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOmNyZWF0
ZUxpdmVSYW5nZSh1aUVsZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5nZSgpKV07CiAgICAgICAgIH0p
OwogICAgIH0KIApAQCAtNDExMSw5ICs0MTEwLDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8U3RyaW5nPihbJnRleHRNYXJrZXJSYW5nZSwg
cHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gU3RyaW5nIHsKLSAgICAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICAgICAgYXV0byByYW5nZSA9IFtwcm90
ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CiAgICAg
ICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3Q7Ci0gICAgICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdCA/IGJhY2tpbmdPYmpl
Y3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKSA6IFN0cmluZygpOworICAgICAgICAgICAgcmV0dXJu
IChyYW5nZSAmJiBiYWNraW5nT2JqZWN0KSA/IGJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdl
KCpyYW5nZSkgOiBTdHJpbmcoKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC00MTQxLDkgKzQx
NDAsMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAg
ICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmpl
Y3Q7CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIENHUmVjdFplcm87Ci0KLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbcHJv
dGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAg
ICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QoYmFja2luZ09iamVjdC0+Ym91bmRzRm9y
UmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiBy
YW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICAgICAgaWYg
KCFyYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyAgICAgICAgICAg
IGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJhbmdlKCpy
YW5nZSkpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIGNvbnZlcnRSZWN0VG9T
cGFjZTpib3VuZHMgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsK
ICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3Rd
OwpAQCAtNDE1NCwxOCArNDE1NCwxNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLQogICAgICAgICAgICAgYXV0byogY2Fj
aGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNh
Y2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotCiAgICAgICAgICAgICBD
aGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFu
Z2UubG9jYXRpb24sIGJhY2tpbmdPYmplY3QpOwogICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbityYW5n
ZS5sZW5ndGgsIGJhY2tpbmdPYmplY3QpOwotICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgp
IHx8IGVuZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLQog
ICAgICAgICAgICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rl
ck9mZnNldHMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBhdXRvIGJvdW5kcyA9IEZsb2F0UmVj
dChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpKSk7
CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAgIHJldHVybiBDR1JlY3Ra
ZXJvOworICAgICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QoYmFja2luZ09iamVjdC0+
Ym91bmRzRm9yUmFuZ2UoKnJhbmdlKSk7CiAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNl
bGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3NpYmlsaXR5Q29udmVyc2lv
blNwYWNlOjpTY3JlZW5dOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZh
bHVlV2l0aFJlY3Q6cmVjdF07CkBAIC00MTgxLDE4ICs0MTc4LDE1IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9
IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICAgICAgaWYgKCFi
YWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQogICAgICAg
ICAgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAg
ICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNl
dEZvckluZGV4KHJhbmdlLmxvY2F0aW9uLCBiYWNraW5nT2JqZWN0KTsKLSAgICAgICAgICAgIENo
YXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2Uu
bG9jYXRpb24gKyByYW5nZS5sZW5ndGgsIGJhY2tpbmdPYmplY3QpOwotICAgICAgICAgICAgaWYg
KHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KKyAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zm
c2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24sIGJhY2tpbmdPYmplY3QpOworICAgICAgICAgICAg
YXV0byBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24g
KyByYW5nZS5sZW5ndGgsIGJhY2tpbmdPYmplY3QpOwogICAgICAgICAgICAgYXV0byByYW5nZSA9
IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7Ci0g
ICAgICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKSk7CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+c3RyaW5nRm9y
UmFuZ2UoKnJhbmdlKTsKICAgICAgICAgfSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAKaW5kZXggNjc4NTQ3MjIwM2I4MWUxYTFkNWY5NjExNTAxODkxOGRl
YjFkNzI2NS4uM2YzNzIzMmM3ZTk1YmEyMDA1MzkxMTA0OWFlODA0MDI0ZjYxNjc4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtOTgyLDEwICs5ODIsOSBAQCBz
dGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3VzRGlyZWN0aW9uIGRp
cmVjdGlvbiwgY29uc3QgRm9jdXNDYQogICAgIExheW91dFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9
IGludGVyc2VjdGlvbihjYW5kaWRhdGUucmVjdCwgY2xvc2VzdC5yZWN0KTsKICAgICBpZiAoIWlu
dGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpICYmICFhcmVFbGVtZW50c09uU2FtZUxpbmUoY2xvc2Vz
dCwgY2FuZGlkYXRlKSkgewogICAgICAgICAvLyBJZiAyIG5vZGVzIGFyZSBpbnRlcnNlY3Rpbmcs
IGRvIGhpdCB0ZXN0IHRvIGZpbmQgd2hpY2ggbm9kZSBpbiBvbiB0b3AuCi0gICAgICAgIExheW91
dFVuaXQgeCA9IGludGVyc2VjdGlvblJlY3QueCgpICsgaW50ZXJzZWN0aW9uUmVjdC53aWR0aCgp
IC8gMjsKLSAgICAgICAgTGF5b3V0VW5pdCB5ID0gaW50ZXJzZWN0aW9uUmVjdC55KCkgKyBpbnRl
cnNlY3Rpb25SZWN0LmhlaWdodCgpIC8gMjsKKyAgICAgICAgYXV0byBjZW50ZXIgPSBmbG9vcmVk
SW50UG9pbnQoaW50ZXJzZWN0aW9uUmVjdC5jZW50ZXIoKSk7IC8vIEZJWE1FOiBXb3VsZCByb3Vu
ZGVkSW50UG9pbnQgYmUgYmV0dGVyPwogICAgICAgICBjb25zdGV4cHIgT3B0aW9uU2V0PEhpdFRl
c3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0VHlwZSB7IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25s
eSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwgSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5n
LCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0
UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9OwotICAgICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IGNhbmRpZGF0ZS52aXNpYmxlTm9kZS0+ZG9jdW1lbnQoKS5wYWdlKCktPm1haW5G
cmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KEludFBvaW50KHgsIHkp
LCBoaXRUeXBlKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBjYW5kaWRhdGUudmlz
aWJsZU5vZGUtPmRvY3VtZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5o
aXRUZXN0UmVzdWx0QXRQb2ludChjZW50ZXIsIGhpdFR5cGUpOwogICAgICAgICBpZiAoY2FuZGlk
YXRlLnZpc2libGVOb2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkpKSB7CiAgICAgICAg
ICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOwogICAgICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404046</attachid>
            <date>2020-07-10 22:25:42 -0700</date>
            <delta_ts>2020-07-11 09:47:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214215-20200710222541.patch</filename>
            <type>text/plain</type>
            <size>65284</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGQ3YTZlOTlmZDFmNmVm
YjI5N2FhZWVhYzc2MGQzMTAxZWYxZWFhZC4uZTZmYjAxNmJlMTcxOTJiZDIzNGQxMjgyYjUyMGQy
OTUyYzJiMjU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA3LTEwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBBY2Nlc3NpYmlsaXR5T2JqZWN0LmgsIEFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aCwgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oLCBBWElzb2xhdGVkT2JqZWN0LmgKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDIxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gdXNlIHRoZSBJ
bnRQb2ludCBhbmQgTGF5b3V0UG9pbnQgY2VudGVyKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygcm9s
bGluZyBvdXIgb3duLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxs
aW5nUmFuZ2UgY29uc3QpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuIEFsc28KKyAgICAgICAgcmVuYW1l
ZCBmcm9tIGdldE1pc3NwZWxsaW5nUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nl
c3RUb1JhbmdlKTogVGFrZSBhbmQgcmV0dXJuIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJl
Y3Rpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2UgY29uc3QpOiBUYWtlIGFu
ZCByZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpmaW5kVGV4dFJhbmdlcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6cGVyZm9ybVRleHRPcGVyYXRpb24pOiBVc2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KTogVXNl
IGNlbnRlcigpLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VG
b3JQbGFpblRleHRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdlIGNvbnN0KTogVGFrZSBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmlu
Z0ZvclZpc2libGVQb3NpdGlvblJhbmdlKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJl
cGxhY2VUZXh0SW5SYW5nZSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oOiBUYWtlIGFuZCBy
ZXR1cm4gU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6bGlua0NsaWNrUG9pbnQpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjbGlja1BvaW50KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRS
YW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Ym91bmRzRm9yUmFuZ2UgY29uc3QpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRp
b25SYW5nZSBjb25zdCk6CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hh
cmFjdGVyT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOiBVcGRhdGUgZm9yIGFi
b3ZlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwOiBJbmNsdWRlIFJhbmdlLmguCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3RyaW5nRm9yVGV4dE1hcmtlcnM6XSk6IFVzZSBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4
dE1hcmtlclJhbmdlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBzdHJpbmdGb3JSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIG1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlOmZvcndhcmQ6XSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBmcmFtZUZv
clRleHRNYXJrZXJzOl0pOiBEaXR0by4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRl
ZE9iamVjdDo6c3RyaW5nRm9yUmFuZ2UgY29uc3QpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZmluZFRleHRSYW5nZXMgY29uc3QpOiBSZXR1
cm4gU2ltcGxlUmFuZ2UuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChh
Y2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUpOiBVc2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRv
QVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFy
YW1ldGVyOl0pOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQpOiBVc2UgY2Vu
dGVyKCkuCisKIDIwMjAtMDctMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2NDI0Mi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDU3YTAx
OWRmZmYxYjg2MGM3MzgwNzAyMDMxNzI4NWExMjE5MjA0MGQuLjEwZGI2OTBmYzQ1NWY3NTk2OTVl
ODZkZDVkYWRmZjk2OWFmZjUzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMjc0LDI0ICsyNzQsMjQgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNNaXNzcGVsbGluZygpIGNvbnN0CiAgICAgcmV0dXJu
IGlzTWlzc3BlbGxlZDsKIH0KIAotUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpn
ZXRNaXNzcGVsbGluZ1JhbmdlKFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXJ0LCBBY2Nlc3NpYmls
aXR5U2VhcmNoRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdl
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7
CiAgICAgYXV0byBub2RlID0gdGhpcy0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBGcmFt
ZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBpZiAoIXVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZnJhbWUpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEVkaXRvciYgZWRp
dG9yID0gZnJhbWUtPmVkaXRvcigpOwogCiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVj
a2VyID0gZWRpdG9yLnRleHRDaGVja2VyKCk7CiAgICAgaWYgKCF0ZXh0Q2hlY2tlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBtaXNzcGVsbGluZ3M7CiAgICAgY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoKnRleHRDaGVja2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZywgbWlzc3BlbGxpbmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwpA
QCAtMzA2LDggKzMwNiw4IEBAIFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0
TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFyCiAgICAgICAgICAgICBp
ZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgICAgIGlmIChtaXNzcGVsbGluZ1JhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OkVORF9UT19FTkQsICpzdGFydCkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtaXNzcGVsbGluZ1JhbmdlOworICAgICAgICAgICAgaWYgKG1pc3NwZWxs
aW5nUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRl
TGl2ZVJhbmdlKHN0YXJ0KSkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQorICAgICAgICAgICAg
ICAgIHJldHVybiBTaW1wbGVSYW5nZSB7ICptaXNzcGVsbGluZ1JhbmdlIH07CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9u
OjpQcmV2aW91cykgewogICAgICAgICBmb3IgKGF1dG8gcml0ID0gbWlzc3BlbGxpbmdzLnJiZWdp
bigpOyByaXQgIT0gbWlzc3BlbGxpbmdzLnJlbmQoKTsgKytyaXQpIHsKQEAgLTMxNSwxMiArMzE1
LDEyIEBAIFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0TWlzc3BlbGxpbmdS
YW5nZShSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFyCiAgICAgICAgICAgICBpZiAoIW1pc3NwZWxs
aW5nUmFuZ2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICht
aXNzcGVsbGluZ1JhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NU
QVJULCAqc3RhcnQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ1Jhbmdl
LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVhdGVMaXZl
UmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDApCisgICAgICAgICAgICAgICAg
cmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1pc3NwZWxsaW5nUmFuZ2UgfTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
IHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJsb2NrcXVvdGVMZXZlbCgpIGNvbnN0CkBA
IC01NjIsNjcgKzU2Miw2MiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGlu
Z09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0ZQogLy8gUmV0dXJucyB0
aGUgcmFuZ2UgdGhhdCBpcyBmZXdlciBwb3NpdGlvbnMgYXdheSBmcm9tIHRoZSByZWZlcmVuY2Ug
cmFuZ2UuCiAvLyBOT1RFOiBUaGUgYWZ0ZXIgcmFuZ2UgaXMgZXhwZWN0ZWQgdG8gQUNUVUFMTFkg
YmUgYWZ0ZXIgdGhlIHJlZmVyZW5jZSByYW5nZSBhbmQgdGhlIGJlZm9yZQogLy8gcmFuZ2UgaXMg
ZXhwZWN0ZWQgdG8gQUNUVUFMTFkgYmUgYmVmb3JlLiBUaGVzZSBhcmUgbm90IGNoZWNrZWQgZm9y
IHBlcmZvcm1hbmNlIHJlYXNvbnMuCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUNsb3Nlc3RU
b1JhbmdlKFJlZlB0cjxSYW5nZT4gY29uc3QmIHJlZmVyZW5jZVJhbmdlLCBSZWZQdHI8UmFuZ2U+
JiYgYWZ0ZXJSYW5nZSwgUmVmUHRyPFJhbmdlPiYmIGJlZm9yZVJhbmdlKQorc3RhdGljIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZUNsb3Nlc3RUb1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
ZWZlcmVuY2VSYW5nZSwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiYgYWZ0ZXJSYW5nZSwgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+JiYgYmVmb3JlUmFuZ2UpCiB7Ci0gICAgaWYgKCFyZWZlcmVuY2VSYW5n
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICAvLyBUaGUgdHJlZVNjb3BlIGZvciBz
aGFkb3cgbm9kZXMgbWF5IG5vdCBiZSB0aGUgc2FtZSBzY29wZSBhcyBhbm90aGVyIGVsZW1lbnQg
aW4gYSBkb2N1bWVudC4KICAgICAvLyBDb21wYXJpc29ucyBtYXkgZmFpbCBpbiB0aGF0IGNhc2Us
IHdoaWNoIGFyZSBleHBlY3RlZCBiZWhhdmlvciBhbmQgc2hvdWxkIG5vdCBhc3NlcnQuCi0gICAg
aWYgKGFmdGVyUmFuZ2UgJiYgKHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpLmlzTnVsbCgp
IHx8ICgoYWZ0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hvck5vZGUoKS0+Y29tcGFyZURv
Y3VtZW50UG9zaXRpb24oKnJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpLmFuY2hvck5vZGUo
KSkgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpID09IE5vZGU6OkRPQ1VN
RU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBBU1NFUlQoIWFmdGVyUmFuZ2UgfHwgYWZ0ZXJSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKnJlZmVyZW5jZVJhbmdlKS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSA+PSAwKTsKKyAgICBpZiAoYWZ0ZXJSYW5nZSAmJiAoKGFmdGVyUmFuZ2UtPnN0YXJ0LmNv
bnRhaW5lci0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kLmNvbnRh
aW5lcikgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpID09IE5vZGU6OkRP
Q1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgQVNTRVJUKCFhZnRlclJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShhZnRlclJhbmdl
KS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2
ZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPj0gMCk7CiAKLSAg
ICBpZiAoYmVmb3JlUmFuZ2UgJiYgKHJlZmVyZW5jZVJhbmdlLT5zdGFydFBvc2l0aW9uKCkuaXNO
dWxsKCkgfHwgKChiZWZvcmVSYW5nZS0+ZW5kUG9zaXRpb24oKS5hbmNob3JOb2RlKCktPmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKCpyZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpLmFuY2hv
ck5vZGUoKSkgJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpID09IE5vZGU6
OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBBU1NFUlQoIWJlZm9yZVJhbmdlIHx8IGJlZm9yZVJhbmdlLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqcmVmZXJlbmNlUmFuZ2UpLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpIDw9IDApOworICAgIGlmIChiZWZvcmVSYW5nZSAmJiAoKGJlZm9yZVJhbmdl
LT5lbmQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5z
dGFydC5jb250YWluZXIpICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSA9
PSBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIEFTU0VSVCghYmVmb3JlUmFuZ2UgfHwgY3JlYXRlTGl2ZVJhbmdl
KGJlZm9yZVJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFS
VCwgY3JlYXRlTGl2ZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSkucmVsZWFzZVJldHVyblZhbHVlKCkg
PD0gMCk7CiAKICAgICBpZiAoIWFmdGVyUmFuZ2UgJiYgIWJlZm9yZVJhbmdlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoYWZ0
ZXJSYW5nZSAmJiAhYmVmb3JlUmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGFmdGVyUmFu
Z2UpOwogICAgIGlmICghYWZ0ZXJSYW5nZSAmJiBiZWZvcmVSYW5nZSkKICAgICAgICAgcmV0dXJu
IFdURk1vdmUoYmVmb3JlUmFuZ2UpOwotICAgIAotICAgIHVuc2lnbmVkIHBvc2l0aW9uc1RvQWZ0
ZXJSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2VlblBvc2l0aW9ucyhhZnRlclJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAg
ICB1bnNpZ25lZCBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9uQ291
bnRCZXR3ZWVuUG9zaXRpb25zKGJlZm9yZVJhbmdlLT5lbmRQb3NpdGlvbigpLCByZWZlcmVuY2VS
YW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAKLSAgICByZXR1cm4gcG9zaXRpb25zVG9BZnRl
clJhbmdlIDwgcG9zaXRpb25zVG9CZWZvcmVSYW5nZSA/IGFmdGVyUmFuZ2UgOiBiZWZvcmVSYW5n
ZTsKKworICAgIGF1dG8gZGlzdGFuY2VUb0FmdGVyUmFuZ2UgPSBjaGFyYWN0ZXJDb3VudCh7IGFm
dGVyUmFuZ2UtPnN0YXJ0LCByZWZlcmVuY2VSYW5nZS5lbmQgfSk7CisgICAgYXV0byBkaXN0YW5j
ZVRvQmVmb3JlUmFuZ2UgPSBjaGFyYWN0ZXJDb3VudCh7IGJlZm9yZVJhbmdlLT5lbmQsIHJlZmVy
ZW5jZVJhbmdlLnN0YXJ0IH0pOworCisgICAgcmV0dXJuIGRpc3RhbmNlVG9BZnRlclJhbmdlIDwg
ZGlzdGFuY2VUb0JlZm9yZVJhbmdlID8gYWZ0ZXJSYW5nZSA6IGJlZm9yZVJhbmdlOwogfQogCi1S
ZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9S
YW5nZUluRGlyZWN0aW9uKFJhbmdlKiByZWZlcmVuY2VSYW5nZSwgQWNjZXNzaWJpbGl0eVNlYXJj
aERpcmVjdGlvbiBzZWFyY2hEaXJlY3Rpb24sIFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hT
dHJpbmdzKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdl
JiByZWZlcmVuY2VSYW5nZSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiBzZWFyY2hEaXJl
Y3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hTdHJpbmdzKSBjb25zdAogewogICAg
IEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKCFyZWZlcmVuY2VSYW5nZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAg
Ym9vbCBpc0JhY2t3YXJkU2VhcmNoID0gc2VhcmNoRGlyZWN0aW9uID09IEFjY2Vzc2liaWxpdHlT
ZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzOwogICAgIEZpbmRPcHRpb25zIGZpbmRPcHRpb25zIHsg
QXRXb3JkU3RhcnRzLCBBdFdvcmRFbmRzLCBDYXNlSW5zZW5zaXRpdmUsIFN0YXJ0SW5TZWxlY3Rp
b24gfTsKICAgICBpZiAoaXNCYWNrd2FyZFNlYXJjaCkKICAgICAgICAgZmluZE9wdGlvbnMuYWRk
KEZpbmRPcHRpb25GbGFnOjpCYWNrd2FyZHMpOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gY2xv
c2VzdFN0cmluZ1JhbmdlID0gbnVsbHB0cjsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlYXJjaFN0
cmluZyA6IHNlYXJjaFN0cmluZ3MpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VhcmNo
U3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcs
IHJlZmVyZW5jZVJhbmdlLCBmaW5kT3B0aW9ucykpIHsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gY2xvc2VzdFN0cmluZ1JhbmdlOworICAgIGZvciAoYXV0byYgc2VhcmNoU3RyaW5nIDogc2Vh
cmNoU3RyaW5ncykgeworICAgICAgICBpZiAoYXV0byBzZWFyY2hTdHJpbmdSYW5nZSA9IGZyYW1l
LT5lZGl0b3IoKS5yYW5nZU9mU3RyaW5nKHNlYXJjaFN0cmluZywgY3JlYXRlTGl2ZVJhbmdlKHJl
ZmVyZW5jZVJhbmdlKS5wdHIoKSwgZmluZE9wdGlvbnMpKSB7CisgICAgICAgICAgICBhdXRvIGZv
dW5kU3RyaW5nUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpzZWFyY2hTdHJpbmdSYW5nZSB9OwogICAg
ICAgICAgICAgaWYgKCFjbG9zZXN0U3RyaW5nUmFuZ2UpCi0gICAgICAgICAgICAgICAgY2xvc2Vz
dFN0cmluZ1JhbmdlID0gc2VhcmNoU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgY2xvc2Vz
dFN0cmluZ1JhbmdlID0gZm91bmRTdHJpbmdSYW5nZTsKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIElmIHNlYXJjaGluZyBiYWNrd2FyZCwgdXNlIHRoZSB0cmFpbGluZyBy
YW5nZSBlZGdlcyB0byBjb3JyZWN0bHkgZGV0ZXJtaW5lIHdoaWNoCiAgICAgICAgICAgICAgICAg
Ly8gcmFuZ2UgaXMgY2xvc2VzdC4gU2ltaWxhcmx5LCBpZiBzZWFyY2hpbmcgZm9yd2FyZCwgdXNl
IHRoZSBsZWFkaW5nIHJhbmdlIGVkZ2VzLgotICAgICAgICAgICAgICAgIFBvc2l0aW9uIGNsb3Nl
c3RTdHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2Ut
PmVuZFBvc2l0aW9uKCkgOiBjbG9zZXN0U3RyaW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAg
ICAgICAgICAgICAgICBQb3NpdGlvbiBzZWFyY2hTdHJpbmdQb3NpdGlvbiA9IGlzQmFja3dhcmRT
ZWFyY2ggPyBzZWFyY2hTdHJpbmdSYW5nZS0+ZW5kUG9zaXRpb24oKSA6IHNlYXJjaFN0cmluZ1Jh
bmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgYXV0byYgY2xvc2VzdFN0cmlu
Z1Bvc2l0aW9uID0gaXNCYWNrd2FyZFNlYXJjaCA/IGNsb3Nlc3RTdHJpbmdSYW5nZS0+ZW5kIDog
Y2xvc2VzdFN0cmluZ1JhbmdlLT5zdGFydDsKKyAgICAgICAgICAgICAgICBhdXRvJiBmb3VuZFN0
cmluZ1Bvc2l0aW9uID0gaXNCYWNrd2FyZFNlYXJjaCA/IGZvdW5kU3RyaW5nUmFuZ2UuZW5kIDog
Zm91bmRTdHJpbmdSYW5nZS5zdGFydDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpbnQgY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLmNvbXB1
dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICAgICAgICAgICAgICBpbnQgc2VhcmNoUG9z
aXRpb25PZmZzZXQgPSBzZWFyY2hTdHJpbmdQb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCk7Ci0gICAgICAgICAgICAgICAgTm9kZSogY2xvc2VzdENvbnRhaW5lck5vZGUgPSBj
bG9zZXN0U3RyaW5nUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAgICAgIE5v
ZGUqIHNlYXJjaENvbnRhaW5lck5vZGUgPSBzZWFyY2hTdHJpbmdQb3NpdGlvbi5jb250YWluZXJO
b2RlKCk7CisgICAgICAgICAgICAgICAgYXV0byBjbG9zZXN0UG9zaXRpb25PZmZzZXQgPSBjbG9z
ZXN0U3RyaW5nUG9zaXRpb24ub2Zmc2V0OworICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoUG9z
aXRpb25PZmZzZXQgPSBmb3VuZFN0cmluZ1Bvc2l0aW9uLm9mZnNldDsKKyAgICAgICAgICAgICAg
ICBhdXRvIGNsb3Nlc3RDb250YWluZXJOb2RlID0gY2xvc2VzdFN0cmluZ1Bvc2l0aW9uLmNvbnRh
aW5lci5wdHIoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaENvbnRhaW5lck5vZGUgPSBm
b3VuZFN0cmluZ1Bvc2l0aW9uLmNvbnRhaW5lci5wdHIoKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBzaG9ydCByZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KGNsb3Nlc3RDb250YWluZXJOb2RlLCBjbG9zZXN0UG9zaXRpb25PZmZzZXQsIHNlYXJjaENvbnRh
aW5lck5vZGUsIHNlYXJjaFBvc2l0aW9uT2Zmc2V0KS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMo
Y2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCwgc2VhcmNoQ29udGFp
bmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAg
ICAgICAgICAgICAgIGlmICgoIWlzQmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0ID4gMCkgfHwgKGlz
QmFja3dhcmRTZWFyY2ggJiYgcmVzdWx0IDwgMCkpCi0gICAgICAgICAgICAgICAgICAgIGNsb3Nl
c3RTdHJpbmdSYW5nZSA9IHNlYXJjaFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgICAgICBj
bG9zZXN0U3RyaW5nUmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtNjQ0LDgzICs2MzksNzMgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKICAgICByZXR1cm4g
eyB7IHsgZG9jdW1lbnQsIDAgfSwgeyBkb2N1bWVudCwgMCB9IH0gfTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50UmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CiB7
CiAgICAgYXV0byBub2RlID0gdGhpcy0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKEFYT2JqZWN0Q2FjaGU6OnJh
bmdlRm9yTm9kZUNvbnRlbnRzKCpub2RlKSk7CisgICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6OnJh
bmdlRm9yTm9kZUNvbnRlbnRzKCpub2RlKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hTdHJp
bmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2UoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaFN0
cmluZ3MsIGNvbnN0IFNpbXBsZVJhbmdlJiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogewotICAgIFJlZlB0cjxSYW5nZT4gZm91bmQ7Cisg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZvdW5kOwogICAgIGlmIChkaXJlY3Rpb24gPT0gQWNj
ZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkZvcndhcmQpCi0gICAgICAgIGZvdW5kID0g
cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oc3RhcnQuZ2V0KCksIEFjY2Vz
c2liaWxpdHlTZWFyY2hEaXJlY3Rpb246Ok5leHQsIHNlYXJjaFN0cmluZ3MpOworICAgICAgICBm
b3VuZCA9IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKHN0YXJ0LCBBY2Nl
c3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpOZXh0LCBzZWFyY2hTdHJpbmdzKTsKICAgICBlbHNl
IGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkJhY2t3
YXJkKQotICAgICAgICBmb3VuZCA9IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0
aW9uKHN0YXJ0LmdldCgpLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91cywg
c2VhcmNoU3RyaW5ncyk7CisgICAgICAgIGZvdW5kID0gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1Jh
bmdlSW5EaXJlY3Rpb24oc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZp
b3VzLCBzZWFyY2hTdHJpbmdzKTsKICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT0gQWNjZXNzaWJp
bGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkNsb3Nlc3QpIHsKLSAgICAgICAgYXV0byBmb3VuZEFm
dGVyID0gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oc3RhcnQuZ2V0KCks
IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246Ok5leHQsIHNlYXJjaFN0cmluZ3MpOwotICAg
ICAgICBhdXRvIGZvdW5kQmVmb3JlID0gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJl
Y3Rpb24oc3RhcnQuZ2V0KCksIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3Vz
LCBzZWFyY2hTdHJpbmdzKTsKLSAgICAgICAgZm91bmQgPSByYW5nZUNsb3Nlc3RUb1JhbmdlKHN0
YXJ0LmdldCgpLCBXVEZNb3ZlKGZvdW5kQWZ0ZXIpLCBXVEZNb3ZlKGZvdW5kQmVmb3JlKSk7Cisg
ICAgICAgIGF1dG8gZm91bmRBZnRlciA9IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGly
ZWN0aW9uKHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpOZXh0LCBzZWFyY2hT
dHJpbmdzKTsKKyAgICAgICAgYXV0byBmb3VuZEJlZm9yZSA9IHJhbmdlT2ZTdHJpbmdDbG9zZXN0
VG9SYW5nZUluRGlyZWN0aW9uKHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQ
cmV2aW91cywgc2VhcmNoU3RyaW5ncyk7CisgICAgICAgIGZvdW5kID0gcmFuZ2VDbG9zZXN0VG9S
YW5nZShzdGFydCwgV1RGTW92ZShmb3VuZEFmdGVyKSwgV1RGTW92ZShmb3VuZEJlZm9yZSkpOwog
ICAgIH0KLQogICAgIGlmIChmb3VuZCkgewogICAgICAgICAvLyBJZiB0aGUgc2VhcmNoIHN0YXJ0
ZWQgd2l0aGluIGEgdGV4dCBjb250cm9sLCBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIGluc2lk
ZSB0aGF0IGVsZW1lbnQuCiAgICAgICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc1Rl
eHRGaWVsZCgpKSB7CiAgICAgICAgICAgICBpZiAoIWZvdW5kLT5zdGFydENvbnRhaW5lcigpLmlz
RGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKGVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICB8fCAhZm91bmQtPmVuZENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFu
dE9mKGVsZW1lbnQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gZm91bmQ7CiB9CiAKLVZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JiBj
cml0ZXJpYSkgY29uc3QKK1ZlY3RvcjxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZmluZFRleHRSYW5nZXMoY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSYgY3Jp
dGVyaWEpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHJlc3VsdDsKLQotICAg
IC8vIERldGVybWluZSBzdGFydCByYW5nZS4KLSAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2U7
CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5zdGFy
dCA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAgICAg
ICBzdGFydFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKCkpOworICAgICAg
ICByYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CiAgICAgZWxzZQotICAgICAgICBzdGFydFJhbmdl
ID0gZWxlbWVudFJhbmdlKCk7Ci0KLSAgICBpZiAoc3RhcnRSYW5nZSkgewotICAgICAgICAvLyBD
b2xsYXBzZSB0aGUgcmFuZ2UgdG8gdGhlIHN0YXJ0IHVubGVzcyBzZWFyY2hpbmcgZnJvbSB0aGUg
ZW5kIG9mIHRoZSBkb2Mgb3Igc2VhcmNoaW5nIGJhY2t3YXJkcy4KLSAgICAgICAgaWYgKGNyaXRl
cmlhLnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpCZWdpbikKLSAg
ICAgICAgICAgIHN0YXJ0UmFuZ2UtPmNvbGxhcHNlKHRydWUpOwotICAgICAgICBlbHNlIGlmIChj
cml0ZXJpYS5zdGFydCA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6RW5kKQot
ICAgICAgICAgICAgc3RhcnRSYW5nZS0+Y29sbGFwc2UoZmFsc2UpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdGFydFJhbmdlLT5jb2xsYXBzZShjcml0ZXJpYS5kaXJlY3Rpb24gIT0gQWNj
ZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkJhY2t3YXJkKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmFuZ2UgPSBlbGVtZW50UmFuZ2UoKTsKKyAg
ICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGNyaXRlcmlhLnN0
YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpCZWdpbikKKyAgICAgICAg
cmFuZ2UtPmVuZCA9IHJhbmdlLT5zdGFydDsKKyAgICBlbHNlIGlmIChjcml0ZXJpYS5zdGFydCA9
PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6RW5kKQorICAgICAgICByYW5nZS0+
c3RhcnQgPSByYW5nZS0+ZW5kOworICAgIGVsc2UgaWYgKGNyaXRlcmlhLmRpcmVjdGlvbiA9PSBB
Y2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6QmFja3dhcmQpCisgICAgICAgIHJhbmdl
LT5zdGFydCA9IHJhbmdlLT5lbmQ7CisgICAgZWxzZQorICAgICAgICByYW5nZS0+ZW5kID0gcmFu
Z2UtPnN0YXJ0OwogCi0gICAgUmVmUHRyPFJhbmdlPiBmb3VuZDsKKyAgICBWZWN0b3I8U2ltcGxl
UmFuZ2U+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGNyaXRlcmlhLmRpcmVjdGlvbikgewogICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkZvcndhcmQ6CiAgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6QmFja3dhcmQ6CiAgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Q2xvc2VzdDoKLSAgICAgICAgZm91bmQgPSBm
aW5kVGV4dFJhbmdlKGNyaXRlcmlhLnNlYXJjaFN0cmluZ3MsIHN0YXJ0UmFuZ2UsIGNyaXRlcmlh
LmRpcmVjdGlvbik7Ci0gICAgICAgIGlmIChmb3VuZCkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoZm91bmQpOworICAgICAgICBpZiAoKHJhbmdlID0gZmluZFRleHRSYW5nZShjcml0ZXJpYS5z
ZWFyY2hTdHJpbmdzLCAqcmFuZ2UsIGNyaXRlcmlhLmRpcmVjdGlvbikpKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgqcmFuZ2UpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFjY2Vzc2li
aWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpBbGw6IHsKLSAgICAgICAgYXV0byBmaW5kQWxsID0g
WyZdKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uIGRpcikgewotICAgICAgICAgICAg
Zm91bmQgPSBmaW5kVGV4dFJhbmdlKGNyaXRlcmlhLnNlYXJjaFN0cmluZ3MsIHN0YXJ0UmFuZ2Us
IGRpcik7Ci0gICAgICAgICAgICB3aGlsZSAoZm91bmQpIHsKLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGZvdW5kKTsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IGZpbmRUZXh0UmFuZ2Uo
Y3JpdGVyaWEuc2VhcmNoU3RyaW5ncywgZm91bmQsIGRpcik7Ci0gICAgICAgICAgICB9CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6QWxsOgorICAgICAgICBhdXRv
IGZpbmRBbGwgPSBbJl0oQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
KSB7CisgICAgICAgICAgICB3aGlsZSAoKHJhbmdlID0gZmluZFRleHRSYW5nZShjcml0ZXJpYS5z
ZWFyY2hTdHJpbmdzLCAqcmFuZ2UsIGRpcmVjdGlvbikpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoKnJhbmdlKTsKICAgICAgICAgfTsKICAgICAgICAgZmluZEFsbChBY2Nlc3NpYmls
aXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Rm9yd2FyZCk7CiAgICAgICAgIGZpbmRBbGwoQWNjZXNz
aWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkJhY2t3YXJkKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIH0KLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTczNiwxMCArNzIxLDEw
IEBAIFZlY3RvcjxTdHJpbmc+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBlcmZvcm1UZXh0T3BlcmF0
aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSYW5nZSA6IG9wZXJhdGlvbi50ZXh0UmFuZ2VzKSB7Ci0g
ICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodGV4dFJhbmdl
LmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cykpCisgICAgICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3Jl
YXRlTGl2ZVJhbmdlKHRleHRSYW5nZSkucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIFN0cmluZyB0ZXh0ID0gdGV4dFJhbmdlLT50ZXh0KCk7CisgICAgICAgIFN0cmluZyB0ZXh0
ID0gcGxhaW5UZXh0KHRleHRSYW5nZSk7CiAgICAgICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmlu
ZyA9IG9wZXJhdGlvbi5yZXBsYWNlbWVudFRleHQ7CiAgICAgICAgIGJvb2wgcmVwbGFjZVNlbGVj
dGlvbiA9IGZhbHNlOwogICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi50eXBlKSB7CkBAIC04NDMs
OCArODI4LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc01ldGVyKCkgY29uc3QKIAog
SW50UG9pbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpCiB7Ci0gICAgTGF5b3V0
UmVjdCByZWN0ID0gZWxlbWVudFJlY3QoKTsKLSAgICByZXR1cm4gcm91bmRlZEludFBvaW50KExh
eW91dFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMiwgcmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpIC8gMikpOworICAgIHJldHVybiByb3VuZGVkSW50UG9pbnQoZWxlbWVudFJlY3QoKS5j
ZW50ZXIoKSk7CiB9CiAKIEludFJlY3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRpbmdCb3hG
b3JRdWFkcyhSZW5kZXJPYmplY3QqIG9iaiwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRz
KQpAQCAtMTE4MCwyMSArMTE2NCwyMSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYQogICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiB9
CiAKLVJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VGb3JQbGFpblRleHRS
YW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVS
YW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQ
bGFpblRleHRSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9
IGdldExlbmd0aEZvclRleHRSYW5nZSgpOwogICAgIGlmIChyYW5nZS5zdGFydCArIHJhbmdlLmxl
bmd0aCA+IHRleHRMZW5ndGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIC8vIEF2b2lkIHNldHRpbmcgc2VsZWN0aW9uIHRvIHVuZWRp
dGFibGUgcGFyZW50IG5vZGUgaW4gRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UuIFNl
ZSB3ZWJraXQub3JnL2IvMjA2MDkzLgogICAgIGlmIChyYW5nZS5pc051bGwoKSAmJiAhdGV4dExl
bmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNoZSgp
KSB7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZz
ZXRGb3JJbmRleChyYW5nZS5zdGFydCwgdGhpcyk7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBl
bmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5s
ZW5ndGgsIHRoaXMpOwotICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGNhY2hlLT5yYW5n
ZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCkpOworICAgICAgICByZXR1
cm4gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsK
ICAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGluZVJhbmdlRm9y
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pIGNvbnN0CkBA
IC0xMjU5LDEyICsxMjQzLDkgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxpc3RNYXJr
ZXJUZXh0Rm9yTm9kZUFuZFBvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFYKICAgICByZXR1cm4g
bGlzdE1hcmtlclRleHRGb3JOb2RlKG5vZGUpOwogfQogCi1TdHJpbmcgQWNjZXNzaWJpbGl0eU9i
amVjdDo6c3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKK1N0cmluZyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIAotICAgIFRleHRJdGVyYXRvciBpdCgqcmFuZ2UpOworICAgIFRleHRJdGVyYXRvciBpdChy
YW5nZSk7CiAgICAgaWYgKGl0LmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICAKQEAgLTEyNzQsOCArMTI1NSwxMCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3Ry
aW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKICAgICAgICAgaWYgKGl0LnRl
eHQoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gQWRkIGEgdGV4dHVhbCByZXByZXNlbnRh
dGlvbiBmb3IgbGlzdCBtYXJrZXIgdGV4dC4KICAgICAgICAgICAgIC8vIERvbid0IGFkZCBsaXN0
IG1hcmtlciB0ZXh0IGZvciBuZXcgbGluZSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBpZiAoaXQu
dGV4dCgpLmxlbmd0aCgpICE9IDEgfHwgIWlzU3BhY2VPck5ld2xpbmUoaXQudGV4dCgpWzBdKSkK
LSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQ
b3NpdGlvbihpdC5ub2RlKCksIFZpc2libGVQb3NpdGlvbihyYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSkpOworICAgICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSAhPSAxIHx8ICFpc1NwYWNl
T3JOZXdsaW5lKGl0LnRleHQoKVswXSkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2Vl
bXMgbGlrZSB0aGUgcG9zaXRpb24gc2hvdWxkIGJlIGJhc2VkIG9uIGl0LnJhbmdlKCksIG5vdCBy
YW5nZS4KKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChsaXN0TWFya2VyVGV4dEZvck5v
ZGVBbmRQb3NpdGlvbihpdC5ub2RlKCksIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpKSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
aXQuYXBwZW5kVGV4dFRvU3RyaW5nQnVpbGRlcihidWlsZGVyKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihpdC5ub2RlKCkpKQpA
QCAtMTI4OCwxNSArMTI3MSwxMyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5n
Rm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvblJhbmdlJiB2aXNpYmxlUG9zaXRpb25SYW5nZSkKIHsKLSAgICBpZiAodmlzaWJsZVBvc2l0
aW9uUmFuZ2UuaXNOdWxsKCkpCisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHZp
c2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVQb3NpdGlvblJhbmdlLmVuZCk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZS5z
dGFydCwgdmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdCgqcmFuZ2UpOyAh
aXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoeyAq
c3RhcnQsICplbmQgfSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKICAgICAgICAgLy8g
bm9uLXplcm8gbGVuZ3RoIG1lYW5zIHRleHR1YWwgbm9kZSwgemVybyBsZW5ndGggbWVhbnMgcmVw
bGFjZWQgbm9kZSAoQUtBICJhdHRhY2htZW50cyIgaW4gQVgpCiAgICAgICAgIGlmIChpdC50ZXh0
KCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRp
b24gZm9yIGxpc3QgbWFya2VyIHRleHQuCkBAIC0xMzA4LDIyICsxMjg5LDIxIEBAIFN0cmluZyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBW
aXNpYmxlUG9zaXRpb25SCiAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQob2JqZWN0UmVw
bGFjZW1lbnRDaGFyYWN0ZXIpOwogICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKIH0KIAogaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxlbmd0aEZvclZp
c2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiB2aXNpYmxlUG9z
aXRpb25SYW5nZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogTXVsdGktYnl0ZSBzdXBwb3J0Ci0g
ICAgaWYgKHZpc2libGVQb3NpdGlvblJhbmdlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gLTE7
CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHZpc2libGVQb3NpdGlvblJh
bmdlLnN0YXJ0LCB2aXNpYmxlUG9zaXRpb25SYW5nZS5lbmQpOwotICAgIGlmICghcmFuZ2UpCi0g
ICAgICAgIHJldHVybiAtMTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlz
aWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisg
ICAgICAgIHJldHVybiAtMTsgLy8gRklYTUU6IFdoeSBub3QgcmV0dXJuIDA/CiAKKyAgICAvLyBG
SVhNRTogVXNlIGNoYXJhY3RlckNvdW50IGluc3RlYWQgb2Ygd3JpdGluZyBvdXIgb3duIGxvb3A/
CiAgICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsg
IWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHsg
KnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIC8v
IG5vbi16ZXJvIGxlbmd0aCBtZWFucyB0ZXh0dWFsIG5vZGUsIHplcm8gbGVuZ3RoIG1lYW5zIHJl
cGxhY2VkIG5vZGUgKEFLQSAiYXR0YWNobWVudHMiIGluIEFYKQogICAgICAgICBpZiAoaXQudGV4
dCgpLmxlbmd0aCgpKQogICAgICAgICAgICAgbGVuZ3RoICs9IGl0LnRleHQoKS5sZW5ndGgoKTsK
QEAgLTE0NDcsMTQgKzE0MjcsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGkKIAogICAgIC8v
IE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNlIGVuZC4KICAgICBhdXRvIG5leHRQ
b3NpdGlvbiA9IHBvc2l0aW9uLm5leHQoKTsKLSAgICBhdXRvIGxpbmVSYW5nZSA9IG1ha2VSYW5n
ZShzdGFydE9mTGluZShuZXh0UG9zaXRpb24pLCBlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0g
ICAgaWYgKCFsaW5lUmFuZ2UpCisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0
YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbikpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQoZW5kT2ZMaW5lKG5leHRQb3NpdGlvbikpOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIEFuIGVtcHR5IGxpbmUgaXMgY29uc2lkZXJlZCBh
IHNlbnRlbmNlLiBJZiBpdCdzIHNraXBwZWQsIHRoZW4gdGhlIHNlbnRlbmNlIHBhcnNlciB3aWxs
IG5vdAogICAgIC8vIHNlZSB0aGlzIGVtcHR5IGxpbmUuIEluc3RlYWQsIHJldHVybiB0aGUgZW5k
IHBvc2l0aW9uIG9mIHRoZSBlbXB0eSBsaW5lLgotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBt
b3JlIGVmZmljaWVudCB0byB1c2UgaGFzQW55UGxhaW5UZXh0IGluc3RlYWQgb2YgcGxhaW5UZXh0
LmlzRW1wdHkuCi0gICAgcmV0dXJuIHBsYWluVGV4dCgqbGluZVJhbmdlKS5pc0VtcHR5KCkgPyBu
ZXh0UG9zaXRpb24gOiBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbik7CisgICAgcmV0dXJuIGhh
c0FueVBsYWluVGV4dCh7ICpzdGFydCwgKmVuZCB9KSA/IGVuZE9mU2VudGVuY2UobmV4dFBvc2l0
aW9uKSA6IG5leHRQb3NpdGlvbjsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnByZXZpb3VzU2VudGVuY2VTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgcG9zaXRpb24pIGNvbnN0CkBAIC0xNDY0LDEzICsxNDQ0LDEzIEBAIFZpc2libGVQb3NpdGlv
biBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbihjb25z
dCBWaXNpYmxlCiAKICAgICAvLyBNYWtlIHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBzZW50ZW5jZSBz
dGFydC4KICAgICBhdXRvIHByZXZpb3VzUG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygpOwot
ICAgIGF1dG8gbGluZVJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZMaW5lKHByZXZpb3VzUG9zaXRp
b24pLCBlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOwotICAgIGlmICghbGluZVJhbmdlKQor
ICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mTGluZShwcmV2aW91c1Bv
c2l0aW9uKSk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZkxpbmUocHJl
dmlvdXNQb3NpdGlvbikpOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKICAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIC8vIFRyZWF0IGVtcHR5IGxpbmUgYXMgYSBzZXBhcmF0ZSBzZW50ZW5jZS4K
LSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbW9yZSBlZmZpY2llbnQgdG8gdXNlIGhhc0FueVBs
YWluVGV4dCBpbnN0ZWFkIG9mIHBsYWluVGV4dC5pc0VtcHR5LgotICAgIHJldHVybiBwbGFpblRl
eHQoKmxpbmVSYW5nZSkuaXNFbXB0eSgpID8gcHJldmlvdXNQb3NpdGlvbiA6IHN0YXJ0T2ZTZW50
ZW5jZShwcmV2aW91c1Bvc2l0aW9uKTsKKyAgICByZXR1cm4gaGFzQW55UGxhaW5UZXh0KHsgKnN0
YXJ0LCAqZW5kIH0pID8gc3RhcnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlv
dXNQb3NpdGlvbjsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5l
eHRQYXJhZ3JhcGhFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBj
b25zdApAQCAtMjA0Myw3ICsyMDIzLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBs
YWNlVGV4dEluUmFuZ2UoY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY28KICAgICAv
LyBBbHNvIG9ubHkgZG8gdGhpcyB3aGVuIHRoZSBmaWVsZCBpcyBpbiBlZGl0aW5nIG1vZGUuCiAg
ICAgYXV0byYgZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmIChlbGVtZW50LnNo
b3VsZFVzZUlucHV0TWV0aG9kKCkpIHsKLSAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0ZWRSYW5nZShyYW5nZUZvclBsYWluVGV4dFJhbmdlKHJhbmdlKS5nZXQoKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZUZvclBs
YWluVGV4dFJhbmdlKHJhbmdlKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0KHJlcGxhY2VtZW50U3RyaW5nLCBFZGl0b3I6OlNlbGVjdFJlcGxhY2Vt
ZW50OjpObywgRWRpdG9yOjpTbWFydFJlcGxhY2U6Ok5vKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAppbmRleCA5NTM4ZmU0MTViM2Y3OWE3ZjU5ZjBjOWYzMjkzYTNjNTBiZWUxODlh
Li42ZjliZjg1Yjg2OTg4MGM5ZDVmNjcyYmUzYzE0Mzk3MDEyMzY4MmRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMzMs
NyArMzMsNiBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkxheW91dFJlY3Qu
aCIKICNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KQEAgLTIzMiw3ICsyMzEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNCb2xkRm9udCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNJdGFsaWNGb250
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGhhc01pc3NwZWxs
aW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFJhbmdlPiBnZXRNaXNzcGVsbGluZ1Jh
bmdlKFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0
aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlzc3BlbGxp
bmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJl
Y3Rpb24pIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaGFzUGxhaW5UZXh0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGhhc1NhbWVGb250KGNvbnN0IEFYQ29y
ZU9iamVjdCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNT
YW1lRm9udENvbG9yKGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC0zNTYsMTIgKzM1NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGVzY2Vu
ZGFudE9mUm9sZShBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBU
ZXh0IHNlbGVjdGlvbgotcHJpdmF0ZToKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdD
bG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKFJhbmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVj
dGlvbiwgVmVjdG9yPFN0cmluZz4gY29uc3QmKSBjb25zdDsKLSAgICBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gc2VsZWN0aW9uUmFuZ2UoKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IGZpbmRUZXh0
UmFuZ2UoVmVjdG9yPFN0cmluZz4gY29uc3QmIHNlYXJjaFN0cmluZ3MsIFJlZlB0cjxSYW5nZT4g
Y29uc3QmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbikgY29uc3Q7Ci1w
dWJsaWM6Ci0gICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IGZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2li
aWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0
b3I8U2ltcGxlUmFuZ2U+IGZpbmRUZXh0UmFuZ2VzKGNvbnN0IEFjY2Vzc2liaWxpdHlTZWFyY2hU
ZXh0Q3JpdGVyaWEmKSBjb25zdCBvdmVycmlkZTsKICAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3Jt
VGV4dE9wZXJhdGlvbihBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiBjb25zdCYpIG92ZXJyaWRl
OwogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JzZXJ2YWJsZU9iamVjdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KQEAgLTUyMiw3ICs1MTYsNyBAQCBwdWJsaWM6CiAg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAgICAgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAKLSAgICBSZWZQdHI8UmFu
Z2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBlbGVtZW50UmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGF0aWMgYm9vbCByZXBs
YWNlZE5vZGVOZWVkc0NoYXJhY3RlcihOb2RlKiByZXBsYWNlZE5vZGUpOwogCiAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3Zl
cnJpZGU7CkBAIC01MzYsMTIgKzUzMCwxMiBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUGxhaW5U
ZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0
YXRpYyBTdHJpbmcgc3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmKTsKLSAgICBTdHJpbmcgc3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN0cmluZ0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIEludFJlY3QoKTsgfQotICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRy
PFJhbmdlPikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgSW50UmVj
dCBib3VuZHNGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIEludFJlY3QoKTsgfQogICAgIGludCBsZW5ndGhGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYp
IGNvbnN0IG92ZXJyaWRlIHsgfQogCkBAIC03NDYsNyArNzQwLDcgQEAgcHVibGljOgogICAgIGNv
bnN0IEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3KiBhbmNlc3RvckFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3KGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0IG92ZXJyaWRlOwogICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHdlYkFyZWFPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9
CiAKLSAgICB2b2lkIGNsZWFySXNJZ25vcmVkRnJvbVBhcmVudERhdGEoKSBvdmVycmlkZSB7IG1f
aXNJZ25vcmVkRnJvbVBhcmVudERhdGEgPSBBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkRnJvbVBhcmVu
dERhdGEoKTsgfQorICAgIHZvaWQgY2xlYXJJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSgpIG92ZXJy
aWRlIHsgbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YSA9IHsgfTsgfQogICAgIHZvaWQgc2V0SXNJ
Z25vcmVkRnJvbVBhcmVudERhdGFGb3JDaGlsZChBWENvcmVPYmplY3QqKSBvdmVycmlkZTsKIAog
ICAgIHVpbnQ2NF90IHNlc3Npb25JRCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNzU2LDIxICs3NTAs
MTIgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCgpID0g
ZGVmYXVsdDsKKworICAgIC8vIEZJWE1FOiBNYWtlIG1vcmUgb2YgdGhlc2UgbWVtYmVyIGZ1bmN0
aW9ucyBwcml2YXRlLgorCiAgICAgdm9pZCBkZXRhY2hSZW1vdGVQYXJ0cyhBY2Nlc3NpYmlsaXR5
RGV0YWNobWVudFR5cGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGV0YWNoUGxhdGZvcm1XcmFwcGVy
KEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSkgb3ZlcnJpZGU7CiAKLSAgICBBWElEIG1faWQg
eyAwIH07Ci0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG1fY2hpbGRyZW47Ci0gICAg
bXV0YWJsZSBib29sIG1faGF2ZUNoaWxkcmVuIHsgZmFsc2UgfTsKLSAgICBBY2Nlc3NpYmlsaXR5
Um9sZSBtX3JvbGUgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93biB9OwotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3RJbmNsdXNpb24gbV9sYXN0S25vd25Jc0lnbm9yZWRWYWx1ZSB7IEFjY2Vzc2li
aWxpdHlPYmplY3RJbmNsdXNpb246OkRlZmF1bHRCZWhhdmlvciB9OwotICAgIEFjY2Vzc2liaWxp
dHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSBtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhIHsgfTsK
LSAgICBib29sIG1fY2hpbGRyZW5EaXJ0eSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3N1YnRyZWVE
aXJ0eSB7IGZhbHNlIH07Ci0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkK
LSAgICBib29sIG1faXNvbGF0ZWRUcmVlTm9kZUluaXRpYWxpemVkIHsgZmFsc2UgfTsKLSNlbmRp
ZgotCiAgICAgdm9pZCBzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YShBY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkRnJvbVBhcmVudERhdGEmIGRhdGEpIG92ZXJyaWRlIHsgbV9pc0lnbm9yZWRGcm9tUGFy
ZW50RGF0YSA9IGRhdGE7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlQWNjZXNzaWJpbGl0
eUlzSWdub3JlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTc5MiwxMiArNzc3LDI4IEBA
IHByb3RlY3RlZDoKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJhZGlvR3JvdXBBbmNlc3Rv
cigpIGNvbnN0OwogCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCiAgICAg
Ym9vbCBhbGxvd3NUZXh0UmFuZ2VzKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgZ2V0TGVuZ3RoRm9y
VGV4dFJhbmdlKCkgY29uc3Q7Ci0jZWxzZQotICAgIGJvb2wgYWxsb3dzVGV4dFJhbmdlcygpIGNv
bnN0IHsgcmV0dXJuIGlzVGV4dENvbnRyb2woKTsgfQotICAgIHVuc2lnbmVkIGdldExlbmd0aEZv
clRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHRleHQoKS5sZW5ndGgoKTsgfQorCitwcml2YXRl
OgorICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJ
bkRpcmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rp
b24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGZp
bmRUZXh0UmFuZ2UoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaFN0cmluZ3MsIGNvbnN0IFNp
bXBsZVJhbmdlJiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24pIGNvbnN0
OworCisgICAgQVhJRCBtX2lkIHsgMCB9OworcHJvdGVjdGVkOiAvLyBGSVhNRTogTWFrZSB0aGUg
ZGF0YSBtZW1iZXJzIHByaXZhdGUuCisgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIG1f
Y2hpbGRyZW47CisgICAgbXV0YWJsZSBib29sIG1faGF2ZUNoaWxkcmVuIHsgZmFsc2UgfTsKKyAg
ICBBY2Nlc3NpYmlsaXR5Um9sZSBtX3JvbGUgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93biB9
OworcHJpdmF0ZToKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIG1fbGFzdEtub3du
SXNJZ25vcmVkVmFsdWUgeyBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVo
YXZpb3IgfTsKK3Byb3RlY3RlZDogLy8gRklYTUU6IE1ha2UgdGhlIGRhdGEgbWVtYmVycyBwcml2
YXRlLgorICAgIEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSBtX2lzSWdub3Jl
ZEZyb21QYXJlbnREYXRhOworICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fc3VidHJlZURpcnR5IHsgZmFsc2UgfTsKK3ByaXZhdGU6CisjaWYgRU5BQkxFKEFD
Q0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKKyAgICBib29sIG1faXNvbGF0ZWRUcmVlTm9kZUlu
aXRpYWxpemVkIHsgZmFsc2UgfTsKICNlbmRpZgogfTsKIApAQCAtODA5LDYgKzgxMCwxMSBAQCBp
bmxpbmUgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVCYWNraW5nU3RvcmUoKSB7IH0K
IGlubGluZSB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihB
Y2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpIHsgfQogI2VuZGlmCiAKKyNpZiAhKEVOQUJMRShB
Q0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKSkKK2lubGluZSBib29sIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmFsbG93c1RleHRSYW5nZXMoKSBjb25zdCB7IHJldHVybiBpc1RleHRDb250cm9sKCk7IH0K
K2lubGluZSB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRMZW5ndGhGb3JUZXh0UmFu
Z2UoKSBjb25zdCB7IHJldHVybiB0ZXh0KCkubGVuZ3RoKCk7IH0KKyNlbmRpZgorCiBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBmaXJzdEFjY2Vzc2libGVPYmplY3RGcm9tTm9kZShjb25zdCBOb2RlKiwg
Y29uc3QgV1RGOjpGdW5jdGlvbjxib29sKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmKT4mIGlz
QWNjZXNzaWJsZSk7CiAKIG5hbWVzcGFjZSBBY2Nlc3NpYmlsaXR5IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJm
YWNlLmgKaW5kZXggMDVkYjg2NDkzODE5ZGM1Yzg2ZmRlYmMxNWJjZmVkYjBjNGU3ZDBjOC4uZjdh
NmU2OGFhYjljYWMyMTIzZDUwZTZlZTM1MjhlYjUzNTA3MzFlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJm
YWNlLmgKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorLy8gRklYTUU6IFNo
b3VsZCByZW5hbWUgdGhpcyBmaWxlIEFYQ29yZU9iamVjdC5oLgorCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgog
I2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlZp
c2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00Miw2
ICs0Miw3IEBACiAjaWYgUExBVEZPUk0oQ09DT0EpCiBPQkpDX0NMQVNTIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyOwogdHlwZWRlZiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcjsKK3R5cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFu
Z2U7CiAjZWxpZiBVU0UoQVRLKQogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGUgV2Vi
S2l0QWNjZXNzaWJsZTsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlIEFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyOwpAQCAtNTUsMjQgKzU2LDI1IEBAIGNsYXNzIFRleHRTdHJlYW07
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTm9kZTsKLWNsYXNzIEVsZW1lbnQ7Ci1j
bGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBRdWFsaWZpZWROYW1lOwotY2xhc3MgUGF0aDsKLWNs
YXNzIFdpZGdldDsKLWNsYXNzIFBhZ2U7CitjbGFzcyBBWENvcmVPYmplY3Q7CitjbGFzcyBBWE9i
amVjdENhY2hlOworY2xhc3MgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc7CiBjbGFzcyBEb2N1bWVu
dDsKK2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKK2NsYXNz
IE5vZGU7CitjbGFzcyBQYWdlOworY2xhc3MgUGF0aDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7Citj
bGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBTY3JvbGxWaWV3OwotY2xhc3MgQVhPYmplY3RDYWNo
ZTsKLWNsYXNzIEFYQ29yZU9iamVjdDsKLWNsYXNzIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Owor
Y2xhc3MgV2lkZ2V0OworCiBzdHJ1Y3QgQWNjZXNzaWJpbGl0eVRleHQ7CiBzdHJ1Y3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnM7CiAKLXR5cGVkZWYgc2l6ZV90IEFYSUQ7Cit1c2luZyBBWElE
ID0gc2l6ZV90OwogZXh0ZXJuIGNvbnN0IEFYSUQgSW52YWxpZEFYSUQ7CiAKIGVudW0gY2xhc3Mg
QWNjZXNzaWJpbGl0eVJvbGUgewpAQCAtMzcxLDcgKzM3Myw3IEBAIGVudW0gY2xhc3MgQWNjZXNz
aWJpbGl0eVRleHRPcGVyYXRpb25UeXBlIHsKIH07CiAKIHN0cnVjdCBBY2Nlc3NpYmlsaXR5VGV4
dE9wZXJhdGlvbiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHRleHRSYW5nZXM7IC8vIHRl
eHQgb24gd2hpY2ggcGVyZm9ybSB0aGUgb3BlcmF0aW9uLgorICAgIFZlY3RvcjxTaW1wbGVSYW5n
ZT4gdGV4dFJhbmdlczsgLy8gdGV4dCBvbiB3aGljaCBwZXJmb3JtIHRoZSBvcGVyYXRpb24uCiAg
ICAgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25UeXBlIHR5cGU7CiAgICAgU3RyaW5nIHJlcGxh
Y2VtZW50VGV4dDsgLy8gRm9yIHR5cGUgPSByZXBsYWNlLgogCkBAIC00MDQsMTAgKzQwNiw3IEBA
IHN0cnVjdCBBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUgewogICAgIHsgfQogfTsK
IAotI2lmIFBMQVRGT1JNKENPQ09BKQotdHlwZWRlZiBzdHJ1Y3QgX05TUmFuZ2UgTlNSYW5nZTsK
LSNlbmRpZgotCisvLyBGSVhNRTogTWVyZ2UgdGhpcyB3aXRoIENoYXJhY3RlclJhbmdlIChieSBk
ZWxldGluZyB0aGlzIGFuZCB1c2luZyBDaGFyYWN0ZXJSYW5nZSBpbnN0ZWFkKS4KIHN0cnVjdCBQ
bGFpblRleHRSYW5nZSB7CiAgICAgdW5zaWduZWQgc3RhcnQgeyAwIH07CiAgICAgdW5zaWduZWQg
bGVuZ3RoIHsgMCB9OwpAQCAtNjYzLDcgKzY2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaGFzQm9sZEZvbnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc0l0YWxpY0Zv
bnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc01pc3NwZWxsaW5nKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPFJhbmdlPiBnZXRNaXNzcGVsbGluZ1JhbmdlKFJlZlB0
cjxSYW5nZT4gY29uc3QmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlzc3BlbGxpbmdSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24p
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhaW5UZXh0KCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBoYXNTYW1lRm9udChjb25zdCBBWENvcmVPYmplY3QmKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1NhbWVGb250Q29sb3IoY29uc3QgQVhDb3JlT2JqZWN0
JikgY29uc3QgPSAwOwpAQCAtNzg1LDcgKzc4NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNEZXNjZW5kYW50T2ZSb2xlKEFjY2Vzc2liaWxpdHlSb2xlKSBjb25zdCA9IDA7CiAKICAg
ICAvLyBUZXh0IHNlbGVjdGlvbgotICAgIHZpcnR1YWwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IGZp
bmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8U2ltcGxlUmFuZ2U+IGZpbmRUZXh0UmFuZ2VzKGNv
bnN0IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEmKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtVGV4dE9wZXJhdGlvbihBY2Nlc3NpYmlsaXR5VGV4
dE9wZXJhdGlvbiBjb25zdCYpID0gMDsKIAogICAgIHZpcnR1YWwgQVhDb3JlT2JqZWN0KiBvYnNl
cnZhYmxlT2JqZWN0KCkgY29uc3QgPSAwOwpAQCAtOTU0LDcgKzk1Myw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRp
b25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxS
YW5nZT4gZWxlbWVudFJhbmdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHBvc2l0aW9uT2ZMZWZ0V29yZChjb25z
dCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRp
b25SYW5nZSBwb3NpdGlvbk9mUmlnaHRXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0
ID0gMDsKQEAgLTk2NiwxMSArOTY1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSBsaW5l
UmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCA9IDA7CiAKLSAg
ICB2aXJ0dWFsIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFp
blRleHRSYW5nZSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3QgPSAw
OwogCi0gICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPikgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZHNGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBsZW5ndGhGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRp
b25SYW5nZSYpIGNvbnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNTBmMWI3ODE4
NTViMTg5MTJkYjhiNTdmZGZiNzJlZTgzYTM3MjJjYi4uMWVmYzA4MDI4MWYxZDA2MDQ0NGJiNzkx
Mjc3YjZiMjc0ZWVkOWRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC05MTMsMTUgKzkxMywx
MSBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsaW5rQ2xpY2tQb2ludCgp
CiAgICAgIG1heSBub3QgYmVsb25nIHRvIHRoZSBsaW5rIGVsZW1lbnQgYW5kIHRodXMgbWF5IG5v
dCBhY3RpdmF0ZSB0aGUgbGluay4KICAgICAgSGVuY2UsIHJldHVybiB0aGUgbWlkZGxlIHBvaW50
IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmsgaWYgZXhpc3RzLgogICAgICAqLwot
ICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWxlbWVudFJhbmdlKCkpIHsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwotICAgICAg
ICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgIXJhbmdlLT5jb250YWlucyhlbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKTsKLQotICAgICAgICBS
ZWZQdHI8UmFuZ2U+IGNoYXJSYW5nZSA9IG1ha2VSYW5nZShzdGFydCwgZW5kKTsKLSAgICAgICAg
SW50UmVjdCByZWN0ID0gYm91bmRzRm9yUmFuZ2UoY2hhclJhbmdlKTsKLSAgICAgICAgcmV0dXJu
IHsgcmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAyLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkg
LyAyIH07CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2UoKSkgeworICAgICAgICBh
dXRvIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uIHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJhbmdlLT5zdGFydCkgfTsKKyAgICAgICAgYXV0byBlbmQgPSBuZXh0VmlzaWJsZVBvc2l0aW9u
KHN0YXJ0KTsKKyAgICAgICAgaWYgKCFlbmQuaXNOdWxsKCkgJiYgY3JlYXRlTGl2ZVJhbmdlKHJh
bmdlKS0+Y29udGFpbnMoZW5kKSkKKyAgICAgICAgICAgIHJldHVybiB7IGJvdW5kc0ZvclJhbmdl
KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfSku
Y2VudGVyKCkgfTsKICAgICB9CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNr
UG9pbnQoKTsKIH0KQEAgLTk0MSw4ICs5MzcsNyBAQCBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpjbGlja1BvaW50KCkKICAgICAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc1Nl
bGVjdGlvbiA9IHNlbGVjdGlvbigpOwogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0g
VmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzU2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCB2aXNTZWxl
Y3Rpb24udmlzaWJsZUVuZCgpKTsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IGJvdW5kc0ZvclZpc2li
bGVQb3NpdGlvblJhbmdlKHJhbmdlKTsKLSAgICByZXR1cm4geyBib3VuZHMueCgpICsgKGJvdW5k
cy53aWR0aCgpIC8gMiksIGJvdW5kcy55KCkgKyAoYm91bmRzLmhlaWdodCgpIC8gMikgfTsKKyAg
ICByZXR1cm4gYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2UpLmNlbnRlcigpOwog
fQogICAgIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
aW50ZXJuYWxMaW5rRWxlbWVudCgpIGNvbnN0CkBAIC0xNjYxLDE3ICsxNjU2LDE1IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoY29uc3QgUGxh
aW5UZXh0UmFuZ2UmIHJhbmdlCiAgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiB0
ZXh0Q29udHJvbCA9IGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sPigqbV9yZW5kZXJlcikudGV4
dEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgICAgICB0ZXh0Q29udHJvbC5zZXRTZWxlY3Rpb25S
YW5nZShyYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGF1dG8gbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUpOworICAgICAgICBBU1NFUlQobm9kZSgpKTsKKyAgICAgICAgYXV0byYgbm9kZSA9ICp0aGlz
LT5ub2RlKCk7CiAgICAgICAgIGF1dG8gZWxlbWVudFJhbmdlID0gdGhpcy0+ZWxlbWVudFJhbmdl
KCk7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHZpc2libGVQb3NpdGlvbkZvcklu
ZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcigqbm9kZSwgcmFuZ2Uuc3RhcnQpOwotICAgICAgICBp
ZiAoIWVsZW1lbnRSYW5nZS0+Y29udGFpbnMoc3RhcnQpKQotICAgICAgICAgICAgc3RhcnQgPSBW
aXNpYmxlUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNp
bmdDaGFyYWN0ZXJJdGVyYXRvcigqbm9kZSwgcmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOwot
ICAgICAgICBpZiAoIWVsZW1lbnRSYW5nZS0+Y29udGFpbnMoZW5kKSkKLSAgICAgICAgICAgIGVu
ZCA9IFZpc2libGVQb3NpdGlvbihlbGVtZW50UmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAg
ICAKKyAgICAgICAgYXV0byBzdGFydCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFy
YWN0ZXJJdGVyYXRvcihub2RlLCByYW5nZS5zdGFydCk7CisgICAgICAgIGlmICghY3JlYXRlTGl2
ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKHN0YXJ0KSkKKyAgICAgICAgICAgIHN0YXJ0
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnRSYW5nZS0+c3RhcnQpOworICAg
ICAgICBhdXRvIGVuZCA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVy
YXRvcihub2RlLCByYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7CisgICAgICAgIGlmICghY3Jl
YXRlTGl2ZVJhbmdlKGVsZW1lbnRSYW5nZSktPmNvbnRhaW5zKGVuZCkpCisgICAgICAgICAgICBl
bmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CiAg
ICAgICAgIG1fcmVuZGVyZXItPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oc3RhcnQsIGVuZCksIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0
aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CiAgICAgfQogICAgIApAQCAtMjE2NywxNyArMjE2
MCwxNCBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclZpc2li
bGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQbwogICAgIHJldHVybiBib3VuZHNGb3JSZWN0
cyhyZWN0MSwgcmVjdDIsICptYWtlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCkpOwogfQog
Ci1JbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclJhbmdlKGNvbnN0
IFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CitJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kc0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsK
LSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIAogICAgIEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gdGhpcy0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgCi0gICAgQ2hhcmFjdGVyT2Zmc2V0
IHN0YXJ0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSgqcmFuZ2Us
IHRydWUpOwotICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJh
Y3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgZmFsc2UpOworICAgIENoYXJhY3Rlck9mZnNldCBz
dGFydCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIHRy
dWUpOworICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJhY3Rl
ck9mZnNldEZvclJhbmdlKHJhbmdlLCBmYWxzZSk7CiAgICAgCiAgICAgTGF5b3V0UmVjdCByZWN0
MSA9IGNhY2hlLT5hYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KHN0YXJ0KTsK
ICAgICBMYXlvdXRSZWN0IHJlY3QyID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFy
YWN0ZXJPZmZzZXQoZW5kKTsKQEAgLTIxOTUsNyArMjE4NSw3IEBAIEludFJlY3QgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiByYW5n
ZSkgY29uCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGJvdW5kc0ZvclJlY3Rz
KHJlY3QxLCByZWN0MiwgKnJhbmdlKTsKKyAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEs
IHJlY3QyLCByYW5nZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNW
aXNpYmxlUG9zaXRpb25SYW5nZUluRGlmZmVyZW50RG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UmIHJhbmdlKSBjb25zdApAQCAtMjIzMCwxMCArMjIyMCwxMSBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29u
c3QgVmlzaWJsZVBvcwogICAgIGlmIChyYW5nZS5zdGFydCA9PSByYW5nZS5lbmQpIHsKICAgICAg
ICAgc2V0VGV4dFNlbGVjdGlvbkludGVudChheE9iamVjdENhY2hlKCksIEFYVGV4dFN0YXRlQ2hh
bmdlVHlwZVNlbGVjdGlvbk1vdmUpOwogCi0gICAgICAgIGF1dG8gZWxlbWVudFJhbmdlID0gdGhp
cy0+ZWxlbWVudFJhbmdlKCk7CiAgICAgICAgIGF1dG8gc3RhcnQgPSByYW5nZS5zdGFydDsKLSAg
ICAgICAgaWYgKGVsZW1lbnRSYW5nZSAmJiAhZWxlbWVudFJhbmdlLT5jb250YWlucyhzdGFydCkp
Ci0gICAgICAgICAgICBzdGFydCA9IFZpc2libGVQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSk7CisgICAgICAgIGlmIChhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1l
bnRSYW5nZSgpKSB7CisgICAgICAgICAgICBpZiAoIWNyZWF0ZUxpdmVSYW5nZShlbGVtZW50UmFu
Z2UpLT5jb250YWlucyhzdGFydCkpCisgICAgICAgICAgICAgICAgc3RhcnQgPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydCk7CisgICAgICAgIH0KIAogICAg
ICAgICBtX3JlbmRlcmVyLT5mcmFtZSgpLnNlbGVjdGlvbigpLm1vdmVUbyhzdGFydCwgVXNlclRy
aWdnZXJlZCk7CiAgICAgfSBlbHNlIHsKQEAgLTI0MTksMTEgKzI0MTAsMTQgQEAgSW50UmVjdCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UoY29uc3QgUGxhaW5U
ZXh0UmFuZ2UmIHJhbmcKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCi1JbnRSZWN0IEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zm
c2V0KGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKK0ludFJlY3QgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQo
Y29uc3QgUGxhaW5UZXh0UmFuZ2UmIGNoYXJhY3RlclJhbmdlKSBjb25zdAogewotICAgIGlmIChh
bGxvd3NUZXh0UmFuZ2VzKCkpCi0gICAgICAgIHJldHVybiBib3VuZHNGb3JSYW5nZShyYW5nZUZv
clBsYWluVGV4dFJhbmdlKHJhbmdlKSk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAo
IWFsbG93c1RleHRSYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHJhbmdl
ID0gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjaGFyYWN0ZXJSYW5nZSk7CisgICAgaWYgKCFyYW5n
ZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gYm91bmRzRm9yUmFuZ2UoKnJhbmdl
KTsKIH0KIAogQVhDb3JlT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3Np
YmlsaXR5SW1hZ2VNYXBIaXRUZXN0KEhUTUxBcmVhRWxlbWVudCogYXJlYSwgY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCA5OTIzNTc2ZWEzMWEwNTdkYzUz
ZDkzYTMzZjdiMzY2N2Q1YWViZjE2Li5jZDBiYTIzZWZhOWJjYjliYzMwZDE4OWY2YTY1MmE3MTM4
ZTRhOTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtMTY2LDcgKzE2Niw3IEBAIHB1YmxpYzoKICAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGlu
ZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxl
UG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgSW50UmVjdCBib3VuZHNGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wg
aXNWaXNpYmxlUG9zaXRpb25SYW5nZUluRGlmZmVyZW50RG9jdW1lbnQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmKSBjb25zdDsKICAgICBib29sIGhhc1BvcHVwKCkgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggZDVlMmFlMGIwNWNmYzdl
NzczYzRiY2EzOTM3ODQ0MWYyNjkzMTcwNC4uZjQ5OWY5OTc5YTU2NDlhNjliOGEyNTI4MDA4MGFk
NTM4NjMyNTM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNDMs
NiArNDMsNyBAQAogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0
Qm94LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgog
I2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KaW5kZXggM2JhM2ZhM2I3NWNlNDJhMDU1ODUzYjY4YjE2MGE3OGI1ODY3ZTg5My4u
MjM2ZDk3NTM5YzM5Y2U1NjMxN2RmNmQzZjkxZDNiNTdjZThiYTU5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTIxMjksMTIgKzIxMjksMTAgQEAgLSAoTlNT
dHJpbmcgKilzdHJpbmdGb3JUZXh0TWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMKIHsKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJr
ZXJzOm1hcmtlcnNdOworICAgIGF1dG8gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJz
Om1hcmtlcnNdOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0g
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZShyYW5nZSk7Cisg
ICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZSgqcmFuZ2UpOwog
fQogCiBzdGF0aWMgaW50IGJsb2NrcXVvdGVMZXZlbChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQpA
QCAtMjQxMSw5ICsyNDA5LDcgQEAgLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZQogewogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5lbGVtZW50UmFuZ2UoKTsKLSAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpy
YW5nZV07CisgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6Y3JlYXRlTGl2ZVJh
bmdlKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmFuZ2UoKSkuZ2V0KCldOwogfQogCiAv
LyBBIG1ldGhvZCB0byBnZXQgdGhlIG5vcm1hbGl6ZWQgdGV4dCBjdXJzb3IgcmFuZ2Ugb2YgYW4g
ZWxlbWVudC4gVXNlZCBpbiBEdW1wUmVuZGVyVHJlZS4KQEAgLTI1NTEsOCArMjU0NywxMCBAQCAt
IChOU1N0cmluZyAqKXN0cmluZ0ZvclJhbmdlOihOU1JhbmdlKXJhbmdlCiB7CiAgICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoW3NlbGYgX2Nv
bnZlcnRUb0RPTVJhbmdlOnJhbmdlXSk7CisgICAgYXV0byB3ZWJSYW5nZSA9IFtzZWxmIF9jb252
ZXJ0VG9ET01SYW5nZTpyYW5nZV07CisgICAgaWYgKCF3ZWJSYW5nZSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKCp3
ZWJSYW5nZSk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmdG
b3JSYW5nZTooTlNSYW5nZSlyYW5nZQpAQCAtMjY4NSwxNCArMjY4MywxMiBAQCAtIChOU0FycmF5
ICopbWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2U6KE5TQXJyYXkgKilzdGFydFRleHRNYXJrZXJS
YW5nZSBmb3J3YXJkOgogewogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2Fs
bF0pCiAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2Ug
PSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOnN0YXJ0VGV4dE1hcmtlclJhbmdlXTsKKyAgICBh
dXRvIHN0YXJ0UmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOnN0YXJ0VGV4dE1hcmtl
clJhbmdlXTsKICAgICBpZiAoIXN0YXJ0UmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
Z2V0TWlzc3BlbGxpbmdSYW5nZShzdGFydFJhbmdlLAorICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5n
ZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpzdGFydFJhbmdlLAog
ICAgICAgICBmb3J3YXJkID8gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCA6IEFj
Y2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKTsKLSAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlcnNGb3JSYW5nZTptaXNzcGVsbGluZ1JhbmdlXTsKKyAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlcnNGb3JSYW5nZTpjcmVhdGVMaXZlUmFuZ2UobWlzc3BlbGxpbmdSYW5nZSkuZ2V0
KCldOwogfQogCiAtIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW5leHRNYXJrZXJGb3JN
YXJrZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCkBAIC0yNzI0LDE1ICsy
NzIwLDEzIEBAIC0gKENHUmVjdClmcmFtZUZvclRleHRNYXJrZXJzOihOU0FycmF5ICopYXJyYXkK
IHsKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICBy
ZXR1cm4gQ0dSZWN0WmVybzsKLQogICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICBy
ZXR1cm4gQ0dSZWN0WmVybzsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VG
b3JUZXh0TWFya2VyczphcnJheV07CisgICAgYXV0byByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4
dE1hcmtlcnM6YXJyYXldOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBDR1JlY3Ra
ZXJvOwotICAgIAotICAgIGF1dG8gcmVjdCA9IEZsb2F0UmVjdChzZWxmLmF4QmFja2luZ09iamVj
dC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpKTsKKyAgICBhdXRvIHJlY3QgPSBzZWxmLmF4QmFja2lu
Z09iamVjdC0+Ym91bmRzRm9yUmFuZ2UoKnJhbmdlKTsKICAgICByZXR1cm4gW3NlbGYgY29udmVy
dFJlY3RUb1NwYWNlOnJlY3Qgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2Ny
ZWVuXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29s
YXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCBlNTZjMjlmZWRmMDUx
MzYwYWY0OGRmY2E4NDFlYWYyMzYyNTNiYzRkLi5iMGMxYjA4ZTIxMzhmNTQ3YmYxYmZlYTczOGY4
MTY4NTY1MjMyZTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcApAQCAtODk4LDcgKzg5
OCw3IEBAIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6dXBkYXRlQmFja2luZ1N0b3JlKCkKICAgICAg
ICAgdHJlZS0+YXBwbHlQZW5kaW5nQ2hhbmdlcygpOwogfQogCi1TdHJpbmcgQVhJc29sYXRlZE9i
amVjdDo6c3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKK1N0cmluZyBB
WElzb2xhdGVkT2JqZWN0OjpzdHJpbmdGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFp
blRocmVhZDxTdHJpbmc+KFsmcmFuZ2UsIHRoaXNdICgpIC0+IFN0cmluZyB7CiAgICAgICAgIGlm
IChhdXRvKiBvYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3QoKSkKQEAgLTkwNywxMiArOTA3LDEy
IEBAIFN0cmluZyBBWElzb2xhdGVkT2JqZWN0OjpzdHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+
IHJhbmdlKSBjb25zdAogICAgIH0pOwogfQogCi1WZWN0b3I8UmVmUHRyPFJhbmdlPj4gQVhJc29s
YXRlZE9iamVjdDo6ZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJp
YSBjb25zdCYgY3JpdGVyaWEpIGNvbnN0CitWZWN0b3I8U2ltcGxlUmFuZ2U+IEFYSXNvbGF0ZWRP
YmplY3Q6OmZpbmRUZXh0UmFuZ2VzKGNvbnN0IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVy
aWEmIGNyaXRlcmlhKSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFJlZlB0cjxSYW5nZT4+PihbJmNyaXRlcmlhLCB0
aGlzXSAoKSAtPiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4geworICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VmVjdG9yPFNpbXBsZVJhbmdlPj4oWyZj
cml0ZXJpYSwgdGhpc10gKCkgLT4gVmVjdG9yPFNpbXBsZVJhbmdlPiB7CiAgICAgICAgIGlmIChh
dXRvKiBvYmplY3QgPSBhc3NvY2lhdGVkQVhPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBv
YmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+PigpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0pOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmgKaW5kZXggNTk4NGEyMzYxYmZkMGQ0ZGIwMzA0OWYwYmQ5ZTk0MjE5
ODE4NDkyNC4uZGRiOGNiYmZmNTU4NWZhYWMwNDU2OWQ5ZmI3Y2FiMGVjNWQzYjQ0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuaApAQCAtNjM2LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RyaW5nQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWU6OlN0cmluZ1ZhbHVlKTsgfQogCiAgICAgLy8gUGFyYW1ldGVy
aXplZCBhdHRyaWJ1dGUgcmV0cmlldmFsLgotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBmaW5k
VGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiBmaW5kVGV4dFJhbmdlcyhjb25zdCBB
Y2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVj
dG9yPFN0cmluZz4gcGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRp
b24gY29uc3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNz
aWJpbGl0eVNlYXJjaENyaXRlcmlhKiwgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgb3Zl
cnJpZGU7CiAKQEAgLTY1NSw3ICs2NTUsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBzZWxlY3Rl
ZFRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZp
c2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQotICAgIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJh
bmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBlbGVtZW50UmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZv
clVub3JkZXJlZFBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgp
OyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJh
bmdlKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwb3NpdGlvbk9mUmlnaHRXb3JkKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKCk7IH0KQEAgLTY2NiwxMCArNjY2LDEwIEBAIHByaXZhdGU6CiAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2Ugc3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KICAg
ICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0
IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoKTsgfQogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvblJhbmdlKCk7IH0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFu
Z2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRy
OyB9Ci0gICAgU3RyaW5nIHN0cmluZ0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNv
bnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgU3RyaW5nIHN0cmluZ0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25z
dCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3Qo
KTsgfQotICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgSW50UmVjdCBib3VuZHNGb3JS
YW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3Qo
KTsgfQogICAgIGludCBsZW5ndGhGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxl
UG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yQm91bmRzKGNvbnN0IEludFJlY3QmLCBBY2Nlc3Np
YmlsaXR5VmlzaWJsZVBvc2l0aW9uRm9yQm91bmRzKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsgfQogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25G
b3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOyB9CkBAIC03MTcsNyArNzE3LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRPRE86
IEZ1bmN0aW9ucwogICAgIFN0cmluZyB0ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0
VW5kZXJFbGVtZW50TW9kZSA9IEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZSgpKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIFJlZlB0cjxSYW5nZT4gZ2V0
TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFuZ2U+IGNvbnN0JiwgQWNjZXNzaWJpbGl0eVNlYXJj
aERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgQWNj
ZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiAgICAgRmxvYXRSZWN0IGNvbnZlcnRGcmFtZVRvU3BhY2UoY29uc3QgRmxvYXRS
ZWN0JiwgQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gRmxvYXRSZWN0KCk7IH0KICAgICB2b2lkIGluY3JlbWVudCgpIG92ZXJyaWRlIHsgfQogICAg
IHZvaWQgZGVjcmVtZW50KCkgb3ZlcnJpZGUgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCmluZGV4IDgxM2M4ZGU2OTdlNmJlNDMyN2IzYzg4YjZkM2VhZGI5NjU1Mzdj
NzAuLjI2MGM0OTI4ZDAxMWZlZjlhMmJkNDg3ZTMwMTA1NWY3ZWFjOWU3MjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC02OTEsMTAgKzY5MSwxMSBAQCBzdGF0
aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25G
b3JQYXJhbWV0ZXJpemVkQXR0cgogICAgIE5TU3RyaW5nICpyZXBsYWNlbWVudFN0cmluZyA9IFtw
YXJhbWV0ZXJpemVkQXR0cmlidXRlIG9iamVjdEZvcktleTpOU0FjY2Vzc2liaWxpdHlUZXh0T3Bl
cmF0aW9uUmVwbGFjZW1lbnRTdHJpbmddOwogCiAgICAgaWYgKFttYXJrZXJSYW5nZXMgaXNLaW5k
T2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKSB7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHN0YXRp
Y19jYXN0PHNpemVfdD4obWFya2VyUmFuZ2VzLmNvdW50KTsKLSAgICAgICAgb3BlcmF0aW9uLnRl
eHRSYW5nZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7Ci0gICAgICAgIGZvciAoaWQg
bWFya2VyUmFuZ2UgOiBtYXJrZXJSYW5nZXMpCi0gICAgICAgICAgICBvcGVyYXRpb24udGV4dFJh
bmdlcy5hcHBlbmQoW29iaiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTptYXJrZXJSYW5nZV0pOwor
ICAgICAgICBvcGVyYXRpb24udGV4dFJhbmdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hcmtl
clJhbmdlcy5jb3VudCk7CisgICAgICAgIGZvciAoaWQgbWFya2VyUmFuZ2UgOiBtYXJrZXJSYW5n
ZXMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gW29iaiByYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTptYXJrZXJSYW5nZV0pCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5n
ZXMuYXBwZW5kKCpyYW5nZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoW29wZXJhdGlv
blR5cGUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgewpAQCAtMzYyMywxMSArMzYy
NCwxMCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogLy8gVGhlIENG
QXR0cmlidXRlZFN0cmluZ1R5cGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgYWNjZXNzaWJpbGl0eQogLy8gb2JqZWN0IHRoYXQgaXMgc3BlY2lmaWVkIGJ5
IHRoZSBnaXZlbiByYW5nZS4KLS0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0ZWRT
dHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQorLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopZG9B
WEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIFBsYWluVGV4
dFJhbmdlIHRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5s
ZW5ndGgpOwotICAgIFJlZlB0cjxSYW5nZT4gd2ViUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVj
dC0+cmFuZ2VGb3JQbGFpblRleHRSYW5nZSh0ZXh0UmFuZ2UpOwotICAgIHJldHVybiBbc2VsZiBk
b0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFu
Z2VGcm9tUmFuZ2U6d2ViUmFuZ2VdIHNwZWxsQ2hlY2s6WUVTXTsKKyAgICBhdXRvIHdlYlJhbmdl
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpOwor
ICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpb
c2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHdlYlJhbmdlKV0g
c3BlbGxDaGVjazpZRVNdOwogfQogCiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5n
ZSopcmFuZ2UKQEAgLTM5NjMsNyArMzk2Myw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgICAgICAgICAgaWYgKHJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJhbmdl
cywgWyZdIChhdXRvJiByYW5nZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVk
U2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOworICAgICAgICAgICAgICAgIHJl
dHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKV07CiAgICAgICAgICAgICB9KS5hdXRvcmVsZWFzZSgpOwogICAgICAgICB9KTsK
ICAgICB9CkBAIC00MDM4LDggKzQwMzgsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgICAgICAgICBpZiAoYXV0byBtaXNzcGVsbGluZ1JhbmdlID0g
YmFja2luZ09iamVjdC0+Z2V0TWlzc3BlbGxpbmdSYW5nZShjcml0ZXJpYS5maXJzdCwgY3JpdGVy
aWEuc2Vjb25kKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVJhbmdlOm1pc3NwZWxsaW5nUmFuZ2VdOworICAgICAgICAgICAgaWYgKGF1
dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGJhY2tpbmdPYmplY3QtPm1pc3NwZWxsaW5nUmFuZ2UoKmNy
aXRlcmlhLmZpcnN0LCBjcml0ZXJpYS5zZWNvbmQpKQorICAgICAgICAgICAgICAgIHJldHVybiBb
cHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKCpt
aXNzcGVsbGluZ1JhbmdlKV07CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICB9KTsK
ICAgICB9CkBAIC00MDc5LDggKzQwNzksNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1h
cmtlclJhbmdlRm9yVUlFbGVtZW50Il0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6
OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ1aUVsZW1lbnQs
IHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewot
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHVpRWxlbWVudC5nZXQoKS0+ZWxlbWVu
dFJhbmdlKCk7Ci0gICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJh
bmdlRnJvbVJhbmdlOnJhbmdlXTsKKyAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHVpRWxlbWVudC5nZXQoKS0+
ZWxlbWVudFJhbmdlKCkpXTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC00MTExLDkgKzQxMTAs
OSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsK
ICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVh
ZDxTdHJpbmc+KFsmdGV4dE1hcmtlclJhbmdlLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNl
bGYpXSAoKSAtPiBTdHJpbmcgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtw
cm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Cisg
ICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2Vy
UmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3Qg
PSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKLSAgICAgICAgICAgIHJldHVy
biBiYWNraW5nT2JqZWN0ID8gYmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpIDog
U3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm4gKHJhbmdlICYmIGJhY2tpbmdPYmplY3QpID8g
YmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoKnJhbmdlKSA6IFN0cmluZygpOwogICAgICAg
ICB9KTsKICAgICB9CiAKQEAgLTQxNDEsOSArNDE0MCwxMCBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90
ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgICAgIGlmICghYmFja2lu
Z09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLQotICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgICAgICBhdXRvIGJvdW5kcyA9IEZsb2F0
UmVjdChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOworICAgICAgICAgICAg
YXV0byByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRN
YXJrZXJSYW5nZV07CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBDR1JlY3RaZXJvOworICAgICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QoYmFj
a2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UoKnJhbmdlKSk7CiAgICAgICAgICAgICByZXR1cm4g
W3Byb3RlY3RlZFNlbGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3NpYmls
aXR5Q29udmVyc2lvblNwYWNlOjpTY3JlZW5dOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJu
IFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CkBAIC00MTU0LDE4ICs0MTU0LDE1IEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0byogYmFj
a2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAg
ICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBDR1JlY3Ra
ZXJvOwotCiAgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IENHUmVjdFplcm87Ci0KICAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hl
LT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiwgYmFja2luZ09iamVjdCk7
CiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNl
dEZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCwgYmFja2luZ09iamVjdCk7Ci0g
ICAgICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotCiAgICAgICAgICAgICBhdXRvIHJhbmdlID0gY2Fj
aGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKLSAgICAg
ICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJh
bmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkpKTsKKyAgICAgICAgICAgIGlmICghcmFuZ2UpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgICAgICAgICBhdXRvIGJvdW5k
cyA9IEZsb2F0UmVjdChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZSgqcmFuZ2UpKTsKICAg
ICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRz
IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiAgICAgICAgIH0p
OwogICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKQEAgLTQxODEs
MTggKzQxNzgsMTUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3Q7CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCiAgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQg
c3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24sIGJh
Y2tpbmdPYmplY3QpOwotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5j
aGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCwgYmFj
a2luZ09iamVjdCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVs
bCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQorICAgICAgICAgICAgYXV0
byBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiwg
YmFja2luZ09iamVjdCk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJP
ZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCwgYmFja2luZ09iamVj
dCk7CiAgICAgICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hh
cmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIHJldHVybiBiYWNraW5nT2Jq
ZWN0LT5zdHJpbmdGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgICAg
IGlmICghcmFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIHJl
dHVybiBiYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZSgqcmFuZ2UpOwogICAgICAgICB9KTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCA2Nzg1
NDcyMjAzYjgxZTFhMWQ1Zjk2MTE1MDE4OTE4ZGViMWQ3MjY1Li4zZjM3MjMyYzdlOTViYTIwMDUz
OTExMDQ5YWU4MDQwMjRmNjE2Nzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCkBAIC05ODIsMTAgKzk4Miw5IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlk
YXRlSWZOZWVkZWQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhCiAgICAg
TGF5b3V0UmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKGNhbmRpZGF0ZS5yZWN0
LCBjbG9zZXN0LnJlY3QpOwogICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkgJiYg
IWFyZUVsZW1lbnRzT25TYW1lTGluZShjbG9zZXN0LCBjYW5kaWRhdGUpKSB7CiAgICAgICAgIC8v
IElmIDIgbm9kZXMgYXJlIGludGVyc2VjdGluZywgZG8gaGl0IHRlc3QgdG8gZmluZCB3aGljaCBu
b2RlIGluIG9uIHRvcC4KLSAgICAgICAgTGF5b3V0VW5pdCB4ID0gaW50ZXJzZWN0aW9uUmVjdC54
KCkgKyBpbnRlcnNlY3Rpb25SZWN0LndpZHRoKCkgLyAyOwotICAgICAgICBMYXlvdXRVbml0IHkg
PSBpbnRlcnNlY3Rpb25SZWN0LnkoKSArIGludGVyc2VjdGlvblJlY3QuaGVpZ2h0KCkgLyAyOwor
ICAgICAgICBhdXRvIGNlbnRlciA9IGZsb29yZWRJbnRQb2ludChpbnRlcnNlY3Rpb25SZWN0LmNl
bnRlcigpKTsgLy8gRklYTUU6IFdvdWxkIHJvdW5kZWRJbnRQb2ludCBiZSBiZXR0ZXI/CiAgICAg
ICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRU
eXBlIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBI
aXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcsIEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1Vz
ZXJBZ2VudFNoYWRvd0NvbnRlbnQsIEhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJhbWVDb250
ZW50IH07Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gY2FuZGlkYXRlLnZpc2libGVO
b2RlLT5kb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVz
dFJlc3VsdEF0UG9pbnQoSW50UG9pbnQoeCwgeSksIGhpdFR5cGUpOworICAgICAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdCA9IGNhbmRpZGF0ZS52aXNpYmxlTm9kZS0+ZG9jdW1lbnQoKS5wYWdlKCkt
Pm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KGNlbnRlciwg
aGl0VHlwZSk7CiAgICAgICAgIGlmIChjYW5kaWRhdGUudmlzaWJsZU5vZGUtPmNvbnRhaW5zKHJl
c3VsdC5pbm5lck5vZGUoKSkpIHsKICAgICAgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CiAg
ICAgICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404056</attachid>
            <date>2020-07-11 09:47:33 -0700</date>
            <delta_ts>2020-07-11 10:27:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214215-20200711094732.patch</filename>
            <type>text/plain</type>
            <size>65444</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE1ODkyZWUzZjJkMjFl
NzY2NzgxYmFiNzBlZTg0N2ExNWRiMGE3OC4uYWZmZjBiMzMzZjQ3NjcxNzM2ZGZjOTBiZjA1Y2Fi
OTc0NTk5ODRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA3LTEwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMg
ZnJvbSBBY2Nlc3NpYmlsaXR5T2JqZWN0LmgsIEFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2Uu
aCwgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oLCBBWElzb2xhdGVkT2JqZWN0LmgKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDIxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gdXNlIHRoZSBJ
bnRQb2ludCBhbmQgTGF5b3V0UG9pbnQgY2VudGVyKCkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygcm9s
bGluZyBvdXIgb3duLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxs
aW5nUmFuZ2UgY29uc3QpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuIEFsc28KKyAgICAgICAgcmVuYW1l
ZCBmcm9tIGdldE1pc3NwZWxsaW5nUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNsb3Nl
c3RUb1JhbmdlKTogVGFrZSBhbmQgcmV0dXJuIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJl
Y3Rpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2UgY29uc3QpOiBUYWtlIGFu
ZCByZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpmaW5kVGV4dFJhbmdlcyBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6cGVyZm9ybVRleHRPcGVyYXRpb24pOiBVc2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KTogVXNl
IGNlbnRlcigpLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VG
b3JQbGFpblRleHRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdlIGNvbnN0KTogVGFrZSBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmlu
Z0ZvclZpc2libGVQb3NpdGlvblJhbmdlKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJl
cGxhY2VUZXh0SW5SYW5nZSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oOiBUYWtlIGFuZCBy
ZXR1cm4gU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6bGlua0NsaWNrUG9pbnQpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjbGlja1BvaW50KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRS
YW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Ym91bmRzRm9yUmFuZ2UgY29uc3QpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRp
b25SYW5nZSBjb25zdCk6CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hh
cmFjdGVyT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOiBVcGRhdGUgZm9yIGFi
b3ZlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwOiBJbmNsdWRlIFJhbmdlLmguCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3RyaW5nRm9yVGV4dE1hcmtlcnM6XSk6IFVzZSBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4
dE1hcmtlclJhbmdlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBzdHJpbmdGb3JSYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIG1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlOmZvcndhcmQ6XSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBmcmFtZUZv
clRleHRNYXJrZXJzOl0pOiBEaXR0by4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRl
ZE9iamVjdDo6c3RyaW5nRm9yUmFuZ2UgY29uc3QpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZmluZFRleHRSYW5nZXMgY29uc3QpOiBSZXR1
cm4gU2ltcGxlUmFuZ2UuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChh
Y2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUpOiBVc2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRv
QVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFy
YW1ldGVyOl0pOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQpOiBVc2UgY2Vu
dGVyKCkuCisKIDIwMjAtMDctMTEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtCRkNdW01pbi1NYXggd2lkdGhdIEFkZCBzdXBwb3J0IGZvciBmbG9hdCBh
dm9pZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKaW5kZXggNTdhMDE5ZGZmZjFiODYwYzczODA3MDIwMzE3Mjg1YTEyMTky
MDQwZC4uOTQxZmZiMjkxNzM2ZmE5ODVhNmEzNTdhMGZmOGUwNGYwYTA1MWZjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CkBAIC0yNzQsMjQgKzI3NCwyNCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3Nw
ZWxsaW5nKCkgY29uc3QKICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwogfQogCi1SZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdl
PiBjb25zdCYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24gZGlyZWN0aW9uKSBj
b25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1pc3NwZWxs
aW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGly
ZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKICAgICBhdXRvIG5vZGUgPSB0aGlzLT5ub2RlKCk7
CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICghdW5pZmllZFRleHRDaGVja2VyRW5hYmxl
ZChmcmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CiAKICAgICBU
ZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIgPSBlZGl0b3IudGV4dENoZWNrZXIoKTsKICAg
ICBpZiAoIXRleHRDaGVja2VyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IG1pc3Nw
ZWxsaW5nczsKICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqdGV4dENoZWNrZXIsIHN0cmluZ1Zh
bHVlKCksIFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBtaXNzcGVsbGluZ3MsIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CkBAIC0zMDYsOCArMzA2LDggQEAgUmVmUHRyPFJhbmdl
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRNaXNzcGVsbGluZ1JhbmdlKFJlZlB0cjxSYW5nZT4g
Y29uc3QmIHN0YXIKICAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKnN0YXJ0KS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1pc3NwZWxsaW5nUmFuZ2U7
CisgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpFTkRfVE9fRU5ELCBjcmVhdGVMaXZlUmFuZ2Uoc3RhcnQpKS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1pc3Nw
ZWxsaW5nUmFuZ2UgfTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IEFj
Y2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKSB7CiAgICAgICAgIGZvciAoYXV0
byByaXQgPSBtaXNzcGVsbGluZ3MucmJlZ2luKCk7IHJpdCAhPSBtaXNzcGVsbGluZ3MucmVuZCgp
OyArK3JpdCkgewpAQCAtMzE1LDEyICszMTUsMTIgQEAgUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpnZXRNaXNzcGVsbGluZ1JhbmdlKFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXIK
ICAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpzdGFydCkucmVsZWFzZVJldHVyblZhbHVl
KCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBtaXNzcGVsbGluZ1JhbmdlOworICAgICAg
ICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6
U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShzdGFydCkpLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWlzc3BlbGxp
bmdSYW5nZSB9OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6
YmxvY2txdW90ZUxldmVsKCkgY29uc3QKQEAgLTU2Miw2NyArNTYyLDYzIEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3Jp
dGVyaWEqIGNyaXRlCiAvLyBSZXR1cm5zIHRoZSByYW5nZSB0aGF0IGlzIGZld2VyIHBvc2l0aW9u
cyBhd2F5IGZyb20gdGhlIHJlZmVyZW5jZSByYW5nZS4KIC8vIE5PVEU6IFRoZSBhZnRlciByYW5n
ZSBpcyBleHBlY3RlZCB0byBBQ1RVQUxMWSBiZSBhZnRlciB0aGUgcmVmZXJlbmNlIHJhbmdlIGFu
ZCB0aGUgYmVmb3JlCiAvLyByYW5nZSBpcyBleHBlY3RlZCB0byBBQ1RVQUxMWSBiZSBiZWZvcmUu
IFRoZXNlIGFyZSBub3QgY2hlY2tlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KLXN0YXRpYyBS
ZWZQdHI8UmFuZ2U+IHJhbmdlQ2xvc2VzdFRvUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYgcmVm
ZXJlbmNlUmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBhZnRlclJhbmdlLCBSZWZQdHI8UmFuZ2U+JiYg
YmVmb3JlUmFuZ2UpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQ2xvc2VzdFRv
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJlZmVyZW5jZVJhbmdlLCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4mJiBhZnRlclJhbmdlLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mJiBiZWZvcmVSYW5nZSkK
IHsKLSAgICBpZiAoIXJlZmVyZW5jZVJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQog
ICAgIC8vIFRoZSB0cmVlU2NvcGUgZm9yIHNoYWRvdyBub2RlcyBtYXkgbm90IGJlIHRoZSBzYW1l
IHNjb3BlIGFzIGFub3RoZXIgZWxlbWVudCBpbiBhIGRvY3VtZW50LgogICAgIC8vIENvbXBhcmlz
b25zIG1heSBmYWlsIGluIHRoYXQgY2FzZSwgd2hpY2ggYXJlIGV4cGVjdGVkIGJlaGF2aW9yIGFu
ZCBzaG91bGQgbm90IGFzc2VydC4KLSAgICBpZiAoYWZ0ZXJSYW5nZSAmJiAocmVmZXJlbmNlUmFu
Z2UtPmVuZFBvc2l0aW9uKCkuaXNOdWxsKCkgfHwgKChhZnRlclJhbmdlLT5zdGFydFBvc2l0aW9u
KCkuYW5jaG9yTm9kZSgpLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigqcmVmZXJlbmNlUmFuZ2Ut
PmVuZFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJ
U0NPTk5FQ1RFRCkgPT0gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghYWZ0ZXJSYW5nZSB8fCBhZnRlclJh
bmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCAqcmVmZXJl
bmNlUmFuZ2UpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDApOwogCi0gICAgaWYgKGJlZm9yZVJh
bmdlICYmIChyZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpLmlzTnVsbCgpIHx8ICgoYmVm
b3JlUmFuZ2UtPmVuZFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpLT5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbigqcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNob3JOb2RlKCkpICYgTm9k
ZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSA9PSBOb2RlOjpET0NVTUVOVF9QT1NJ
VElPTl9ESVNDT05ORUNURUQpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQVNTRVJU
KCFiZWZvcmVSYW5nZSB8fCBiZWZvcmVSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpTVEFSVF9UT19TVEFSVCwgKnJlZmVyZW5jZVJhbmdlKS5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8
PSAwKTsKKyAgICBpZiAoYWZ0ZXJSYW5nZSAmJiAoYWZ0ZXJSYW5nZS0+c3RhcnQuY29udGFpbmVy
LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5lbmQuY29udGFpbmVyKSAm
IE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgQVNTRVJUKCFhZnRlclJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZShh
ZnRlclJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwg
Y3JlYXRlTGl2ZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSkucmVsZWFzZVJldHVyblZhbHVlKCkgPj0g
MCk7CisKKyAgICBpZiAoYmVmb3JlUmFuZ2UgJiYgKGJlZm9yZVJhbmdlLT5lbmQuY29udGFpbmVy
LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5zdGFydC5jb250YWluZXIp
ICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBBU1NFUlQoIWJlZm9yZVJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5n
ZShiZWZvcmVSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RB
UlQsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VSYW5nZSkpLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
IDw9IDApOwogCiAgICAgaWYgKCFhZnRlclJhbmdlICYmICFiZWZvcmVSYW5nZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGFmdGVyUmFuZ2UgJiYgIWJlZm9yZVJhbmdlKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghYmVmb3JlUmFuZ2UpCiAgICAgICAg
IHJldHVybiBXVEZNb3ZlKGFmdGVyUmFuZ2UpOwotICAgIGlmICghYWZ0ZXJSYW5nZSAmJiBiZWZv
cmVSYW5nZSkKKyAgICBpZiAoIWFmdGVyUmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGJl
Zm9yZVJhbmdlKTsKLSAgICAKLSAgICB1bnNpZ25lZCBwb3NpdGlvbnNUb0FmdGVyUmFuZ2UgPSBQ
b3NpdGlvbjo6cG9zaXRpb25Db3VudEJldHdlZW5Qb3NpdGlvbnMoYWZ0ZXJSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCByZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgdW5zaWduZWQg
cG9zaXRpb25zVG9CZWZvcmVSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2VlblBv
c2l0aW9ucyhiZWZvcmVSYW5nZS0+ZW5kUG9zaXRpb24oKSwgcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIHBvc2l0aW9uc1RvQWZ0ZXJSYW5nZSA8IHBv
c2l0aW9uc1RvQmVmb3JlUmFuZ2UgPyBhZnRlclJhbmdlIDogYmVmb3JlUmFuZ2U7CisKKyAgICBh
dXRvIHBvc2l0aW9uc1RvQWZ0ZXJSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlvbkNvdW50QmV0d2Vl
blBvc2l0aW9ucyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYWZ0ZXJSYW5nZS0+c3RhcnQp
LCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmVmZXJlbmNlUmFuZ2UuZW5kKSk7CisgICAg
YXV0byBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID0gUG9zaXRpb246OnBvc2l0aW9uQ291bnRCZXR3
ZWVuUG9zaXRpb25zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihiZWZvcmVSYW5nZS0+ZW5k
KSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlZmVyZW5jZVJhbmdlLnN0YXJ0KSk7CisK
KyAgICByZXR1cm4gV1RGTW92ZShwb3NpdGlvbnNUb0FmdGVyUmFuZ2UgPCBwb3NpdGlvbnNUb0Jl
Zm9yZVJhbmdlID8gYWZ0ZXJSYW5nZSA6IGJlZm9yZVJhbmdlKTsKIH0KIAotUmVmUHRyPFJhbmdl
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVj
dGlvbihSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24g
c2VhcmNoRGlyZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiBjb25zdCYgc2VhcmNoU3RyaW5ncykgY29u
c3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3Ry
aW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgcmVmZXJlbmNl
UmFuZ2UsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24gc2VhcmNoRGlyZWN0aW9uLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoU3RyaW5ncykgY29uc3QKIHsKICAgICBGcmFtZSogZnJh
bWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAotICAgIGlmICghcmVmZXJlbmNlUmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIGJvb2wgaXNCYWNr
d2FyZFNlYXJjaCA9IHNlYXJjaERpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0
aW9uOjpQcmV2aW91czsKICAgICBGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyB7IEF0V29yZFN0YXJ0
cywgQXRXb3JkRW5kcywgQ2FzZUluc2Vuc2l0aXZlLCBTdGFydEluU2VsZWN0aW9uIH07CiAgICAg
aWYgKGlzQmFja3dhcmRTZWFyY2gpCiAgICAgICAgIGZpbmRPcHRpb25zLmFkZChGaW5kT3B0aW9u
RmxhZzo6QmFja3dhcmRzKTsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGNsb3Nlc3RTdHJpbmdS
YW5nZSA9IG51bGxwdHI7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWFyY2hTdHJpbmcgOiBzZWFy
Y2hTdHJpbmdzKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlYXJjaFN0cmluZ1Jhbmdl
ID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3RyaW5nLCByZWZlcmVuY2VS
YW5nZSwgZmluZE9wdGlvbnMpKSB7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGNsb3Nlc3RT
dHJpbmdSYW5nZTsKKyAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6IHNlYXJjaFN0cmluZ3Mp
IHsKKyAgICAgICAgaWYgKGF1dG8gc2VhcmNoU3RyaW5nUmFuZ2UgPSBmcmFtZS0+ZWRpdG9yKCku
cmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VSYW5n
ZSkucHRyKCksIGZpbmRPcHRpb25zKSkgeworICAgICAgICAgICAgYXV0byBmb3VuZFN0cmluZ1Jh
bmdlID0gU2ltcGxlUmFuZ2UgeyAqc2VhcmNoU3RyaW5nUmFuZ2UgfTsKICAgICAgICAgICAgIGlm
ICghY2xvc2VzdFN0cmluZ1JhbmdlKQotICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5n
ZSA9IHNlYXJjaFN0cmluZ1JhbmdlOworICAgICAgICAgICAgICAgIGNsb3Nlc3RTdHJpbmdSYW5n
ZSA9IGZvdW5kU3RyaW5nUmFuZ2U7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBJZiBzZWFyY2hpbmcgYmFja3dhcmQsIHVzZSB0aGUgdHJhaWxpbmcgcmFuZ2UgZWRnZXMg
dG8gY29ycmVjdGx5IGRldGVybWluZSB3aGljaAogICAgICAgICAgICAgICAgIC8vIHJhbmdlIGlz
IGNsb3Nlc3QuIFNpbWlsYXJseSwgaWYgc2VhcmNoaW5nIGZvcndhcmQsIHVzZSB0aGUgbGVhZGlu
ZyByYW5nZSBlZGdlcy4KLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBjbG9zZXN0U3RyaW5nUG9z
aXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0cmluZ1JhbmdlLT5lbmRQb3NpdGlv
bigpIDogY2xvc2VzdFN0cmluZ1JhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgUG9zaXRpb24gc2VhcmNoU3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gc2Vh
cmNoU3RyaW5nUmFuZ2UtPmVuZFBvc2l0aW9uKCkgOiBzZWFyY2hTdHJpbmdSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpOworICAgICAgICAgICAgICAgIGF1dG8mIGNsb3Nlc3RTdHJpbmdQb3NpdGlvbiA9
IGlzQmFja3dhcmRTZWFyY2ggPyBjbG9zZXN0U3RyaW5nUmFuZ2UtPmVuZCA6IGNsb3Nlc3RTdHJp
bmdSYW5nZS0+c3RhcnQ7CisgICAgICAgICAgICAgICAgYXV0byYgZm91bmRTdHJpbmdQb3NpdGlv
biA9IGlzQmFja3dhcmRTZWFyY2ggPyBmb3VuZFN0cmluZ1JhbmdlLmVuZCA6IGZvdW5kU3RyaW5n
UmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaW50IGNsb3Nl
c3RQb3NpdGlvbk9mZnNldCA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICAgICAgaW50IHNlYXJjaFBvc2l0aW9uT2Zmc2V0
ID0gc2VhcmNoU3RyaW5nUG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwot
ICAgICAgICAgICAgICAgIE5vZGUqIGNsb3Nlc3RDb250YWluZXJOb2RlID0gY2xvc2VzdFN0cmlu
Z1Bvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBzZWFyY2hD
b250YWluZXJOb2RlID0gc2VhcmNoU3RyaW5nUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOworICAg
ICAgICAgICAgICAgIGF1dG8gY2xvc2VzdFBvc2l0aW9uT2Zmc2V0ID0gY2xvc2VzdFN0cmluZ1Bv
c2l0aW9uLm9mZnNldDsKKyAgICAgICAgICAgICAgICBhdXRvIHNlYXJjaFBvc2l0aW9uT2Zmc2V0
ID0gZm91bmRTdHJpbmdQb3NpdGlvbi5vZmZzZXQ7CisgICAgICAgICAgICAgICAgYXV0byBjbG9z
ZXN0Q29udGFpbmVyTm9kZSA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5jb250YWluZXIucHRyKCk7
CisgICAgICAgICAgICAgICAgYXV0byBzZWFyY2hDb250YWluZXJOb2RlID0gZm91bmRTdHJpbmdQ
b3NpdGlvbi5jb250YWluZXIucHRyKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgc2hvcnQgcmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhjbG9zZXN0Q29u
dGFpbmVyTm9kZSwgY2xvc2VzdFBvc2l0aW9uT2Zmc2V0LCBzZWFyY2hDb250YWluZXJOb2RlLCBz
ZWFyY2hQb3NpdGlvbk9mZnNldCkucmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKGNsb3Nlc3RDb250
YWluZXJOb2RlLCBjbG9zZXN0UG9zaXRpb25PZmZzZXQsIHNlYXJjaENvbnRhaW5lck5vZGUsIHNl
YXJjaFBvc2l0aW9uT2Zmc2V0KS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoKCFpc0JhY2t3YXJkU2VhcmNoICYmIHJlc3VsdCA+IDApIHx8IChpc0JhY2t3YXJkU2Vh
cmNoICYmIHJlc3VsdCA8IDApKQotICAgICAgICAgICAgICAgICAgICBjbG9zZXN0U3RyaW5nUmFu
Z2UgPSBzZWFyY2hTdHJpbmdSYW5nZTsKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VzdFN0cmlu
Z1JhbmdlID0gZm91bmRTdHJpbmdSYW5nZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTY0NCw4MyArNjQwLDczIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpzZWxlY3Rpb25SYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgeyB7IGRvY3Vt
ZW50LCAwIH0sIHsgZG9jdW1lbnQsIDAgfSB9IH07CiB9CiAKLVJlZlB0cjxSYW5nZT4gQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZWxlbWVudFJhbmdlKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdl
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50UmFuZ2UoKSBjb25zdAogewogICAgIGF1dG8g
bm9kZSA9IHRoaXMtPm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVD
b250ZW50cygqbm9kZSkpOworICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVD
b250ZW50cygqbm9kZSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZmluZFRleHRSYW5nZShWZWN0b3I8U3RyaW5nPiBjb25zdCYgc2VhcmNoU3RyaW5ncywgUmVmUHRy
PFJhbmdlPiBjb25zdCYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpmaW5kVGV4dFJhbmdlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hTdHJpbmdzLCBjb25z
dCBTaW1wbGVSYW5nZSYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IGZvdW5kOworICAgIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBmb3VuZDsKICAgICBpZiAoZGlyZWN0aW9uID09IEFjY2Vzc2liaWxpdHlT
ZWFyY2hUZXh0RGlyZWN0aW9uOjpGb3J3YXJkKQotICAgICAgICBmb3VuZCA9IHJhbmdlT2ZTdHJp
bmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKHN0YXJ0LmdldCgpLCBBY2Nlc3NpYmlsaXR5U2Vh
cmNoRGlyZWN0aW9uOjpOZXh0LCBzZWFyY2hTdHJpbmdzKTsKKyAgICAgICAgZm91bmQgPSByYW5n
ZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFydCwgQWNjZXNzaWJpbGl0eVNl
YXJjaERpcmVjdGlvbjo6TmV4dCwgc2VhcmNoU3RyaW5ncyk7CiAgICAgZWxzZSBpZiAoZGlyZWN0
aW9uID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpCYWNrd2FyZCkKLSAgICAg
ICAgZm91bmQgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFydC5n
ZXQoKSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXMsIHNlYXJjaFN0cmlu
Z3MpOworICAgICAgICBmb3VuZCA9IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0
aW9uKHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91cywgc2VhcmNo
U3RyaW5ncyk7CiAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09IEFjY2Vzc2liaWxpdHlTZWFyY2hU
ZXh0RGlyZWN0aW9uOjpDbG9zZXN0KSB7Ci0gICAgICAgIGF1dG8gZm91bmRBZnRlciA9IHJhbmdl
T2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKHN0YXJ0LmdldCgpLCBBY2Nlc3NpYmls
aXR5U2VhcmNoRGlyZWN0aW9uOjpOZXh0LCBzZWFyY2hTdHJpbmdzKTsKLSAgICAgICAgYXV0byBm
b3VuZEJlZm9yZSA9IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKHN0YXJ0
LmdldCgpLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91cywgc2VhcmNoU3Ry
aW5ncyk7Ci0gICAgICAgIGZvdW5kID0gcmFuZ2VDbG9zZXN0VG9SYW5nZShzdGFydC5nZXQoKSwg
V1RGTW92ZShmb3VuZEFmdGVyKSwgV1RGTW92ZShmb3VuZEJlZm9yZSkpOworICAgICAgICBhdXRv
IGZvdW5kQWZ0ZXIgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFy
dCwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCwgc2VhcmNoU3RyaW5ncyk7Cisg
ICAgICAgIGF1dG8gZm91bmRCZWZvcmUgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRp
cmVjdGlvbihzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXMsIHNl
YXJjaFN0cmluZ3MpOworICAgICAgICBmb3VuZCA9IHJhbmdlQ2xvc2VzdFRvUmFuZ2Uoc3RhcnQs
IFdURk1vdmUoZm91bmRBZnRlciksIFdURk1vdmUoZm91bmRCZWZvcmUpKTsKICAgICB9Ci0KICAg
ICBpZiAoZm91bmQpIHsKICAgICAgICAgLy8gSWYgdGhlIHNlYXJjaCBzdGFydGVkIHdpdGhpbiBh
IHRleHQgY29udHJvbCwgZW5zdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBpbnNpZGUgdGhhdCBlbGVt
ZW50LgogICAgICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNUZXh0RmllbGQoKSkg
ewogICAgICAgICAgICAgaWYgKCFmb3VuZC0+c3RhcnRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRP
clNoYWRvd0Rlc2NlbmRhbnRPZihlbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgfHwgIWZvdW5k
LT5lbmRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZihlbGVtZW50
KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZvdW5kOwog
fQogCi1WZWN0b3I8UmVmUHRyPFJhbmdlPj4gQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZFRleHRS
YW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBjb25zdCYgY3JpdGVyaWEpIGNv
bnN0CitWZWN0b3I8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFu
Z2VzKGNvbnN0IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEmIGNyaXRlcmlhKSBjb25z
dAogewotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiByZXN1bHQ7Ci0KLSAgICAvLyBEZXRlcm1p
bmUgc3RhcnQgcmFuZ2UuCi0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlOworICAgIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICBpZiAoY3JpdGVyaWEuc3RhcnQgPT0gQWNjZXNz
aWJpbGl0eVNlYXJjaFRleHRTdGFydEZyb206OlNlbGVjdGlvbikKLSAgICAgICAgc3RhcnRSYW5n
ZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgcmFuZ2UgPSBz
ZWxlY3Rpb25SYW5nZSgpOwogICAgIGVsc2UKLSAgICAgICAgc3RhcnRSYW5nZSA9IGVsZW1lbnRS
YW5nZSgpOwotCi0gICAgaWYgKHN0YXJ0UmFuZ2UpIHsKLSAgICAgICAgLy8gQ29sbGFwc2UgdGhl
IHJhbmdlIHRvIHRoZSBzdGFydCB1bmxlc3Mgc2VhcmNoaW5nIGZyb20gdGhlIGVuZCBvZiB0aGUg
ZG9jIG9yIHNlYXJjaGluZyBiYWNrd2FyZHMuCi0gICAgICAgIGlmIChjcml0ZXJpYS5zdGFydCA9
PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6QmVnaW4pCi0gICAgICAgICAgICBz
dGFydFJhbmdlLT5jb2xsYXBzZSh0cnVlKTsKLSAgICAgICAgZWxzZSBpZiAoY3JpdGVyaWEuc3Rh
cnQgPT0gQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRTdGFydEZyb206OkVuZCkKLSAgICAgICAgICAg
IHN0YXJ0UmFuZ2UtPmNvbGxhcHNlKGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3RhcnRSYW5nZS0+Y29sbGFwc2UoY3JpdGVyaWEuZGlyZWN0aW9uICE9IEFjY2Vzc2liaWxpdHlT
ZWFyY2hUZXh0RGlyZWN0aW9uOjpCYWNrd2FyZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJhbmdlID0gZWxlbWVudFJhbmdlKCk7CisgICAgaWYgKCFyYW5n
ZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGlmIChjcml0ZXJpYS5zdGFydCA9PSBBY2Nl
c3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6QmVnaW4pCisgICAgICAgIHJhbmdlLT5lbmQg
PSByYW5nZS0+c3RhcnQ7CisgICAgZWxzZSBpZiAoY3JpdGVyaWEuc3RhcnQgPT0gQWNjZXNzaWJp
bGl0eVNlYXJjaFRleHRTdGFydEZyb206OkVuZCkKKyAgICAgICAgcmFuZ2UtPnN0YXJ0ID0gcmFu
Z2UtPmVuZDsKKyAgICBlbHNlIGlmIChjcml0ZXJpYS5kaXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0
eVNlYXJjaFRleHREaXJlY3Rpb246OkJhY2t3YXJkKQorICAgICAgICByYW5nZS0+c3RhcnQgPSBy
YW5nZS0+ZW5kOworICAgIGVsc2UKKyAgICAgICAgcmFuZ2UtPmVuZCA9IHJhbmdlLT5zdGFydDsK
IAotICAgIFJlZlB0cjxSYW5nZT4gZm91bmQ7CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByZXN1
bHQ7CiAgICAgc3dpdGNoIChjcml0ZXJpYS5kaXJlY3Rpb24pIHsKICAgICBjYXNlIEFjY2Vzc2li
aWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpGb3J3YXJkOgogICAgIGNhc2UgQWNjZXNzaWJpbGl0
eVNlYXJjaFRleHREaXJlY3Rpb246OkJhY2t3YXJkOgogICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNl
YXJjaFRleHREaXJlY3Rpb246OkNsb3Nlc3Q6Ci0gICAgICAgIGZvdW5kID0gZmluZFRleHRSYW5n
ZShjcml0ZXJpYS5zZWFyY2hTdHJpbmdzLCBzdGFydFJhbmdlLCBjcml0ZXJpYS5kaXJlY3Rpb24p
OwotICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZvdW5kKTsK
KyAgICAgICAgaWYgKChyYW5nZSA9IGZpbmRUZXh0UmFuZ2UoY3JpdGVyaWEuc2VhcmNoU3RyaW5n
cywgKnJhbmdlLCBjcml0ZXJpYS5kaXJlY3Rpb24pKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoKnJhbmdlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNo
VGV4dERpcmVjdGlvbjo6QWxsOiB7Ci0gICAgICAgIGF1dG8gZmluZEFsbCA9IFsmXShBY2Nlc3Np
YmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbiBkaXIpIHsKLSAgICAgICAgICAgIGZvdW5kID0gZmlu
ZFRleHRSYW5nZShjcml0ZXJpYS5zZWFyY2hTdHJpbmdzLCBzdGFydFJhbmdlLCBkaXIpOwotICAg
ICAgICAgICAgd2hpbGUgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChm
b3VuZCk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSBmaW5kVGV4dFJhbmdlKGNyaXRlcmlhLnNl
YXJjaFN0cmluZ3MsIGZvdW5kLCBkaXIpOwotICAgICAgICAgICAgfQorICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb246OkFsbDoKKyAgICAgICAgYXV0byBmaW5kQWxsID0g
WyZdKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeworICAgICAg
ICAgICAgd2hpbGUgKChyYW5nZSA9IGZpbmRUZXh0UmFuZ2UoY3JpdGVyaWEuc2VhcmNoU3RyaW5n
cywgKnJhbmdlLCBkaXJlY3Rpb24pKSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpy
YW5nZSk7CiAgICAgICAgIH07CiAgICAgICAgIGZpbmRBbGwoQWNjZXNzaWJpbGl0eVNlYXJjaFRl
eHREaXJlY3Rpb246OkZvcndhcmQpOwogICAgICAgICBmaW5kQWxsKEFjY2Vzc2liaWxpdHlTZWFy
Y2hUZXh0RGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICB9
Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MzYsMTAgKzcyMiwxMCBAQCBWZWN0b3I8
U3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJhdGlvbihBY2Nlc3Np
YmlsaXR5VGV4dE9wZXJhdAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgZm9yIChjb25z
dCBhdXRvJiB0ZXh0UmFuZ2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewotICAgICAgICBpZiAo
IWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHRleHRSYW5nZS5nZXQoKSwgRE9X
TlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQorICAgICAg
ICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5n
ZSh0ZXh0UmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcg
dGV4dCA9IHRleHRSYW5nZS0+dGV4dCgpOworICAgICAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4
dCh0ZXh0UmFuZ2UpOwogICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSBvcGVyYXRp
b24ucmVwbGFjZW1lbnRUZXh0OwogICAgICAgICBib29sIHJlcGxhY2VTZWxlY3Rpb24gPSBmYWxz
ZTsKICAgICAgICAgc3dpdGNoIChvcGVyYXRpb24udHlwZSkgewpAQCAtODQzLDggKzgyOSw3IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNNZXRlcigpIGNvbnN0CiAKIEludFBvaW50IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKQogewotICAgIExheW91dFJlY3QgcmVjdCA9
IGVsZW1lbnRSZWN0KCk7Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChMYXlvdXRQb2ludChy
ZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIp
KTsKKyAgICByZXR1cm4gcm91bmRlZEludFBvaW50KGVsZW1lbnRSZWN0KCkuY2VudGVyKCkpOwog
fQogCiBJbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMoUmVu
ZGVyT2JqZWN0KiBvYmosIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKQEAgLTExODAs
MjEgKzExNjUsMjEgQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGEKICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogfQogCi1SZWZQdHI8
UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3Qg
UGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFu
Z2UmIHJhbmdlKSBjb25zdAogewogICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBnZXRMZW5ndGhG
b3JUZXh0UmFuZ2UoKTsKICAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0ZXh0
TGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAvLyBBdm9pZCBzZXR0aW5nIHNlbGVjdGlvbiB0byB1bmVkaXRhYmxlIHBhcmVu
dCBub2RlIGluIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlLiBTZWUgd2Via2l0Lm9y
Zy9iLzIwNjA5My4KICAgICBpZiAocmFuZ2UuaXNOdWxsKCkgJiYgIXRleHRMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAog
ICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkgewogICAgICAg
ICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgo
cmFuZ2Uuc3RhcnQsIHRoaXMpOwogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUt
PmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoLCB0aGlz
KTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShjYWNoZS0+cmFuZ2VGb3JVbm9yZGVy
ZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlLT5y
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CiAgICAgfQotICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFZpc2libGVQ
b3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdApAQCAtMTI1OSwxMiAr
MTI0NCw5IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXN0TWFya2VyVGV4dEZvck5v
ZGVBbmRQb3NpdGlvbihOb2RlKiBub2RlLCBjb25zdCBWCiAgICAgcmV0dXJuIGxpc3RNYXJrZXJU
ZXh0Rm9yTm9kZShub2RlKTsKIH0KIAotU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmlu
Z0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CitTdHJpbmcgQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAog
ewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICBU
ZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsKKyAgICBUZXh0SXRlcmF0b3IgaXQocmFuZ2UpOwogICAg
IGlmIChpdC5hdEVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCkBAIC0xMjc0
LDggKzEyNTYsMTAgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdl
KFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIGxp
c3QgbWFya2VyIHRleHQuCiAgICAgICAgICAgICAvLyBEb24ndCBhZGQgbGlzdCBtYXJrZXIgdGV4
dCBmb3IgbmV3IGxpbmUgY2hhcmFjdGVyLgotICAgICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5n
dGgoKSAhPSAxIHx8ICFpc1NwYWNlT3JOZXdsaW5lKGl0LnRleHQoKVswXSkpCi0gICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQobGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oaXQu
bm9kZSgpLCBWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpKTsKKyAgICAg
ICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkgIT0gMSB8fCAhaXNTcGFjZU9yTmV3bGluZShp
dC50ZXh0KClbMF0pKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhl
IHBvc2l0aW9uIHNob3VsZCBiZSBiYXNlZCBvbiBpdC5yYW5nZSgpLCBub3QgcmFuZ2UuCisgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRp
b24oaXQubm9kZSgpLCBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJhbmdlLnN0YXJ0KSkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0LmFwcGVuZFRl
eHRUb1N0cmluZ0J1aWxkZXIoYnVpbGRlcik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBpZiAocmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoaXQubm9kZSgpKSkKQEAgLTEyODgsMTUg
KzEyNzIsMTMgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdlKFJl
ZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpz
dHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYg
dmlzaWJsZVBvc2l0aW9uUmFuZ2UpCiB7Ci0gICAgaWYgKHZpc2libGVQb3NpdGlvblJhbmdlLmlz
TnVsbCgpKQorICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlUG9zaXRp
b25SYW5nZS5zdGFydCk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxl
UG9zaXRpb25SYW5nZS5lbmQpOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2UodmlzaWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQsIHZpc2li
bGVQb3NpdGlvblJhbmdlLmVuZCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7
IGl0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5k
IH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIC8vIG5vbi16ZXJvIGxl
bmd0aCBtZWFucyB0ZXh0dWFsIG5vZGUsIHplcm8gbGVuZ3RoIG1lYW5zIHJlcGxhY2VkIG5vZGUg
KEFLQSAiYXR0YWNobWVudHMiIGluIEFYKQogICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgICAvLyBBZGQgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGZvciBsaXN0
IG1hcmtlciB0ZXh0LgpAQCAtMTMwOCwyMiArMTI5MCwyMSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0
aW9uUgogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG9iamVjdFJlcGxhY2VtZW50Q2hh
cmFjdGVyKTsKICAgICAgICAgfQogICAgIH0KLQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZW5ndGhGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgdmlzaWJsZVBvc2l0aW9uUmFuZ2Up
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IE11bHRpLWJ5dGUgc3VwcG9ydAotICAgIGlmICh2aXNp
YmxlUG9zaXRpb25SYW5nZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCwg
dmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gLTE7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVQb3NpdGlv
blJhbmdlLnN0YXJ0KTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVQ
b3NpdGlvblJhbmdlLmVuZCk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1
cm4gLTE7IC8vIEZJWE1FOiBXaHkgbm90IHJldHVybiAwPwogCisgICAgLy8gRklYTUU6IFVzZSBj
aGFyYWN0ZXJDb3VudCBpbnN0ZWFkIG9mIHdyaXRpbmcgb3VyIG93biBsb29wPwogICAgIGludCBs
ZW5ndGggPSAwOwotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgp
OyBpdC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVu
ZCB9KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBs
ZW5ndGggbWVhbnMgdGV4dHVhbCBub2RlLCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2Rl
IChBS0EgImF0dGFjaG1lbnRzIiBpbiBBWCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgo
KSkKICAgICAgICAgICAgIGxlbmd0aCArPSBpdC50ZXh0KCkubGVuZ3RoKCk7CkBAIC0xNDQ3LDE0
ICsxNDI4LDE0IEBAIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0U2Vu
dGVuY2VFbmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpCiAKICAgICAvLyBNYWtlIHN1cmUg
d2UgbW92ZSBvZmYgb2YgYSBzZW50ZW5jZSBlbmQuCiAgICAgYXV0byBuZXh0UG9zaXRpb24gPSBw
b3NpdGlvbi5uZXh0KCk7Ci0gICAgYXV0byBsaW5lUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRPZkxp
bmUobmV4dFBvc2l0aW9uKSwgZW5kT2ZMaW5lKG5leHRQb3NpdGlvbikpOwotICAgIGlmICghbGlu
ZVJhbmdlKQorICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mTGluZShu
ZXh0UG9zaXRpb24pKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mTGlu
ZShuZXh0UG9zaXRpb24pKTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCiAgICAgICAgIHJldHVy
biB7IH07CiAKICAgICAvLyBBbiBlbXB0eSBsaW5lIGlzIGNvbnNpZGVyZWQgYSBzZW50ZW5jZS4g
SWYgaXQncyBza2lwcGVkLCB0aGVuIHRoZSBzZW50ZW5jZSBwYXJzZXIgd2lsbCBub3QKICAgICAv
LyBzZWUgdGhpcyBlbXB0eSBsaW5lLiBJbnN0ZWFkLCByZXR1cm4gdGhlIGVuZCBwb3NpdGlvbiBv
ZiB0aGUgZW1wdHkgbGluZS4KLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbW9yZSBlZmZpY2ll
bnQgdG8gdXNlIGhhc0FueVBsYWluVGV4dCBpbnN0ZWFkIG9mIHBsYWluVGV4dC5pc0VtcHR5Lgot
ICAgIHJldHVybiBwbGFpblRleHQoKmxpbmVSYW5nZSkuaXNFbXB0eSgpID8gbmV4dFBvc2l0aW9u
IDogZW5kT2ZTZW50ZW5jZShuZXh0UG9zaXRpb24pOworICAgIHJldHVybiBoYXNBbnlQbGFpblRl
eHQoeyAqc3RhcnQsICplbmQgfSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbikgOiBuZXh0
UG9zaXRpb247CiB9CiAKIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2
aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9u
KSBjb25zdApAQCAtMTQ2NCwxMyArMTQ0NSwxMyBAQCBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJp
bGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZQog
CiAgICAgLy8gTWFrZSBzdXJlIHdlIG1vdmUgb2ZmIG9mIGEgc2VudGVuY2Ugc3RhcnQuCiAgICAg
YXV0byBwcmV2aW91c1Bvc2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsKLSAgICBhdXRvIGxp
bmVSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mTGluZShwcmV2aW91c1Bvc2l0aW9uKSwgZW5kT2ZM
aW5lKHByZXZpb3VzUG9zaXRpb24pKTsKLSAgICBpZiAoIWxpbmVSYW5nZSkKKyAgICBhdXRvIHN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOwor
ICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZMaW5lKHByZXZpb3VzUG9zaXRp
b24pKTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICAvLyBUcmVhdCBlbXB0eSBsaW5lIGFzIGEgc2VwYXJhdGUgc2VudGVuY2UuCi0gICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBoYXNBbnlQbGFpblRleHQgaW5z
dGVhZCBvZiBwbGFpblRleHQuaXNFbXB0eS4KLSAgICByZXR1cm4gcGxhaW5UZXh0KCpsaW5lUmFu
Z2UpLmlzRW1wdHkoKSA/IHByZXZpb3VzUG9zaXRpb24gOiBzdGFydE9mU2VudGVuY2UocHJldmlv
dXNQb3NpdGlvbik7CisgICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCh7ICpzdGFydCwgKmVuZCB9
KSA/IHN0YXJ0T2ZTZW50ZW5jZShwcmV2aW91c1Bvc2l0aW9uKSA6IHByZXZpb3VzUG9zaXRpb247
CiB9CiAKIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0UGFyYWdyYXBo
RW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKQEAgLTIw
NDMsNyArMjAyNCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZVRleHRJblJh
bmdlKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvCiAgICAgLy8gQWxzbyBvbmx5
IGRvIHRoaXMgd2hlbiB0aGUgZmllbGQgaXMgaW4gZWRpdGluZyBtb2RlLgogICAgIGF1dG8mIGZy
YW1lID0gcmVuZGVyZXIoKS0+ZnJhbWUoKTsKICAgICBpZiAoZWxlbWVudC5zaG91bGRVc2VJbnB1
dE1ldGhvZCgpKSB7Ci0gICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2Uo
cmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5n
ZShyYW5nZSkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6Olllcyk7CiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dChyZXBsYWNlbWVudFN0cmluZywgRWRpdG9yOjpTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIEVk
aXRvcjo6U21hcnRSZXBsYWNlOjpObyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgK
aW5kZXggOTUzOGZlNDE1YjNmNzlhN2Y1OWYwYzlmMzI5M2EzYzUwYmVlMTg5YS4uNmY5YmY4NWI4
Njk4ODBjOWQ1ZjY3MmJlM2MxNDM5NzAxMjM2ODJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTMzLDcgKzMzLDYgQEAK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGF0aC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0y
MzIsNyArMjMxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQm9sZEZvbnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaGFzSXRhbGljRm9udCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNNaXNzcGVsbGluZygpIGNvbnN0
IG92ZXJyaWRlOwotICAgIFJlZlB0cjxSYW5nZT4gZ2V0TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8
UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uKSBjb25z
dCBvdmVycmlkZTsKICAgICBib29sIGhhc1BsYWluVGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNTYW1lRm9udChjb25zdCBBWENvcmVPYmplY3QmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaGFzU2FtZUZvbnRDb2xv
cihjb25zdCBBWENvcmVPYmplY3QmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpA
QCAtMzU2LDEyICszNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZlJvbGUo
QWNjZXNzaWJpbGl0eVJvbGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gVGV4dCBzZWxlY3Rp
b24KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFu
Z2VJbkRpcmVjdGlvbihSYW5nZSosIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24sIFZlY3Rv
cjxTdHJpbmc+IGNvbnN0JikgY29uc3Q7Ci0gICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVj
dGlvblJhbmdlKCkgY29uc3Q7Ci0gICAgUmVmUHRyPFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3Rv
cjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hTdHJpbmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFy
dCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24pIGNvbnN0OwotcHVibGljOgotICAg
IFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNo
VGV4dENyaXRlcmlhIGNvbnN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPFNpbXBsZVJh
bmdlPiBmaW5kVGV4dFJhbmdlcyhjb25zdCBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlh
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybVRleHRPcGVyYXRp
b24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gY29uc3QmKSBvdmVycmlkZTsKIAogICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9ic2VydmFibGVPYmplY3QoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9CkBAIC01MjIsNyArNTE2LDcgQEAgcHVibGljOgogICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZp
c2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBlbGVtZW50
UmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZWxlbWVu
dFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RhdGljIGJvb2wgcmVwbGFjZWROb2RlTmVl
ZHNDaGFyYWN0ZXIoTm9kZSogcmVwbGFjZWROb2RlKTsKIAogICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVW5vcmRlcmVkUG9zaXRpb25zKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwpAQCAt
NTM2LDEyICs1MzAsMTIgQEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2li
bGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVy
cmlkZTsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBsaW5lUmFuZ2VGb3JQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNv
bnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgU3RyaW5n
IHN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdl
Jik7Ci0gICAgU3RyaW5nIHN0cmluZ0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJy
aWRlOworICAgIFN0cmluZyBzdHJpbmdGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29u
c3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0
KCk7IH0KLSAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIEludFJlY3QgYm91bmRzRm9y
UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0
KCk7IH0KICAgICBpbnQgbGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHNldFNlbGVjdGVkVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVy
cmlkZSB7IH0KIApAQCAtNzQ2LDcgKzc0MCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldyogYW5jZXN0b3JBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldyhib29sIGlu
Y2x1ZGVTZWxmKSBjb25zdCBvdmVycmlkZTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB3ZWJB
cmVhT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgdm9p
ZCBjbGVhcklzSWdub3JlZEZyb21QYXJlbnREYXRhKCkgb3ZlcnJpZGUgeyBtX2lzSWdub3JlZEZy
b21QYXJlbnREYXRhID0gQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhKCk7IH0K
KyAgICB2b2lkIGNsZWFySXNJZ25vcmVkRnJvbVBhcmVudERhdGEoKSBvdmVycmlkZSB7IG1faXNJ
Z25vcmVkRnJvbVBhcmVudERhdGEgPSB7IH07IH0KICAgICB2b2lkIHNldElzSWdub3JlZEZyb21Q
YXJlbnREYXRhRm9yQ2hpbGQoQVhDb3JlT2JqZWN0Kikgb3ZlcnJpZGU7CiAKICAgICB1aW50NjRf
dCBzZXNzaW9uSUQoKSBjb25zdCBvdmVycmlkZTsKQEAgLTc1NiwyMSArNzUwLDEyIEBAIHB1Ymxp
YzoKIAogcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QoKSA9IGRlZmF1bHQ7CisK
KyAgICAvLyBGSVhNRTogTWFrZSBtb3JlIG9mIHRoZXNlIG1lbWJlciBmdW5jdGlvbnMgcHJpdmF0
ZS4KKwogICAgIHZvaWQgZGV0YWNoUmVtb3RlUGFydHMoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRU
eXBlKSBvdmVycmlkZTsKICAgICB2b2lkIGRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmls
aXR5RGV0YWNobWVudFR5cGUpIG92ZXJyaWRlOwogCi0gICAgQVhJRCBtX2lkIHsgMCB9OwotICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwotICAgIG11dGFibGUgYm9v
bCBtX2hhdmVDaGlsZHJlbiB7IGZhbHNlIH07Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgbV9yb2xl
IHsgQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd24gfTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
SW5jbHVzaW9uIG1fbGFzdEtub3duSXNJZ25vcmVkVmFsdWUgeyBBY2Nlc3NpYmlsaXR5T2JqZWN0
SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3IgfTsKLSAgICBBY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
RnJvbVBhcmVudERhdGEgbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YSB7IH07Ci0gICAgYm9vbCBt
X2NoaWxkcmVuRGlydHkgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zdWJ0cmVlRGlydHkgeyBmYWxz
ZSB9OwotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCi0gICAgYm9vbCBt
X2lzb2xhdGVkVHJlZU5vZGVJbml0aWFsaXplZCB7IGZhbHNlIH07Ci0jZW5kaWYKLQogICAgIHZv
aWQgc2V0SXNJZ25vcmVkRnJvbVBhcmVudERhdGEoQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21Q
YXJlbnREYXRhJiBkYXRhKSBvdmVycmlkZSB7IG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGEgPSBk
YXRhOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC03OTIsMTIgKzc3NywyOCBAQCBwcm90ZWN0ZWQ6
CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByYWRpb0dyb3VwQW5jZXN0b3IoKSBjb25zdDsK
IAotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQogICAgIGJvb2wgYWxsb3dz
VGV4dFJhbmdlcygpIGNvbnN0OwogICAgIHVuc2lnbmVkIGdldExlbmd0aEZvclRleHRSYW5nZSgp
IGNvbnN0OwotI2Vsc2UKLSAgICBib29sIGFsbG93c1RleHRSYW5nZXMoKSBjb25zdCB7IHJldHVy
biBpc1RleHRDb250cm9sKCk7IH0KLSAgICB1bnNpZ25lZCBnZXRMZW5ndGhGb3JUZXh0UmFuZ2Uo
KSBjb25zdCB7IHJldHVybiB0ZXh0KCkubGVuZ3RoKCk7IH0KKworcHJpdmF0ZToKKyAgICBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24o
Y29uc3QgU2ltcGxlUmFuZ2UmLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzZWxlY3Rp
b25SYW5nZSgpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBmaW5kVGV4dFJhbmdl
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hTdHJpbmdzLCBjb25zdCBTaW1wbGVSYW5nZSYg
c3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uKSBjb25zdDsKKworICAgIEFY
SUQgbV9pZCB7IDAgfTsKK3Byb3RlY3RlZDogLy8gRklYTUU6IE1ha2UgdGhlIGRhdGEgbWVtYmVy
cyBwcml2YXRlLgorICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwor
ICAgIG11dGFibGUgYm9vbCBtX2hhdmVDaGlsZHJlbiB7IGZhbHNlIH07CisgICAgQWNjZXNzaWJp
bGl0eVJvbGUgbV9yb2xlIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd24gfTsKK3ByaXZhdGU6
CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBtX2xhc3RLbm93bklzSWdub3JlZFZh
bHVlIHsgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yIH07Citw
cm90ZWN0ZWQ6IC8vIEZJWE1FOiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgcHJpdmF0ZS4KKyAgICBB
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkRnJvbVBhcmVudERhdGEgbV9pc0lnbm9yZWRGcm9tUGFyZW50
RGF0YTsKKyAgICBib29sIG1fY2hpbGRyZW5EaXJ0eSB7IGZhbHNlIH07CisgICAgYm9vbCBtX3N1
YnRyZWVEaXJ0eSB7IGZhbHNlIH07Citwcml2YXRlOgorI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZ
X0lTT0xBVEVEX1RSRUUpCisgICAgYm9vbCBtX2lzb2xhdGVkVHJlZU5vZGVJbml0aWFsaXplZCB7
IGZhbHNlIH07CiAjZW5kaWYKIH07CiAKQEAgLTgwOSw2ICs4MTAsMTEgQEAgaW5saW5lIHZvaWQg
QWNjZXNzaWJpbGl0eU9iamVjdDo6dXBkYXRlQmFja2luZ1N0b3JlKCkgeyB9CiBpbmxpbmUgdm9p
ZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2hQbGF0Zm9ybVdyYXBwZXIoQWNjZXNzaWJpbGl0
eURldGFjaG1lbnRUeXBlKSB7IH0KICNlbmRpZgogCisjaWYgIShFTkFCTEUoQUNDRVNTSUJJTElU
WSkgJiYgVVNFKEFUSykpCitpbmxpbmUgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbGxvd3NU
ZXh0UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0Q29udHJvbCgpOyB9CitpbmxpbmUgdW5z
aWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3Qg
eyByZXR1cm4gdGV4dCgpLmxlbmd0aCgpOyB9CisjZW5kaWYKKwogQWNjZXNzaWJpbGl0eU9iamVj
dCogZmlyc3RBY2Nlc3NpYmxlT2JqZWN0RnJvbU5vZGUoY29uc3QgTm9kZSosIGNvbnN0IFdURjo6
RnVuY3Rpb248Ym9vbChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0Jik+JiBpc0FjY2Vzc2libGUp
OwogCiBuYW1lc3BhY2UgQWNjZXNzaWJpbGl0eSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCmluZGV4
IDA1ZGI4NjQ5MzgxOWRjNWM4NmZkZWJjMTViY2ZlZGIwYzRlN2QwYzguLmY3YTZlNjhhYWI5Y2Fj
MjEyM2Q1MGU2ZWUzNTI4ZWI1MzUwNzMxZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCkBAIC0y
NSwxMiArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAKKy8vIEZJWE1FOiBTaG91bGQgcmVuYW1l
IHRoaXMgZmlsZSBBWENvcmVPYmplY3QuaC4KKwogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJM
YXlvdXRSZWN0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0
aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtNDIsNiArNDIsNyBAQAog
I2lmIFBMQVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcjsKIHR5cGVkZWYgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXI7Cit0eXBlZGVmIHN0cnVjdCBfTlNSYW5nZSBOU1JhbmdlOwogI2VsaWYg
VVNFKEFUSykKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlIFdlYktpdEFjY2Vzc2li
bGU7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcjsKQEAgLTU1LDI0ICs1NiwyNSBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIE5vZGU7Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgUmVuZGVy
T2JqZWN0OwotY2xhc3MgUXVhbGlmaWVkTmFtZTsKLWNsYXNzIFBhdGg7Ci1jbGFzcyBXaWRnZXQ7
Ci1jbGFzcyBQYWdlOworY2xhc3MgQVhDb3JlT2JqZWN0OworY2xhc3MgQVhPYmplY3RDYWNoZTsK
K2NsYXNzIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBF
bGVtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBOb2RlOworY2xh
c3MgUGFnZTsKK2NsYXNzIFBhdGg7CitjbGFzcyBRdWFsaWZpZWROYW1lOworY2xhc3MgUmVuZGVy
T2JqZWN0OwogY2xhc3MgU2Nyb2xsVmlldzsKLWNsYXNzIEFYT2JqZWN0Q2FjaGU7Ci1jbGFzcyBB
WENvcmVPYmplY3Q7Ci1jbGFzcyBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzsKK2NsYXNzIFdpZGdl
dDsKKwogc3RydWN0IEFjY2Vzc2liaWxpdHlUZXh0Owogc3RydWN0IFNjcm9sbFJlY3RUb1Zpc2li
bGVPcHRpb25zOwogCi10eXBlZGVmIHNpemVfdCBBWElEOwordXNpbmcgQVhJRCA9IHNpemVfdDsK
IGV4dGVybiBjb25zdCBBWElEIEludmFsaWRBWElEOwogCiBlbnVtIGNsYXNzIEFjY2Vzc2liaWxp
dHlSb2xlIHsKQEAgLTM3MSw3ICszNzMsNyBAQCBlbnVtIGNsYXNzIEFjY2Vzc2liaWxpdHlUZXh0
T3BlcmF0aW9uVHlwZSB7CiB9OwogCiBzdHJ1Y3QgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24g
ewotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiB0ZXh0UmFuZ2VzOyAvLyB0ZXh0IG9uIHdoaWNo
IHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHRleHRSYW5n
ZXM7IC8vIHRleHQgb24gd2hpY2ggcGVyZm9ybSB0aGUgb3BlcmF0aW9uLgogICAgIEFjY2Vzc2li
aWxpdHlUZXh0T3BlcmF0aW9uVHlwZSB0eXBlOwogICAgIFN0cmluZyByZXBsYWNlbWVudFRleHQ7
IC8vIEZvciB0eXBlID0gcmVwbGFjZS4KIApAQCAtNDA0LDEwICs0MDYsNyBAQCBzdHJ1Y3QgQWNj
ZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlIHsKICAgICB7IH0KIH07CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLXR5cGVkZWYgc3RydWN0IF9OU1JhbmdlIE5TUmFuZ2U7Ci0jZW5kaWYKLQor
Ly8gRklYTUU6IE1lcmdlIHRoaXMgd2l0aCBDaGFyYWN0ZXJSYW5nZSAoYnkgZGVsZXRpbmcgdGhp
cyBhbmQgdXNpbmcgQ2hhcmFjdGVyUmFuZ2UgaW5zdGVhZCkuCiBzdHJ1Y3QgUGxhaW5UZXh0UmFu
Z2UgewogICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OwogICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAg
fTsKQEAgLTY2Myw3ICs2NjIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0JvbGRG
b250KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBoYXNJdGFsaWNGb250KCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBoYXNNaXNzcGVsbGluZygpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFJlZlB0cjxSYW5nZT4gZ2V0TWlzc3BlbGxpbmdSYW5nZShSZWZQdHI8UmFuZ2U+IGNv
bnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBib29sIGhhc1BsYWluVGV4dCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgaGFzU2FtZUZvbnQoY29uc3QgQVhDb3JlT2JqZWN0JikgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBoYXNTYW1lRm9udENvbG9yKGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0ID0g
MDsKQEAgLTc4NSw3ICs3ODQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRGVzY2Vu
ZGFudE9mUm9sZShBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3QgPSAwOwogCiAgICAgLy8gVGV4dCBz
ZWxlY3Rpb24KLSAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdl
cyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPFNpbXBsZVJhbmdlPiBmaW5kVGV4dFJhbmdlcyhjb25zdCBBY2Nlc3Np
YmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gcGVyZm9ybVRleHRPcGVyYXRpb24oQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24g
Y29uc3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIEFYQ29yZU9iamVjdCogb2JzZXJ2YWJsZU9iamVj
dCgpIGNvbnN0ID0gMDsKQEAgLTk1NCw3ICs5NTMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JM
aW5lKHVuc2lnbmVkKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8UmFuZ2U+IGVsZW1l
bnRSYW5nZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBl
bGVtZW50UmFuZ2UoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyhjb25zdCBWaXNpYmxl
UG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBWaXNpYmxlUG9zaXRpb25SYW5nZSBwb3NpdGlvbk9mTGVmdFdvcmQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcG9z
aXRpb25PZlJpZ2h0V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCA9IDA7CkBAIC05
NjYsMTEgKzk2NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgbGluZVJhbmdlRm9yUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBS
ZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2Um
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQ
bGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0ID0gMDsKIAotICAgIHZp
cnR1YWwgU3RyaW5nIHN0cmluZ0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4pIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBJbnRS
ZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBpbnQgbGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFNl
bGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBj
b25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDUwZjFiNzgxODU1YjE4OTEyZGI4
YjU3ZmRmYjcyZWU4M2EzNzIyY2IuLjFlZmMwODAyODFmMWQwNjA0NDRiYjc5MTI3N2I2YjI3NGVl
ZDlkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtOTEzLDE1ICs5MTMsMTEgQEAgSW50UG9p
bnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQoKQogICAgICBtYXkg
bm90IGJlbG9uZyB0byB0aGUgbGluayBlbGVtZW50IGFuZCB0aHVzIG1heSBub3QgYWN0aXZhdGUg
dGhlIGxpbmsuCiAgICAgIEhlbmNlLCByZXR1cm4gdGhlIG1pZGRsZSBwb2ludCBvZiB0aGUgZmly
c3QgY2hhcmFjdGVyIGluIHRoZSBsaW5rIGlmIGV4aXN0cy4KICAgICAgKi8KLSAgICBpZiAoUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnRSYW5nZSgpKSB7Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydCA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvbiBlbmQgPSBuZXh0VmlzaWJsZVBvc2l0aW9uKHN0YXJ0KTsKLSAgICAgICAgaWYgKHN0YXJ0
LmlzTnVsbCgpIHx8ICFyYW5nZS0+Y29udGFpbnMoZW5kKSkKLSAgICAgICAgICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJhbmdl
PiBjaGFyUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7Ci0gICAgICAgIEludFJlY3QgcmVj
dCA9IGJvdW5kc0ZvclJhbmdlKGNoYXJSYW5nZSk7Ci0gICAgICAgIHJldHVybiB7IHJlY3QueCgp
ICsgcmVjdC53aWR0aCgpIC8gMiwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMiB9OworICAg
IGlmIChhdXRvIHJhbmdlID0gZWxlbWVudFJhbmdlKCkpIHsKKyAgICAgICAgYXV0byBzdGFydCA9
IFZpc2libGVQb3NpdGlvbiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3Rh
cnQpIH07CisgICAgICAgIGF1dG8gZW5kID0gbmV4dFZpc2libGVQb3NpdGlvbihzdGFydCk7Cisg
ICAgICAgIGlmICghZW5kLmlzTnVsbCgpICYmIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbnRh
aW5zKGVuZCkpCisgICAgICAgICAgICByZXR1cm4geyBib3VuZHNGb3JSYW5nZSh7ICptYWtlQm91
bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0pLmNlbnRlcigpIH07
CiAgICAgfQogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KCk7CiB9
CkBAIC05NDEsOCArOTM3LDcgQEAgSW50UG9pbnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Y2xpY2tQb2ludCgpCiAgICAgCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB2aXNTZWxlY3Rpb24gPSBz
ZWxlY3Rpb24oKTsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IFZpc2libGVQb3Np
dGlvblJhbmdlKHZpc1NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgdmlzU2VsZWN0aW9uLnZpc2li
bGVFbmQoKSk7Ci0gICAgSW50UmVjdCBib3VuZHMgPSBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShyYW5nZSk7Ci0gICAgcmV0dXJuIHsgYm91bmRzLngoKSArIChib3VuZHMud2lkdGgoKSAv
IDIpLCBib3VuZHMueSgpICsgKGJvdW5kcy5oZWlnaHQoKSAvIDIpIH07CisgICAgcmV0dXJuIGJv
dW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKS5jZW50ZXIoKTsKIH0KICAgICAKIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmludGVybmFsTGlu
a0VsZW1lbnQoKSBjb25zdApAQCAtMTY2MSwxNyArMTY1NiwxNSBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdl
JiByYW5nZQogICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYgdGV4dENvbnRyb2wg
PSBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbD4oKm1fcmVuZGVyZXIpLnRleHRGb3JtQ29udHJv
bEVsZW1lbnQoKTsKICAgICAgICAgdGV4dENvbnRyb2wuc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2Uu
c3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBhdXRvIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAg
ICAgQVNTRVJUKG5vZGUoKSk7CisgICAgICAgIGF1dG8mIG5vZGUgPSAqdGhpcy0+bm9kZSgpOwog
ICAgICAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRSYW5nZSgpOwotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hh
cmFjdGVySXRlcmF0b3IoKm5vZGUsIHJhbmdlLnN0YXJ0KTsKLSAgICAgICAgaWYgKCFlbGVtZW50
UmFuZ2UtPmNvbnRhaW5zKHN0YXJ0KSkKLSAgICAgICAgICAgIHN0YXJ0ID0gVmlzaWJsZVBvc2l0
aW9uKGVsZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgCi0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBlbmQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVy
SXRlcmF0b3IoKm5vZGUsIHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgaWYg
KCFlbGVtZW50UmFuZ2UtPmNvbnRhaW5zKGVuZCkpCi0gICAgICAgICAgICBlbmQgPSBWaXNpYmxl
UG9zaXRpb24oZWxlbWVudFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgCisgICAgICAg
IGF1dG8gc3RhcnQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0
b3Iobm9kZSwgcmFuZ2Uuc3RhcnQpOworICAgICAgICBpZiAoIWNyZWF0ZUxpdmVSYW5nZShlbGVt
ZW50UmFuZ2UpLT5jb250YWlucyhzdGFydCkpCisgICAgICAgICAgICBzdGFydCA9IGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKKyAgICAgICAgYXV0byBl
bmQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3Iobm9kZSwg
cmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgpOworICAgICAgICBpZiAoIWNyZWF0ZUxpdmVSYW5n
ZShlbGVtZW50UmFuZ2UpLT5jb250YWlucyhlbmQpKQorICAgICAgICAgICAgZW5kID0gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnRSYW5nZS0+c3RhcnQpOwogICAgICAgICBtX3Jl
bmRlcmVyLT5mcmFtZSgpLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHN0YXJ0LCBlbmQpLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMo
VXNlclRyaWdnZXJlZCkpOwogICAgIH0KICAgICAKQEAgLTIxNjcsMTcgKzIxNjAsMTQgQEAgSW50
UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShjb25zdCBWaXNpYmxlUG8KICAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJl
Y3QyLCAqbWFrZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpKTsKIH0KIAotSW50UmVjdCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSYW5nZShjb25zdCBSZWZQdHI8UmFu
Z2U+IHJhbmdlKSBjb25zdAorSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3Vu
ZHNGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAKICAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IHRoaXMtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwogICAgIAotICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNh
Y2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoKnJhbmdlLCB0cnVlKTsKLSAg
ICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRG
b3JSYW5nZSgqcmFuZ2UsIGZhbHNlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNo
ZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKKyAgICBD
aGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JS
YW5nZShyYW5nZSwgZmFsc2UpOwogICAgIAogICAgIExheW91dFJlY3QgcmVjdDEgPSBjYWNoZS0+
YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChzdGFydCk7CiAgICAgTGF5b3V0
UmVjdCByZWN0MiA9IGNhY2hlLT5hYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0
KGVuZCk7CkBAIC0yMTk1LDcgKzIxODUsNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbgogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhyZWN0MSwgcmVj
dDIsICpyYW5nZSk7CisgICAgcmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgcmFu
Z2UpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzVmlzaWJsZVBvc2l0
aW9uUmFuZ2VJbkRpZmZlcmVudERvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiBy
YW5nZSkgY29uc3QKQEAgLTIyMzAsMTAgKzIyMjAsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQ
b3MKICAgICBpZiAocmFuZ2Uuc3RhcnQgPT0gcmFuZ2UuZW5kKSB7CiAgICAgICAgIHNldFRleHRT
ZWxlY3Rpb25JbnRlbnQoYXhPYmplY3RDYWNoZSgpLCBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxl
Y3Rpb25Nb3ZlKTsKIAotICAgICAgICBhdXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRS
YW5nZSgpOwogICAgICAgICBhdXRvIHN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7Ci0gICAgICAgIGlmIChl
bGVtZW50UmFuZ2UgJiYgIWVsZW1lbnRSYW5nZS0+Y29udGFpbnMoc3RhcnQpKQotICAgICAgICAg
ICAgc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24oZWxlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkp
OworICAgICAgICBpZiAoYXV0byBlbGVtZW50UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKSkg
eworICAgICAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFp
bnMoc3RhcnQpKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGVsZW1lbnRSYW5nZS0+c3RhcnQpOworICAgICAgICB9CiAKICAgICAgICAgbV9yZW5k
ZXJlci0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5tb3ZlVG8oc3RhcnQsIFVzZXJUcmlnZ2VyZWQpOwog
ICAgIH0gZWxzZSB7CkBAIC0yNDE5LDExICsyNDEwLDE0IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiBy
YW5nCiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAotSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldChjb25zdCBQ
bGFpblRleHRSYW5nZSYgcmFuZ2UpIGNvbnN0CitJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IFBsYWlu
VGV4dFJhbmdlJiBjaGFyYWN0ZXJSYW5nZSkgY29uc3QKIHsKLSAgICBpZiAoYWxsb3dzVGV4dFJh
bmdlcygpKQotICAgICAgICByZXR1cm4gYm91bmRzRm9yUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRS
YW5nZShyYW5nZSkpOwotICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKCFhbGxvd3NUZXh0
UmFuZ2VzKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byByYW5nZSA9IHJhbmdlRm9y
UGxhaW5UZXh0UmFuZ2UoY2hhcmFjdGVyUmFuZ2UpOworICAgIGlmICghcmFuZ2UpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgcmV0dXJuIGJvdW5kc0ZvclJhbmdlKCpyYW5nZSk7CiB9CiAKIEFY
Q29yZU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdl
TWFwSGl0VGVzdChIVE1MQXJlYUVsZW1lbnQqIGFyZWEsIGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgKaW5kZXggOTkyMzU3NmVhMzFhMDU3ZGM1M2Q5M2EzM2Y3YjM2
NjdkNWFlYmYxNi4uY2QwYmEyM2VmYTliY2I5YmMzMGQxODlmNmE2NTJhNzEzOGU0YTk0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmgKQEAgLTE2Niw3ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQp
IGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFu
Z2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRS
ZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlOwor
ICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2b2lkIHNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzVmlzaWJsZVBv
c2l0aW9uUmFuZ2VJbkRpZmZlcmVudERvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdl
JikgY29uc3Q7CiAgICAgYm9vbCBoYXNQb3B1cCgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmluZGV4IGQ1ZTJhZTBiMDVjZmM3ZTc3M2M0YmNhMzkz
Nzg0NDFmMjY5MzE3MDQuLmY0OTlmOTk3OWE1NjQ5YTY5YjhhMjUyODAwODBhZDUzODYzMjUzNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmlu
ZGV4IDNiYTNmYTNiNzVjZTQyYTA1NTg1M2I2OGIxNjBhNzhiNTg2N2U4OTMuLjIzNmQ5NzUzOWMz
OWNlNTYzMTdkZjZkM2Y5MWQzYjU3Y2U4YmE1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCkBAIC0yMTI5LDEyICsyMTI5LDEwIEBAIC0gKE5TU3RyaW5nICopc3Ry
aW5nRm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzCiB7CiAgICAgaWYgKCFbc2VsZiBf
cHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczptYXJrZXJz
XTsKKyAgICBhdXRvIHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczptYXJrZXJzXTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBz
ZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpOworICAgIHJldHVybiBz
ZWxmLmF4QmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoKnJhbmdlKTsKIH0KIAogc3RhdGlj
IGludCBibG9ja3F1b3RlTGV2ZWwoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTI0MTEsOSAr
MjQwOSw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBpZiAoIVtzZWxm
IF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJh
bmdlKCk7Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6cmFuZ2VdOworICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOmNyZWF0ZUxpdmVSYW5nZShzZWxmLmF4
QmFja2luZ09iamVjdC0+ZWxlbWVudFJhbmdlKCkpLmdldCgpXTsKIH0KIAogLy8gQSBtZXRob2Qg
dG8gZ2V0IHRoZSBub3JtYWxpemVkIHRleHQgY3Vyc29yIHJhbmdlIG9mIGFuIGVsZW1lbnQuIFVz
ZWQgaW4gRHVtcFJlbmRlclRyZWUuCkBAIC0yNTUxLDggKzI1NDcsMTAgQEAgLSAoTlNTdHJpbmcg
KilzdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQogewogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4g
c2VsZi5heEJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKFtzZWxmIF9jb252ZXJ0VG9ET01S
YW5nZTpyYW5nZV0pOworICAgIGF1dG8gd2ViUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFu
Z2U6cmFuZ2VdOworICAgIGlmICghd2ViUmFuZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
cmV0dXJuIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZSgqd2ViUmFuZ2UpOwog
fQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2UKQEAgLTI2ODUsMTQgKzI2ODMsMTIgQEAgLSAoTlNBcnJheSAqKW1pc3NwZWxs
aW5nVGV4dE1hcmtlclJhbmdlOihOU0FycmF5ICopc3RhcnRUZXh0TWFya2VyUmFuZ2UgZm9yd2Fy
ZDoKIHsKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlID0gW3NlbGYgcmFu
Z2VGb3JUZXh0TWFya2VyczpzdGFydFRleHRNYXJrZXJSYW5nZV07CisgICAgYXV0byBzdGFydFJh
bmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczpzdGFydFRleHRNYXJrZXJSYW5nZV07CiAg
ICAgaWYgKCFzdGFydFJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgUmVmUHRyPFJh
bmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmdldE1pc3NwZWxs
aW5nUmFuZ2Uoc3RhcnRSYW5nZSwKKyAgICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBzZWxmLmF4
QmFja2luZ09iamVjdC0+bWlzc3BlbGxpbmdSYW5nZSgqc3RhcnRSYW5nZSwKICAgICAgICAgZm9y
d2FyZCA/IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246Ok5leHQgOiBBY2Nlc3NpYmlsaXR5
U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91cyk7Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJz
Rm9yUmFuZ2U6bWlzc3BlbGxpbmdSYW5nZV07CisgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJz
Rm9yUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKG1pc3NwZWxsaW5nUmFuZ2UpLmdldCgpXTsKIH0KIAog
LSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiluZXh0TWFya2VyRm9yTWFya2VyOihXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW1hcmtlcgpAQCAtMjcyNCwxNSArMjcyMCwxMyBAQCAt
IChDR1JlY3QpZnJhbWVGb3JUZXh0TWFya2VyczooTlNBcnJheSAqKWFycmF5CiB7CiAgICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUmVj
dFplcm87Ci0KICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIENHUmVj
dFplcm87Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtl
cnM6YXJyYXldOworICAgIGF1dG8gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOmFy
cmF5XTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLSAgICAK
LSAgICBhdXRvIHJlY3QgPSBGbG9hdFJlY3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmJvdW5kc0Zv
clJhbmdlKHJhbmdlKSk7CisgICAgYXV0byByZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmJv
dW5kc0ZvclJhbmdlKCpyYW5nZSk7CiAgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0VG9TcGFj
ZTpyZWN0IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKaW5kZXggZTU2YzI5ZmVkZjA1MTM2MGFmNDhkZmNh
ODQxZWFmMjM2MjUzYmM0ZC4uYjBjMWIwOGUyMTM4ZjU0N2JmMWJmZWE3MzhmODE2ODU2NTIzMmU3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKQEAgLTg5OCw3ICs4OTgsNyBAQCB2b2lk
IEFYSXNvbGF0ZWRPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIHRyZWUtPmFw
cGx5UGVuZGluZ0NoYW5nZXMoKTsKIH0KIAotU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OnN0cmlu
Z0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CitTdHJpbmcgQVhJc29sYXRlZE9i
amVjdDo6c3RyaW5nRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewog
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8U3Ry
aW5nPihbJnJhbmdlLCB0aGlzXSAoKSAtPiBTdHJpbmcgewogICAgICAgICBpZiAoYXV0byogb2Jq
ZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCkBAIC05MDcsMTIgKzkwNywxMiBAQCBTdHJpbmcg
QVhJc29sYXRlZE9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSkgY29u
c3QKICAgICB9KTsKIH0KIAotVmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFYSXNvbGF0ZWRPYmplY3Q6
OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmIGNy
aXRlcmlhKSBjb25zdAorVmVjdG9yPFNpbXBsZVJhbmdlPiBBWElzb2xhdGVkT2JqZWN0OjpmaW5k
VGV4dFJhbmdlcyhjb25zdCBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhJiBjcml0ZXJp
YSkgY29uc3QKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21N
YWluVGhyZWFkPFZlY3RvcjxSZWZQdHI8UmFuZ2U+Pj4oWyZjcml0ZXJpYSwgdGhpc10gKCkgLT4g
VmVjdG9yPFJlZlB0cjxSYW5nZT4+IHsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmll
dmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxTaW1wbGVSYW5nZT4+KFsmY3JpdGVyaWEsIHRo
aXNdICgpIC0+IFZlY3RvcjxTaW1wbGVSYW5nZT4gewogICAgICAgICBpZiAoYXV0byogb2JqZWN0
ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5maW5k
VGV4dFJhbmdlcyhjcml0ZXJpYSk7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRyPFJhbmdl
Pj4oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9i
amVjdC5oCmluZGV4IDU5ODRhMjM2MWJmZDBkNGRiMDMwNDlmMGJkOWU5NDIxOTgxODQ5MjQuLmRk
YjhjYmJmZjU1ODVmYWFjMDQ1NjlkOWZiN2NhYjBlYzVkM2I0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmgKQEAgLTYzNiw3ICs2MzYsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBzdHJpbmdW
YWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lOjpTdHJpbmdWYWx1ZSk7IH0KIAogICAgIC8vIFBhcmFtZXRlcml6ZWQgYXR0cmli
dXRlIHJldHJpZXZhbC4KLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5nZXMo
QWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBjb25zdCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gZmluZFRleHRSYW5nZXMoY29uc3QgQWNjZXNzaWJpbGl0
eVNlYXJjaFRleHRDcml0ZXJpYSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3RvcjxTdHJpbmc+
IHBlcmZvcm1UZXh0T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFy
Y2hDcml0ZXJpYSosIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlOwogCkBA
IC02NTUsNyArNjU1LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvblJhbmdlKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRp
b25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQ
b3NpdGlvblJhbmdlKCk7IH0KLSAgICBSZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
ZWxlbWVudFJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQ
b3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQogICAgIFZp
c2libGVQb3NpdGlvblJhbmdlIHBvc2l0aW9uT2ZMZWZ0V29yZChjb25zdCBWaXNpYmxlUG9zaXRp
b24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAg
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgcG9zaXRpb25PZlJpZ2h0V29yZChjb25zdCBWaXNpYmxl
UG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgp
OyB9CkBAIC02NjYsMTAgKzY2NiwxMCBAQCBwcml2YXRlOgogICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAgICAgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRS
YW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBsaW5lUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5n
ZSgpOyB9Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBs
YWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIFN0
cmluZyBzdHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZTsKKyAgICBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRl
eHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIFN0
cmluZyBzdHJpbmdGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICBJ
bnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KICAgICBp
bnQgbGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbkZvckJvdW5kcyhjb25zdCBJbnRSZWN0JiwgQWNjZXNzaWJpbGl0eVZpc2li
bGVQb3NpdGlvbkZvckJvdW5kcykgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsg
fQpAQCAtNzE3LDcgKzcxNyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBUT0RPOiBGdW5jdGlvbnMK
ICAgICBTdHJpbmcgdGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVu
dE1vZGUgPSBBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoKSkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBSZWZQdHI8UmFuZ2U+IGdldE1pc3NwZWxsaW5n
UmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24p
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gbWlzc3BlbGxpbmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIEFjY2Vzc2liaWxpdHlT
ZWFyY2hEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQog
ICAgIEZsb2F0UmVjdCBjb252ZXJ0RnJhbWVUb1NwYWNlKGNvbnN0IEZsb2F0UmVjdCYsIEFjY2Vz
c2liaWxpdHlDb252ZXJzaW9uU3BhY2UpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVj
dCgpOyB9CiAgICAgdm9pZCBpbmNyZW1lbnQoKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGRlY3Jl
bWVudCgpIG92ZXJyaWRlIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bQppbmRleCA4MTNjOGRlNjk3ZTZiZTQzMjdiM2M4OGI2ZDNlYWRiOTY1NTM3YzcwLi4yNjBjNDky
OGQwMTFmZWY5YTJiZDQ4N2UzMDEwNTVmN2VhYzllNzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtNjkxLDEwICs2OTEsMTEgQEAgc3RhdGljIEFjY2Vzc2li
aWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVy
aXplZEF0dHIKICAgICBOU1N0cmluZyAqcmVwbGFjZW1lbnRTdHJpbmcgPSBbcGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZSBvYmplY3RGb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvblJlcGxh
Y2VtZW50U3RyaW5nXTsKIAogICAgIGlmIChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xhc3M6W05T
QXJyYXkgY2xhc3NdXSkgewotICAgICAgICBzaXplX3QgY291bnQgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1hcmtlclJhbmdlcy5jb3VudCk7Ci0gICAgICAgIG9wZXJhdGlvbi50ZXh0UmFuZ2VzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwotICAgICAgICBmb3IgKGlkIG1hcmtlclJhbmdl
IDogbWFya2VyUmFuZ2VzKQotICAgICAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMuYXBwZW5k
KFtvYmogcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgb3Bl
cmF0aW9uLnRleHRSYW5nZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXJrZXJSYW5nZXMuY291
bnQpOworICAgICAgICBmb3IgKGlkIG1hcmtlclJhbmdlIDogbWFya2VyUmFuZ2VzKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byByYW5nZSA9IFtvYmogcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFy
a2VyUmFuZ2VdKQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbi50ZXh0UmFuZ2VzLmFwcGVuZCgq
cmFuZ2UpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKFtvcGVyYXRpb25UeXBlIGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKQEAgLTM2MjMsMTEgKzM2MjQsMTAgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKIC8vIFRoZSBDRkF0dHJpYnV0ZWRT
dHJpbmdUeXBlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGFjY2Vzc2liaWxpdHkKIC8vIG9iamVjdCB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4g
cmFuZ2UuCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFu
Z2U6KE5TUmFuZ2UpcmFuZ2UKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWRvQVhBdHRyaWJ1dGVk
U3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKIHsKLSAgICBQbGFpblRleHRSYW5nZSB0ZXh0
UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHdlYlJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJhbmdlRm9y
UGxhaW5UZXh0UmFuZ2UodGV4dFJhbmdlKTsKLSAgICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0
ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdl
OndlYlJhbmdlXSBzcGVsbENoZWNrOllFU107CisgICAgYXV0byB3ZWJSYW5nZSA9IHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5yYW5nZUZvclBsYWluVGV4dFJhbmdlKHJhbmdlKTsKKyAgICByZXR1cm4g
W3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZSh3ZWJSYW5nZSldIHNwZWxsQ2hlY2s6
WUVTXTsKIH0KIAogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCkBA
IC0zOTYzLDcgKzM5NjMsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICAgICAgICAgIGlmIChyYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyYW5nZXMsIFsmXSAoYXV0
byYgcmFuZ2UpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3Rl
Y3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZShyYW5nZSld
OwogICAgICAgICAgICAgfSkuYXV0b3JlbGVhc2UoKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAt
NDAzOCw4ICs0MDM4LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5p
bDsKIAotICAgICAgICAgICAgaWYgKGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGJhY2tpbmdPYmpl
Y3QtPmdldE1pc3NwZWxsaW5nUmFuZ2UoY3JpdGVyaWEuZmlyc3QsIGNyaXRlcmlhLnNlY29uZCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZy
b21SYW5nZTptaXNzcGVsbGluZ1JhbmdlXTsKKyAgICAgICAgICAgIGlmIChhdXRvIG1pc3NwZWxs
aW5nUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpjcml0ZXJpYS5maXJz
dCwgY3JpdGVyaWEuc2Vjb25kKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNl
bGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdS
YW5nZSldOwogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgfSk7CiAgICAgfQpAQCAt
NDA3OSw4ICs0MDc5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAK
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZv
clVJRWxlbWVudCJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1
dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdWlFbGVtZW50LCBwcm90ZWN0ZWRT
ZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB1aUVsZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5nZSgpOwot
ICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5n
ZTpyYW5nZV07CisgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJh
bmdlRnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZSh1aUVsZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5n
ZSgpKV07CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDExMSw5ICs0MTEwLDkgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0Vx
dWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSJdKSB7CiAgICAgICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8U3RyaW5nPihb
JnRleHRNYXJrZXJSYW5nZSwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4g
U3RyaW5nIHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2Vs
ZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICAgICAg
YXV0byByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRN
YXJrZXJSYW5nZV07CiAgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7Ci0gICAgICAgICAgICByZXR1cm4gYmFja2luZ09i
amVjdCA/IGJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKSA6IFN0cmluZygpOwor
ICAgICAgICAgICAgcmV0dXJuIChyYW5nZSAmJiBiYWNraW5nT2JqZWN0KSA/IGJhY2tpbmdPYmpl
Y3QtPnN0cmluZ0ZvclJhbmdlKCpyYW5nZSkgOiBTdHJpbmcoKTsKICAgICAgICAgfSk7CiAgICAg
fQogCkBAIC00MTQxLDkgKzQxNDAsMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5n
ZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0KLSAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0
TWFya2VyUmFuZ2VdOwotICAgICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3QoYmFja2lu
Z09iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2Ug
PSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2Vd
OworICAgICAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0
WmVybzsKKyAgICAgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3Qt
PmJvdW5kc0ZvclJhbmdlKCpyYW5nZSkpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRT
ZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpib3VuZHMgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNp
b25TcGFjZTo6U2NyZWVuXTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2
YWx1ZVdpdGhSZWN0OnJlY3RdOwpAQCAtNDE1NCwxOCArNDE1NCwxNSBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3Qg
PSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgICAgIGlmICgh
YmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLQogICAg
ICAgICAgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAg
ICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJv
OwotCiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVy
T2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24sIGJhY2tpbmdPYmplY3QpOwogICAgICAgICAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChy
YW5nZS5sb2NhdGlvbityYW5nZS5sZW5ndGgsIGJhY2tpbmdPYmplY3QpOwotICAgICAgICAgICAg
aWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gQ0dSZWN0WmVybzsKLQogICAgICAgICAgICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZv
clVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICBhdXRv
IGJvdW5kcyA9IEZsb2F0UmVjdChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpKSk7CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBDR1JlY3RaZXJvOworICAgICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJl
Y3QoYmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UoKnJhbmdlKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gW3Byb3RlY3RlZFNlbGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nl
c3NpYmlsaXR5Q29udmVyc2lvblNwYWNlOjpTY3JlZW5dOwogICAgICAgICB9KTsKICAgICAgICAg
cmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CkBAIC00MTgxLDE4ICs0MTc4LDE1
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0
byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0Owog
ICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQogICAgICAgICAgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCk7CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2Fj
aGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uLCBiYWNraW5nT2JqZWN0
KTsKLSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zm
c2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgsIGJhY2tpbmdPYmplY3Qp
OwotICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAgICAgICAgICAgIGF1dG8gc3RhcnQgPSBj
YWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24sIGJhY2tpbmdPYmpl
Y3QpOworICAgICAgICAgICAgYXV0byBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5k
ZXgocmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGgsIGJhY2tpbmdPYmplY3QpOwogICAgICAg
ICAgICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNl
dHMoc3RhcnQsIGVuZCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+c3RyaW5n
Rm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSk7CisgICAgICAgICAgICBpZiAoIXJhbmdl
KQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICByZXR1cm4gYmFja2lu
Z09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoKnJhbmdlKTsKICAgICAgICAgfSk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggNjc4NTQ3MjIwM2I4MWUx
YTFkNWY5NjExNTAxODkxOGRlYjFkNzI2NS4uM2YzNzIzMmM3ZTk1YmEyMDA1MzkxMTA0OWFlODA0
MDI0ZjYxNjc4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAt
OTgyLDEwICs5ODIsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVk
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYQogICAgIExheW91dFJlY3Qg
aW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihjYW5kaWRhdGUucmVjdCwgY2xvc2VzdC5y
ZWN0KTsKICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpICYmICFhcmVFbGVtZW50
c09uU2FtZUxpbmUoY2xvc2VzdCwgY2FuZGlkYXRlKSkgewogICAgICAgICAvLyBJZiAyIG5vZGVz
IGFyZSBpbnRlcnNlY3RpbmcsIGRvIGhpdCB0ZXN0IHRvIGZpbmQgd2hpY2ggbm9kZSBpbiBvbiB0
b3AuCi0gICAgICAgIExheW91dFVuaXQgeCA9IGludGVyc2VjdGlvblJlY3QueCgpICsgaW50ZXJz
ZWN0aW9uUmVjdC53aWR0aCgpIC8gMjsKLSAgICAgICAgTGF5b3V0VW5pdCB5ID0gaW50ZXJzZWN0
aW9uUmVjdC55KCkgKyBpbnRlcnNlY3Rpb25SZWN0LmhlaWdodCgpIC8gMjsKKyAgICAgICAgYXV0
byBjZW50ZXIgPSBmbG9vcmVkSW50UG9pbnQoaW50ZXJzZWN0aW9uUmVjdC5jZW50ZXIoKSk7IC8v
IEZJWE1FOiBXb3VsZCByb3VuZGVkSW50UG9pbnQgYmUgYmV0dGVyPwogICAgICAgICBjb25zdGV4
cHIgT3B0aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpSZXF1ZXN0VHlwZT4gaGl0VHlwZSB7IEhpdFRl
c3RSZXF1ZXN0OjpSZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSwgSGl0VGVzdFJlcXVl
c3Q6Oklnbm9yZUNsaXBwaW5nLCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFk
b3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6QWxsb3dDaGlsZEZyYW1lQ29udGVudCB9OwotICAg
ICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGNhbmRpZGF0ZS52aXNpYmxlTm9kZS0+ZG9jdW1l
bnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBv
aW50KEludFBvaW50KHgsIHkpLCBoaXRUeXBlKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1
bHQgPSBjYW5kaWRhdGUudmlzaWJsZU5vZGUtPmRvY3VtZW50KCkucGFnZSgpLT5tYWluRnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChjZW50ZXIsIGhpdFR5cGUpOwog
ICAgICAgICBpZiAoY2FuZGlkYXRlLnZpc2libGVOb2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJO
b2RlKCkpKSB7CiAgICAgICAgICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOwogICAgICAgICAgICAg
cmV0dXJuOwo=
</data>
<flag name="review"
          id="419455"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404068</attachid>
            <date>2020-07-11 13:48:38 -0700</date>
            <delta_ts>2020-07-11 13:48:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214215-20200711134837.patch</filename>
            <type>text/plain</type>
            <size>78796</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI4NTFiZTkwNTU0ZGMzYmU2ZTZhYjYz
NzVjMjdkZGYzMGM1MGQxNzUuLjljN2YyYWI3ZGUyYzI2NmQzODZlM2JmZDc2OWE3NTU1YzliYzg5
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDctMTEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBsaXZlIHJhbmdlcyBmcm9tIEFjY2Vzc2liaWxp
dHlPYmplY3QuaCwgQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oLCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmgsIEFYSXNvbGF0ZWRPYmplY3QuaAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
U2FtIFdlaW5pZy4KKworICAgICAgICAqIHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oOiBBZGRlZCBh
IG5ldyBtYWtlVmVjdG9yIHRoYXQgdGFrZXMgYSBmdW5jdGlvbi4KKyAgICAgICAgQWxzbyB1cGRh
dGVkIGNyZWF0ZU5TQXJyYXkgdG8gdXNlIHN0ZDo6aW52b2tlLgorCiAyMDIwLTA3LTEwICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBHYW1lQ29udHJvbGxlci5m
cmFtZXdvcmsgZ2FtZXBhZHMgc2hvdWxkIHN1cHBvcnQgSG9tZSBidXR0b25zLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDcyYTEzZDlmYjNkZmJmYjUwMmI3NTMzZWQ2NWJhMjkzMmZmYjU3NzQuLjRmNzA3Zjc1NmJk
NTc1ZTQ0OTNjNTljMGQzNGIyNjc3YTE5MzgwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBA
QAorMjAyMC0wNy0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIGxpdmUgcmFuZ2VzIGZyb20gQWNjZXNzaWJpbGl0eU9iamVjdC5oLCBBY2Nlc3NpYmls
aXR5T2JqZWN0SW50ZXJmYWNlLmgsIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCwgQVhJc29s
YXRlZE9iamVjdC5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTQyMTUKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAg
IEFsc28gdXNlIHRoZSBJbnRQb2ludCBhbmQgTGF5b3V0UG9pbnQgY2VudGVyKCkgZnVuY3Rpb25z
IGluc3RlYWQgb2Ygcm9sbGluZyBvdXIgb3duLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6Om1pc3NwZWxsaW5nUmFuZ2UgY29uc3QpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuIEFsc28K
KyAgICAgICAgcmVuYW1lZCBmcm9tIGdldE1pc3NwZWxsaW5nUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpyYW5nZUNsb3Nlc3RUb1JhbmdlKTogVGFrZSBhbmQgcmV0dXJuIFNpbXBsZVJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nl
c3RUb1JhbmdlSW5EaXJlY3Rpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2Ug
Y29uc3QpOiBUYWtlIGFuZCByZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kVGV4dFJhbmdlcyBjb25zdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cGVyZm9ybVRleHRPcGVyYXRpb24pOiBV
c2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpj
bGlja1BvaW50KTogVXNlIGNlbnRlcigpLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6cmFuZ2VGb3JQbGFpblRleHRSYW5nZSBjb25zdCk6IFJldHVybiBTaW1wbGVSYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdl
IGNvbnN0KTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKTogVXNlIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OnJlcGxhY2VUZXh0SW5SYW5nZSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDogVXBkYXRlIGZvciBhYm92
ZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFj
ZS5oOiBUYWtlIGFuZCByZXR1cm4gU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGlua0NsaWNrUG9pbnQpOiBVc2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjbGlja1BvaW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpz
ZXRTZWxlY3RlZFRleHRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UgY29uc3QpOiBUYWtlIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0
ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdCk6CisgICAgICAgIFVzZSBTaW1wbGVSYW5nZS4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNG
b3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgVXNlIFNpbXBsZVJh
bmdlLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
OiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOiBJbmNsdWRlIFJhbmdlLmguCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3RyaW5nRm9yVGV4dE1h
cmtlcnM6XSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzdHJpbmdGb3JSYW5nZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIG1pc3NwZWxsaW5nVGV4dE1hcmtlclJh
bmdlOmZvcndhcmQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciBmcmFtZUZvclRleHRNYXJrZXJzOl0pOiBEaXR0by4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZE9iamVjdDo6c3RyaW5nRm9yUmFuZ2UgY29uc3QpOiBUYWtlIFNpbXBs
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZmluZFRleHRSYW5n
ZXMgY29uc3QpOiBSZXR1cm4gU2ltcGxlUmFuZ2UuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW06CisgICAgICAgIChhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOiBEaXR0by4KKworICAgICAgICAqIGRvbS9SYW5nZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlUmFuZ2UpOiBBZGRlZC4KKyAgICAgICAg
KiBkb20vUmFuZ2UuaDogQWRkZWQgbWFrZVNpbXBsZVJhbmdlIHNvIHdlIGNhbiBleHBsaWNpdGx5
IGNvbnZlcnQgZnJvbQorICAgICAgICBsaXZlIHJhbmdlcyB0byBzaW1wbGUgcmFuZ2VzLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluZGV4Rm9y
VmlzaWJsZVBvc2l0aW9uKTogVXNlIHNlcGFyYXRlIHJldHVybnMgZm9yIHN0YXJ0IGFuZCBlbmQu
CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyBjb25zdCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVu
dFN0YXJ0IGNvbnN0KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKTogVXNl
IGNlbnRlcigpLgorCiAyMDIwLTA3LTExICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2MDI3Nik6IE92ZXJmbG93IHNjcm9sbGlu
ZyBsYXllcnMgbWlzcGxhY2VkIGluc2lkZSBTVkcgZm9yZWlnbiBvYmplY3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
MTVhODQwZGY3ZWQwMjJkNzEyN2Y2OWQ3ZWQ1NWQ0NTMyNjU0MGQwZC4uYzZhNjYwZmIxNzZiOTBh
MTc1MThkODhkOTEwMTBmNTIxNzJmNmM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAy
MC0wNy0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IGxpdmUgcmFuZ2VzIGZyb20gQWNjZXNzaWJpbGl0eU9iamVjdC5oLCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW50ZXJmYWNlLmgsIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCwgQVhJc29sYXRlZE9i
amVjdC5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTQyMTUKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IFVzZSBuZXN0ZWQgaWYgZm9yIHN0
YXJ0IGFuZCBlbmQKKyAgICAgICAgc28gd2UgZG9uJ3QgZG8gdGhlIHdvcmsgb24gZW5kIGlmIHRo
ZSB0ZXN0IGZhaWxzIG9uIHN0YXJ0LgorCiAyMDIwLTA3LTEwICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFByb21wdCBmb3IgcmVxdWVzdFN0b3Jh
Z2VBY2Nlc3MgaXMgaW52ZXJ0ZWQgaW4gV0tXZWJWaWV3IApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvY29jb2EvVmVjdG9yQ29jb2EuaCBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1ZlY3RvckNv
Y29hLmgKaW5kZXggNjViNTQ2ZTEyMmJiNmU0OGVjMjQ2YzBhNjNmODRiYjE0MmFkMWI2Zi4uMjIx
NDFhMzZmZDFmNjAyNTMzODcyNDg4MzVmYTMyMDdiYzIwZjhjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2EuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oCkBAIC01Miw3ICs1MiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JF
bGVtZW50VHlwZT4gVmVjdG9yPFZlY3RvckVsZW1lbnRUeXBlPiBtYWtlVmVjdG9yKE5TQXJyYQog
Ly8gVGhpcyBvdmVybG9hZCBvZiBjcmVhdGVOU0FycmF5IHRha2VzIGEgZnVuY3Rpb24gdG8gbWFw
IGVhY2ggdmVjdG9yIGVsZW1lbnQgdG8gYW4gT2JqZWN0aXZlLUMgb2JqZWN0LgogLy8gVGhlIG1h
cCBmdW5jdGlvbiBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIHRoZSBtYWtlTlNBcnJheUVsZW1l
bnQgZnVuY3Rpb24gYWJvdmUsIGJ1dCBjYW4gYmUgYW55CiAvLyBmdW5jdGlvbiBpbmNsdWRpbmcg
YSBsYW1iZGEsIGEgZnVuY3Rpb24tbGlrZSBvYmplY3QsIG9yIEZ1bmN0aW9uPD4uCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZSwgdHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBSZXRh
aW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJheShDb2xsZWN0aW9uVHlwZSYmLCBjb25zdCBNYXBG
dW5jdGlvblR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0eXBlbmFt
ZSBNYXBGdW5jdGlvblR5cGU+IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KENvbGxl
Y3Rpb25UeXBlJiYsIE1hcEZ1bmN0aW9uVHlwZSYmKTsKKworLy8gVGhpcyBvdmVybG9hZCBvZiBt
YWtlVmVjdG9yIHRha2VzIGEgZnVuY3Rpb24gdG8gbWFwIGVhY2ggT2JqZWN0aXZlLUMgb2JqZWN0
IHRvIGEgdmVjdG9yIGVsZW1lbnQuCisvLyBDdXJyZW50bHksIHRoZSBtYXAgZnVuY3Rpb24gbmVl
ZHMgdG8gcmV0dXJuIGFuIE9wdGlvbmFsLgordGVtcGxhdGU8dHlwZW5hbWUgTWFwRnVuY3Rpb25U
eXBlPiBWZWN0b3I8dHlwZW5hbWUgc3RkOjppbnZva2VfcmVzdWx0X3Q8TWFwRnVuY3Rpb25UeXBl
LCBpZD46OnZhbHVlX3R5cGU+IG1ha2VWZWN0b3IoTlNBcnJheSAqLCBNYXBGdW5jdGlvblR5cGUm
Jik7CiAKIC8vIEltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uIHRlbXBsYXRl
cyBhYm92ZS4KIApAQCAtNzAsMTEgKzc0LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rp
b25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJheShDb2xsZWN0aW9uVHlwCiAg
ICAgcmV0dXJuIGFycmF5OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZSwg
dHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJh
eShDb2xsZWN0aW9uVHlwZSYmIGNvbGxlY3Rpb24sIGNvbnN0IE1hcEZ1bmN0aW9uVHlwZSYgZnVu
Y3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZSwgdHlwZW5hbWUgTWFwRnVu
Y3Rpb25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJheShDb2xsZWN0aW9uVHlw
ZSYmIGNvbGxlY3Rpb24sIE1hcEZ1bmN0aW9uVHlwZSYmIGZ1bmN0aW9uKQogewogICAgIGF1dG8g
YXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6
c3RkOjpzaXplKGNvbGxlY3Rpb24pXSk7CiAgICAgZm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxl
Y3Rpb24pCi0gICAgICAgIGFkZFVubGVzc05pbChhcnJheS5nZXQoKSwgZ2V0UHRyKGZ1bmN0aW9u
KHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShlbGVtZW50KT4oZWxlbWVudCkpKSk7CisgICAgICAgIGFk
ZFVubGVzc05pbChhcnJheS5nZXQoKSwgZ2V0UHRyKHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxN
YXBGdW5jdGlvblR5cGU+KGZ1bmN0aW9uKSwgc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGVsZW1lbnQp
PihlbGVtZW50KSkpKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKQEAgLTkxLDYgKzk1LDE4IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvckVsZW1lbnRUeXBlPiBWZWN0b3I8VmVjdG9yRWxlbWVu
dFR5cGU+IG1ha2VWZWN0b3IoTlNBcnJhCiAgICAgcmV0dXJuIHZlY3RvcjsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBWZWN0b3I8dHlwZW5hbWUgc3RkOjppbnZva2Vf
cmVzdWx0X3Q8TWFwRnVuY3Rpb25UeXBlLCBpZD46OnZhbHVlX3R5cGU+IG1ha2VWZWN0b3IoTlNB
cnJheSAqYXJyYXksIE1hcEZ1bmN0aW9uVHlwZSYmIGZ1bmN0aW9uKQoreworICAgIFZlY3Rvcjx0
eXBlbmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxNYXBGdW5jdGlvblR5cGUsIGlkPjo6dmFsdWVf
dHlwZT4gdmVjdG9yOworICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFycmF5LmNv
dW50KTsKKyAgICBmb3IgKGlkIGVsZW1lbnQgaW4gYXJyYXkpIHsKKyAgICAgICAgaWYgKGF1dG8g
dmVjdG9yRWxlbWVudCA9IHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxNYXBGdW5jdGlvblR5cGU+
KGZ1bmN0aW9uKSwgZWxlbWVudCkpCisgICAgICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUoKnZlY3RvckVsZW1lbnQpKTsKKyAgICB9CisgICAgdmVjdG9yLnNocmlua1RvRml0
KCk7CisgICAgcmV0dXJuIHZlY3RvcjsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5n
IFdURjo6Y3JlYXRlTlNBcnJheTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDU3YTAxOWRmZmYxYjg2MGM3MzgwNzAy
MDMxNzI4NWExMjE5MjA0MGQuLmM5ZDdkOWE3NGI2M2RlMGExYjAwMDE0MjUzYjBlYzc4MTNhNzQ2
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcApAQCAtMjc0LDI0ICsyNzQsMjQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpoYXNNaXNzcGVsbGluZygpIGNvbnN0CiAgICAgcmV0dXJuIGlzTWlzc3BlbGxlZDsKIH0K
IAotUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRNaXNzcGVsbGluZ1Jhbmdl
KFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9u
IGRpcmVjdGlvbikgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjptaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzdGFydCwgQWNjZXNzaWJp
bGl0eVNlYXJjaERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7CiAgICAgYXV0byBub2RlID0g
dGhpcy0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5k
b2N1bWVudCgpLmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoIXVuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQoZnJhbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEVkaXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRv
cigpOwogCiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyID0gZWRpdG9yLnRleHRD
aGVja2VyKCk7CiAgICAgaWYgKCF0ZXh0Q2hlY2tlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiBtaXNzcGVsbGluZ3M7CiAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKnRleHRDaGVj
a2VyLCBzdHJpbmdWYWx1ZSgpLCBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgbWlzc3BlbGxp
bmdzLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwpAQCAtMzA2LDggKzMwNiw4IEBA
IFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0TWlzc3BlbGxpbmdSYW5nZShS
ZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFyCiAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFu
Z2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmIChtaXNzcGVs
bGluZ1JhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpzdGFy
dCkucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQotICAgICAgICAgICAgICAgIHJldHVybiBtaXNz
cGVsbGluZ1JhbmdlOworICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nUmFuZ2UtPmNvbXBhcmVC
b3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSku
cmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU2lt
cGxlUmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChk
aXJlY3Rpb24gPT0gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXMpIHsKICAg
ICAgICAgZm9yIChhdXRvIHJpdCA9IG1pc3NwZWxsaW5ncy5yYmVnaW4oKTsgcml0ICE9IG1pc3Nw
ZWxsaW5ncy5yZW5kKCk7ICsrcml0KSB7CkBAIC0zMTUsMTIgKzMxNSwxMiBAQCBSZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdl
PiBjb25zdCYgc3RhcgogICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKnN0YXJ0KS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1pc3NwZWxsaW5n
UmFuZ2U7CisgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHN0YXJ0KSkucmVs
ZWFzZVJldHVyblZhbHVlKCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxl
UmFuZ2UoKm1pc3NwZWxsaW5nUmFuZ2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdW5zaWduZWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6YmxvY2txdW90ZUxldmVsKCkgY29uc3QKQEAgLTU2Miw2NyArNTYyLDYz
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3Np
YmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlCiAvLyBSZXR1cm5zIHRoZSByYW5nZSB0aGF0IGlz
IGZld2VyIHBvc2l0aW9ucyBhd2F5IGZyb20gdGhlIHJlZmVyZW5jZSByYW5nZS4KIC8vIE5PVEU6
IFRoZSBhZnRlciByYW5nZSBpcyBleHBlY3RlZCB0byBBQ1RVQUxMWSBiZSBhZnRlciB0aGUgcmVm
ZXJlbmNlIHJhbmdlIGFuZCB0aGUgYmVmb3JlCiAvLyByYW5nZSBpcyBleHBlY3RlZCB0byBBQ1RV
QUxMWSBiZSBiZWZvcmUuIFRoZXNlIGFyZSBub3QgY2hlY2tlZCBmb3IgcGVyZm9ybWFuY2UgcmVh
c29ucy4KLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlQ2xvc2VzdFRvUmFuZ2UoUmVmUHRyPFJh
bmdlPiBjb25zdCYgcmVmZXJlbmNlUmFuZ2UsIFJlZlB0cjxSYW5nZT4mJiBhZnRlclJhbmdlLCBS
ZWZQdHI8UmFuZ2U+JiYgYmVmb3JlUmFuZ2UpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IHJhbmdlQ2xvc2VzdFRvUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJlZmVyZW5jZVJhbmdlLCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4mJiBhZnRlclJhbmdlLCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
JiBiZWZvcmVSYW5nZSkKIHsKLSAgICBpZiAoIXJlZmVyZW5jZVJhbmdlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQogICAgIC8vIFRoZSB0cmVlU2NvcGUgZm9yIHNoYWRvdyBub2RlcyBtYXkg
bm90IGJlIHRoZSBzYW1lIHNjb3BlIGFzIGFub3RoZXIgZWxlbWVudCBpbiBhIGRvY3VtZW50Lgog
ICAgIC8vIENvbXBhcmlzb25zIG1heSBmYWlsIGluIHRoYXQgY2FzZSwgd2hpY2ggYXJlIGV4cGVj
dGVkIGJlaGF2aW9yIGFuZCBzaG91bGQgbm90IGFzc2VydC4KLSAgICBpZiAoYWZ0ZXJSYW5nZSAm
JiAocmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkuaXNOdWxsKCkgfHwgKChhZnRlclJhbmdl
LT5zdGFydFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigq
cmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpKSAmIE5vZGU6OkRPQ1VN
RU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkgPT0gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElT
Q09OTkVDVEVEKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghYWZ0ZXJS
YW5nZSB8fCBhZnRlclJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RP
X1NUQVJULCAqcmVmZXJlbmNlUmFuZ2UpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpID49IDApOwogCi0g
ICAgaWYgKGJlZm9yZVJhbmdlICYmIChyZWZlcmVuY2VSYW5nZS0+c3RhcnRQb3NpdGlvbigpLmlz
TnVsbCgpIHx8ICgoYmVmb3JlUmFuZ2UtPmVuZFBvc2l0aW9uKCkuYW5jaG9yTm9kZSgpLT5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbigqcmVmZXJlbmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5hbmNo
b3JOb2RlKCkpICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSA9PSBOb2Rl
OjpET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgQVNTRVJUKCFiZWZvcmVSYW5nZSB8fCBiZWZvcmVSYW5nZS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKnJlZmVyZW5jZVJhbmdlKS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA8PSAwKTsKKyAgICBpZiAoYWZ0ZXJSYW5nZSAmJiAoYWZ0ZXJSYW5nZS0+
c3RhcnQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5l
bmQuY29udGFpbmVyKSAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgQVNTRVJUKCFhZnRlclJhbmdlIHx8IGNy
ZWF0ZUxpdmVSYW5nZShhZnRlclJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJlZmVyZW5jZVJhbmdlKSkucmVsZWFzZVJl
dHVyblZhbHVlKCkgPj0gMCk7CisKKyAgICBpZiAoYmVmb3JlUmFuZ2UgJiYgKGJlZm9yZVJhbmdl
LT5lbmQuY29udGFpbmVyLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyZWZlcmVuY2VSYW5nZS5z
dGFydC5jb250YWluZXIpICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBBU1NFUlQoIWJlZm9yZVJhbmdlIHx8
IGNyZWF0ZUxpdmVSYW5nZShiZWZvcmVSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6U1RBUlRfVE9fU1RBUlQsIGNyZWF0ZUxpdmVSYW5nZShyZWZlcmVuY2VSYW5nZSkpLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpIDw9IDApOwogCiAgICAgaWYgKCFhZnRlclJhbmdlICYmICFiZWZvcmVS
YW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGFmdGVyUmFuZ2UgJiYgIWJl
Zm9yZVJhbmdlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghYmVmb3Jl
UmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGFmdGVyUmFuZ2UpOwotICAgIGlmICghYWZ0
ZXJSYW5nZSAmJiBiZWZvcmVSYW5nZSkKKyAgICBpZiAoIWFmdGVyUmFuZ2UpCiAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKGJlZm9yZVJhbmdlKTsKLSAgICAKLSAgICB1bnNpZ25lZCBwb3NpdGlvbnNU
b0FmdGVyUmFuZ2UgPSBQb3NpdGlvbjo6cG9zaXRpb25Db3VudEJldHdlZW5Qb3NpdGlvbnMoYWZ0
ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCByZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7
Ci0gICAgdW5zaWduZWQgcG9zaXRpb25zVG9CZWZvcmVSYW5nZSA9IFBvc2l0aW9uOjpwb3NpdGlv
bkNvdW50QmV0d2VlblBvc2l0aW9ucyhiZWZvcmVSYW5nZS0+ZW5kUG9zaXRpb24oKSwgcmVmZXJl
bmNlUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgCi0gICAgcmV0dXJuIHBvc2l0aW9uc1Rv
QWZ0ZXJSYW5nZSA8IHBvc2l0aW9uc1RvQmVmb3JlUmFuZ2UgPyBhZnRlclJhbmdlIDogYmVmb3Jl
UmFuZ2U7CisKKyAgICBhdXRvIHBvc2l0aW9uc1RvQWZ0ZXJSYW5nZSA9IFBvc2l0aW9uOjpwb3Np
dGlvbkNvdW50QmV0d2VlblBvc2l0aW9ucyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYWZ0
ZXJSYW5nZS0+c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmVmZXJlbmNlUmFu
Z2UuZW5kKSk7CisgICAgYXV0byBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID0gUG9zaXRpb246OnBv
c2l0aW9uQ291bnRCZXR3ZWVuUG9zaXRpb25zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihi
ZWZvcmVSYW5nZS0+ZW5kKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJlZmVyZW5jZVJh
bmdlLnN0YXJ0KSk7CisKKyAgICByZXR1cm4gV1RGTW92ZShwb3NpdGlvbnNUb0FmdGVyUmFuZ2Ug
PCBwb3NpdGlvbnNUb0JlZm9yZVJhbmdlID8gYWZ0ZXJSYW5nZSA6IGJlZm9yZVJhbmdlKTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2Vz
dFRvUmFuZ2VJbkRpcmVjdGlvbihSYW5nZSogcmVmZXJlbmNlUmFuZ2UsIEFjY2Vzc2liaWxpdHlT
ZWFyY2hEaXJlY3Rpb24gc2VhcmNoRGlyZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiBjb25zdCYgc2Vh
cmNoU3RyaW5ncykgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihjb25zdCBTaW1wbGVS
YW5nZSYgcmVmZXJlbmNlUmFuZ2UsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24gc2VhcmNo
RGlyZWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoU3RyaW5ncykgY29uc3QKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmICghcmVmZXJlbmNlUmFuZ2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAog
ICAgIGJvb2wgaXNCYWNrd2FyZFNlYXJjaCA9IHNlYXJjaERpcmVjdGlvbiA9PSBBY2Nlc3NpYmls
aXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91czsKICAgICBGaW5kT3B0aW9ucyBmaW5kT3B0aW9u
cyB7IEF0V29yZFN0YXJ0cywgQXRXb3JkRW5kcywgQ2FzZUluc2Vuc2l0aXZlLCBTdGFydEluU2Vs
ZWN0aW9uIH07CiAgICAgaWYgKGlzQmFja3dhcmRTZWFyY2gpCiAgICAgICAgIGZpbmRPcHRpb25z
LmFkZChGaW5kT3B0aW9uRmxhZzo6QmFja3dhcmRzKTsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+
IGNsb3Nlc3RTdHJpbmdSYW5nZSA9IG51bGxwdHI7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWFy
Y2hTdHJpbmcgOiBzZWFyY2hTdHJpbmdzKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNl
YXJjaFN0cmluZ1JhbmdlID0gZnJhbWUtPmVkaXRvcigpLnJhbmdlT2ZTdHJpbmcoc2VhcmNoU3Ry
aW5nLCByZWZlcmVuY2VSYW5nZSwgZmluZE9wdGlvbnMpKSB7CisgICAgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IGNsb3Nlc3RTdHJpbmdSYW5nZTsKKyAgICBmb3IgKGF1dG8mIHNlYXJjaFN0cmluZyA6
IHNlYXJjaFN0cmluZ3MpIHsKKyAgICAgICAgaWYgKGF1dG8gc2VhcmNoU3RyaW5nUmFuZ2UgPSBm
cmFtZS0+ZWRpdG9yKCkucmFuZ2VPZlN0cmluZyhzZWFyY2hTdHJpbmcsIGNyZWF0ZUxpdmVSYW5n
ZShyZWZlcmVuY2VSYW5nZSkucHRyKCksIGZpbmRPcHRpb25zKSkgeworICAgICAgICAgICAgYXV0
byBmb3VuZFN0cmluZ1JhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpzZWFyY2hTdHJpbmdSYW5nZSk7
CiAgICAgICAgICAgICBpZiAoIWNsb3Nlc3RTdHJpbmdSYW5nZSkKLSAgICAgICAgICAgICAgICBj
bG9zZXN0U3RyaW5nUmFuZ2UgPSBzZWFyY2hTdHJpbmdSYW5nZTsKKyAgICAgICAgICAgICAgICBj
bG9zZXN0U3RyaW5nUmFuZ2UgPSBmb3VuZFN0cmluZ1JhbmdlOwogICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgLy8gSWYgc2VhcmNoaW5nIGJhY2t3YXJkLCB1c2UgdGhlIHRyYWls
aW5nIHJhbmdlIGVkZ2VzIHRvIGNvcnJlY3RseSBkZXRlcm1pbmUgd2hpY2gKICAgICAgICAgICAg
ICAgICAvLyByYW5nZSBpcyBjbG9zZXN0LiBTaW1pbGFybHksIGlmIHNlYXJjaGluZyBmb3J3YXJk
LCB1c2UgdGhlIGxlYWRpbmcgcmFuZ2UgZWRnZXMuCi0gICAgICAgICAgICAgICAgUG9zaXRpb24g
Y2xvc2VzdFN0cmluZ1Bvc2l0aW9uID0gaXNCYWNrd2FyZFNlYXJjaCA/IGNsb3Nlc3RTdHJpbmdS
YW5nZS0+ZW5kUG9zaXRpb24oKSA6IGNsb3Nlc3RTdHJpbmdSYW5nZS0+c3RhcnRQb3NpdGlvbigp
OwotICAgICAgICAgICAgICAgIFBvc2l0aW9uIHNlYXJjaFN0cmluZ1Bvc2l0aW9uID0gaXNCYWNr
d2FyZFNlYXJjaCA/IHNlYXJjaFN0cmluZ1JhbmdlLT5lbmRQb3NpdGlvbigpIDogc2VhcmNoU3Ry
aW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBjbG9zZXN0
U3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gY2xvc2VzdFN0cmluZ1JhbmdlLT5l
bmQgOiBjbG9zZXN0U3RyaW5nUmFuZ2UtPnN0YXJ0OworICAgICAgICAgICAgICAgIGF1dG8mIGZv
dW5kU3RyaW5nUG9zaXRpb24gPSBpc0JhY2t3YXJkU2VhcmNoID8gZm91bmRTdHJpbmdSYW5nZS5l
bmQgOiBmb3VuZFN0cmluZ1JhbmdlLnN0YXJ0OwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGludCBjbG9zZXN0UG9zaXRpb25PZmZzZXQgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24u
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAgICAgIGludCBzZWFy
Y2hQb3NpdGlvbk9mZnNldCA9IHNlYXJjaFN0cmluZ1Bvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNv
bnRhaW5lck5vZGUoKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBjbG9zZXN0Q29udGFpbmVyTm9k
ZSA9IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5jb250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICAg
ICAgTm9kZSogc2VhcmNoQ29udGFpbmVyTm9kZSA9IHNlYXJjaFN0cmluZ1Bvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCA9
IGNsb3Nlc3RTdHJpbmdQb3NpdGlvbi5vZmZzZXQ7CisgICAgICAgICAgICAgICAgYXV0byBzZWFy
Y2hQb3NpdGlvbk9mZnNldCA9IGZvdW5kU3RyaW5nUG9zaXRpb24ub2Zmc2V0OworICAgICAgICAg
ICAgICAgIGF1dG8gY2xvc2VzdENvbnRhaW5lck5vZGUgPSBjbG9zZXN0U3RyaW5nUG9zaXRpb24u
Y29udGFpbmVyLnB0cigpOworICAgICAgICAgICAgICAgIGF1dG8gc2VhcmNoQ29udGFpbmVyTm9k
ZSA9IGZvdW5kU3RyaW5nUG9zaXRpb24uY29udGFpbmVyLnB0cigpOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHNob3J0IHJlc3VsdCA9IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQ
b2ludHMoY2xvc2VzdENvbnRhaW5lck5vZGUsIGNsb3Nlc3RQb3NpdGlvbk9mZnNldCwgc2VhcmNo
Q29udGFpbmVyTm9kZSwgc2VhcmNoUG9zaXRpb25PZmZzZXQpLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
OworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhjbG9zZXN0Q29udGFpbmVyTm9kZSwgY2xvc2VzdFBvc2l0aW9uT2Zmc2V0LCBzZWFyY2hD
b250YWluZXJOb2RlLCBzZWFyY2hQb3NpdGlvbk9mZnNldCkucmVsZWFzZVJldHVyblZhbHVlKCk7
CiAgICAgICAgICAgICAgICAgaWYgKCghaXNCYWNrd2FyZFNlYXJjaCAmJiByZXN1bHQgPiAwKSB8
fCAoaXNCYWNrd2FyZFNlYXJjaCAmJiByZXN1bHQgPCAwKSkKLSAgICAgICAgICAgICAgICAgICAg
Y2xvc2VzdFN0cmluZ1JhbmdlID0gc2VhcmNoU3RyaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAg
ICAgIGNsb3Nlc3RTdHJpbmdSYW5nZSA9IGZvdW5kU3RyaW5nUmFuZ2U7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CkBAIC02NDQsODMgKzY0MCw3MyBAQCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UoKSBjb25zdAogICAgIHJl
dHVybiB7IHsgeyBkb2N1bWVudCwgMCB9LCB7IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCi1SZWZQ
dHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CitPcHRp
b25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudFJhbmdlKCkgY29u
c3QKIHsKICAgICBhdXRvIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoQVhPYmplY3RDYWNo
ZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUpKTsKKyAgICByZXR1cm4gQVhPYmplY3RDYWNo
ZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2UoVmVjdG9yPFN0cmluZz4gY29uc3QmIHNlYXJj
aFN0cmluZ3MsIFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNo
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNj
ZXNzaWJpbGl0eU9iamVjdDo6ZmluZFRleHRSYW5nZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2Vh
cmNoU3RyaW5ncywgY29uc3QgU2ltcGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNo
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBmb3Vu
ZDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZm91bmQ7CiAgICAgaWYgKGRpcmVjdGlvbiA9
PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Rm9yd2FyZCkKLSAgICAgICAgZm91
bmQgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFydC5nZXQoKSwg
QWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCwgc2VhcmNoU3RyaW5ncyk7CisgICAg
ICAgIGZvdW5kID0gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oc3RhcnQs
IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246Ok5leHQsIHNlYXJjaFN0cmluZ3MpOwogICAg
IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6
QmFja3dhcmQpCi0gICAgICAgIGZvdW5kID0gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5E
aXJlY3Rpb24oc3RhcnQuZ2V0KCksIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZp
b3VzLCBzZWFyY2hTdHJpbmdzKTsKKyAgICAgICAgZm91bmQgPSByYW5nZU9mU3RyaW5nQ2xvc2Vz
dFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6
UHJldmlvdXMsIHNlYXJjaFN0cmluZ3MpOwogICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBBY2Nl
c3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Q2xvc2VzdCkgewotICAgICAgICBhdXRvIGZv
dW5kQWZ0ZXIgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihzdGFydC5n
ZXQoKSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCwgc2VhcmNoU3RyaW5ncyk7
Ci0gICAgICAgIGF1dG8gZm91bmRCZWZvcmUgPSByYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJ
bkRpcmVjdGlvbihzdGFydC5nZXQoKSwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6UHJl
dmlvdXMsIHNlYXJjaFN0cmluZ3MpOwotICAgICAgICBmb3VuZCA9IHJhbmdlQ2xvc2VzdFRvUmFu
Z2Uoc3RhcnQuZ2V0KCksIFdURk1vdmUoZm91bmRBZnRlciksIFdURk1vdmUoZm91bmRCZWZvcmUp
KTsKKyAgICAgICAgYXV0byBmb3VuZEFmdGVyID0gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1Jhbmdl
SW5EaXJlY3Rpb24oc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246Ok5leHQsIHNl
YXJjaFN0cmluZ3MpOworICAgICAgICBhdXRvIGZvdW5kQmVmb3JlID0gcmFuZ2VPZlN0cmluZ0Ns
b3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rp
b246OlByZXZpb3VzLCBzZWFyY2hTdHJpbmdzKTsKKyAgICAgICAgZm91bmQgPSByYW5nZUNsb3Nl
c3RUb1JhbmdlKHN0YXJ0LCBXVEZNb3ZlKGZvdW5kQWZ0ZXIpLCBXVEZNb3ZlKGZvdW5kQmVmb3Jl
KSk7CiAgICAgfQotCiAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgIC8vIElmIHRoZSBzZWFyY2gg
c3RhcnRlZCB3aXRoaW4gYSB0ZXh0IGNvbnRyb2wsIGVuc3VyZSB0aGF0IHRoZSByZXN1bHQgaXMg
aW5zaWRlIHRoYXQgZWxlbWVudC4KICAgICAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCkt
PmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgICAgIGlmICghZm91bmQtPnN0YXJ0Q29udGFpbmVy
KCkuaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YoZWxlbWVudCgpKQogICAgICAgICAg
ICAgICAgIHx8ICFmb3VuZC0+ZW5kQ29udGFpbmVyKCkuaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNj
ZW5kYW50T2YoZWxlbWVudCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBmb3VuZDsKIH0KIAotVmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29u
c3QmIGNyaXRlcmlhKSBjb25zdAorVmVjdG9yPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpmaW5kVGV4dFJhbmdlcyhjb25zdCBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlh
JiBjcml0ZXJpYSkgY29uc3QKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gcmVzdWx0Owot
Ci0gICAgLy8gRGV0ZXJtaW5lIHN0YXJ0IHJhbmdlLgotICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRS
YW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgaWYgKGNyaXRlcmlh
LnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpTZWxlY3Rpb24pCi0g
ICAgICAgIHN0YXJ0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UoKSk7Cisg
ICAgICAgIHJhbmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKICAgICBlbHNlCi0gICAgICAgIHN0YXJ0
UmFuZ2UgPSBlbGVtZW50UmFuZ2UoKTsKLQotICAgIGlmIChzdGFydFJhbmdlKSB7Ci0gICAgICAg
IC8vIENvbGxhcHNlIHRoZSByYW5nZSB0byB0aGUgc3RhcnQgdW5sZXNzIHNlYXJjaGluZyBmcm9t
IHRoZSBlbmQgb2YgdGhlIGRvYyBvciBzZWFyY2hpbmcgYmFja3dhcmRzLgotICAgICAgICBpZiAo
Y3JpdGVyaWEuc3RhcnQgPT0gQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRTdGFydEZyb206OkJlZ2lu
KQotICAgICAgICAgICAgc3RhcnRSYW5nZS0+Y29sbGFwc2UodHJ1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNyaXRlcmlhLnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpF
bmQpCi0gICAgICAgICAgICBzdGFydFJhbmdlLT5jb2xsYXBzZShmYWxzZSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0YXJ0UmFuZ2UtPmNvbGxhcHNlKGNyaXRlcmlhLmRpcmVjdGlvbiAh
PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6QmFja3dhcmQpOwotICAgIH0gZWxz
ZQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByYW5nZSA9IGVsZW1lbnRSYW5nZSgp
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoY3JpdGVy
aWEuc3RhcnQgPT0gQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRTdGFydEZyb206OkJlZ2luKQorICAg
ICAgICByYW5nZS0+ZW5kID0gcmFuZ2UtPnN0YXJ0OworICAgIGVsc2UgaWYgKGNyaXRlcmlhLnN0
YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpFbmQpCisgICAgICAgIHJh
bmdlLT5zdGFydCA9IHJhbmdlLT5lbmQ7CisgICAgZWxzZSBpZiAoY3JpdGVyaWEuZGlyZWN0aW9u
ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpCYWNrd2FyZCkKKyAgICAgICAg
cmFuZ2UtPnN0YXJ0ID0gcmFuZ2UtPmVuZDsKKyAgICBlbHNlCisgICAgICAgIHJhbmdlLT5lbmQg
PSByYW5nZS0+c3RhcnQ7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGZvdW5kOworICAgIFZlY3RvcjxT
aW1wbGVSYW5nZT4gcmVzdWx0OwogICAgIHN3aXRjaCAoY3JpdGVyaWEuZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Rm9yd2FyZDoKICAgICBj
YXNlIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpCYWNrd2FyZDoKICAgICBjYXNl
IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpDbG9zZXN0OgotICAgICAgICBmb3Vu
ZCA9IGZpbmRUZXh0UmFuZ2UoY3JpdGVyaWEuc2VhcmNoU3RyaW5ncywgc3RhcnRSYW5nZSwgY3Jp
dGVyaWEuZGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKGZvdW5kKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChmb3VuZCk7CisgICAgICAgIGlmIChhdXRvIGZvdW5kUmFuZ2UgPSBmaW5kVGV4dFJh
bmdlKGNyaXRlcmlhLnNlYXJjaFN0cmluZ3MsICpyYW5nZSwgY3JpdGVyaWEuZGlyZWN0aW9uKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKmZvdW5kUmFuZ2UpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpBbGw6IHsKLSAgICAg
ICAgYXV0byBmaW5kQWxsID0gWyZdKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uIGRp
cikgewotICAgICAgICAgICAgZm91bmQgPSBmaW5kVGV4dFJhbmdlKGNyaXRlcmlhLnNlYXJjaFN0
cmluZ3MsIHN0YXJ0UmFuZ2UsIGRpcik7Ci0gICAgICAgICAgICB3aGlsZSAoZm91bmQpIHsKLSAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZvdW5kKTsKLSAgICAgICAgICAgICAgICBmb3Vu
ZCA9IGZpbmRUZXh0UmFuZ2UoY3JpdGVyaWEuc2VhcmNoU3RyaW5ncywgZm91bmQsIGRpcik7Ci0g
ICAgICAgICAgICB9CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6
QWxsOgorICAgICAgICBhdXRvIGFwcGVuZEZvdW5kUmFuZ2VzID0gWyZdKEFjY2Vzc2liaWxpdHlT
ZWFyY2hUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeworICAgICAgICAgICAgZm9yIChhdXRvIGZv
dW5kUmFuZ2UgPSByYW5nZTsgKGZvdW5kUmFuZ2UgPSBmaW5kVGV4dFJhbmdlKGNyaXRlcmlhLnNl
YXJjaFN0cmluZ3MsICpmb3VuZFJhbmdlLCBkaXJlY3Rpb24pKTsgKQorICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoKmZvdW5kUmFuZ2UpOwogICAgICAgICB9OwotICAgICAgICBmaW5kQWxs
KEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAgICAgICAgZmlu
ZEFsbChBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6QmFja3dhcmQpOworICAgICAg
ICBhcHBlbmRGb3VuZFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbjo6Rm9y
d2FyZCk7CisgICAgICAgIGFwcGVuZEZvdW5kUmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0
RGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICB9Ci0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MzYsMTAgKzcyMiwxMCBAQCBWZWN0b3I8U3RyaW5n
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwZXJmb3JtVGV4dE9wZXJhdGlvbihBY2Nlc3NpYmlsaXR5
VGV4dE9wZXJhdAogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgZm9yIChjb25zdCBhdXRv
JiB0ZXh0UmFuZ2UgOiBvcGVyYXRpb24udGV4dFJhbmdlcykgewotICAgICAgICBpZiAoIWZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHRleHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpKQorICAgICAgICBpZiAo
IWZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh0ZXh0
UmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBp
bmc6OlllcykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcgdGV4dCA9
IHRleHRSYW5nZS0+dGV4dCgpOworICAgICAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dCh0ZXh0
UmFuZ2UpOwogICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSBvcGVyYXRpb24ucmVw
bGFjZW1lbnRUZXh0OwogICAgICAgICBib29sIHJlcGxhY2VTZWxlY3Rpb24gPSBmYWxzZTsKICAg
ICAgICAgc3dpdGNoIChvcGVyYXRpb24udHlwZSkgewpAQCAtODQzLDggKzgyOSw3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNNZXRlcigpIGNvbnN0CiAKIEludFBvaW50IEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmNsaWNrUG9pbnQoKQogewotICAgIExheW91dFJlY3QgcmVjdCA9IGVsZW1l
bnRSZWN0KCk7Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChMYXlvdXRQb2ludChyZWN0Lngo
KSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIpKTsKKyAg
ICByZXR1cm4gcm91bmRlZEludFBvaW50KGVsZW1lbnRSZWN0KCkuY2VudGVyKCkpOwogfQogCiBJ
bnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94Rm9yUXVhZHMoUmVuZGVyT2Jq
ZWN0KiBvYmosIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKQEAgLTExODAsMjEgKzEx
NjUsMjEgQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJs
ZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGEKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogfQogCi1SZWZQdHI8UmFuZ2U+
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5U
ZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJh
bmdlKSBjb25zdAogewogICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBnZXRMZW5ndGhGb3JUZXh0
UmFuZ2UoKTsKICAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0ZXh0TGVuZ3Ro
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAvLyBBdm9pZCBzZXR0aW5nIHNlbGVjdGlvbiB0byB1bmVkaXRhYmxlIHBhcmVudCBub2Rl
IGluIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlLiBTZWUgd2Via2l0Lm9yZy9iLzIw
NjA5My4KICAgICBpZiAocmFuZ2UuaXNOdWxsKCkgJiYgIXRleHRMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkgewogICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2Uu
c3RhcnQsIHRoaXMpOwogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJh
Y3Rlck9mZnNldEZvckluZGV4KHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoLCB0aGlzKTsKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFy
YWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlLT5yYW5nZUZv
clVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CiAgICAgfQotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFZpc2libGVQb3NpdGlv
blJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdApAQCAtMTI1OSwxMiArMTI0NCw5
IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQ
b3NpdGlvbihOb2RlKiBub2RlLCBjb25zdCBWCiAgICAgcmV0dXJuIGxpc3RNYXJrZXJUZXh0Rm9y
Tm9kZShub2RlKTsKIH0KIAotU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJh
bmdlKFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CitTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAg
IGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICBUZXh0SXRl
cmF0b3IgaXQoKnJhbmdlKTsKKyAgICBUZXh0SXRlcmF0b3IgaXQocmFuZ2UpOwogICAgIGlmIChp
dC5hdEVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCkBAIC0xMjc0LDggKzEy
NTYsMTAgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdlKFJlZlB0
cjxSYW5nZT4gcmFuZ2UpIGNvbnN0CiAgICAgICAgIGlmIChpdC50ZXh0KCkubGVuZ3RoKCkpIHsK
ICAgICAgICAgICAgIC8vIEFkZCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIGxpc3QgbWFy
a2VyIHRleHQuCiAgICAgICAgICAgICAvLyBEb24ndCBhZGQgbGlzdCBtYXJrZXIgdGV4dCBmb3Ig
bmV3IGxpbmUgY2hhcmFjdGVyLgotICAgICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSAh
PSAxIHx8ICFpc1NwYWNlT3JOZXdsaW5lKGl0LnRleHQoKVswXSkpCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQobGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oaXQubm9kZSgp
LCBWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpKTsKKyAgICAgICAgICAg
IGlmIChpdC50ZXh0KCkubGVuZ3RoKCkgIT0gMSB8fCAhaXNTcGFjZU9yTmV3bGluZShpdC50ZXh0
KClbMF0pKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhlIHBvc2l0
aW9uIHNob3VsZCBiZSBiYXNlZCBvbiBpdC5yYW5nZSgpLCBub3QgcmFuZ2UuCisgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQobGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oaXQu
bm9kZSgpLCBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdl
LnN0YXJ0KSkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0LmFwcGVuZFRleHRUb1N0
cmluZ0J1aWxkZXIoYnVpbGRlcik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoaXQubm9kZSgpKSkKQEAgLTEyODgsMTUgKzEyNzIs
MTUgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ0ZvclJhbmdlKFJlZlB0cjxS
YW5nZT4gcmFuZ2UpIGNvbnN0CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdG
b3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2UpCiB7Ci0gICAgaWYgKHZpc2libGVQb3NpdGlvblJhbmdlLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKKyAgICBpZiAoIXN0YXJ0KQorICAg
ICAgICByZXR1cm4geyB9OworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJs
ZVBvc2l0aW9uUmFuZ2UuZW5kKTsKKyAgICBpZiAoIWVuZCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
bWFrZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0LCB2aXNpYmxlUG9zaXRpb25SYW5n
ZS5lbmQpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAg
IGZvciAoVGV4dEl0ZXJhdG9yIGl0KCpyYW5nZSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkp
IHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdCh7ICpzdGFydCwgKmVuZCB9KTsgIWl0LmF0RW5k
KCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4
dHVhbCBub2RlLCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1l
bnRzIiBpbiBBWCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkgewogICAgICAgICAg
ICAgLy8gQWRkIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBmb3IgbGlzdCBtYXJrZXIgdGV4dC4K
QEAgLTEzMDgsMjIgKzEyOTIsMjMgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmlu
Z0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblIKICAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlcik7CiAgICAg
ICAgIH0KICAgICB9Ci0KICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCiBpbnQg
QWNjZXNzaWJpbGl0eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHZpc2libGVQb3NpdGlvblJhbmdlKSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBNdWx0aS1ieXRlIHN1cHBvcnQKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uUmFu
Z2UuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAtMTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtYWtlUmFuZ2UodmlzaWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQsIHZpc2libGVQb3NpdGlv
blJhbmdlLmVuZCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGF1
dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5zdGFydCk7
CisgICAgaWYgKCFzdGFydCkKKyAgICAgICAgcmV0dXJuIC0xOyAvLyBGSVhNRTogV2h5IG5vdCBy
ZXR1cm4gMD8KKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVQb3NpdGlv
blJhbmdlLmVuZCk7CisgICAgaWYgKCFlbmQpCisgICAgICAgIHJldHVybiAtMTsgLy8gRklYTUU6
IFdoeSBub3QgcmV0dXJuIDA/CiAKKyAgICAvLyBGSVhNRTogVXNlIGNoYXJhY3RlckNvdW50IGlu
c3RlYWQgb2Ygd3JpdGluZyBvdXIgb3duIGxvb3A/CiAgICAgaW50IGxlbmd0aCA9IDA7Ci0gICAg
Zm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkg
eworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQo
KTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIC8vIG5vbi16ZXJvIGxlbmd0aCBtZWFucyB0ZXh0
dWFsIG5vZGUsIHplcm8gbGVuZ3RoIG1lYW5zIHJlcGxhY2VkIG5vZGUgKEFLQSAiYXR0YWNobWVu
dHMiIGluIEFYKQogICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgpKQogICAgICAgICAgICAg
bGVuZ3RoICs9IGl0LnRleHQoKS5sZW5ndGgoKTsKQEAgLTE0NDcsMTQgKzE0MzIsMTYgQEAgVmlz
aWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTZW50ZW5jZUVuZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGkKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBh
IHNlbnRlbmNlIGVuZC4KICAgICBhdXRvIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uLm5leHQoKTsK
LSAgICBhdXRvIGxpbmVSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mTGluZShuZXh0UG9zaXRpb24p
LCBlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAgaWYgKCFsaW5lUmFuZ2UpCisgICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbikpOwor
ICAgIGlmICghc3RhcnQpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChlbmRPZkxpbmUobmV4dFBvc2l0aW9uKSk7CisgICAgaWYgKCFlbmQpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBBbiBlbXB0eSBsaW5lIGlzIGNvbnNpZGVyZWQg
YSBzZW50ZW5jZS4gSWYgaXQncyBza2lwcGVkLCB0aGVuIHRoZSBzZW50ZW5jZSBwYXJzZXIgd2ls
bCBub3QKICAgICAvLyBzZWUgdGhpcyBlbXB0eSBsaW5lLiBJbnN0ZWFkLCByZXR1cm4gdGhlIGVu
ZCBwb3NpdGlvbiBvZiB0aGUgZW1wdHkgbGluZS4KLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
bW9yZSBlZmZpY2llbnQgdG8gdXNlIGhhc0FueVBsYWluVGV4dCBpbnN0ZWFkIG9mIHBsYWluVGV4
dC5pc0VtcHR5LgotICAgIHJldHVybiBwbGFpblRleHQoKmxpbmVSYW5nZSkuaXNFbXB0eSgpID8g
bmV4dFBvc2l0aW9uIDogZW5kT2ZTZW50ZW5jZShuZXh0UG9zaXRpb24pOworICAgIHJldHVybiBo
YXNBbnlQbGFpblRleHQoeyAqc3RhcnQsICplbmQgfSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3Np
dGlvbikgOiBuZXh0UG9zaXRpb247CiB9CiAKIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpwcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvc2l0aW9uKSBjb25zdApAQCAtMTQ2NCwxMyArMTQ1MSwxNSBAQCBWaXNpYmxlUG9zaXRp
b24gQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29u
c3QgVmlzaWJsZQogCiAgICAgLy8gTWFrZSBzdXJlIHdlIG1vdmUgb2ZmIG9mIGEgc2VudGVuY2Ug
c3RhcnQuCiAgICAgYXV0byBwcmV2aW91c1Bvc2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsK
LSAgICBhdXRvIGxpbmVSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mTGluZShwcmV2aW91c1Bvc2l0
aW9uKSwgZW5kT2ZMaW5lKHByZXZpb3VzUG9zaXRpb24pKTsKLSAgICBpZiAoIWxpbmVSYW5nZSkK
KyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZkxpbmUocHJldmlvdXNQ
b3NpdGlvbikpOworICAgIGlmICghc3RhcnQpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0
byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOwor
ICAgIGlmICghZW5kKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gVHJlYXQgZW1wdHkg
bGluZSBhcyBhIHNlcGFyYXRlIHNlbnRlbmNlLgotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBt
b3JlIGVmZmljaWVudCB0byB1c2UgaGFzQW55UGxhaW5UZXh0IGluc3RlYWQgb2YgcGxhaW5UZXh0
LmlzRW1wdHkuCi0gICAgcmV0dXJuIHBsYWluVGV4dCgqbGluZVJhbmdlKS5pc0VtcHR5KCkgPyBw
cmV2aW91c1Bvc2l0aW9uIDogc3RhcnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pOworICAg
IHJldHVybiBoYXNBbnlQbGFpblRleHQoeyAqc3RhcnQsICplbmQgfSkgPyBzdGFydE9mU2VudGVu
Y2UocHJldmlvdXNQb3NpdGlvbikgOiBwcmV2aW91c1Bvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9z
aXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CkBAIC0yMDQzLDcgKzIwMzIsNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VUZXh0SW5SYW5nZShjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjbwogICAgIC8vIEFsc28gb25seSBkbyB0aGlzIHdoZW4gdGhl
IGZpZWxkIGlzIGluIGVkaXRpbmcgbW9kZS4KICAgICBhdXRvJiBmcmFtZSA9IHJlbmRlcmVyKCkt
PmZyYW1lKCk7CiAgICAgaWYgKGVsZW1lbnQuc2hvdWxkVXNlSW5wdXRNZXRob2QoKSkgewotICAg
ICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0
UmFuZ2UocmFuZ2UpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Olllcyk7CisgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpKS5nZXQoKSwg
RE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAg
ICAgICBmcmFtZS5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZW1lbnRT
dHJpbmcsIEVkaXRvcjo6U2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBFZGl0b3I6OlNtYXJ0UmVwbGFj
ZTo6Tm8pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDk1MzhmZTQxNWIz
Zjc5YTdmNTlmMGM5ZjMyOTNhM2M1MGJlZTE4OWEuLjZmOWJmODViODY5ODgwYzlkNWY2NzJiZTNj
MTQzOTcwMTIzNjgyZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNs
dWRlICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMjMyLDcgKzIzMSw3IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0JvbGRGb250KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBib29sIGhhc0l0YWxpY0ZvbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQogICAgIGJvb2wgaGFzTWlzc3BlbGxpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBS
ZWZQdHI8UmFuZ2U+IGdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYgc3Rh
cnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBz
dGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBoYXNQbGFpblRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaGFzU2FtZUZvbnQoY29uc3QgQVhDb3JlT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGhhc1NhbWVGb250Q29sb3IoY29uc3QgQVhDb3JlT2Jq
ZWN0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTM1NiwxMiArMzU1LDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNEZXNjZW5kYW50T2ZSb2xlKEFjY2Vzc2liaWxpdHlSb2xl
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFRleHQgc2VsZWN0aW9uCi1wcml2YXRlOgotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFu
Z2UqLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiBjb25zdCYp
IGNvbnN0OwotICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBzZWxlY3Rpb25SYW5nZSgpIGNvbnN0
OwotICAgIFJlZlB0cjxSYW5nZT4gZmluZFRleHRSYW5nZShWZWN0b3I8U3RyaW5nPiBjb25zdCYg
c2VhcmNoU3RyaW5ncywgUmVmUHRyPFJhbmdlPiBjb25zdCYgc3RhcnQsIEFjY2Vzc2liaWxpdHlT
ZWFyY2hUZXh0RGlyZWN0aW9uKSBjb25zdDsKLXB1YmxpYzoKLSAgICBWZWN0b3I8UmVmUHRyPFJh
bmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBjb25z
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gZmluZFRleHRSYW5n
ZXMoY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1UZXh0T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlU
ZXh0T3BlcmF0aW9uIGNvbnN0Jikgb3ZlcnJpZGU7CiAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQpA
QCAtNTIyLDcgKzUxNiw3IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5n
ZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlv
blJhbmdlKCk7IH0KIAotICAgIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHN0YXRpYyBib29sIHJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKE5vZGUq
IHJlcGxhY2VkTm9kZSk7CiAKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRp
b25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZTsKQEAgLTUzNiwxMiArNTMwLDEyIEBA
IHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZv
clJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgbGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0
UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5n
ZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RhdGljIFN0cmluZyBzdHJpbmdGb3JWaXNpYmxl
UG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpOwotICAgIFN0cmluZyBz
dHJpbmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcg
c3RyaW5nRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICBJ
bnRSZWN0IGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
blJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgSW50UmVj
dCBib3VuZHNGb3JSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBJbnRSZWN0KCk7IH0KKyAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSW50UmVjdCgpOyB9CiAgICAgaW50IGxl
bmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdl
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGUgeyB9CiAKQEAgLTc0
Niw3ICs3NDAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcq
IGFuY2VzdG9yQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcoYm9vbCBpbmNsdWRlU2VsZikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogd2ViQXJlYU9iamVjdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotICAgIHZvaWQgY2xlYXJJc0lnbm9yZWRG
cm9tUGFyZW50RGF0YSgpIG92ZXJyaWRlIHsgbV9pc0lnbm9yZWRGcm9tUGFyZW50RGF0YSA9IEFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSgpOyB9CisgICAgdm9pZCBjbGVhcklz
SWdub3JlZEZyb21QYXJlbnREYXRhKCkgb3ZlcnJpZGUgeyBtX2lzSWdub3JlZEZyb21QYXJlbnRE
YXRhID0geyB9OyB9CiAgICAgdm9pZCBzZXRJc0lnbm9yZWRGcm9tUGFyZW50RGF0YUZvckNoaWxk
KEFYQ29yZU9iamVjdCopIG92ZXJyaWRlOwogCiAgICAgdWludDY0X3Qgc2Vzc2lvbklEKCkgY29u
c3Qgb3ZlcnJpZGU7CkBAIC03NTYsMjEgKzc1MCwxMiBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoK
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KCkgPSBkZWZhdWx0OworCisgICAgLy8gRklYTUU6IE1h
a2UgbW9yZSBvZiB0aGVzZSBtZW1iZXIgZnVuY3Rpb25zIHByaXZhdGUuCisKICAgICB2b2lkIGRl
dGFjaFJlbW90ZVBhcnRzKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkZXRhY2hQbGF0Zm9ybVdyYXBwZXIoQWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBl
KSBvdmVycmlkZTsKIAotICAgIEFYSUQgbV9pZCB7IDAgfTsKLSAgICBBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlQ2hpbGRyZW4g
eyBmYWxzZSB9OwotICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fcm9sZSB7IEFjY2Vzc2liaWxpdHlS
b2xlOjpVbmtub3duIH07Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBtX2xhc3RL
bm93bklzSWdub3JlZFZhbHVlIHsgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVs
dEJlaGF2aW9yIH07Ci0gICAgQWNjZXNzaWJpbGl0eUlzSWdub3JlZEZyb21QYXJlbnREYXRhIG1f
aXNJZ25vcmVkRnJvbVBhcmVudERhdGEgeyB9OwotICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5IHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fc3VidHJlZURpcnR5IHsgZmFsc2UgfTsKLSNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQotICAgIGJvb2wgbV9pc29sYXRlZFRyZWVOb2Rl
SW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0KICAgICB2b2lkIHNldElzSWdub3JlZEZy
b21QYXJlbnREYXRhKEFjY2Vzc2liaWxpdHlJc0lnbm9yZWRGcm9tUGFyZW50RGF0YSYgZGF0YSkg
b3ZlcnJpZGUgeyBtX2lzSWdub3JlZEZyb21QYXJlbnREYXRhID0gZGF0YTsgfQogCiAgICAgdmly
dHVhbCBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQpAQCAtNzkyLDEyICs3NzcsMjggQEAgcHJvdGVjdGVkOgogCiAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcmFkaW9Hcm91cEFuY2VzdG9yKCkgY29uc3Q7CiAKLSNpZiBFTkFCTEUoQUND
RVNTSUJJTElUWSkgJiYgVVNFKEFUSykKICAgICBib29sIGFsbG93c1RleHRSYW5nZXMoKSBjb25z
dDsKICAgICB1bnNpZ25lZCBnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKSBjb25zdDsKLSNlbHNlCi0g
ICAgYm9vbCBhbGxvd3NUZXh0UmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0Q29udHJvbCgp
OyB9Ci0gICAgdW5zaWduZWQgZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4g
dGV4dCgpLmxlbmd0aCgpOyB9CisKK3ByaXZhdGU6CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdl
JiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSBj
b25zdDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gc2VsZWN0aW9uUmFuZ2UoKSBjb25zdDsK
KyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmluZFRleHRSYW5nZShjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgc2VhcmNoU3RyaW5ncywgY29uc3QgU2ltcGxlUmFuZ2UmIHN0YXJ0LCBBY2Nlc3NpYmls
aXR5U2VhcmNoVGV4dERpcmVjdGlvbikgY29uc3Q7CisKKyAgICBBWElEIG1faWQgeyAwIH07Citw
cm90ZWN0ZWQ6IC8vIEZJWE1FOiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgcHJpdmF0ZS4KKyAgICBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKKyAgICBtdXRhYmxlIGJvb2wg
bV9oYXZlQ2hpbGRyZW4geyBmYWxzZSB9OworICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fcm9sZSB7
IEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtub3duIH07Citwcml2YXRlOgorICAgIEFjY2Vzc2liaWxp
dHlPYmplY3RJbmNsdXNpb24gbV9sYXN0S25vd25Jc0lnbm9yZWRWYWx1ZSB7IEFjY2Vzc2liaWxp
dHlPYmplY3RJbmNsdXNpb246OkRlZmF1bHRCZWhhdmlvciB9OworcHJvdGVjdGVkOiAvLyBGSVhN
RTogTWFrZSB0aGUgZGF0YSBtZW1iZXJzIHByaXZhdGUuCisgICAgQWNjZXNzaWJpbGl0eUlzSWdu
b3JlZEZyb21QYXJlbnREYXRhIG1faXNJZ25vcmVkRnJvbVBhcmVudERhdGE7CisgICAgYm9vbCBt
X2NoaWxkcmVuRGlydHkgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdWJ0cmVlRGlydHkgeyBmYWxz
ZSB9OworcHJpdmF0ZToKKyNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQor
ICAgIGJvb2wgbV9pc29sYXRlZFRyZWVOb2RlSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwogI2VuZGlm
CiB9OwogCkBAIC04MDksNiArODEwLDExIEBAIGlubGluZSB2b2lkIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpIHsgfQogaW5saW5lIHZvaWQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZSkg
eyB9CiAjZW5kaWYKIAorI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspKQor
aW5saW5lIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJhbmdlcygpIGNvbnN0
IHsgcmV0dXJuIGlzVGV4dENvbnRyb2woKTsgfQoraW5saW5lIHVuc2lnbmVkIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmdldExlbmd0aEZvclRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHRleHQoKS5s
ZW5ndGgoKTsgfQorI2VuZGlmCisKIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0QWNjZXNzaWJs
ZU9iamVjdEZyb21Ob2RlKGNvbnN0IE5vZGUqLCBjb25zdCBXVEY6OkZ1bmN0aW9uPGJvb2woY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdCYpPiYgaXNBY2Nlc3NpYmxlKTsKIAogbmFtZXNwYWNlIEFj
Y2Vzc2liaWxpdHkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAppbmRleCAwNWRiODY0OTM4MTlkYzVj
ODZmZGViYzE1YmNmZWRiMGM0ZTdkMGM4Li5mN2E2ZTY4YWFiOWNhYzIxMjNkNTBlNmVlMzUyOGVi
NTM1MDczMWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaApAQCAtMjUsMTIgKzI1LDEyIEBACiAK
ICNwcmFnbWEgb25jZQogCisvLyBGSVhNRTogU2hvdWxkIHJlbmFtZSB0aGlzIGZpbGUgQVhDb3Jl
T2JqZWN0LmguCisKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgotI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVmlz
aWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTQyLDYgKzQyLDcgQEAKICNpZiBQTEFURk9STShDT0NP
QSkKIE9CSkNfQ0xBU1MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI7CiB0eXBlZGVmIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyOwor
dHlwZWRlZiBzdHJ1Y3QgX05TUmFuZ2UgTlNSYW5nZTsKICNlbGlmIFVTRShBVEspCiB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZSBXZWJLaXRBY2Nlc3NpYmxlOwogdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdEFjY2Vzc2libGUgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI7CkBAIC01NSwy
NCArNTYsMjUgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBOb2RlOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIFF1
YWxpZmllZE5hbWU7Ci1jbGFzcyBQYXRoOwotY2xhc3MgV2lkZ2V0OwotY2xhc3MgUGFnZTsKK2Ns
YXNzIEFYQ29yZU9iamVjdDsKK2NsYXNzIEFYT2JqZWN0Q2FjaGU7CitjbGFzcyBBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldzsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZy
YW1lOwogY2xhc3MgRnJhbWVWaWV3OworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CitjbGFzcyBQ
YXRoOworY2xhc3MgUXVhbGlmaWVkTmFtZTsKK2NsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNj
cm9sbFZpZXc7Ci1jbGFzcyBBWE9iamVjdENhY2hlOwotY2xhc3MgQVhDb3JlT2JqZWN0OwotY2xh
c3MgQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc7CitjbGFzcyBXaWRnZXQ7CisKIHN0cnVjdCBBY2Nl
c3NpYmlsaXR5VGV4dDsKIHN0cnVjdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9uczsKIAotdHlw
ZWRlZiBzaXplX3QgQVhJRDsKK3VzaW5nIEFYSUQgPSBzaXplX3Q7CiBleHRlcm4gY29uc3QgQVhJ
RCBJbnZhbGlkQVhJRDsKIAogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5Um9sZSB7CkBAIC0zNzEs
NyArMzczLDcgQEAgZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvblR5cGUgewog
fTsKIAogc3RydWN0IEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIHsKLSAgICBWZWN0b3I8UmVm
UHRyPFJhbmdlPj4gdGV4dFJhbmdlczsgLy8gdGV4dCBvbiB3aGljaCBwZXJmb3JtIHRoZSBvcGVy
YXRpb24uCisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiB0ZXh0UmFuZ2VzOyAvLyB0ZXh0IG9uIHdo
aWNoIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KICAgICBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlv
blR5cGUgdHlwZTsKICAgICBTdHJpbmcgcmVwbGFjZW1lbnRUZXh0OyAvLyBGb3IgdHlwZSA9IHJl
cGxhY2UuCiAKQEAgLTQwNCwxMCArNDA2LDcgQEAgc3RydWN0IEFjY2Vzc2liaWxpdHlUZXh0VW5k
ZXJFbGVtZW50TW9kZSB7CiAgICAgeyB9CiB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi10eXBl
ZGVmIHN0cnVjdCBfTlNSYW5nZSBOU1JhbmdlOwotI2VuZGlmCi0KKy8vIEZJWE1FOiBNZXJnZSB0
aGlzIHdpdGggQ2hhcmFjdGVyUmFuZ2UgKGJ5IGRlbGV0aW5nIHRoaXMgYW5kIHVzaW5nIENoYXJh
Y3RlclJhbmdlIGluc3RlYWQpLgogc3RydWN0IFBsYWluVGV4dFJhbmdlIHsKICAgICB1bnNpZ25l
ZCBzdGFydCB7IDAgfTsKICAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07CkBAIC02NjMsNyArNjYy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNCb2xkRm9udCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzSXRhbGljRm9udCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgaGFzTWlzc3BlbGxpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8UmFu
Z2U+IGdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25zdCYgc3RhcnQsIEFjY2Vz
c2liaWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBzdGFydCwg
QWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBoYXNQbGFpblRleHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1NhbWVGb250
KGNvbnN0IEFYQ29yZU9iamVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2Ft
ZUZvbnRDb2xvcihjb25zdCBBWENvcmVPYmplY3QmKSBjb25zdCA9IDA7CkBAIC03ODUsNyArNzg0
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNz
aWJpbGl0eVJvbGUpIGNvbnN0ID0gMDsKIAogICAgIC8vIFRleHQgc2VsZWN0aW9uCi0gICAgdmly
dHVhbCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNl
YXJjaFRleHRDcml0ZXJpYSBjb25zdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxT
aW1wbGVSYW5nZT4gZmluZFRleHRSYW5nZXMoY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRD
cml0ZXJpYSYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1U
ZXh0T3BlcmF0aW9uKEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0JikgPSAwOwogCiAg
ICAgdmlydHVhbCBBWENvcmVPYmplY3QqIG9ic2VydmFibGVPYmplY3QoKSBjb25zdCA9IDA7CkBA
IC05NTQsNyArOTUzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25S
YW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPFJhbmdlPiBlbGVtZW50UmFuZ2UoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgcG9zaXRpb25PZkxlZnRXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHBvc2l0aW9uT2ZSaWdodFdvcmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3QgPSAwOwpAQCAtOTY2LDExICs5NjUsMTEgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIGxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPFJhbmdlPiByYW5n
ZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29u
c3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBzdHJp
bmdGb3JSYW5nZShSZWZQdHI8UmFuZ2U+KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcg
c3RyaW5nRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBJbnRSZWN0IGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvblJhbmdlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZHNGb3JSYW5n
ZShjb25zdCBSZWZQdHI8UmFuZ2U+KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IGJv
dW5kc0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
aW50IGxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJh
bmdlJikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3Np
dGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3QgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAppbmRleCA1MGYxYjc4MTg1NWIxODkxMmRiOGI1N2ZkZmI3MmVlODNhMzcy
MmNiLi5iYjRiYTBkODc4MjNjZDJmODAyMzg5MDcxNzVhMmQ5MWEwMWFiOGU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKQEAgLTkxMywxNSArOTEzLDExIEBAIEludFBvaW50IEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmxpbmtDbGlja1BvaW50KCkKICAgICAgbWF5IG5vdCBiZWxvbmcgdG8gdGhl
IGxpbmsgZWxlbWVudCBhbmQgdGh1cyBtYXkgbm90IGFjdGl2YXRlIHRoZSBsaW5rLgogICAgICBI
ZW5jZSwgcmV0dXJuIHRoZSBtaWRkbGUgcG9pbnQgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0
aGUgbGluayBpZiBleGlzdHMuCiAgICAgICovCi0gICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBlbGVtZW50UmFuZ2UoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSByYW5n
ZS0+c3RhcnRQb3NpdGlvbigpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbmV4dFZp
c2libGVQb3NpdGlvbihzdGFydCk7Ci0gICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8fCAhcmFu
Z2UtPmNvbnRhaW5zKGVuZCkpCi0gICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVj
dDo6Y2xpY2tQb2ludCgpOwotCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gY2hhclJhbmdlID0gbWFr
ZVJhbmdlKHN0YXJ0LCBlbmQpOwotICAgICAgICBJbnRSZWN0IHJlY3QgPSBib3VuZHNGb3JSYW5n
ZShjaGFyUmFuZ2UpOwotICAgICAgICByZXR1cm4geyByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAv
IDIsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIgfTsKKyAgICBpZiAoYXV0byByYW5nZSA9
IGVsZW1lbnRSYW5nZSgpKSB7CisgICAgICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24g
eyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OworICAgICAgICBh
dXRvIGVuZCA9IG5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQpOworICAgICAgICBpZiAoIWVuZC5p
c051bGwoKSAmJiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb250YWlucyhlbmQpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgYm91bmRzRm9yUmFuZ2UoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9KS5jZW50ZXIoKSB9OwogICAgIH0KICAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwogfQpAQCAtOTQxLDggKzkzNyw3
IEBAIEludFBvaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNsaWNrUG9pbnQoKQogICAg
IAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZSh2aXNTZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCksIHZpc1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAgIElu
dFJlY3QgYm91bmRzID0gYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFuZ2UpOwotICAg
IHJldHVybiB7IGJvdW5kcy54KCkgKyAoYm91bmRzLndpZHRoKCkgLyAyKSwgYm91bmRzLnkoKSAr
IChib3VuZHMuaGVpZ2h0KCkgLyAyKSB9OworICAgIHJldHVybiBib3VuZHNGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZShyYW5nZSkuY2VudGVyKCk7CiB9CiAgICAgCiBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbnRlcm5hbExpbmtFbGVtZW50KCkgY29uc3QK
QEAgLTE2NjEsMTcgKzE2NTYsMTUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpz
ZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKICAgICAgICAg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmIHRleHRDb250cm9sID0gZG93bmNhc3Q8UmVuZGVy
VGV4dENvbnRyb2w+KCptX3JlbmRlcmVyKS50ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCk7CiAgICAg
ICAgIHRleHRDb250cm9sLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFy
dCArIHJhbmdlLmxlbmd0aCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBub2RlID0gdGhp
cy0+bm9kZSgpOwotICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgIEFTU0VSVChub2RlKCkp
OworICAgICAgICBhdXRvJiBub2RlID0gKnRoaXMtPm5vZGUoKTsKICAgICAgICAgYXV0byBlbGVt
ZW50UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKCpu
b2RlLCByYW5nZS5zdGFydCk7Ci0gICAgICAgIGlmICghZWxlbWVudFJhbmdlLT5jb250YWlucyhz
dGFydCkpCi0gICAgICAgICAgICBzdGFydCA9IFZpc2libGVQb3NpdGlvbihlbGVtZW50UmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5k
ID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKCpub2RlLCBy
YW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIGlmICghZWxlbWVudFJhbmdlLT5j
b250YWlucyhlbmQpKQotICAgICAgICAgICAgZW5kID0gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnRS
YW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIAorICAgICAgICBhdXRvIHN0YXJ0ID0gdmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdlLnN0
YXJ0KTsKKyAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFp
bnMoc3RhcnQpKQorICAgICAgICAgICAgc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oZWxlbWVudFJhbmdlLT5zdGFydCk7CisgICAgICAgIGF1dG8gZW5kID0gdmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXhVc2luZ0NoYXJhY3Rlckl0ZXJhdG9yKG5vZGUsIHJhbmdlLnN0YXJ0ICsgcmFu
Z2UubGVuZ3RoKTsKKyAgICAgICAgaWYgKCFjcmVhdGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+
Y29udGFpbnMoZW5kKSkKKyAgICAgICAgICAgIGVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihlbGVtZW50UmFuZ2UtPnN0YXJ0KTsKICAgICAgICAgbV9yZW5kZXJlci0+ZnJhbWUoKS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kKSwgRnJh
bWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsK
ICAgICB9CiAgICAgCkBAIC0yMTY3LDI0ICsyMTYwLDIxIEBAIEludFJlY3QgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvCiAgICAgcmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgKm1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKSk7CiB9CiAKLUludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QK
K0ludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7Ci0gICAgCi0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSB0aGlzLT5h
eE9iamVjdENhY2hlKCk7CisgICAgYXV0byBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKICAgICBp
ZiAoIWNhY2hlKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIAotICAgIENoYXJhY3Rl
ck9mZnNldCBzdGFydCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2Uo
KnJhbmdlLCB0cnVlKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPnN0YXJ0T3JF
bmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSgqcmFuZ2UsIGZhbHNlKTsKLSAgICAKLSAgICBMYXlv
dXRSZWN0IHJlY3QxID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZz
ZXQoc3RhcnQpOwotICAgIExheW91dFJlY3QgcmVjdDIgPSBjYWNoZS0+YWJzb2x1dGVDYXJldEJv
dW5kc0ZvckNoYXJhY3Rlck9mZnNldChlbmQpOwotICAgIAotICAgIC8vIHJlYWRqdXN0IGZvciBw
b3NpdGlvbiBhdCB0aGUgZWRnZSBvZiBhIGxpbmUuIFRoaXMgaXMgdG8gZXhjbHVkZSBsaW5lIHJl
Y3QgdGhhdCBkb2Vzbid0IG5lZWQgdG8gYmUgYWNjb3VudGVkIGluIHRoZSByYW5nZSBib3VuZHMu
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHN0YXJ0ID0gY2FjaGUtPnN0YXJ0T3JF
bmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgdHJ1ZSk7CisgICAgYXV0byBlbmQgPSBj
YWNoZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCBmYWxzZSk7CisK
KyAgICBhdXRvIHJlY3QxID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJP
ZmZzZXQoc3RhcnQpOworICAgIGF1dG8gcmVjdDIgPSBjYWNoZS0+YWJzb2x1dGVDYXJldEJvdW5k
c0ZvckNoYXJhY3Rlck9mZnNldChlbmQpOworCisgICAgLy8gUmVhZGp1c3QgZm9yIHBvc2l0aW9u
IGF0IHRoZSBlZGdlIG9mIGEgbGluZS4gVGhpcyBpcyB0byBleGNsdWRlIGxpbmUgcmVjdCB0aGF0
IGRvZXNuJ3QgbmVlZCB0byBiZSBhY2NvdW50ZWQgaW4gdGhlIHJhbmdlIGJvdW5kcy4KICAgICBp
ZiAocmVjdDIueSgpICE9IHJlY3QxLnkoKSkgewotICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5k
T2ZGaXJzdExpbmUgPSBjYWNoZS0+ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKHN0YXJ0KTsKKyAg
ICAgICAgYXV0byBlbmRPZkZpcnN0TGluZSA9IGNhY2hlLT5lbmRDaGFyYWN0ZXJPZmZzZXRPZkxp
bmUoc3RhcnQpOwogICAgICAgICBpZiAoc3RhcnQuaXNFcXVhbChlbmRPZkZpcnN0TGluZSkpIHsK
ICAgICAgICAgICAgIHN0YXJ0ID0gY2FjaGUtPm5leHRDaGFyYWN0ZXJPZmZzZXQoc3RhcnQsIGZh
bHNlKTsKICAgICAgICAgICAgIHJlY3QxID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNGb3JD
aGFyYWN0ZXJPZmZzZXQoc3RhcnQpOwpAQCAtMjE5NCw4ICsyMTg0LDggQEAgSW50UmVjdCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+
IHJhbmdlKSBjb24KICAgICAgICAgICAgIHJlY3QyID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3Vu
ZHNGb3JDaGFyYWN0ZXJPZmZzZXQoZW5kKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqcmFuZ2UpOworCisgICAgcmV0dXJu
IGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgcmFuZ2UpOwogfQogCiBib29sIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmlzVmlzaWJsZVBvc2l0aW9uUmFuZ2VJbkRpZmZlcmVudERvY3Vt
ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTIyMzAsMTAg
KzIyMjAsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZp
c2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3MKICAgICBpZiAocmFuZ2Uuc3RhcnQg
PT0gcmFuZ2UuZW5kKSB7CiAgICAgICAgIHNldFRleHRTZWxlY3Rpb25JbnRlbnQoYXhPYmplY3RD
YWNoZSgpLCBBWFRleHRTdGF0ZUNoYW5nZVR5cGVTZWxlY3Rpb25Nb3ZlKTsKIAotICAgICAgICBh
dXRvIGVsZW1lbnRSYW5nZSA9IHRoaXMtPmVsZW1lbnRSYW5nZSgpOwogICAgICAgICBhdXRvIHN0
YXJ0ID0gcmFuZ2Uuc3RhcnQ7Ci0gICAgICAgIGlmIChlbGVtZW50UmFuZ2UgJiYgIWVsZW1lbnRS
YW5nZS0+Y29udGFpbnMoc3RhcnQpKQotICAgICAgICAgICAgc3RhcnQgPSBWaXNpYmxlUG9zaXRp
b24oZWxlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICBpZiAoYXV0byBlbGVt
ZW50UmFuZ2UgPSB0aGlzLT5lbGVtZW50UmFuZ2UoKSkgeworICAgICAgICAgICAgaWYgKCFjcmVh
dGVMaXZlUmFuZ2UoZWxlbWVudFJhbmdlKS0+Y29udGFpbnMoc3RhcnQpKQorICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnRSYW5nZS0+c3Rh
cnQpOworICAgICAgICB9CiAKICAgICAgICAgbV9yZW5kZXJlci0+ZnJhbWUoKS5zZWxlY3Rpb24o
KS5tb3ZlVG8oc3RhcnQsIFVzZXJUcmlnZ2VyZWQpOwogICAgIH0gZWxzZSB7CkBAIC0yNDE5LDEx
ICsyNDEwLDE0IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWEJvdW5k
c0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nCiAgICAgcmV0dXJuIEludFJlY3Qo
KTsKIH0KIAotSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9y
UmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldChjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UpIGNv
bnN0CitJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5n
ZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IFBsYWluVGV4dFJhbmdlJiBjaGFyYWN0ZXJSYW5n
ZSkgY29uc3QKIHsKLSAgICBpZiAoYWxsb3dzVGV4dFJhbmdlcygpKQotICAgICAgICByZXR1cm4g
Ym91bmRzRm9yUmFuZ2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkpOwotICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgaWYgKCFhbGxvd3NUZXh0UmFuZ2VzKCkpCisgICAgICAgIHJldHVy
biB7IH07CisgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY2hhcmFjdGVy
UmFuZ2UpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJu
IGJvdW5kc0ZvclJhbmdlKCpyYW5nZSk7CiB9CiAKIEFYQ29yZU9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChIVE1MQXJlYUVsZW1l
bnQqIGFyZWEsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKaW5k
ZXggOTkyMzU3NmVhMzFhMDU3ZGM1M2Q5M2EzM2Y3YjM2NjdkNWFlYmYxNi4uY2QwYmEyM2VmYTli
Y2I5YmMzMGQxODlmNmE2NTJhNzEzOGU0YTk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKQEAgLTE2Niw3
ICsxNjYsNyBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0
aW9uUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlOwogICAgIElu
dFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0
IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlOworICAgIEludFJlY3QgYm91bmRzRm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHNldFNlbGVj
dGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25z
dCBvdmVycmlkZTsKICAgICBib29sIGlzVmlzaWJsZVBvc2l0aW9uUmFuZ2VJbkRpZmZlcmVudERv
Y3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Q7CiAgICAgYm9vbCBoYXNQ
b3B1cCgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3Bw
CmluZGV4IGQ1ZTJhZTBiMDVjZmM3ZTc3M2M0YmNhMzkzNzg0NDFmMjY5MzE3MDQuLmY0OTlmOTk3
OWE1NjQ5YTY5YjhhMjUyODAwODBhZDUzODYzMjUzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJIb3N0V2luZG93Lmgi
CiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IDNiYTNmYTNiNzVjZTQyYTA1NTg1
M2I2OGIxNjBhNzhiNTg2N2U4OTMuLjIzNmQ5NzUzOWMzOWNlNTYzMTdkZjZkM2Y5MWQzYjU3Y2U4
YmE1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yMTI5
LDEyICsyMTI5LDEwIEBAIC0gKE5TU3RyaW5nICopc3RyaW5nRm9yVGV4dE1hcmtlcnM6KE5TQXJy
YXkgKiltYXJrZXJzCiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
W3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczptYXJrZXJzXTsKKyAgICBhdXRvIHJhbmdlID0gW3Nl
bGYgcmFuZ2VGb3JUZXh0TWFya2VyczptYXJrZXJzXTsKICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3Ry
aW5nRm9yUmFuZ2UocmFuZ2UpOworICAgIHJldHVybiBzZWxmLmF4QmFja2luZ09iamVjdC0+c3Ry
aW5nRm9yUmFuZ2UoKnJhbmdlKTsKIH0KIAogc3RhdGljIGludCBibG9ja3F1b3RlTGV2ZWwoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTI0MTEsOSArMjQwOSw3IEBAIC0gKE5TQXJyYXkgKil0
ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJhbmdlKCk7Ci0gICAgcmV0dXJuIFtzZWxm
IHRleHRNYXJrZXJzRm9yUmFuZ2U6cmFuZ2VdOworICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
c0ZvclJhbmdlOmNyZWF0ZUxpdmVSYW5nZShzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJh
bmdlKCkpLmdldCgpXTsKIH0KIAogLy8gQSBtZXRob2QgdG8gZ2V0IHRoZSBub3JtYWxpemVkIHRl
eHQgY3Vyc29yIHJhbmdlIG9mIGFuIGVsZW1lbnQuIFVzZWQgaW4gRHVtcFJlbmRlclRyZWUuCkBA
IC0yNTUxLDggKzI1NDcsMTAgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooTlNSYW5n
ZSlyYW5nZQogewogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAg
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZi5heEJhY2tpbmdPYmplY3QtPnN0
cmluZ0ZvclJhbmdlKFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpyYW5nZV0pOworICAgIGF1dG8g
d2ViUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VdOworICAgIGlmICghd2Vi
UmFuZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5zdHJpbmdGb3JSYW5nZSgqd2ViUmFuZ2UpOwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJp
bmcgKilhdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKQEAgLTI2ODUsMTQg
KzI2ODMsMTIgQEAgLSAoTlNBcnJheSAqKW1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlOihOU0Fy
cmF5ICopc3RhcnRUZXh0TWFya2VyUmFuZ2UgZm9yd2FyZDoKIHsKICAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgUmVm
UHRyPFJhbmdlPiBzdGFydFJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczpzdGFydFRl
eHRNYXJrZXJSYW5nZV07CisgICAgYXV0byBzdGFydFJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0
TWFya2VyczpzdGFydFRleHRNYXJrZXJSYW5nZV07CiAgICAgaWYgKCFzdGFydFJhbmdlKQogICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0g
c2VsZi5heEJhY2tpbmdPYmplY3QtPmdldE1pc3NwZWxsaW5nUmFuZ2Uoc3RhcnRSYW5nZSwKKyAg
ICBhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+bWlzc3BlbGxp
bmdSYW5nZSgqc3RhcnRSYW5nZSwKICAgICAgICAgZm9yd2FyZCA/IEFjY2Vzc2liaWxpdHlTZWFy
Y2hEaXJlY3Rpb246Ok5leHQgOiBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpQcmV2aW91
cyk7Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6bWlzc3BlbGxpbmdSYW5n
ZV07CisgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdl
KG1pc3NwZWxsaW5nUmFuZ2UpLmdldCgpXTsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgKiluZXh0TWFya2VyRm9yTWFya2VyOihXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAq
KW1hcmtlcgpAQCAtMjcyNCwxNSArMjcyMCwxMyBAQCAtIChDR1JlY3QpZnJhbWVGb3JUZXh0TWFy
a2VyczooTlNBcnJheSAqKWFycmF5CiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2li
aWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0KICAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAg
aWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlcnM6YXJyYXldOworICAgIGF1dG8gcmFu
Z2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOmFycmF5XTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLSAgICAKLSAgICBhdXRvIHJlY3QgPSBGbG9hdFJl
Y3Qoc2VsZi5heEJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJhbmdlKHJhbmdlKSk7CisgICAgYXV0
byByZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJhbmdlKCpyYW5nZSk7CiAg
ICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpyZWN0IHNwYWNlOkFjY2Vzc2liaWxp
dHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5j
cHAKaW5kZXggZTU2YzI5ZmVkZjA1MTM2MGFmNDhkZmNhODQxZWFmMjM2MjUzYmM0ZC4uYjBjMWIw
OGUyMTM4ZjU0N2JmMWJmZWE3MzhmODE2ODU2NTIzMmU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9i
amVjdC5jcHAKQEAgLTg5OCw3ICs4OTgsNyBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnVwZGF0
ZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIHRyZWUtPmFwcGx5UGVuZGluZ0NoYW5nZXMoKTsKIH0K
IAotU3RyaW5nIEFYSXNvbGF0ZWRPYmplY3Q6OnN0cmluZ0ZvclJhbmdlKFJlZlB0cjxSYW5nZT4g
cmFuZ2UpIGNvbnN0CitTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6c3RyaW5nRm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAogewogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8U3RyaW5nPihbJnJhbmdlLCB0aGlzXSAoKSAt
PiBTdHJpbmcgewogICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0
KCkpCkBAIC05MDcsMTIgKzkwNywxMiBAQCBTdHJpbmcgQVhJc29sYXRlZE9iamVjdDo6c3RyaW5n
Rm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKICAgICB9KTsKIH0KIAotVmVjdG9y
PFJlZlB0cjxSYW5nZT4+IEFYSXNvbGF0ZWRPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2li
aWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmIGNyaXRlcmlhKSBjb25zdAorVmVjdG9yPFNp
bXBsZVJhbmdlPiBBWElzb2xhdGVkT2JqZWN0OjpmaW5kVGV4dFJhbmdlcyhjb25zdCBBY2Nlc3Np
YmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhJiBjcml0ZXJpYSkgY29uc3QKIHsKLSAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZlY3RvcjxSZWZQdHI8
UmFuZ2U+Pj4oWyZjcml0ZXJpYSwgdGhpc10gKCkgLT4gVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHsK
KyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFZl
Y3RvcjxTaW1wbGVSYW5nZT4+KFsmY3JpdGVyaWEsIHRoaXNdICgpIC0+IFZlY3RvcjxTaW1wbGVS
YW5nZT4gewogICAgICAgICBpZiAoYXV0byogb2JqZWN0ID0gYXNzb2NpYXRlZEFYT2JqZWN0KCkp
CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5maW5kVGV4dFJhbmdlcyhjcml0ZXJpYSk7Ci0g
ICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRyPFJhbmdlPj4oKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5oCmluZGV4IDU5ODRhMjM2MWJm
ZDBkNGRiMDMwNDlmMGJkOWU5NDIxOTgxODQ5MjQuLmRkYjhjYmJmZjU1ODVmYWFjMDQ1NjlkOWZi
N2NhYjBlYzVkM2I0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmgKQEAgLTYzNiw3ICs2MzYs
NyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHN0cmluZ0F0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpTdHJpbmdWYWx1ZSk7
IH0KIAogICAgIC8vIFBhcmFtZXRlcml6ZWQgYXR0cmlidXRlIHJldHJpZXZhbC4KLSAgICBWZWN0
b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRD
cml0ZXJpYSBjb25zdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4g
ZmluZFRleHRSYW5nZXMoY29uc3QgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1UZXh0T3BlcmF0aW9uKEFj
Y2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGNvbnN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5k
TWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2liaWxpdHlTZWFyY2hDcml0ZXJpYSosIEFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciYpIG92ZXJyaWRlOwogCkBAIC02NTUsNyArNjU1LDcgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KICAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KLSAgICBS
ZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxw
dHI7IH0KKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZWxlbWVudFJhbmdlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsgfQogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHBvc2l0
aW9uT2ZMZWZ0V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
cG9zaXRpb25PZlJpZ2h0V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CkBAIC02NjYsMTAgKzY2NiwxMCBA
QCBwcml2YXRlOgogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBWaXNpYmxl
UG9zaXRpb25SYW5nZSgpOyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0
aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSBsaW5lUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIFN0cmluZyBzdHJpbmdGb3JSYW5nZShSZWZQ
dHI8UmFuZ2U+KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFu
Z2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIFN0cmluZyBzdHJpbmdGb3JSYW5nZShjb25z
dCBTaW1wbGVSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgYm91bmRzRm9yVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNv
bnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEludFJlY3QoKTsgfQor
ICAgIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBJbnRSZWN0KCk7IH0KICAgICBpbnQgbGVuZ3RoRm9yVmlzaWJsZVBvc2l0
aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAwOyB9CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckJvdW5kcyhj
b25zdCBJbnRSZWN0JiwgQWNjZXNzaWJpbGl0eVZpc2libGVQb3NpdGlvbkZvckJvdW5kcykgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQpAQCAtNzE3LDcgKzcxNyw3IEBAIHBy
aXZhdGU6CiAKICAgICAvLyBUT0RPOiBGdW5jdGlvbnMKICAgICBTdHJpbmcgdGV4dFVuZGVyRWxl
bWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUgPSBBY2Nlc3NpYmlsaXR5VGV4
dFVuZGVyRWxlbWVudE1vZGUoKSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0K
LSAgICBSZWZQdHI8UmFuZ2U+IGdldE1pc3NwZWxsaW5nUmFuZ2UoUmVmUHRyPFJhbmdlPiBjb25z
dCYsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYsIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24pIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogICAgIEZsb2F0UmVjdCBjb252ZXJ0RnJh
bWVUb1NwYWNlKGNvbnN0IEZsb2F0UmVjdCYsIEFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Up
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAgICAgdm9pZCBpbmNyZW1l
bnQoKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGRlY3JlbWVudCgpIG92ZXJyaWRlIHsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA4MTNjOGRlNjk3ZTZiZTQz
MjdiM2M4OGI2ZDNlYWRiOTY1NTM3YzcwLi5hNmI3YWUzNWE4MTQ5ODgwNGMwZjNkZDA3ZjUxMzYz
MGNiYTE1ZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAt
NjgyLDcgKzY4Miw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGFj
Y2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWFGb3JQYXJhbWV0CiAgICAgcmV0dXJuIGNyaXRl
cmlhOwogfQogCi1zdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0
eVRleHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKFdlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyICpvYmosIGNvbnN0IE5TRGljdGlvbmFyeSAqcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSkKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4
dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgKndyYXBwZXIsIGNvbnN0IE5TRGljdGlvbmFyeSAqcGFyYW1ldGVyaXplZEF0dHJp
YnV0ZSkKIHsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiBvcGVyYXRpb247CiAKQEAg
LTY5MSwxMCArNjkxLDkgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vz
c2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXplZEF0dHIKICAgICBOU1N0cmluZyAq
cmVwbGFjZW1lbnRTdHJpbmcgPSBbcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSBvYmplY3RGb3JLZXk6
TlNBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvblJlcGxhY2VtZW50U3RyaW5nXTsKIAogICAgIGlm
IChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkgewotICAgICAg
ICBzaXplX3QgY291bnQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1hcmtlclJhbmdlcy5jb3VudCk7
Ci0gICAgICAgIG9wZXJhdGlvbi50ZXh0UmFuZ2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291
bnQpOwotICAgICAgICBmb3IgKGlkIG1hcmtlclJhbmdlIDogbWFya2VyUmFuZ2VzKQotICAgICAg
ICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMuYXBwZW5kKFtvYmogcmFuZ2VGb3JUZXh0TWFya2Vy
UmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMgPSBtYWtl
VmVjdG9yKG1hcmtlclJhbmdlcywgW3dyYXBwZXJdIChpZCBtYXJrZXJSYW5nZSkgeworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShbd3JhcHBlciByYW5nZUZvclRleHRNYXJrZXJS
YW5nZTptYXJrZXJSYW5nZV0pOworICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAoW29wZXJh
dGlvblR5cGUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkgewpAQCAtMzYyMywxMSAr
MzYyMiwxMCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogLy8gVGhl
IENGQXR0cmlidXRlZFN0cmluZ1R5cGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHQgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgYWNjZXNzaWJpbGl0eQogLy8gb2JqZWN0IHRoYXQgaXMgc3BlY2lmaWVk
IGJ5IHRoZSBnaXZlbiByYW5nZS4KLS0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJpYnV0
ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQorLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
ZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIFBsYWlu
VGV4dFJhbmdlIHRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5n
ZS5sZW5ndGgpOwotICAgIFJlZlB0cjxSYW5nZT4gd2ViUmFuZ2UgPSBzZWxmLmF4QmFja2luZ09i
amVjdC0+cmFuZ2VGb3JQbGFpblRleHRSYW5nZSh0ZXh0UmFuZ2UpOwotICAgIHJldHVybiBbc2Vs
ZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2Vy
UmFuZ2VGcm9tUmFuZ2U6d2ViUmFuZ2VdIHNwZWxsQ2hlY2s6WUVTXTsKKyAgICBhdXRvIHdlYlJh
bmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2Up
OworICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHdlYlJhbmdl
KV0gc3BlbGxDaGVjazpZRVNdOwogfQogCiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihS
YW5nZSopcmFuZ2UKQEAgLTM5NjMsNyArMzk2MSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVN
RU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKHJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJh
bmdlcywgWyZdIChhdXRvJiByYW5nZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBbcHJvdGVj
dGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOworICAgICAgICAgICAgICAg
IHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKV07CiAgICAgICAgICAgICB9KS5hdXRvcmVsZWFzZSgpOwogICAgICAgICB9
KTsKICAgICB9CkBAIC00MDM4LDggKzQwMzYsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgICAgICBpZiAoYXV0byBtaXNzcGVsbGluZ1Jhbmdl
ID0gYmFja2luZ09iamVjdC0+Z2V0TWlzc3BlbGxpbmdSYW5nZShjcml0ZXJpYS5maXJzdCwgY3Jp
dGVyaWEuc2Vjb25kKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4
dE1hcmtlclJhbmdlRnJvbVJhbmdlOm1pc3NwZWxsaW5nUmFuZ2VdOworICAgICAgICAgICAgaWYg
KGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IGJhY2tpbmdPYmplY3QtPm1pc3NwZWxsaW5nUmFuZ2Uo
KmNyaXRlcmlhLmZpcnN0LCBjcml0ZXJpYS5zZWNvbmQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdl
KCptaXNzcGVsbGluZ1JhbmdlKV07CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICB9
KTsKICAgICB9CkBAIC00MDc5LDggKzQwNzcsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4
dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50Il0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ1aUVsZW1l
bnQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4g
ewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHVpRWxlbWVudC5nZXQoKS0+ZWxl
bWVudFJhbmdlKCk7Ci0gICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtl
clJhbmdlRnJvbVJhbmdlOnJhbmdlXTsKKyAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2Vs
ZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHVpRWxlbWVudC5nZXQo
KS0+ZWxlbWVudFJhbmdlKCkpXTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC00MTExLDkgKzQx
MDgsOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlIl0p
IHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRo
cmVhZDxTdHJpbmc+KFsmdGV4dE1hcmtlclJhbmdlLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRy
KHNlbGYpXSAoKSAtPiBTdHJpbmcgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07
CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmpl
Y3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKLSAgICAgICAgICAgIHJl
dHVybiBiYWNraW5nT2JqZWN0ID8gYmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2Up
IDogU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm4gKHJhbmdlICYmIGJhY2tpbmdPYmplY3Qp
ID8gYmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoKnJhbmdlKSA6IFN0cmluZygpOwogICAg
ICAgICB9KTsKICAgICB9CiAKQEAgLTQxNDEsOSArNDEzOCwxMCBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBw
cm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgICAgIGlmICghYmFj
a2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLQotICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1h
cmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgICAgICBhdXRvIGJvdW5kcyA9IEZs
b2F0UmVjdChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSkpOworICAgICAgICAg
ICAgYXV0byByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAg
IHJldHVybiBDR1JlY3RaZXJvOworICAgICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9hdFJlY3Qo
YmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UoKnJhbmdlKSk7CiAgICAgICAgICAgICByZXR1
cm4gW3Byb3RlY3RlZFNlbGYgY29udmVydFJlY3RUb1NwYWNlOmJvdW5kcyBzcGFjZTpBY2Nlc3Np
YmlsaXR5Q29udmVyc2lvblNwYWNlOjpTY3JlZW5dOwogICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CkBAIC00MTU0LDE4ICs0MTUyLDE1IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0byog
YmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAg
ICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBDR1Jl
Y3RaZXJvOwotCiAgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdPYmplY3QtPmF4T2Jq
ZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIENHUmVjdFplcm87Ci0KICAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNh
Y2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiwgYmFja2luZ09iamVj
dCk7CiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJhY3Rlck9m
ZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCwgYmFja2luZ09iamVjdCk7
Ci0gICAgICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotCiAgICAgICAgICAgICBhdXRvIHJhbmdlID0g
Y2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKLSAg
ICAgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmJvdW5kc0Zv
clJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkpKTsKKyAgICAgICAgICAgIGlmICghcmFuZ2Up
CisgICAgICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisgICAgICAgICAgICBhdXRvIGJv
dW5kcyA9IEZsb2F0UmVjdChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZSgqcmFuZ2UpKTsK
ICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6Ym91
bmRzIHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiAgICAgICAg
IH0pOwogICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKQEAgLTQx
ODEsMTggKzQxNzYsMTUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJh
Y2tpbmdPYmplY3Q7CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCiAgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZz
ZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24s
IGJhY2tpbmdPYmplY3QpOwotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hl
LT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCwg
YmFja2luZ09iamVjdCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlz
TnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQorICAgICAgICAgICAg
YXV0byBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlv
biwgYmFja2luZ09iamVjdCk7CisgICAgICAgICAgICBhdXRvIGVuZCA9IGNhY2hlLT5jaGFyYWN0
ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aCwgYmFja2luZ09i
amVjdCk7CiAgICAgICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVk
Q2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKLSAgICAgICAgICAgIHJldHVybiBiYWNraW5n
T2JqZWN0LT5zdHJpbmdGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpKTsKKyAgICAgICAg
ICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IHJldHVybiBiYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZSgqcmFuZ2UpOwogICAgICAgICB9
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDdiMGMwNDI3MDQyMjgyMjQwZjc2MGVk
MjlkOTNlZTVmN2NiYTQxOTUuLjliN2ExYTYyMTIxOTVhMmU0NzQ4Y2IyOTcxOTQ0YzE2NjMyODAw
OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTgzMyw2ICsxODMzLDI4IEBAIEZsb2F0UmVjdCBS
YW5nZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9y
PiByZWN0T3B0aW9uCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVjdChDb29yZGluYXRlU3BhY2U6OkFi
c29sdXRlLCByZWN0T3B0aW9ucyk7CiB9CiAKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShj
b25zdCBSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIHsgeyByYW5nZS5zdGFydENvbnRhaW5l
cigpLCByYW5nZS5zdGFydE9mZnNldCgpIH0sIHsgcmFuZ2UuZW5kQ29udGFpbmVyKCksIHJhbmdl
LmVuZE9mZnNldCgpIH0gfTsKK30KKworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0
IFJlZjxSYW5nZT4mIHJhbmdlKQoreworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2Uu
Z2V0KCkpOworfQorCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0
IFJhbmdlKiByYW5nZSkKK3sKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoKnJhbmdlKTsKK30KKworT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+JiByYW5n
ZSkKK3sKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKHJhbmdlLmdldCgpKTsKK30KKwogUmVm
PFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAg
IHJldHVybiBSYW5nZTo6Y3JlYXRlKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCksIHJhbmdlLnN0YXJ0
LmNvbnRhaW5lci5wdHIoKSwgcmFuZ2Uuc3RhcnQub2Zmc2V0LCByYW5nZS5lbmQuY29udGFpbmVy
LnB0cigpLCByYW5nZS5lbmQub2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggYWNlOTg3M2Q2ODdm
OGJmNTQzMWYxNGIyMjliZjkxMzk4OGUyZTBhZC4uYTg2MTljYjk0NjM0MzRlOGNlODFkMmI4NDdj
MzI1YTAxMjA3ZTExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTE3Niw2ICsxNzYsMTEgQEAgV0VCQ09S
RV9FWFBPUlQgUmVmPFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9kZSYpOwogV0VCQ09SRV9FWFBP
UlQgYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiBXRUJD
T1JFX0VYUE9SVCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqLCBjb25zdCBSYW5nZSop
OwogCitTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmFuZ2UmKTsKK1NpbXBsZVJh
bmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7CitPcHRpb25hbDxTaW1wbGVS
YW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlKik7CitPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mKTsKKwogV0VCQ09SRV9FWFBP
UlQgUmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDQzOGU4MGFlMzY4
YzFhNDdkMGY5YjA2NDUwMTgyZGIzMTc4MGZhNjcuLjcwZTdjNDI1MWNkZGYzMTdiNDlkOWFhMmRj
NDJlNmQ0NTQ3YTc0ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC00Niw3ICs0Niw3
IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2Uo
Qm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOwogCiAgICAgLy8gQ29udmVuaWVuY2Ug
b3ZlcmxvYWRzIHRvIGhlbHAgd2l0aCB0cmFuc2l0aW9uIGZyb20gdXNpbmcgYSBsb3Qgb2YgbGl2
ZSByYW5nZXMuCi0gICAgLy8gRklYTUU6IE1vdmUgdG8gdGhlIFJhbmdlIGNsYXNzIGhlYWRlciBh
cyBlaXRoZXIgbWFrZVNpbXBsZVJhbmdlIG9yIFJhbmdlOjpvcGVyYXRvciBTaW1wbGVSYW5nZS4K
KyAgICAvLyBGSVhNRTogT25jZSB0cmFuc2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdl
IGNhbGxlcnMgdG8gdXNlIG1ha2VTaW1wbGVSYW5nZSBpbnN0ZWFkLgogICAgIFdFQkNPUkVfRVhQ
T1JUIFNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiAgICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVm
PFJhbmdlPiYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGU1N2JlZTBi
ZTFlODZkOTBlZGMyNDM0OTE3ZmVhZDVhYzZkZGQ0NGUuLmU3N2YwZDU1MDg3YmFmODFlNzcwNDJm
MTcyYzQ3MGNlZGE5MWRmODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTEw
NSw4ICsxMTA1LDEwIEBAIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgUmVmUHRyPENvbnRhCiAgICAgfQogCiAgICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0
KCkpKTsKKyAgICBpZiAoIXN0YXJ0KQorICAgICAgICByZXR1cm4gMDsKICAgICBhdXRvIGVuZCA9
IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
LSAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgaWYgKCFlbmQpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIFRleHRJdGVy
YXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKQEAgLTExMTYs
OCArMTExOCwxMCBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIFJlZlB0cjxDb250YQogaW50IGluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKIHsKICAgICBhdXRvIHN0YXJ0ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOworICAgIGlmICgh
c3RhcnQpCisgICAgICAgIHJldHVybiAwOwogICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCkpOwotICAgIGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICBpZiAoIWVuZCkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSwg
Zm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8gVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGE4
NWQwODMwYTFlZGI4M2E0NjdkYWQ5OGI5ZjYzNzY2NTdjYzBiZDIuLjgzMjg1NmY2YjJmZmEyM2E1
YjM3Mzk0N2E2MGM3MDA0OTI1Mzg0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTE1OSw4ICsxNTksMTAgQEAgUmVmPFJhbmdlPiBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKENoYXJhY3RlclJhbmdlIHJhbmdlKSBjb25zdAog
RXhjZXB0aW9uT3I8dWludDY0X3Q+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zmc2V0VG8oY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewogICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgaWYgKCFz
dGFydCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogICAgIGF1dG8g
ZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwotICAgIGlmICghc3RhcnQgfHwgIWVu
ZCkKKyAgICBpZiAoIWVuZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9
OwogICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKIH0KQEAgLTIx
Miw4ICsyMTQsMTAgQEAgdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNS
ZXBsYWNlbWVudFN0YXJ0KCkgY29uc3QKICAgICAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxh
Y2VtZW50U3RhcnQ7CiAKICAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdy
YXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9uKCkpOworICAgIGlmICghc3RhcnQpCisgICAgICAgIHJl
dHVybiAwOwogICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9hdXRvbWF0aWNSZXBs
YWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGlmICghc3RhcnQgfHwgIWVuZCkK
KyAgICBpZiAoIWVuZCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBtX2F1dG9tYXRpY1JlcGxh
Y2VtZW50U3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCA2Nzg1NDcyMjAzYjgxZTFhMWQ1Zjk2
MTE1MDE4OTE4ZGViMWQ3MjY1Li4zZjM3MjMyYzdlOTViYTIwMDUzOTExMDQ5YWU4MDQwMjRmNjE2
Nzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC05ODIsMTAg
Kzk4Miw5IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhCiAgICAgTGF5b3V0UmVjdCBpbnRlcnNl
Y3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKGNhbmRpZGF0ZS5yZWN0LCBjbG9zZXN0LnJlY3QpOwog
ICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkgJiYgIWFyZUVsZW1lbnRzT25TYW1l
TGluZShjbG9zZXN0LCBjYW5kaWRhdGUpKSB7CiAgICAgICAgIC8vIElmIDIgbm9kZXMgYXJlIGlu
dGVyc2VjdGluZywgZG8gaGl0IHRlc3QgdG8gZmluZCB3aGljaCBub2RlIGluIG9uIHRvcC4KLSAg
ICAgICAgTGF5b3V0VW5pdCB4ID0gaW50ZXJzZWN0aW9uUmVjdC54KCkgKyBpbnRlcnNlY3Rpb25S
ZWN0LndpZHRoKCkgLyAyOwotICAgICAgICBMYXlvdXRVbml0IHkgPSBpbnRlcnNlY3Rpb25SZWN0
LnkoKSArIGludGVyc2VjdGlvblJlY3QuaGVpZ2h0KCkgLyAyOworICAgICAgICBhdXRvIGNlbnRl
ciA9IGZsb29yZWRJbnRQb2ludChpbnRlcnNlY3Rpb25SZWN0LmNlbnRlcigpKTsgLy8gRklYTUU6
IFdvdWxkIHJvdW5kZWRJbnRQb2ludCBiZSBiZXR0ZXI/CiAgICAgICAgIGNvbnN0ZXhwciBPcHRp
b25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUeXBlIHsgSGl0VGVzdFJlcXVl
c3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlLCBIaXRUZXN0UmVxdWVzdDo6SWdu
b3JlQ2xpcHBpbmcsIEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRl
bnQsIEhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJhbWVDb250ZW50IH07Ci0gICAgICAgIEhp
dFRlc3RSZXN1bHQgcmVzdWx0ID0gY2FuZGlkYXRlLnZpc2libGVOb2RlLT5kb2N1bWVudCgpLnBh
Z2UoKS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50
UG9pbnQoeCwgeSksIGhpdFR5cGUpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGNh
bmRpZGF0ZS52aXNpYmxlTm9kZS0+ZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmV2ZW50
SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KGNlbnRlciwgaGl0VHlwZSk7CiAgICAgICAg
IGlmIChjYW5kaWRhdGUudmlzaWJsZU5vZGUtPmNvbnRhaW5zKHJlc3VsdC5pbm5lck5vZGUoKSkp
IHsKICAgICAgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CiAgICAgICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IDAyNjhlMjdkYjgyNmFmOWQ5MTliMmYyMTY3ZmFhMzRjZTgzOWRkMDkuLjI5Njhm
N2MwYzI0YTVhZDg4MDY1ZGQ4NGRkOGUwYzFjM2JhZWQyOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC00MzAyLDExICs0
MzAyLDExIEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9j
dW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIGlmIChhdXRvIGNvbnRl
eHRSYW5nZSA9IG1ha2VSYW5nZShjb250ZXh0QmVmb3JlU3RhcnQsIGNvbnRleHRBZnRlckVuZCkp
CiAgICAgICAgICAgICBjb250ZXh0LnRleHRSZWN0cyA9IGNoYXJhY3RlclJlY3RzRm9yUmFuZ2Uo
KmNvbnRleHRSYW5nZSwgMCk7CiAgICAgfSBlbHNlIGlmICh3YW50c01hcmtlZFRleHRSZWN0cyAm
JiBjb21wb3NpdGlvblJhbmdlKSB7Ci0gICAgICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludChjb250ZXh0QmVmb3JlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGF1dG8g
ZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigp
KTsKICAgICAgICAgdW5zaWduZWQgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IDA7Ci0gICAgICAg
IGlmIChzdGFydCAmJiBlbmQpCi0gICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0g
V2ViQ29yZTo6cGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsgV1RGTW92ZSgqc3RhcnQpLCBXVEZNb3Zl
KCplbmQpIH0pLmxlbmd0aCgpOworICAgICAgICBpZiAoYXV0byBzdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KGNvbnRleHRCZWZvcmVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSkgeworICAgICAgICAg
ICAgaWYgKGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29tcG9zaXRpb25SYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0g
V2ViQ29yZTo6cGxhaW5UZXh0KFNpbXBsZVJhbmdlIHsgV1RGTW92ZSgqc3RhcnQpLCBXVEZNb3Zl
KCplbmQpIH0pLmxlbmd0aCgpOworICAgICAgICB9CiAgICAgICAgIGNvbnRleHQudGV4dFJlY3Rz
ID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5nZSgqY29tcG9zaXRpb25SYW5nZSwgY29tcG9zaXRpb25T
dGFydE9mZnNldCk7CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>