<?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>233653</bug_id>
          
          <creation_ts>2021-11-30 12:09:54 -0800</creation_ts>
          <short_desc>Add a momentum event synthesizer</short_desc>
          <delta_ts>2021-11-30 18:56:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jonlee</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1818870</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 12:09:54 -0800</bug_when>
    <thetext>Add a momentum event synthesizer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818872</commentid>
    <comment_count>1</comment_count>
      <attachid>445452</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 12:11:59 -0800</bug_when>
    <thetext>Created attachment 445452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818873</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 12:12:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/85571258&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818895</commentid>
    <comment_count>3</comment_count>
      <attachid>445458</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 12:59:44 -0800</bug_when>
    <thetext>Created attachment 445458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818896</commentid>
    <comment_count>4</comment_count>
      <attachid>445459</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 13:03:23 -0800</bug_when>
    <thetext>Created attachment 445459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818931</commentid>
    <comment_count>5</comment_count>
      <attachid>445459</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-11-30 13:58:57 -0800</bug_when>
    <thetext>Comment on attachment 445459
Patch

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

&gt; Source/WebKit/Shared/ScrollingAccelerationCurve.cpp:76
&gt; +        return (4 * std::pow(x, 3) * std::pow(m_gainQuartic, 4)) + (3 * std::pow(x, 2) * std::pow(m_gainCubic, 3)) + (2 * x * std::pow(m_gainParabolic, 2)) + m_gainLinear;

This calls std::pow(m_gainQuartic, 4) and std::pow(m_gainCubic, 3) on each call, but that probably doesn&apos;t matter.

&gt; Source/WebKit/Shared/ScrollingAccelerationCurve.cpp:107
&gt; +    constexpr float cursorScale = 96.f / frameRate;

Any idea where the 96 comes from? The word &quot;cursor&quot; here is confusing.

&gt; Source/WebKit/Shared/ScrollingAccelerationCurve.h:42
&gt; +class ScrollingAccelerationCurve {

AccelerationCurve or DecelerationCurve?

&gt; Source/WebKit/Shared/ScrollingAccelerationCurve.h:50
&gt; +    float accelerationFactor(float);

const

&gt; Source/WebKit/Shared/ScrollingAccelerationCurve.h:73
&gt; +    float evaluateQuartic(float);

const

&gt; Source/WebKit/Shared/ScrollingAccelerationCurve.h:91
&gt; +    // Input parameters.
&gt; +    float m_gainLinear { 0 };
&gt; +    float m_gainParabolic { 0 };
&gt; +    float m_gainCubic { 0 };
&gt; +    float m_gainQuartic { 0 };
&gt; +    float m_tangentSpeedLinear { 0 };
&gt; +    float m_tangentSpeedParabolicRoot { 0 };
&gt; +    float m_resolution { 0 };
&gt; +
&gt; +    // Computed intermediate values.
&gt; +    bool m_hasComputedIntermediateValues { false };
&gt; +    float m_tangentStartX { 0 };
&gt; +    float m_tangentSlope { 0 };
&gt; +    float m_tangentIntercept { 0 };
&gt; +    float m_falloffStartX { 0 };
&gt; +    float m_falloffSlope { 0 };
&gt; +    float m_falloffIntercept { 0 };

You could group these into structs to make the comments obsolete.

&gt; Source/WebKit/Shared/mac/ScrollingAccelerationCurveMac.mm:60
&gt; +static ScrollingAccelerationCurve fromIOHIDCurveArrayWithAcceleration(NSArray *ioHIDCurves, float desiredAcceleration, float resolution)

Can the NSArray * be typed?

&gt; Source/WebKit/Shared/mac/ScrollingAccelerationCurveMac.mm:86
&gt; +std::optional&lt;ScrollingAccelerationCurve&gt; ScrollingAccelerationCurve::fromNativeWheelEvent(const NativeWebWheelEvent&amp; nativeWebWheelEvent)

It&apos;s a bit weird to say that you&apos;re getting a curve from an event. I guess you&apos;re really getting a curve from the device associated with the event, so maybe split this into two functions?

&gt; Source/WebKit/Shared/mac/ScrollingAccelerationCurveMac.mm:93
&gt; +    auto hidEvent = adoptCF(CGEventCopyIOHIDEvent(event.CGEvent));

Is CGEventCopyIOHIDEvent OK with a null CGEvent?

&gt; Source/WebKit/UIProcess/WebPageProxy.h:3167
&gt; +#if ENABLE(MOMENTUM_EVENT_DISPATCHER)
&gt; +    std::optional&lt;ScrollingAccelerationCurve&gt; m_scrollingAccelerationCurve;
&gt; +    std::optional&lt;ScrollingAccelerationCurve&gt; m_lastSentScrollingAccelerationCurve;
&gt; +#endif

Maybe we should bundle these up with:
    std::unique_ptr&lt;WebWheelEventCoalescer&gt; m_wheelEventCoalescer;
    PAL::HysteresisActivity m_wheelEventActivityHysteresis;

into a wheel-event-related helper class.

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:50
&gt; +    stopDisplayLink();

You&apos;re sure this gets hit (no retain cycles?)

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:108
&gt; +    return isMomentumEventDuringSyntheticGesture;

I wish we used an enum value for &quot;did this function handle the event&quot; return values.

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:138
&gt; +    WebWheelEvent syntheticEvent(WebEvent::Wheel, m_currentGesture.initiatingEvent-&gt;position(), m_currentGesture.initiatingEvent-&gt;globalPosition(), appKitAcceleratedDelta, wheelTicks, WebWheelEvent::ScrollByPixelWheelEvent, m_currentGesture.initiatingEvent-&gt;directionInvertedFromDevice(), WebWheelEvent::PhaseNone, phase, true, m_currentGesture.initiatingEvent-&gt;scrollCount(), delta, m_lastIncomingEvent-&gt;modifiers(), time, time, { });

I would be inclined to put one arg on each line

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:172
&gt; +    RELEASE_LOG(ScrollAnimations, &quot;MomentumEventDispatcher saw momentum end phase with total offset %f %f, duration %f (event offset would have been %f %f)&quot;, m_currentGesture.currentOffset.width(), m_currentGesture.currentOffset.height(), (WallTime::now() - m_currentGesture.startTime).seconds(), m_currentGesture.accumulatedEventOffset.width(), m_currentGesture.accumulatedEventOffset.height());

Maybe %.1f since they are all integral right?

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:174
&gt; +    stopDisplayLink();

Is mismatched start/stop a problem, if that ever happens?

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:184
&gt; +    WTF::TextStream stream(WTF::TextStream::LineMode::SingleLine);
&gt; +    stream &lt;&lt; curve;

Should remove this at some point. Maybe a TEMPORARY_LOGGING ifdef or something?

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:222
&gt; +void MomentumEventDispatcher::windowScreenDidChange(WebCore::PageIdentifier pageID, WebCore::PlatformDisplayID displayID)

A bit odd that no argument references a window.

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:415
&gt; +        constexpr float velocityGainA = 2.f / 65536.0f;
&gt; +        constexpr float velocityGainB = 955.f / 65536.0f;
&gt; +        constexpr float velocityConstant = 98369.f / 65536.0f;
&gt; +        constexpr float minimumVelocity = 1.f / 65536.0f;

Use fromFixedPoint()?

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.h:84
&gt; +    void didScrollWithInterval(FloatSize, Seconds);
&gt; +    void didScroll(const WebWheelEvent&amp;);

These aren&apos;t about scrolling (we have no idea if a scroll happened). They are about event processing I think?

&gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.h:93
&gt; +    typedef Deque&lt;Delta, deltaHistoryQueueSize&gt; HistoricalDeltas;
&gt; +    HistoricalDeltas m_deltaHistoryX;
&gt; +    HistoricalDeltas m_deltaHistoryY;

Can we use one deque of struct  { FloatSize, Seconds }?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818936</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 14:06:50 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #5)
&gt; Comment on attachment 445459 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=445459&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/Shared/ScrollingAccelerationCurve.cpp:76
&gt; &gt; +        return (4 * std::pow(x, 3) * std::pow(m_gainQuartic, 4)) + (3 * std::pow(x, 2) * std::pow(m_gainCubic, 3)) + (2 * x * std::pow(m_gainParabolic, 2)) + m_gainLinear;
&gt; 
&gt; This calls std::pow(m_gainQuartic, 4) and std::pow(m_gainCubic, 3) on each
&gt; call, but that probably doesn&apos;t matter.
&gt; 
&gt; &gt; Source/WebKit/Shared/ScrollingAccelerationCurve.cpp:107
&gt; &gt; +    constexpr float cursorScale = 96.f / frameRate;
&gt; 
&gt; Any idea where the 96 comes from? The word &quot;cursor&quot; here is confusing.

Not yet.

&gt; &gt; Source/WebKit/Shared/ScrollingAccelerationCurve.h:42
&gt; &gt; +class ScrollingAccelerationCurve {
&gt; 
&gt; AccelerationCurve or DecelerationCurve?

Acceleration (this is &quot;how scroll events are accelerated from physical motion&quot;, NOT &quot;how to decelerate for momentum&quot;)

&gt; &gt; Source/WebKit/Shared/ScrollingAccelerationCurve.h:91
&gt; &gt; +    // Input parameters.
&gt; &gt; +    float m_gainLinear { 0 };
&gt; &gt; +    float m_gainParabolic { 0 };
&gt; &gt; +    float m_gainCubic { 0 };
&gt; &gt; +    float m_gainQuartic { 0 };
&gt; &gt; +    float m_tangentSpeedLinear { 0 };
&gt; &gt; +    float m_tangentSpeedParabolicRoot { 0 };
&gt; &gt; +    float m_resolution { 0 };
&gt; &gt; +
&gt; &gt; +    // Computed intermediate values.
&gt; &gt; +    bool m_hasComputedIntermediateValues { false };
&gt; &gt; +    float m_tangentStartX { 0 };
&gt; &gt; +    float m_tangentSlope { 0 };
&gt; &gt; +    float m_tangentIntercept { 0 };
&gt; &gt; +    float m_falloffStartX { 0 };
&gt; &gt; +    float m_falloffSlope { 0 };
&gt; &gt; +    float m_falloffIntercept { 0 };
&gt; 
&gt; You could group these into structs to make the comments obsolete.

True, I didn&apos;t pick up the inline struct thing when I wrote this, but did use it in MomentumEventDispatcher :)

&gt; &gt; Source/WebKit/Shared/mac/ScrollingAccelerationCurveMac.mm:60
&gt; &gt; +static ScrollingAccelerationCurve fromIOHIDCurveArrayWithAcceleration(NSArray *ioHIDCurves, float desiredAcceleration, float resolution)
&gt; 
&gt; Can the NSArray * be typed?

NSArray&lt;NSDictionary *&gt; *, sure.

&gt; &gt; Source/WebKit/Shared/mac/ScrollingAccelerationCurveMac.mm:86
&gt; &gt; +std::optional&lt;ScrollingAccelerationCurve&gt; ScrollingAccelerationCurve::fromNativeWheelEvent(const NativeWebWheelEvent&amp; nativeWebWheelEvent)
&gt; 
&gt; It&apos;s a bit weird to say that you&apos;re getting a curve from an event. I guess
&gt; you&apos;re really getting a curve from the device associated with the event, so
&gt; maybe split this into two functions?

Heh, it used to be separate! I will put it back, I think it was better that way indeed.

&gt; &gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:174
&gt; &gt; +    stopDisplayLink();
&gt; 
&gt; Is mismatched start/stop a problem, if that ever happens?

It seems to be OK, but I will double check.

&gt; &gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.cpp:222
&gt; &gt; +void MomentumEventDispatcher::windowScreenDidChange(WebCore::PageIdentifier pageID, WebCore::PlatformDisplayID displayID)
&gt; 
&gt; A bit odd that no argument references a window.

Propagating existing odd naming, yes.

&gt; &gt; Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.h:93
&gt; &gt; +    typedef Deque&lt;Delta, deltaHistoryQueueSize&gt; HistoricalDeltas;
&gt; &gt; +    HistoricalDeltas m_deltaHistoryX;
&gt; &gt; +    HistoricalDeltas m_deltaHistoryY;
&gt; 
&gt; Can we use one deque of struct  { FloatSize, Seconds }?

We cannot, because we clear it if direction changes, which is a per-axis thing (I have made this mistake at least twice now :))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818958</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 14:46:59 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #5)
&gt; Comment on attachment 445459 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=445459&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/Shared/ScrollingAccelerationCurve.cpp:76
&gt; &gt; +        return (4 * std::pow(x, 3) * std::pow(m_gainQuartic, 4)) + (3 * std::pow(x, 2) * std::pow(m_gainCubic, 3)) + (2 * x * std::pow(m_gainParabolic, 2)) + m_gainLinear;
&gt; 
&gt; This calls std::pow(m_gainQuartic, 4) and std::pow(m_gainCubic, 3) on each
&gt; call, but that probably doesn&apos;t matter.

It&apos;s only called once :) just shared between two branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818976</commentid>
    <comment_count>8</comment_count>
      <attachid>445480</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 15:37:28 -0800</bug_when>
    <thetext>Created attachment 445480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819022</commentid>
    <comment_count>9</comment_count>
      <attachid>445492</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-11-30 17:21:15 -0800</bug_when>
    <thetext>Created attachment 445492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819051</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-30 18:56:34 -0800</bug_when>
    <thetext>Committed r286346 (244705@main): &lt;https://commits.webkit.org/244705@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445492.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445452</attachid>
            <date>2021-11-30 12:11:59 -0800</date>
            <delta_ts>2021-11-30 13:00:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233653-20211130121158.patch</filename>
            <type>text/plain</type>
            <size>81531</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc0OGM0NDZkZTAwNmUwNDE5OGNiNmE3
YmQ0MzAwOWM0ZDQyYjgyNzguLmZmMzY4ODA5OWJmNGQ5OTk1MDMzY2RiZDhhMWQxZGE1OTRiNDFj
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhl
c2l6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzY1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODU1NzEyNTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1FbmFibGUuaDoK
KyAgICAgICAgQWRkIGFuIEVOQUJMRSgpLgorCiAyMDIxLTExLTI5ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9y
IHRoZSBXZWIgTG9jayBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDllOTY1MGE1MzFhNmE5NGU2
OTJkMDVhMTJmZjZlNDBjNDA3ZTAyNzIuLmViNDRlYjBmMWQwZGQzMDY1NDk1ZjU5ZjE2ZmIwZWUw
Y2JmMTQ2ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTExLTMw
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBh
IG1vbWVudHVtIGV2ZW50IHN5bnRoZXNpemVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2NTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NTcx
MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaDoKKyAgICAgICAgQWRkIHNvbWUgU1BJLgorCiAyMDIx
LTExLTI5ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAg
QVg6IFVuaWZ5IHNwZWVjaCBzeW50aGVzaXplciBwbGF0Zm9ybSB1c2FnZSBmb3IgTWFjL2lPUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBlNmNkM2U2Y2QxYjNkMTcyOWYxNTRmNWU4N2IwZmMyZTI2N2Q2NmQyLi41YmFl
ZGQwNTkxODYxNWI5MTUzMmNhMTA1OTcyODQ4MDdjMjQzZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2NSBAQAorMjAyMS0xMS0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgYSBtb21lbnR1bSBldmVudCBzeW50aGVzaXplcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNjUzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84NTU3MTI1OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIFNjcm9s
bEFuaW1hdGlvbnMgbG9nIGNoYW5uZWwgdG8gV2ViS2l0IChpdCBhbHJlYWR5IGV4aXN0cyBpbiBX
ZWJDb3JlKS4KKworICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZTo6Y29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKToK
KyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmV2YWx1YXRlUXVh
cnRpYyk6CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjphY2Nl
bGVyYXRpb25GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZl
bnQpOgorICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIEFkZCBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBh
IHF1YXJ0aWMgc2Nyb2xsaW5nIGFjY2VsZXJhdGlvbiBjdXJ2ZSB3aXRoCisgICAgICAgIGEgdHJh
aWxpbmcgbGluZWFyIHRhbmdlbnQgcmVnaW9uLCBhbmQgYWxsb3dzIGludGVycG9sYXRpb24gYmV0
d2VlbiBjdXJ2ZXMKKyAgICAgICAgYW5kIGV2YWx1YXRpb24gb2YgdGhlIGN1cnZlIGF0IGEgcG9p
bnQuCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFj
Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6ZnJvbUZpeGVkUG9pbnQpOgorICAgICAgICAo
V2ViS2l0OjpyZWFkRml4ZWRQb2ludFBhcmFtZXRlcik6CisgICAgICAgIChXZWJLaXQ6OmZyb21J
T0hJREN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2Nl
bGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZnJvbU5hdGl2ZVdoZWVsRXZlbnQpOgorICAgICAgICBHaXZlbiBhIE5hdGl2ZVdlYldoZWVsRXZl
bnQsIGV4dHJhY3QgaXRzIHVuZGVybHlpbmcgcGxhdGZvcm0gZXZlbnQKKyAgICAgICAgYW5kIGZl
dGNoIHRoZSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBmb3IgdGhlIG9yaWdpbmF0aW5nIGRl
dmljZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50
eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIEZldGNoIHRoZSBj
dXJyZW50IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIG9uIGVhY2ggbW9tZW50dW0gYmVnaW4g
ZXZlbnQsCisgICAgICAgIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZW5kV2hlZWxFdmVudCk6CisgICAgICAgIFNlbmQgdGhlIFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIHRvIEV2ZW50RGlzcGF0Y2hlciBqdXN0IGJlZm9yZQor
ICAgICAgICB3ZSBzZW5kIHRoZSBtb21lbnR1bSBiZWdpbiBldmVudCBhbG9uZywgaWYgaXQgaGFz
IGNoYW5nZWQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aW5kb3dTY3JlZW5E
aWRDaGFuZ2UpOgorICAgICAgICBLZWVwIEV2ZW50RGlzcGF0Y2hlciBhcHByaXNlZCBvZiBjaGFu
Z2VzIHRvIHRoZSBjdXJyZW50IHNjcmVlbiBvZiB0aGUgcGFnZS4KKworICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2Vi
S2l0OjpFdmVudERpc3BhdGNoZXI6OmludGVybmFsV2hlZWxFdmVudCk6CisgICAgICAgIEZhY3Rv
ciBtb3N0IG9mIHdoZWVsRXZlbnQgb3V0IGludG8gaW50ZXJuYWxXaGVlbEV2ZW50LCBzbyB0aGF0
CisgICAgICAgIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGNhbiBjYWxsIGludGVybmFsV2hlZWxF
dmVudCgpLCBza2lwcGluZyB0aGUgY29kZQorICAgICAgICBpbiB3aGVlbEV2ZW50KCkgdGhhdCBm
b3J3YXJkcyB0aGUgZXZlbnQuLi4gdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAg
ICAgQWxzbywga2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgZXZlbnQgY2FtZSBmcm9tIChVSSBwcm9j
ZXNzIG9yIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBhbmQgYXZvaWQgc2VuZGlu
ZyBkaWRSZWNlaXZlRXZlbnQgcmVwbGllcyB0byB0aGUgVUkgcHJvY2VzcyBmb3Igc3ludGhldGlj
CisgICAgICAgIGV2ZW50cyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dC4KKworICAgICAgICAo
V2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQpOgorICAgICAgICBGb3J3YXJkIHdo
ZWVsIGV2ZW50cyB0byBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci4KKworICAgICAgICAoV2ViS2l0
OjpFdmVudERpc3BhdGNoZXI6OnNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKToKKyAgICAg
ICAgRm9yd2FyZCBzY3JvbGxpbmcgY3VydmUgY2hhbmdlcyB0byBNb21lbnR1bUV2ZW50RGlzcGF0
Y2hlci4KKworICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZy
ZXNoZWQpOgorICAgICAgICBGb3J3YXJkIGRpc3BsYXkgcmVmcmVzaCBjYWxsYmFja3MgdG8gTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVy
Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICBGb3J3YXJkIHBhZ2Ugc2NyZWVuIGNo
YW5nZXMgdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpc3BhdGNoV2hlZWxFdmVudFdpdGhvdXRTY3Jv
bGxpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAg
IERvbid0IHNlbmQgZGlkUmVjZWl2ZUV2ZW50IGZvciBzeW50aGV0aWMgZXZlbnRzIGZyb20gdGhl
IG1haW4gdGhyZWFkIGVpdGhlci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Nb21l
bnR1bUV2ZW50RGlzcGF0Y2hlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNb21lbnR1
bUV2ZW50RGlzcGF0Y2hlcjo6TW9tZW50dW1FdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2Vi
S2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6fk1vbWVudHVtRXZlbnREaXNwYXRjaGVyKToK
KyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmV2ZW50U2hvdWxkU3Rh
cnRTeW50aGV0aWNNb21lbnR1bVBoYXNlIGNvbnN0KToKKyAgICAgICAgSWYgd2UgaGF2ZSBldmVy
eXRoaW5nIHdlIG5lZWQgKGEgc2Nyb2xsaW5nIGN1cnZlIC0gd2hpY2ggYWxzbyBpbXBsaWVzCisg
ICAgICAgIHRoYXQgdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAtIGFuZCByYXcgcGxhdGZvcm0gZGVs
dGFzKSwgYW5kIHRoZSBldmVudAorICAgICAgICBpcyBhIG1vbWVudHVtIGJlZ2luIGV2ZW50LCB3
ZSBjYW4gdXNlIGl0IHRvIHN0YXJ0IGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNlLiAKKworICAg
ICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIFN0YXJ0IG9yIHN0b3AgdGhlIG1vbWVudHVtIHBoYXNlIGFzIGFwcHJvcHJpYXRl
LgorICAgICAgICBSZWNvcmQgYW55IGluY29taW5nIGZpbmdlcnMtZG93biBwaGFzZSBldmVudHMg
aW4gYSByb2xsaW5nIGV2ZW50IGhpc3Rvcnkgc3RydWN0dXJlLgorICAgICAgICBCbG9jayBwbGF0
Zm9ybS1ldmVudC1kcml2ZW4gZXZlbnRzIGZyb20gYmVpbmcgZnVydGhlciBoYW5kbGVkIGJ5IFdl
YktpdAorICAgICAgICBpZiB3ZSBhcmUgaW5zaWRlIGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNl
LCBzaW5jZSB3ZSdsbCBiZSByZXBsYWNpbmcgdGhlbS4KKworICAgICAgICAoV2ViS2l0OjphcHBL
aXRTY3JvbGxNdWx0aXBsaWVyRm9yRXZlbnQpOgorICAgICAgICBEZXRlcm1pbmUgdGhlIEFwcEtp
dCBzY3JvbGwgbXVsaXBsaWVyICgiYWNjZWxlcmF0ZWQiIHZzICJ1bmFjY2VsZXJhdGVkIgorICAg
ICAgICBkZWx0YXMgaW4gTlNFdmVudCBwYXJsYW5jZSkgZnJvbSB0aGUgZXZlbnQgdmlhIGRpdmlz
aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aFN5bnRoZXRpY01vbWVudHVtRXZlbnQpOgorICAgICAgICBEaXNwYXRjaCBhIHN5bnRoZXRpYyBl
dmVudCB3aXRoIHRoZSBnaXZlbiBtb21lbnR1bSBwaGFzZSBhbmQgZGVsdGEuCisgICAgICAgIFdl
IGJvcnJvdyBzb21lIHByb3BlcnRpZXMgZnJvbSB0aGUgZXZlbnQgdGhhdCBpbml0aWF0ZWQgdGhl
IG1vbWVudHVtCisgICAgICAgIHBoYXNlIChlLmcuIHRoZSBwb3NpdGlvbiksIGFuZCBzb21lIGZy
b20gd2hhdGV2ZXIgZXZlbnQgd2UndmUgbW9zdAorICAgICAgICByZWNlbnRseSBzZWVuIChldmVu
IGlmIHdlIHRvbGQgdGhlIHJlc3Qgb2YgV2ViS2l0IHRvIGlnbm9yZSBpdCksIHNvCisgICAgICAg
IHRoYXQgd2UgZ2V0IHRoZSBtb3N0IHVwLXRvLWRhdGUgc3RhdGUgZm9yIGUuZy4gdGhlIGtleWJv
YXJkIG1vZGlmaWVycy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hl
cjo6ZGlkU3RhcnRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgUmVjb3JkIHJlbGV2YW50IGluZm9y
bWF0aW9uIGFib3V0IHRoZSBzdGFydCBldmVudCwgZ2VuZXJhdGUgdGhlCisgICAgICAgIG1vbWVu
dHVtIGN1cnZlLCBhbmQgc3RhcnQgYSBmdWxsLXJhdGUgZGlzcGxheSBsaW5rLiBBbHNvLCBzZW5k
IGEgbW9tZW50dW0KKyAgICAgICAgYmVnaW4gZXZlbnQsIHNpbmNlIHdlIGJsb2NrZWQgdGhlIHJl
YWwgb25lLgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRF
bmRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgU2VuZCBhIG1vbWVudHVtIGVuZGVkIGV2ZW50LCBz
aHV0IGRvd24gdGhlIGRpc3BsYXkgbGluaywgYW5kIHJlc2V0IGFsbAorICAgICAgICBwZXItZ2Vz
dHVyZSBzdGF0ZS4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6
c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICBTdG9yZSBTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZXMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0
OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheUlEIGNvbnN0KToKKyAgICAgICAgTG9v
ayB1cCB0aGUgZGlzcGxheUlEIGZvciB0aGUgY3VycmVudCBnZXN0dXJlJ3MgcGFnZS4KKworICAg
ICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c3RhcnREaXNwbGF5TGluayk6
CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdG9wRGlzcGxheUxp
bmspOgorICAgICAgICBTdGFydCBhbmQgc3RvcCBhIGRpc3BsYXkgbGluaywgd2hpY2ggd2lsbCAt
IGluIGEgcm91bmRhYm91dCBtYW5uZXIgLQorICAgICAgICBldmVudHVhbGx5IGNhbGwgYmFjayBp
bnRvIGRpc3BsYXlXYXNSZWZyZXNoZWQuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVu
dERpc3BhdGNoZXI6OndpbmRvd1NjcmVlbkRpZENoYW5nZSk6CisgICAgICAgIFN0b3JlIERpc3Bs
YXlJRHMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZCk6CisgICAgICAgIFdoZW4gdGhlIGRp
c3BsYXkgbGluayBjYWxscyB1cyBiYWNrLCBlbWl0IGEgc2luZ2xlIG1vbWVudHVtIGNoYW5nZWQK
KyAgICAgICAgZXZlbnQgb2Ygc3VmZmljaWVudCBkZWx0YSB0byBtb3ZlIHVzIHRvIHRoZSBkZXNp
cmVkIG9mZnNldCBhbG9uZyB0aGUgY3VydmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1F
dmVudERpc3BhdGNoZXI6OmRpZFNjcm9sbFdpdGhJbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXQ6
Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTY3JvbGwpOgorICAgICAgICBSZWNvcmQgaW5j
b21pbmcgc2Nyb2xsaW5nIGV2ZW50cyBpbnRvIGEgcm9sbGluZyBoaXN0b3J5IGRlcXVlLgorCisg
ICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpidWlsZE9mZnNldFRhYmxl
V2l0aEluaXRpYWxEZWx0YSk6CisgICAgICAgIENvbXB1dGUgdGhlIG9mZnNldHMgZm9yIHRoZSBl
bnRpcmUgImlkZWFsIGN1cnZlIiB0YWJsZSAoYXQgNjBIeikgYnkKKyAgICAgICAgcnVubmluZyB0
aGUgYW5pbWF0aW9uIGFuZCBhY2N1bXVsYXRpbmcgdGhlIGRlbHRhcy4KKworICAgICAgICAoV2Vi
S2l0OjppbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRj
aGVyOjpvZmZzZXRBdFRpbWUpOgorICAgICAgICBJbnRlcnBvbGF0ZSBhbG9uZyB0aGUgImlkZWFs
IGN1cnZlIiB0byBkZXRlcm1pbmUgdGhlIGludGVuZGVkIG9mZnNldAorICAgICAgICBhdCBhIGdp
dmVuIHRpbWUuCisKKyAgICAgICAgKFdlYktpdDo6bW9tZW50dW1EZWNheVJhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6Y29tcHV0ZU5leHREZWx0YSk6Cisg
ICAgICAgIENvbXB1dGUgdGhlIG5leHQgZGVsdGEgZ2l2ZW4gYSBkZWx0YSAoYW5kIHRoZSBldmVu
dCBoaXN0b3J5KSBieSBhcHBseWluZworICAgICAgICBhIGJpdCBvZiBleHBvbmVudGlhbCBkZWNh
eSBhbmQgdGhlbiBwYXNzaW5nIGl0IHRocm91Z2ggdGhlCisgICAgICAgIFNjcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlLiBXZSByZXR1cm4gYm90aCB0aGUgdW5hY2NlbGVyYXRlZAorICAgICAgICBh
bmQgYWNjZWxlcmF0ZWQgZGVsdGFzLCBiZWNhdXNlIHRoZSBpbnB1dCB0byB0aGUgbmV4dCBpdGVy
YXRpb24gb2YKKyAgICAgICAgY29tcHV0ZU5leHREZWx0YSBpcyB0aGUgdW5hY2NlbGVyYXRlZCBk
ZWx0YSwgYnV0IHRoZSBkZWx0YSBhcHBsaWVkCisgICAgICAgIHRvIHRoZSBhY3R1YWwgc2Nyb2xs
IHBvc2l0aW9uIGlzIHRoZSBhY2NlbGVyYXRlZCBkZWx0YS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oOiBBZGRlZC4KKwogMjAyMS0xMS0y
OSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
dGhlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAppbmRleCA0MmNhYTU3NWVjOGZlMmYwMTg4
Mjc3OWE0YjQzMzFiZGFjYjI3YmZmLi5iMjYzZWU0NjQ4NTY2NjVjZTkwZjc4M2Q2Y2U3ZTBkZWQ5
YWVlMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTg3Niw2ICs4NzYsMTAgQEAKICNk
ZWZpbmUgRU5BQkxFX1dIRUVMX0VWRU5UX0xBVENISU5HIDEKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oTUFDKQorI2RlZmluZSBFTkFCTEVfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUiAxCisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9TQ1JPTExJTkdfVEhSRUFEKQogI2lmIFVTRShOSUNP
U0lBKQogI2RlZmluZSBFTkFCTEVfU0NST0xMSU5HX1RIUkVBRCAxCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5oCmluZGV4IDE5ZDVlYjg0ODBhNmJjMWJkZTUx
MzhiN2Q5NTNjOTY4ODgwOTIyZTcuLjI2NWZkMTkyZTNhZmI0ZWU1OTcxOTY5ZTQ5ZDNhYjgzODk1
NDY2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQ
SU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5o
CkBAIC05OSw2ICs5OSw3IEBAIHN0YXRpYyBjb25zdCBJT0hJREV2ZW50RmllbGQga0lPSElERXZl
bnRGaWVsZFNjcm9sbFkgPSAoa0lPSElERXZlbnRGaWVsZFNjcm9sbEJhCiAKIHVpbnQ2NF90IElP
SElERXZlbnRHZXRUaW1lU3RhbXAoSU9ISURFdmVudFJlZik7CiBJT0hJREZsb2F0IElPSElERXZl
bnRHZXRGbG9hdFZhbHVlKElPSElERXZlbnRSZWYsIElPSElERXZlbnRGaWVsZCk7CitJT0hJREV2
ZW50U2VuZGVySUQgSU9ISURFdmVudEdldFNlbmRlcklEKElPSElERXZlbnRSZWYpOwogCiBXVEZf
RVhURVJOX0NfRU5ECiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vTG9nZ2lu
Zy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggZDVlN2E4Y2MxMWVm
NjBlNWJjN2EwY2M3ODYyNzhiOGVjYjMxZmRlYi4uNDRlMGE3YWNiN2I1M2Q2MGI0N2FiYzQ2Zjlk
ZTFkY2Q5ZGRlZmNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5n
LmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTkxLDYgKzkxLDcg
QEAgZXh0ZXJuICJDIiB7CiAgICAgTShSZW1vdGVMYXllclRyZWUpIFwKICAgICBNKFJlc2l6ZSkg
XAogICAgIE0oUmVzb3VyY2VMb2FkU3RhdGlzdGljcykgXAorICAgIE0oU2Nyb2xsQW5pbWF0aW9u
cykgXAogICAgIE0oU2Nyb2xsaW5nKSBcCiAgICAgTShTZWxlY3Rpb24pIFwKICAgICBNKFNlcnZp
Y2VXb3JrZXIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjM3YzU1YmJjMjg0ZjBkZjAzNjFiZjExNzlm
YWU0MDhkODI2ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlLmgiCisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKworI2luY2x1
ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZl
KGZsb2F0IGdhaW5MaW5lYXIsIGZsb2F0IGdhaW5QYXJhYm9saWMsIGZsb2F0IGdhaW5DdWJpYywg
ZmxvYXQgZ2FpblF1YXJ0aWMsIGZsb2F0IHRhbmdlbnRTcGVlZExpbmVhciwgZmxvYXQgdGFuZ2Vu
dFNwZWVkUGFyYWJvbGljUm9vdCwgZmxvYXQgcmVzb2x1dGlvbikKKyAgICA6IG1fZ2FpbkxpbmVh
cihnYWluTGluZWFyKQorICAgICwgbV9nYWluUGFyYWJvbGljKGdhaW5QYXJhYm9saWMpCisgICAg
LCBtX2dhaW5DdWJpYyhnYWluQ3ViaWMpCisgICAgLCBtX2dhaW5RdWFydGljKGdhaW5RdWFydGlj
KQorICAgICwgbV90YW5nZW50U3BlZWRMaW5lYXIodGFuZ2VudFNwZWVkTGluZWFyKQorICAgICwg
bV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290KHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpCisg
ICAgLCBtX3Jlc29sdXRpb24ocmVzb2x1dGlvbikKK3sKK30KKworU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmUgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmludGVycG9sYXRlKGNvbnN0IFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlJiBmcm9tLCBjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZSYgdG8sIGZsb2F0IGFtb3VudCkKK3sKKyAgICBhdXRvIGludGVycG9sYXRlID0gWyZd
IChmbG9hdCBhLCBmbG9hdCBiKSAtPiBmbG9hdCB7CisgICAgICAgIHJldHVybiBhICsgYW1vdW50
ICogKGIgLSBhKTsKKyAgICB9OworCisgICAgYXV0byBnYWluTGluZWFyID0gaW50ZXJwb2xhdGUo
ZnJvbS5tX2dhaW5MaW5lYXIsIHRvLm1fZ2FpbkxpbmVhcik7CisgICAgYXV0byBnYWluUGFyYWJv
bGljID0gaW50ZXJwb2xhdGUoZnJvbS5tX2dhaW5QYXJhYm9saWMsIHRvLm1fZ2FpblBhcmFib2xp
Yyk7CisgICAgYXV0byBnYWluQ3ViaWMgPSBpbnRlcnBvbGF0ZShmcm9tLm1fZ2FpbkN1YmljLCB0
by5tX2dhaW5DdWJpYyk7CisgICAgYXV0byBnYWluUXVhcnRpYyA9IGludGVycG9sYXRlKGZyb20u
bV9nYWluUXVhcnRpYywgdG8ubV9nYWluUXVhcnRpYyk7CisKKyAgICBhdXRvIHRhbmdlbnRTcGVl
ZExpbmVhciA9IGludGVycG9sYXRlKGZyb20ubV90YW5nZW50U3BlZWRMaW5lYXIsIHRvLm1fdGFu
Z2VudFNwZWVkTGluZWFyKTsKKyAgICBhdXRvIHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QgPSBp
bnRlcnBvbGF0ZShmcm9tLm1fdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwgdG8ubV90YW5nZW50
U3BlZWRQYXJhYm9saWNSb290KTsKKworICAgIHJldHVybiB7IGdhaW5MaW5lYXIsIGdhaW5QYXJh
Ym9saWMsIGdhaW5DdWJpYywgZ2FpblF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwgdGFuZ2Vu
dFNwZWVkUGFyYWJvbGljUm9vdCwgZnJvbS5tX3Jlc29sdXRpb24gfTsKK30KKwordm9pZCBTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6Y29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVk
KCkKK3sKKyAgICBpZiAobV9oYXNDb21wdXRlZEludGVybWVkaWF0ZVZhbHVlcykKKyAgICAgICAg
cmV0dXJuOworICAgIG1faGFzQ29tcHV0ZWRJbnRlcm1lZGlhdGVWYWx1ZXMgPSB0cnVlOworCisg
ICAgZmxvYXQgdGFuZ2VudEluaXRpYWxZOworICAgIG1fdGFuZ2VudFN0YXJ0WCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKKyAgICBtX2ZhbGxvZmZTdGFydFggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CisKKyAgICBhdXRvIHF1YXJ0aWNTbG9wZSA9IFsm
XShmbG9hdCB4KSB7CisgICAgICAgIHJldHVybiAoNCAqIHN0ZDo6cG93KHgsIDMpICogc3RkOjpw
b3cobV9nYWluUXVhcnRpYywgNCkpICsgKDMgKiBzdGQ6OnBvdyh4LCAyKSAqIHN0ZDo6cG93KG1f
Z2FpbkN1YmljLCAzKSkgKyAoMiAqIHggKiBzdGQ6OnBvdyhtX2dhaW5QYXJhYm9saWMsIDIpKSAr
IG1fZ2FpbkxpbmVhcjsKKyAgICB9OworCisgICAgaWYgKG1fdGFuZ2VudFNwZWVkTGluZWFyKSB7
CisgICAgICAgIHRhbmdlbnRJbml0aWFsWSA9IGV2YWx1YXRlUXVhcnRpYyhtX3RhbmdlbnRTcGVl
ZExpbmVhcik7CisgICAgICAgIG1fdGFuZ2VudFNsb3BlID0gcXVhcnRpY1Nsb3BlKG1fdGFuZ2Vu
dFNwZWVkTGluZWFyKTsKKyAgICAgICAgbV90YW5nZW50SW50ZXJjZXB0ID0gdGFuZ2VudEluaXRp
YWxZIC0gbV90YW5nZW50U2xvcGUgKiBtX3RhbmdlbnRTcGVlZExpbmVhcjsKKyAgICAgICAgbV90
YW5nZW50U3RhcnRYID0gbV90YW5nZW50U3BlZWRMaW5lYXI7CisKKyAgICAgICAgaWYgKG1fdGFu
Z2VudFNwZWVkUGFyYWJvbGljUm9vdCkgeworICAgICAgICAgICAgZmxvYXQgeTEgPSBtX3Rhbmdl
bnRTbG9wZSAqIG1fdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCArIG1fdGFuZ2VudEludGVyY2Vw
dDsKKyAgICAgICAgICAgIG1fZmFsbG9mZlNsb3BlID0gMiAqIHkxICogbV90YW5nZW50U2xvcGU7
CisgICAgICAgICAgICBtX2ZhbGxvZmZJbnRlcmNlcHQgPSBzdGQ6OnBvdyh5MSwgMikgLSBtX2Zh
bGxvZmZTbG9wZSAqIG1fdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdDsKKyAgICAgICAgICAgIG1f
ZmFsbG9mZlN0YXJ0WCA9IG1fdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdDsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSBpZiAobV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290KSB7CisgICAgICAgIHRh
bmdlbnRJbml0aWFsWSA9IGV2YWx1YXRlUXVhcnRpYyhtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jv
b3QpOworICAgICAgICBtX2ZhbGxvZmZTbG9wZSA9IHF1YXJ0aWNTbG9wZShtX3RhbmdlbnRTcGVl
ZFBhcmFib2xpY1Jvb3QpOworICAgICAgICBtX2ZhbGxvZmZJbnRlcmNlcHQgPSBzdGQ6OnBvdyh0
YW5nZW50SW5pdGlhbFksIDIpIC0gbV9mYWxsb2ZmU2xvcGUgKiAgbV90YW5nZW50U3BlZWRQYXJh
Ym9saWNSb290OworICAgICAgICBtX3RhbmdlbnRTdGFydFggPSBtX3RhbmdlbnRTcGVlZFBhcmFi
b2xpY1Jvb3Q7CisgICAgfQorfQorCitmbG9hdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZXZhbHVhdGVRdWFydGljKGZsb2F0IHgpCit7CisgICAgcmV0dXJuIHN0ZDo6cG93KG1fZ2FpblF1
YXJ0aWMgKiB4LCA0KSArIHN0ZDo6cG93KG1fZ2FpbkN1YmljICogeCwgMykgKyBzdGQ6OnBvdyht
X2dhaW5QYXJhYm9saWMgKiB4LCAyKSArIG1fZ2FpbkxpbmVhciAqIHg7Cit9CisKK2Zsb2F0IFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjphY2NlbGVyYXRpb25GYWN0b3IoZmxvYXQgdmFsdWUp
Cit7CisgICAgY29uc3RleHByIGZsb2F0IGZyYW1lUmF0ZSA9IDY3LmY7IC8vIFdoeSBpcyB0aGlz
IDY3IGFuZCBub3QgNjA/CisgICAgY29uc3RleHByIGZsb2F0IGN1cnNvclNjYWxlID0gOTYuZiAv
IGZyYW1lUmF0ZTsKKworICAgIGNvbXB1dGVJbnRlcm1lZGlhdGVWYWx1ZXNJZk5lZWRlZCgpOwor
CisgICAgZmxvYXQgbXVsdGlwbGllcjsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZSA9IG1fcmVzb2x1
dGlvbiAvIGZyYW1lUmF0ZTsKKyAgICB2YWx1ZSAvPSBkZXZpY2VTY2FsZTsKKworICAgIGlmICh2
YWx1ZSA8PSBtX3RhbmdlbnRTdGFydFgpCisgICAgICAgIG11bHRpcGxpZXIgPSBldmFsdWF0ZVF1
YXJ0aWModmFsdWUpOworICAgIGVsc2UgaWYgKHZhbHVlIDw9IG1fZmFsbG9mZlN0YXJ0WCAmJiBt
X3RhbmdlbnRTdGFydFggPT0gbV90YW5nZW50U3BlZWRMaW5lYXIpCisgICAgICAgIG11bHRpcGxp
ZXIgPSBtX3RhbmdlbnRTbG9wZSAqIHZhbHVlICsgbV90YW5nZW50SW50ZXJjZXB0OworICAgIGVs
c2UKKyAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6c3FydChtX2ZhbGxvZmZTbG9wZSAqIHZhbHVl
ICsgbV9mYWxsb2ZmSW50ZXJjZXB0KTsKKworICAgIHJldHVybiBtdWx0aXBsaWVyICogY3Vyc29y
U2NhbGU7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmVuY29kZShJUEM6
OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2dhaW5MaW5lYXI7
CisgICAgZW5jb2RlciA8PCBtX2dhaW5QYXJhYm9saWM7CisgICAgZW5jb2RlciA8PCBtX2dhaW5D
dWJpYzsKKyAgICBlbmNvZGVyIDw8IG1fZ2FpblF1YXJ0aWM7CisKKyAgICBlbmNvZGVyIDw8IG1f
dGFuZ2VudFNwZWVkTGluZWFyOworICAgIGVuY29kZXIgPDwgbV90YW5nZW50U3BlZWRQYXJhYm9s
aWNSb290OworCisgICAgZW5jb2RlciA8PCBtX3Jlc29sdXRpb247Cit9CisKK3N0ZDo6b3B0aW9u
YWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZl
OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGZsb2F0IGdhaW5MaW5lYXI7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShnYWluTGluZWFyKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBmbG9hdCBnYWluUGFyYWJvbGljOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZ2FpblBhcmFib2xpYykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
ZmxvYXQgZ2FpbkN1YmljOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZ2FpbkN1YmljKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBmbG9hdCBnYWluUXVhcnRpYzsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGdhaW5RdWFydGljKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGZsb2F0IHRhbmdlbnRTcGVlZExpbmVhcjsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHRhbmdlbnRTcGVlZExpbmVhcikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgZmxvYXQgdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdDsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgZmxvYXQgcmVzb2x1dGlvbjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc29sdXRpb24pKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJu
IHsgeyBnYWluTGluZWFyLCBnYWluUGFyYWJvbGljLCBnYWluQ3ViaWMsIGdhaW5RdWFydGljLCB0
YW5nZW50U3BlZWRMaW5lYXIsIHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QsIHJlc29sdXRpb24g
fSB9OworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgY3VydmUpCit7CisgICAgVGV4dFN0cmVhbTo6R3Jv
dXBTY29wZSBncm91cCh0cyk7CisKKyAgICB0cyA8PCAiU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3Vy
dmUiOworCisgICAgdHMuZHVtcFByb3BlcnR5KCJnYWluTGluZWFyIiwgY3VydmUubV9nYWluTGlu
ZWFyKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImdhaW5QYXJhYm9saWMiLCBjdXJ2ZS5tX2dhaW5Q
YXJhYm9saWMpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZ2FpbkN1YmljIiwgY3VydmUubV9nYWlu
Q3ViaWMpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZ2FpblF1YXJ0aWMiLCBjdXJ2ZS5tX2dhaW5R
dWFydGljKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInRhbmdlbnRTcGVlZExpbmVhciIsIGN1cnZl
Lm1fdGFuZ2VudFNwZWVkTGluZWFyKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInRhbmdlbnRTcGVl
ZFBhcmFib2xpY1Jvb3QiLCBjdXJ2ZS5tX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVzb2x1dGlvbiIsIGN1cnZlLm1fcmVzb2x1dGlvbik7CisKKyAg
ICByZXR1cm4gdHM7Cit9CisKKyNpZiAhUExBVEZPUk0oTUFDKQorCitzdGQ6Om9wdGlvbmFsPFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJv
bU5hdGl2ZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpCit7CisgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wMGUwYzYxZGJlNjQ5YjgzMWY0NjM4ZTViYzU1NGQ2ZWNjZmE1YWY4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaApA
QCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
TU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKworI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXpl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJUEMgewor
Y2xhc3MgRGVjb2RlcjsKK2NsYXNzIEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBOYXRpdmVXZWJXaGVlbEV2ZW50OworCitjbGFzcyBTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZSB7CitwdWJsaWM6CisgICAgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUoZmxvYXQg
Z2FpbkxpbmVhciwgZmxvYXQgZ2FpblBhcmFib2xpYywgZmxvYXQgZ2FpbkN1YmljLCBmbG9hdCBn
YWluUXVhcnRpYywgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyLCBmbG9hdCB0YW5nZW50U3BlZWRQ
YXJhYm9saWNSb290LCBmbG9hdCByZXNvbHV0aW9uKTsKKworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBmcm9tTmF0aXZlV2hlZWxFdmVudChjb25z
dCBOYXRpdmVXZWJXaGVlbEV2ZW50Jik7CisKKyAgICBzdGF0aWMgU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmUgaW50ZXJwb2xhdGUoY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIGZy
b20sIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlJiB0bywgZmxvYXQgYW1vdW50KTsK
KworICAgIGZsb2F0IGFjY2VsZXJhdGlvbkZhY3RvcihmbG9hdCk7CisKKyAgICB2b2lkIGVuY29k
ZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZT4gZGVjb2RlKElQQzo6RGVjb2RlciYpOworCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2dhaW5MaW5lYXIgPT0gb3RoZXIubV9nYWluTGluZWFy
CisgICAgICAgICAgICAmJiBtX2dhaW5QYXJhYm9saWMgPT0gb3RoZXIubV9nYWluUGFyYWJvbGlj
CisgICAgICAgICAgICAmJiBtX2dhaW5DdWJpYyA9PSBvdGhlci5tX2dhaW5DdWJpYworICAgICAg
ICAgICAgJiYgbV9nYWluUXVhcnRpYyA9PSBvdGhlci5tX2dhaW5RdWFydGljCisgICAgICAgICAg
ICAmJiBtX3RhbmdlbnRTcGVlZExpbmVhciA9PSBvdGhlci5tX3RhbmdlbnRTcGVlZExpbmVhcgor
ICAgICAgICAgICAgJiYgbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290ID09IG90aGVyLm1fdGFu
Z2VudFNwZWVkUGFyYWJvbGljUm9vdAorICAgICAgICAgICAgJiYgbV9yZXNvbHV0aW9uID09IG90
aGVyLm1fcmVzb2x1dGlvbjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmKTsKKwor
ICAgIHZvaWQgY29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKCk7CisKKyAgICBmbG9h
dCBldmFsdWF0ZVF1YXJ0aWMoZmxvYXQpOworCisgICAgLy8gSW5wdXQgcGFyYW1ldGVycy4KKyAg
ICBmbG9hdCBtX2dhaW5MaW5lYXIgeyAwIH07CisgICAgZmxvYXQgbV9nYWluUGFyYWJvbGljIHsg
MCB9OworICAgIGZsb2F0IG1fZ2FpbkN1YmljIHsgMCB9OworICAgIGZsb2F0IG1fZ2FpblF1YXJ0
aWMgeyAwIH07CisgICAgZmxvYXQgbV90YW5nZW50U3BlZWRMaW5lYXIgeyAwIH07CisgICAgZmxv
YXQgbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290IHsgMCB9OworICAgIGZsb2F0IG1fcmVzb2x1
dGlvbiB7IDAgfTsKKworICAgIC8vIENvbXB1dGVkIGludGVybWVkaWF0ZSB2YWx1ZXMuCisgICAg
Ym9vbCBtX2hhc0NvbXB1dGVkSW50ZXJtZWRpYXRlVmFsdWVzIHsgZmFsc2UgfTsKKyAgICBmbG9h
dCBtX3RhbmdlbnRTdGFydFggeyAwIH07CisgICAgZmxvYXQgbV90YW5nZW50U2xvcGUgeyAwIH07
CisgICAgZmxvYXQgbV90YW5nZW50SW50ZXJjZXB0IHsgMCB9OworICAgIGZsb2F0IG1fZmFsbG9m
ZlN0YXJ0WCB7IDAgfTsKKyAgICBmbG9hdCBtX2ZhbGxvZmZTbG9wZSB7IDAgfTsKKyAgICBmbG9h
dCBtX2ZhbGxvZmZJbnRlcmNlcHQgeyAwIH07Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQ
QVRDSEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1Njcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlTWFjLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1Njcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMTI1M2NiMDJjMjg5MjEzNmVk
NjE1MmJiNDRiYTAzMTkxMzZmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0KQEAgLTAsMCArMSwxMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNjcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlLmgiCisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hF
UikgJiYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0IDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9JT0tpdFNQ
SS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGZsb2F0IGZyb21GaXhlZFBvaW50
KGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSAvIDY1NTM2LjBmOworfQorCitzdGF0
aWMgZmxvYXQgcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIoTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJz
LCBjb25zdCBjaGFyICprZXkpCit7CisgICAgcmV0dXJuIGZyb21GaXhlZFBvaW50KFtbcGFyYW1l
dGVycyBvYmplY3RGb3JLZXk6QChrZXkpXSBmbG9hdFZhbHVlXSk7Cit9CisKK3N0YXRpYyBTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBmcm9tSU9ISURDdXJ2ZShOU0RpY3Rpb25hcnkgKnBhcmFt
ZXRlcnMsIGZsb2F0IHJlc29sdXRpb24pCit7CisgICAgYXV0byBnYWluTGluZWFyID0gcmVhZEZp
eGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVycywga0hJREFjY2VsR2FpbkxpbmVhcktleSk7Cisg
ICAgYXV0byBnYWluUGFyYWJvbGljID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVy
cywga0hJREFjY2VsR2FpblBhcmFib2xpY0tleSk7CisgICAgYXV0byBnYWluQ3ViaWMgPSByZWFk
Rml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxHYWluQ3ViaWNLZXkpOwor
ICAgIGF1dG8gZ2FpblF1YXJ0aWMgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJz
LCBrSElEQWNjZWxHYWluUXVhcnRpY0tleSk7CisKKyAgICBhdXRvIHRhbmdlbnRTcGVlZExpbmVh
ciA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBhcmFtZXRlcnMsIGtISURBY2NlbFRhbmdlbnRT
cGVlZExpbmVhcktleSk7CisgICAgYXV0byB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290ID0gcmVh
ZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVycywga0hJREFjY2VsVGFuZ2VudFNwZWVkUGFy
YWJvbGljUm9vdEtleSk7CisKKyAgICByZXR1cm4geyBnYWluTGluZWFyLCBnYWluUGFyYWJvbGlj
LCBnYWluQ3ViaWMsIGdhaW5RdWFydGljLCB0YW5nZW50U3BlZWRMaW5lYXIsIHRhbmdlbnRTcGVl
ZFBhcmFib2xpY1Jvb3QsIHJlc29sdXRpb24gfTsKK30KKworc3RhdGljIFNjcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlIGZyb21JT0hJREN1cnZlQXJyYXlXaXRoQWNjZWxlcmF0aW9uKE5TQXJyYXkg
KmlvSElEQ3VydmVzLCBmbG9hdCBkZXNpcmVkQWNjZWxlcmF0aW9uLCBmbG9hdCByZXNvbHV0aW9u
KQoreworICAgIF9fYmxvY2sgc2l6ZV90IGN1cnJlbnRJbmRleCA9IDA7CisgICAgX19ibG9jayBW
ZWN0b3I8c3RkOjpwYWlyPGZsb2F0LCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4+IGN1cnZl
czsKKworICAgIFtpb0hJREN1cnZlcyBlbnVtZXJhdGVPYmplY3RzVXNpbmdCbG9jazpeKE5TRGlj
dGlvbmFyeSAqcGFyYW1ldGVycywgTlNVSW50ZWdlciBpLCBCT09MICopIHsKKyAgICAgICAgYXV0
byBjdXJ2ZUFjY2VsZXJhdGlvbiA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBhcmFtZXRlcnMs
IGtISURBY2NlbEluZGV4S2V5KTsKKyAgICAgICAgYXV0byBjdXJ2ZSA9IGZyb21JT0hJREN1cnZl
KHBhcmFtZXRlcnMsIHJlc29sdXRpb24pOworCisgICAgICAgIGlmIChkZXNpcmVkQWNjZWxlcmF0
aW9uID4gY3VydmVBY2NlbGVyYXRpb24pCisgICAgICAgICAgICBjdXJyZW50SW5kZXggPSBpOwor
CisgICAgICAgIGN1cnZlcy5hcHBlbmQoeyBjdXJ2ZUFjY2VsZXJhdGlvbiwgY3VydmUgfSk7Cisg
ICAgfV07CisKKyAgICAvLyBJbnRlcnBvbGF0aW9uIGlmIGRlc2lyZWRBY2NlbGVyYXRpb24gaXMg
aW4gYmV0d2VlbiB0d28gY3VydmVzLgorICAgIGlmIChjdXJ2ZXNbY3VycmVudEluZGV4XS5maXJz
dCA8IGRlc2lyZWRBY2NlbGVyYXRpb24gJiYgKGN1cnJlbnRJbmRleCArIDEpIDwgY3VydmVzLnNp
emUoKSkgeworICAgICAgICBjb25zdCBhdXRvJiBsb3dDdXJ2ZSA9IGN1cnZlc1tjdXJyZW50SW5k
ZXhdOworICAgICAgICBjb25zdCBhdXRvJiBoaWdoQ3VydmUgPSBjdXJ2ZXNbY3VycmVudEluZGV4
ICsgMV07CisgICAgICAgIGZsb2F0IHJhdGlvID0gKGRlc2lyZWRBY2NlbGVyYXRpb24gLSBsb3dD
dXJ2ZS5maXJzdCkgLyAoaGlnaEN1cnZlLmZpcnN0IC0gbG93Q3VydmUuZmlyc3QpOworICAgICAg
ICByZXR1cm4gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmludGVycG9sYXRlKGxvd0N1cnZl
LnNlY29uZCwgaGlnaEN1cnZlLnNlY29uZCwgcmF0aW8pOworICAgIH0KKworICAgIHJldHVybiBj
dXJ2ZXNbY3VycmVudEluZGV4XS5zZWNvbmQ7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmU+IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZl
V2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBuYXRpdmVXZWJXaGVlbEV2ZW50
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8SU9ISURFdmVudFN5c3Rl
bUNsaWVudFJlZj4+IGNsaWVudDsKKyAgICBpZiAoIWNsaWVudC5nZXQoKSkKKyAgICAgICAgY2xp
ZW50LmdldCgpID0gYWRvcHRDRihJT0hJREV2ZW50U3lzdGVtQ2xpZW50Q3JlYXRlV2l0aFR5cGUo
bmlsLCBrSU9ISURFdmVudFN5c3RlbUNsaWVudFR5cGVQYXNzaXZlLCBuaWwpKTsKKworICAgIE5T
RXZlbnQgKmV2ZW50ID0gbmF0aXZlV2ViV2hlZWxFdmVudC5uYXRpdmVFdmVudCgpOworICAgIGF1
dG8gaGlkRXZlbnQgPSBhZG9wdENGKENHRXZlbnRDb3B5SU9ISURFdmVudChldmVudC5DR0V2ZW50
KSk7CisgICAgaWYgKCFoaWRFdmVudCkgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmlt
YXRpb25zLCAiU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50
IGRpZCBub3QgZmluZCBISUQgZXZlbnQiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBhdXRvIHNlbmRlcklEID0gSU9ISURFdmVudEdldFNlbmRlcklEKGhpZEV2
ZW50LmdldCgpKTsKKyAgICBSZXRhaW5QdHI8SU9ISURTZXJ2aWNlQ2xpZW50UmVmPiBpb0hJRFNl
cnZpY2UgPSBhZG9wdENGKElPSElERXZlbnRTeXN0ZW1DbGllbnRDb3B5U2VydmljZUZvclJlZ2lz
dHJ5SUQoY2xpZW50LmdldCgpLmdldCgpLCBzZW5kZXJJRCkpOworICAgIGlmICghaW9ISURTZXJ2
aWNlKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZlbnQgZGlkIG5vdCBmaW5kIG1hdGNo
aW5nIEhJRCBzZXJ2aWNlIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQor
CisgICAgYXV0byBjdXJ2ZXMgPSBhZG9wdENGKGR5bmFtaWNfY2ZfY2FzdDxDRkFycmF5UmVmPihJ
T0hJRFNlcnZpY2VDbGllbnRDb3B5UHJvcGVydHkoaW9ISURTZXJ2aWNlLmdldCgpLCBDRlNUUihr
SElEU2Nyb2xsQWNjZWxQYXJhbWV0cmljQ3VydmVzS2V5KSkpKTsKKyAgICBpZiAoIWN1cnZlcykg
eworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiU2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50IGZhaWxlZCB0byBsb29rIHVwIGN1cnZl
cyIpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGVyZSBpcyBzb21lIGFkZGl0aW9uYWwgZmFsbGJhY2sgdG8gaW1wbGVtZW50IGhlcmUsIHRo
b3VnaCB0aGlzIHNlZW1zIHVzdWFsbHkgc3VmZmljaWVudC4KKyAgICBhdXRvIHNjcm9sbEFjY2Vs
ZXJhdGlvblR5cGUgPSBhZG9wdENGKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oSU9ISURT
ZXJ2aWNlQ2xpZW50Q29weVByb3BlcnR5KGlvSElEU2VydmljZS5nZXQoKSwgQ0ZTVFIoIkhJRFNj
cm9sbEFjY2VsZXJhdGlvblR5cGUiKSkpKTsKKyAgICBpZiAoIXNjcm9sbEFjY2VsZXJhdGlvblR5
cGUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudCBmYWlsZWQgdG8gbG9vayB1cCBh
Y2NlbGVyYXRpb24gdHlwZSIpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KworICAgIGF1dG8gc2Nyb2xsQWNjZWxlcmF0aW9uID0gYWRvcHRDRihkeW5hbWljX2NmX2Nhc3Q8
Q0ZOdW1iZXJSZWY+KElPSElEU2VydmljZUNsaWVudENvcHlQcm9wZXJ0eShpb0hJRFNlcnZpY2Uu
Z2V0KCksIHNjcm9sbEFjY2VsZXJhdGlvblR5cGUuZ2V0KCkpKSk7CisgICAgaWYgKCFzY3JvbGxB
Y2NlbGVyYXRpb24pIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIlNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudCBmYWlsZWQgdG8g
bG9vayB1cCBhY2NlbGVyYXRpb24gdmFsdWUiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBhdXRvIHJlc29sdXRpb24gPSBhZG9wdENGKGR5bmFtaWNfY2ZfY2Fz
dDxDRk51bWJlclJlZj4oSU9ISURTZXJ2aWNlQ2xpZW50Q29weVByb3BlcnR5KGlvSElEU2Vydmlj
ZS5nZXQoKSwgQ0ZTVFIoa0lPSElEU2Nyb2xsUmVzb2x1dGlvbktleSkpKSk7CisgICAgaWYgKCFy
ZXNvbHV0aW9uKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZlbnQgZmFpbGVkIHRvIGxv
b2sgdXAgcmVzb2x1dGlvbiIpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KworICAgIHJldHVybiBmcm9tSU9ISURDdXJ2ZUFycmF5V2l0aEFjY2VsZXJhdGlvbigoTlNBcnJh
eSAqKWN1cnZlcy5nZXQoKSwgZnJvbUZpeGVkUG9pbnQoWyhOU051bWJlciAqKXNjcm9sbEFjY2Vs
ZXJhdGlvbi5nZXQoKSBmbG9hdFZhbHVlXSksIGZyb21GaXhlZFBvaW50KFsoTlNOdW1iZXIgKily
ZXNvbHV0aW9uLmdldCgpIGZsb2F0VmFsdWVdKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpICYmIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGIxMzhmZGQwNTcwNThjODUyZDEwMmJmMjJkOGEwNTMw
NGVjNWFmMGIuLmI4ZDFjYjljN2YyYTMxODI0MmQ0YTc5ZmNjYWM3Yjg0NjFhY2IwYTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dApAQCAtMjI0LDYgKzIyNCw3IEBAIFNoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEu
Y3BwCiBTaGFyZWQvUHJpbnRJbmZvLmNwcAogU2hhcmVkL1JUQ05ldHdvcmsuY3BwCiBTaGFyZWQv
UlRDUGFja2V0T3B0aW9ucy5jcHAKK1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5j
cHAKIFNoYXJlZC9TZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmNwcAogU2hhcmVkL1Nl
c3Npb25TdGF0ZS5jcHAKIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwIEBuby11bmlmeQpAQCAt
ODEyLDYgKzgxMyw3IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKIFdlYlBy
b2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKK1dl
YlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9QYWdlQmFubmVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGEzZTdiYjY2NDcxOTMwMjMwZmUyM2Yw
YTY4MWMzZTdhMjMyNjgzNTMuLmM4YmU1NTg2OTI3NmU1MDYyMGJkMzM1YzAwZTY2NmRmMmM0NTRh
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTIyMCw2ICsyMjAsNyBAQCBTaGFyZWQvbWFj
L05hdGl2ZVdlYldoZWVsRXZlbnRNYWMubW0KIFNoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoLm1t
CiBTaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5tbQogU2hhcmVkL21hYy9QcmludEluZm9NYWMu
bW0KK1NoYXJlZC9tYWMvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0KIFNoYXJlZC9t
YWMvU2VjSXRlbVJlcXVlc3REYXRhLmNwcAogU2hhcmVkL21hYy9TZWNJdGVtUmVzcG9uc2VEYXRh
LmNwcAogU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCmluZGV4IDgwZmQyYWI5ZmM4ZjYyM2E1MzM4YzA2MGI2YTY4ZmJlZjI5
OWQ5YTMuLmYzMWNhNDdmZWFhNzZhMDNlN2VhMDE0MzNkNDNiOWUwNmQ0MDQ1OWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMjg5NCw2ICsyODk0LDEyIEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVs
RXZlbnQmIGV2ZW50KQogCiAgICAgY2xvc2VPdmVybGF5ZWRWaWV3cygpOwogCisjaWYgRU5BQkxF
KE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3Qg
aGF2ZSB0byBsb29rIHRoaXMgdXAgcmVwZWF0ZWRseSwgYnV0IGl0IGNhbiBhbHNvIGNoYW5nZSBv
Y2Nhc2lvbmFsbHkuCisgICAgaWYgKGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2
ZW50OjpQaGFzZUJlZ2FuICYmIHByZWZlcmVuY2VzKCkubW9tZW50dW1TY3JvbGxpbmdBbmltYXRv
ckVuYWJsZWQoKSkKKyAgICAgICAgbV9zY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSA9IFNjcm9s
bGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudChldmVudCk7CisjZW5k
aWYKKwogICAgIGlmICh3aGVlbEV2ZW50Q29hbGVzY2VyKCkuc2hvdWxkRGlzcGF0Y2hFdmVudChl
dmVudCkpIHsKICAgICAgICAgYXV0byBldmVudCA9IHdoZWVsRXZlbnRDb2FsZXNjZXIoKS5uZXh0
RXZlbnRUb0Rpc3BhdGNoKCk7CiAgICAgICAgIHNlbmRXaGVlbEV2ZW50KCpldmVudCk7CkBAIC0y
OTQxLDYgKzI5NDcsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNvbnN0
IFdlYldoZWVsRXZlbnQmIGV2ZW50KQogICAgICAgICBydWJiZXJCYW5kYWJsZUVkZ2VzLnNldExl
ZnQoIW1fYmFja0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpKTsKICAgICAgICAgcnViYmVyQmFuZGFi
bGVFZGdlcy5zZXRSaWdodCghbV9iYWNrRm9yd2FyZExpc3QtPmZvcndhcmRJdGVtKCkpOwogICAg
IH0KKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIGlmIChldmVu
dC5tb21lbnR1bVBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2VCZWdhbiAmJiBtX3Njcm9s
bGluZ0FjY2VsZXJhdGlvbkN1cnZlICE9IG1fbGFzdFNlbnRTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZSkgeworICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNo
ZXI6OlNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKG1fd2ViUGFnZUlELCAqbV9zY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZSksIDAsIHsgfSwgVGhyZWFkOjpRT1M6OlVzZXJJbnRlcmFjdGl2
ZSk7CisgICAgICAgIG1fbGFzdFNlbnRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSA9IG1fc2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU7CisgICAgfQorI2VuZGlmCisKICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OldoZWVsRXZlbnQobV93ZWJQYWdlSUQs
IGV2ZW50LCBydWJiZXJCYW5kYWJsZUVkZ2VzKSwgMCwgeyB9LCBUaHJlYWQ6OlFPUzo6VXNlcklu
dGVyYWN0aXZlKTsKIAogICAgIC8vIE1hbnVhbGx5IHBpbmcgdGhlIHdlYiBwcm9jZXNzIHRvIGNo
ZWNrIGZvciByZXNwb25zaXZlbmVzcyBzaW5jZSBvdXIgd2hlZWwKQEAgLTM5NDEsNiArMzk1NSw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlELCBzdGQ6Om9wdGlvCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBzZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6
OldpbmRvd1NjcmVlbkRpZENoYW5nZShtX3dlYlBhZ2VJRCwgZGlzcGxheUlEKSk7CiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCwgbm9t
aW5hbEZyYW1lc1BlclNlY29uZCkpOwogfQogCkBAIC03ODk5LDYgKzc5MTQsMTAgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNldFN0YXRlUmVhc29u
KQogICAgICAgICBtX3hyU3lzdGVtID0gbnVsbHB0cjsKICAgICB9CiAjZW5kaWYKKworI2lmIEVO
QUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIG1fbGFzdFNlbnRTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZSA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZChQcm9jZXNzVGVybWluYXRpb25S
ZWFzb24gdGVybWluYXRpb25SZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IGQ1ZmJlOGNjOGU2YTUwZTg4Nzc2ZGJiOTk1NjcyODE1YzExYTdlMjIuLjhkMDc2
YzIxNTI5YjAxMWFjNGY4MDI3ZmMxMmYzNTE5OTI0ZTI0YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUHJvY2Vzc1Rl
cm1pbmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5oIgogI2luY2x1
ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uUmVxdWVz
dC5oIgpAQCAtMzE1OSw2ICszMTYwLDExIEBAIHByaXZhdGU6CiAgICAgV2luZG93S2luZCBtX3dp
bmRvd0tpbmQgeyBXaW5kb3dLaW5kOjpVbnBhcmVudGVkIH07CiAKICAgICBXZWJOb3RpZmljYXRp
b25NYW5hZ2VyTWVzc2FnZUhhbmRsZXIgbV9ub3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRs
ZXI7CisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICBzdGQ6Om9w
dGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBtX3Njcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlOworICAgIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IG1f
bGFzdFNlbnRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKKyNlbmRpZgogfTsKIAogI2lmZGVm
IF9fT0JKQ19fCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBjYzBlMzg4NjBmYzM5YjI2MDk0ZGRmY2E2ZDdjZDdiYjZmMTE1ZDA2Li44MTA5
Njc1NjQ1MzMxZmRiZmJhNzJkZjFlNzEyNDM2NDYxNGEyYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0OTYsNiArMzQ5Niw5IEBA
CiAJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyRDY0ODI0OTI2NDRCMUFCMDAwMzAzMzUgLyogUmVtb3RlTGF5ZXJU
cmVlTGF5ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxheWVy
VHJlZUxheWVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDY0ODI0QTI2NDRC
MUFCMDAwMzAzMzUgLyogUmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyRDY1RDE5NDI3NEI4RTczMDA5QzQxMDEgLyogU2Nyb2xs
aW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MkQ2NUQxOTUyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTJENjVEMTk2Mjc0QjhFODQwMDlDNDEwMSAvKiBTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdBY2NlbGVy
YXRpb25DdXJ2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTNGMTky
QjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7IHBhdGggPSBp
b3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJENkFCNTQwMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3Iu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1BERlBhZ2VOdW1i
ZXJJbmRpY2F0b3IubW07IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyog
X1dLVGh1bWJuYWlsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tU
aHVtYm5haWxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzc5LDYgKzM3
ODIsOCBAQAogCQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0SW5wdXRDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERTlCMTNCMjIzMUY3N0MwMDUyODdC
NyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJERUFDNUNFMUFDMzY4QkIwMEExOTVEOCAvKiBfV0tGaW5kT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tGaW5kT3B0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREVFNzA5RDI3NTVBNDY4MDBGQkY4NjQgLyog
TW9tZW50dW1FdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9tZW50dW1FdmVudERp
c3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkRFRTcwOUUyNzU1QTQ2
ODAwRkJGODY0IC8qIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkRGOTU5MzQxOEE0MjQxMjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlcklP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFZpZXdHZXN0dXJl
Q29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERjlFRUUzMUE3ODFGQjQwMEI2Q0ZCRSAv
KiBBUElGcmFtZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QVBJRnJhbWVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRGOUVFRTQx
QTc4MUZCNDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBUElGcmFtZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTcwODMsNiArNzA4OCw4IEBACiAJCQkJQkMyRDAyMTYxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlLmggKi8sCiAJCQkJMUFBQjRBOEMxMjk2RjBBMjAwMjM5NTJG
IC8qIFNhbmRib3hFeHRlbnNpb24uaCAqLywKIAkJCQlFMUU1NTJDMzE2QUUwNjVFMDA0RUQ2NTMg
LyogU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oICovLAorCQkJCTJENjVEMTk2Mjc0
QjhFODQwMDlDNDEwMSAvKiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHAgKi8sCisJCQkJ
MkQ2NUQxOTUyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmgg
Ki8sCiAJCQkJNUM4MEIzREQyMzY5MEYxMDAwODZFNkRFIC8qIFNlcnZpY2VXb3JrZXJJbml0aWFs
aXphdGlvbkRhdGEuY3BwICovLAogCQkJCTVDODBCM0RCMjM2OTBEOEQwMDg2RTZERSAvKiBTZXJ2
aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJMUFGREU2NTcxOTU0QTQyQjAw
QzQ4RkZBIC8qIFNlc3Npb25TdGF0ZS5jcHAgKi8sCkBAIC05ODczLDkgKzk4ODAsOSBAQAogCQk1
QzE1N0EwQTI3MTdDOUYxMDBFRDUyODAgLyogd2VicHVzaGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTVDQkI2RDREMjcxRjY3Q0MwMEZEMUE1RCAvKiBj
b20uYXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAogCQkJCTUxNjBFOTU0Mjc0Qjg4NzEw
MDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggKi8sCiAJCQkJNTE2MEU5NTMyNzRCODg3MTAw
NTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gKi8sCisJCQkJNUNCQjZENEQyNzFGNjdDQzAw
RkQxQTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxpc3QgKi8sCiAJCQkJNTFGN0JC
NzUyNzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLmggKi8sCiAJCQkJ
NTFGN0JCNzQyNzQ0OThCQTAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLm1tICov
LAogCQkJCTUxNjBFOTVDMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnku
aCAqLywKQEAgLTEwNjEyLDYgKzEwNjE5LDggQEAKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0
RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk5QjAzM0U3MjI1MjU4MEYzMDA1MDEwNzEg
LyogSVBDVGVzdGluZ0FQSS5jcHAgKi8sCiAJCQkJOUIwMzNFNzEyNTI1ODBGMzAwNTAxMDcxIC8q
IElQQ1Rlc3RpbmdBUEkuaCAqLywKKwkJCQkyREVFNzA5RTI3NTVBNDY4MDBGQkY4NjQgLyogTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuY3BwICovLAorCQkJCTJERUU3MDlEMjc1NUE0NjgwMEZCRjg2
NCAvKiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUw
MDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNC
OTEgLyogUGFnZUJhbm5lci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBW
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKQEAgLTExMTc4LDYgKzExMTg3LDcg
QEAKIAkJCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICov
LAogCQkJCUMxRTEyM0I5MjBBMTE1NzIwMDI2NDZGNCAvKiBQREZDb250ZXh0TWVudS5oICovLAog
CQkJCUUxQ0MxQjhGMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9NYWMubW0gKi8sCisJCQkJ
MkQ2NUQxOTQyNzRCOEU3MzAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFj
Lm1tICovLAogCQkJCTUxRDEzMDRGMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERh
dGEuY3BwICovLAogCQkJCTUxRDEzMDUwMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVz
dERhdGEuaCAqLywKIAkJCQk1MUQxMzA1MTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3Bv
bnNlRGF0YS5jcHAgKi8sCkBAIC0xMjQyMywxMyArMTI0MzMsMTMgQEAKIAkJCWlzYSA9IFBCWEhl
YWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAorCQkJCTUxNjBFOTU2Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzE1NzlGQzI3MTdBRjUwMDBFRDUyODAgLyogRGFlbW9u
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY3QkI3NzI3NDQ5OEJCMDBDNDVBNzIg
LyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjBFOTVF
Mjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxNjBFOTU5Mjc0QzBEODkwMDU2NzM4OCAvKiBQdXNoQXBwQnVuZGxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUY3QkI3QjI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENsaWVudENvbm5l
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjBFOTVFMjc0QzJBMDMwMDU2NzM4OCAvKiBN
b2NrQXBwQnVuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTVDMTU3OUZDMjcxN0FG
NTAwMEVENTI4MCAvKiBEYWVtb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjBF
OTU2Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTJDRDY5RjI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTFGN0JCNzcyNzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JU
ZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE0OTYzLDE2ICsxNDk3MywxNiBAQAogCQkJaXNh
ID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwogCQkJZmlsZXMgPSAoCisJCQkJNTE2MEU5NTUyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRs
ZVJlcXVlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdCN0ZCMDBFRDUyODAg
LyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCN0QyNzQ1NjQw
NDAwQzQ1QTcyIC8qIENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkYy
NzE3QjZEMjAwRUQ1MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NUMxNTc5RkUyNzE3QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUMxNTc5RkIyNzE3QUY1MDAwRUQ1MjgwIC8qIERhZW1vblV0aWxpdGllcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUxRjdCQjc2Mjc0NDk4QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVu
ZGxlRm9yVGVzdGluZy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxNjBFOTU1Mjc0Qjg4NzIwMDU2
NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2MEU5NUEy
NzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
MTYwRTk2MDI3NEMyQTQwMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5Lm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNTE2MEU5NUEyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUY3QkI3QzI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENs
aWVudENvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk1QzE1NzlGRTI3MTdCNkMxMDBF
RDUyODAgLyogRGFlbW9uRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1QzE1NzlGQjI3
MTdBRjUwMDBFRDUyODAgLyogRGFlbW9uVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTEyQ0Q2QTAyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1QzE1N0EwQzI3MTdDQTFEMDBFRDUyODAgLyogV2ViUHVzaERhZW1vbk1haW4ubW0g
aW4gU291cmNlcyAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAyYjlkYTcwNTUwMjkxZTUxZWQyM2Jj
NDlhZDc4Zjk0YWFiZDA1Zjk1Li43ZTg5MWY3MTVkNmM5NjY2NjgxYjllMTMxZDhlZGE4YWI4Zjhi
M2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERp
c3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJFdmVudERpc3BhdGNo
ZXIuaCIKIAogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
TW9tZW50dW1FdmVudERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNpb24u
aCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMu
aCIKQEAgLTYzLDYgKzY0LDkgQEAgUmVmPEV2ZW50RGlzcGF0Y2hlcj4gRXZlbnREaXNwYXRjaGVy
OjpjcmVhdGUoKQogRXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoKQogICAgIDogbV9x
dWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5FdmVudERpc3BhdGNoZXIi
LCBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKICAgICAsIG1fcmVjZW50V2hlZWxF
dmVudERlbHRhRmlsdGVyKFdoZWVsRXZlbnREZWx0YUZpbHRlcjo6Y3JlYXRlKCkpCisjaWYgRU5B
QkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgLCBtX21vbWVudHVtRXZlbnREaXNw
YXRjaGVyKFdURjo6bWFrZVVuaXF1ZTxNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcj4oKnRoaXMpKQor
I2VuZGlmCiB7CiB9CiAKQEAgLTk3LDcgKzEwMSw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpp
bml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAgICAgY29u
bmVjdGlvbi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpFdmVudERpc3Bh
dGNoZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9xdWV1ZS5nZXQoKSwgdGhpcyk7CiB9CiAK
LXZvaWQgRXZlbnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwg
Y29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgUmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJh
bmRhYmxlRWRnZXMpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6aW50ZXJuYWxXaGVlbEV2ZW50KFBh
Z2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgUmVj
dEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxlRWRnZXMsIFdoZWVsRXZlbnRPcmlnaW4gd2hlZWxF
dmVudE9yaWdpbikKIHsKICAgICBhdXRvIHByb2Nlc3NpbmdTdGVwcyA9IE9wdGlvblNldDxXZWJD
b3JlOjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiB7IFdoZWVsRXZlbnRQcm9jZXNzaW5nU3Rl
cHM6Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcsIFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1h
aW5UaHJlYWRGb3JCbG9ja2luZ0RPTUV2ZW50RGlzcGF0Y2ggfTsKICNpZiBFTkFCTEUoU0NST0xM
SU5HX1RIUkVBRCkKQEAgLTExNCw3ICsxMTgsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hl
ZWxFdmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZQog
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zY3JvbGxpbmdUcmVlc0xvY2sgfTsKICAgICAgICAg
YXV0byBzY3JvbGxpbmdUcmVlID0gbV9zY3JvbGxpbmdUcmVlcy5nZXQocGFnZUlEKTsKICAgICAg
ICAgaWYgKCFzY3JvbGxpbmdUcmVlKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaFdoZWVsRXZlbnRW
aWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKKyAgICAg
ICAgICAgIGRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3aGVlbEV2ZW50
LCBwcm9jZXNzaW5nU3RlcHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMzYsMTAgKzE0MCwxMCBAQCB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6d2hlZWxFdmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVs
RXZlbnQmIHdoZQogCiAgICAgICAgIHNjcm9sbGluZ1RyZWUtPndpbGxQcm9jZXNzV2hlZWxFdmVu
dCgpOwogCi0gICAgICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWUs
IHdoZWVsRXZlbnQsIHBsYXRmb3JtV2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzLCB1c2VNYWlu
VGhyZWFkRm9yU2Nyb2xsaW5nLCBwYWdlSUQsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
XSB7CisgICAgICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWUsIHdo
ZWVsRXZlbnQsIHBsYXRmb3JtV2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzLCB1c2VNYWluVGhy
ZWFkRm9yU2Nyb2xsaW5nLCBwYWdlSUQsIHdoZWVsRXZlbnRPcmlnaW4sIHByb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9XSB7CiAgICAgICAgICAgICBpZiAodXNlTWFpblRocmVhZEZvclNjcm9s
bGluZykgewogICAgICAgICAgICAgICAgIHNjcm9sbGluZ1RyZWUtPndpbGxTZW5kRXZlbnRUb01h
aW5UaHJlYWQocGxhdGZvcm1XaGVlbEV2ZW50KTsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5kaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwg
cHJvY2Vzc2luZ1N0ZXBzKTsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNwYXRj
aFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0
ZXBzLCB3aGVlbEV2ZW50T3JpZ2luKTsKICAgICAgICAgICAgICAgICBzY3JvbGxpbmdUcmVlLT53
YWl0Rm9yRXZlbnRUb0JlUHJvY2Vzc2VkQnlNYWluVGhyZWFkKHBsYXRmb3JtV2hlZWxFdmVudCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTQ3LDE0ICsxNTEs
MTUgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFn
ZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGUKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
c2Nyb2xsaW5nVHJlZS0+aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybVdoZWVsRXZlbnQsIHByb2Nl
c3NpbmdTdGVwcyk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubmVlZHNNYWluVGhyZWFkUHJv
Y2Vzc2luZygpKSB7Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hXaGVl
bEV2ZW50VmlhTWFpblRocmVhZChwYWdlSUQsIHdoZWVsRXZlbnQsIHJlc3VsdC5zdGVwcyk7Cisg
ICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRo
cmVhZChwYWdlSUQsIHdoZWVsRXZlbnQsIHJlc3VsdC5zdGVwcywgd2hlZWxFdmVudE9yaWdpbik7
CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGVwcy5jb250YWlucyhXaGVlbEV2ZW50UHJv
Y2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yU2Nyb2xsaW5nKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJZiB3ZSBzY3JvbGxl
ZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZCAoZXZlbiBpZiB3ZSBzZW5kIHRoZSBldmVudCB0byB0
aGUgbWFpbiB0aHJlYWQgZm9yIHBhc3NpdmUgZXZlbnQgaGFuZGxlcnMpCiAgICAgICAgICAgICAv
LyByZXNwb25kIHRvIHRoZSBVSSBwcm9jZXNzIHRoYXQgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLgot
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZERpZFJlY2VpdmVFdmVudChwYWdlSUQsIHdo
ZWVsRXZlbnQudHlwZSgpLCByZXN1bHQud2FzSGFuZGxlZCk7CisgICAgICAgICAgICBpZiAod2hl
ZWxFdmVudE9yaWdpbiA9PSBXaGVlbEV2ZW50T3JpZ2luOjpVSVByb2Nlc3MpCisgICAgICAgICAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZERpZFJlY2VpdmVFdmVudChwYWdlSUQsIHdoZWVsRXZl
bnQudHlwZSgpLCByZXN1bHQud2FzSGFuZGxlZCk7CiAgICAgICAgIH0pOwogICAgIH0gd2hpbGUg
KGZhbHNlKTsKICNlbHNlCkBAIC0xNjQsNiArMTY5LDI3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
Ojp3aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYg
d2hlCiAjZW5kaWYKIH0KIAordm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQoUGFnZUlk
ZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBSZWN0RWRn
ZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcykKK3sKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZF
TlRfRElTUEFUQ0hFUikKKyAgICBpZiAobV9tb21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+aGFuZGxl
V2hlZWxFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMpKSB7Cisg
ICAgICAgIHNlbmREaWRSZWNlaXZlRXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LnR5cGUoKSwgdHJ1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBpbnRlcm5hbFdoZWVsRXZl
bnQocGFnZUlELCB3aGVlbEV2ZW50LCBydWJiZXJCYW5kYWJsZUVkZ2VzLCBXaGVlbEV2ZW50T3Jp
Z2luOjpVSVByb2Nlc3MpOworfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6c2V0U2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmUoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZSYgY3VydmUpCit7CisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJ
U1BBVENIRVIpCisgICAgbV9tb21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+c2V0U2Nyb2xsaW5nQWNj
ZWxlcmF0aW9uQ3VydmUocGFnZUlELCBjdXJ2ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShw
YWdlSUQpOworICAgIFVOVVNFRF9QQVJBTShjdXJ2ZSk7CisjZW5kaWYKK30KKwogI2lmIEVOQUJM
RShNQUNfR0VTVFVSRV9FVkVOVFMpCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6Z2VzdHVyZUV2ZW50
KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQmIGdl
c3R1cmVFdmVudCkKIHsKQEAgLTIzMCwxNSArMjU2LDE1IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaFRvdWNoRXZlbnRzKCkKIH0KICNlbmRpZgogCi12b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVl
bEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMpCit2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxX
aGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMsIFdoZWVsRXZlbnRPcmln
aW4gd2hlZWxFdmVudE9yaWdpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhp
cyB9LCBwYWdlSUQsIHdoZWVsRXZlbnQsIHN0ZXBzID0gcHJvY2Vzc2luZ1N0ZXBzIC0gV2hlZWxF
dmVudFByb2Nlc3NpbmdTdGVwczo6U2Nyb2xsaW5nVGhyZWFkXSgpIG11dGFibGUgewotICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5kaXNwYXRjaFdoZWVsRXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LCBz
dGVwcyk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgcGFnZUlELCB3aGVlbEV2ZW50LCB3aGVlbEV2ZW50T3JpZ2luLCBzdGVwcyA9
IHByb2Nlc3NpbmdTdGVwcyAtIFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6OlNjcm9sbGluZ1Ro
cmVhZF0oKSBtdXRhYmxlIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hXaGVlbEV2
ZW50KHBhZ2VJRCwgd2hlZWxFdmVudCwgc3RlcHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogICAgIH0p
OwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KFBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0
PFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdTdGVwcykKK3ZvaWQgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25z
dCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByb2Nlc3Np
bmdTdGVwcz4gcHJvY2Vzc2luZ1N0ZXBzLCBXaGVlbEV2ZW50T3JpZ2luIHdoZWVsRXZlbnRPcmln
aW4pCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMjQ2LDcgKzI3Miw3
IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnQoUGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2CiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB3ZWJQYWdlLT53aGVlbEV2ZW50KHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdT
dGVwcyk7CisgICAgd2ViUGFnZS0+d2hlZWxFdmVudCh3aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3Rl
cHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogfQogCiAjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5U
UykKQEAgLTI4NCw2ICszMTAsMTEgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNS
ZWZyZXNoZWQoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBjb25zdCBEaXMKICAgICB0cmFj
ZVBvaW50KERpc3BsYXlSZWZyZXNoRGlzcGF0Y2hpbmdUb01haW5UaHJlYWQsIGRpc3BsYXlJRCwg
c2VuZFRvTWFpblRocmVhZCk7CiAKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
I2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIG1fbW9tZW50dW1FdmVu
dERpc3BhdGNoZXItPmRpc3BsYXlXYXNSZWZyZXNoZWQoZGlzcGxheUlELCBkaXNwbGF5VXBkYXRl
KTsKKyNlbmRpZgorCiAgICAgbm90aWZ5U2Nyb2xsaW5nVHJlZXNEaXNwbGF5V2FzUmVmcmVzaGVk
KGRpc3BsYXlJRCk7CiAKICAgICBpZiAoIXNlbmRUb01haW5UaHJlYWQpCkBAIC0yOTUsNCArMzI2
LDE0IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwbGF5V2FzUmVmcmVzaGVkKFBsYXRmb3Jt
RGlzcGxheUlEIGRpc3BsYXlJRCwgY29uc3QgRGlzCiB9CiAjZW5kaWYKIAordm9pZCBFdmVudERp
c3BhdGNoZXI6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQYWdlSWRlbnRpZmllciBwYWdlSUQsIFBs
YXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKK3sKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRf
RElTUEFUQ0hFUikKKyAgICBtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT53aW5kb3dTY3JlZW5E
aWRDaGFuZ2UocGFnZUlELCBkaXNwbGF5SUQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocGFn
ZUlEKTsKKyAgICBVTlVTRURfUEFSQU0oZGlzcGxheUlEKTsKKyNlbmRpZgorfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0V2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RXZlbnREaXNwYXRjaGVyLmgKaW5kZXggOTg4MTIyMDFmMDQ2ZTMyM2ZlZDExYjRhMDVhMGFjOTVl
ZDUyN2QxZi4uMTE1YjJiZWY3MmI2MDQ3N2ZkMGQyODdiYTU1YmYzOTQzZjFmNjAyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgK
QEAgLTUwLDYgKzUwLDggQEAgdXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOworY2xh
c3MgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU7CiBjbGFzcyBXZWJQYWdlOwogY2xhc3MgV2Vi
V2hlZWxFdmVudDsKIApAQCAtNzYsNiArNzgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG5vdGlm
eVNjcm9sbGluZ1RyZWVzRGlzcGxheVdhc1JlZnJlc2hlZChXZWJDb3JlOjpQbGF0Zm9ybURpc3Bs
YXlJRCk7CiAKKyAgICBlbnVtIGNsYXNzIFdoZWVsRXZlbnRPcmlnaW4gOiBib29sIHsgVUlQcm9j
ZXNzLCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciB9OworICAgIHZvaWQgaW50ZXJuYWxXaGVlbEV2
ZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiwgV2ViQ29y
ZTo6UmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxlRWRnZXMsIFdoZWVsRXZlbnRPcmlnaW4p
OworCiBwcml2YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hlcigpOwogCkBAIC04NCw2ICs4OSw5IEBA
IHByaXZhdGU6CiAKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCiAgICAgdm9pZCB3aGVlbEV2ZW50
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiwgV2ViQ29yZTo6
UmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxlRWRnZXMpOworI2lmIEVOQUJMRShNT01FTlRV
TV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIHZvaWQgc2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3Vy
dmUoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlJik7CisjZW5kaWYKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKICAgICB2b2lkIHRv
dWNoRXZlbnQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYlRvdWNoRXZlbnQmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIHRvdWNoRXZlbnRXaXRo
b3V0Q2FsbGJhY2soV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYlRvdWNoRXZlbnQm
KTsKQEAgLTkzLDggKzEwMSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIC8vIFRoaXMgaXMg
Y2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2b2lkIGRpc3BhdGNoV2hlZWxFdmVudChX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYsIE9wdGlvblNldDxX
ZWJDb3JlOjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPik7Ci0gICAgdm9pZCBkaXNwYXRjaFdo
ZWVsRXZlbnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJX
aGVlbEV2ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+
KTsKKyAgICB2b2lkIGRpc3BhdGNoV2hlZWxFdmVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwg
Y29uc3QgV2ViV2hlZWxFdmVudCYsIE9wdGlvblNldDxXZWJDb3JlOjpXaGVlbEV2ZW50UHJvY2Vz
c2luZ1N0ZXBzPiwgV2hlZWxFdmVudE9yaWdpbik7CisgICAgdm9pZCBkaXNwYXRjaFdoZWVsRXZl
bnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2
ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+LCBXaGVl
bEV2ZW50T3JpZ2luKTsKIAogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQg
ZGlzcGF0Y2hUb3VjaEV2ZW50cygpOwpAQCAtMTE1LDYgKzEyMyw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBkaXNwbGF5RGlkUmVmcmVzaE9uU2Nyb2xsaW5nVGhyZWFkKFdlYkNvcmU6OlBsYXRmb3Jt
RGlzcGxheUlEKTsKICNlbmRpZgogCisgICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoV2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKTsKKwogICAg
IFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CiAKICNpZiBFTkFCTEUoU0NST0xMSU5HX1RIUkVBRCkK
QEAgLTEyNiw2ICsxMzYsMTAgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1fdG91Y2hFdmVudHNMb2Nr
OwogICAgIEhhc2hNYXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFRvdWNoRXZlbnRRdWV1ZT4g
bV90b3VjaEV2ZW50cyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fdG91Y2hFdmVudHNMb2NrKTsKICNl
bmRpZgorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgc3RkOjp1
bmlxdWVfcHRyPE1vbWVudHVtRXZlbnREaXNwYXRjaGVyPiBtX21vbWVudHVtRXZlbnREaXNwYXRj
aGVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNz
YWdlcy5pbgppbmRleCAwOWFmYzJjZWQxZDNmYmZjNjM5OTBiODg4NmI2MzY0ZjY4ODBiMzJjLi41
NjkyZWU3N2U2OWRhYTcwNjlkYTQzYjdiZTg1MDg2ZDE1YzVlNzc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1l
c3NhZ2VzLmluCkBAIC0zMiw0ICszMiw5IEBAIG1lc3NhZ2VzIC0+IEV2ZW50RGlzcGF0Y2hlciB7
CiAjaWYgSEFWRShDVkRJU1BMQVlMSU5LKQogICAgIERpc3BsYXlXYXNSZWZyZXNoZWQodWludDMy
X3QgZGlzcGxheUlELCBzdHJ1Y3QgV2ViQ29yZTo6RGlzcGxheVVwZGF0ZSB1cGRhdGUsIGJvb2wg
c2VuZFRvTWFpblRocmVhZCkKICNlbmRpZgorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJ
U1BBVENIRVIpCisgICAgU2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUoV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIgcGFnZUlELCBXZWJLaXQ6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIGN1
cnZlKQorI2VuZGlmCisgICAgV2luZG93U2NyZWVuRGlkQ2hhbmdlKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCwgdWludDMyX3QgZGlzcGxheUlEKQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3BhdGNoZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3BhdGNoZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEwNTllN2IwYTc1N2VkNjAzMGRmNjQ5N2E5MzIyMThhZWU2ZjIxYjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Nb21l
bnR1bUV2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIuaCIK
KworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorCisjaW5jbHVkZSAiRXZl
bnREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5UmVmcmVzaE1vbml0
b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBk
ZWx0YUhpc3RvcnlNYXhpbXVtQWdlID0gNTAwX21zOworc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRz
IGRlbHRhSGlzdG9yeU1heGltdW1JbnRlcnZhbCA9IDE1MF9tczsKK3N0YXRpYyBjb25zdGV4cHIg
U2Vjb25kcyBpZGVhbEN1cnZlRnJhbWVSYXRlID0gMV9zIC8gNjA7CisKK01vbWVudHVtRXZlbnRE
aXNwYXRjaGVyOjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcihFdmVudERpc3BhdGNoZXImIGRpc3Bh
dGNoZXIpCisgICAgOiBtX29ic2VydmVySUQoRGlzcGxheUxpbmtPYnNlcnZlcklEOjpnZW5lcmF0
ZSgpKQorICAgICwgbV9kaXNwYXRjaGVyKGRpc3BhdGNoZXIpCit7Cit9CisKK01vbWVudHVtRXZl
bnREaXNwYXRjaGVyOjp+TW9tZW50dW1FdmVudERpc3BhdGNoZXIoKQoreworICAgIHN0b3BEaXNw
bGF5TGluaygpOworfQorCitib29sIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpldmVudFNob3Vs
ZFN0YXJ0U3ludGhldGljTW9tZW50dW1QaGFzZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdl
SWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpIGNvbnN0Cit7CisgICAgaWYg
KGV2ZW50Lm1vbWVudHVtUGhhc2UoKSAhPSBXZWJXaGVlbEV2ZW50OjpQaGFzZUJlZ2FuKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fYWNjZWxlcmF0aW9uQ3VydmVzLmNvbnRh
aW5zKHBhZ2VJZGVudGlmaWVyKSkgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRp
b25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgbm90IHVzaW5nIHN5bnRoZXRpYyBtb21lbnR1
bSBwaGFzZTogbm8gYWNjZWxlcmF0aW9uIGN1cnZlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIWV2ZW50LnJhd1BsYXRmb3JtRGVsdGEoKSkgeworICAgICAgICBS
RUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgbm90
IHVzaW5nIHN5bnRoZXRpYyBtb21lbnR1bSBwaGFzZTogbm8gcmF3IHBsYXRmb3JtIGRlbHRhIG9u
IHN0YXJ0IGV2ZW50Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6aGFuZGxlV2hlZWxF
dmVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hl
ZWxFdmVudCYgZXZlbnQsIFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBydWJiZXJCYW5kYWJsZUVk
Z2VzKQoreworICAgIG1fbGFzdFJ1YmJlckJhbmRhYmxlRWRnZXMgPSBydWJiZXJCYW5kYWJsZUVk
Z2VzOworICAgIG1fbGFzdEluY29taW5nRXZlbnQgPSBldmVudDsKKworICAgIGJvb2wgaXNNb21l
bnR1bUV2ZW50ID0gZXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBoYXNl
Tm9uZTsKKworICAgIGlmIChtX2N1cnJlbnRHZXN0dXJlLmFjdGl2ZSkgeworICAgICAgICBib29s
IHBhZ2VJZGVudGlmaWVyQ2hhbmdlZCA9IHBhZ2VJZGVudGlmaWVyICE9IG1fY3VycmVudEdlc3R1
cmUucGFnZUlkZW50aWZpZXI7CisKKyAgICAgICAgLy8gQW55IGluY29taW5nIHdoZWVsIGV2ZW50
IG90aGVyIHRoYW4gYSBjaGFuZ2VkIGV2ZW50IGZvciB0aGUgY3VycmVudCBnZXN0dXJlCisgICAg
ICAgIC8vIHNob3VsZCBpbnRlcnJ1cHQgdGhlIGFuaW1hdGlvbjsgaW4gdGhlIHVzdWFsIGNhc2Us
IGl0IHdpbGwgYmUKKyAgICAgICAgLy8gbW9tZW50dW1QaGFzZSA9PSBQaGFzZUVuZGVkIHRoYXQg
aW50ZXJydXB0cy4KKyAgICAgICAgYm9vbCBldmVudFNob3VsZEludGVycnVwdEdlc3R1cmUgPSAh
aXNNb21lbnR1bUV2ZW50IHx8IGV2ZW50Lm1vbWVudHVtUGhhc2UoKSAhPSBXZWJXaGVlbEV2ZW50
OjpQaGFzZUNoYW5nZWQ7CisKKyAgICAgICAgaWYgKHBhZ2VJZGVudGlmaWVyQ2hhbmdlZCB8fCBl
dmVudFNob3VsZEludGVycnVwdEdlc3R1cmUpCisgICAgICAgICAgICBkaWRFbmRNb21lbnR1bVBo
YXNlKCk7CisgICAgfQorCisgICAgaWYgKGV2ZW50LnBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6
UGhhc2VCZWdhbiB8fCBldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlQ2hhbmdl
ZCkgeworICAgICAgICBkaWRTY3JvbGwoZXZlbnQpOworCisgICAgICAgIGlmIChhdXRvIGxhc3RB
Y3RpdmVQaGFzZURlbHRhID0gZXZlbnQucmF3UGxhdGZvcm1EZWx0YSgpKQorICAgICAgICAgICAg
bV9sYXN0QWN0aXZlUGhhc2VEZWx0YSA9ICpsYXN0QWN0aXZlUGhhc2VEZWx0YTsKKyAgICB9CisK
KyAgICBpZiAoZXZlbnRTaG91bGRTdGFydFN5bnRoZXRpY01vbWVudHVtUGhhc2UocGFnZUlkZW50
aWZpZXIsIGV2ZW50KSkKKyAgICAgICAgZGlkU3RhcnRNb21lbnR1bVBoYXNlKHBhZ2VJZGVudGlm
aWVyLCBldmVudCk7CisKKyAgICBib29sIGlzTW9tZW50dW1FdmVudER1cmluZ1N5bnRoZXRpY0dl
c3R1cmUgPSBpc01vbWVudHVtRXZlbnQgJiYgbV9jdXJyZW50R2VzdHVyZS5hY3RpdmU7CisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoaXNNb21lbnR1bUV2ZW50RHVyaW5nU3lu
dGhldGljR2VzdHVyZSkKKyAgICAgICAgbV9jdXJyZW50R2VzdHVyZS5hY2N1bXVsYXRlZEV2ZW50
T2Zmc2V0ICs9IGV2ZW50LmRlbHRhKCk7CisjZW5kaWYKKworICAgIC8vIENvbnN1bWUgYW55IG5v
cm1hbCBtb21lbnR1bSBldmVudHMgd2hpbGUgd2UncmUgaW5zaWRlIGEgc3ludGhldGljIG1vbWVu
dHVtIGdlc3R1cmUuCisgICAgcmV0dXJuIGlzTW9tZW50dW1FdmVudER1cmluZ1N5bnRoZXRpY0dl
c3R1cmU7Cit9CisKK3N0YXRpYyBmbG9hdCBhcHBLaXRTY3JvbGxNdWx0aXBsaWVyRm9yRXZlbnQo
Y29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgYXV0byBkZWx0YSA9IGV2ZW50LmRl
bHRhKCk7CisgICAgYXV0byB1bmFjY2VsZXJhdGVkRGVsdGEgPSBldmVudC51bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGEoKTsKKyAgICBmbG9hdCBtdWx0aXBsaWVyID0gMTsKKyAgICAKKyAgICAv
LyBGSVhNRTogQ2FuIHRoZSBBcHBLaXQgbXVsdGlwbGllciBldmVyIGRpZmZlciBieSBheGlzPwor
ICAgIGlmIChkZWx0YS53aWR0aCgpICYmIHVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpKQorICAg
ICAgICBtdWx0aXBsaWVyID0gc3RkOjptYXgobXVsdGlwbGllciwgZGVsdGEud2lkdGgoKSAvIHVu
YWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpKTsKKyAgICBpZiAoZGVsdGEuaGVpZ2h0KCkgJiYgdW5h
Y2NlbGVyYXRlZERlbHRhLmhlaWdodCgpKQorICAgICAgICBtdWx0aXBsaWVyID0gc3RkOjptYXgo
bXVsdGlwbGllciwgZGVsdGEuaGVpZ2h0KCkgLyB1bmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0KCkp
OworCisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU3ludGhldGljTW9tZW50dW1FdmVudChXZWJXaGVlbEV2ZW50OjpQaGFz
ZSBwaGFzZSwgV2ViQ29yZTo6RmxvYXRTaXplIGRlbHRhKQoreworICAgIEFTU0VSVChtX2N1cnJl
bnRHZXN0dXJlLmFjdGl2ZSk7CisgICAgQVNTRVJUKG1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGlu
Z0V2ZW50KTsKKworICAgIGF1dG8gYXBwS2l0U2Nyb2xsTXVsdGlwbGllciA9IGFwcEtpdFNjcm9s
bE11bHRpcGxpZXJGb3JFdmVudCgqbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQpOwor
ICAgIGF1dG8gYXBwS2l0QWNjZWxlcmF0ZWREZWx0YSA9IGRlbHRhICogYXBwS2l0U2Nyb2xsTXVs
dGlwbGllcjsKKyAgICBhdXRvIHdoZWVsVGlja3MgPSBhcHBLaXRBY2NlbGVyYXRlZERlbHRhIC8g
V2ViQ29yZTo6U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgIGF1dG8gdGltZSA9
IFdhbGxUaW1lOjpub3coKTsKKworICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdlIHdvdWxkIHN0aWNr
IGxlZ2l0aW1hdGUgcmF3UGxhdGZvcm1EZWx0YXMgb24gdGhlIGV2ZW50LAorICAgIC8vIGJ1dCBj
dXJyZW50bHkgbm90aGluZyB3aWxsIGNvbnN1bWUgdGhlbSwgYW5kIHdlJ2QgaGF2ZSB0byBrZWVw
IHRyYWNrIG9mIHRoZW0gc2VwYXJhdGVseS4KKyAgICBXZWJXaGVlbEV2ZW50IHN5bnRoZXRpY0V2
ZW50KFdlYkV2ZW50OjpXaGVlbCwgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQtPnBv
c2l0aW9uKCksIG1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50LT5nbG9iYWxQb3NpdGlv
bigpLCBhcHBLaXRBY2NlbGVyYXRlZERlbHRhLCB3aGVlbFRpY2tzLCBXZWJXaGVlbEV2ZW50OjpT
Y3JvbGxCeVBpeGVsV2hlZWxFdmVudCwgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQt
PmRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSgpLCBXZWJXaGVlbEV2ZW50OjpQaGFzZU5vbmUs
IHBoYXNlLCB0cnVlLCBtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudC0+c2Nyb2xsQ291
bnQoKSwgZGVsdGEsIG1fbGFzdEluY29taW5nRXZlbnQtPm1vZGlmaWVycygpLCB0aW1lLCB0aW1l
LCB7IH0pOworICAgIG1fZGlzcGF0Y2hlci5pbnRlcm5hbFdoZWVsRXZlbnQobV9jdXJyZW50R2Vz
dHVyZS5wYWdlSWRlbnRpZmllciwgc3ludGhldGljRXZlbnQsIG1fbGFzdFJ1YmJlckJhbmRhYmxl
RWRnZXMsIEV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudE9yaWdpbjo6TW9tZW50dW1FdmVudERp
c3BhdGNoZXIpOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTdGFydE1v
bWVudHVtUGhhc2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlkZW50aWZpZXIsIGNvbnN0
IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIG1fY3VycmVudEdlc3R1cmUuYWN0aXZlID0g
dHJ1ZTsKKyAgICBtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyID0gcGFnZUlkZW50aWZp
ZXI7CisgICAgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQgPSBldmVudDsKKyAgICBt
X2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRPZmZzZXQgPSB7IH07CisgICAgbV9jdXJyZW50R2VzdHVy
ZS5zdGFydFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgbV9jdXJyZW50R2VzdHVyZS5hY2Nl
bGVyYXRpb25DdXJ2ZSA9IFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlPiB7CisgICAgICAgIGF1dG8gY3VydmVJdGVyYXRvciA9IG1fYWNjZWxlcmF0aW9u
Q3VydmVzLmZpbmQobV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllcik7CisgICAgICAgIGlm
IChjdXJ2ZUl0ZXJhdG9yID09IG1fYWNjZWxlcmF0aW9uQ3VydmVzLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIGN1cnZlSXRlcmF0b3ItPnZhbHVlOworICAg
IH0oKTsKKworICAgIHN0YXJ0RGlzcGxheUxpbmsoKTsKKworICAgIC8vIEZJWE1FOiBUaGUgc3lz
dGVtIGZhbGxzIGJhY2sgZnJvbSB0aGUgdGFibGUgdG8ganVzdCBnZW5lcmF0aW5nIGRlbHRhcwor
ICAgIC8vIGRpcmVjdGx5IHdoZW4gdGhlIGZyYW1lIGludGVydmFsIGlzIHdpdGhpbiAyMGZwcyBv
ZiBpZGVhbEN1cnZlRnJhbWVSYXRlOworICAgIC8vIHdlIHNob3VsZCBwZXJoYXBzIGRvIHRoZSBz
YW1lLgorICAgIGJ1aWxkT2Zmc2V0VGFibGVXaXRoSW5pdGlhbERlbHRhKCpldmVudC5yYXdQbGF0
Zm9ybURlbHRhKCkpOworCisgICAgZGlzcGF0Y2hTeW50aGV0aWNNb21lbnR1bUV2ZW50KFdlYldo
ZWVsRXZlbnQ6OlBoYXNlQmVnYW4sIHsgfSk7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3Bh
dGNoZXI6OmRpZEVuZE1vbWVudHVtUGhhc2UoKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRHZXN0
dXJlLmFjdGl2ZSk7CisKKyAgICBkaXNwYXRjaFN5bnRoZXRpY01vbWVudHVtRXZlbnQoV2ViV2hl
ZWxFdmVudDo6UGhhc2VFbmRlZCwgeyB9KTsKKworICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1h
dGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBzYXcgbW9tZW50dW0gZW5kIHBoYXNlIHdp
dGggdG90YWwgb2Zmc2V0ICVmICVmLCBkdXJhdGlvbiAlZiAoZXZlbnQgb2Zmc2V0IHdvdWxkIGhh
dmUgYmVlbiAlZiAlZikiLCBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRPZmZzZXQud2lkdGgoKSwg
bV9jdXJyZW50R2VzdHVyZS5jdXJyZW50T2Zmc2V0LmhlaWdodCgpLCAoV2FsbFRpbWU6Om5vdygp
IC0gbV9jdXJyZW50R2VzdHVyZS5zdGFydFRpbWUpLnNlY29uZHMoKSwgbV9jdXJyZW50R2VzdHVy
ZS5hY2N1bXVsYXRlZEV2ZW50T2Zmc2V0LndpZHRoKCksIG1fY3VycmVudEdlc3R1cmUuYWNjdW11
bGF0ZWRFdmVudE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBzdG9wRGlzcGxheUxpbmsoKTsKKwor
ICAgIG1fY3VycmVudEdlc3R1cmUgPSB7IH07Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3Bh
dGNoZXI6OnNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIHBhZ2VJZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlPiBjdXJ2ZSkKK3sKKyAgICBtX2FjY2VsZXJhdGlvbkN1cnZlcy5zZXQocGFnZUlkZW50aWZp
ZXIsIGN1cnZlKTsKKworICAgIFdURjo6VGV4dFN0cmVhbSBzdHJlYW0oV1RGOjpUZXh0U3RyZWFt
OjpMaW5lTW9kZTo6U2luZ2xlTGluZSk7CisgICAgc3RyZWFtIDw8IGN1cnZlOworICAgIFJFTEVB
U0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBzZXQgY3Vy
dmUgJXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOworfQorCitXZWJDb3JlOjpQ
bGF0Zm9ybURpc3BsYXlJRCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheUlEKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllcik7CisgICAg
YXV0byBkaXNwbGF5SURJdGVyYXRvciA9IG1fZGlzcGxheUlEcy5maW5kKG1fY3VycmVudEdlc3R1
cmUucGFnZUlkZW50aWZpZXIpOworICAgIGlmIChkaXNwbGF5SURJdGVyYXRvciA9PSBtX2Rpc3Bs
YXlJRHMuZW5kKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGRpc3BsYXlJREl0
ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c3RhcnRE
aXNwbGF5TGluaygpCit7CisgICAgYXV0byBkaXNwbGF5SUQgPSB0aGlzLT5kaXNwbGF5SUQoKTsK
KyAgICBpZiAoIWRpc3BsYXlJRCkgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRp
b25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgZmFpbGVkIHRvIHN0YXJ0IGRpc3BsYXkgbGlu
ayIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFN3aXRjaCBkb3du
IHRvIGxvd2VyLXRoYW4tZnVsbC1zcGVlZCBmcmFtZSByYXRlcyBmb3IgdGhlIHRhaWwgZW5kIG9m
IHRoZSBjdXJ2ZS4KKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlN0YXJ0RGlzcGxheUxp
bmsobV9vYnNlcnZlcklELCBkaXNwbGF5SUQsIEZ1bGxTcGVlZEZyYW1lc1BlclNlY29uZCksIDAp
OworICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0
Y2hlciBzdGFydGluZyBkaXNwbGF5IGxpbmsgZm9yIGRpc3BsYXkgJWQiLCBkaXNwbGF5SUQpOwor
fQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdG9wRGlzcGxheUxpbmsoKQorewor
ICAgIGF1dG8gZGlzcGxheUlEID0gdGhpcy0+ZGlzcGxheUlEKCk7CisgICAgaWYgKCFkaXNwbGF5
SUQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZl
bnREaXNwYXRjaGVyIGZhaWxlZCB0byBzdG9wIGRpc3BsYXkgbGluayIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTdG9wRGlzcGxheUxp
bmsobV9vYnNlcnZlcklELCBkaXNwbGF5SUQpLCAwKTsKKyAgICBSRUxFQVNFX0xPRyhTY3JvbGxB
bmltYXRpb25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgc3RvcHBpbmcgZGlzcGxheSBsaW5r
IGZvciBkaXNwbGF5ICVkIiwgZGlzcGxheUlEKTsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBh
Z2VJRCwgV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQoreworICAgIGJvb2wg
YWZmZWN0c0N1cnJlbnRHZXN0dXJlID0gKHBhZ2VJRCA9PSBtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoYWZmZWN0c0N1cnJlbnRHZXN0dXJlKQorICAgICAgICBzdG9w
RGlzcGxheUxpbmsoKTsKKworICAgIG1fZGlzcGxheUlEcy5zZXQocGFnZUlELCBkaXNwbGF5SUQp
OworCisgICAgaWYgKGFmZmVjdHNDdXJyZW50R2VzdHVyZSkKKyAgICAgICAgc3RhcnREaXNwbGF5
TGluaygpOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwbGF5V2FzUmVm
cmVzaGVkKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCwgY29uc3QgV2ViQ29y
ZTo6RGlzcGxheVVwZGF0ZSYpCit7CisgICAgaWYgKCFtX2N1cnJlbnRHZXN0dXJlLmFjdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRpc3BsYXlJRCAhPSB0aGlzLT5kaXNwbGF5SUQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBhbmltYXRpb25UaW1lID0gV2FsbFRpbWU6
Om5vdygpIC0gbV9jdXJyZW50R2VzdHVyZS5zdGFydFRpbWU7CisgICAgYXV0byBkZXNpcmVkT2Zm
c2V0ID0gb2Zmc2V0QXRUaW1lKGFuaW1hdGlvblRpbWUpOworCisjaWYgIVVTRShNT01FTlRVTV9F
VkVOVF9ESVNQQVRDSEVSX1BSRU1BVFVSRV9ST1VORElORykKKyAgICAvLyBJbnRlbnRpb25hbCBk
ZWx0YSByb3VuZGluZyAoYnV0IGF0IHRoZSBlbmQhKS4KKyAgICBGbG9hdFNpemUgZGVsdGEgPSBy
b3VuZGVkSW50U2l6ZShkZXNpcmVkT2Zmc2V0IC0gbV9jdXJyZW50R2VzdHVyZS5jdXJyZW50T2Zm
c2V0KTsKKyNlbHNlCisgICAgRmxvYXRTaXplIGRlbHRhID0gZGVzaXJlZE9mZnNldCAtIG1fY3Vy
cmVudEdlc3R1cmUuY3VycmVudE9mZnNldDsKKyNlbmRpZgorCisgICAgZGlzcGF0Y2hTeW50aGV0
aWNNb21lbnR1bUV2ZW50KFdlYldoZWVsRXZlbnQ6OlBoYXNlQ2hhbmdlZCwgLWRlbHRhKTsKKwor
ICAgIG1fY3VycmVudEdlc3R1cmUuY3VycmVudE9mZnNldCArPSBkZWx0YTsKK30KKwordm9pZCBN
b21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlkU2Nyb2xsV2l0aEludGVydmFsKEZsb2F0U2l6ZSBz
aXplLCBTZWNvbmRzIGZyYW1lSW50ZXJ2YWwpCit7CisgICAgYXV0byBwdXNoID0gW10oSGlzdG9y
aWNhbERlbHRhcyYgZGVsdGFzLCBEZWx0YSBuZXdEZWx0YSkgeworICAgICAgICBib29sIGRpcmVj
dGlvbkNoYW5nZWQgPSBkZWx0YXMuc2l6ZSgpICYmIChkZWx0YXMuZmlyc3QoKS5yYXdQbGF0Zm9y
bURlbHRhID4gMCkgIT0gKG5ld0RlbHRhLnJhd1BsYXRmb3JtRGVsdGEgPiAwKTsKKyAgICAgICAg
aWYgKGRpcmVjdGlvbkNoYW5nZWQgfHwgbmV3RGVsdGEuZnJhbWVJbnRlcnZhbCA+IGRlbHRhSGlz
dG9yeU1heGltdW1BZ2UpCisgICAgICAgICAgICBkZWx0YXMuY2xlYXIoKTsKKworICAgICAgICBk
ZWx0YXMucHJlcGVuZChuZXdEZWx0YSk7CisgICAgICAgIGlmIChkZWx0YXMuc2l6ZSgpID4gZGVs
dGFIaXN0b3J5UXVldWVTaXplKQorICAgICAgICAgICAgZGVsdGFzLnJlbW92ZUxhc3QoKTsKKyAg
ICB9OworCisgICAgcHVzaChtX2RlbHRhSGlzdG9yeVgsIHsgc2l6ZS53aWR0aCgpLCBmcmFtZUlu
dGVydmFsIH0pOworICAgIHB1c2gobV9kZWx0YUhpc3RvcnlZLCB7IHNpemUuaGVpZ2h0KCksIGZy
YW1lSW50ZXJ2YWwgfSk7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmRpZFNj
cm9sbChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVu
dEdlc3R1cmUuYWN0aXZlKTsKKworICAgIGlmICghZXZlbnQucmF3UGxhdGZvcm1EZWx0YSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGRlbHRhID0gKmV2ZW50LnJhd1BsYXRmb3JtRGVs
dGEoKTsKKyAgICBhdXRvIHRpbWUgPSBldmVudC5pb0hJREV2ZW50VGltZXN0YW1wKCk7CisKKyAg
ICBpZiAoIW1fbGFzdFNjcm9sbFRpbWVzdGFtcCkgeworICAgICAgICBtX2xhc3RTY3JvbGxUaW1l
c3RhbXAgPSB0aW1lOworICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhhdCB0aGlzIG1hdGNoZXMg
dGhlIHN5c3RlbSAodGhleSBtYXkgZ28gd2l0aCAxMG1zIGZvciB0aGUgZmlyc3QgZnJhbWUpLgor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBmcmFtZUludGVydmFsID0gdGltZSAt
ICptX2xhc3RTY3JvbGxUaW1lc3RhbXA7CisgICAgbV9sYXN0U2Nyb2xsVGltZXN0YW1wID0gdGlt
ZTsKKworICAgIGRpZFNjcm9sbFdpdGhJbnRlcnZhbChkZWx0YSwgZnJhbWVJbnRlcnZhbCk7Cit9
CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmJ1aWxkT2Zmc2V0VGFibGVXaXRoSW5p
dGlhbERlbHRhKEZsb2F0U2l6ZSBpbml0aWFsVW5hY2NlbGVyYXRlZERlbHRhKQoreworI2lmIFVT
RShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSX1BSRU1BVFVSRV9ST1VORElORykKKyAgICBtX2N1
cnJlbnRHZXN0dXJlLmNhcnJ5T2Zmc2V0ID0geyB9OworI2VuZGlmCisgICAgbV9jdXJyZW50R2Vz
dHVyZS5vZmZzZXRUYWJsZS5jbGVhcigpOworCisgICAgRmxvYXRTaXplIGFjY3VtdWxhdGVkT2Zm
c2V0OworICAgIEZsb2F0U2l6ZSB1bmFjY2VsZXJhdGVkRGVsdGEgPSBpbml0aWFsVW5hY2NlbGVy
YXRlZERlbHRhOworCisgICAgZG8geworICAgICAgICBGbG9hdFNpemUgYWNjZWxlcmF0ZWREZWx0
YTsKKyAgICAgICAgc3RkOjp0aWUodW5hY2NlbGVyYXRlZERlbHRhLCBhY2NlbGVyYXRlZERlbHRh
KSA9IGNvbXB1dGVOZXh0RGVsdGEodW5hY2NlbGVyYXRlZERlbHRhKTsKKworICAgICAgICBhY2N1
bXVsYXRlZE9mZnNldCArPSBhY2NlbGVyYXRlZERlbHRhOworICAgICAgICBtX2N1cnJlbnRHZXN0
dXJlLm9mZnNldFRhYmxlLmFwcGVuZChhY2N1bXVsYXRlZE9mZnNldCk7CisgICAgfSB3aGlsZSAo
c3RkOjphYnModW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpID4gMC41IHx8IHN0ZDo6YWJzKHVu
YWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSkgPiAwLjUpOworCisgICAgUkVMRUFTRV9MT0coU2Ny
b2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGJ1aWx0IHRhYmxlIHdpdGgg
JWxkIGZyYW1lcywgaW5pdGlhbCBkZWx0YSAlZiAlZiwgZGlzdGFuY2UgJWYgJWYgKGluaXRpYWwg
ZGVsdGEgZnJvbSBsYXN0IGNoYW5nZWQgZXZlbnQgJWYgJWYpIiwgbV9jdXJyZW50R2VzdHVyZS5v
ZmZzZXRUYWJsZS5zaXplKCksIGluaXRpYWxVbmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSwgaW5p
dGlhbFVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSwgYWNjdW11bGF0ZWRPZmZzZXQud2lkdGgo
KSwgYWNjdW11bGF0ZWRPZmZzZXQuaGVpZ2h0KCksIG1fbGFzdEFjdGl2ZVBoYXNlRGVsdGEud2lk
dGgoKSwgbV9sYXN0QWN0aXZlUGhhc2VEZWx0YS5oZWlnaHQoKSk7Cit9CisKK3N0YXRpYyBmbG9h
dCBpbnRlcnBvbGF0ZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCB0KQoreworICAgIHJldHVybiBh
ICsgdCAqIChiIC0gYSk7Cit9CisKK0Zsb2F0U2l6ZSBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6
b2Zmc2V0QXRUaW1lKFNlY29uZHMgdGltZSkKK3sKKyAgICBpZiAoIW1fY3VycmVudEdlc3R1cmUu
b2Zmc2V0VGFibGUuc2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgZmxvYXQgZnJh
Y3Rpb25hbEZyYW1lTnVtYmVyID0gdGltZS5zZWNvbmRzKCkgLyBpZGVhbEN1cnZlRnJhbWVSYXRl
LnNlY29uZHMoKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvd2VyRnJhbWVOdW1iZXIgPSBzdGQ6Om1p
bjx1bnNpZ25lZCBsb25nPihtX2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxlLnNpemUoKSAtIDEs
IGZsb29yKGZyYWN0aW9uYWxGcmFtZU51bWJlcikpOworICAgIHVuc2lnbmVkIGxvbmcgdXBwZXJG
cmFtZU51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkIGxvbmc+KG1fY3VycmVudEdlc3R1cmUub2Zm
c2V0VGFibGUuc2l6ZSgpIC0gMSwgbG93ZXJGcmFtZU51bWJlciArIDEpOworICAgIGZsb2F0IGFt
b3VudCA9IGZyYWN0aW9uYWxGcmFtZU51bWJlciAtIGxvd2VyRnJhbWVOdW1iZXI7CisgICAgCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgLWludGVycG9sYXRlKG1fY3VycmVudEdlc3R1cmUub2Zmc2V0
VGFibGVbbG93ZXJGcmFtZU51bWJlcl0ud2lkdGgoKSwgbV9jdXJyZW50R2VzdHVyZS5vZmZzZXRU
YWJsZVt1cHBlckZyYW1lTnVtYmVyXS53aWR0aCgpLCBhbW91bnQpLAorICAgICAgICAtaW50ZXJw
b2xhdGUobV9jdXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZVtsb3dlckZyYW1lTnVtYmVyXS5oZWln
aHQoKSwgbV9jdXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZVt1cHBlckZyYW1lTnVtYmVyXS5oZWln
aHQoKSwgYW1vdW50KQorICAgIH07Cit9CisKK3N0YXRpYyBmbG9hdCBtb21lbnR1bURlY2F5UmF0
ZShGbG9hdFNpemUgZGVsdGEsIFNlY29uZHMgZnJhbWVJbnRlcnZhbCkKK3sKKyAgICBjb25zdGV4
cHIgZmxvYXQgZGVmYXVsdERlY2F5ID0gMC45NzVmOworICAgIGNvbnN0ZXhwciBmbG9hdCB0YWls
VmVsb2NpdHkgPSAyNTAuZjsKKyAgICBjb25zdGV4cHIgZmxvYXQgdGFpbERlY2F5ID0gMC45MWY7
CisgICAgYXV0byBhbHBoYSA9IGRlZmF1bHREZWNheTsKKworICAgIGlmIChmcmFtZUludGVydmFs
KSB7CisgICAgICAgIGZsb2F0IGluaXRpYWxWZWxvY2l0eSA9IGRlbHRhLmRpYWdvbmFsTGVuZ3Ro
KCkgLyBmcmFtZUludGVydmFsLnNlY29uZHMoKTsKKyAgICAgICAgZmxvYXQgd2Vha01vbWVudHVt
ID0gc3RkOjptYXg8ZmxvYXQ+KDAuZiwgKHRhaWxWZWxvY2l0eSAtIGluaXRpYWxWZWxvY2l0eSkg
LyB0YWlsVmVsb2NpdHkpOworICAgICAgICBhbHBoYSA9IGRlZmF1bHREZWNheSAtIChkZWZhdWx0
RGVjYXkgLSB0YWlsRGVjYXkpICogd2Vha01vbWVudHVtOworICAgIH0KKworICAgIHJldHVybiBz
dGQ6OnBvdyhhbHBoYSwgKGZyYW1lSW50ZXJ2YWwuc2Vjb25kcygpIC8gMC4wMDhmKSk7Cit9CisK
K3N0ZDo6cGFpcjxGbG9hdFNpemUsIEZsb2F0U2l6ZT4gTW9tZW50dW1FdmVudERpc3BhdGNoZXI6
OmNvbXB1dGVOZXh0RGVsdGEoRmxvYXRTaXplIGN1cnJlbnRVbmFjY2VsZXJhdGVkRGVsdGEpCit7
CisgICAgRmxvYXRTaXplIHVuYWNjZWxlcmF0ZWREZWx0YSA9IGN1cnJlbnRVbmFjY2VsZXJhdGVk
RGVsdGE7CisKKyAgICBmbG9hdCBkZWNheVJhdGUgPSBtb21lbnR1bURlY2F5UmF0ZSh1bmFjY2Vs
ZXJhdGVkRGVsdGEsIGlkZWFsQ3VydmVGcmFtZVJhdGUpOworICAgIHVuYWNjZWxlcmF0ZWREZWx0
YS5zY2FsZShkZWNheVJhdGUpOworCisgICAgYXV0byBxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVs
dGEgPSB1bmFjY2VsZXJhdGVkRGVsdGE7CisKKyNpZiBVU0UoTU9NRU5UVU1fRVZFTlRfRElTUEFU
Q0hFUl9QUkVNQVRVUkVfUk9VTkRJTkcpCisgICAgLy8gUm91bmQgYW5kIGNhcnJ5LgorICAgIGlu
dDMyX3QgcXVhbnRpemVkWCA9IHN0ZDo6cm91bmQocXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRh
LndpZHRoKCkpOworICAgIGludDMyX3QgcXVhbnRpemVkWSA9IHN0ZDo6cm91bmQocXVhbnRpemVk
VW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpKTsKKworICAgIGlmIChzdGQ6OmFicyhxdWFudGl6
ZWRVbmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSkgPCAxICYmIHN0ZDo6YWJzKHF1YW50aXplZFVu
YWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSkgPCAxKSB7CisgICAgICAgIGZsb2F0IGRlbHRhWElu
Y2x1ZGluZ0NhcnJ5ID0gcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkgKyBtX2N1
cnJlbnRHZXN0dXJlLmNhcnJ5T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IGRlbHRhWUlu
Y2x1ZGluZ0NhcnJ5ID0gcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpICsgbV9j
dXJyZW50R2VzdHVyZS5jYXJyeU9mZnNldC5oZWlnaHQoKTsKKworICAgICAgICAvLyBJbnRlbnRp
b25hbCB0cnVuY2F0aW9uLgorICAgICAgICBxdWFudGl6ZWRYID0gZGVsdGFYSW5jbHVkaW5nQ2Fy
cnk7CisgICAgICAgIHF1YW50aXplZFkgPSBkZWx0YVlJbmNsdWRpbmdDYXJyeTsKKyAgICAgICAg
bV9jdXJyZW50R2VzdHVyZS5jYXJyeU9mZnNldCA9IHsgZGVsdGFYSW5jbHVkaW5nQ2FycnkgLSBx
dWFudGl6ZWRYLCBkZWx0YVlJbmNsdWRpbmdDYXJyeSAtIHF1YW50aXplZFkgfTsKKyAgICB9CisK
KyAgICBxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEgPSB7IHN0YXRpY19jYXN0PGZsb2F0Pihx
dWFudGl6ZWRYKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHF1YW50aXplZFkpIH07CisjZW5kaWYKKwor
ICAgIC8vIFRoZSBkZWx0YSBxdWV1ZSBvcGVyYXRlcyBvbiBwcmUtYWNjZWxlcmF0aW9uIGRlbHRh
cywgc28gaW5zZXJ0IHRoZSBuZXcgZXZlbnQgKmJlZm9yZSogYWNjZWxlcmF0aW5nLgorICAgIGRp
ZFNjcm9sbFdpdGhJbnRlcnZhbChxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEsIGlkZWFsQ3Vy
dmVGcmFtZVJhdGUpOworCisgICAgYXV0byBhY2NlbGVyYXRlQXhpcyA9IFsmXSAoSGlzdG9yaWNh
bERlbHRhcyYgZGVsdGFzLCBmbG9hdCB2YWx1ZSkgeworICAgICAgICBmbG9hdCB0b3RhbERlbHRh
ID0gMDsKKyAgICAgICAgU2Vjb25kcyB0b3RhbFRpbWU7CisgICAgICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRlbHRhIDogZGVsdGFzKSB7CisgICAg
ICAgICAgICB0b3RhbERlbHRhICs9IHN0ZDo6YWJzKGRlbHRhLnJhd1BsYXRmb3JtRGVsdGEpOwor
ICAgICAgICAgICAgY291bnQrKzsKKworICAgICAgICAgICAgaWYgKGRlbHRhLmZyYW1lSW50ZXJ2
YWwgPiBkZWx0YUhpc3RvcnlNYXhpbXVtSW50ZXJ2YWwpIHsKKyAgICAgICAgICAgICAgICB0b3Rh
bFRpbWUgKz0gZGVsdGFIaXN0b3J5TWF4aW11bUludGVydmFsOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b3RhbFRpbWUgKz0gZGVsdGEuZnJh
bWVJbnRlcnZhbDsKKworICAgICAgICAgICAgaWYgKHRvdGFsVGltZSA+PSBkZWx0YUhpc3RvcnlN
YXhpbXVtQWdlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byBhdmVyYWdlRnJhbWVJbnRlcnZhbCA9IHN0ZDo6Y2xhbXAodG90YWxUaW1lIC8gY291bnQs
IDFfbXMsIGRlbHRhSGlzdG9yeU1heGltdW1JbnRlcnZhbCk7CisgICAgICAgIGZsb2F0IGF2ZXJh
Z2VGcmFtZUludGVydmFsTVMgPSBhdmVyYWdlRnJhbWVJbnRlcnZhbC5taWxsaXNlY29uZHMoKTsK
KyAgICAgICAgZmxvYXQgYXZlcmFnZURlbHRhID0gdG90YWxEZWx0YSAvIGNvdW50OworCisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIGlmICghbV9jdXJyZW50R2VzdHVyZS5kaWRM
b2dJbml0aWFsUXVldWVTdGF0ZSkKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1h
dGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBpbml0aWFsIGhpc3RvcmljYWwgZGVsdGFz
OiBhdmVyYWdlIGRlbHRhICVmLCBhdmVyYWdlIHRpbWUgJWZtcywgZXZlbnQgY291bnQgJWQiLCBh
dmVyYWdlRGVsdGEsIGF2ZXJhZ2VGcmFtZUludGVydmFsTVMsIGNvdW50KTsKKyNlbmRpZgorCisg
ICAgICAgIGNvbnN0ZXhwciBmbG9hdCB2ZWxvY2l0eUdhaW5BID0gMi5mIC8gNjU1MzYuMGY7Cisg
ICAgICAgIGNvbnN0ZXhwciBmbG9hdCB2ZWxvY2l0eUdhaW5CID0gOTU1LmYgLyA2NTUzNi4wZjsK
KyAgICAgICAgY29uc3RleHByIGZsb2F0IHZlbG9jaXR5Q29uc3RhbnQgPSA5ODM2OS5mIC8gNjU1
MzYuMGY7CisgICAgICAgIGNvbnN0ZXhwciBmbG9hdCBtaW5pbXVtVmVsb2NpdHkgPSAxLmYgLyA2
NTUzNi4wZjsKKworICAgICAgICBmbG9hdCB2ZWxvY2l0eSA9ICh2ZWxvY2l0eUdhaW5BICogYXZl
cmFnZUZyYW1lSW50ZXJ2YWxNUyAqIGF2ZXJhZ2VGcmFtZUludGVydmFsTVMgLSB2ZWxvY2l0eUdh
aW5CICogYXZlcmFnZUZyYW1lSW50ZXJ2YWxNUyArIHZlbG9jaXR5Q29uc3RhbnQpICogYXZlcmFn
ZURlbHRhOworICAgICAgICB2ZWxvY2l0eSA9IHN0ZDo6bWF4PGZsb2F0Pih2ZWxvY2l0eSwgbWlu
aW11bVZlbG9jaXR5KTsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBtYXRoIGlzIGluY29tcGxl
dGUgaWYgd2UgbmVlZCB0byBzdXBwb3J0IGFjY2VsZXJhdGlvbiB0YWJsZXMgYXMgd2VsbC4KKyAg
ICAgICAgZmxvYXQgbXVsdGlwbGllciA9IG1fY3VycmVudEdlc3R1cmUuYWNjZWxlcmF0aW9uQ3Vy
dmUtPmFjY2VsZXJhdGlvbkZhY3Rvcih2ZWxvY2l0eSkgLyB2ZWxvY2l0eTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlICogbXVsdGlwbGllcjsKKyAgICB9OworCisgICAgRmxvYXRTaXplIGFjY2VsZXJh
dGVkRGVsdGEoCisgICAgICAgIGFjY2VsZXJhdGVBeGlzKG1fZGVsdGFIaXN0b3J5WCwgcXVhbnRp
emVkVW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpLAorICAgICAgICBhY2NlbGVyYXRlQXhpcyht
X2RlbHRhSGlzdG9yeVksIHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSkKKyAg
ICApOworCisgICAgbV9jdXJyZW50R2VzdHVyZS5kaWRMb2dJbml0aWFsUXVldWVTdGF0ZSA9IHRy
dWU7CisKKyAgICByZXR1cm4geyB1bmFjY2VsZXJhdGVkRGVsdGEsIGFjY2VsZXJhdGVkRGVsdGEg
fTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3BhdGNoZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWJmMTUzZmJmMWI5OGIyNmI2ODEwYTlkNTAzYzBjMWRhYjM2OWIyNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL01vbWVu
dHVtRXZlbnREaXNwYXRjaGVyLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorCisvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSBkZWNpZGUgd2hpY2ggdmVyc2lvbiB3ZSB3YW50Lgor
I2RlZmluZSBVU0VfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9QUkVNQVRVUkVfUk9VTkRJTkcg
MAorCisjaW5jbHVkZSAiU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJX
ZWJXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2VJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWN0RWRnZXMu
aD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBEaXNwbGF5VXBkYXRlOwordXNpbmcgUGxhdGZvcm1E
aXNwbGF5SUQgPSB1aW50MzJfdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEV2
ZW50RGlzcGF0Y2hlcjsKKworY2xhc3MgTW9tZW50dW1FdmVudERpc3BhdGNoZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE1vbWVudHVtRXZlbnREaXNwYXRjaGVyKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcihF
dmVudERpc3BhdGNoZXImKTsKKyAgICB+TW9tZW50dW1FdmVudERpc3BhdGNoZXIoKTsKKworICAg
IGJvb2wgaGFuZGxlV2hlZWxFdmVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2Vi
V2hlZWxFdmVudCYsIFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBydWJiZXJCYW5kYWJsZUVkZ2Vz
KTsKKworICAgIHZvaWQgc2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUoV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+KTsK
KworICAgIHZvaWQgZGlzcGxheVdhc1JlZnJlc2hlZChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJ
RCwgY29uc3QgV2ViQ29yZTo6RGlzcGxheVVwZGF0ZSYpOworCisgICAgdm9pZCB3aW5kb3dTY3Jl
ZW5EaWRDaGFuZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBsYXRmb3JtRGlz
cGxheUlEKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZFN0YXJ0TW9tZW50dW1QaGFzZShXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYpOworICAgIHZvaWQgZGlk
RW5kTW9tZW50dW1QaGFzZSgpOworCisgICAgYm9vbCBldmVudFNob3VsZFN0YXJ0U3ludGhldGlj
TW9tZW50dW1QaGFzZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVu
dCYpIGNvbnN0OworCisgICAgdm9pZCBzdGFydERpc3BsYXlMaW5rKCk7CisgICAgdm9pZCBzdG9w
RGlzcGxheUxpbmsoKTsKKworICAgIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJ
RCgpIGNvbnN0OworCisgICAgdm9pZCBkaXNwYXRjaFN5bnRoZXRpY01vbWVudHVtRXZlbnQoV2Vi
V2hlZWxFdmVudDo6UGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBkZWx0YSk7CisKKyAgICB2b2lk
IGJ1aWxkT2Zmc2V0VGFibGVXaXRoSW5pdGlhbERlbHRhKEZsb2F0U2l6ZSk7CisKKyAgICBGbG9h
dFNpemUgb2Zmc2V0QXRUaW1lKFNlY29uZHMpOworICAgIHN0ZDo6cGFpcjxGbG9hdFNpemUsIEZs
b2F0U2l6ZT4gY29tcHV0ZU5leHREZWx0YShGbG9hdFNpemUgY3VycmVudFVuYWNjZWxlcmF0ZWRE
ZWx0YSk7CisKKyAgICB2b2lkIGRpZFNjcm9sbFdpdGhJbnRlcnZhbChGbG9hdFNpemUsIFNlY29u
ZHMpOworICAgIHZvaWQgZGlkU2Nyb2xsKGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKworICAgIHN0
cnVjdCBEZWx0YSB7CisgICAgICAgIGZsb2F0IHJhd1BsYXRmb3JtRGVsdGE7CisgICAgICAgIFNl
Y29uZHMgZnJhbWVJbnRlcnZhbDsKKyAgICB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgZGVsdGFIaXN0b3J5UXVldWVTaXplID0gOTsKKyAgICB0eXBlZGVmIERlcXVlPERlbHRhLCBk
ZWx0YUhpc3RvcnlRdWV1ZVNpemU+IEhpc3RvcmljYWxEZWx0YXM7CisgICAgSGlzdG9yaWNhbERl
bHRhcyBtX2RlbHRhSGlzdG9yeVg7CisgICAgSGlzdG9yaWNhbERlbHRhcyBtX2RlbHRhSGlzdG9y
eVk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1lPiBtX2xhc3RTY3JvbGxUaW1lc3RhbXA7
CisgICAgc3RkOjpvcHRpb25hbDxXZWJXaGVlbEV2ZW50PiBtX2xhc3RJbmNvbWluZ0V2ZW50Owor
ICAgIFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBtX2xhc3RSdWJiZXJCYW5kYWJsZUVkZ2VzOwor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIEZsb2F0U2l6ZSBtX2xhc3RBY3RpdmVQaGFz
ZURlbHRhOworI2VuZGlmCisKKyAgICBzdHJ1Y3QgeworICAgICAgICBib29sIGFjdGl2ZSB7IGZh
bHNlIH07CisKKyAgICAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlkZW50aWZpZXI7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IGFjY2Vs
ZXJhdGlvbkN1cnZlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYldoZWVsRXZlbnQ+IGluaXRp
YXRpbmdFdmVudDsKKworICAgICAgICBGbG9hdFNpemUgY3VycmVudE9mZnNldDsKKyAgICAgICAg
V2FsbFRpbWUgc3RhcnRUaW1lOworCisgICAgICAgIFZlY3RvcjxGbG9hdFNpemU+IG9mZnNldFRh
YmxlOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIEZsb2F0U2l6ZSBhY2N1
bXVsYXRlZEV2ZW50T2Zmc2V0OworICAgICAgICBib29sIGRpZExvZ0luaXRpYWxRdWV1ZVN0YXRl
IHsgZmFsc2UgfTsKKyNlbmRpZgorCisjaWYgVVNFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVJf
UFJFTUFUVVJFX1JPVU5ESU5HKQorICAgICAgICBGbG9hdFNpemUgY2FycnlPZmZzZXQ7CisjZW5k
aWYKKyAgICB9IG1fY3VycmVudEdlc3R1cmU7CisKKyAgICBEaXNwbGF5TGlua09ic2VydmVySUQg
bV9vYnNlcnZlcklEOworICAgIEhhc2hNYXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNv
cmU6OlBsYXRmb3JtRGlzcGxheUlEPiBtX2Rpc3BsYXlJRHM7CisgICAgSGFzaE1hcDxXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2
ZT4+IG1fYWNjZWxlcmF0aW9uQ3VydmVzOworICAgIEV2ZW50RGlzcGF0Y2hlciYgbV9kaXNwYXRj
aGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA3N2Y4NGRjZTdmYWFhNDky
YWE1NWZlYTAyNWJiNjA2ZTBmZDA2YzVhLi41YzNjZmQ0MjM4NzhiNmNjNTUyMDM1MmZhZDA0NWNj
ZjU5ZjBjYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtMzAzMSw3ICszMDMxLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudChj
b25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBQYWdlKiBwYWdlLCBPcHRpb24KICAgICBy
ZXR1cm4gcGFnZS0+dXNlcklucHV0QnJpZGdlKCkuaGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybVdo
ZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVwcyk7CiB9CiAKLWJvb2wgV2ViUGFnZTo6d2hlZWxFdmVu
dChjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFBy
b2Nlc3NpbmdTdGVwcz4gcHJvY2Vzc2luZ1N0ZXBzKQorYm9vbCBXZWJQYWdlOjp3aGVlbEV2ZW50
KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHJv
Y2Vzc2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMsIEV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVu
dE9yaWdpbiB3aGVlbEV2ZW50T3JpZ2luKQogewogICAgIG1fdXNlckFjdGl2aXR5LmltcHVsc2Uo
KTsKIApAQCAtMzAzOSw3ICszMDM5LDcgQEAgYm9vbCBXZWJQYWdlOjp3aGVlbEV2ZW50KGNvbnN0
IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHIKIAogICAg
IGJvb2wgaGFuZGxlZCA9IGhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCwgbV9wYWdlLmdldCgp
LCBwcm9jZXNzaW5nU3RlcHMpOwogCi0gICAgaWYgKHByb2Nlc3NpbmdTdGVwcy5jb250YWlucyhX
aGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yU2Nyb2xsaW5nKSkKKyAgICBp
ZiAocHJvY2Vzc2luZ1N0ZXBzLmNvbnRhaW5zKFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1h
aW5UaHJlYWRGb3JTY3JvbGxpbmcpICYmIHdoZWVsRXZlbnRPcmlnaW4gPT0gRXZlbnREaXNwYXRj
aGVyOjpXaGVlbEV2ZW50T3JpZ2luOjpVSVByb2Nlc3MpCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aGVl
bEV2ZW50LnR5cGUoKSksIGhhbmRsZWQpKTsKIAogICAgIHJldHVybiBoYW5kbGVkOwpAQCAtMzA1
Myw3ICszMDUzLDcgQEAgdm9pZCBXZWJQYWdlOjpkaXNwYXRjaFdoZWVsRXZlbnRXaXRob3V0U2Ny
b2xsaW5nKGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQKICNlbHNlCiAgICAgYm9vbCBp
c0NhbmNlbGFibGUgPSB0cnVlOwogI2VuZGlmCi0gICAgYm9vbCBoYW5kbGVkID0gdGhpcy0+d2hl
ZWxFdmVudCh3aGVlbEV2ZW50LCB7IGlzQ2FuY2VsYWJsZSA/IFdoZWVsRXZlbnRQcm9jZXNzaW5n
U3RlcHM6Ok1haW5UaHJlYWRGb3JCbG9ja2luZ0RPTUV2ZW50RGlzcGF0Y2ggOiBXaGVlbEV2ZW50
UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yTm9uQmxvY2tpbmdET01FdmVudERpc3BhdGNo
IH0pOworICAgIGJvb2wgaGFuZGxlZCA9IHRoaXMtPndoZWVsRXZlbnQod2hlZWxFdmVudCwgeyBp
c0NhbmNlbGFibGUgPyBXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yQmxv
Y2tpbmdET01FdmVudERpc3BhdGNoIDogV2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6TWFpblRo
cmVhZEZvck5vbkJsb2NraW5nRE9NRXZlbnREaXNwYXRjaCB9LCBFdmVudERpc3BhdGNoZXI6Oldo
ZWVsRXZlbnRPcmlnaW46OlVJUHJvY2Vzcyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFuZGxl
ZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRl
eCBkMzU4YTI1NmMyYWIzMTcyY2UwNDI4YWZkZmRlMzk5MTQ5NmM5YzJkLi4yNjJkZTZhNDJhNjk0
OTUzMDIwMWM3MjNkYWU3ZTQ1MjJjNTcxNjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRG93bmxvYWRJ
RC5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgogI2luY2x1ZGUgIkVkaXRpbmdSYW5n
ZS5oIgorI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbklkZW50aWZpZXIuaCIKICNp
bmNsdWRlICJJZGVudGlmaWVyVHlwZXMuaCIKQEAgLTEwNjUsNyArMTA2Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHN0YXJ0V2FpdGluZ0ZvckNvbnRleHRNZW51VG9TaG93KCkgeyBtX3dhaXRpbmdG
b3JDb250ZXh0TWVudVRvU2hvdyA9IHRydWU7IH0KICNlbmRpZgogCi0gICAgYm9vbCB3aGVlbEV2
ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmLCBPcHRpb25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFBy
b2Nlc3NpbmdTdGVwcz4pOworICAgIGJvb2wgd2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50
JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+LCBFdmVudERp
c3BhdGNoZXI6OldoZWVsRXZlbnRPcmlnaW4pOwogCiAgICAgdm9pZCB3aGVlbEV2ZW50SGFuZGxl
cnNDaGFuZ2VkKGJvb2wpOwogICAgIHZvaWQgcmVjb21wdXRlU2hvcnRDaXJjdWl0SG9yaXpvbnRh
bFdoZWVsRXZlbnRzU3RhdGUoKTsK
</data>
<flag name="commit-queue"
          id="470639"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445458</attachid>
            <date>2021-11-30 12:59:44 -0800</date>
            <delta_ts>2021-11-30 13:03:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233653-20211130125943.patch</filename>
            <type>text/plain</type>
            <size>81682</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc0OGM0NDZkZTAwNmUwNDE5OGNiNmE3
YmQ0MzAwOWM0ZDQyYjgyNzguLmZmMzY4ODA5OWJmNGQ5OTk1MDMzY2RiZDhhMWQxZGE1OTRiNDFj
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhl
c2l6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzY1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODU1NzEyNTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1FbmFibGUuaDoK
KyAgICAgICAgQWRkIGFuIEVOQUJMRSgpLgorCiAyMDIxLTExLTI5ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9y
IHRoZSBXZWIgTG9jayBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDllOTY1MGE1MzFhNmE5NGU2
OTJkMDVhMTJmZjZlNDBjNDA3ZTAyNzIuLmViNDRlYjBmMWQwZGQzMDY1NDk1ZjU5ZjE2ZmIwZWUw
Y2JmMTQ2ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTExLTMw
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBh
IG1vbWVudHVtIGV2ZW50IHN5bnRoZXNpemVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2NTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NTcx
MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaDoKKyAgICAgICAgQWRkIHNvbWUgU1BJLgorCiAyMDIx
LTExLTI5ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAg
QVg6IFVuaWZ5IHNwZWVjaCBzeW50aGVzaXplciBwbGF0Zm9ybSB1c2FnZSBmb3IgTWFjL2lPUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBlNmNkM2U2Y2QxYjNkMTcyOWYxNTRmNWU4N2IwZmMyZTI2N2Q2NmQyLi41YmFl
ZGQwNTkxODYxNWI5MTUzMmNhMTA1OTcyODQ4MDdjMjQzZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2NSBAQAorMjAyMS0xMS0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgYSBtb21lbnR1bSBldmVudCBzeW50aGVzaXplcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNjUzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84NTU3MTI1OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIFNjcm9s
bEFuaW1hdGlvbnMgbG9nIGNoYW5uZWwgdG8gV2ViS2l0IChpdCBhbHJlYWR5IGV4aXN0cyBpbiBX
ZWJDb3JlKS4KKworICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZTo6Y29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKToK
KyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmV2YWx1YXRlUXVh
cnRpYyk6CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjphY2Nl
bGVyYXRpb25GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZl
bnQpOgorICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIEFkZCBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBh
IHF1YXJ0aWMgc2Nyb2xsaW5nIGFjY2VsZXJhdGlvbiBjdXJ2ZSB3aXRoCisgICAgICAgIGEgdHJh
aWxpbmcgbGluZWFyIHRhbmdlbnQgcmVnaW9uLCBhbmQgYWxsb3dzIGludGVycG9sYXRpb24gYmV0
d2VlbiBjdXJ2ZXMKKyAgICAgICAgYW5kIGV2YWx1YXRpb24gb2YgdGhlIGN1cnZlIGF0IGEgcG9p
bnQuCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFj
Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6ZnJvbUZpeGVkUG9pbnQpOgorICAgICAgICAo
V2ViS2l0OjpyZWFkRml4ZWRQb2ludFBhcmFtZXRlcik6CisgICAgICAgIChXZWJLaXQ6OmZyb21J
T0hJREN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2Nl
bGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZnJvbU5hdGl2ZVdoZWVsRXZlbnQpOgorICAgICAgICBHaXZlbiBhIE5hdGl2ZVdlYldoZWVsRXZl
bnQsIGV4dHJhY3QgaXRzIHVuZGVybHlpbmcgcGxhdGZvcm0gZXZlbnQKKyAgICAgICAgYW5kIGZl
dGNoIHRoZSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBmb3IgdGhlIG9yaWdpbmF0aW5nIGRl
dmljZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50
eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIEZldGNoIHRoZSBj
dXJyZW50IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIG9uIGVhY2ggbW9tZW50dW0gYmVnaW4g
ZXZlbnQsCisgICAgICAgIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZW5kV2hlZWxFdmVudCk6CisgICAgICAgIFNlbmQgdGhlIFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIHRvIEV2ZW50RGlzcGF0Y2hlciBqdXN0IGJlZm9yZQor
ICAgICAgICB3ZSBzZW5kIHRoZSBtb21lbnR1bSBiZWdpbiBldmVudCBhbG9uZywgaWYgaXQgaGFz
IGNoYW5nZWQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aW5kb3dTY3JlZW5E
aWRDaGFuZ2UpOgorICAgICAgICBLZWVwIEV2ZW50RGlzcGF0Y2hlciBhcHByaXNlZCBvZiBjaGFu
Z2VzIHRvIHRoZSBjdXJyZW50IHNjcmVlbiBvZiB0aGUgcGFnZS4KKworICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2Vi
S2l0OjpFdmVudERpc3BhdGNoZXI6OmludGVybmFsV2hlZWxFdmVudCk6CisgICAgICAgIEZhY3Rv
ciBtb3N0IG9mIHdoZWVsRXZlbnQgb3V0IGludG8gaW50ZXJuYWxXaGVlbEV2ZW50LCBzbyB0aGF0
CisgICAgICAgIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGNhbiBjYWxsIGludGVybmFsV2hlZWxF
dmVudCgpLCBza2lwcGluZyB0aGUgY29kZQorICAgICAgICBpbiB3aGVlbEV2ZW50KCkgdGhhdCBm
b3J3YXJkcyB0aGUgZXZlbnQuLi4gdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAg
ICAgQWxzbywga2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgZXZlbnQgY2FtZSBmcm9tIChVSSBwcm9j
ZXNzIG9yIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBhbmQgYXZvaWQgc2VuZGlu
ZyBkaWRSZWNlaXZlRXZlbnQgcmVwbGllcyB0byB0aGUgVUkgcHJvY2VzcyBmb3Igc3ludGhldGlj
CisgICAgICAgIGV2ZW50cyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dC4KKworICAgICAgICAo
V2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQpOgorICAgICAgICBGb3J3YXJkIHdo
ZWVsIGV2ZW50cyB0byBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci4KKworICAgICAgICAoV2ViS2l0
OjpFdmVudERpc3BhdGNoZXI6OnNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKToKKyAgICAg
ICAgRm9yd2FyZCBzY3JvbGxpbmcgY3VydmUgY2hhbmdlcyB0byBNb21lbnR1bUV2ZW50RGlzcGF0
Y2hlci4KKworICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZy
ZXNoZWQpOgorICAgICAgICBGb3J3YXJkIGRpc3BsYXkgcmVmcmVzaCBjYWxsYmFja3MgdG8gTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVy
Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICBGb3J3YXJkIHBhZ2Ugc2NyZWVuIGNo
YW5nZXMgdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpc3BhdGNoV2hlZWxFdmVudFdpdGhvdXRTY3Jv
bGxpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAg
IERvbid0IHNlbmQgZGlkUmVjZWl2ZUV2ZW50IGZvciBzeW50aGV0aWMgZXZlbnRzIGZyb20gdGhl
IG1haW4gdGhyZWFkIGVpdGhlci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Nb21l
bnR1bUV2ZW50RGlzcGF0Y2hlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNb21lbnR1
bUV2ZW50RGlzcGF0Y2hlcjo6TW9tZW50dW1FdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2Vi
S2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6fk1vbWVudHVtRXZlbnREaXNwYXRjaGVyKToK
KyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmV2ZW50U2hvdWxkU3Rh
cnRTeW50aGV0aWNNb21lbnR1bVBoYXNlIGNvbnN0KToKKyAgICAgICAgSWYgd2UgaGF2ZSBldmVy
eXRoaW5nIHdlIG5lZWQgKGEgc2Nyb2xsaW5nIGN1cnZlIC0gd2hpY2ggYWxzbyBpbXBsaWVzCisg
ICAgICAgIHRoYXQgdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAtIGFuZCByYXcgcGxhdGZvcm0gZGVs
dGFzKSwgYW5kIHRoZSBldmVudAorICAgICAgICBpcyBhIG1vbWVudHVtIGJlZ2luIGV2ZW50LCB3
ZSBjYW4gdXNlIGl0IHRvIHN0YXJ0IGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNlLiAKKworICAg
ICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIFN0YXJ0IG9yIHN0b3AgdGhlIG1vbWVudHVtIHBoYXNlIGFzIGFwcHJvcHJpYXRl
LgorICAgICAgICBSZWNvcmQgYW55IGluY29taW5nIGZpbmdlcnMtZG93biBwaGFzZSBldmVudHMg
aW4gYSByb2xsaW5nIGV2ZW50IGhpc3Rvcnkgc3RydWN0dXJlLgorICAgICAgICBCbG9jayBwbGF0
Zm9ybS1ldmVudC1kcml2ZW4gZXZlbnRzIGZyb20gYmVpbmcgZnVydGhlciBoYW5kbGVkIGJ5IFdl
YktpdAorICAgICAgICBpZiB3ZSBhcmUgaW5zaWRlIGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNl
LCBzaW5jZSB3ZSdsbCBiZSByZXBsYWNpbmcgdGhlbS4KKworICAgICAgICAoV2ViS2l0OjphcHBL
aXRTY3JvbGxNdWx0aXBsaWVyRm9yRXZlbnQpOgorICAgICAgICBEZXRlcm1pbmUgdGhlIEFwcEtp
dCBzY3JvbGwgbXVsaXBsaWVyICgiYWNjZWxlcmF0ZWQiIHZzICJ1bmFjY2VsZXJhdGVkIgorICAg
ICAgICBkZWx0YXMgaW4gTlNFdmVudCBwYXJsYW5jZSkgZnJvbSB0aGUgZXZlbnQgdmlhIGRpdmlz
aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aFN5bnRoZXRpY01vbWVudHVtRXZlbnQpOgorICAgICAgICBEaXNwYXRjaCBhIHN5bnRoZXRpYyBl
dmVudCB3aXRoIHRoZSBnaXZlbiBtb21lbnR1bSBwaGFzZSBhbmQgZGVsdGEuCisgICAgICAgIFdl
IGJvcnJvdyBzb21lIHByb3BlcnRpZXMgZnJvbSB0aGUgZXZlbnQgdGhhdCBpbml0aWF0ZWQgdGhl
IG1vbWVudHVtCisgICAgICAgIHBoYXNlIChlLmcuIHRoZSBwb3NpdGlvbiksIGFuZCBzb21lIGZy
b20gd2hhdGV2ZXIgZXZlbnQgd2UndmUgbW9zdAorICAgICAgICByZWNlbnRseSBzZWVuIChldmVu
IGlmIHdlIHRvbGQgdGhlIHJlc3Qgb2YgV2ViS2l0IHRvIGlnbm9yZSBpdCksIHNvCisgICAgICAg
IHRoYXQgd2UgZ2V0IHRoZSBtb3N0IHVwLXRvLWRhdGUgc3RhdGUgZm9yIGUuZy4gdGhlIGtleWJv
YXJkIG1vZGlmaWVycy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hl
cjo6ZGlkU3RhcnRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgUmVjb3JkIHJlbGV2YW50IGluZm9y
bWF0aW9uIGFib3V0IHRoZSBzdGFydCBldmVudCwgZ2VuZXJhdGUgdGhlCisgICAgICAgIG1vbWVu
dHVtIGN1cnZlLCBhbmQgc3RhcnQgYSBmdWxsLXJhdGUgZGlzcGxheSBsaW5rLiBBbHNvLCBzZW5k
IGEgbW9tZW50dW0KKyAgICAgICAgYmVnaW4gZXZlbnQsIHNpbmNlIHdlIGJsb2NrZWQgdGhlIHJl
YWwgb25lLgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRF
bmRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgU2VuZCBhIG1vbWVudHVtIGVuZGVkIGV2ZW50LCBz
aHV0IGRvd24gdGhlIGRpc3BsYXkgbGluaywgYW5kIHJlc2V0IGFsbAorICAgICAgICBwZXItZ2Vz
dHVyZSBzdGF0ZS4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6
c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICBTdG9yZSBTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZXMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0
OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheUlEIGNvbnN0KToKKyAgICAgICAgTG9v
ayB1cCB0aGUgZGlzcGxheUlEIGZvciB0aGUgY3VycmVudCBnZXN0dXJlJ3MgcGFnZS4KKworICAg
ICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c3RhcnREaXNwbGF5TGluayk6
CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdG9wRGlzcGxheUxp
bmspOgorICAgICAgICBTdGFydCBhbmQgc3RvcCBhIGRpc3BsYXkgbGluaywgd2hpY2ggd2lsbCAt
IGluIGEgcm91bmRhYm91dCBtYW5uZXIgLQorICAgICAgICBldmVudHVhbGx5IGNhbGwgYmFjayBp
bnRvIGRpc3BsYXlXYXNSZWZyZXNoZWQuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVu
dERpc3BhdGNoZXI6OndpbmRvd1NjcmVlbkRpZENoYW5nZSk6CisgICAgICAgIFN0b3JlIERpc3Bs
YXlJRHMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZCk6CisgICAgICAgIFdoZW4gdGhlIGRp
c3BsYXkgbGluayBjYWxscyB1cyBiYWNrLCBlbWl0IGEgc2luZ2xlIG1vbWVudHVtIGNoYW5nZWQK
KyAgICAgICAgZXZlbnQgb2Ygc3VmZmljaWVudCBkZWx0YSB0byBtb3ZlIHVzIHRvIHRoZSBkZXNp
cmVkIG9mZnNldCBhbG9uZyB0aGUgY3VydmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1F
dmVudERpc3BhdGNoZXI6OmRpZFNjcm9sbFdpdGhJbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXQ6
Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTY3JvbGwpOgorICAgICAgICBSZWNvcmQgaW5j
b21pbmcgc2Nyb2xsaW5nIGV2ZW50cyBpbnRvIGEgcm9sbGluZyBoaXN0b3J5IGRlcXVlLgorCisg
ICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpidWlsZE9mZnNldFRhYmxl
V2l0aEluaXRpYWxEZWx0YSk6CisgICAgICAgIENvbXB1dGUgdGhlIG9mZnNldHMgZm9yIHRoZSBl
bnRpcmUgImlkZWFsIGN1cnZlIiB0YWJsZSAoYXQgNjBIeikgYnkKKyAgICAgICAgcnVubmluZyB0
aGUgYW5pbWF0aW9uIGFuZCBhY2N1bXVsYXRpbmcgdGhlIGRlbHRhcy4KKworICAgICAgICAoV2Vi
S2l0OjppbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRj
aGVyOjpvZmZzZXRBdFRpbWUpOgorICAgICAgICBJbnRlcnBvbGF0ZSBhbG9uZyB0aGUgImlkZWFs
IGN1cnZlIiB0byBkZXRlcm1pbmUgdGhlIGludGVuZGVkIG9mZnNldAorICAgICAgICBhdCBhIGdp
dmVuIHRpbWUuCisKKyAgICAgICAgKFdlYktpdDo6bW9tZW50dW1EZWNheVJhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6Y29tcHV0ZU5leHREZWx0YSk6Cisg
ICAgICAgIENvbXB1dGUgdGhlIG5leHQgZGVsdGEgZ2l2ZW4gYSBkZWx0YSAoYW5kIHRoZSBldmVu
dCBoaXN0b3J5KSBieSBhcHBseWluZworICAgICAgICBhIGJpdCBvZiBleHBvbmVudGlhbCBkZWNh
eSBhbmQgdGhlbiBwYXNzaW5nIGl0IHRocm91Z2ggdGhlCisgICAgICAgIFNjcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlLiBXZSByZXR1cm4gYm90aCB0aGUgdW5hY2NlbGVyYXRlZAorICAgICAgICBh
bmQgYWNjZWxlcmF0ZWQgZGVsdGFzLCBiZWNhdXNlIHRoZSBpbnB1dCB0byB0aGUgbmV4dCBpdGVy
YXRpb24gb2YKKyAgICAgICAgY29tcHV0ZU5leHREZWx0YSBpcyB0aGUgdW5hY2NlbGVyYXRlZCBk
ZWx0YSwgYnV0IHRoZSBkZWx0YSBhcHBsaWVkCisgICAgICAgIHRvIHRoZSBhY3R1YWwgc2Nyb2xs
IHBvc2l0aW9uIGlzIHRoZSBhY2NlbGVyYXRlZCBkZWx0YS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oOiBBZGRlZC4KKwogMjAyMS0xMS0y
OSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
dGhlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAppbmRleCA0MmNhYTU3NWVjOGZlMmYwMTg4
Mjc3OWE0YjQzMzFiZGFjYjI3YmZmLi5iMjYzZWU0NjQ4NTY2NjVjZTkwZjc4M2Q2Y2U3ZTBkZWQ5
YWVlMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTg3Niw2ICs4NzYsMTAgQEAKICNk
ZWZpbmUgRU5BQkxFX1dIRUVMX0VWRU5UX0xBVENISU5HIDEKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oTUFDKQorI2RlZmluZSBFTkFCTEVfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUiAxCisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9TQ1JPTExJTkdfVEhSRUFEKQogI2lmIFVTRShOSUNP
U0lBKQogI2RlZmluZSBFTkFCTEVfU0NST0xMSU5HX1RIUkVBRCAxCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5oCmluZGV4IDE5ZDVlYjg0ODBhNmJjMWJkZTUx
MzhiN2Q5NTNjOTY4ODgwOTIyZTcuLjE2NGQ3MDA3MmQ1NmQ2YmY3MmI1ZmY0MDgwZTNmODM5Yzkz
NzMwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQ
SU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5o
CkBAIC04NCw2ICs4NCw3IEBAIGVudW0gewogdHlwZWRlZiB1aW50MzJfdCBJT0hJREV2ZW50VHlw
ZTsKIAogdHlwZWRlZiB1aW50MzJfdCBJT0hJREV2ZW50RmllbGQ7Cit0eXBlZGVmIHVpbnQ2NF90
IElPSElERXZlbnRTZW5kZXJJRDsKIAogI2lmZGVmIF9fTFA2NF9fCiB0eXBlZGVmIGRvdWJsZSBJ
T0hJREZsb2F0OwpAQCAtOTksNiArMTAwLDcgQEAgc3RhdGljIGNvbnN0IElPSElERXZlbnRGaWVs
ZCBrSU9ISURFdmVudEZpZWxkU2Nyb2xsWSA9IChrSU9ISURFdmVudEZpZWxkU2Nyb2xsQmEKIAog
dWludDY0X3QgSU9ISURFdmVudEdldFRpbWVTdGFtcChJT0hJREV2ZW50UmVmKTsKIElPSElERmxv
YXQgSU9ISURFdmVudEdldEZsb2F0VmFsdWUoSU9ISURFdmVudFJlZiwgSU9ISURFdmVudEZpZWxk
KTsKK0lPSElERXZlbnRTZW5kZXJJRCBJT0hJREV2ZW50R2V0U2VuZGVySUQoSU9ISURFdmVudFJl
Zik7CiAKIFdURl9FWFRFUk5fQ19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCBk
NWU3YThjYzExZWY2MGU1YmM3YTBjYzc4NjI3OGI4ZWNiMzFmZGViLi40NGUwYTdhY2I3YjUzZDYw
YjQ3YWJjNDZmOWRlMWRjZDlkZGVmY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xvZ2dpbmcuaApAQCAt
OTEsNiArOTEsNyBAQCBleHRlcm4gIkMiIHsKICAgICBNKFJlbW90ZUxheWVyVHJlZSkgXAogICAg
IE0oUmVzaXplKSBcCiAgICAgTShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSBcCisgICAgTShTY3Jv
bGxBbmltYXRpb25zKSBcCiAgICAgTShTY3JvbGxpbmcpIFwKICAgICBNKFNlbGVjdGlvbikgXAog
ICAgIE0oU2VydmljZVdvcmtlcikgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmMzdjNTViYmMyODRmMGRm
MDM2MWJmMTE3OWZhZTQwOGQ4MjZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHAKQEAgLTAsMCArMSwxOTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQWNj
ZWxlcmF0aW9uQ3VydmUuaCIKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVS
KQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6U2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmUoZmxvYXQgZ2FpbkxpbmVhciwgZmxvYXQgZ2FpblBhcmFib2xpYywgZmxvYXQg
Z2FpbkN1YmljLCBmbG9hdCBnYWluUXVhcnRpYywgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyLCBm
bG9hdCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCBmbG9hdCByZXNvbHV0aW9uKQorICAgIDog
bV9nYWluTGluZWFyKGdhaW5MaW5lYXIpCisgICAgLCBtX2dhaW5QYXJhYm9saWMoZ2FpblBhcmFi
b2xpYykKKyAgICAsIG1fZ2FpbkN1YmljKGdhaW5DdWJpYykKKyAgICAsIG1fZ2FpblF1YXJ0aWMo
Z2FpblF1YXJ0aWMpCisgICAgLCBtX3RhbmdlbnRTcGVlZExpbmVhcih0YW5nZW50U3BlZWRMaW5l
YXIpCisgICAgLCBtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QodGFuZ2VudFNwZWVkUGFyYWJv
bGljUm9vdCkKKyAgICAsIG1fcmVzb2x1dGlvbihyZXNvbHV0aW9uKQoreworfQorCitTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xh
dGUoY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIGZyb20sIGNvbnN0IFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlJiB0bywgZmxvYXQgYW1vdW50KQoreworICAgIGF1dG8gaW50ZXJw
b2xhdGUgPSBbJl0gKGZsb2F0IGEsIGZsb2F0IGIpIC0+IGZsb2F0IHsKKyAgICAgICAgcmV0dXJu
IGEgKyBhbW91bnQgKiAoYiAtIGEpOworICAgIH07CisKKyAgICBhdXRvIGdhaW5MaW5lYXIgPSBp
bnRlcnBvbGF0ZShmcm9tLm1fZ2FpbkxpbmVhciwgdG8ubV9nYWluTGluZWFyKTsKKyAgICBhdXRv
IGdhaW5QYXJhYm9saWMgPSBpbnRlcnBvbGF0ZShmcm9tLm1fZ2FpblBhcmFib2xpYywgdG8ubV9n
YWluUGFyYWJvbGljKTsKKyAgICBhdXRvIGdhaW5DdWJpYyA9IGludGVycG9sYXRlKGZyb20ubV9n
YWluQ3ViaWMsIHRvLm1fZ2FpbkN1YmljKTsKKyAgICBhdXRvIGdhaW5RdWFydGljID0gaW50ZXJw
b2xhdGUoZnJvbS5tX2dhaW5RdWFydGljLCB0by5tX2dhaW5RdWFydGljKTsKKworICAgIGF1dG8g
dGFuZ2VudFNwZWVkTGluZWFyID0gaW50ZXJwb2xhdGUoZnJvbS5tX3RhbmdlbnRTcGVlZExpbmVh
ciwgdG8ubV90YW5nZW50U3BlZWRMaW5lYXIpOworICAgIGF1dG8gdGFuZ2VudFNwZWVkUGFyYWJv
bGljUm9vdCA9IGludGVycG9sYXRlKGZyb20ubV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCB0
by5tX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpOworCisgICAgcmV0dXJuIHsgZ2FpbkxpbmVh
ciwgZ2FpblBhcmFib2xpYywgZ2FpbkN1YmljLCBnYWluUXVhcnRpYywgdGFuZ2VudFNwZWVkTGlu
ZWFyLCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCBmcm9tLm1fcmVzb2x1dGlvbiB9OworfQor
Cit2b2lkIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpjb21wdXRlSW50ZXJtZWRpYXRlVmFs
dWVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2hhc0NvbXB1dGVkSW50ZXJtZWRpYXRlVmFsdWVz
KQorICAgICAgICByZXR1cm47CisgICAgbV9oYXNDb21wdXRlZEludGVybWVkaWF0ZVZhbHVlcyA9
IHRydWU7CisKKyAgICBmbG9hdCB0YW5nZW50SW5pdGlhbFk7CisgICAgbV90YW5nZW50U3RhcnRY
ID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworICAgIG1fZmFsbG9mZlN0YXJ0
WCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKKworICAgIGF1dG8gcXVhcnRp
Y1Nsb3BlID0gWyZdKGZsb2F0IHgpIHsKKyAgICAgICAgcmV0dXJuICg0ICogc3RkOjpwb3coeCwg
MykgKiBzdGQ6OnBvdyhtX2dhaW5RdWFydGljLCA0KSkgKyAoMyAqIHN0ZDo6cG93KHgsIDIpICog
c3RkOjpwb3cobV9nYWluQ3ViaWMsIDMpKSArICgyICogeCAqIHN0ZDo6cG93KG1fZ2FpblBhcmFi
b2xpYywgMikpICsgbV9nYWluTGluZWFyOworICAgIH07CisKKyAgICBpZiAobV90YW5nZW50U3Bl
ZWRMaW5lYXIpIHsKKyAgICAgICAgdGFuZ2VudEluaXRpYWxZID0gZXZhbHVhdGVRdWFydGljKG1f
dGFuZ2VudFNwZWVkTGluZWFyKTsKKyAgICAgICAgbV90YW5nZW50U2xvcGUgPSBxdWFydGljU2xv
cGUobV90YW5nZW50U3BlZWRMaW5lYXIpOworICAgICAgICBtX3RhbmdlbnRJbnRlcmNlcHQgPSB0
YW5nZW50SW5pdGlhbFkgLSBtX3RhbmdlbnRTbG9wZSAqIG1fdGFuZ2VudFNwZWVkTGluZWFyOwor
ICAgICAgICBtX3RhbmdlbnRTdGFydFggPSBtX3RhbmdlbnRTcGVlZExpbmVhcjsKKworICAgICAg
ICBpZiAobV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290KSB7CisgICAgICAgICAgICBmbG9hdCB5
MSA9IG1fdGFuZ2VudFNsb3BlICogbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290ICsgbV90YW5n
ZW50SW50ZXJjZXB0OworICAgICAgICAgICAgbV9mYWxsb2ZmU2xvcGUgPSAyICogeTEgKiBtX3Rh
bmdlbnRTbG9wZTsKKyAgICAgICAgICAgIG1fZmFsbG9mZkludGVyY2VwdCA9IHN0ZDo6cG93KHkx
LCAyKSAtIG1fZmFsbG9mZlNsb3BlICogbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290OworICAg
ICAgICAgICAgbV9mYWxsb2ZmU3RhcnRYID0gbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290Owor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpIHsK
KyAgICAgICAgdGFuZ2VudEluaXRpYWxZID0gZXZhbHVhdGVRdWFydGljKG1fdGFuZ2VudFNwZWVk
UGFyYWJvbGljUm9vdCk7CisgICAgICAgIG1fZmFsbG9mZlNsb3BlID0gcXVhcnRpY1Nsb3BlKG1f
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCk7CisgICAgICAgIG1fZmFsbG9mZkludGVyY2VwdCA9
IHN0ZDo6cG93KHRhbmdlbnRJbml0aWFsWSwgMikgLSBtX2ZhbGxvZmZTbG9wZSAqICBtX3Rhbmdl
bnRTcGVlZFBhcmFib2xpY1Jvb3Q7CisgICAgICAgIG1fdGFuZ2VudFN0YXJ0WCA9IG1fdGFuZ2Vu
dFNwZWVkUGFyYWJvbGljUm9vdDsKKyAgICB9Cit9CisKK2Zsb2F0IFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlOjpldmFsdWF0ZVF1YXJ0aWMoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gc3RkOjpw
b3cobV9nYWluUXVhcnRpYyAqIHgsIDQpICsgc3RkOjpwb3cobV9nYWluQ3ViaWMgKiB4LCAzKSAr
IHN0ZDo6cG93KG1fZ2FpblBhcmFib2xpYyAqIHgsIDIpICsgbV9nYWluTGluZWFyICogeDsKK30K
KworZmxvYXQgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmFjY2VsZXJhdGlvbkZhY3Rvcihm
bG9hdCB2YWx1ZSkKK3sKKyAgICBjb25zdGV4cHIgZmxvYXQgZnJhbWVSYXRlID0gNjcuZjsgLy8g
V2h5IGlzIHRoaXMgNjcgYW5kIG5vdCA2MD8KKyAgICBjb25zdGV4cHIgZmxvYXQgY3Vyc29yU2Nh
bGUgPSA5Ni5mIC8gZnJhbWVSYXRlOworCisgICAgY29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lm
TmVlZGVkKCk7CisKKyAgICBmbG9hdCBtdWx0aXBsaWVyOworICAgIGZsb2F0IGRldmljZVNjYWxl
ID0gbV9yZXNvbHV0aW9uIC8gZnJhbWVSYXRlOworICAgIHZhbHVlIC89IGRldmljZVNjYWxlOwor
CisgICAgaWYgKHZhbHVlIDw9IG1fdGFuZ2VudFN0YXJ0WCkKKyAgICAgICAgbXVsdGlwbGllciA9
IGV2YWx1YXRlUXVhcnRpYyh2YWx1ZSk7CisgICAgZWxzZSBpZiAodmFsdWUgPD0gbV9mYWxsb2Zm
U3RhcnRYICYmIG1fdGFuZ2VudFN0YXJ0WCA9PSBtX3RhbmdlbnRTcGVlZExpbmVhcikKKyAgICAg
ICAgbXVsdGlwbGllciA9IG1fdGFuZ2VudFNsb3BlICogdmFsdWUgKyBtX3RhbmdlbnRJbnRlcmNl
cHQ7CisgICAgZWxzZQorICAgICAgICBtdWx0aXBsaWVyID0gc3RkOjpzcXJ0KG1fZmFsbG9mZlNs
b3BlICogdmFsdWUgKyBtX2ZhbGxvZmZJbnRlcmNlcHQpOworCisgICAgcmV0dXJuIG11bHRpcGxp
ZXIgKiBjdXJzb3JTY2FsZTsKK30KKwordm9pZCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1f
Z2FpbkxpbmVhcjsKKyAgICBlbmNvZGVyIDw8IG1fZ2FpblBhcmFib2xpYzsKKyAgICBlbmNvZGVy
IDw8IG1fZ2FpbkN1YmljOworICAgIGVuY29kZXIgPDwgbV9nYWluUXVhcnRpYzsKKworICAgIGVu
Y29kZXIgPDwgbV90YW5nZW50U3BlZWRMaW5lYXI7CisgICAgZW5jb2RlciA8PCBtX3RhbmdlbnRT
cGVlZFBhcmFib2xpY1Jvb3Q7CisKKyAgICBlbmNvZGVyIDw8IG1fcmVzb2x1dGlvbjsKK30KKwor
c3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gU2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgZmxvYXQg
Z2FpbkxpbmVhcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdhaW5MaW5lYXIpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGZsb2F0IGdhaW5QYXJhYm9saWM7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShnYWluUGFyYWJvbGljKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBmbG9hdCBnYWluQ3ViaWM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShnYWlu
Q3ViaWMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGZsb2F0IGdhaW5RdWFy
dGljOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZ2FpblF1YXJ0aWMpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodGFuZ2VudFNwZWVkTGluZWFyKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBmbG9hdCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290OworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBmbG9hdCByZXNvbHV0aW9uOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICByZXR1cm4geyB7IGdhaW5MaW5lYXIsIGdhaW5QYXJhYm9saWMsIGdhaW5DdWJpYywgZ2Fp
blF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwgdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwg
cmVzb2x1dGlvbiB9IH07Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlJiBjdXJ2ZSkKK3sKKyAgICBUZXh0
U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKworICAgIHRzIDw8ICJTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZSI7CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImdhaW5MaW5lYXIiLCBjdXJ2
ZS5tX2dhaW5MaW5lYXIpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZ2FpblBhcmFib2xpYyIsIGN1
cnZlLm1fZ2FpblBhcmFib2xpYyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJnYWluQ3ViaWMiLCBj
dXJ2ZS5tX2dhaW5DdWJpYyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJnYWluUXVhcnRpYyIsIGN1
cnZlLm1fZ2FpblF1YXJ0aWMpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidGFuZ2VudFNwZWVkTGlu
ZWFyIiwgY3VydmUubV90YW5nZW50U3BlZWRMaW5lYXIpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCIsIGN1cnZlLm1fdGFuZ2VudFNwZWVkUGFyYWJvbGlj
Um9vdCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXNvbHV0aW9uIiwgY3VydmUubV9yZXNvbHV0
aW9uKTsKKworICAgIHJldHVybiB0czsKK30KKworI2lmICFQTEFURk9STShNQUMpCisKK3N0ZDo6
b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IFNjcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JikK
K3sKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjAwZTBjNjFkYmU2NDliODMxZjQ2MzhlNWJjNTU0ZDZlY2NmYTVhZjgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorCisjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIElQQyB7CitjbGFzcyBEZWNvZGVyOworY2xhc3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIE5hdGl2ZVdlYldoZWVsRXZlbnQ7CisKK2NsYXNzIFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZShmbG9hdCBnYWluTGluZWFyLCBmbG9hdCBnYWluUGFyYWJvbGljLCBmbG9hdCBnYWluQ3Vi
aWMsIGZsb2F0IGdhaW5RdWFydGljLCBmbG9hdCB0YW5nZW50U3BlZWRMaW5lYXIsIGZsb2F0IHRh
bmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QsIGZsb2F0IHJlc29sdXRpb24pOworCisgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IGZyb21OYXRpdmVXaGVl
bEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKKworICAgIHN0YXRpYyBTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZSBpbnRlcnBvbGF0ZShjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZSYgZnJvbSwgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIHRvLCBmbG9h
dCBhbW91bnQpOworCisgICAgZmxvYXQgYWNjZWxlcmF0aW9uRmFjdG9yKGZsb2F0KTsKKworICAg
IHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ2FpbkxpbmVhciA9PSBvdGhlci5t
X2dhaW5MaW5lYXIKKyAgICAgICAgICAgICYmIG1fZ2FpblBhcmFib2xpYyA9PSBvdGhlci5tX2dh
aW5QYXJhYm9saWMKKyAgICAgICAgICAgICYmIG1fZ2FpbkN1YmljID09IG90aGVyLm1fZ2FpbkN1
YmljCisgICAgICAgICAgICAmJiBtX2dhaW5RdWFydGljID09IG90aGVyLm1fZ2FpblF1YXJ0aWMK
KyAgICAgICAgICAgICYmIG1fdGFuZ2VudFNwZWVkTGluZWFyID09IG90aGVyLm1fdGFuZ2VudFNw
ZWVkTGluZWFyCisgICAgICAgICAgICAmJiBtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QgPT0g
b3RoZXIubV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290CisgICAgICAgICAgICAmJiBtX3Jlc29s
dXRpb24gPT0gb3RoZXIubV9yZXNvbHV0aW9uOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZSYpOworCisgICAgdm9pZCBjb21wdXRlSW50ZXJtZWRpYXRlVmFsdWVzSWZOZWVkZWQoKTsK
KworICAgIGZsb2F0IGV2YWx1YXRlUXVhcnRpYyhmbG9hdCk7CisKKyAgICAvLyBJbnB1dCBwYXJh
bWV0ZXJzLgorICAgIGZsb2F0IG1fZ2FpbkxpbmVhciB7IDAgfTsKKyAgICBmbG9hdCBtX2dhaW5Q
YXJhYm9saWMgeyAwIH07CisgICAgZmxvYXQgbV9nYWluQ3ViaWMgeyAwIH07CisgICAgZmxvYXQg
bV9nYWluUXVhcnRpYyB7IDAgfTsKKyAgICBmbG9hdCBtX3RhbmdlbnRTcGVlZExpbmVhciB7IDAg
fTsKKyAgICBmbG9hdCBtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QgeyAwIH07CisgICAgZmxv
YXQgbV9yZXNvbHV0aW9uIHsgMCB9OworCisgICAgLy8gQ29tcHV0ZWQgaW50ZXJtZWRpYXRlIHZh
bHVlcy4KKyAgICBib29sIG1faGFzQ29tcHV0ZWRJbnRlcm1lZGlhdGVWYWx1ZXMgeyBmYWxzZSB9
OworICAgIGZsb2F0IG1fdGFuZ2VudFN0YXJ0WCB7IDAgfTsKKyAgICBmbG9hdCBtX3RhbmdlbnRT
bG9wZSB7IDAgfTsKKyAgICBmbG9hdCBtX3RhbmdlbnRJbnRlcmNlcHQgeyAwIH07CisgICAgZmxv
YXQgbV9mYWxsb2ZmU3RhcnRYIHsgMCB9OworICAgIGZsb2F0IG1fZmFsbG9mZlNsb3BlIHsgMCB9
OworICAgIGZsb2F0IG1fZmFsbG9mZkludGVyY2VwdCB7IDAgfTsKK307CisKK1RleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZl
Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1PTUVOVFVN
X0VWRU5UX0RJU1BBVENIRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmIxMjUzY2Iw
MmMyODkyMTM2ZWQ2MTUyYmI0NGJhMDMxOTEzNmY2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbQpAQCAt
MCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaCIKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVO
VF9ESVNQQVRDSEVSKSAmJiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2Nv
Y29hL0lPS2l0U1BJLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgZmxvYXQgZnJv
bUZpeGVkUG9pbnQoZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlIC8gNjU1MzYuMGY7
Cit9CisKK3N0YXRpYyBmbG9hdCByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihOU0RpY3Rpb25hcnkg
KnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKyAgICByZXR1cm4gZnJvbUZpeGVkUG9p
bnQoW1twYXJhbWV0ZXJzIG9iamVjdEZvcktleTpAKGtleSldIGZsb2F0VmFsdWVdKTsKK30KKwor
c3RhdGljIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIGZyb21JT0hJREN1cnZlKE5TRGljdGlv
bmFyeSAqcGFyYW1ldGVycywgZmxvYXQgcmVzb2x1dGlvbikKK3sKKyAgICBhdXRvIGdhaW5MaW5l
YXIgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxHYWluTGlu
ZWFyS2V5KTsKKyAgICBhdXRvIGdhaW5QYXJhYm9saWMgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRl
cihwYXJhbWV0ZXJzLCBrSElEQWNjZWxHYWluUGFyYWJvbGljS2V5KTsKKyAgICBhdXRvIGdhaW5D
dWJpYyA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBhcmFtZXRlcnMsIGtISURBY2NlbEdhaW5D
dWJpY0tleSk7CisgICAgYXV0byBnYWluUXVhcnRpYyA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVy
KHBhcmFtZXRlcnMsIGtISURBY2NlbEdhaW5RdWFydGljS2V5KTsKKworICAgIGF1dG8gdGFuZ2Vu
dFNwZWVkTGluZWFyID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVycywga0hJREFj
Y2VsVGFuZ2VudFNwZWVkTGluZWFyS2V5KTsKKyAgICBhdXRvIHRhbmdlbnRTcGVlZFBhcmFib2xp
Y1Jvb3QgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxUYW5n
ZW50U3BlZWRQYXJhYm9saWNSb290S2V5KTsKKworICAgIHJldHVybiB7IGdhaW5MaW5lYXIsIGdh
aW5QYXJhYm9saWMsIGdhaW5DdWJpYywgZ2FpblF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwg
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwgcmVzb2x1dGlvbiB9OworfQorCitzdGF0aWMgU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2NlbGVyYXRp
b24oTlNBcnJheSAqaW9ISURDdXJ2ZXMsIGZsb2F0IGRlc2lyZWRBY2NlbGVyYXRpb24sIGZsb2F0
IHJlc29sdXRpb24pCit7CisgICAgX19ibG9jayBzaXplX3QgY3VycmVudEluZGV4ID0gMDsKKyAg
ICBfX2Jsb2NrIFZlY3RvcjxzdGQ6OnBhaXI8ZmxvYXQsIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlPj4gY3VydmVzOworCisgICAgW2lvSElEQ3VydmVzIGVudW1lcmF0ZU9iamVjdHNVc2luZ0Js
b2NrOl4oTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJzLCBOU1VJbnRlZ2VyIGksIEJPT0wgKikgewor
ICAgICAgICBhdXRvIGN1cnZlQWNjZWxlcmF0aW9uID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIo
cGFyYW1ldGVycywga0hJREFjY2VsSW5kZXhLZXkpOworICAgICAgICBhdXRvIGN1cnZlID0gZnJv
bUlPSElEQ3VydmUocGFyYW1ldGVycywgcmVzb2x1dGlvbik7CisKKyAgICAgICAgaWYgKGRlc2ly
ZWRBY2NlbGVyYXRpb24gPiBjdXJ2ZUFjY2VsZXJhdGlvbikKKyAgICAgICAgICAgIGN1cnJlbnRJ
bmRleCA9IGk7CisKKyAgICAgICAgY3VydmVzLmFwcGVuZCh7IGN1cnZlQWNjZWxlcmF0aW9uLCBj
dXJ2ZSB9KTsKKyAgICB9XTsKKworICAgIC8vIEludGVycG9sYXRpb24gaWYgZGVzaXJlZEFjY2Vs
ZXJhdGlvbiBpcyBpbiBiZXR3ZWVuIHR3byBjdXJ2ZXMuCisgICAgaWYgKGN1cnZlc1tjdXJyZW50
SW5kZXhdLmZpcnN0IDwgZGVzaXJlZEFjY2VsZXJhdGlvbiAmJiAoY3VycmVudEluZGV4ICsgMSkg
PCBjdXJ2ZXMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGxvd0N1cnZlID0gY3VydmVz
W2N1cnJlbnRJbmRleF07CisgICAgICAgIGNvbnN0IGF1dG8mIGhpZ2hDdXJ2ZSA9IGN1cnZlc1tj
dXJyZW50SW5kZXggKyAxXTsKKyAgICAgICAgZmxvYXQgcmF0aW8gPSAoZGVzaXJlZEFjY2VsZXJh
dGlvbiAtIGxvd0N1cnZlLmZpcnN0KSAvIChoaWdoQ3VydmUuZmlyc3QgLSBsb3dDdXJ2ZS5maXJz
dCk7CisgICAgICAgIHJldHVybiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xh
dGUobG93Q3VydmUuc2Vjb25kLCBoaWdoQ3VydmUuc2Vjb25kLCByYXRpbyk7CisgICAgfQorCisg
ICAgcmV0dXJuIGN1cnZlc1tjdXJyZW50SW5kZXhdLnNlY29uZDsKK30KKworc3RkOjpvcHRpb25h
bDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6
OmZyb21OYXRpdmVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIG5hdGl2ZVdl
YldoZWVsRXZlbnQpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxJT0hJ
REV2ZW50U3lzdGVtQ2xpZW50UmVmPj4gY2xpZW50OworICAgIGlmICghY2xpZW50LmdldCgpKQor
ICAgICAgICBjbGllbnQuZ2V0KCkgPSBhZG9wdENGKElPSElERXZlbnRTeXN0ZW1DbGllbnRDcmVh
dGVXaXRoVHlwZShuaWwsIGtJT0hJREV2ZW50U3lzdGVtQ2xpZW50VHlwZVBhc3NpdmUsIG5pbCkp
OworCisgICAgTlNFdmVudCAqZXZlbnQgPSBuYXRpdmVXZWJXaGVlbEV2ZW50Lm5hdGl2ZUV2ZW50
KCk7CisgICAgYXV0byBoaWRFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENvcHlJT0hJREV2ZW50KGV2
ZW50LkNHRXZlbnQpKTsKKyAgICBpZiAoIWhpZEV2ZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9H
KFNjcm9sbEFuaW1hdGlvbnMsICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2
ZVdoZWVsRXZlbnQgZGlkIG5vdCBmaW5kIEhJRCBldmVudCIpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gc2VuZGVySUQgPSBJT0hJREV2ZW50R2V0U2Vu
ZGVySUQoaGlkRXZlbnQuZ2V0KCkpOworICAgIFJldGFpblB0cjxJT0hJRFNlcnZpY2VDbGllbnRS
ZWY+IGlvSElEU2VydmljZSA9IGFkb3B0Q0YoSU9ISURFdmVudFN5c3RlbUNsaWVudENvcHlTZXJ2
aWNlRm9yUmVnaXN0cnlJRChjbGllbnQuZ2V0KCkuZ2V0KCksIHNlbmRlcklEKSk7CisgICAgaWYg
KCFpb0hJRFNlcnZpY2UpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywg
IlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudCBkaWQgbm90
IGZpbmQgbWF0Y2hpbmcgSElEIHNlcnZpY2UiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBhdXRvIGN1cnZlcyA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENG
QXJyYXlSZWY+KElPSElEU2VydmljZUNsaWVudENvcHlQcm9wZXJ0eShpb0hJRFNlcnZpY2UuZ2V0
KCksIENGU1RSKGtISURTY3JvbGxBY2NlbFBhcmFtZXRyaWNDdXJ2ZXNLZXkpKSkpOworICAgIGlm
ICghY3VydmVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZlbnQgZmFpbGVkIHRvIGxv
b2sgdXAgY3VydmVzIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFRoZXJlIGlzIHNvbWUgYWRkaXRpb25hbCBmYWxsYmFjayB0byBpbXBsZW1l
bnQgaGVyZSwgdGhvdWdoIHRoaXMgc2VlbXMgdXN1YWxseSBzdWZmaWNpZW50LgorICAgIGF1dG8g
c2Nyb2xsQWNjZWxlcmF0aW9uVHlwZSA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPihJT0hJRFNlcnZpY2VDbGllbnRDb3B5UHJvcGVydHkoaW9ISURTZXJ2aWNlLmdldCgpLCBD
RlNUUigiSElEU2Nyb2xsQWNjZWxlcmF0aW9uVHlwZSIpKSkpOworICAgIGlmICghc2Nyb2xsQWNj
ZWxlcmF0aW9uVHlwZSkgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAi
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50IGZhaWxlZCB0
byBsb29rIHVwIGFjY2VsZXJhdGlvbiB0eXBlIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgYXV0byBzY3JvbGxBY2NlbGVyYXRpb24gPSBhZG9wdENGKGR5bmFt
aWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oSU9ISURTZXJ2aWNlQ2xpZW50Q29weVByb3BlcnR5KGlv
SElEU2VydmljZS5nZXQoKSwgc2Nyb2xsQWNjZWxlcmF0aW9uVHlwZS5nZXQoKSkpKTsKKyAgICBp
ZiAoIXNjcm9sbEFjY2VsZXJhdGlvbikgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmlt
YXRpb25zLCAiU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50
IGZhaWxlZCB0byBsb29rIHVwIGFjY2VsZXJhdGlvbiB2YWx1ZSIpOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gcmVzb2x1dGlvbiA9IGFkb3B0Q0YoZHlu
YW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihJT0hJRFNlcnZpY2VDbGllbnRDb3B5UHJvcGVydHko
aW9ISURTZXJ2aWNlLmdldCgpLCBDRlNUUihrSU9ISURTY3JvbGxSZXNvbHV0aW9uS2V5KSkpKTsK
KyAgICBpZiAoIXJlc29sdXRpb24pIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0
aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudCBm
YWlsZWQgdG8gbG9vayB1cCByZXNvbHV0aW9uIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgcmV0dXJuIGZyb21JT0hJREN1cnZlQXJyYXlXaXRoQWNjZWxlcmF0
aW9uKChOU0FycmF5ICopY3VydmVzLmdldCgpLCBmcm9tRml4ZWRQb2ludChbKE5TTnVtYmVyICop
c2Nyb2xsQWNjZWxlcmF0aW9uLmdldCgpIGZsb2F0VmFsdWVdKSwgZnJvbUZpeGVkUG9pbnQoWyhO
U051bWJlciAqKXJlc29sdXRpb24uZ2V0KCkgZmxvYXRWYWx1ZV0pKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hF
UikgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggYjEzOGZkZDA1NzA1OGM4NTJkMTAy
YmYyMmQ4YTA1MzA0ZWM1YWYwYi4uYjhkMWNiOWM3ZjJhMzE4MjQyZDRhNzlmY2NhYzdiODQ2MWFj
YjBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yMjQsNiArMjI0LDcgQEAgU2hhcmVkL1BsYXRmb3JtUG9w
dXBNZW51RGF0YS5jcHAKIFNoYXJlZC9QcmludEluZm8uY3BwCiBTaGFyZWQvUlRDTmV0d29yay5j
cHAKIFNoYXJlZC9SVENQYWNrZXRPcHRpb25zLmNwcAorU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlLmNwcAogU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3Bw
CiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5v
LXVuaWZ5CkBAIC04MTIsNiArODEzLDcgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5n
QVBJLmNwcAorV2ViUHJvY2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcAog
V2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zv
cndhcmRMaXN0UHJveHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYTNlN2JiNjY0NzE5
MzAyMzBmZTIzZjBhNjgxYzNlN2EyMzI2ODM1My4uYzhiZTU1ODY5Mjc2ZTUwNjIwYmQzMzVjMDBl
NjY2ZGYyYzQ1NGE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMjIwLDYgKzIyMCw3IEBA
IFNoYXJlZC9tYWMvTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbQogU2hhcmVkL21hYy9PYmpDT2Jq
ZWN0R3JhcGgubW0KIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tCiBTaGFyZWQvbWFjL1By
aW50SW5mb01hYy5tbQorU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5t
bQogU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwCiBTaGFyZWQvbWFjL1NlY0l0ZW1S
ZXNwb25zZURhdGEuY3BwCiBTaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggODBmZDJhYjlmYzhmNjIzYTUzMzhjMDYw
YjZhNjhmYmVmMjk5ZDlhMy4uZjMxY2E0N2ZlYWE3NmEwM2U3ZWEwMTQzM2Q0M2I5ZTA2ZDQwNDU5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yODk0LDYg
KzI4OTQsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0
aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBjbG9zZU92ZXJsYXllZFZpZXdzKCk7CiAK
KyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBoYXZlIHRvIGxvb2sgdGhpcyB1cCByZXBlYXRlZGx5LCBidXQgaXQgY2FuIGFs
c28gY2hhbmdlIG9jY2FzaW9uYWxseS4KKyAgICBpZiAoZXZlbnQubW9tZW50dW1QaGFzZSgpID09
IFdlYldoZWVsRXZlbnQ6OlBoYXNlQmVnYW4gJiYgcHJlZmVyZW5jZXMoKS5tb21lbnR1bVNjcm9s
bGluZ0FuaW1hdG9yRW5hYmxlZCgpKQorICAgICAgICBtX3Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlID0gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50KGV2
ZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKHdoZWVsRXZlbnRDb2FsZXNjZXIoKS5zaG91bGREaXNw
YXRjaEV2ZW50KGV2ZW50KSkgewogICAgICAgICBhdXRvIGV2ZW50ID0gd2hlZWxFdmVudENvYWxl
c2NlcigpLm5leHRFdmVudFRvRGlzcGF0Y2goKTsKICAgICAgICAgc2VuZFdoZWVsRXZlbnQoKmV2
ZW50KTsKQEAgLTI5NDEsNiArMjk0NywxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZFdoZWVs
RXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgICAgIHJ1YmJlckJhbmRhYmxl
RWRnZXMuc2V0TGVmdCghbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCkpOwogICAgICAgICBy
dWJiZXJCYW5kYWJsZUVkZ2VzLnNldFJpZ2h0KCFtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0
ZW0oKSk7CiAgICAgfQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisg
ICAgaWYgKGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZUJlZ2Fu
ICYmIG1fc2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgIT0gbV9sYXN0U2VudFNjcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkV2
ZW50RGlzcGF0Y2hlcjo6U2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUobV93ZWJQYWdlSUQs
ICptX3Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKSwgMCwgeyB9LCBUaHJlYWQ6OlFPUzo6VXNl
ckludGVyYWN0aXZlKTsKKyAgICAgICAgbV9sYXN0U2VudFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlID0gbV9zY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKKyAgICB9CisjZW5kaWYKKwogICAg
IGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudCht
X3dlYlBhZ2VJRCwgZXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMpLCAwLCB7IH0sIFRocmVhZDo6
UU9TOjpVc2VySW50ZXJhY3RpdmUpOwogCiAgICAgLy8gTWFudWFsbHkgcGluZyB0aGUgd2ViIHBy
b2Nlc3MgdG8gY2hlY2sgZm9yIHJlc3BvbnNpdmVuZXNzIHNpbmNlIG91ciB3aGVlbApAQCAtMzk0
MSw2ICszOTU1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIHN0ZDo6b3B0aW8KICAgICBpZiAoIWhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIHNlbmQoTWVzc2FnZXM6OkV2ZW50
RGlzcGF0Y2hlcjo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKG1fd2ViUGFnZUlELCBkaXNwbGF5SUQp
KTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dTY3JlZW5EaWRDaGFuZ2UoZGlz
cGxheUlELCBub21pbmFsRnJhbWVzUGVyU2Vjb25kKSk7CiB9CiAKQEAgLTc4OTksNiArNzkxNCwx
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZShSZXNldFN0YXRlUmVhc29uIHJlc2V0
U3RhdGVSZWFzb24pCiAgICAgICAgIG1feHJTeXN0ZW0gPSBudWxscHRyOwogICAgIH0KICNlbmRp
ZgorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgbV9sYXN0U2Vu
dFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlID0gc3RkOjpudWxsb3B0OworI2VuZGlmCiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKFByb2Nlc3NU
ZXJtaW5hdGlvblJlYXNvbiB0ZXJtaW5hdGlvblJlYXNvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKaW5kZXggZDVmYmU4Y2M4ZTZhNTBlODg3NzZkYmI5OTU2NzI4MTVjMTFh
N2UyMi4uOGQwNzZjMjE1MjliMDExYWM0ZjgwMjdmYzEyZjM1MTk5MjRlMjRjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRl
ICJQcm9jZXNzVGVybWluYXRpb25SZWFzb24uaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVy
LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVk
ZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmgiCkBAIC0zMTU5LDYgKzMxNjAsMTEgQEAgcHJpdmF0ZToKICAgICBXaW5k
b3dLaW5kIG1fd2luZG93S2luZCB7IFdpbmRvd0tpbmQ6OlVucGFyZW50ZWQgfTsKIAogICAgIFdl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlciBtX25vdGlmaWNhdGlvbk1hbmFnZXJN
ZXNzYWdlSGFuZGxlcjsKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQor
ICAgIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IG1fc2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmU7CisgICAgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZT4gbV9sYXN0U2VudFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOworI2VuZGlmCiB9
OwogCiAjaWZkZWYgX19PQkpDX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGNjMGUzODg2MGZjMzliMjYwOTRkZGZjYTZkN2NkN2JiNmYx
MTVkMDYuLjgxMDk2NzU2NDUzMzFmZGJmYmE3MmRmMWU3MTI0MzY0NjE0YTJiYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ5Niw2
ICszNDk2LDkgQEAKIAkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENjQ4MjQ5MjY0NEIxQUIwMDAzMDMzNSAvKiBS
ZW1vdGVMYXllclRyZWVMYXllcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
NjQ4MjRBMjY0NEIxQUIwMDAzMDMzNSAvKiBSZW1vdGVMYXllclRyZWVMYXllcnMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXllclRyZWVMYXllcnMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENjVEMTk0Mjc0QjhFNzMwMDlDNDEw
MSAvKiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyRDY1RDE5NTI3NEI4RTg0MDA5QzQxMDEgLyogU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ2NUQxOTYyNzRCOEU4NDAwOUM0MTAxIC8q
IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9s
bGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkQ2QUI1M0YxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3Iu
aDsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ2QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJl
ckluZGljYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdL
UERGUGFnZU51bWJlckluZGljYXRvci5tbTsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRp
Y2F0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkIzNzE5MThBOTY3QUQw
MDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IF9XS1RodW1ibmFpbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM3NzksNiArMzc4Miw4IEBACiAJCTJERTlCMTM4MjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0
SW5wdXRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRJ
bnB1dENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRFOUIxM0IyMjMx
Rjc3QzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHRJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRFQUM1Q0UxQUMzNjhCQjAwQTE5NUQ4IC8qIF9X
S0ZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0ZpbmRP
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJERUU3MDlEMjc1NUE0Njgw
MEZCRjg2NCAvKiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb21l
bnR1bUV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREVF
NzA5RTI3NTVBNDY4MDBGQkY4NjQgLyogTW9tZW50dW1FdmVudERpc3BhdGNoZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyREY5NTkzNDE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVD
b250cm9sbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
Vmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tOyBwYXRoID0gaW9zL1ZpZXdHZXN0dXJlQ29udHJv
bGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRGOUVFRTMxQTc4MUZC
NDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBUElGcmFtZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyREY5RUVFNDFBNzgxRkI0MDBCNkNGQkUgLyogQVBJRnJhbWVJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUZyYW1lSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzA4Myw2ICs3MDg4LDggQEAKIAkJCQlCQzJEMDIxNjEyQUM0MUNCMDBFNzMy
QTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCAqLywKIAkJCQkxQUFCNEE4QzEyOTZG
MEEyMDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbi5oICovLAogCQkJCUUxRTU1MkMzMTZBRTA2
NUUwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggKi8sCisJCQkJ
MkQ2NUQxOTYyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNw
cCAqLywKKwkJCQkyRDY1RDE5NTI3NEI4RTg0MDA5QzQxMDEgLyogU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmUuaCAqLywKIAkJCQk1QzgwQjNERDIzNjkwRjEwMDA4NkU2REUgLyogU2VydmljZVdv
cmtlckluaXRpYWxpemF0aW9uRGF0YS5jcHAgKi8sCiAJCQkJNUM4MEIzREIyMzY5MEQ4RDAwODZF
NkRFIC8qIFNlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuaCAqLywKIAkJCQkxQUZERTY1
NzE5NTRBNDJCMDBDNDhGRkEgLyogU2Vzc2lvblN0YXRlLmNwcCAqLywKQEAgLTk4NzMsOSArOTg4
MCw5IEBACiAJCTVDMTU3QTBBMjcxN0M5RjEwMEVENTI4MCAvKiB3ZWJwdXNoZCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNUNCQjZENEQyNzFGNjdDQzAw
RkQxQTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxpc3QgKi8sCiAJCQkJNTE2MEU5
NTQyNzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QuaCAqLywKIAkJCQk1MTYwRTk1
MzI3NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5tbSAqLywKKwkJCQk1Q0JCNkQ0
RDI3MUY2N0NDMDBGRDFBNUQgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wbGlzdCAqLywK
IAkJCQk1MUY3QkI3NTI3NDQ5OEJCMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3Rpbmcu
aCAqLywKIAkJCQk1MUY3QkI3NDI3NDQ5OEJBMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRl
c3RpbmcubW0gKi8sCiAJCQkJNTE2MEU5NUMyNzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5k
bGVSZWdpc3RyeS5oICovLApAQCAtMTA2MTIsNiArMTA2MTksOCBAQAogCQkJCTFBOTBDMUYyMTI2
NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovLAogCQkJCTlCMDMzRTcyMjUyNTgw
RjMwMDUwMTA3MSAvKiBJUENUZXN0aW5nQVBJLmNwcCAqLywKIAkJCQk5QjAzM0U3MTI1MjU4MEYz
MDA1MDEwNzEgLyogSVBDVGVzdGluZ0FQSS5oICovLAorCQkJCTJERUU3MDlFMjc1NUE0NjgwMEZC
Rjg2NCAvKiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJMkRFRTcwOUQyNzU1
QTQ2ODAwRkJGODY0IC8qIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmggKi8sCiAJCQkJN0MzODc0
MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwICovLAogCQkJCTdDRjQ3RkY5MTcy
NzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAw
MUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLApAQCAtMTExNzgs
NiArMTExODcsNyBAQAogCQkJCUM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJk
VHlwZXMubW0gKi8sCiAJCQkJQzFFMTIzQjkyMEExMTU3MjAwMjY0NkY0IC8qIFBERkNvbnRleHRN
ZW51LmggKi8sCiAJCQkJRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5t
bSAqLywKKwkJCQkyRDY1RDE5NDI3NEI4RTczMDA5QzQxMDEgLyogU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmVNYWMubW0gKi8sCiAJCQkJNTFEMTMwNEYxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0
ZW1SZXF1ZXN0RGF0YS5jcHAgKi8sCiAJCQkJNTFEMTMwNTAxMzgyRUFDMDAwMzUxRUREIC8qIFNl
Y0l0ZW1SZXF1ZXN0RGF0YS5oICovLAogCQkJCTUxRDEzMDUxMTM4MkVBQzAwMDM1MUVERCAvKiBT
ZWNJdGVtUmVzcG9uc2VEYXRhLmNwcCAqLywKQEAgLTEyNDIzLDEzICsxMjQzMywxMyBAQAogCQkJ
aXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1
bmRsZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDMTU3OUZDMjcxN0FGNTAwMEVENTI4
MCAvKiBEYWVtb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRjdCQjc3Mjc0NDk4
QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTE2MEU5NUUyNzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE2MEU5NTkyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5k
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjdCQjdCMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNo
Q2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE2MEU5NUUyNzRDMkEwMzAw
NTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUMx
NTc5RkMyNzE3QUY1MDAwRUQ1MjgwIC8qIERhZW1vblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMkNENjlGMjcyMzM5M0EwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9u
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUY3QkI3NzI3NDQ5OEJCMDBDNDVBNzIgLyogTW9ja0Fw
cEJ1bmRsZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTQ5NjMsMTYgKzE0OTczLDE2
IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MTYwRTk1NTI3NEI4ODcyMDA1NjczODgg
LyogQXBwQnVuZGxlUmVxdWVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3QTAxMjcxN0I3
RkIwMEVENTI4MCAvKiBBcmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUY3
QkI3RDI3NDU2NDA0MDBDNDVBNzIgLyogQ29kZVNpZ25pbmcubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1QzE1NzlGRjI3MTdCNkQyMDBFRDUyODAgLyogRGFlbW9uRGVjb2Rlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1QzE1NzlGRTI3MTdCNkMxMDBFRDUyODAgLyogRGFlbW9uRW5jb2Rlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1QzE1NzlGQjI3MTdBRjUwMDBFRDUyODAgLyogRGFlbW9uVXRp
bGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCNzYyNzQ0OThCQjAwQzQ1QTcyIC8q
IE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2MEU5NTUy
NzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gaW4gU291cmNlcyAqLywKLQkJ
CQk1MTYwRTk1QTI3NEMwRDg5MDA1NjczODggLyogUHVzaEFwcEJ1bmRsZS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNjBFOTYwMjc0QzJBNDAwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0
cnkubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTYwRTk1QTI3NEMwRDg5MDA1NjczODggLyogUHVz
aEFwcEJ1bmRsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjdCQjdDMjc0NEM1MDcwMEM0NUE3
MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJCTVDMTU3OUZF
MjcxN0I2QzEwMEVENTI4MCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTVDMTU3OUZCMjcxN0FGNTAwMEVENTI4MCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MTJDRDZBMDI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTVDMTU3QTBDMjcxN0NBMUQwMEVENTI4MCAvKiBXZWJQdXNoRGFl
bW9uTWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDJiOWRhNzA1NTAy
OTFlNTFlZDIzYmM0OWFkNzhmOTRhYWJkMDVmOTUuLjY0NDRhZmRjMmU1NDgyYzQ1MzdlN2RhZTgz
ZmY0ODMxODE2MjI4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2
ZW50RGlzcGF0Y2hlci5oIgogCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIldlYkV2ZW50
Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgpAQCAtNjMsNiArNjQsOSBAQCBSZWY8RXZlbnREaXNwYXRjaGVyPiBFdmVu
dERpc3BhdGNoZXI6OmNyZWF0ZSgpCiBFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcigp
CiAgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkV2ZW50
RGlzcGF0Y2hlciIsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQogICAgICwgbV9y
ZWNlbnRXaGVlbEV2ZW50RGVsdGFGaWx0ZXIoV2hlZWxFdmVudERlbHRhRmlsdGVyOjpjcmVhdGUo
KSkKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICAsIG1fbW9tZW50
dW1FdmVudERpc3BhdGNoZXIoV1RGOjptYWtlVW5pcXVlPE1vbWVudHVtRXZlbnREaXNwYXRjaGVy
PigqdGhpcykpCisjZW5kaWYKIHsKIH0KIApAQCAtOTcsNyArMTAxLDcgQEAgdm9pZCBFdmVudERp
c3BhdGNoZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
bikKICAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkV2ZW50RGlzcGF0Y2hlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgpLCB0
aGlzKTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQoUGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBSZWN0RWRnZXM8Ym9v
bD4gcnViYmVyQmFuZGFibGVFZGdlcykKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjppbnRlcm5hbFdo
ZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVl
bEV2ZW50LCBSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcywgV2hlZWxFdmVudE9y
aWdpbiB3aGVlbEV2ZW50T3JpZ2luKQogewogICAgIGF1dG8gcHJvY2Vzc2luZ1N0ZXBzID0gT3B0
aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHsgV2hlZWxFdmVudFBy
b2Nlc3NpbmdTdGVwczo6TWFpblRocmVhZEZvclNjcm9sbGluZywgV2hlZWxFdmVudFByb2Nlc3Np
bmdTdGVwczo6TWFpblRocmVhZEZvckJsb2NraW5nRE9NRXZlbnREaXNwYXRjaCB9OwogI2lmIEVO
QUJMRShTQ1JPTExJTkdfVEhSRUFEKQpAQCAtMTE0LDcgKzExOCw3IEBAIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjp3aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxF
dmVudCYgd2hlCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3Njcm9sbGluZ1RyZWVzTG9jayB9
OwogICAgICAgICBhdXRvIHNjcm9sbGluZ1RyZWUgPSBtX3Njcm9sbGluZ1RyZWVzLmdldChwYWdl
SUQpOwogICAgICAgICBpZiAoIXNjcm9sbGluZ1RyZWUpIHsKLSAgICAgICAgICAgIGRpc3BhdGNo
V2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3Rl
cHMpOworICAgICAgICAgICAgZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChwYWdlSUQs
IHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVwcywgd2hlZWxFdmVudE9yaWdpbik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEzNiwxMCArMTQwLDEwIEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29u
c3QgV2ViV2hlZWxFdmVudCYgd2hlCiAKICAgICAgICAgc2Nyb2xsaW5nVHJlZS0+d2lsbFByb2Nl
c3NXaGVlbEV2ZW50KCk7CiAKLSAgICAgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbc2Ny
b2xsaW5nVHJlZSwgd2hlZWxFdmVudCwgcGxhdGZvcm1XaGVlbEV2ZW50LCBwcm9jZXNzaW5nU3Rl
cHMsIHVzZU1haW5UaHJlYWRGb3JTY3JvbGxpbmcsIHBhZ2VJRCwgcHJvdGVjdGVkVGhpcyA9IFJl
ZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbc2Nyb2xs
aW5nVHJlZSwgd2hlZWxFdmVudCwgcGxhdGZvcm1XaGVlbEV2ZW50LCBwcm9jZXNzaW5nU3RlcHMs
IHVzZU1haW5UaHJlYWRGb3JTY3JvbGxpbmcsIHBhZ2VJRCwgd2hlZWxFdmVudE9yaWdpbiwgcHJv
dGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIHsKICAgICAgICAgICAgIGlmICh1c2VNYWluVGhy
ZWFkRm9yU2Nyb2xsaW5nKSB7CiAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nVHJlZS0+d2lsbFNl
bmRFdmVudFRvTWFpblRocmVhZChwbGF0Zm9ybVdoZWVsRXZlbnQpOwotICAgICAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPmRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3
aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3RlcHMpOworICAgICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPmRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3aGVlbEV2ZW50LCBw
cm9jZXNzaW5nU3RlcHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogICAgICAgICAgICAgICAgIHNjcm9s
bGluZ1RyZWUtPndhaXRGb3JFdmVudFRvQmVQcm9jZXNzZWRCeU1haW5UaHJlYWQocGxhdGZvcm1X
aGVlbEV2ZW50KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0x
NDcsMjAgKzE1MSw0MiBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudChQYWdlSWRl
bnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZQogICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBzY3JvbGxpbmdUcmVlLT5oYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtV2hlZWxF
dmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5uZWVkc01h
aW5UaHJlYWRQcm9jZXNzaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5k
aXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcmVzdWx0
LnN0ZXBzKTsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNwYXRjaFdoZWVsRXZl
bnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcmVzdWx0LnN0ZXBzLCB3aGVlbEV2
ZW50T3JpZ2luKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0ZXBzLmNvbnRhaW5zKFdo
ZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElm
IHdlIHNjcm9sbGVkIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkIChldmVuIGlmIHdlIHNlbmQgdGhl
IGV2ZW50IHRvIHRoZSBtYWluIHRocmVhZCBmb3IgcGFzc2l2ZSBldmVudCBoYW5kbGVycykKICAg
ICAgICAgICAgIC8vIHJlc3BvbmQgdG8gdGhlIFVJIHByb2Nlc3MgdGhhdCB0aGUgZXZlbnQgd2Fz
IGhhbmRsZWQuCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kRGlkUmVjZWl2ZUV2ZW50
KHBhZ2VJRCwgd2hlZWxFdmVudC50eXBlKCksIHJlc3VsdC53YXNIYW5kbGVkKTsKKyAgICAgICAg
ICAgIGlmICh3aGVlbEV2ZW50T3JpZ2luID09IFdoZWVsRXZlbnRPcmlnaW46OlVJUHJvY2VzcykK
KyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kRGlkUmVjZWl2ZUV2ZW50KHBhZ2VJ
RCwgd2hlZWxFdmVudC50eXBlKCksIHJlc3VsdC53YXNIYW5kbGVkKTsKICAgICAgICAgfSk7CiAg
ICAgfSB3aGlsZSAoZmFsc2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocnViYmVyQmFuZGFi
bGVFZGdlcyk7CiAKLSAgICBkaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwg
d2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKKyAgICBkaXNwYXRjaFdoZWVsRXZlbnRWaWFN
YWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzLCB3aGVlbEV2ZW50
T3JpZ2luKTsKKyNlbmRpZgorfQorCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudChQ
YWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFJl
Y3RFZGdlczxib29sPiBydWJiZXJCYW5kYWJsZUVkZ2VzKQoreworI2lmIEVOQUJMRShNT01FTlRV
TV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIGlmIChtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT5o
YW5kbGVXaGVlbEV2ZW50KHBhZ2VJRCwgd2hlZWxFdmVudCwgcnViYmVyQmFuZGFibGVFZGdlcykp
IHsKKyAgICAgICAgc2VuZERpZFJlY2VpdmVFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQudHlwZSgp
LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGludGVybmFsV2hl
ZWxFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMsIFdoZWVsRXZl
bnRPcmlnaW46OlVJUHJvY2Vzcyk7Cit9CisKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpzZXRTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZShQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFNjcm9s
bGluZ0FjY2VsZXJhdGlvbkN1cnZlJiBjdXJ2ZSkKK3sKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZF
TlRfRElTUEFUQ0hFUikKKyAgICBtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT5zZXRTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZShwYWdlSUQsIGN1cnZlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHBhZ2VJRCk7CisgICAgVU5VU0VEX1BBUkFNKGN1cnZlKTsKICNlbmRpZgogfQogCkBAIC0y
MzAsMTUgKzI1NiwxNSBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hUb3VjaEV2ZW50
cygpCiB9CiAjZW5kaWYKIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVu
dFZpYU1haW5UaHJlYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJX
aGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVw
cz4gcHJvY2Vzc2luZ1N0ZXBzKQordm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxF
dmVudFZpYU1haW5UaHJlYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBX
ZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByb2Nlc3NpbmdT
dGVwcz4gcHJvY2Vzc2luZ1N0ZXBzLCBXaGVlbEV2ZW50T3JpZ2luIHdoZWVsRXZlbnRPcmlnaW4p
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcGFnZUlELCB3aGVlbEV2
ZW50LCBzdGVwcyA9IHByb2Nlc3NpbmdTdGVwcyAtIFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6
OlNjcm9sbGluZ1RocmVhZF0oKSBtdXRhYmxlIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlz
cGF0Y2hXaGVlbEV2ZW50KHBhZ2VJRCwgd2hlZWxFdmVudCwgc3RlcHMpOworICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHBhZ2VJRCwg
d2hlZWxFdmVudCwgd2hlZWxFdmVudE9yaWdpbiwgc3RlcHMgPSBwcm9jZXNzaW5nU3RlcHMgLSBX
aGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpTY3JvbGxpbmdUaHJlYWRdKCkgbXV0YWJsZSB7Cisg
ICAgICAgIHByb3RlY3RlZFRoaXMtPmRpc3BhdGNoV2hlZWxFdmVudChwYWdlSUQsIHdoZWVsRXZl
bnQsIHN0ZXBzLCB3aGVlbEV2ZW50T3JpZ2luKTsKICAgICB9KTsKIH0KIAotdm9pZCBFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0
IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHJvY2Vzc2lu
Z1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hX
aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwgT3B0aW9uU2V0PFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdT
dGVwcywgV2hlZWxFdmVudE9yaWdpbiB3aGVlbEV2ZW50T3JpZ2luKQogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTI0Niw3ICsyNzIsNyBAQCB2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2Vi
V2hlZWxFdgogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd2ViUGFn
ZS0+d2hlZWxFdmVudCh3aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3RlcHMpOworICAgIHdlYlBhZ2Ut
PndoZWVsRXZlbnQod2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzLCB3aGVlbEV2ZW50T3JpZ2lu
KTsKIH0KIAogI2lmIEVOQUJMRShNQUNfR0VTVFVSRV9FVkVOVFMpCkBAIC0yODQsNiArMzEwLDEx
IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwbGF5V2FzUmVmcmVzaGVkKFBsYXRmb3JtRGlz
cGxheUlEIGRpc3BsYXlJRCwgY29uc3QgRGlzCiAgICAgdHJhY2VQb2ludChEaXNwbGF5UmVmcmVz
aERpc3BhdGNoaW5nVG9NYWluVGhyZWFkLCBkaXNwbGF5SUQsIHNlbmRUb01haW5UaHJlYWQpOwog
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoTU9NRU5UVU1f
RVZFTlRfRElTUEFUQ0hFUikKKyAgICBtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT5kaXNwbGF5
V2FzUmVmcmVzaGVkKGRpc3BsYXlJRCwgZGlzcGxheVVwZGF0ZSk7CisjZW5kaWYKKwogICAgIG5v
dGlmeVNjcm9sbGluZ1RyZWVzRGlzcGxheVdhc1JlZnJlc2hlZChkaXNwbGF5SUQpOwogCiAgICAg
aWYgKCFzZW5kVG9NYWluVGhyZWFkKQpAQCAtMjk1LDQgKzMyNiwxNCBAQCB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQs
IGNvbnN0IERpcwogfQogI2VuZGlmCiAKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjp3aW5kb3dTY3Jl
ZW5EaWRDaGFuZ2UoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQpCit7CisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgbV9t
b21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+d2luZG93U2NyZWVuRGlkQ2hhbmdlKHBhZ2VJRCwgZGlz
cGxheUlEKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgVU5VU0VEX1BB
UkFNKGRpc3BsYXlJRCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCmlu
ZGV4IDk4ODEyMjAxZjA0NmUzMjNmZWQxMWI0YTA1YTBhYzk1ZWQ1MjdkMWYuLjExNWIyYmVmNzJi
NjA0NzdmZDBkMjg3YmE1NWJmMzk0M2YxZjYwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCkBAIC01MCw2ICs1MCw4IEBAIHVz
aW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CitjbGFzcyBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjsKK2NsYXNzIFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlOwogY2xhc3MgV2ViUGFnZTsKIGNsYXNzIFdlYldoZWVsRXZlbnQ7CiAKQEAgLTc2
LDYgKzc4LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBub3RpZnlTY3JvbGxpbmdUcmVlc0Rpc3Bs
YXlXYXNSZWZyZXNoZWQoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOwogCisgICAgZW51bSBj
bGFzcyBXaGVlbEV2ZW50T3JpZ2luIDogYm9vbCB7IFVJUHJvY2VzcywgTW9tZW50dW1FdmVudERp
c3BhdGNoZXIgfTsKKyAgICB2b2lkIGludGVybmFsV2hlZWxFdmVudChXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYsIFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBy
dWJiZXJCYW5kYWJsZUVkZ2VzLCBXaGVlbEV2ZW50T3JpZ2luKTsKKwogcHJpdmF0ZToKICAgICBF
dmVudERpc3BhdGNoZXIoKTsKIApAQCAtODQsNiArODksOSBAQCBwcml2YXRlOgogCiAgICAgLy8g
TWVzc2FnZSBoYW5kbGVycwogICAgIHZvaWQgd2hlZWxFdmVudChXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYsIFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBydWJi
ZXJCYW5kYWJsZUVkZ2VzKTsKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikK
KyAgICB2b2lkIHNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyLCBjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYpOworI2VuZGlmCiAjaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAgICAgdm9pZCB0b3VjaEV2ZW50KFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyLCBjb25zdCBXZWJUb3VjaEV2ZW50JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJik7CiAgICAgdm9pZCB0b3VjaEV2ZW50V2l0aG91dENhbGxiYWNrKFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJUb3VjaEV2ZW50Jik7CkBAIC05Myw4ICsxMDEsOCBA
QCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAvLyBUaGlzIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0
aHJlYWQuCi0gICAgdm9pZCBkaXNwYXRjaFdoZWVsRXZlbnQoV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBPcHRpb25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFBy
b2Nlc3NpbmdTdGVwcz4pOwotICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVh
ZChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYsIE9wdGlvblNl
dDxXZWJDb3JlOjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPik7CisgICAgdm9pZCBkaXNwYXRj
aFdoZWVsRXZlbnQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQm
LCBPcHRpb25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4sIFdoZWVsRXZl
bnRPcmlnaW4pOworICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYsIE9wdGlvblNldDxXZWJD
b3JlOjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiwgV2hlZWxFdmVudE9yaWdpbik7CiAKICNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKICAgICB2b2lkIGRpc3BhdGNoVG91Y2hFdmVudHMo
KTsKQEAgLTExNSw2ICsxMjMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzcGxheURpZFJlZnJl
c2hPblNjcm9sbGluZ1RocmVhZChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CiAjZW5kaWYK
IAorICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CisKICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1
ZXVlOwogCiAjaWYgRU5BQkxFKFNDUk9MTElOR19USFJFQUQpCkBAIC0xMjYsNiArMTM2LDEwIEBA
IHByaXZhdGU6CiAgICAgTG9jayBtX3RvdWNoRXZlbnRzTG9jazsKICAgICBIYXNoTWFwPFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyLCBUb3VjaEV2ZW50UXVldWU+IG1fdG91Y2hFdmVudHMgV1RGX0dV
QVJERURfQllfTE9DSyhtX3RvdWNoRXZlbnRzTG9jayk7CiAjZW5kaWYKKworI2lmIEVOQUJMRShN
T01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxNb21lbnR1bUV2
ZW50RGlzcGF0Y2hlcj4gbV9tb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjsKKyNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4KaW5kZXggMDlhZmMy
Y2VkMWQzZmJmYzYzOTkwYjg4ODZiNjM2NGY2ODgwYjMyYy4uNTY5MmVlNzdlNjlkYWE3MDY5ZGE0
M2I3YmU4NTA4NmQxNWM1ZTc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgpAQCAtMzIsNCAr
MzIsOSBAQCBtZXNzYWdlcyAtPiBFdmVudERpc3BhdGNoZXIgewogI2lmIEhBVkUoQ1ZESVNQTEFZ
TElOSykKICAgICBEaXNwbGF5V2FzUmVmcmVzaGVkKHVpbnQzMl90IGRpc3BsYXlJRCwgc3RydWN0
IFdlYkNvcmU6OkRpc3BsYXlVcGRhdGUgdXBkYXRlLCBib29sIHNlbmRUb01haW5UaHJlYWQpCiAj
ZW5kaWYKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIFNldFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwg
V2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBjdXJ2ZSkKKyNlbmRpZgorICAgIFdp
bmRvd1NjcmVlbkRpZENoYW5nZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIHVpbnQz
Ml90IGRpc3BsYXlJRCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDU5
ZTdiMGE3NTdlZDYwMzBkZjY0OTdhOTMyMjE4YWVlNmYyMWI4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3BhdGNoZXIu
Y3BwCkBAIC0wLDAgKzEsNDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmgiCisKKyNpZiBFTkFCTEUoTU9NRU5U
VU1fRVZFTlRfRElTUEFUQ0hFUikKKworI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheVJlZnJlc2hNb25pdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZGVsdGFIaXN0b3J5TWF4aW11bUFn
ZSA9IDUwMF9tczsKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBkZWx0YUhpc3RvcnlNYXhpbXVt
SW50ZXJ2YWwgPSAxNTBfbXM7CitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgaWRlYWxDdXJ2ZUZy
YW1lUmF0ZSA9IDFfcyAvIDYwOworCitNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6TW9tZW50dW1F
dmVudERpc3BhdGNoZXIoRXZlbnREaXNwYXRjaGVyJiBkaXNwYXRjaGVyKQorICAgIDogbV9vYnNl
cnZlcklEKERpc3BsYXlMaW5rT2JzZXJ2ZXJJRDo6Z2VuZXJhdGUoKSkKKyAgICAsIG1fZGlzcGF0
Y2hlcihkaXNwYXRjaGVyKQoreworfQorCitNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6fk1vbWVu
dHVtRXZlbnREaXNwYXRjaGVyKCkKK3sKKyAgICBzdG9wRGlzcGxheUxpbmsoKTsKK30KKworYm9v
bCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZXZlbnRTaG91bGRTdGFydFN5bnRoZXRpY01vbWVu
dHVtUGhhc2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlkZW50aWZpZXIsIGNvbnN0IFdl
YldoZWVsRXZlbnQmIGV2ZW50KSBjb25zdAoreworICAgIGlmIChldmVudC5tb21lbnR1bVBoYXNl
KCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VCZWdhbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFtX2FjY2VsZXJhdGlvbkN1cnZlcy5jb250YWlucyhwYWdlSWRlbnRpZmllcikp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnRE
aXNwYXRjaGVyIG5vdCB1c2luZyBzeW50aGV0aWMgbW9tZW50dW0gcGhhc2U6IG5vIGFjY2VsZXJh
dGlvbiBjdXJ2ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFl
dmVudC5yYXdQbGF0Zm9ybURlbHRhKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5p
bWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIG5vdCB1c2luZyBzeW50aGV0aWMgbW9t
ZW50dW0gcGhhc2U6IG5vIHJhdyBwbGF0Zm9ybSBkZWx0YSBvbiBzdGFydCBldmVudCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmhhbmRsZVdoZWVsRXZlbnQoV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgcGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50LCBXZWJD
b3JlOjpSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcykKK3sKKyAgICBtX2xhc3RS
dWJiZXJCYW5kYWJsZUVkZ2VzID0gcnViYmVyQmFuZGFibGVFZGdlczsKKyAgICBtX2xhc3RJbmNv
bWluZ0V2ZW50ID0gZXZlbnQ7CisKKyAgICBib29sIGlzTW9tZW50dW1FdmVudCA9IGV2ZW50Lm1v
bWVudHVtUGhhc2UoKSAhPSBXZWJXaGVlbEV2ZW50OjpQaGFzZU5vbmU7CisKKyAgICBpZiAobV9j
dXJyZW50R2VzdHVyZS5hY3RpdmUpIHsKKyAgICAgICAgYm9vbCBwYWdlSWRlbnRpZmllckNoYW5n
ZWQgPSBwYWdlSWRlbnRpZmllciAhPSBtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyOwor
CisgICAgICAgIC8vIEFueSBpbmNvbWluZyB3aGVlbCBldmVudCBvdGhlciB0aGFuIGEgY2hhbmdl
ZCBldmVudCBmb3IgdGhlIGN1cnJlbnQgZ2VzdHVyZQorICAgICAgICAvLyBzaG91bGQgaW50ZXJy
dXB0IHRoZSBhbmltYXRpb247IGluIHRoZSB1c3VhbCBjYXNlLCBpdCB3aWxsIGJlCisgICAgICAg
IC8vIG1vbWVudHVtUGhhc2UgPT0gUGhhc2VFbmRlZCB0aGF0IGludGVycnVwdHMuCisgICAgICAg
IGJvb2wgZXZlbnRTaG91bGRJbnRlcnJ1cHRHZXN0dXJlID0gIWlzTW9tZW50dW1FdmVudCB8fCBl
dmVudC5tb21lbnR1bVBoYXNlKCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VDaGFuZ2VkOworCisg
ICAgICAgIGlmIChwYWdlSWRlbnRpZmllckNoYW5nZWQgfHwgZXZlbnRTaG91bGRJbnRlcnJ1cHRH
ZXN0dXJlKQorICAgICAgICAgICAgZGlkRW5kTW9tZW50dW1QaGFzZSgpOworICAgIH0KKworICAg
IGlmIChldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlQmVnYW4gfHwgZXZlbnQu
cGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZUNoYW5nZWQpIHsKKyAgICAgICAgZGlkU2Ny
b2xsKGV2ZW50KTsKKworICAgICAgICBpZiAoYXV0byBsYXN0QWN0aXZlUGhhc2VEZWx0YSA9IGV2
ZW50LnJhd1BsYXRmb3JtRGVsdGEoKSkKKyAgICAgICAgICAgIG1fbGFzdEFjdGl2ZVBoYXNlRGVs
dGEgPSAqbGFzdEFjdGl2ZVBoYXNlRGVsdGE7CisgICAgfQorCisgICAgaWYgKGV2ZW50U2hvdWxk
U3RhcnRTeW50aGV0aWNNb21lbnR1bVBoYXNlKHBhZ2VJZGVudGlmaWVyLCBldmVudCkpCisgICAg
ICAgIGRpZFN0YXJ0TW9tZW50dW1QaGFzZShwYWdlSWRlbnRpZmllciwgZXZlbnQpOworCisgICAg
Ym9vbCBpc01vbWVudHVtRXZlbnREdXJpbmdTeW50aGV0aWNHZXN0dXJlID0gaXNNb21lbnR1bUV2
ZW50ICYmIG1fY3VycmVudEdlc3R1cmUuYWN0aXZlOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgaWYgKGlzTW9tZW50dW1FdmVudER1cmluZ1N5bnRoZXRpY0dlc3R1cmUpCisgICAg
ICAgIG1fY3VycmVudEdlc3R1cmUuYWNjdW11bGF0ZWRFdmVudE9mZnNldCArPSBldmVudC5kZWx0
YSgpOworI2VuZGlmCisKKyAgICAvLyBDb25zdW1lIGFueSBub3JtYWwgbW9tZW50dW0gZXZlbnRz
IHdoaWxlIHdlJ3JlIGluc2lkZSBhIHN5bnRoZXRpYyBtb21lbnR1bSBnZXN0dXJlLgorICAgIHJl
dHVybiBpc01vbWVudHVtRXZlbnREdXJpbmdTeW50aGV0aWNHZXN0dXJlOworfQorCitzdGF0aWMg
ZmxvYXQgYXBwS2l0U2Nyb2xsTXVsdGlwbGllckZvckV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQm
IGV2ZW50KQoreworICAgIGF1dG8gZGVsdGEgPSBldmVudC5kZWx0YSgpOworICAgIGF1dG8gdW5h
Y2NlbGVyYXRlZERlbHRhID0gZXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhKCk7Cisg
ICAgZmxvYXQgbXVsdGlwbGllciA9IDE7CisgICAgCisgICAgLy8gRklYTUU6IENhbiB0aGUgQXBw
S2l0IG11bHRpcGxpZXIgZXZlciBkaWZmZXIgYnkgYXhpcz8KKyAgICBpZiAoZGVsdGEud2lkdGgo
KSAmJiB1bmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSkKKyAgICAgICAgbXVsdGlwbGllciA9IHN0
ZDo6bWF4KG11bHRpcGxpZXIsIGRlbHRhLndpZHRoKCkgLyB1bmFjY2VsZXJhdGVkRGVsdGEud2lk
dGgoKSk7CisgICAgaWYgKGRlbHRhLmhlaWdodCgpICYmIHVuYWNjZWxlcmF0ZWREZWx0YS5oZWln
aHQoKSkKKyAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6bWF4KG11bHRpcGxpZXIsIGRlbHRhLmhl
aWdodCgpIC8gdW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpKTsKKworICAgIHJldHVybiBtdWx0
aXBsaWVyOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFN5bnRo
ZXRpY01vbWVudHVtRXZlbnQoV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2UsIFdlYkNvcmU6OkZs
b2F0U2l6ZSBkZWx0YSkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50R2VzdHVyZS5hY3RpdmUpOwor
ICAgIEFTU0VSVChtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudCk7CisKKyAgICBhdXRv
IGFwcEtpdFNjcm9sbE11bHRpcGxpZXIgPSBhcHBLaXRTY3JvbGxNdWx0aXBsaWVyRm9yRXZlbnQo
Km1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50KTsKKyAgICBhdXRvIGFwcEtpdEFjY2Vs
ZXJhdGVkRGVsdGEgPSBkZWx0YSAqIGFwcEtpdFNjcm9sbE11bHRpcGxpZXI7CisgICAgYXV0byB3
aGVlbFRpY2tzID0gYXBwS2l0QWNjZWxlcmF0ZWREZWx0YSAvIFdlYkNvcmU6OlNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICBhdXRvIHRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisK
KyAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSB3b3VsZCBzdGljayBsZWdpdGltYXRlIHJhd1BsYXRm
b3JtRGVsdGFzIG9uIHRoZSBldmVudCwKKyAgICAvLyBidXQgY3VycmVudGx5IG5vdGhpbmcgd2ls
bCBjb25zdW1lIHRoZW0sIGFuZCB3ZSdkIGhhdmUgdG8ga2VlcCB0cmFjayBvZiB0aGVtIHNlcGFy
YXRlbHkuCisgICAgV2ViV2hlZWxFdmVudCBzeW50aGV0aWNFdmVudChXZWJFdmVudDo6V2hlZWws
IG1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50LT5wb3NpdGlvbigpLCBtX2N1cnJlbnRH
ZXN0dXJlLmluaXRpYXRpbmdFdmVudC0+Z2xvYmFsUG9zaXRpb24oKSwgYXBwS2l0QWNjZWxlcmF0
ZWREZWx0YSwgd2hlZWxUaWNrcywgV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZl
bnQsIG1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50LT5kaXJlY3Rpb25JbnZlcnRlZEZy
b21EZXZpY2UoKSwgV2ViV2hlZWxFdmVudDo6UGhhc2VOb25lLCBwaGFzZSwgdHJ1ZSwgbV9jdXJy
ZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQtPnNjcm9sbENvdW50KCksIGRlbHRhLCBtX2xhc3RJ
bmNvbWluZ0V2ZW50LT5tb2RpZmllcnMoKSwgdGltZSwgdGltZSwgeyB9KTsKKyAgICBtX2Rpc3Bh
dGNoZXIuaW50ZXJuYWxXaGVlbEV2ZW50KG1fY3VycmVudEdlc3R1cmUucGFnZUlkZW50aWZpZXIs
IHN5bnRoZXRpY0V2ZW50LCBtX2xhc3RSdWJiZXJCYW5kYWJsZUVkZ2VzLCBFdmVudERpc3BhdGNo
ZXI6OldoZWVsRXZlbnRPcmlnaW46Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyKTsKK30KKwordm9p
ZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlkU3RhcnRNb21lbnR1bVBoYXNlKFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyIHBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVu
dCkKK3sKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmFjdGl2ZSA9IHRydWU7CisgICAgbV9jdXJyZW50
R2VzdHVyZS5wYWdlSWRlbnRpZmllciA9IHBhZ2VJZGVudGlmaWVyOworICAgIG1fY3VycmVudEdl
c3R1cmUuaW5pdGlhdGluZ0V2ZW50ID0gZXZlbnQ7CisgICAgbV9jdXJyZW50R2VzdHVyZS5jdXJy
ZW50T2Zmc2V0ID0geyB9OworICAgIG1fY3VycmVudEdlc3R1cmUuc3RhcnRUaW1lID0gV2FsbFRp
bWU6Om5vdygpOworICAgIG1fY3VycmVudEdlc3R1cmUuYWNjZWxlcmF0aW9uQ3VydmUgPSBbJl0g
KCkgLT4gc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4geworICAgICAg
ICBhdXRvIGN1cnZlSXRlcmF0b3IgPSBtX2FjY2VsZXJhdGlvbkN1cnZlcy5maW5kKG1fY3VycmVu
dEdlc3R1cmUucGFnZUlkZW50aWZpZXIpOworICAgICAgICBpZiAoY3VydmVJdGVyYXRvciA9PSBt
X2FjY2VsZXJhdGlvbkN1cnZlcy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIHJldHVybiBjdXJ2ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9KCk7CisKKyAgICBzdGFydERp
c3BsYXlMaW5rKCk7CisKKyAgICAvLyBGSVhNRTogVGhlIHN5c3RlbSBmYWxscyBiYWNrIGZyb20g
dGhlIHRhYmxlIHRvIGp1c3QgZ2VuZXJhdGluZyBkZWx0YXMKKyAgICAvLyBkaXJlY3RseSB3aGVu
IHRoZSBmcmFtZSBpbnRlcnZhbCBpcyB3aXRoaW4gMjBmcHMgb2YgaWRlYWxDdXJ2ZUZyYW1lUmF0
ZTsKKyAgICAvLyB3ZSBzaG91bGQgcGVyaGFwcyBkbyB0aGUgc2FtZS4KKyAgICBidWlsZE9mZnNl
dFRhYmxlV2l0aEluaXRpYWxEZWx0YSgqZXZlbnQucmF3UGxhdGZvcm1EZWx0YSgpKTsKKworICAg
IGRpc3BhdGNoU3ludGhldGljTW9tZW50dW1FdmVudChXZWJXaGVlbEV2ZW50OjpQaGFzZUJlZ2Fu
LCB7IH0pOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRFbmRNb21lbnR1
bVBoYXNlKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50R2VzdHVyZS5hY3RpdmUpOworCisgICAg
ZGlzcGF0Y2hTeW50aGV0aWNNb21lbnR1bUV2ZW50KFdlYldoZWVsRXZlbnQ6OlBoYXNlRW5kZWQs
IHsgfSk7CisKKyAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVu
dERpc3BhdGNoZXIgc2F3IG1vbWVudHVtIGVuZCBwaGFzZSB3aXRoIHRvdGFsIG9mZnNldCAlZiAl
ZiwgZHVyYXRpb24gJWYgKGV2ZW50IG9mZnNldCB3b3VsZCBoYXZlIGJlZW4gJWYgJWYpIiwgbV9j
dXJyZW50R2VzdHVyZS5jdXJyZW50T2Zmc2V0LndpZHRoKCksIG1fY3VycmVudEdlc3R1cmUuY3Vy
cmVudE9mZnNldC5oZWlnaHQoKSwgKFdhbGxUaW1lOjpub3coKSAtIG1fY3VycmVudEdlc3R1cmUu
c3RhcnRUaW1lKS5zZWNvbmRzKCksIG1fY3VycmVudEdlc3R1cmUuYWNjdW11bGF0ZWRFdmVudE9m
ZnNldC53aWR0aCgpLCBtX2N1cnJlbnRHZXN0dXJlLmFjY3VtdWxhdGVkRXZlbnRPZmZzZXQuaGVp
Z2h0KCkpOworCisgICAgc3RvcERpc3BsYXlMaW5rKCk7CisKKyAgICBtX2N1cnJlbnRHZXN0dXJl
ID0geyB9OworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzZXRTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSWRlbnRpZmllciwg
c3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gY3VydmUpCit7CisgICAg
bV9hY2NlbGVyYXRpb25DdXJ2ZXMuc2V0KHBhZ2VJZGVudGlmaWVyLCBjdXJ2ZSk7CisKKyAgICBX
VEY6OlRleHRTdHJlYW0gc3RyZWFtKFdURjo6VGV4dFN0cmVhbTo6TGluZU1vZGU6OlNpbmdsZUxp
bmUpOworICAgIHN0cmVhbSA8PCBjdXJ2ZTsKKyAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRp
b25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgc2V0IGN1cnZlICVzIiwgc3RyZWFtLnJlbGVh
c2UoKS51dGY4KCkuZGF0YSgpKTsKK30KKworV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQgTW9t
ZW50dW1FdmVudERpc3BhdGNoZXI6OmRpc3BsYXlJRCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
Y3VycmVudEdlc3R1cmUucGFnZUlkZW50aWZpZXIpOworICAgIGF1dG8gZGlzcGxheUlESXRlcmF0
b3IgPSBtX2Rpc3BsYXlJRHMuZmluZChtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyKTsK
KyAgICBpZiAoZGlzcGxheUlESXRlcmF0b3IgPT0gbV9kaXNwbGF5SURzLmVuZCgpKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBkaXNwbGF5SURJdGVyYXRvci0+dmFsdWU7Cit9CisK
K3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OnN0YXJ0RGlzcGxheUxpbmsoKQoreworICAg
IGF1dG8gZGlzcGxheUlEID0gdGhpcy0+ZGlzcGxheUlEKCk7CisgICAgaWYgKCFkaXNwbGF5SUQp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnRE
aXNwYXRjaGVyIGZhaWxlZCB0byBzdGFydCBkaXNwbGF5IGxpbmsiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBTd2l0Y2ggZG93biB0byBsb3dlci10aGFuLWZ1bGwt
c3BlZWQgZnJhbWUgcmF0ZXMgZm9yIHRoZSB0YWlsIGVuZCBvZiB0aGUgY3VydmUuCisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpTdGFydERpc3BsYXlMaW5rKG1fb2JzZXJ2ZXJJRCwgZGlz
cGxheUlELCBGdWxsU3BlZWRGcmFtZXNQZXJTZWNvbmQpLCAwKTsKKyAgICBSRUxFQVNFX0xPRyhT
Y3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgc3RhcnRpbmcgZGlzcGxh
eSBsaW5rIGZvciBkaXNwbGF5ICVkIiwgZGlzcGxheUlEKTsKK30KKwordm9pZCBNb21lbnR1bUV2
ZW50RGlzcGF0Y2hlcjo6c3RvcERpc3BsYXlMaW5rKCkKK3sKKyAgICBhdXRvIGRpc3BsYXlJRCA9
IHRoaXMtPmRpc3BsYXlJRCgpOworICAgIGlmICghZGlzcGxheUlEKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBmYWlsZWQg
dG8gc3RvcCBkaXNwbGF5IGxpbmsiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6U3RvcERpc3BsYXlMaW5rKG1fb2JzZXJ2ZXJJRCwgZGlz
cGxheUlEKSwgMCk7CisgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVt
RXZlbnREaXNwYXRjaGVyIHN0b3BwaW5nIGRpc3BsYXkgbGluayBmb3IgZGlzcGxheSAlZCIsIGRp
c3BsYXlJRCk7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OndpbmRvd1NjcmVl
bkRpZENoYW5nZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYkNvcmU6OlBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKK3sKKyAgICBib29sIGFmZmVjdHNDdXJyZW50R2VzdHVy
ZSA9IChwYWdlSUQgPT0gbV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllcik7CisgICAgaWYg
KGFmZmVjdHNDdXJyZW50R2VzdHVyZSkKKyAgICAgICAgc3RvcERpc3BsYXlMaW5rKCk7CisKKyAg
ICBtX2Rpc3BsYXlJRHMuc2V0KHBhZ2VJRCwgZGlzcGxheUlEKTsKKworICAgIGlmIChhZmZlY3Rz
Q3VycmVudEdlc3R1cmUpCisgICAgICAgIHN0YXJ0RGlzcGxheUxpbmsoKTsKK30KKwordm9pZCBN
b21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZChXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlVcGRhdGUmKQor
eworICAgIGlmICghbV9jdXJyZW50R2VzdHVyZS5hY3RpdmUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChkaXNwbGF5SUQgIT0gdGhpcy0+ZGlzcGxheUlEKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gYW5pbWF0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKSAtIG1fY3VycmVudEdl
c3R1cmUuc3RhcnRUaW1lOworICAgIGF1dG8gZGVzaXJlZE9mZnNldCA9IG9mZnNldEF0VGltZShh
bmltYXRpb25UaW1lKTsKKworI2lmICFVU0UoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9QUkVN
QVRVUkVfUk9VTkRJTkcpCisgICAgLy8gSW50ZW50aW9uYWwgZGVsdGEgcm91bmRpbmcgKGJ1dCBh
dCB0aGUgZW5kISkuCisgICAgRmxvYXRTaXplIGRlbHRhID0gcm91bmRlZEludFNpemUoZGVzaXJl
ZE9mZnNldCAtIG1fY3VycmVudEdlc3R1cmUuY3VycmVudE9mZnNldCk7CisjZWxzZQorICAgIEZs
b2F0U2l6ZSBkZWx0YSA9IGRlc2lyZWRPZmZzZXQgLSBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRP
ZmZzZXQ7CisjZW5kaWYKKworICAgIGRpc3BhdGNoU3ludGhldGljTW9tZW50dW1FdmVudChXZWJX
aGVlbEV2ZW50OjpQaGFzZUNoYW5nZWQsIC1kZWx0YSk7CisKKyAgICBtX2N1cnJlbnRHZXN0dXJl
LmN1cnJlbnRPZmZzZXQgKz0gZGVsdGE7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNo
ZXI6OmRpZFNjcm9sbFdpdGhJbnRlcnZhbChGbG9hdFNpemUgc2l6ZSwgU2Vjb25kcyBmcmFtZUlu
dGVydmFsKQoreworICAgIGF1dG8gcHVzaCA9IFtdKEhpc3RvcmljYWxEZWx0YXMmIGRlbHRhcywg
RGVsdGEgbmV3RGVsdGEpIHsKKyAgICAgICAgYm9vbCBkaXJlY3Rpb25DaGFuZ2VkID0gZGVsdGFz
LnNpemUoKSAmJiAoZGVsdGFzLmZpcnN0KCkucmF3UGxhdGZvcm1EZWx0YSA+IDApICE9IChuZXdE
ZWx0YS5yYXdQbGF0Zm9ybURlbHRhID4gMCk7CisgICAgICAgIGlmIChkaXJlY3Rpb25DaGFuZ2Vk
IHx8IG5ld0RlbHRhLmZyYW1lSW50ZXJ2YWwgPiBkZWx0YUhpc3RvcnlNYXhpbXVtQWdlKQorICAg
ICAgICAgICAgZGVsdGFzLmNsZWFyKCk7CisKKyAgICAgICAgZGVsdGFzLnByZXBlbmQobmV3RGVs
dGEpOworICAgICAgICBpZiAoZGVsdGFzLnNpemUoKSA+IGRlbHRhSGlzdG9yeVF1ZXVlU2l6ZSkK
KyAgICAgICAgICAgIGRlbHRhcy5yZW1vdmVMYXN0KCk7CisgICAgfTsKKworICAgIHB1c2gobV9k
ZWx0YUhpc3RvcnlYLCB7IHNpemUud2lkdGgoKSwgZnJhbWVJbnRlcnZhbCB9KTsKKyAgICBwdXNo
KG1fZGVsdGFIaXN0b3J5WSwgeyBzaXplLmhlaWdodCgpLCBmcmFtZUludGVydmFsIH0pOworfQor
Cit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTY3JvbGwoY29uc3QgV2ViV2hlZWxF
dmVudCYgZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRHZXN0dXJlLmFjdGl2ZSk7CisK
KyAgICBpZiAoIWV2ZW50LnJhd1BsYXRmb3JtRGVsdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBkZWx0YSA9ICpldmVudC5yYXdQbGF0Zm9ybURlbHRhKCk7CisgICAgYXV0byB0aW1l
ID0gZXZlbnQuaW9ISURFdmVudFRpbWVzdGFtcCgpOworCisgICAgaWYgKCFtX2xhc3RTY3JvbGxU
aW1lc3RhbXApIHsKKyAgICAgICAgbV9sYXN0U2Nyb2xsVGltZXN0YW1wID0gdGltZTsKKyAgICAg
ICAgLy8gRklYTUU6IENoZWNrIHRoYXQgdGhpcyBtYXRjaGVzIHRoZSBzeXN0ZW0gKHRoZXkgbWF5
IGdvIHdpdGggMTBtcyBmb3IgdGhlIGZpcnN0IGZyYW1lKS4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gZnJhbWVJbnRlcnZhbCA9IHRpbWUgLSAqbV9sYXN0U2Nyb2xsVGltZXN0
YW1wOworICAgIG1fbGFzdFNjcm9sbFRpbWVzdGFtcCA9IHRpbWU7CisKKyAgICBkaWRTY3JvbGxX
aXRoSW50ZXJ2YWwoZGVsdGEsIGZyYW1lSW50ZXJ2YWwpOworfQorCit2b2lkIE1vbWVudHVtRXZl
bnREaXNwYXRjaGVyOjpidWlsZE9mZnNldFRhYmxlV2l0aEluaXRpYWxEZWx0YShGbG9hdFNpemUg
aW5pdGlhbFVuYWNjZWxlcmF0ZWREZWx0YSkKK3sKKyNpZiBVU0UoTU9NRU5UVU1fRVZFTlRfRElT
UEFUQ0hFUl9QUkVNQVRVUkVfUk9VTkRJTkcpCisgICAgbV9jdXJyZW50R2VzdHVyZS5jYXJyeU9m
ZnNldCA9IHsgfTsKKyNlbmRpZgorICAgIG1fY3VycmVudEdlc3R1cmUub2Zmc2V0VGFibGUuY2xl
YXIoKTsKKworICAgIEZsb2F0U2l6ZSBhY2N1bXVsYXRlZE9mZnNldDsKKyAgICBGbG9hdFNpemUg
dW5hY2NlbGVyYXRlZERlbHRhID0gaW5pdGlhbFVuYWNjZWxlcmF0ZWREZWx0YTsKKworICAgIGRv
IHsKKyAgICAgICAgRmxvYXRTaXplIGFjY2VsZXJhdGVkRGVsdGE7CisgICAgICAgIHN0ZDo6dGll
KHVuYWNjZWxlcmF0ZWREZWx0YSwgYWNjZWxlcmF0ZWREZWx0YSkgPSBjb21wdXRlTmV4dERlbHRh
KHVuYWNjZWxlcmF0ZWREZWx0YSk7CisKKyAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgKz0gYWNj
ZWxlcmF0ZWREZWx0YTsKKyAgICAgICAgbV9jdXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZS5hcHBl
bmQoYWNjdW11bGF0ZWRPZmZzZXQpOworICAgIH0gd2hpbGUgKHN0ZDo6YWJzKHVuYWNjZWxlcmF0
ZWREZWx0YS53aWR0aCgpKSA+IDAuNSB8fCBzdGQ6OmFicyh1bmFjY2VsZXJhdGVkRGVsdGEuaGVp
Z2h0KCkpID4gMC41KTsKKworICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21l
bnR1bUV2ZW50RGlzcGF0Y2hlciBidWlsdCB0YWJsZSB3aXRoICVsZCBmcmFtZXMsIGluaXRpYWwg
ZGVsdGEgJWYgJWYsIGRpc3RhbmNlICVmICVmIChpbml0aWFsIGRlbHRhIGZyb20gbGFzdCBjaGFu
Z2VkIGV2ZW50ICVmICVmKSIsIG1fY3VycmVudEdlc3R1cmUub2Zmc2V0VGFibGUuc2l6ZSgpLCBp
bml0aWFsVW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCksIGluaXRpYWxVbmFjY2VsZXJhdGVkRGVs
dGEuaGVpZ2h0KCksIGFjY3VtdWxhdGVkT2Zmc2V0LndpZHRoKCksIGFjY3VtdWxhdGVkT2Zmc2V0
LmhlaWdodCgpLCBtX2xhc3RBY3RpdmVQaGFzZURlbHRhLndpZHRoKCksIG1fbGFzdEFjdGl2ZVBo
YXNlRGVsdGEuaGVpZ2h0KCkpOworfQorCitzdGF0aWMgZmxvYXQgaW50ZXJwb2xhdGUoZmxvYXQg
YSwgZmxvYXQgYiwgZmxvYXQgdCkKK3sKKyAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOworfQor
CitGbG9hdFNpemUgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6Om9mZnNldEF0VGltZShTZWNvbmRz
IHRpbWUpCit7CisgICAgaWYgKCFtX2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxlLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGZsb2F0IGZyYWN0aW9uYWxGcmFtZU51bWJlciA9
IHRpbWUuc2Vjb25kcygpIC8gaWRlYWxDdXJ2ZUZyYW1lUmF0ZS5zZWNvbmRzKCk7CisgICAgdW5z
aWduZWQgbG9uZyBsb3dlckZyYW1lTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQgbG9uZz4obV9j
dXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZS5zaXplKCkgLSAxLCBmbG9vcihmcmFjdGlvbmFsRnJh
bWVOdW1iZXIpKTsKKyAgICB1bnNpZ25lZCBsb25nIHVwcGVyRnJhbWVOdW1iZXIgPSBzdGQ6Om1p
bjx1bnNpZ25lZCBsb25nPihtX2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxlLnNpemUoKSAtIDEs
IGxvd2VyRnJhbWVOdW1iZXIgKyAxKTsKKyAgICBmbG9hdCBhbW91bnQgPSBmcmFjdGlvbmFsRnJh
bWVOdW1iZXIgLSBsb3dlckZyYW1lTnVtYmVyOworICAgIAorICAgIHJldHVybiB7CisgICAgICAg
IC1pbnRlcnBvbGF0ZShtX2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxlW2xvd2VyRnJhbWVOdW1i
ZXJdLndpZHRoKCksIG1fY3VycmVudEdlc3R1cmUub2Zmc2V0VGFibGVbdXBwZXJGcmFtZU51bWJl
cl0ud2lkdGgoKSwgYW1vdW50KSwKKyAgICAgICAgLWludGVycG9sYXRlKG1fY3VycmVudEdlc3R1
cmUub2Zmc2V0VGFibGVbbG93ZXJGcmFtZU51bWJlcl0uaGVpZ2h0KCksIG1fY3VycmVudEdlc3R1
cmUub2Zmc2V0VGFibGVbdXBwZXJGcmFtZU51bWJlcl0uaGVpZ2h0KCksIGFtb3VudCkKKyAgICB9
OworfQorCitzdGF0aWMgZmxvYXQgbW9tZW50dW1EZWNheVJhdGUoRmxvYXRTaXplIGRlbHRhLCBT
ZWNvbmRzIGZyYW1lSW50ZXJ2YWwpCit7CisgICAgY29uc3RleHByIGZsb2F0IGRlZmF1bHREZWNh
eSA9IDAuOTc1ZjsKKyAgICBjb25zdGV4cHIgZmxvYXQgdGFpbFZlbG9jaXR5ID0gMjUwLmY7Cisg
ICAgY29uc3RleHByIGZsb2F0IHRhaWxEZWNheSA9IDAuOTFmOworICAgIGF1dG8gYWxwaGEgPSBk
ZWZhdWx0RGVjYXk7CisKKyAgICBpZiAoZnJhbWVJbnRlcnZhbCkgeworICAgICAgICBmbG9hdCBp
bml0aWFsVmVsb2NpdHkgPSBkZWx0YS5kaWFnb25hbExlbmd0aCgpIC8gZnJhbWVJbnRlcnZhbC5z
ZWNvbmRzKCk7CisgICAgICAgIGZsb2F0IHdlYWtNb21lbnR1bSA9IHN0ZDo6bWF4PGZsb2F0Pigw
LmYsICh0YWlsVmVsb2NpdHkgLSBpbml0aWFsVmVsb2NpdHkpIC8gdGFpbFZlbG9jaXR5KTsKKyAg
ICAgICAgYWxwaGEgPSBkZWZhdWx0RGVjYXkgLSAoZGVmYXVsdERlY2F5IC0gdGFpbERlY2F5KSAq
IHdlYWtNb21lbnR1bTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpwb3coYWxwaGEsIChmcmFt
ZUludGVydmFsLnNlY29uZHMoKSAvIDAuMDA4ZikpOworfQorCitzdGQ6OnBhaXI8RmxvYXRTaXpl
LCBGbG9hdFNpemU+IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpjb21wdXRlTmV4dERlbHRhKEZs
b2F0U2l6ZSBjdXJyZW50VW5hY2NlbGVyYXRlZERlbHRhKQoreworICAgIEZsb2F0U2l6ZSB1bmFj
Y2VsZXJhdGVkRGVsdGEgPSBjdXJyZW50VW5hY2NlbGVyYXRlZERlbHRhOworCisgICAgZmxvYXQg
ZGVjYXlSYXRlID0gbW9tZW50dW1EZWNheVJhdGUodW5hY2NlbGVyYXRlZERlbHRhLCBpZGVhbEN1
cnZlRnJhbWVSYXRlKTsKKyAgICB1bmFjY2VsZXJhdGVkRGVsdGEuc2NhbGUoZGVjYXlSYXRlKTsK
KworICAgIGF1dG8gcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhID0gdW5hY2NlbGVyYXRlZERl
bHRhOworCisjaWYgVVNFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVJfUFJFTUFUVVJFX1JPVU5E
SU5HKQorICAgIC8vIFJvdW5kIGFuZCBjYXJyeS4KKyAgICBpbnQzMl90IHF1YW50aXplZFggPSBz
dGQ6OnJvdW5kKHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpKTsKKyAgICBpbnQz
Ml90IHF1YW50aXplZFkgPSBzdGQ6OnJvdW5kKHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YS5o
ZWlnaHQoKSk7CisKKyAgICBpZiAoc3RkOjphYnMocXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRh
LndpZHRoKCkpIDwgMSAmJiBzdGQ6OmFicyhxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEuaGVp
Z2h0KCkpIDwgMSkgeworICAgICAgICBmbG9hdCBkZWx0YVhJbmNsdWRpbmdDYXJyeSA9IHF1YW50
aXplZFVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpICsgbV9jdXJyZW50R2VzdHVyZS5jYXJyeU9m
ZnNldC53aWR0aCgpOworICAgICAgICBmbG9hdCBkZWx0YVlJbmNsdWRpbmdDYXJyeSA9IHF1YW50
aXplZFVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSArIG1fY3VycmVudEdlc3R1cmUuY2FycnlP
ZmZzZXQuaGVpZ2h0KCk7CisKKyAgICAgICAgLy8gSW50ZW50aW9uYWwgdHJ1bmNhdGlvbi4KKyAg
ICAgICAgcXVhbnRpemVkWCA9IGRlbHRhWEluY2x1ZGluZ0NhcnJ5OworICAgICAgICBxdWFudGl6
ZWRZID0gZGVsdGFZSW5jbHVkaW5nQ2Fycnk7CisgICAgICAgIG1fY3VycmVudEdlc3R1cmUuY2Fy
cnlPZmZzZXQgPSB7IGRlbHRhWEluY2x1ZGluZ0NhcnJ5IC0gcXVhbnRpemVkWCwgZGVsdGFZSW5j
bHVkaW5nQ2FycnkgLSBxdWFudGl6ZWRZIH07CisgICAgfQorCisgICAgcXVhbnRpemVkVW5hY2Nl
bGVyYXRlZERlbHRhID0geyBzdGF0aWNfY2FzdDxmbG9hdD4ocXVhbnRpemVkWCksIHN0YXRpY19j
YXN0PGZsb2F0PihxdWFudGl6ZWRZKSB9OworI2VuZGlmCisKKyAgICAvLyBUaGUgZGVsdGEgcXVl
dWUgb3BlcmF0ZXMgb24gcHJlLWFjY2VsZXJhdGlvbiBkZWx0YXMsIHNvIGluc2VydCB0aGUgbmV3
IGV2ZW50ICpiZWZvcmUqIGFjY2VsZXJhdGluZy4KKyAgICBkaWRTY3JvbGxXaXRoSW50ZXJ2YWwo
cXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLCBpZGVhbEN1cnZlRnJhbWVSYXRlKTsKKworICAg
IGF1dG8gYWNjZWxlcmF0ZUF4aXMgPSBbJl0gKEhpc3RvcmljYWxEZWx0YXMmIGRlbHRhcywgZmxv
YXQgdmFsdWUpIHsKKyAgICAgICAgZmxvYXQgdG90YWxEZWx0YSA9IDA7CisgICAgICAgIFNlY29u
ZHMgdG90YWxUaW1lOworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisKKyAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBkZWx0YSA6IGRlbHRhcykgeworICAgICAgICAgICAgdG90YWxEZWx0YSAr
PSBzdGQ6OmFicyhkZWx0YS5yYXdQbGF0Zm9ybURlbHRhKTsKKyAgICAgICAgICAgIGNvdW50Kys7
CisKKyAgICAgICAgICAgIGlmIChkZWx0YS5mcmFtZUludGVydmFsID4gZGVsdGFIaXN0b3J5TWF4
aW11bUludGVydmFsKSB7CisgICAgICAgICAgICAgICAgdG90YWxUaW1lICs9IGRlbHRhSGlzdG9y
eU1heGltdW1JbnRlcnZhbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdG90YWxUaW1lICs9IGRlbHRhLmZyYW1lSW50ZXJ2YWw7CisKKyAgICAg
ICAgICAgIGlmICh0b3RhbFRpbWUgPj0gZGVsdGFIaXN0b3J5TWF4aW11bUFnZSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYXZlcmFnZUZyYW1lSW50
ZXJ2YWwgPSBzdGQ6OmNsYW1wKHRvdGFsVGltZSAvIGNvdW50LCAxX21zLCBkZWx0YUhpc3RvcnlN
YXhpbXVtSW50ZXJ2YWwpOworICAgICAgICBmbG9hdCBhdmVyYWdlRnJhbWVJbnRlcnZhbE1TID0g
YXZlcmFnZUZyYW1lSW50ZXJ2YWwubWlsbGlzZWNvbmRzKCk7CisgICAgICAgIGZsb2F0IGF2ZXJh
Z2VEZWx0YSA9IHRvdGFsRGVsdGEgLyBjb3VudDsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgICAgICBpZiAoIW1fY3VycmVudEdlc3R1cmUuZGlkTG9nSW5pdGlhbFF1ZXVlU3RhdGUp
CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVu
dERpc3BhdGNoZXIgaW5pdGlhbCBoaXN0b3JpY2FsIGRlbHRhczogYXZlcmFnZSBkZWx0YSAlZiwg
YXZlcmFnZSB0aW1lICVmbXMsIGV2ZW50IGNvdW50ICVkIiwgYXZlcmFnZURlbHRhLCBhdmVyYWdl
RnJhbWVJbnRlcnZhbE1TLCBjb3VudCk7CisjZW5kaWYKKworICAgICAgICBjb25zdGV4cHIgZmxv
YXQgdmVsb2NpdHlHYWluQSA9IDIuZiAvIDY1NTM2LjBmOworICAgICAgICBjb25zdGV4cHIgZmxv
YXQgdmVsb2NpdHlHYWluQiA9IDk1NS5mIC8gNjU1MzYuMGY7CisgICAgICAgIGNvbnN0ZXhwciBm
bG9hdCB2ZWxvY2l0eUNvbnN0YW50ID0gOTgzNjkuZiAvIDY1NTM2LjBmOworICAgICAgICBjb25z
dGV4cHIgZmxvYXQgbWluaW11bVZlbG9jaXR5ID0gMS5mIC8gNjU1MzYuMGY7CisKKyAgICAgICAg
ZmxvYXQgdmVsb2NpdHkgPSAodmVsb2NpdHlHYWluQSAqIGF2ZXJhZ2VGcmFtZUludGVydmFsTVMg
KiBhdmVyYWdlRnJhbWVJbnRlcnZhbE1TIC0gdmVsb2NpdHlHYWluQiAqIGF2ZXJhZ2VGcmFtZUlu
dGVydmFsTVMgKyB2ZWxvY2l0eUNvbnN0YW50KSAqIGF2ZXJhZ2VEZWx0YTsKKyAgICAgICAgdmVs
b2NpdHkgPSBzdGQ6Om1heDxmbG9hdD4odmVsb2NpdHksIG1pbmltdW1WZWxvY2l0eSk7CisKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgbWF0aCBpcyBpbmNvbXBsZXRlIGlmIHdlIG5lZWQgdG8gc3Vw
cG9ydCBhY2NlbGVyYXRpb24gdGFibGVzIGFzIHdlbGwuCisgICAgICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSBtX2N1cnJlbnRHZXN0dXJlLmFjY2VsZXJhdGlvbkN1cnZlLT5hY2NlbGVyYXRpb25GYWN0
b3IodmVsb2NpdHkpIC8gdmVsb2NpdHk7CisgICAgICAgIHJldHVybiB2YWx1ZSAqIG11bHRpcGxp
ZXI7CisgICAgfTsKKworICAgIEZsb2F0U2l6ZSBhY2NlbGVyYXRlZERlbHRhKAorICAgICAgICBh
Y2NlbGVyYXRlQXhpcyhtX2RlbHRhSGlzdG9yeVgsIHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0
YS53aWR0aCgpKSwKKyAgICAgICAgYWNjZWxlcmF0ZUF4aXMobV9kZWx0YUhpc3RvcnlZLCBxdWFu
dGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0KCkpCisgICAgKTsKKworICAgIG1fY3VycmVu
dEdlc3R1cmUuZGlkTG9nSW5pdGlhbFF1ZXVlU3RhdGUgPSB0cnVlOworCisgICAgcmV0dXJuIHsg
dW5hY2NlbGVyYXRlZERlbHRhLCBhY2NlbGVyYXRlZERlbHRhIH07Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliZjE1
M2ZiZjFiOThiMjZiNjgxMGE5ZDUwM2MwYzFkYWIzNjliMjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5o
CkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKworLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9u
Y2Ugd2UgZGVjaWRlIHdoaWNoIHZlcnNpb24gd2Ugd2FudC4KKyNkZWZpbmUgVVNFX01PTUVOVFVN
X0VWRU5UX0RJU1BBVENIRVJfUFJFTUFUVVJFX1JPVU5ESU5HIDAKKworI2luY2x1ZGUgIlNjcm9s
bGluZ0FjY2VsZXJhdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiV2ViV2hlZWxFdmVudC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRp
Zmllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVjdEVkZ2VzLmg+CisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citz
dHJ1Y3QgRGlzcGxheVVwZGF0ZTsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBFdmVudERpc3BhdGNoZXI7CisKK2Ns
YXNzIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShN
b21lbnR1bUV2ZW50RGlzcGF0Y2hlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgTW9tZW50dW1FdmVudERpc3BhdGNoZXIoRXZlbnREaXNwYXRjaGVyJik7Cisg
ICAgfk1vbWVudHVtRXZlbnREaXNwYXRjaGVyKCk7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZl
bnQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBXZWJDb3Jl
OjpSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcyk7CisKKyAgICB2b2lkIHNldFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBzdGQ6Om9w
dGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPik7CisKKyAgICB2b2lkIGRpc3BsYXlX
YXNSZWZyZXNoZWQoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQsIGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlVcGRhdGUmKTsKKworICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBkaWRTdGFydE1vbWVudHVtUGhhc2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIs
IGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICB2b2lkIGRpZEVuZE1vbWVudHVtUGhhc2UoKTsK
KworICAgIGJvb2wgZXZlbnRTaG91bGRTdGFydFN5bnRoZXRpY01vbWVudHVtUGhhc2UoV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmKSBjb25zdDsKKworICAgIHZv
aWQgc3RhcnREaXNwbGF5TGluaygpOworICAgIHZvaWQgc3RvcERpc3BsYXlMaW5rKCk7CisKKyAg
ICBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdDsKKworICAgIHZv
aWQgZGlzcGF0Y2hTeW50aGV0aWNNb21lbnR1bUV2ZW50KFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBX
ZWJDb3JlOjpGbG9hdFNpemUgZGVsdGEpOworCisgICAgdm9pZCBidWlsZE9mZnNldFRhYmxlV2l0
aEluaXRpYWxEZWx0YShGbG9hdFNpemUpOworCisgICAgRmxvYXRTaXplIG9mZnNldEF0VGltZShT
ZWNvbmRzKTsKKyAgICBzdGQ6OnBhaXI8RmxvYXRTaXplLCBGbG9hdFNpemU+IGNvbXB1dGVOZXh0
RGVsdGEoRmxvYXRTaXplIGN1cnJlbnRVbmFjY2VsZXJhdGVkRGVsdGEpOworCisgICAgdm9pZCBk
aWRTY3JvbGxXaXRoSW50ZXJ2YWwoRmxvYXRTaXplLCBTZWNvbmRzKTsKKyAgICB2b2lkIGRpZFNj
cm9sbChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisKKyAgICBzdHJ1Y3QgRGVsdGEgeworICAgICAg
ICBmbG9hdCByYXdQbGF0Zm9ybURlbHRhOworICAgICAgICBTZWNvbmRzIGZyYW1lSW50ZXJ2YWw7
CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRlbHRhSGlzdG9yeVF1ZXVl
U2l6ZSA9IDk7CisgICAgdHlwZWRlZiBEZXF1ZTxEZWx0YSwgZGVsdGFIaXN0b3J5UXVldWVTaXpl
PiBIaXN0b3JpY2FsRGVsdGFzOworICAgIEhpc3RvcmljYWxEZWx0YXMgbV9kZWx0YUhpc3RvcnlY
OworICAgIEhpc3RvcmljYWxEZWx0YXMgbV9kZWx0YUhpc3RvcnlZOworCisgICAgc3RkOjpvcHRp
b25hbDxXYWxsVGltZT4gbV9sYXN0U2Nyb2xsVGltZXN0YW1wOworICAgIHN0ZDo6b3B0aW9uYWw8
V2ViV2hlZWxFdmVudD4gbV9sYXN0SW5jb21pbmdFdmVudDsKKyAgICBXZWJDb3JlOjpSZWN0RWRn
ZXM8Ym9vbD4gbV9sYXN0UnViYmVyQmFuZGFibGVFZGdlczsKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBGbG9hdFNpemUgbV9sYXN0QWN0aXZlUGhhc2VEZWx0YTsKKyNlbmRpZgorCisg
ICAgc3RydWN0IHsKKyAgICAgICAgYm9vbCBhY3RpdmUgeyBmYWxzZSB9OworCisgICAgICAgIFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJZGVudGlmaWVyOworICAgICAgICBzdGQ6Om9wdGlv
bmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBhY2NlbGVyYXRpb25DdXJ2ZTsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxXZWJXaGVlbEV2ZW50PiBpbml0aWF0aW5nRXZlbnQ7CisKKyAgICAg
ICAgRmxvYXRTaXplIGN1cnJlbnRPZmZzZXQ7CisgICAgICAgIFdhbGxUaW1lIHN0YXJ0VGltZTsK
KworICAgICAgICBWZWN0b3I8RmxvYXRTaXplPiBvZmZzZXRUYWJsZTsKKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgICAgICBGbG9hdFNpemUgYWNjdW11bGF0ZWRFdmVudE9mZnNldDsK
KyAgICAgICAgYm9vbCBkaWRMb2dJbml0aWFsUXVldWVTdGF0ZSB7IGZhbHNlIH07CisjZW5kaWYK
KworI2lmIFVTRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSX1BSRU1BVFVSRV9ST1VORElORykK
KyAgICAgICAgRmxvYXRTaXplIGNhcnJ5T2Zmc2V0OworI2VuZGlmCisgICAgfSBtX2N1cnJlbnRH
ZXN0dXJlOworCisgICAgRGlzcGxheUxpbmtPYnNlcnZlcklEIG1fb2JzZXJ2ZXJJRDsKKyAgICBI
YXNoTWFwPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJ
RD4gbV9kaXNwbGF5SURzOworICAgIEhhc2hNYXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIHN0
ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+PiBtX2FjY2VsZXJhdGlvbkN1
cnZlczsKKyAgICBFdmVudERpc3BhdGNoZXImIG1fZGlzcGF0Y2hlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKaW5kZXggNzdmODRkY2U3ZmFhYTQ5MmFhNTVmZWEwMjViYjYwNmUwZmQw
NmM1YS4uNWMzY2ZkNDIzODc4YjZjYzU1MjAzNTJmYWQwNDVjY2Y1OWYwY2IwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMwMzEsNyArMzAz
MSw3IEBAIHN0YXRpYyBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYg
d2hlZWxFdmVudCwgUGFnZSogcGFnZSwgT3B0aW9uCiAgICAgcmV0dXJuIHBhZ2UtPnVzZXJJbnB1
dEJyaWRnZSgpLmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1XaGVlbEV2ZW50LCBwcm9jZXNzaW5n
U3RlcHMpOwogfQogCi1ib29sIFdlYlBhZ2U6OndoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0PFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHByb2Nl
c3NpbmdTdGVwcykKK2Jvb2wgV2ViUGFnZTo6d2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50
JiB3aGVlbEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4gcHJvY2Vz
c2luZ1N0ZXBzLCBFdmVudERpc3BhdGNoZXI6OldoZWVsRXZlbnRPcmlnaW4gd2hlZWxFdmVudE9y
aWdpbikKIHsKICAgICBtX3VzZXJBY3Rpdml0eS5pbXB1bHNlKCk7CiAKQEAgLTMwMzksNyArMzAz
OSw3IEBAIGJvb2wgV2ViUGFnZTo6d2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVl
bEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByCiAKICAgICBib29sIGhhbmRsZWQgPSBoYW5k
bGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQsIG1fcGFnZS5nZXQoKSwgcHJvY2Vzc2luZ1N0ZXBzKTsK
IAotICAgIGlmIChwcm9jZXNzaW5nU3RlcHMuY29udGFpbnMoV2hlZWxFdmVudFByb2Nlc3NpbmdT
dGVwczo6TWFpblRocmVhZEZvclNjcm9sbGluZykpCisgICAgaWYgKHByb2Nlc3NpbmdTdGVwcy5j
b250YWlucyhXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yU2Nyb2xsaW5n
KSAmJiB3aGVlbEV2ZW50T3JpZ2luID09IEV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudE9yaWdp
bjo6VUlQcm9jZXNzKQogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJl
Y2VpdmVFdmVudChzdGF0aWNfY2FzdDx1aW50MzJfdD4od2hlZWxFdmVudC50eXBlKCkpLCBoYW5k
bGVkKSk7CiAKICAgICByZXR1cm4gaGFuZGxlZDsKQEAgLTMwNTMsNyArMzA1Myw3IEBAIHZvaWQg
V2ViUGFnZTo6ZGlzcGF0Y2hXaGVlbEV2ZW50V2l0aG91dFNjcm9sbGluZyhjb25zdCBXZWJXaGVl
bEV2ZW50JiB3aGVlbEV2ZW50CiAjZWxzZQogICAgIGJvb2wgaXNDYW5jZWxhYmxlID0gdHJ1ZTsK
ICNlbmRpZgotICAgIGJvb2wgaGFuZGxlZCA9IHRoaXMtPndoZWVsRXZlbnQod2hlZWxFdmVudCwg
eyBpc0NhbmNlbGFibGUgPyBXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9y
QmxvY2tpbmdET01FdmVudERpc3BhdGNoIDogV2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6TWFp
blRocmVhZEZvck5vbkJsb2NraW5nRE9NRXZlbnREaXNwYXRjaCB9KTsKKyAgICBib29sIGhhbmRs
ZWQgPSB0aGlzLT53aGVlbEV2ZW50KHdoZWVsRXZlbnQsIHsgaXNDYW5jZWxhYmxlID8gV2hlZWxF
dmVudFByb2Nlc3NpbmdTdGVwczo6TWFpblRocmVhZEZvckJsb2NraW5nRE9NRXZlbnREaXNwYXRj
aCA6IFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JOb25CbG9ja2luZ0RP
TUV2ZW50RGlzcGF0Y2ggfSwgRXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50T3JpZ2luOjpVSVBy
b2Nlc3MpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhbmRsZWQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZDM1OGEyNTZjMmFiMzE3MmNl
MDQyOGFmZGZkZTM5OTE0OTZjOWMyZC4uMjYyZGU2YTQyYTY5NDk1MzAyMDFjNzIzZGFlN2U0NTIy
YzU3MTYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKICNpbmNsdWRlICJEcmF3
aW5nQXJlYUluZm8uaCIKICNpbmNsdWRlICJFZGl0aW5nUmFuZ2UuaCIKKyNpbmNsdWRlICJFdmVu
dERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmgiCiAj
aW5jbHVkZSAiR2VvbG9jYXRpb25JZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllclR5
cGVzLmgiCkBAIC0xMDY1LDcgKzEwNjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydFdhaXRp
bmdGb3JDb250ZXh0TWVudVRvU2hvdygpIHsgbV93YWl0aW5nRm9yQ29udGV4dE1lbnVUb1Nob3cg
PSB0cnVlOyB9CiAjZW5kaWYKIAotICAgIGJvb2wgd2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2
ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+KTsKKyAg
ICBib29sIHdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYsIE9wdGlvblNldDxXZWJDb3Jl
OjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiwgRXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50
T3JpZ2luKTsKIAogICAgIHZvaWQgd2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZChib29sKTsKICAg
ICB2b2lkIHJlY29tcHV0ZVNob3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50c1N0YXRlKCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445459</attachid>
            <date>2021-11-30 13:03:23 -0800</date>
            <delta_ts>2021-11-30 15:37:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233653-20211130130322.patch</filename>
            <type>text/plain</type>
            <size>81761</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc0OGM0NDZkZTAwNmUwNDE5OGNiNmE3
YmQ0MzAwOWM0ZDQyYjgyNzguLmZmMzY4ODA5OWJmNGQ5OTk1MDMzY2RiZDhhMWQxZGE1OTRiNDFj
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhl
c2l6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzY1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODU1NzEyNTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1FbmFibGUuaDoK
KyAgICAgICAgQWRkIGFuIEVOQUJMRSgpLgorCiAyMDIxLTExLTI5ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZm9y
IHRoZSBXZWIgTG9jayBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDllOTY1MGE1MzFhNmE5NGU2
OTJkMDVhMTJmZjZlNDBjNDA3ZTAyNzIuLmViNDRlYjBmMWQwZGQzMDY1NDk1ZjU5ZjE2ZmIwZWUw
Y2JmMTQ2ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTExLTMw
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBh
IG1vbWVudHVtIGV2ZW50IHN5bnRoZXNpemVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2NTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg1NTcx
MjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaDoKKyAgICAgICAgQWRkIHNvbWUgU1BJLgorCiAyMDIx
LTExLTI5ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAg
QVg6IFVuaWZ5IHNwZWVjaCBzeW50aGVzaXplciBwbGF0Zm9ybSB1c2FnZSBmb3IgTWFjL2lPUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBlNmNkM2U2Y2QxYjNkMTcyOWYxNTRmNWU4N2IwZmMyZTI2N2Q2NmQyLi41YmFl
ZGQwNTkxODYxNWI5MTUzMmNhMTA1OTcyODQ4MDdjMjQzZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2NSBAQAorMjAyMS0xMS0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgYSBtb21lbnR1bSBldmVudCBzeW50aGVzaXplcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNjUzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84NTU3MTI1OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIFNjcm9s
bEFuaW1hdGlvbnMgbG9nIGNoYW5uZWwgdG8gV2ViS2l0IChpdCBhbHJlYWR5IGV4aXN0cyBpbiBX
ZWJDb3JlKS4KKworICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZTo6Y29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKToK
KyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmV2YWx1YXRlUXVh
cnRpYyk6CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjphY2Nl
bGVyYXRpb25GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZl
bnQpOgorICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIEFkZCBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBh
IHF1YXJ0aWMgc2Nyb2xsaW5nIGFjY2VsZXJhdGlvbiBjdXJ2ZSB3aXRoCisgICAgICAgIGEgdHJh
aWxpbmcgbGluZWFyIHRhbmdlbnQgcmVnaW9uLCBhbmQgYWxsb3dzIGludGVycG9sYXRpb24gYmV0
d2VlbiBjdXJ2ZXMKKyAgICAgICAgYW5kIGV2YWx1YXRpb24gb2YgdGhlIGN1cnZlIGF0IGEgcG9p
bnQuCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFj
Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6ZnJvbUZpeGVkUG9pbnQpOgorICAgICAgICAo
V2ViS2l0OjpyZWFkRml4ZWRQb2ludFBhcmFtZXRlcik6CisgICAgICAgIChXZWJLaXQ6OmZyb21J
T0hJREN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2Nl
bGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZnJvbU5hdGl2ZVdoZWVsRXZlbnQpOgorICAgICAgICBHaXZlbiBhIE5hdGl2ZVdlYldoZWVsRXZl
bnQsIGV4dHJhY3QgaXRzIHVuZGVybHlpbmcgcGxhdGZvcm0gZXZlbnQKKyAgICAgICAgYW5kIGZl
dGNoIHRoZSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBmb3IgdGhlIG9yaWdpbmF0aW5nIGRl
dmljZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50
eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIEZldGNoIHRoZSBj
dXJyZW50IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIG9uIGVhY2ggbW9tZW50dW0gYmVnaW4g
ZXZlbnQsCisgICAgICAgIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZW5kV2hlZWxFdmVudCk6CisgICAgICAgIFNlbmQgdGhlIFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIHRvIEV2ZW50RGlzcGF0Y2hlciBqdXN0IGJlZm9yZQor
ICAgICAgICB3ZSBzZW5kIHRoZSBtb21lbnR1bSBiZWdpbiBldmVudCBhbG9uZywgaWYgaXQgaGFz
IGNoYW5nZWQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aW5kb3dTY3JlZW5E
aWRDaGFuZ2UpOgorICAgICAgICBLZWVwIEV2ZW50RGlzcGF0Y2hlciBhcHByaXNlZCBvZiBjaGFu
Z2VzIHRvIHRoZSBjdXJyZW50IHNjcmVlbiBvZiB0aGUgcGFnZS4KKworICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2Vi
S2l0OjpFdmVudERpc3BhdGNoZXI6OmludGVybmFsV2hlZWxFdmVudCk6CisgICAgICAgIEZhY3Rv
ciBtb3N0IG9mIHdoZWVsRXZlbnQgb3V0IGludG8gaW50ZXJuYWxXaGVlbEV2ZW50LCBzbyB0aGF0
CisgICAgICAgIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGNhbiBjYWxsIGludGVybmFsV2hlZWxF
dmVudCgpLCBza2lwcGluZyB0aGUgY29kZQorICAgICAgICBpbiB3aGVlbEV2ZW50KCkgdGhhdCBm
b3J3YXJkcyB0aGUgZXZlbnQuLi4gdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAg
ICAgQWxzbywga2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgZXZlbnQgY2FtZSBmcm9tIChVSSBwcm9j
ZXNzIG9yIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBhbmQgYXZvaWQgc2VuZGlu
ZyBkaWRSZWNlaXZlRXZlbnQgcmVwbGllcyB0byB0aGUgVUkgcHJvY2VzcyBmb3Igc3ludGhldGlj
CisgICAgICAgIGV2ZW50cyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dC4KKworICAgICAgICAo
V2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQpOgorICAgICAgICBGb3J3YXJkIHdo
ZWVsIGV2ZW50cyB0byBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci4KKworICAgICAgICAoV2ViS2l0
OjpFdmVudERpc3BhdGNoZXI6OnNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKToKKyAgICAg
ICAgRm9yd2FyZCBzY3JvbGxpbmcgY3VydmUgY2hhbmdlcyB0byBNb21lbnR1bUV2ZW50RGlzcGF0
Y2hlci4KKworICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZy
ZXNoZWQpOgorICAgICAgICBGb3J3YXJkIGRpc3BsYXkgcmVmcmVzaCBjYWxsYmFja3MgdG8gTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVy
Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICBGb3J3YXJkIHBhZ2Ugc2NyZWVuIGNo
YW5nZXMgdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpc3BhdGNoV2hlZWxFdmVudFdpdGhvdXRTY3Jv
bGxpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAg
IERvbid0IHNlbmQgZGlkUmVjZWl2ZUV2ZW50IGZvciBzeW50aGV0aWMgZXZlbnRzIGZyb20gdGhl
IG1haW4gdGhyZWFkIGVpdGhlci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Nb21l
bnR1bUV2ZW50RGlzcGF0Y2hlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNb21lbnR1
bUV2ZW50RGlzcGF0Y2hlcjo6TW9tZW50dW1FdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2Vi
S2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6fk1vbWVudHVtRXZlbnREaXNwYXRjaGVyKToK
KyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmV2ZW50U2hvdWxkU3Rh
cnRTeW50aGV0aWNNb21lbnR1bVBoYXNlIGNvbnN0KToKKyAgICAgICAgSWYgd2UgaGF2ZSBldmVy
eXRoaW5nIHdlIG5lZWQgKGEgc2Nyb2xsaW5nIGN1cnZlIC0gd2hpY2ggYWxzbyBpbXBsaWVzCisg
ICAgICAgIHRoYXQgdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAtIGFuZCByYXcgcGxhdGZvcm0gZGVs
dGFzKSwgYW5kIHRoZSBldmVudAorICAgICAgICBpcyBhIG1vbWVudHVtIGJlZ2luIGV2ZW50LCB3
ZSBjYW4gdXNlIGl0IHRvIHN0YXJ0IGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNlLiAKKworICAg
ICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6aGFuZGxlV2hlZWxFdmVudCk6
CisgICAgICAgIFN0YXJ0IG9yIHN0b3AgdGhlIG1vbWVudHVtIHBoYXNlIGFzIGFwcHJvcHJpYXRl
LgorICAgICAgICBSZWNvcmQgYW55IGluY29taW5nIGZpbmdlcnMtZG93biBwaGFzZSBldmVudHMg
aW4gYSByb2xsaW5nIGV2ZW50IGhpc3Rvcnkgc3RydWN0dXJlLgorICAgICAgICBCbG9jayBwbGF0
Zm9ybS1ldmVudC1kcml2ZW4gZXZlbnRzIGZyb20gYmVpbmcgZnVydGhlciBoYW5kbGVkIGJ5IFdl
YktpdAorICAgICAgICBpZiB3ZSBhcmUgaW5zaWRlIGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNl
LCBzaW5jZSB3ZSdsbCBiZSByZXBsYWNpbmcgdGhlbS4KKworICAgICAgICAoV2ViS2l0OjphcHBL
aXRTY3JvbGxNdWx0aXBsaWVyRm9yRXZlbnQpOgorICAgICAgICBEZXRlcm1pbmUgdGhlIEFwcEtp
dCBzY3JvbGwgbXVsaXBsaWVyICgiYWNjZWxlcmF0ZWQiIHZzICJ1bmFjY2VsZXJhdGVkIgorICAg
ICAgICBkZWx0YXMgaW4gTlNFdmVudCBwYXJsYW5jZSkgZnJvbSB0aGUgZXZlbnQgdmlhIGRpdmlz
aW9uLgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aFN5bnRoZXRpY01vbWVudHVtRXZlbnQpOgorICAgICAgICBEaXNwYXRjaCBhIHN5bnRoZXRpYyBl
dmVudCB3aXRoIHRoZSBnaXZlbiBtb21lbnR1bSBwaGFzZSBhbmQgZGVsdGEuCisgICAgICAgIFdl
IGJvcnJvdyBzb21lIHByb3BlcnRpZXMgZnJvbSB0aGUgZXZlbnQgdGhhdCBpbml0aWF0ZWQgdGhl
IG1vbWVudHVtCisgICAgICAgIHBoYXNlIChlLmcuIHRoZSBwb3NpdGlvbiksIGFuZCBzb21lIGZy
b20gd2hhdGV2ZXIgZXZlbnQgd2UndmUgbW9zdAorICAgICAgICByZWNlbnRseSBzZWVuIChldmVu
IGlmIHdlIHRvbGQgdGhlIHJlc3Qgb2YgV2ViS2l0IHRvIGlnbm9yZSBpdCksIHNvCisgICAgICAg
IHRoYXQgd2UgZ2V0IHRoZSBtb3N0IHVwLXRvLWRhdGUgc3RhdGUgZm9yIGUuZy4gdGhlIGtleWJv
YXJkIG1vZGlmaWVycy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hl
cjo6ZGlkU3RhcnRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgUmVjb3JkIHJlbGV2YW50IGluZm9y
bWF0aW9uIGFib3V0IHRoZSBzdGFydCBldmVudCwgZ2VuZXJhdGUgdGhlCisgICAgICAgIG1vbWVu
dHVtIGN1cnZlLCBhbmQgc3RhcnQgYSBmdWxsLXJhdGUgZGlzcGxheSBsaW5rLiBBbHNvLCBzZW5k
IGEgbW9tZW50dW0KKyAgICAgICAgYmVnaW4gZXZlbnQsIHNpbmNlIHdlIGJsb2NrZWQgdGhlIHJl
YWwgb25lLgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRF
bmRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgU2VuZCBhIG1vbWVudHVtIGVuZGVkIGV2ZW50LCBz
aHV0IGRvd24gdGhlIGRpc3BsYXkgbGluaywgYW5kIHJlc2V0IGFsbAorICAgICAgICBwZXItZ2Vz
dHVyZSBzdGF0ZS4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6
c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICBTdG9yZSBTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZXMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0
OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheUlEIGNvbnN0KToKKyAgICAgICAgTG9v
ayB1cCB0aGUgZGlzcGxheUlEIGZvciB0aGUgY3VycmVudCBnZXN0dXJlJ3MgcGFnZS4KKworICAg
ICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c3RhcnREaXNwbGF5TGluayk6
CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdG9wRGlzcGxheUxp
bmspOgorICAgICAgICBTdGFydCBhbmQgc3RvcCBhIGRpc3BsYXkgbGluaywgd2hpY2ggd2lsbCAt
IGluIGEgcm91bmRhYm91dCBtYW5uZXIgLQorICAgICAgICBldmVudHVhbGx5IGNhbGwgYmFjayBp
bnRvIGRpc3BsYXlXYXNSZWZyZXNoZWQuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVu
dERpc3BhdGNoZXI6OndpbmRvd1NjcmVlbkRpZENoYW5nZSk6CisgICAgICAgIFN0b3JlIERpc3Bs
YXlJRHMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZCk6CisgICAgICAgIFdoZW4gdGhlIGRp
c3BsYXkgbGluayBjYWxscyB1cyBiYWNrLCBlbWl0IGEgc2luZ2xlIG1vbWVudHVtIGNoYW5nZWQK
KyAgICAgICAgZXZlbnQgb2Ygc3VmZmljaWVudCBkZWx0YSB0byBtb3ZlIHVzIHRvIHRoZSBkZXNp
cmVkIG9mZnNldCBhbG9uZyB0aGUgY3VydmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1F
dmVudERpc3BhdGNoZXI6OmRpZFNjcm9sbFdpdGhJbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXQ6
Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTY3JvbGwpOgorICAgICAgICBSZWNvcmQgaW5j
b21pbmcgc2Nyb2xsaW5nIGV2ZW50cyBpbnRvIGEgcm9sbGluZyBoaXN0b3J5IGRlcXVlLgorCisg
ICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpidWlsZE9mZnNldFRhYmxl
V2l0aEluaXRpYWxEZWx0YSk6CisgICAgICAgIENvbXB1dGUgdGhlIG9mZnNldHMgZm9yIHRoZSBl
bnRpcmUgImlkZWFsIGN1cnZlIiB0YWJsZSAoYXQgNjBIeikgYnkKKyAgICAgICAgcnVubmluZyB0
aGUgYW5pbWF0aW9uIGFuZCBhY2N1bXVsYXRpbmcgdGhlIGRlbHRhcy4KKworICAgICAgICAoV2Vi
S2l0OjppbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRj
aGVyOjpvZmZzZXRBdFRpbWUpOgorICAgICAgICBJbnRlcnBvbGF0ZSBhbG9uZyB0aGUgImlkZWFs
IGN1cnZlIiB0byBkZXRlcm1pbmUgdGhlIGludGVuZGVkIG9mZnNldAorICAgICAgICBhdCBhIGdp
dmVuIHRpbWUuCisKKyAgICAgICAgKFdlYktpdDo6bW9tZW50dW1EZWNheVJhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6Y29tcHV0ZU5leHREZWx0YSk6Cisg
ICAgICAgIENvbXB1dGUgdGhlIG5leHQgZGVsdGEgZ2l2ZW4gYSBkZWx0YSAoYW5kIHRoZSBldmVu
dCBoaXN0b3J5KSBieSBhcHBseWluZworICAgICAgICBhIGJpdCBvZiBleHBvbmVudGlhbCBkZWNh
eSBhbmQgdGhlbiBwYXNzaW5nIGl0IHRocm91Z2ggdGhlCisgICAgICAgIFNjcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlLiBXZSByZXR1cm4gYm90aCB0aGUgdW5hY2NlbGVyYXRlZAorICAgICAgICBh
bmQgYWNjZWxlcmF0ZWQgZGVsdGFzLCBiZWNhdXNlIHRoZSBpbnB1dCB0byB0aGUgbmV4dCBpdGVy
YXRpb24gb2YKKyAgICAgICAgY29tcHV0ZU5leHREZWx0YSBpcyB0aGUgdW5hY2NlbGVyYXRlZCBk
ZWx0YSwgYnV0IHRoZSBkZWx0YSBhcHBsaWVkCisgICAgICAgIHRvIHRoZSBhY3R1YWwgc2Nyb2xs
IHBvc2l0aW9uIGlzIHRoZSBhY2NlbGVyYXRlZCBkZWx0YS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oOiBBZGRlZC4KKwogMjAyMS0xMS0y
OSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
dGhlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAppbmRleCA0MmNhYTU3NWVjOGZlMmYwMTg4
Mjc3OWE0YjQzMzFiZGFjYjI3YmZmLi5iMjYzZWU0NjQ4NTY2NjVjZTkwZjc4M2Q2Y2U3ZTBkZWQ5
YWVlMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTg3Niw2ICs4NzYsMTAgQEAKICNk
ZWZpbmUgRU5BQkxFX1dIRUVMX0VWRU5UX0xBVENISU5HIDEKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oTUFDKQorI2RlZmluZSBFTkFCTEVfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUiAxCisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9TQ1JPTExJTkdfVEhSRUFEKQogI2lmIFVTRShOSUNP
U0lBKQogI2RlZmluZSBFTkFCTEVfU0NST0xMSU5HX1RIUkVBRCAxCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5oCmluZGV4IDE5ZDVlYjg0ODBhNmJjMWJkZTUx
MzhiN2Q5NTNjOTY4ODgwOTIyZTcuLjE2NGQ3MDA3MmQ1NmQ2YmY3MmI1ZmY0MDgwZTNmODM5Yzkz
NzMwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQ
SU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5o
CkBAIC04NCw2ICs4NCw3IEBAIGVudW0gewogdHlwZWRlZiB1aW50MzJfdCBJT0hJREV2ZW50VHlw
ZTsKIAogdHlwZWRlZiB1aW50MzJfdCBJT0hJREV2ZW50RmllbGQ7Cit0eXBlZGVmIHVpbnQ2NF90
IElPSElERXZlbnRTZW5kZXJJRDsKIAogI2lmZGVmIF9fTFA2NF9fCiB0eXBlZGVmIGRvdWJsZSBJ
T0hJREZsb2F0OwpAQCAtOTksNiArMTAwLDcgQEAgc3RhdGljIGNvbnN0IElPSElERXZlbnRGaWVs
ZCBrSU9ISURFdmVudEZpZWxkU2Nyb2xsWSA9IChrSU9ISURFdmVudEZpZWxkU2Nyb2xsQmEKIAog
dWludDY0X3QgSU9ISURFdmVudEdldFRpbWVTdGFtcChJT0hJREV2ZW50UmVmKTsKIElPSElERmxv
YXQgSU9ISURFdmVudEdldEZsb2F0VmFsdWUoSU9ISURFdmVudFJlZiwgSU9ISURFdmVudEZpZWxk
KTsKK0lPSElERXZlbnRTZW5kZXJJRCBJT0hJREV2ZW50R2V0U2VuZGVySUQoSU9ISURFdmVudFJl
Zik7CiAKIFdURl9FWFRFUk5fQ19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCBk
NWU3YThjYzExZWY2MGU1YmM3YTBjYzc4NjI3OGI4ZWNiMzFmZGViLi40NGUwYTdhY2I3YjUzZDYw
YjQ3YWJjNDZmOWRlMWRjZDlkZGVmY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0xvZ2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xvZ2dpbmcuaApAQCAt
OTEsNiArOTEsNyBAQCBleHRlcm4gIkMiIHsKICAgICBNKFJlbW90ZUxheWVyVHJlZSkgXAogICAg
IE0oUmVzaXplKSBcCiAgICAgTShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSBcCisgICAgTShTY3Jv
bGxBbmltYXRpb25zKSBcCiAgICAgTShTY3JvbGxpbmcpIFwKICAgICBNKFNlbGVjdGlvbikgXAog
ICAgIE0oU2VydmljZVdvcmtlcikgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmMzdjNTViYmMyODRmMGRm
MDM2MWJmMTE3OWZhZTQwOGQ4MjZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHAKQEAgLTAsMCArMSwxOTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQWNj
ZWxlcmF0aW9uQ3VydmUuaCIKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVS
KQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6U2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmUoZmxvYXQgZ2FpbkxpbmVhciwgZmxvYXQgZ2FpblBhcmFib2xpYywgZmxvYXQg
Z2FpbkN1YmljLCBmbG9hdCBnYWluUXVhcnRpYywgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyLCBm
bG9hdCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCBmbG9hdCByZXNvbHV0aW9uKQorICAgIDog
bV9nYWluTGluZWFyKGdhaW5MaW5lYXIpCisgICAgLCBtX2dhaW5QYXJhYm9saWMoZ2FpblBhcmFi
b2xpYykKKyAgICAsIG1fZ2FpbkN1YmljKGdhaW5DdWJpYykKKyAgICAsIG1fZ2FpblF1YXJ0aWMo
Z2FpblF1YXJ0aWMpCisgICAgLCBtX3RhbmdlbnRTcGVlZExpbmVhcih0YW5nZW50U3BlZWRMaW5l
YXIpCisgICAgLCBtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QodGFuZ2VudFNwZWVkUGFyYWJv
bGljUm9vdCkKKyAgICAsIG1fcmVzb2x1dGlvbihyZXNvbHV0aW9uKQoreworfQorCitTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xh
dGUoY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIGZyb20sIGNvbnN0IFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlJiB0bywgZmxvYXQgYW1vdW50KQoreworICAgIGF1dG8gaW50ZXJw
b2xhdGUgPSBbJl0gKGZsb2F0IGEsIGZsb2F0IGIpIC0+IGZsb2F0IHsKKyAgICAgICAgcmV0dXJu
IGEgKyBhbW91bnQgKiAoYiAtIGEpOworICAgIH07CisKKyAgICBhdXRvIGdhaW5MaW5lYXIgPSBp
bnRlcnBvbGF0ZShmcm9tLm1fZ2FpbkxpbmVhciwgdG8ubV9nYWluTGluZWFyKTsKKyAgICBhdXRv
IGdhaW5QYXJhYm9saWMgPSBpbnRlcnBvbGF0ZShmcm9tLm1fZ2FpblBhcmFib2xpYywgdG8ubV9n
YWluUGFyYWJvbGljKTsKKyAgICBhdXRvIGdhaW5DdWJpYyA9IGludGVycG9sYXRlKGZyb20ubV9n
YWluQ3ViaWMsIHRvLm1fZ2FpbkN1YmljKTsKKyAgICBhdXRvIGdhaW5RdWFydGljID0gaW50ZXJw
b2xhdGUoZnJvbS5tX2dhaW5RdWFydGljLCB0by5tX2dhaW5RdWFydGljKTsKKworICAgIGF1dG8g
dGFuZ2VudFNwZWVkTGluZWFyID0gaW50ZXJwb2xhdGUoZnJvbS5tX3RhbmdlbnRTcGVlZExpbmVh
ciwgdG8ubV90YW5nZW50U3BlZWRMaW5lYXIpOworICAgIGF1dG8gdGFuZ2VudFNwZWVkUGFyYWJv
bGljUm9vdCA9IGludGVycG9sYXRlKGZyb20ubV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCB0
by5tX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpOworCisgICAgcmV0dXJuIHsgZ2FpbkxpbmVh
ciwgZ2FpblBhcmFib2xpYywgZ2FpbkN1YmljLCBnYWluUXVhcnRpYywgdGFuZ2VudFNwZWVkTGlu
ZWFyLCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCBmcm9tLm1fcmVzb2x1dGlvbiB9OworfQor
Cit2b2lkIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpjb21wdXRlSW50ZXJtZWRpYXRlVmFs
dWVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2hhc0NvbXB1dGVkSW50ZXJtZWRpYXRlVmFsdWVz
KQorICAgICAgICByZXR1cm47CisgICAgbV9oYXNDb21wdXRlZEludGVybWVkaWF0ZVZhbHVlcyA9
IHRydWU7CisKKyAgICBmbG9hdCB0YW5nZW50SW5pdGlhbFk7CisgICAgbV90YW5nZW50U3RhcnRY
ID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworICAgIG1fZmFsbG9mZlN0YXJ0
WCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKKworICAgIGF1dG8gcXVhcnRp
Y1Nsb3BlID0gWyZdKGZsb2F0IHgpIHsKKyAgICAgICAgcmV0dXJuICg0ICogc3RkOjpwb3coeCwg
MykgKiBzdGQ6OnBvdyhtX2dhaW5RdWFydGljLCA0KSkgKyAoMyAqIHN0ZDo6cG93KHgsIDIpICog
c3RkOjpwb3cobV9nYWluQ3ViaWMsIDMpKSArICgyICogeCAqIHN0ZDo6cG93KG1fZ2FpblBhcmFi
b2xpYywgMikpICsgbV9nYWluTGluZWFyOworICAgIH07CisKKyAgICBpZiAobV90YW5nZW50U3Bl
ZWRMaW5lYXIpIHsKKyAgICAgICAgdGFuZ2VudEluaXRpYWxZID0gZXZhbHVhdGVRdWFydGljKG1f
dGFuZ2VudFNwZWVkTGluZWFyKTsKKyAgICAgICAgbV90YW5nZW50U2xvcGUgPSBxdWFydGljU2xv
cGUobV90YW5nZW50U3BlZWRMaW5lYXIpOworICAgICAgICBtX3RhbmdlbnRJbnRlcmNlcHQgPSB0
YW5nZW50SW5pdGlhbFkgLSBtX3RhbmdlbnRTbG9wZSAqIG1fdGFuZ2VudFNwZWVkTGluZWFyOwor
ICAgICAgICBtX3RhbmdlbnRTdGFydFggPSBtX3RhbmdlbnRTcGVlZExpbmVhcjsKKworICAgICAg
ICBpZiAobV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290KSB7CisgICAgICAgICAgICBmbG9hdCB5
MSA9IG1fdGFuZ2VudFNsb3BlICogbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290ICsgbV90YW5n
ZW50SW50ZXJjZXB0OworICAgICAgICAgICAgbV9mYWxsb2ZmU2xvcGUgPSAyICogeTEgKiBtX3Rh
bmdlbnRTbG9wZTsKKyAgICAgICAgICAgIG1fZmFsbG9mZkludGVyY2VwdCA9IHN0ZDo6cG93KHkx
LCAyKSAtIG1fZmFsbG9mZlNsb3BlICogbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290OworICAg
ICAgICAgICAgbV9mYWxsb2ZmU3RhcnRYID0gbV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290Owor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpIHsK
KyAgICAgICAgdGFuZ2VudEluaXRpYWxZID0gZXZhbHVhdGVRdWFydGljKG1fdGFuZ2VudFNwZWVk
UGFyYWJvbGljUm9vdCk7CisgICAgICAgIG1fZmFsbG9mZlNsb3BlID0gcXVhcnRpY1Nsb3BlKG1f
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCk7CisgICAgICAgIG1fZmFsbG9mZkludGVyY2VwdCA9
IHN0ZDo6cG93KHRhbmdlbnRJbml0aWFsWSwgMikgLSBtX2ZhbGxvZmZTbG9wZSAqICBtX3Rhbmdl
bnRTcGVlZFBhcmFib2xpY1Jvb3Q7CisgICAgICAgIG1fdGFuZ2VudFN0YXJ0WCA9IG1fdGFuZ2Vu
dFNwZWVkUGFyYWJvbGljUm9vdDsKKyAgICB9Cit9CisKK2Zsb2F0IFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlOjpldmFsdWF0ZVF1YXJ0aWMoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gc3RkOjpw
b3cobV9nYWluUXVhcnRpYyAqIHgsIDQpICsgc3RkOjpwb3cobV9nYWluQ3ViaWMgKiB4LCAzKSAr
IHN0ZDo6cG93KG1fZ2FpblBhcmFib2xpYyAqIHgsIDIpICsgbV9nYWluTGluZWFyICogeDsKK30K
KworZmxvYXQgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmFjY2VsZXJhdGlvbkZhY3Rvcihm
bG9hdCB2YWx1ZSkKK3sKKyAgICBjb25zdGV4cHIgZmxvYXQgZnJhbWVSYXRlID0gNjcuZjsgLy8g
V2h5IGlzIHRoaXMgNjcgYW5kIG5vdCA2MD8KKyAgICBjb25zdGV4cHIgZmxvYXQgY3Vyc29yU2Nh
bGUgPSA5Ni5mIC8gZnJhbWVSYXRlOworCisgICAgY29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lm
TmVlZGVkKCk7CisKKyAgICBmbG9hdCBtdWx0aXBsaWVyOworICAgIGZsb2F0IGRldmljZVNjYWxl
ID0gbV9yZXNvbHV0aW9uIC8gZnJhbWVSYXRlOworICAgIHZhbHVlIC89IGRldmljZVNjYWxlOwor
CisgICAgaWYgKHZhbHVlIDw9IG1fdGFuZ2VudFN0YXJ0WCkKKyAgICAgICAgbXVsdGlwbGllciA9
IGV2YWx1YXRlUXVhcnRpYyh2YWx1ZSk7CisgICAgZWxzZSBpZiAodmFsdWUgPD0gbV9mYWxsb2Zm
U3RhcnRYICYmIG1fdGFuZ2VudFN0YXJ0WCA9PSBtX3RhbmdlbnRTcGVlZExpbmVhcikKKyAgICAg
ICAgbXVsdGlwbGllciA9IG1fdGFuZ2VudFNsb3BlICogdmFsdWUgKyBtX3RhbmdlbnRJbnRlcmNl
cHQ7CisgICAgZWxzZQorICAgICAgICBtdWx0aXBsaWVyID0gc3RkOjpzcXJ0KG1fZmFsbG9mZlNs
b3BlICogdmFsdWUgKyBtX2ZhbGxvZmZJbnRlcmNlcHQpOworCisgICAgcmV0dXJuIG11bHRpcGxp
ZXIgKiBjdXJzb3JTY2FsZTsKK30KKwordm9pZCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1f
Z2FpbkxpbmVhcjsKKyAgICBlbmNvZGVyIDw8IG1fZ2FpblBhcmFib2xpYzsKKyAgICBlbmNvZGVy
IDw8IG1fZ2FpbkN1YmljOworICAgIGVuY29kZXIgPDwgbV9nYWluUXVhcnRpYzsKKworICAgIGVu
Y29kZXIgPDwgbV90YW5nZW50U3BlZWRMaW5lYXI7CisgICAgZW5jb2RlciA8PCBtX3RhbmdlbnRT
cGVlZFBhcmFib2xpY1Jvb3Q7CisKKyAgICBlbmNvZGVyIDw8IG1fcmVzb2x1dGlvbjsKK30KKwor
c3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gU2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmU6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgZmxvYXQg
Z2FpbkxpbmVhcjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdhaW5MaW5lYXIpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGZsb2F0IGdhaW5QYXJhYm9saWM7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShnYWluUGFyYWJvbGljKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBmbG9hdCBnYWluQ3ViaWM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShnYWlu
Q3ViaWMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGZsb2F0IGdhaW5RdWFy
dGljOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZ2FpblF1YXJ0aWMpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodGFuZ2VudFNwZWVkTGluZWFyKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBmbG9hdCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290OworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBmbG9hdCByZXNvbHV0aW9uOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICByZXR1cm4geyB7IGdhaW5MaW5lYXIsIGdhaW5QYXJhYm9saWMsIGdhaW5DdWJpYywgZ2Fp
blF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwgdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwg
cmVzb2x1dGlvbiB9IH07Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlJiBjdXJ2ZSkKK3sKKyAgICBUZXh0
U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKworICAgIHRzIDw8ICJTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZSI7CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImdhaW5MaW5lYXIiLCBjdXJ2
ZS5tX2dhaW5MaW5lYXIpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZ2FpblBhcmFib2xpYyIsIGN1
cnZlLm1fZ2FpblBhcmFib2xpYyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJnYWluQ3ViaWMiLCBj
dXJ2ZS5tX2dhaW5DdWJpYyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJnYWluUXVhcnRpYyIsIGN1
cnZlLm1fZ2FpblF1YXJ0aWMpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidGFuZ2VudFNwZWVkTGlu
ZWFyIiwgY3VydmUubV90YW5nZW50U3BlZWRMaW5lYXIpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCIsIGN1cnZlLm1fdGFuZ2VudFNwZWVkUGFyYWJvbGlj
Um9vdCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXNvbHV0aW9uIiwgY3VydmUubV9yZXNvbHV0
aW9uKTsKKworICAgIHJldHVybiB0czsKK30KKworI2lmICFQTEFURk9STShNQUMpCisKK3N0ZDo6
b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IFNjcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JikK
K3sKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjAwZTBjNjFkYmU2NDliODMxZjQ2MzhlNWJjNTU0ZDZlY2NmYTVhZjgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorCisjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIElQQyB7CitjbGFzcyBEZWNvZGVyOworY2xhc3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIE5hdGl2ZVdlYldoZWVsRXZlbnQ7CisKK2NsYXNzIFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZShmbG9hdCBnYWluTGluZWFyLCBmbG9hdCBnYWluUGFyYWJvbGljLCBmbG9hdCBnYWluQ3Vi
aWMsIGZsb2F0IGdhaW5RdWFydGljLCBmbG9hdCB0YW5nZW50U3BlZWRMaW5lYXIsIGZsb2F0IHRh
bmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QsIGZsb2F0IHJlc29sdXRpb24pOworCisgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IGZyb21OYXRpdmVXaGVl
bEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKKworICAgIHN0YXRpYyBTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZSBpbnRlcnBvbGF0ZShjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZSYgZnJvbSwgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIHRvLCBmbG9h
dCBhbW91bnQpOworCisgICAgZmxvYXQgYWNjZWxlcmF0aW9uRmFjdG9yKGZsb2F0KTsKKworICAg
IHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ2FpbkxpbmVhciA9PSBvdGhlci5t
X2dhaW5MaW5lYXIKKyAgICAgICAgICAgICYmIG1fZ2FpblBhcmFib2xpYyA9PSBvdGhlci5tX2dh
aW5QYXJhYm9saWMKKyAgICAgICAgICAgICYmIG1fZ2FpbkN1YmljID09IG90aGVyLm1fZ2FpbkN1
YmljCisgICAgICAgICAgICAmJiBtX2dhaW5RdWFydGljID09IG90aGVyLm1fZ2FpblF1YXJ0aWMK
KyAgICAgICAgICAgICYmIG1fdGFuZ2VudFNwZWVkTGluZWFyID09IG90aGVyLm1fdGFuZ2VudFNw
ZWVkTGluZWFyCisgICAgICAgICAgICAmJiBtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QgPT0g
b3RoZXIubV90YW5nZW50U3BlZWRQYXJhYm9saWNSb290CisgICAgICAgICAgICAmJiBtX3Jlc29s
dXRpb24gPT0gb3RoZXIubV9yZXNvbHV0aW9uOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZSYpOworCisgICAgdm9pZCBjb21wdXRlSW50ZXJtZWRpYXRlVmFsdWVzSWZOZWVkZWQoKTsK
KworICAgIGZsb2F0IGV2YWx1YXRlUXVhcnRpYyhmbG9hdCk7CisKKyAgICAvLyBJbnB1dCBwYXJh
bWV0ZXJzLgorICAgIGZsb2F0IG1fZ2FpbkxpbmVhciB7IDAgfTsKKyAgICBmbG9hdCBtX2dhaW5Q
YXJhYm9saWMgeyAwIH07CisgICAgZmxvYXQgbV9nYWluQ3ViaWMgeyAwIH07CisgICAgZmxvYXQg
bV9nYWluUXVhcnRpYyB7IDAgfTsKKyAgICBmbG9hdCBtX3RhbmdlbnRTcGVlZExpbmVhciB7IDAg
fTsKKyAgICBmbG9hdCBtX3RhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QgeyAwIH07CisgICAgZmxv
YXQgbV9yZXNvbHV0aW9uIHsgMCB9OworCisgICAgLy8gQ29tcHV0ZWQgaW50ZXJtZWRpYXRlIHZh
bHVlcy4KKyAgICBib29sIG1faGFzQ29tcHV0ZWRJbnRlcm1lZGlhdGVWYWx1ZXMgeyBmYWxzZSB9
OworICAgIGZsb2F0IG1fdGFuZ2VudFN0YXJ0WCB7IDAgfTsKKyAgICBmbG9hdCBtX3RhbmdlbnRT
bG9wZSB7IDAgfTsKKyAgICBmbG9hdCBtX3RhbmdlbnRJbnRlcmNlcHQgeyAwIH07CisgICAgZmxv
YXQgbV9mYWxsb2ZmU3RhcnRYIHsgMCB9OworICAgIGZsb2F0IG1fZmFsbG9mZlNsb3BlIHsgMCB9
OworICAgIGZsb2F0IG1fZmFsbG9mZkludGVyY2VwdCB7IDAgfTsKK307CisKK1RleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZl
Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1PTUVOVFVN
X0VWRU5UX0RJU1BBVENIRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmIxMjUzY2Iw
MmMyODkyMTM2ZWQ2MTUyYmI0NGJhMDMxOTEzNmY2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbQpAQCAt
MCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaCIKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVO
VF9ESVNQQVRDSEVSKSAmJiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2Nv
Y29hL0lPS2l0U1BJLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgZmxvYXQgZnJv
bUZpeGVkUG9pbnQoZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlIC8gNjU1MzYuMGY7
Cit9CisKK3N0YXRpYyBmbG9hdCByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihOU0RpY3Rpb25hcnkg
KnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKyAgICByZXR1cm4gZnJvbUZpeGVkUG9p
bnQoW1twYXJhbWV0ZXJzIG9iamVjdEZvcktleTpAKGtleSldIGZsb2F0VmFsdWVdKTsKK30KKwor
c3RhdGljIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIGZyb21JT0hJREN1cnZlKE5TRGljdGlv
bmFyeSAqcGFyYW1ldGVycywgZmxvYXQgcmVzb2x1dGlvbikKK3sKKyAgICBhdXRvIGdhaW5MaW5l
YXIgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxHYWluTGlu
ZWFyS2V5KTsKKyAgICBhdXRvIGdhaW5QYXJhYm9saWMgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRl
cihwYXJhbWV0ZXJzLCBrSElEQWNjZWxHYWluUGFyYWJvbGljS2V5KTsKKyAgICBhdXRvIGdhaW5D
dWJpYyA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBhcmFtZXRlcnMsIGtISURBY2NlbEdhaW5D
dWJpY0tleSk7CisgICAgYXV0byBnYWluUXVhcnRpYyA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVy
KHBhcmFtZXRlcnMsIGtISURBY2NlbEdhaW5RdWFydGljS2V5KTsKKworICAgIGF1dG8gdGFuZ2Vu
dFNwZWVkTGluZWFyID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVycywga0hJREFj
Y2VsVGFuZ2VudFNwZWVkTGluZWFyS2V5KTsKKyAgICBhdXRvIHRhbmdlbnRTcGVlZFBhcmFib2xp
Y1Jvb3QgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxUYW5n
ZW50U3BlZWRQYXJhYm9saWNSb290S2V5KTsKKworICAgIHJldHVybiB7IGdhaW5MaW5lYXIsIGdh
aW5QYXJhYm9saWMsIGdhaW5DdWJpYywgZ2FpblF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwg
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwgcmVzb2x1dGlvbiB9OworfQorCitzdGF0aWMgU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2NlbGVyYXRp
b24oTlNBcnJheSAqaW9ISURDdXJ2ZXMsIGZsb2F0IGRlc2lyZWRBY2NlbGVyYXRpb24sIGZsb2F0
IHJlc29sdXRpb24pCit7CisgICAgX19ibG9jayBzaXplX3QgY3VycmVudEluZGV4ID0gMDsKKyAg
ICBfX2Jsb2NrIFZlY3RvcjxzdGQ6OnBhaXI8ZmxvYXQsIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlPj4gY3VydmVzOworCisgICAgW2lvSElEQ3VydmVzIGVudW1lcmF0ZU9iamVjdHNVc2luZ0Js
b2NrOl4oTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJzLCBOU1VJbnRlZ2VyIGksIEJPT0wgKikgewor
ICAgICAgICBhdXRvIGN1cnZlQWNjZWxlcmF0aW9uID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIo
cGFyYW1ldGVycywga0hJREFjY2VsSW5kZXhLZXkpOworICAgICAgICBhdXRvIGN1cnZlID0gZnJv
bUlPSElEQ3VydmUocGFyYW1ldGVycywgcmVzb2x1dGlvbik7CisKKyAgICAgICAgaWYgKGRlc2ly
ZWRBY2NlbGVyYXRpb24gPiBjdXJ2ZUFjY2VsZXJhdGlvbikKKyAgICAgICAgICAgIGN1cnJlbnRJ
bmRleCA9IGk7CisKKyAgICAgICAgY3VydmVzLmFwcGVuZCh7IGN1cnZlQWNjZWxlcmF0aW9uLCBj
dXJ2ZSB9KTsKKyAgICB9XTsKKworICAgIC8vIEludGVycG9sYXRpb24gaWYgZGVzaXJlZEFjY2Vs
ZXJhdGlvbiBpcyBpbiBiZXR3ZWVuIHR3byBjdXJ2ZXMuCisgICAgaWYgKGN1cnZlc1tjdXJyZW50
SW5kZXhdLmZpcnN0IDwgZGVzaXJlZEFjY2VsZXJhdGlvbiAmJiAoY3VycmVudEluZGV4ICsgMSkg
PCBjdXJ2ZXMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGxvd0N1cnZlID0gY3VydmVz
W2N1cnJlbnRJbmRleF07CisgICAgICAgIGNvbnN0IGF1dG8mIGhpZ2hDdXJ2ZSA9IGN1cnZlc1tj
dXJyZW50SW5kZXggKyAxXTsKKyAgICAgICAgZmxvYXQgcmF0aW8gPSAoZGVzaXJlZEFjY2VsZXJh
dGlvbiAtIGxvd0N1cnZlLmZpcnN0KSAvIChoaWdoQ3VydmUuZmlyc3QgLSBsb3dDdXJ2ZS5maXJz
dCk7CisgICAgICAgIHJldHVybiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xh
dGUobG93Q3VydmUuc2Vjb25kLCBoaWdoQ3VydmUuc2Vjb25kLCByYXRpbyk7CisgICAgfQorCisg
ICAgcmV0dXJuIGN1cnZlc1tjdXJyZW50SW5kZXhdLnNlY29uZDsKK30KKworc3RkOjpvcHRpb25h
bDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6
OmZyb21OYXRpdmVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmIG5hdGl2ZVdl
YldoZWVsRXZlbnQpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxJT0hJ
REV2ZW50U3lzdGVtQ2xpZW50UmVmPj4gY2xpZW50OworICAgIGlmICghY2xpZW50LmdldCgpKQor
ICAgICAgICBjbGllbnQuZ2V0KCkgPSBhZG9wdENGKElPSElERXZlbnRTeXN0ZW1DbGllbnRDcmVh
dGVXaXRoVHlwZShuaWwsIGtJT0hJREV2ZW50U3lzdGVtQ2xpZW50VHlwZVBhc3NpdmUsIG5pbCkp
OworCisgICAgTlNFdmVudCAqZXZlbnQgPSBuYXRpdmVXZWJXaGVlbEV2ZW50Lm5hdGl2ZUV2ZW50
KCk7CisgICAgYXV0byBoaWRFdmVudCA9IGFkb3B0Q0YoQ0dFdmVudENvcHlJT0hJREV2ZW50KGV2
ZW50LkNHRXZlbnQpKTsKKyAgICBpZiAoIWhpZEV2ZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9H
KFNjcm9sbEFuaW1hdGlvbnMsICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2
ZVdoZWVsRXZlbnQgZGlkIG5vdCBmaW5kIEhJRCBldmVudCIpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gc2VuZGVySUQgPSBJT0hJREV2ZW50R2V0U2Vu
ZGVySUQoaGlkRXZlbnQuZ2V0KCkpOworICAgIFJldGFpblB0cjxJT0hJRFNlcnZpY2VDbGllbnRS
ZWY+IGlvSElEU2VydmljZSA9IGFkb3B0Q0YoSU9ISURFdmVudFN5c3RlbUNsaWVudENvcHlTZXJ2
aWNlRm9yUmVnaXN0cnlJRChjbGllbnQuZ2V0KCkuZ2V0KCksIHNlbmRlcklEKSk7CisgICAgaWYg
KCFpb0hJRFNlcnZpY2UpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywg
IlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudCBkaWQgbm90
IGZpbmQgbWF0Y2hpbmcgSElEIHNlcnZpY2UiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBhdXRvIGN1cnZlcyA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENG
QXJyYXlSZWY+KElPSElEU2VydmljZUNsaWVudENvcHlQcm9wZXJ0eShpb0hJRFNlcnZpY2UuZ2V0
KCksIENGU1RSKGtISURTY3JvbGxBY2NlbFBhcmFtZXRyaWNDdXJ2ZXNLZXkpKSkpOworICAgIGlm
ICghY3VydmVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZlbnQgZmFpbGVkIHRvIGxv
b2sgdXAgY3VydmVzIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFRoZXJlIGlzIHNvbWUgYWRkaXRpb25hbCBmYWxsYmFjayB0byBpbXBsZW1l
bnQgaGVyZSwgdGhvdWdoIHRoaXMgc2VlbXMgdXN1YWxseSBzdWZmaWNpZW50LgorICAgIGF1dG8g
c2Nyb2xsQWNjZWxlcmF0aW9uVHlwZSA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPihJT0hJRFNlcnZpY2VDbGllbnRDb3B5UHJvcGVydHkoaW9ISURTZXJ2aWNlLmdldCgpLCBD
RlNUUigiSElEU2Nyb2xsQWNjZWxlcmF0aW9uVHlwZSIpKSkpOworICAgIGlmICghc2Nyb2xsQWNj
ZWxlcmF0aW9uVHlwZSkgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAi
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50IGZhaWxlZCB0
byBsb29rIHVwIGFjY2VsZXJhdGlvbiB0eXBlIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgYXV0byBzY3JvbGxBY2NlbGVyYXRpb24gPSBhZG9wdENGKGR5bmFt
aWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oSU9ISURTZXJ2aWNlQ2xpZW50Q29weVByb3BlcnR5KGlv
SElEU2VydmljZS5nZXQoKSwgc2Nyb2xsQWNjZWxlcmF0aW9uVHlwZS5nZXQoKSkpKTsKKyAgICBp
ZiAoIXNjcm9sbEFjY2VsZXJhdGlvbikgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmlt
YXRpb25zLCAiU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50
IGZhaWxlZCB0byBsb29rIHVwIGFjY2VsZXJhdGlvbiB2YWx1ZSIpOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gcmVzb2x1dGlvbiA9IGFkb3B0Q0YoZHlu
YW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihJT0hJRFNlcnZpY2VDbGllbnRDb3B5UHJvcGVydHko
aW9ISURTZXJ2aWNlLmdldCgpLCBDRlNUUihrSU9ISURTY3JvbGxSZXNvbHV0aW9uS2V5KSkpKTsK
KyAgICBpZiAoIXJlc29sdXRpb24pIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0
aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudCBm
YWlsZWQgdG8gbG9vayB1cCByZXNvbHV0aW9uIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgcmV0dXJuIGZyb21JT0hJREN1cnZlQXJyYXlXaXRoQWNjZWxlcmF0
aW9uKChOU0FycmF5ICopY3VydmVzLmdldCgpLCBmcm9tRml4ZWRQb2ludChbKE5TTnVtYmVyICop
c2Nyb2xsQWNjZWxlcmF0aW9uLmdldCgpIGZsb2F0VmFsdWVdKSwgZnJvbUZpeGVkUG9pbnQoWyhO
U051bWJlciAqKXJlc29sdXRpb24uZ2V0KCkgZmxvYXRWYWx1ZV0pKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hF
UikgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggYjEzOGZkZDA1NzA1OGM4NTJkMTAy
YmYyMmQ4YTA1MzA0ZWM1YWYwYi4uYjhkMWNiOWM3ZjJhMzE4MjQyZDRhNzlmY2NhYzdiODQ2MWFj
YjBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yMjQsNiArMjI0LDcgQEAgU2hhcmVkL1BsYXRmb3JtUG9w
dXBNZW51RGF0YS5jcHAKIFNoYXJlZC9QcmludEluZm8uY3BwCiBTaGFyZWQvUlRDTmV0d29yay5j
cHAKIFNoYXJlZC9SVENQYWNrZXRPcHRpb25zLmNwcAorU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlLmNwcAogU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3Bw
CiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5v
LXVuaWZ5CkBAIC04MTIsNiArODEzLDcgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5n
QVBJLmNwcAorV2ViUHJvY2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcAog
V2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zv
cndhcmRMaXN0UHJveHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYTNlN2JiNjY0NzE5
MzAyMzBmZTIzZjBhNjgxYzNlN2EyMzI2ODM1My4uYzhiZTU1ODY5Mjc2ZTUwNjIwYmQzMzVjMDBl
NjY2ZGYyYzQ1NGE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMjIwLDYgKzIyMCw3IEBA
IFNoYXJlZC9tYWMvTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbQogU2hhcmVkL21hYy9PYmpDT2Jq
ZWN0R3JhcGgubW0KIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tCiBTaGFyZWQvbWFjL1By
aW50SW5mb01hYy5tbQorU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5t
bQogU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwCiBTaGFyZWQvbWFjL1NlY0l0ZW1S
ZXNwb25zZURhdGEuY3BwCiBTaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggODBmZDJhYjlmYzhmNjIzYTUzMzhjMDYw
YjZhNjhmYmVmMjk5ZDlhMy4uZjMxY2E0N2ZlYWE3NmEwM2U3ZWEwMTQzM2Q0M2I5ZTA2ZDQwNDU5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yODk0LDYg
KzI4OTQsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0
aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBjbG9zZU92ZXJsYXllZFZpZXdzKCk7CiAK
KyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBoYXZlIHRvIGxvb2sgdGhpcyB1cCByZXBlYXRlZGx5LCBidXQgaXQgY2FuIGFs
c28gY2hhbmdlIG9jY2FzaW9uYWxseS4KKyAgICBpZiAoZXZlbnQubW9tZW50dW1QaGFzZSgpID09
IFdlYldoZWVsRXZlbnQ6OlBoYXNlQmVnYW4gJiYgcHJlZmVyZW5jZXMoKS5tb21lbnR1bVNjcm9s
bGluZ0FuaW1hdG9yRW5hYmxlZCgpKQorICAgICAgICBtX3Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlID0gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50KGV2
ZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKHdoZWVsRXZlbnRDb2FsZXNjZXIoKS5zaG91bGREaXNw
YXRjaEV2ZW50KGV2ZW50KSkgewogICAgICAgICBhdXRvIGV2ZW50ID0gd2hlZWxFdmVudENvYWxl
c2NlcigpLm5leHRFdmVudFRvRGlzcGF0Y2goKTsKICAgICAgICAgc2VuZFdoZWVsRXZlbnQoKmV2
ZW50KTsKQEAgLTI5NDEsNiArMjk0NywxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZFdoZWVs
RXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgICAgIHJ1YmJlckJhbmRhYmxl
RWRnZXMuc2V0TGVmdCghbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCkpOwogICAgICAgICBy
dWJiZXJCYW5kYWJsZUVkZ2VzLnNldFJpZ2h0KCFtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0
ZW0oKSk7CiAgICAgfQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisg
ICAgaWYgKGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZUJlZ2Fu
ICYmIG1fc2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgIT0gbV9sYXN0U2VudFNjcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkV2
ZW50RGlzcGF0Y2hlcjo6U2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUobV93ZWJQYWdlSUQs
ICptX3Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKSwgMCwgeyB9LCBUaHJlYWQ6OlFPUzo6VXNl
ckludGVyYWN0aXZlKTsKKyAgICAgICAgbV9sYXN0U2VudFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlID0gbV9zY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKKyAgICB9CisjZW5kaWYKKwogICAg
IGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudCht
X3dlYlBhZ2VJRCwgZXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMpLCAwLCB7IH0sIFRocmVhZDo6
UU9TOjpVc2VySW50ZXJhY3RpdmUpOwogCiAgICAgLy8gTWFudWFsbHkgcGluZyB0aGUgd2ViIHBy
b2Nlc3MgdG8gY2hlY2sgZm9yIHJlc3BvbnNpdmVuZXNzIHNpbmNlIG91ciB3aGVlbApAQCAtMzk0
MSw2ICszOTU1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIHN0ZDo6b3B0aW8KICAgICBpZiAoIWhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIHNlbmQoTWVzc2FnZXM6OkV2ZW50
RGlzcGF0Y2hlcjo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKG1fd2ViUGFnZUlELCBkaXNwbGF5SUQp
KTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dTY3JlZW5EaWRDaGFuZ2UoZGlz
cGxheUlELCBub21pbmFsRnJhbWVzUGVyU2Vjb25kKSk7CiB9CiAKQEAgLTc4OTksNiArNzkxNCwx
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZShSZXNldFN0YXRlUmVhc29uIHJlc2V0
U3RhdGVSZWFzb24pCiAgICAgICAgIG1feHJTeXN0ZW0gPSBudWxscHRyOwogICAgIH0KICNlbmRp
ZgorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgbV9sYXN0U2Vu
dFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlID0gc3RkOjpudWxsb3B0OworI2VuZGlmCiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKFByb2Nlc3NU
ZXJtaW5hdGlvblJlYXNvbiB0ZXJtaW5hdGlvblJlYXNvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKaW5kZXggZDVmYmU4Y2M4ZTZhNTBlODg3NzZkYmI5OTU2NzI4MTVjMTFh
N2UyMi4uOGQwNzZjMjE1MjliMDExYWM0ZjgwMjdmYzEyZjM1MTk5MjRlMjRjMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRl
ICJQcm9jZXNzVGVybWluYXRpb25SZWFzb24uaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVy
LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVk
ZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmgiCkBAIC0zMTU5LDYgKzMxNjAsMTEgQEAgcHJpdmF0ZToKICAgICBXaW5k
b3dLaW5kIG1fd2luZG93S2luZCB7IFdpbmRvd0tpbmQ6OlVucGFyZW50ZWQgfTsKIAogICAgIFdl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdlSGFuZGxlciBtX25vdGlmaWNhdGlvbk1hbmFnZXJN
ZXNzYWdlSGFuZGxlcjsKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQor
ICAgIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IG1fc2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmU7CisgICAgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZT4gbV9sYXN0U2VudFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOworI2VuZGlmCiB9
OwogCiAjaWZkZWYgX19PQkpDX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGNjMGUzODg2MGZjMzliMjYwOTRkZGZjYTZkN2NkN2JiNmYx
MTVkMDYuLjgxMDk2NzU2NDUzMzFmZGJmYmE3MmRmMWU3MTI0MzY0NjE0YTJiYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQ5Niw2
ICszNDk2LDkgQEAKIAkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VPdmVybGF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENjQ4MjQ5MjY0NEIxQUIwMDAzMDMzNSAvKiBS
ZW1vdGVMYXllclRyZWVMYXllcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJE
NjQ4MjRBMjY0NEIxQUIwMDAzMDMzNSAvKiBSZW1vdGVMYXllclRyZWVMYXllcnMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXllclRyZWVMYXllcnMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENjVEMTk0Mjc0QjhFNzMwMDlDNDEw
MSAvKiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyRDY1RDE5NTI3NEI4RTg0MDA5QzQxMDEgLyogU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ2NUQxOTYyNzRCOEU4NDAwOUM0MTAxIC8q
IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9s
bGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkQ2QUI1M0YxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJlckluZGljYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3Iu
aDsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ2QUI1NDAxOTJCMUM0QTAwM0E5RkQxIC8qIFdLUERGUGFnZU51bWJl
ckluZGljYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdL
UERGUGFnZU51bWJlckluZGljYXRvci5tbTsgcGF0aCA9IGlvcy9XS1BERlBhZ2VOdW1iZXJJbmRp
Y2F0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkIzNzE5MThBOTY3QUQw
MDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IF9XS1RodW1ibmFpbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM3NzksNiArMzc4Miw4IEBACiAJCTJERTlCMTM4MjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0
SW5wdXRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRJ
bnB1dENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRFOUIxM0IyMjMx
Rjc3QzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHRJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRFQUM1Q0UxQUMzNjhCQjAwQTE5NUQ4IC8qIF9X
S0ZpbmRPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0ZpbmRP
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJERUU3MDlEMjc1NUE0Njgw
MEZCRjg2NCAvKiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb21l
bnR1bUV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREVF
NzA5RTI3NTVBNDY4MDBGQkY4NjQgLyogTW9tZW50dW1FdmVudERpc3BhdGNoZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyREY5NTkzNDE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVD
b250cm9sbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
Vmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tOyBwYXRoID0gaW9zL1ZpZXdHZXN0dXJlQ29udHJv
bGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRGOUVFRTMxQTc4MUZC
NDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBUElGcmFtZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyREY5RUVFNDFBNzgxRkI0MDBCNkNGQkUgLyogQVBJRnJhbWVJbmZvLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUZyYW1lSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzA4Myw2ICs3MDg4LDggQEAKIAkJCQlCQzJEMDIxNjEyQUM0MUNCMDBFNzMy
QTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCAqLywKIAkJCQkxQUFCNEE4QzEyOTZG
MEEyMDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbi5oICovLAogCQkJCUUxRTU1MkMzMTZBRTA2
NUUwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggKi8sCisJCQkJ
MkQ2NUQxOTYyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNw
cCAqLywKKwkJCQkyRDY1RDE5NTI3NEI4RTg0MDA5QzQxMDEgLyogU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmUuaCAqLywKIAkJCQk1QzgwQjNERDIzNjkwRjEwMDA4NkU2REUgLyogU2VydmljZVdv
cmtlckluaXRpYWxpemF0aW9uRGF0YS5jcHAgKi8sCiAJCQkJNUM4MEIzREIyMzY5MEQ4RDAwODZF
NkRFIC8qIFNlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuaCAqLywKIAkJCQkxQUZERTY1
NzE5NTRBNDJCMDBDNDhGRkEgLyogU2Vzc2lvblN0YXRlLmNwcCAqLywKQEAgLTk4NzMsOSArOTg4
MCw5IEBACiAJCTVDMTU3QTBBMjcxN0M5RjEwMEVENTI4MCAvKiB3ZWJwdXNoZCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNUNCQjZENEQyNzFGNjdDQzAw
RkQxQTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxpc3QgKi8sCiAJCQkJNTE2MEU5
NTQyNzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QuaCAqLywKIAkJCQk1MTYwRTk1
MzI3NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5tbSAqLywKKwkJCQk1Q0JCNkQ0
RDI3MUY2N0NDMDBGRDFBNUQgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wbGlzdCAqLywK
IAkJCQk1MUY3QkI3NTI3NDQ5OEJCMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3Rpbmcu
aCAqLywKIAkJCQk1MUY3QkI3NDI3NDQ5OEJBMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRl
c3RpbmcubW0gKi8sCiAJCQkJNTE2MEU5NUMyNzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5k
bGVSZWdpc3RyeS5oICovLApAQCAtMTA2MTIsNiArMTA2MTksOCBAQAogCQkJCTFBOTBDMUYyMTI2
NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovLAogCQkJCTlCMDMzRTcyMjUyNTgw
RjMwMDUwMTA3MSAvKiBJUENUZXN0aW5nQVBJLmNwcCAqLywKIAkJCQk5QjAzM0U3MTI1MjU4MEYz
MDA1MDEwNzEgLyogSVBDVGVzdGluZ0FQSS5oICovLAorCQkJCTJERUU3MDlFMjc1NUE0NjgwMEZC
Rjg2NCAvKiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJMkRFRTcwOUQyNzU1
QTQ2ODAwRkJGODY0IC8qIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmggKi8sCiAJCQkJN0MzODc0
MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwICovLAogCQkJCTdDRjQ3RkY5MTcy
NzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAw
MUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLApAQCAtMTExNzgs
NiArMTExODcsNyBAQAogCQkJCUM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJk
VHlwZXMubW0gKi8sCiAJCQkJQzFFMTIzQjkyMEExMTU3MjAwMjY0NkY0IC8qIFBERkNvbnRleHRN
ZW51LmggKi8sCiAJCQkJRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5t
bSAqLywKKwkJCQkyRDY1RDE5NDI3NEI4RTczMDA5QzQxMDEgLyogU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmVNYWMubW0gKi8sCiAJCQkJNTFEMTMwNEYxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0
ZW1SZXF1ZXN0RGF0YS5jcHAgKi8sCiAJCQkJNTFEMTMwNTAxMzgyRUFDMDAwMzUxRUREIC8qIFNl
Y0l0ZW1SZXF1ZXN0RGF0YS5oICovLAogCQkJCTUxRDEzMDUxMTM4MkVBQzAwMDM1MUVERCAvKiBT
ZWNJdGVtUmVzcG9uc2VEYXRhLmNwcCAqLywKQEAgLTEyNDIzLDEzICsxMjQzMywxMyBAQAogCQkJ
aXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1
bmRsZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDMTU3OUZDMjcxN0FGNTAwMEVENTI4
MCAvKiBEYWVtb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxRjdCQjc3Mjc0NDk4
QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTE2MEU5NUUyNzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE2MEU5NTkyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5k
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjdCQjdCMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNo
Q2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE2MEU5NUUyNzRDMkEwMzAw
NTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUMx
NTc5RkMyNzE3QUY1MDAwRUQ1MjgwIC8qIERhZW1vblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMkNENjlGMjcyMzM5M0EwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9u
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUY3QkI3NzI3NDQ5OEJCMDBDNDVBNzIgLyogTW9ja0Fw
cEJ1bmRsZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTQ5NjMsMTYgKzE0OTczLDE2
IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MTYwRTk1NTI3NEI4ODcyMDA1NjczODgg
LyogQXBwQnVuZGxlUmVxdWVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3QTAxMjcxN0I3
RkIwMEVENTI4MCAvKiBBcmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUY3
QkI3RDI3NDU2NDA0MDBDNDVBNzIgLyogQ29kZVNpZ25pbmcubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1QzE1NzlGRjI3MTdCNkQyMDBFRDUyODAgLyogRGFlbW9uRGVjb2Rlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk1QzE1NzlGRTI3MTdCNkMxMDBFRDUyODAgLyogRGFlbW9uRW5jb2Rlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1QzE1NzlGQjI3MTdBRjUwMDBFRDUyODAgLyogRGFlbW9uVXRp
bGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCNzYyNzQ0OThCQjAwQzQ1QTcyIC8q
IE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2MEU5NTUy
NzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gaW4gU291cmNlcyAqLywKLQkJ
CQk1MTYwRTk1QTI3NEMwRDg5MDA1NjczODggLyogUHVzaEFwcEJ1bmRsZS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNjBFOTYwMjc0QzJBNDAwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0
cnkubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTYwRTk1QTI3NEMwRDg5MDA1NjczODggLyogUHVz
aEFwcEJ1bmRsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjdCQjdDMjc0NEM1MDcwMEM0NUE3
MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJCTVDMTU3OUZF
MjcxN0I2QzEwMEVENTI4MCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTVDMTU3OUZCMjcxN0FGNTAwMEVENTI4MCAvKiBEYWVtb25VdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MTJDRDZBMDI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTVDMTU3QTBDMjcxN0NBMUQwMEVENTI4MCAvKiBXZWJQdXNoRGFl
bW9uTWFpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDJiOWRhNzA1NTAy
OTFlNTFlZDIzYmM0OWFkNzhmOTRhYWJkMDVmOTUuLjA1YTAzMmUwNzY4NzlhOThlYzYwYWJiYzI4
Yzk5MjVjZTZjYTljNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2
ZW50RGlzcGF0Y2hlci5oIgogCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIldlYkV2ZW50
Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgpAQCAtNjMsNiArNjQsOSBAQCBSZWY8RXZlbnREaXNwYXRjaGVyPiBFdmVu
dERpc3BhdGNoZXI6OmNyZWF0ZSgpCiBFdmVudERpc3BhdGNoZXI6OkV2ZW50RGlzcGF0Y2hlcigp
CiAgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkV2ZW50
RGlzcGF0Y2hlciIsIFdvcmtRdWV1ZTo6UU9TOjpVc2VySW50ZXJhY3RpdmUpKQogICAgICwgbV9y
ZWNlbnRXaGVlbEV2ZW50RGVsdGFGaWx0ZXIoV2hlZWxFdmVudERlbHRhRmlsdGVyOjpjcmVhdGUo
KSkKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICAsIG1fbW9tZW50
dW1FdmVudERpc3BhdGNoZXIoV1RGOjptYWtlVW5pcXVlPE1vbWVudHVtRXZlbnREaXNwYXRjaGVy
PigqdGhpcykpCisjZW5kaWYKIHsKIH0KIApAQCAtOTcsNyArMTAxLDcgQEAgdm9pZCBFdmVudERp
c3BhdGNoZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
bikKICAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OkV2ZW50RGlzcGF0Y2hlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgpLCB0
aGlzKTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQoUGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBSZWN0RWRnZXM8Ym9v
bD4gcnViYmVyQmFuZGFibGVFZGdlcykKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjppbnRlcm5hbFdo
ZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVl
bEV2ZW50LCBSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcywgV2hlZWxFdmVudE9y
aWdpbiB3aGVlbEV2ZW50T3JpZ2luKQogewogICAgIGF1dG8gcHJvY2Vzc2luZ1N0ZXBzID0gT3B0
aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHsgV2hlZWxFdmVudFBy
b2Nlc3NpbmdTdGVwczo6TWFpblRocmVhZEZvclNjcm9sbGluZywgV2hlZWxFdmVudFByb2Nlc3Np
bmdTdGVwczo6TWFpblRocmVhZEZvckJsb2NraW5nRE9NRXZlbnREaXNwYXRjaCB9OwogI2lmIEVO
QUJMRShTQ1JPTExJTkdfVEhSRUFEKQpAQCAtMTE0LDcgKzExOCw3IEBAIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjp3aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxF
dmVudCYgd2hlCiAgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3Njcm9sbGluZ1RyZWVzTG9jayB9
OwogICAgICAgICBhdXRvIHNjcm9sbGluZ1RyZWUgPSBtX3Njcm9sbGluZ1RyZWVzLmdldChwYWdl
SUQpOwogICAgICAgICBpZiAoIXNjcm9sbGluZ1RyZWUpIHsKLSAgICAgICAgICAgIGRpc3BhdGNo
V2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3Rl
cHMpOworICAgICAgICAgICAgZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChwYWdlSUQs
IHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVwcywgd2hlZWxFdmVudE9yaWdpbik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEzNiwxMCArMTQwLDEwIEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29u
c3QgV2ViV2hlZWxFdmVudCYgd2hlCiAKICAgICAgICAgc2Nyb2xsaW5nVHJlZS0+d2lsbFByb2Nl
c3NXaGVlbEV2ZW50KCk7CiAKLSAgICAgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbc2Ny
b2xsaW5nVHJlZSwgd2hlZWxFdmVudCwgcGxhdGZvcm1XaGVlbEV2ZW50LCBwcm9jZXNzaW5nU3Rl
cHMsIHVzZU1haW5UaHJlYWRGb3JTY3JvbGxpbmcsIHBhZ2VJRCwgcHJvdGVjdGVkVGhpcyA9IFJl
ZiB7ICp0aGlzIH1dIHsKKyAgICAgICAgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChbc2Nyb2xs
aW5nVHJlZSwgd2hlZWxFdmVudCwgcGxhdGZvcm1XaGVlbEV2ZW50LCBwcm9jZXNzaW5nU3RlcHMs
IHVzZU1haW5UaHJlYWRGb3JTY3JvbGxpbmcsIHBhZ2VJRCwgd2hlZWxFdmVudE9yaWdpbiwgcHJv
dGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIHsKICAgICAgICAgICAgIGlmICh1c2VNYWluVGhy
ZWFkRm9yU2Nyb2xsaW5nKSB7CiAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nVHJlZS0+d2lsbFNl
bmRFdmVudFRvTWFpblRocmVhZChwbGF0Zm9ybVdoZWVsRXZlbnQpOwotICAgICAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPmRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3
aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3RlcHMpOworICAgICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPmRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3aGVlbEV2ZW50LCBw
cm9jZXNzaW5nU3RlcHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogICAgICAgICAgICAgICAgIHNjcm9s
bGluZ1RyZWUtPndhaXRGb3JFdmVudFRvQmVQcm9jZXNzZWRCeU1haW5UaHJlYWQocGxhdGZvcm1X
aGVlbEV2ZW50KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0x
NDcsMjMgKzE1MSw0MiBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudChQYWdlSWRl
bnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZQogICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBzY3JvbGxpbmdUcmVlLT5oYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtV2hlZWxF
dmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5uZWVkc01h
aW5UaHJlYWRQcm9jZXNzaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5k
aXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcmVzdWx0
LnN0ZXBzKTsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNwYXRjaFdoZWVsRXZl
bnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcmVzdWx0LnN0ZXBzLCB3aGVlbEV2
ZW50T3JpZ2luKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0ZXBzLmNvbnRhaW5zKFdo
ZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElm
IHdlIHNjcm9sbGVkIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkIChldmVuIGlmIHdlIHNlbmQgdGhl
IGV2ZW50IHRvIHRoZSBtYWluIHRocmVhZCBmb3IgcGFzc2l2ZSBldmVudCBoYW5kbGVycykKICAg
ICAgICAgICAgIC8vIHJlc3BvbmQgdG8gdGhlIFVJIHByb2Nlc3MgdGhhdCB0aGUgZXZlbnQgd2Fz
IGhhbmRsZWQuCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kRGlkUmVjZWl2ZUV2ZW50
KHBhZ2VJRCwgd2hlZWxFdmVudC50eXBlKCksIHJlc3VsdC53YXNIYW5kbGVkKTsKKyAgICAgICAg
ICAgIGlmICh3aGVlbEV2ZW50T3JpZ2luID09IFdoZWVsRXZlbnRPcmlnaW46OlVJUHJvY2VzcykK
KyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5zZW5kRGlkUmVjZWl2ZUV2ZW50KHBhZ2VJ
RCwgd2hlZWxFdmVudC50eXBlKCksIHJlc3VsdC53YXNIYW5kbGVkKTsKICAgICAgICAgfSk7CiAg
ICAgfSB3aGlsZSAoZmFsc2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocnViYmVyQmFuZGFi
bGVFZGdlcyk7CiAKLSAgICBkaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwg
d2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKKyAgICBkaXNwYXRjaFdoZWVsRXZlbnRWaWFN
YWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzLCB3aGVlbEV2ZW50
T3JpZ2luKTsKICNlbmRpZgogfQogCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudChQ
YWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFJl
Y3RFZGdlczxib29sPiBydWJiZXJCYW5kYWJsZUVkZ2VzKQoreworI2lmIEVOQUJMRShNT01FTlRV
TV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIGlmIChtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT5o
YW5kbGVXaGVlbEV2ZW50KHBhZ2VJRCwgd2hlZWxFdmVudCwgcnViYmVyQmFuZGFibGVFZGdlcykp
IHsKKyAgICAgICAgc2VuZERpZFJlY2VpdmVFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQudHlwZSgp
LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGludGVybmFsV2hl
ZWxFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMsIFdoZWVsRXZl
bnRPcmlnaW46OlVJUHJvY2Vzcyk7Cit9CisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElT
UEFUQ0hFUikKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpzZXRTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZShQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlJiBjdXJ2ZSkKK3sKKyAgICBtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT5zZXRTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZShwYWdlSUQsIGN1cnZlKTsKK30KKyNlbmRpZgorCiAjaWYgRU5B
QkxFKE1BQ19HRVNUVVJFX0VWRU5UUykKIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpnZXN0dXJlRXZl
bnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCYg
Z2VzdHVyZUV2ZW50KQogewpAQCAtMjMwLDE1ICsyNTMsMTUgQEAgdm9pZCBFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoVG91Y2hFdmVudHMoKQogfQogI2VuZGlmCiAKLXZvaWQgRXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0PFdo
ZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdTdGVwcykKK3ZvaWQgRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0
PFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdTdGVwcywgV2hlZWxFdmVudE9y
aWdpbiB3aGVlbEV2ZW50T3JpZ2luKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH0sIHBhZ2VJRCwgd2hlZWxFdmVudCwgc3RlcHMgPSBwcm9jZXNzaW5nU3RlcHMgLSBXaGVl
bEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpTY3JvbGxpbmdUaHJlYWRdKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIHByb3RlY3RlZFRoaXMtPmRpc3BhdGNoV2hlZWxFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQs
IHN0ZXBzKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBwYWdlSUQsIHdoZWVsRXZlbnQsIHdoZWVsRXZlbnRPcmlnaW4sIHN0ZXBz
ID0gcHJvY2Vzc2luZ1N0ZXBzIC0gV2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6U2Nyb2xsaW5n
VGhyZWFkXSgpIG11dGFibGUgeworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNwYXRjaFdoZWVs
RXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LCBzdGVwcywgd2hlZWxFdmVudE9yaWdpbik7CiAgICAg
fSk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnQoUGFnZUlk
ZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25T
ZXQ8V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4gcHJvY2Vzc2luZ1N0ZXBzKQordm9pZCBFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNv
bnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHJvY2Vz
c2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMsIFdoZWVsRXZlbnRPcmlnaW4gd2hlZWxFdmVudE9y
aWdpbikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0yNDYsNyArMjY5
LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVudChQYWdlSWRlbnRp
ZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXYKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHdlYlBhZ2UtPndoZWVsRXZlbnQod2hlZWxFdmVudCwgcHJvY2Vzc2lu
Z1N0ZXBzKTsKKyAgICB3ZWJQYWdlLT53aGVlbEV2ZW50KHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdT
dGVwcywgd2hlZWxFdmVudE9yaWdpbik7CiB9CiAKICNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZF
TlRTKQpAQCAtMjg0LDYgKzMwNywxMSBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheVdh
c1JlZnJlc2hlZChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIGNvbnN0IERpcwogICAgIHRy
YWNlUG9pbnQoRGlzcGxheVJlZnJlc2hEaXNwYXRjaGluZ1RvTWFpblRocmVhZCwgZGlzcGxheUlE
LCBzZW5kVG9NYWluVGhyZWFkKTsKIAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgbV9tb21lbnR1bUV2
ZW50RGlzcGF0Y2hlci0+ZGlzcGxheVdhc1JlZnJlc2hlZChkaXNwbGF5SUQsIGRpc3BsYXlVcGRh
dGUpOworI2VuZGlmCisKICAgICBub3RpZnlTY3JvbGxpbmdUcmVlc0Rpc3BsYXlXYXNSZWZyZXNo
ZWQoZGlzcGxheUlEKTsKIAogICAgIGlmICghc2VuZFRvTWFpblRocmVhZCkKQEAgLTI5NSw0ICsz
MjMsMTQgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZyZXNoZWQoUGxhdGZv
cm1EaXNwbGF5SUQgZGlzcGxheUlELCBjb25zdCBEaXMKIH0KICNlbmRpZgogCit2b2lkIEV2ZW50
RGlzcGF0Y2hlcjo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwg
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQoreworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVO
VF9ESVNQQVRDSEVSKQorICAgIG1fbW9tZW50dW1FdmVudERpc3BhdGNoZXItPndpbmRvd1NjcmVl
bkRpZENoYW5nZShwYWdlSUQsIGRpc3BsYXlJRCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShw
YWdlSUQpOworICAgIFVOVVNFRF9QQVJBTShkaXNwbGF5SUQpOworI2VuZGlmCit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9FdmVudERpc3BhdGNoZXIuaAppbmRleCA5ODgxMjIwMWYwNDZlMzIzZmVkMTFiNGEwNWEwYWM5
NWVkNTI3ZDFmLi4xMTViMmJlZjcyYjYwNDc3ZmQwZDI4N2JhNTViZjM5NDNmMWY2MDJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
aApAQCAtNTAsNiArNTAsOCBAQCB1c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90Owog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTW9tZW50dW1FdmVudERpc3BhdGNoZXI7Citj
bGFzcyBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBX
ZWJXaGVlbEV2ZW50OwogCkBAIC03Niw2ICs3OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbm90
aWZ5U2Nyb2xsaW5nVHJlZXNEaXNwbGF5V2FzUmVmcmVzaGVkKFdlYkNvcmU6OlBsYXRmb3JtRGlz
cGxheUlEKTsKIAorICAgIGVudW0gY2xhc3MgV2hlZWxFdmVudE9yaWdpbiA6IGJvb2wgeyBVSVBy
b2Nlc3MsIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyIH07CisgICAgdm9pZCBpbnRlcm5hbFdoZWVs
RXZlbnQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBXZWJD
b3JlOjpSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcywgV2hlZWxFdmVudE9yaWdp
bik7CisKIHByaXZhdGU6CiAgICAgRXZlbnREaXNwYXRjaGVyKCk7CiAKQEAgLTg0LDYgKzg5LDkg
QEAgcHJpdmF0ZToKIAogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKICAgICB2b2lkIHdoZWVsRXZl
bnQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBXZWJDb3Jl
OjpSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcyk7CisjaWYgRU5BQkxFKE1PTUVO
VFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgdm9pZCBzZXRTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmUmKTsKKyNlbmRpZgogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQg
dG91Y2hFdmVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViVG91Y2hFdmVudCYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgdG91Y2hFdmVudFdp
dGhvdXRDYWxsYmFjayhXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViVG91Y2hFdmVu
dCYpOwpAQCAtOTMsOCArMTAxLDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8gVGhpcyBp
cyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiwgT3B0aW9uU2V0
PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+KTsKLSAgICB2b2lkIGRpc3BhdGNo
V2hlZWxFdmVudFZpYU1haW5UaHJlYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdl
YldoZWVsRXZlbnQmLCBPcHRpb25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVw
cz4pOworICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBjb25zdCBXZWJXaGVlbEV2ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9j
ZXNzaW5nU3RlcHM+LCBXaGVlbEV2ZW50T3JpZ2luKTsKKyAgICB2b2lkIGRpc3BhdGNoV2hlZWxF
dmVudFZpYU1haW5UaHJlYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVs
RXZlbnQmLCBPcHRpb25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4sIFdo
ZWVsRXZlbnRPcmlnaW4pOwogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAgICAgdm9p
ZCBkaXNwYXRjaFRvdWNoRXZlbnRzKCk7CkBAIC0xMTUsNiArMTIzLDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGRpc3BsYXlEaWRSZWZyZXNoT25TY3JvbGxpbmdUaHJlYWQoV2ViQ29yZTo6UGxhdGZv
cm1EaXNwbGF5SUQpOwogI2VuZGlmCiAKKyAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOworCiAg
ICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKIAogI2lmIEVOQUJMRShTQ1JPTExJTkdfVEhSRUFE
KQpAQCAtMTI2LDYgKzEzNiwxMCBAQCBwcml2YXRlOgogICAgIExvY2sgbV90b3VjaEV2ZW50c0xv
Y2s7CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgVG91Y2hFdmVudFF1ZXVl
PiBtX3RvdWNoRXZlbnRzIFdURl9HVUFSREVEX0JZX0xPQ0sobV90b3VjaEV2ZW50c0xvY2spOwog
I2VuZGlmCisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8TW9tZW50dW1FdmVudERpc3BhdGNoZXI+IG1fbW9tZW50dW1FdmVudERpc3Bh
dGNoZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1l
c3NhZ2VzLmluCmluZGV4IDA5YWZjMmNlZDFkM2ZiZmM2Mzk5MGI4ODg2YjYzNjRmNjg4MGIzMmMu
LjU2OTJlZTc3ZTY5ZGFhNzA2OWRhNDNiN2JlODUwODZkMTVjNWU3NzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
bWVzc2FnZXMuaW4KQEAgLTMyLDQgKzMyLDkgQEAgbWVzc2FnZXMgLT4gRXZlbnREaXNwYXRjaGVy
IHsKICNpZiBIQVZFKENWRElTUExBWUxJTkspCiAgICAgRGlzcGxheVdhc1JlZnJlc2hlZCh1aW50
MzJfdCBkaXNwbGF5SUQsIHN0cnVjdCBXZWJDb3JlOjpEaXNwbGF5VXBkYXRlIHVwZGF0ZSwgYm9v
bCBzZW5kVG9NYWluVGhyZWFkKQogI2VuZGlmCisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRf
RElTUEFUQ0hFUikKKyAgICBTZXRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZShXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUg
Y3VydmUpCisjZW5kaWYKKyAgICBXaW5kb3dTY3JlZW5EaWRDaGFuZ2UoV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgcGFnZUlELCB1aW50MzJfdCBkaXNwbGF5SUQpCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTA1OWU3YjBhNzU3ZWQ2MDMwZGY2NDk3YTkzMjIxOGFlZTZmMjFi
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL01v
bWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5o
IgorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisKKyNpbmNsdWRlICJF
dmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlSZWZyZXNoTW9u
aXRvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRz
IGRlbHRhSGlzdG9yeU1heGltdW1BZ2UgPSA1MDBfbXM7CitzdGF0aWMgY29uc3RleHByIFNlY29u
ZHMgZGVsdGFIaXN0b3J5TWF4aW11bUludGVydmFsID0gMTUwX21zOworc3RhdGljIGNvbnN0ZXhw
ciBTZWNvbmRzIGlkZWFsQ3VydmVGcmFtZVJhdGUgPSAxX3MgLyA2MDsKKworTW9tZW50dW1FdmVu
dERpc3BhdGNoZXI6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyKEV2ZW50RGlzcGF0Y2hlciYgZGlz
cGF0Y2hlcikKKyAgICA6IG1fb2JzZXJ2ZXJJRChEaXNwbGF5TGlua09ic2VydmVySUQ6OmdlbmVy
YXRlKCkpCisgICAgLCBtX2Rpc3BhdGNoZXIoZGlzcGF0Y2hlcikKK3sKK30KKworTW9tZW50dW1F
dmVudERpc3BhdGNoZXI6On5Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlcigpCit7CisgICAgc3RvcERp
c3BsYXlMaW5rKCk7Cit9CisKK2Jvb2wgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmV2ZW50U2hv
dWxkU3RhcnRTeW50aGV0aWNNb21lbnR1bVBoYXNlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBh
Z2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkgY29uc3QKK3sKKyAgICBp
ZiAoZXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBoYXNlQmVnYW4pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9hY2NlbGVyYXRpb25DdXJ2ZXMuY29u
dGFpbnMocGFnZUlkZW50aWZpZXIpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1h
dGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBub3QgdXNpbmcgc3ludGhldGljIG1vbWVu
dHVtIHBoYXNlOiBubyBhY2NlbGVyYXRpb24gY3VydmUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghZXZlbnQucmF3UGxhdGZvcm1EZWx0YSgpKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBu
b3QgdXNpbmcgc3ludGhldGljIG1vbWVudHVtIHBoYXNlOiBubyByYXcgcGxhdGZvcm0gZGVsdGEg
b24gc3RhcnQgZXZlbnQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpoYW5kbGVXaGVl
bEV2ZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJX
aGVlbEV2ZW50JiBldmVudCwgV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxl
RWRnZXMpCit7CisgICAgbV9sYXN0UnViYmVyQmFuZGFibGVFZGdlcyA9IHJ1YmJlckJhbmRhYmxl
RWRnZXM7CisgICAgbV9sYXN0SW5jb21pbmdFdmVudCA9IGV2ZW50OworCisgICAgYm9vbCBpc01v
bWVudHVtRXZlbnQgPSBldmVudC5tb21lbnR1bVBoYXNlKCkgIT0gV2ViV2hlZWxFdmVudDo6UGhh
c2VOb25lOworCisgICAgaWYgKG1fY3VycmVudEdlc3R1cmUuYWN0aXZlKSB7CisgICAgICAgIGJv
b2wgcGFnZUlkZW50aWZpZXJDaGFuZ2VkID0gcGFnZUlkZW50aWZpZXIgIT0gbV9jdXJyZW50R2Vz
dHVyZS5wYWdlSWRlbnRpZmllcjsKKworICAgICAgICAvLyBBbnkgaW5jb21pbmcgd2hlZWwgZXZl
bnQgb3RoZXIgdGhhbiBhIGNoYW5nZWQgZXZlbnQgZm9yIHRoZSBjdXJyZW50IGdlc3R1cmUKKyAg
ICAgICAgLy8gc2hvdWxkIGludGVycnVwdCB0aGUgYW5pbWF0aW9uOyBpbiB0aGUgdXN1YWwgY2Fz
ZSwgaXQgd2lsbCBiZQorICAgICAgICAvLyBtb21lbnR1bVBoYXNlID09IFBoYXNlRW5kZWQgdGhh
dCBpbnRlcnJ1cHRzLgorICAgICAgICBib29sIGV2ZW50U2hvdWxkSW50ZXJydXB0R2VzdHVyZSA9
ICFpc01vbWVudHVtRXZlbnQgfHwgZXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFdlYldoZWVsRXZl
bnQ6OlBoYXNlQ2hhbmdlZDsKKworICAgICAgICBpZiAocGFnZUlkZW50aWZpZXJDaGFuZ2VkIHx8
IGV2ZW50U2hvdWxkSW50ZXJydXB0R2VzdHVyZSkKKyAgICAgICAgICAgIGRpZEVuZE1vbWVudHVt
UGhhc2UoKTsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQucGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50
OjpQaGFzZUJlZ2FuIHx8IGV2ZW50LnBoYXNlKCkgPT0gV2ViV2hlZWxFdmVudDo6UGhhc2VDaGFu
Z2VkKSB7CisgICAgICAgIGRpZFNjcm9sbChldmVudCk7CisKKyAgICAgICAgaWYgKGF1dG8gbGFz
dEFjdGl2ZVBoYXNlRGVsdGEgPSBldmVudC5yYXdQbGF0Zm9ybURlbHRhKCkpCisgICAgICAgICAg
ICBtX2xhc3RBY3RpdmVQaGFzZURlbHRhID0gKmxhc3RBY3RpdmVQaGFzZURlbHRhOworICAgIH0K
KworICAgIGlmIChldmVudFNob3VsZFN0YXJ0U3ludGhldGljTW9tZW50dW1QaGFzZShwYWdlSWRl
bnRpZmllciwgZXZlbnQpKQorICAgICAgICBkaWRTdGFydE1vbWVudHVtUGhhc2UocGFnZUlkZW50
aWZpZXIsIGV2ZW50KTsKKworICAgIGJvb2wgaXNNb21lbnR1bUV2ZW50RHVyaW5nU3ludGhldGlj
R2VzdHVyZSA9IGlzTW9tZW50dW1FdmVudCAmJiBtX2N1cnJlbnRHZXN0dXJlLmFjdGl2ZTsKKwor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlmIChpc01vbWVudHVtRXZlbnREdXJpbmdT
eW50aGV0aWNHZXN0dXJlKQorICAgICAgICBtX2N1cnJlbnRHZXN0dXJlLmFjY3VtdWxhdGVkRXZl
bnRPZmZzZXQgKz0gZXZlbnQuZGVsdGEoKTsKKyNlbmRpZgorCisgICAgLy8gQ29uc3VtZSBhbnkg
bm9ybWFsIG1vbWVudHVtIGV2ZW50cyB3aGlsZSB3ZSdyZSBpbnNpZGUgYSBzeW50aGV0aWMgbW9t
ZW50dW0gZ2VzdHVyZS4KKyAgICByZXR1cm4gaXNNb21lbnR1bUV2ZW50RHVyaW5nU3ludGhldGlj
R2VzdHVyZTsKK30KKworc3RhdGljIGZsb2F0IGFwcEtpdFNjcm9sbE11bHRpcGxpZXJGb3JFdmVu
dChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBhdXRvIGRlbHRhID0gZXZlbnQu
ZGVsdGEoKTsKKyAgICBhdXRvIHVuYWNjZWxlcmF0ZWREZWx0YSA9IGV2ZW50LnVuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YSgpOworICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOworICAgIAorICAg
IC8vIEZJWE1FOiBDYW4gdGhlIEFwcEtpdCBtdWx0aXBsaWVyIGV2ZXIgZGlmZmVyIGJ5IGF4aXM/
CisgICAgaWYgKGRlbHRhLndpZHRoKCkgJiYgdW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpCisg
ICAgICAgIG11bHRpcGxpZXIgPSBzdGQ6Om1heChtdWx0aXBsaWVyLCBkZWx0YS53aWR0aCgpIC8g
dW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpOworICAgIGlmIChkZWx0YS5oZWlnaHQoKSAmJiB1
bmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0KCkpCisgICAgICAgIG11bHRpcGxpZXIgPSBzdGQ6Om1h
eChtdWx0aXBsaWVyLCBkZWx0YS5oZWlnaHQoKSAvIHVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQo
KSk7CisKKyAgICByZXR1cm4gbXVsdGlwbGllcjsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hTeW50aGV0aWNNb21lbnR1bUV2ZW50KFdlYldoZWVsRXZlbnQ6OlBo
YXNlIHBoYXNlLCBXZWJDb3JlOjpGbG9hdFNpemUgZGVsdGEpCit7CisgICAgQVNTRVJUKG1fY3Vy
cmVudEdlc3R1cmUuYWN0aXZlKTsKKyAgICBBU1NFUlQobV9jdXJyZW50R2VzdHVyZS5pbml0aWF0
aW5nRXZlbnQpOworCisgICAgYXV0byBhcHBLaXRTY3JvbGxNdWx0aXBsaWVyID0gYXBwS2l0U2Ny
b2xsTXVsdGlwbGllckZvckV2ZW50KCptX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudCk7
CisgICAgYXV0byBhcHBLaXRBY2NlbGVyYXRlZERlbHRhID0gZGVsdGEgKiBhcHBLaXRTY3JvbGxN
dWx0aXBsaWVyOworICAgIGF1dG8gd2hlZWxUaWNrcyA9IGFwcEtpdEFjY2VsZXJhdGVkRGVsdGEg
LyBXZWJDb3JlOjpTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgYXV0byB0aW1l
ID0gV2FsbFRpbWU6Om5vdygpOworCisgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291bGQgc3Rp
Y2sgbGVnaXRpbWF0ZSByYXdQbGF0Zm9ybURlbHRhcyBvbiB0aGUgZXZlbnQsCisgICAgLy8gYnV0
IGN1cnJlbnRseSBub3RoaW5nIHdpbGwgY29uc3VtZSB0aGVtLCBhbmQgd2UnZCBoYXZlIHRvIGtl
ZXAgdHJhY2sgb2YgdGhlbSBzZXBhcmF0ZWx5LgorICAgIFdlYldoZWVsRXZlbnQgc3ludGhldGlj
RXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudC0+
cG9zaXRpb24oKSwgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQtPmdsb2JhbFBvc2l0
aW9uKCksIGFwcEtpdEFjY2VsZXJhdGVkRGVsdGEsIHdoZWVsVGlja3MsIFdlYldoZWVsRXZlbnQ6
OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCBtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVu
dC0+ZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKCksIFdlYldoZWVsRXZlbnQ6OlBoYXNlTm9u
ZSwgcGhhc2UsIHRydWUsIG1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50LT5zY3JvbGxD
b3VudCgpLCBkZWx0YSwgbV9sYXN0SW5jb21pbmdFdmVudC0+bW9kaWZpZXJzKCksIHRpbWUsIHRp
bWUsIHsgfSk7CisgICAgbV9kaXNwYXRjaGVyLmludGVybmFsV2hlZWxFdmVudChtX2N1cnJlbnRH
ZXN0dXJlLnBhZ2VJZGVudGlmaWVyLCBzeW50aGV0aWNFdmVudCwgbV9sYXN0UnViYmVyQmFuZGFi
bGVFZGdlcywgRXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50T3JpZ2luOjpNb21lbnR1bUV2ZW50
RGlzcGF0Y2hlcik7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmRpZFN0YXJ0
TW9tZW50dW1QaGFzZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSWRlbnRpZmllciwgY29u
c3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgbV9jdXJyZW50R2VzdHVyZS5hY3RpdmUg
PSB0cnVlOworICAgIG1fY3VycmVudEdlc3R1cmUucGFnZUlkZW50aWZpZXIgPSBwYWdlSWRlbnRp
ZmllcjsKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudCA9IGV2ZW50OworICAg
IG1fY3VycmVudEdlc3R1cmUuY3VycmVudE9mZnNldCA9IHsgfTsKKyAgICBtX2N1cnJlbnRHZXN0
dXJlLnN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmFj
Y2VsZXJhdGlvbkN1cnZlID0gWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmU+IHsKKyAgICAgICAgYXV0byBjdXJ2ZUl0ZXJhdG9yID0gbV9hY2NlbGVyYXRp
b25DdXJ2ZXMuZmluZChtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAg
aWYgKGN1cnZlSXRlcmF0b3IgPT0gbV9hY2NlbGVyYXRpb25DdXJ2ZXMuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gY3VydmVJdGVyYXRvci0+dmFsdWU7Cisg
ICAgfSgpOworCisgICAgc3RhcnREaXNwbGF5TGluaygpOworCisgICAgLy8gRklYTUU6IFRoZSBz
eXN0ZW0gZmFsbHMgYmFjayBmcm9tIHRoZSB0YWJsZSB0byBqdXN0IGdlbmVyYXRpbmcgZGVsdGFz
CisgICAgLy8gZGlyZWN0bHkgd2hlbiB0aGUgZnJhbWUgaW50ZXJ2YWwgaXMgd2l0aGluIDIwZnBz
IG9mIGlkZWFsQ3VydmVGcmFtZVJhdGU7CisgICAgLy8gd2Ugc2hvdWxkIHBlcmhhcHMgZG8gdGhl
IHNhbWUuCisgICAgYnVpbGRPZmZzZXRUYWJsZVdpdGhJbml0aWFsRGVsdGEoKmV2ZW50LnJhd1Bs
YXRmb3JtRGVsdGEoKSk7CisKKyAgICBkaXNwYXRjaFN5bnRoZXRpY01vbWVudHVtRXZlbnQoV2Vi
V2hlZWxFdmVudDo6UGhhc2VCZWdhbiwgeyB9KTsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6ZGlkRW5kTW9tZW50dW1QaGFzZSgpCit7CisgICAgQVNTRVJUKG1fY3VycmVudEdl
c3R1cmUuYWN0aXZlKTsKKworICAgIGRpc3BhdGNoU3ludGhldGljTW9tZW50dW1FdmVudChXZWJX
aGVlbEV2ZW50OjpQaGFzZUVuZGVkLCB7IH0pOworCisgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5p
bWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIHNhdyBtb21lbnR1bSBlbmQgcGhhc2Ug
d2l0aCB0b3RhbCBvZmZzZXQgJWYgJWYsIGR1cmF0aW9uICVmIChldmVudCBvZmZzZXQgd291bGQg
aGF2ZSBiZWVuICVmICVmKSIsIG1fY3VycmVudEdlc3R1cmUuY3VycmVudE9mZnNldC53aWR0aCgp
LCBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRPZmZzZXQuaGVpZ2h0KCksIChXYWxsVGltZTo6bm93
KCkgLSBtX2N1cnJlbnRHZXN0dXJlLnN0YXJ0VGltZSkuc2Vjb25kcygpLCBtX2N1cnJlbnRHZXN0
dXJlLmFjY3VtdWxhdGVkRXZlbnRPZmZzZXQud2lkdGgoKSwgbV9jdXJyZW50R2VzdHVyZS5hY2N1
bXVsYXRlZEV2ZW50T2Zmc2V0LmhlaWdodCgpKTsKKworICAgIHN0b3BEaXNwbGF5TGluaygpOwor
CisgICAgbV9jdXJyZW50R2VzdHVyZSA9IHsgfTsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUoV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgcGFnZUlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmU+IGN1cnZlKQoreworICAgIG1fYWNjZWxlcmF0aW9uQ3VydmVzLnNldChwYWdlSWRlbnRp
ZmllciwgY3VydmUpOworCisgICAgV1RGOjpUZXh0U3RyZWFtIHN0cmVhbShXVEY6OlRleHRTdHJl
YW06OkxpbmVNb2RlOjpTaW5nbGVMaW5lKTsKKyAgICBzdHJlYW0gPDwgY3VydmU7CisgICAgUkVM
RUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIHNldCBj
dXJ2ZSAlcyIsIHN0cmVhbS5yZWxlYXNlKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK1dlYkNvcmU6
OlBsYXRmb3JtRGlzcGxheUlEIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwbGF5SUQoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyKTsKKyAg
ICBhdXRvIGRpc3BsYXlJREl0ZXJhdG9yID0gbV9kaXNwbGF5SURzLmZpbmQobV9jdXJyZW50R2Vz
dHVyZS5wYWdlSWRlbnRpZmllcik7CisgICAgaWYgKGRpc3BsYXlJREl0ZXJhdG9yID09IG1fZGlz
cGxheUlEcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZGlzcGxheUlE
SXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdGFy
dERpc3BsYXlMaW5rKCkKK3sKKyAgICBhdXRvIGRpc3BsYXlJRCA9IHRoaXMtPmRpc3BsYXlJRCgp
OworICAgIGlmICghZGlzcGxheUlEKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1h
dGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBmYWlsZWQgdG8gc3RhcnQgZGlzcGxheSBs
aW5rIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogU3dpdGNoIGRv
d24gdG8gbG93ZXItdGhhbi1mdWxsLXNwZWVkIGZyYW1lIHJhdGVzIGZvciB0aGUgdGFpbCBlbmQg
b2YgdGhlIGN1cnZlLgorICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6U3RhcnREaXNwbGF5
TGluayhtX29ic2VydmVySUQsIGRpc3BsYXlJRCwgRnVsbFNwZWVkRnJhbWVzUGVyU2Vjb25kKSwg
MCk7CisgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNw
YXRjaGVyIHN0YXJ0aW5nIGRpc3BsYXkgbGluayBmb3IgZGlzcGxheSAlZCIsIGRpc3BsYXlJRCk7
Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OnN0b3BEaXNwbGF5TGluaygpCit7
CisgICAgYXV0byBkaXNwbGF5SUQgPSB0aGlzLT5kaXNwbGF5SUQoKTsKKyAgICBpZiAoIWRpc3Bs
YXlJRCkgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1F
dmVudERpc3BhdGNoZXIgZmFpbGVkIHRvIHN0b3AgZGlzcGxheSBsaW5rIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OlN0b3BEaXNwbGF5
TGluayhtX29ic2VydmVySUQsIGRpc3BsYXlJRCksIDApOworICAgIFJFTEVBU0VfTE9HKFNjcm9s
bEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBzdG9wcGluZyBkaXNwbGF5IGxp
bmsgZm9yIGRpc3BsYXkgJWQiLCBkaXNwbGF5SUQpOworfQorCit2b2lkIE1vbWVudHVtRXZlbnRE
aXNwYXRjaGVyOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIg
cGFnZUlELCBXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCit7CisgICAgYm9v
bCBhZmZlY3RzQ3VycmVudEdlc3R1cmUgPSAocGFnZUlEID09IG1fY3VycmVudEdlc3R1cmUucGFn
ZUlkZW50aWZpZXIpOworICAgIGlmIChhZmZlY3RzQ3VycmVudEdlc3R1cmUpCisgICAgICAgIHN0
b3BEaXNwbGF5TGluaygpOworCisgICAgbV9kaXNwbGF5SURzLnNldChwYWdlSUQsIGRpc3BsYXlJ
RCk7CisKKyAgICBpZiAoYWZmZWN0c0N1cnJlbnRHZXN0dXJlKQorICAgICAgICBzdGFydERpc3Bs
YXlMaW5rKCk7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNS
ZWZyZXNoZWQoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBjb25zdCBXZWJD
b3JlOjpEaXNwbGF5VXBkYXRlJikKK3sKKyAgICBpZiAoIW1fY3VycmVudEdlc3R1cmUuYWN0aXZl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGlzcGxheUlEICE9IHRoaXMtPmRpc3BsYXlJ
RCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGFuaW1hdGlvblRpbWUgPSBXYWxsVGlt
ZTo6bm93KCkgLSBtX2N1cnJlbnRHZXN0dXJlLnN0YXJ0VGltZTsKKyAgICBhdXRvIGRlc2lyZWRP
ZmZzZXQgPSBvZmZzZXRBdFRpbWUoYW5pbWF0aW9uVGltZSk7CisKKyNpZiAhVVNFKE1PTUVOVFVN
X0VWRU5UX0RJU1BBVENIRVJfUFJFTUFUVVJFX1JPVU5ESU5HKQorICAgIC8vIEludGVudGlvbmFs
IGRlbHRhIHJvdW5kaW5nIChidXQgYXQgdGhlIGVuZCEpLgorICAgIEZsb2F0U2l6ZSBkZWx0YSA9
IHJvdW5kZWRJbnRTaXplKGRlc2lyZWRPZmZzZXQgLSBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRP
ZmZzZXQpOworI2Vsc2UKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBkZXNpcmVkT2Zmc2V0IC0gbV9j
dXJyZW50R2VzdHVyZS5jdXJyZW50T2Zmc2V0OworI2VuZGlmCisKKyAgICBkaXNwYXRjaFN5bnRo
ZXRpY01vbWVudHVtRXZlbnQoV2ViV2hlZWxFdmVudDo6UGhhc2VDaGFuZ2VkLCAtZGVsdGEpOwor
CisgICAgbV9jdXJyZW50R2VzdHVyZS5jdXJyZW50T2Zmc2V0ICs9IGRlbHRhOworfQorCit2b2lk
IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTY3JvbGxXaXRoSW50ZXJ2YWwoRmxvYXRTaXpl
IHNpemUsIFNlY29uZHMgZnJhbWVJbnRlcnZhbCkKK3sKKyAgICBhdXRvIHB1c2ggPSBbXShIaXN0
b3JpY2FsRGVsdGFzJiBkZWx0YXMsIERlbHRhIG5ld0RlbHRhKSB7CisgICAgICAgIGJvb2wgZGly
ZWN0aW9uQ2hhbmdlZCA9IGRlbHRhcy5zaXplKCkgJiYgKGRlbHRhcy5maXJzdCgpLnJhd1BsYXRm
b3JtRGVsdGEgPiAwKSAhPSAobmV3RGVsdGEucmF3UGxhdGZvcm1EZWx0YSA+IDApOworICAgICAg
ICBpZiAoZGlyZWN0aW9uQ2hhbmdlZCB8fCBuZXdEZWx0YS5mcmFtZUludGVydmFsID4gZGVsdGFI
aXN0b3J5TWF4aW11bUFnZSkKKyAgICAgICAgICAgIGRlbHRhcy5jbGVhcigpOworCisgICAgICAg
IGRlbHRhcy5wcmVwZW5kKG5ld0RlbHRhKTsKKyAgICAgICAgaWYgKGRlbHRhcy5zaXplKCkgPiBk
ZWx0YUhpc3RvcnlRdWV1ZVNpemUpCisgICAgICAgICAgICBkZWx0YXMucmVtb3ZlTGFzdCgpOwor
ICAgIH07CisKKyAgICBwdXNoKG1fZGVsdGFIaXN0b3J5WCwgeyBzaXplLndpZHRoKCksIGZyYW1l
SW50ZXJ2YWwgfSk7CisgICAgcHVzaChtX2RlbHRhSGlzdG9yeVksIHsgc2l6ZS5oZWlnaHQoKSwg
ZnJhbWVJbnRlcnZhbCB9KTsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlk
U2Nyb2xsKGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIEFTU0VSVCghbV9jdXJy
ZW50R2VzdHVyZS5hY3RpdmUpOworCisgICAgaWYgKCFldmVudC5yYXdQbGF0Zm9ybURlbHRhKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZGVsdGEgPSAqZXZlbnQucmF3UGxhdGZvcm1E
ZWx0YSgpOworICAgIGF1dG8gdGltZSA9IGV2ZW50LmlvSElERXZlbnRUaW1lc3RhbXAoKTsKKwor
ICAgIGlmICghbV9sYXN0U2Nyb2xsVGltZXN0YW1wKSB7CisgICAgICAgIG1fbGFzdFNjcm9sbFRp
bWVzdGFtcCA9IHRpbWU7CisgICAgICAgIC8vIEZJWE1FOiBDaGVjayB0aGF0IHRoaXMgbWF0Y2hl
cyB0aGUgc3lzdGVtICh0aGV5IG1heSBnbyB3aXRoIDEwbXMgZm9yIHRoZSBmaXJzdCBmcmFtZSku
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGZyYW1lSW50ZXJ2YWwgPSB0aW1l
IC0gKm1fbGFzdFNjcm9sbFRpbWVzdGFtcDsKKyAgICBtX2xhc3RTY3JvbGxUaW1lc3RhbXAgPSB0
aW1lOworCisgICAgZGlkU2Nyb2xsV2l0aEludGVydmFsKGRlbHRhLCBmcmFtZUludGVydmFsKTsK
K30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6YnVpbGRPZmZzZXRUYWJsZVdpdGhJ
bml0aWFsRGVsdGEoRmxvYXRTaXplIGluaXRpYWxVbmFjY2VsZXJhdGVkRGVsdGEpCit7CisjaWYg
VVNFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVJfUFJFTUFUVVJFX1JPVU5ESU5HKQorICAgIG1f
Y3VycmVudEdlc3R1cmUuY2FycnlPZmZzZXQgPSB7IH07CisjZW5kaWYKKyAgICBtX2N1cnJlbnRH
ZXN0dXJlLm9mZnNldFRhYmxlLmNsZWFyKCk7CisKKyAgICBGbG9hdFNpemUgYWNjdW11bGF0ZWRP
ZmZzZXQ7CisgICAgRmxvYXRTaXplIHVuYWNjZWxlcmF0ZWREZWx0YSA9IGluaXRpYWxVbmFjY2Vs
ZXJhdGVkRGVsdGE7CisKKyAgICBkbyB7CisgICAgICAgIEZsb2F0U2l6ZSBhY2NlbGVyYXRlZERl
bHRhOworICAgICAgICBzdGQ6OnRpZSh1bmFjY2VsZXJhdGVkRGVsdGEsIGFjY2VsZXJhdGVkRGVs
dGEpID0gY29tcHV0ZU5leHREZWx0YSh1bmFjY2VsZXJhdGVkRGVsdGEpOworCisgICAgICAgIGFj
Y3VtdWxhdGVkT2Zmc2V0ICs9IGFjY2VsZXJhdGVkRGVsdGE7CisgICAgICAgIG1fY3VycmVudEdl
c3R1cmUub2Zmc2V0VGFibGUuYXBwZW5kKGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICB9IHdoaWxl
IChzdGQ6OmFicyh1bmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSkgPiAwLjUgfHwgc3RkOjphYnMo
dW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpKSA+IDAuNSk7CisKKyAgICBSRUxFQVNFX0xPRyhT
Y3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgYnVpbHQgdGFibGUgd2l0
aCAlbGQgZnJhbWVzLCBpbml0aWFsIGRlbHRhICVmICVmLCBkaXN0YW5jZSAlZiAlZiAoaW5pdGlh
bCBkZWx0YSBmcm9tIGxhc3QgY2hhbmdlZCBldmVudCAlZiAlZikiLCBtX2N1cnJlbnRHZXN0dXJl
Lm9mZnNldFRhYmxlLnNpemUoKSwgaW5pdGlhbFVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpLCBp
bml0aWFsVW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpLCBhY2N1bXVsYXRlZE9mZnNldC53aWR0
aCgpLCBhY2N1bXVsYXRlZE9mZnNldC5oZWlnaHQoKSwgbV9sYXN0QWN0aXZlUGhhc2VEZWx0YS53
aWR0aCgpLCBtX2xhc3RBY3RpdmVQaGFzZURlbHRhLmhlaWdodCgpKTsKK30KKworc3RhdGljIGZs
b2F0IGludGVycG9sYXRlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHQpCit7CisgICAgcmV0dXJu
IGEgKyB0ICogKGIgLSBhKTsKK30KKworRmxvYXRTaXplIE1vbWVudHVtRXZlbnREaXNwYXRjaGVy
OjpvZmZzZXRBdFRpbWUoU2Vjb25kcyB0aW1lKQoreworICAgIGlmICghbV9jdXJyZW50R2VzdHVy
ZS5vZmZzZXRUYWJsZS5zaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBmbG9hdCBm
cmFjdGlvbmFsRnJhbWVOdW1iZXIgPSB0aW1lLnNlY29uZHMoKSAvIGlkZWFsQ3VydmVGcmFtZVJh
dGUuc2Vjb25kcygpOworICAgIHVuc2lnbmVkIGxvbmcgbG93ZXJGcmFtZU51bWJlciA9IHN0ZDo6
bWluPHVuc2lnbmVkIGxvbmc+KG1fY3VycmVudEdlc3R1cmUub2Zmc2V0VGFibGUuc2l6ZSgpIC0g
MSwgZmxvb3IoZnJhY3Rpb25hbEZyYW1lTnVtYmVyKSk7CisgICAgdW5zaWduZWQgbG9uZyB1cHBl
ckZyYW1lTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQgbG9uZz4obV9jdXJyZW50R2VzdHVyZS5v
ZmZzZXRUYWJsZS5zaXplKCkgLSAxLCBsb3dlckZyYW1lTnVtYmVyICsgMSk7CisgICAgZmxvYXQg
YW1vdW50ID0gZnJhY3Rpb25hbEZyYW1lTnVtYmVyIC0gbG93ZXJGcmFtZU51bWJlcjsKKyAgICAK
KyAgICByZXR1cm4geworICAgICAgICAtaW50ZXJwb2xhdGUobV9jdXJyZW50R2VzdHVyZS5vZmZz
ZXRUYWJsZVtsb3dlckZyYW1lTnVtYmVyXS53aWR0aCgpLCBtX2N1cnJlbnRHZXN0dXJlLm9mZnNl
dFRhYmxlW3VwcGVyRnJhbWVOdW1iZXJdLndpZHRoKCksIGFtb3VudCksCisgICAgICAgIC1pbnRl
cnBvbGF0ZShtX2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxlW2xvd2VyRnJhbWVOdW1iZXJdLmhl
aWdodCgpLCBtX2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxlW3VwcGVyRnJhbWVOdW1iZXJdLmhl
aWdodCgpLCBhbW91bnQpCisgICAgfTsKK30KKworc3RhdGljIGZsb2F0IG1vbWVudHVtRGVjYXlS
YXRlKEZsb2F0U2l6ZSBkZWx0YSwgU2Vjb25kcyBmcmFtZUludGVydmFsKQoreworICAgIGNvbnN0
ZXhwciBmbG9hdCBkZWZhdWx0RGVjYXkgPSAwLjk3NWY7CisgICAgY29uc3RleHByIGZsb2F0IHRh
aWxWZWxvY2l0eSA9IDI1MC5mOworICAgIGNvbnN0ZXhwciBmbG9hdCB0YWlsRGVjYXkgPSAwLjkx
ZjsKKyAgICBhdXRvIGFscGhhID0gZGVmYXVsdERlY2F5OworCisgICAgaWYgKGZyYW1lSW50ZXJ2
YWwpIHsKKyAgICAgICAgZmxvYXQgaW5pdGlhbFZlbG9jaXR5ID0gZGVsdGEuZGlhZ29uYWxMZW5n
dGgoKSAvIGZyYW1lSW50ZXJ2YWwuc2Vjb25kcygpOworICAgICAgICBmbG9hdCB3ZWFrTW9tZW50
dW0gPSBzdGQ6Om1heDxmbG9hdD4oMC5mLCAodGFpbFZlbG9jaXR5IC0gaW5pdGlhbFZlbG9jaXR5
KSAvIHRhaWxWZWxvY2l0eSk7CisgICAgICAgIGFscGhhID0gZGVmYXVsdERlY2F5IC0gKGRlZmF1
bHREZWNheSAtIHRhaWxEZWNheSkgKiB3ZWFrTW9tZW50dW07CisgICAgfQorCisgICAgcmV0dXJu
IHN0ZDo6cG93KGFscGhhLCAoZnJhbWVJbnRlcnZhbC5zZWNvbmRzKCkgLyAwLjAwOGYpKTsKK30K
Kworc3RkOjpwYWlyPEZsb2F0U2l6ZSwgRmxvYXRTaXplPiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hl
cjo6Y29tcHV0ZU5leHREZWx0YShGbG9hdFNpemUgY3VycmVudFVuYWNjZWxlcmF0ZWREZWx0YSkK
K3sKKyAgICBGbG9hdFNpemUgdW5hY2NlbGVyYXRlZERlbHRhID0gY3VycmVudFVuYWNjZWxlcmF0
ZWREZWx0YTsKKworICAgIGZsb2F0IGRlY2F5UmF0ZSA9IG1vbWVudHVtRGVjYXlSYXRlKHVuYWNj
ZWxlcmF0ZWREZWx0YSwgaWRlYWxDdXJ2ZUZyYW1lUmF0ZSk7CisgICAgdW5hY2NlbGVyYXRlZERl
bHRhLnNjYWxlKGRlY2F5UmF0ZSk7CisKKyAgICBhdXRvIHF1YW50aXplZFVuYWNjZWxlcmF0ZWRE
ZWx0YSA9IHVuYWNjZWxlcmF0ZWREZWx0YTsKKworI2lmIFVTRShNT01FTlRVTV9FVkVOVF9ESVNQ
QVRDSEVSX1BSRU1BVFVSRV9ST1VORElORykKKyAgICAvLyBSb3VuZCBhbmQgY2FycnkuCisgICAg
aW50MzJfdCBxdWFudGl6ZWRYID0gc3RkOjpyb3VuZChxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVs
dGEud2lkdGgoKSk7CisgICAgaW50MzJfdCBxdWFudGl6ZWRZID0gc3RkOjpyb3VuZChxdWFudGl6
ZWRVbmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0KCkpOworCisgICAgaWYgKHN0ZDo6YWJzKHF1YW50
aXplZFVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpKSA8IDEgJiYgc3RkOjphYnMocXVhbnRpemVk
VW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpKSA8IDEpIHsKKyAgICAgICAgZmxvYXQgZGVsdGFY
SW5jbHVkaW5nQ2FycnkgPSBxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSArIG1f
Y3VycmVudEdlc3R1cmUuY2FycnlPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgZGVsdGFZ
SW5jbHVkaW5nQ2FycnkgPSBxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0KCkgKyBt
X2N1cnJlbnRHZXN0dXJlLmNhcnJ5T2Zmc2V0LmhlaWdodCgpOworCisgICAgICAgIC8vIEludGVu
dGlvbmFsIHRydW5jYXRpb24uCisgICAgICAgIHF1YW50aXplZFggPSBkZWx0YVhJbmNsdWRpbmdD
YXJyeTsKKyAgICAgICAgcXVhbnRpemVkWSA9IGRlbHRhWUluY2x1ZGluZ0NhcnJ5OworICAgICAg
ICBtX2N1cnJlbnRHZXN0dXJlLmNhcnJ5T2Zmc2V0ID0geyBkZWx0YVhJbmNsdWRpbmdDYXJyeSAt
IHF1YW50aXplZFgsIGRlbHRhWUluY2x1ZGluZ0NhcnJ5IC0gcXVhbnRpemVkWSB9OworICAgIH0K
KworICAgIHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YSA9IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHF1YW50aXplZFgpLCBzdGF0aWNfY2FzdDxmbG9hdD4ocXVhbnRpemVkWSkgfTsKKyNlbmRpZgor
CisgICAgLy8gVGhlIGRlbHRhIHF1ZXVlIG9wZXJhdGVzIG9uIHByZS1hY2NlbGVyYXRpb24gZGVs
dGFzLCBzbyBpbnNlcnQgdGhlIG5ldyBldmVudCAqYmVmb3JlKiBhY2NlbGVyYXRpbmcuCisgICAg
ZGlkU2Nyb2xsV2l0aEludGVydmFsKHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YSwgaWRlYWxD
dXJ2ZUZyYW1lUmF0ZSk7CisKKyAgICBhdXRvIGFjY2VsZXJhdGVBeGlzID0gWyZdIChIaXN0b3Jp
Y2FsRGVsdGFzJiBkZWx0YXMsIGZsb2F0IHZhbHVlKSB7CisgICAgICAgIGZsb2F0IHRvdGFsRGVs
dGEgPSAwOworICAgICAgICBTZWNvbmRzIHRvdGFsVGltZTsKKyAgICAgICAgdW5zaWduZWQgY291
bnQgPSAwOworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZGVsdGEgOiBkZWx0YXMpIHsKKyAg
ICAgICAgICAgIHRvdGFsRGVsdGEgKz0gc3RkOjphYnMoZGVsdGEucmF3UGxhdGZvcm1EZWx0YSk7
CisgICAgICAgICAgICBjb3VudCsrOworCisgICAgICAgICAgICBpZiAoZGVsdGEuZnJhbWVJbnRl
cnZhbCA+IGRlbHRhSGlzdG9yeU1heGltdW1JbnRlcnZhbCkgeworICAgICAgICAgICAgICAgIHRv
dGFsVGltZSArPSBkZWx0YUhpc3RvcnlNYXhpbXVtSW50ZXJ2YWw7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRvdGFsVGltZSArPSBkZWx0YS5m
cmFtZUludGVydmFsOworCisgICAgICAgICAgICBpZiAodG90YWxUaW1lID49IGRlbHRhSGlzdG9y
eU1heGltdW1BZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGF2ZXJhZ2VGcmFtZUludGVydmFsID0gc3RkOjpjbGFtcCh0b3RhbFRpbWUgLyBjb3Vu
dCwgMV9tcywgZGVsdGFIaXN0b3J5TWF4aW11bUludGVydmFsKTsKKyAgICAgICAgZmxvYXQgYXZl
cmFnZUZyYW1lSW50ZXJ2YWxNUyA9IGF2ZXJhZ2VGcmFtZUludGVydmFsLm1pbGxpc2Vjb25kcygp
OworICAgICAgICBmbG9hdCBhdmVyYWdlRGVsdGEgPSB0b3RhbERlbHRhIC8gY291bnQ7CisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRHZXN0dXJlLmRp
ZExvZ0luaXRpYWxRdWV1ZVN0YXRlKQorICAgICAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5p
bWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGluaXRpYWwgaGlzdG9yaWNhbCBkZWx0
YXM6IGF2ZXJhZ2UgZGVsdGEgJWYsIGF2ZXJhZ2UgdGltZSAlZm1zLCBldmVudCBjb3VudCAlZCIs
IGF2ZXJhZ2VEZWx0YSwgYXZlcmFnZUZyYW1lSW50ZXJ2YWxNUywgY291bnQpOworI2VuZGlmCisK
KyAgICAgICAgY29uc3RleHByIGZsb2F0IHZlbG9jaXR5R2FpbkEgPSAyLmYgLyA2NTUzNi4wZjsK
KyAgICAgICAgY29uc3RleHByIGZsb2F0IHZlbG9jaXR5R2FpbkIgPSA5NTUuZiAvIDY1NTM2LjBm
OworICAgICAgICBjb25zdGV4cHIgZmxvYXQgdmVsb2NpdHlDb25zdGFudCA9IDk4MzY5LmYgLyA2
NTUzNi4wZjsKKyAgICAgICAgY29uc3RleHByIGZsb2F0IG1pbmltdW1WZWxvY2l0eSA9IDEuZiAv
IDY1NTM2LjBmOworCisgICAgICAgIGZsb2F0IHZlbG9jaXR5ID0gKHZlbG9jaXR5R2FpbkEgKiBh
dmVyYWdlRnJhbWVJbnRlcnZhbE1TICogYXZlcmFnZUZyYW1lSW50ZXJ2YWxNUyAtIHZlbG9jaXR5
R2FpbkIgKiBhdmVyYWdlRnJhbWVJbnRlcnZhbE1TICsgdmVsb2NpdHlDb25zdGFudCkgKiBhdmVy
YWdlRGVsdGE7CisgICAgICAgIHZlbG9jaXR5ID0gc3RkOjptYXg8ZmxvYXQ+KHZlbG9jaXR5LCBt
aW5pbXVtVmVsb2NpdHkpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1hdGggaXMgaW5jb21w
bGV0ZSBpZiB3ZSBuZWVkIHRvIHN1cHBvcnQgYWNjZWxlcmF0aW9uIHRhYmxlcyBhcyB3ZWxsLgor
ICAgICAgICBmbG9hdCBtdWx0aXBsaWVyID0gbV9jdXJyZW50R2VzdHVyZS5hY2NlbGVyYXRpb25D
dXJ2ZS0+YWNjZWxlcmF0aW9uRmFjdG9yKHZlbG9jaXR5KSAvIHZlbG9jaXR5OworICAgICAgICBy
ZXR1cm4gdmFsdWUgKiBtdWx0aXBsaWVyOworICAgIH07CisKKyAgICBGbG9hdFNpemUgYWNjZWxl
cmF0ZWREZWx0YSgKKyAgICAgICAgYWNjZWxlcmF0ZUF4aXMobV9kZWx0YUhpc3RvcnlYLCBxdWFu
dGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSksCisgICAgICAgIGFjY2VsZXJhdGVBeGlz
KG1fZGVsdGFIaXN0b3J5WSwgcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpKQor
ICAgICk7CisKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmRpZExvZ0luaXRpYWxRdWV1ZVN0YXRlID0g
dHJ1ZTsKKworICAgIHJldHVybiB7IHVuYWNjZWxlcmF0ZWREZWx0YSwgYWNjZWxlcmF0ZWREZWx0
YSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3BhdGNo
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45YmYxNTNmYmYxYjk4YjI2YjY4MTBhOWQ1MDNjMGMxZGFiMzY5YjI3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuaApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisKKy8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGRlY2lkZSB3aGljaCB2ZXJzaW9uIHdlIHdhbnQu
CisjZGVmaW5lIFVTRV9NT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSX1BSRU1BVFVSRV9ST1VORElO
RyAwCisKKyNpbmNsdWRlICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUg
IldlYldoZWVsRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlY3RFZGdl
cy5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IERpc3BsYXlVcGRhdGU7Cit1c2luZyBQbGF0Zm9y
bURpc3BsYXlJRCA9IHVpbnQzMl90OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
RXZlbnREaXNwYXRjaGVyOworCitjbGFzcyBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTW9tZW50dW1FdmVudERpc3BhdGNoZXIpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE1vbWVudHVtRXZlbnREaXNwYXRjaGVy
KEV2ZW50RGlzcGF0Y2hlciYpOworICAgIH5Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlcigpOworCisg
ICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBX
ZWJXaGVlbEV2ZW50JiwgV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxlRWRn
ZXMpOworCisgICAgdm9pZCBzZXRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZShXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4p
OworCisgICAgdm9pZCBkaXNwbGF5V2FzUmVmcmVzaGVkKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxh
eUlELCBjb25zdCBXZWJDb3JlOjpEaXNwbGF5VXBkYXRlJik7CisKKyAgICB2b2lkIHdpbmRvd1Nj
cmVlbkRpZENoYW5nZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6UGxhdGZvcm1E
aXNwbGF5SUQpOworCitwcml2YXRlOgorICAgIHZvaWQgZGlkU3RhcnRNb21lbnR1bVBoYXNlKFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisgICAgdm9pZCBk
aWRFbmRNb21lbnR1bVBoYXNlKCk7CisKKyAgICBib29sIGV2ZW50U2hvdWxkU3RhcnRTeW50aGV0
aWNNb21lbnR1bVBoYXNlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2
ZW50JikgY29uc3Q7CisKKyAgICB2b2lkIHN0YXJ0RGlzcGxheUxpbmsoKTsKKyAgICB2b2lkIHN0
b3BEaXNwbGF5TGluaygpOworCisgICAgV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpc3BhdGNoU3ludGhldGljTW9tZW50dW1FdmVudChX
ZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViQ29yZTo6RmxvYXRTaXplIGRlbHRhKTsKKworICAgIHZv
aWQgYnVpbGRPZmZzZXRUYWJsZVdpdGhJbml0aWFsRGVsdGEoRmxvYXRTaXplKTsKKworICAgIEZs
b2F0U2l6ZSBvZmZzZXRBdFRpbWUoU2Vjb25kcyk7CisgICAgc3RkOjpwYWlyPEZsb2F0U2l6ZSwg
RmxvYXRTaXplPiBjb21wdXRlTmV4dERlbHRhKEZsb2F0U2l6ZSBjdXJyZW50VW5hY2NlbGVyYXRl
ZERlbHRhKTsKKworICAgIHZvaWQgZGlkU2Nyb2xsV2l0aEludGVydmFsKEZsb2F0U2l6ZSwgU2Vj
b25kcyk7CisgICAgdm9pZCBkaWRTY3JvbGwoY29uc3QgV2ViV2hlZWxFdmVudCYpOworCisgICAg
c3RydWN0IERlbHRhIHsKKyAgICAgICAgZmxvYXQgcmF3UGxhdGZvcm1EZWx0YTsKKyAgICAgICAg
U2Vjb25kcyBmcmFtZUludGVydmFsOworICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBkZWx0YUhpc3RvcnlRdWV1ZVNpemUgPSA5OworICAgIHR5cGVkZWYgRGVxdWU8RGVsdGEs
IGRlbHRhSGlzdG9yeVF1ZXVlU2l6ZT4gSGlzdG9yaWNhbERlbHRhczsKKyAgICBIaXN0b3JpY2Fs
RGVsdGFzIG1fZGVsdGFIaXN0b3J5WDsKKyAgICBIaXN0b3JpY2FsRGVsdGFzIG1fZGVsdGFIaXN0
b3J5WTsKKworICAgIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IG1fbGFzdFNjcm9sbFRpbWVzdGFt
cDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYldoZWVsRXZlbnQ+IG1fbGFzdEluY29taW5nRXZlbnQ7
CisgICAgV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+IG1fbGFzdFJ1YmJlckJhbmRhYmxlRWRnZXM7
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgRmxvYXRTaXplIG1fbGFzdEFjdGl2ZVBo
YXNlRGVsdGE7CisjZW5kaWYKKworICAgIHN0cnVjdCB7CisgICAgICAgIGJvb2wgYWN0aXZlIHsg
ZmFsc2UgfTsKKworICAgICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSWRlbnRpZmll
cjsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gYWNj
ZWxlcmF0aW9uQ3VydmU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViV2hlZWxFdmVudD4gaW5p
dGlhdGluZ0V2ZW50OworCisgICAgICAgIEZsb2F0U2l6ZSBjdXJyZW50T2Zmc2V0OworICAgICAg
ICBXYWxsVGltZSBzdGFydFRpbWU7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0U2l6ZT4gb2Zmc2V0
VGFibGU7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgRmxvYXRTaXplIGFj
Y3VtdWxhdGVkRXZlbnRPZmZzZXQ7CisgICAgICAgIGJvb2wgZGlkTG9nSW5pdGlhbFF1ZXVlU3Rh
dGUgeyBmYWxzZSB9OworI2VuZGlmCisKKyNpZiBVU0UoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hF
Ul9QUkVNQVRVUkVfUk9VTkRJTkcpCisgICAgICAgIEZsb2F0U2l6ZSBjYXJyeU9mZnNldDsKKyNl
bmRpZgorICAgIH0gbV9jdXJyZW50R2VzdHVyZTsKKworICAgIERpc3BsYXlMaW5rT2JzZXJ2ZXJJ
RCBtX29ic2VydmVySUQ7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQ+IG1fZGlzcGxheUlEczsKKyAgICBIYXNoTWFwPFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlPj4gbV9hY2NlbGVyYXRpb25DdXJ2ZXM7CisgICAgRXZlbnREaXNwYXRjaGVyJiBtX2Rpc3Bh
dGNoZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDc3Zjg0ZGNlN2ZhYWE0
OTJhYTU1ZmVhMDI1YmI2MDZlMGZkMDZjNWEuLjVjM2NmZDQyMzg3OGI2Y2M1NTIwMzUyZmFkMDQ1
Y2NmNTlmMGNiMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCkBAIC0zMDMxLDcgKzMwMzEsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFBhZ2UqIHBhZ2UsIE9wdGlvbgogICAg
IHJldHVybiBwYWdlLT51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3Jt
V2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKIH0KIAotYm9vbCBXZWJQYWdlOjp3aGVlbEV2
ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50
UHJvY2Vzc2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMpCitib29sIFdlYlBhZ2U6OndoZWVsRXZl
bnQoY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0PFdoZWVsRXZlbnRQ
cm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdTdGVwcywgRXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2
ZW50T3JpZ2luIHdoZWVsRXZlbnRPcmlnaW4pCiB7CiAgICAgbV91c2VyQWN0aXZpdHkuaW1wdWxz
ZSgpOwogCkBAIC0zMDM5LDcgKzMwMzksNyBAQCBib29sIFdlYlBhZ2U6OndoZWVsRXZlbnQoY29u
c3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0PFdoZWVsRXZlbnRQcgogCiAg
ICAgYm9vbCBoYW5kbGVkID0gaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBtX3BhZ2UuZ2V0
KCksIHByb2Nlc3NpbmdTdGVwcyk7CiAKLSAgICBpZiAocHJvY2Vzc2luZ1N0ZXBzLmNvbnRhaW5z
KFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcpKQorICAg
IGlmIChwcm9jZXNzaW5nU3RlcHMuY29udGFpbnMoV2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6
TWFpblRocmVhZEZvclNjcm9sbGluZykgJiYgd2hlZWxFdmVudE9yaWdpbiA9PSBFdmVudERpc3Bh
dGNoZXI6OldoZWVsRXZlbnRPcmlnaW46OlVJUHJvY2VzcykKICAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdo
ZWVsRXZlbnQudHlwZSgpKSwgaGFuZGxlZCkpOwogCiAgICAgcmV0dXJuIGhhbmRsZWQ7CkBAIC0z
MDUzLDcgKzMwNTMsNyBAQCB2b2lkIFdlYlBhZ2U6OmRpc3BhdGNoV2hlZWxFdmVudFdpdGhvdXRT
Y3JvbGxpbmcoY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudAogI2Vsc2UKICAgICBib29s
IGlzQ2FuY2VsYWJsZSA9IHRydWU7CiAjZW5kaWYKLSAgICBib29sIGhhbmRsZWQgPSB0aGlzLT53
aGVlbEV2ZW50KHdoZWVsRXZlbnQsIHsgaXNDYW5jZWxhYmxlID8gV2hlZWxFdmVudFByb2Nlc3Np
bmdTdGVwczo6TWFpblRocmVhZEZvckJsb2NraW5nRE9NRXZlbnREaXNwYXRjaCA6IFdoZWVsRXZl
bnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JOb25CbG9ja2luZ0RPTUV2ZW50RGlzcGF0
Y2ggfSk7CisgICAgYm9vbCBoYW5kbGVkID0gdGhpcy0+d2hlZWxFdmVudCh3aGVlbEV2ZW50LCB7
IGlzQ2FuY2VsYWJsZSA/IFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JC
bG9ja2luZ0RPTUV2ZW50RGlzcGF0Y2ggOiBXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWlu
VGhyZWFkRm9yTm9uQmxvY2tpbmdET01FdmVudERpc3BhdGNoIH0sIEV2ZW50RGlzcGF0Y2hlcjo6
V2hlZWxFdmVudE9yaWdpbjo6VUlQcm9jZXNzKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihoYW5k
bGVkKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmlu
ZGV4IGQzNThhMjU2YzJhYjMxNzJjZTA0MjhhZmRmZGUzOTkxNDk2YzljMmQuLjI2MmRlNmE0MmE2
OTQ5NTMwMjAxYzcyM2RhZTdlNDUyMmM1NzE2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJEb3dubG9h
ZElELmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCiAjaW5jbHVkZSAiRWRpdGluZ1Jh
bmdlLmgiCisjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiRm9jdXNlZEVs
ZW1lbnRJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIklkZW50aWZpZXJUeXBlcy5oIgpAQCAtMTA2NSw3ICsxMDY2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RhcnRXYWl0aW5nRm9yQ29udGV4dE1lbnVUb1Nob3coKSB7IG1fd2FpdGlu
Z0ZvckNvbnRleHRNZW51VG9TaG93ID0gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICBib29sIHdoZWVs
RXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYsIE9wdGlvblNldDxXZWJDb3JlOjpXaGVlbEV2ZW50
UHJvY2Vzc2luZ1N0ZXBzPik7CisgICAgYm9vbCB3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZl
bnQmLCBPcHRpb25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4sIEV2ZW50
RGlzcGF0Y2hlcjo6V2hlZWxFdmVudE9yaWdpbik7CiAKICAgICB2b2lkIHdoZWVsRXZlbnRIYW5k
bGVyc0NoYW5nZWQoYm9vbCk7CiAgICAgdm9pZCByZWNvbXB1dGVTaG9ydENpcmN1aXRIb3Jpem9u
dGFsV2hlZWxFdmVudHNTdGF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445480</attachid>
            <date>2021-11-30 15:37:28 -0800</date>
            <delta_ts>2021-11-30 17:21:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233653-20211130153727.patch</filename>
            <type>text/plain</type>
            <size>83513</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc0OGM0NDZkZTAwNmUwNDE5OGNiNmE3
YmQ0MzAwOWM0ZDQyYjgyNzguLjhhNjNlMjI0MDZhY2VmMzgwZTg0MDMzNjYzNTg1ODUwNGJjMWI4
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhl
c2l6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzY1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODU1NzEyNTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlLmg6Cisg
ICAgICAgIEFkZCBhbiBFTkFCTEUoKS4KKwogMjAyMS0xMS0yOSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIGZvciB0
aGUgV2ViIExvY2sgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA5ZTk2NTBhNTMxYTZhOTRlNjky
ZDA1YTEyZmY2ZTQwYzQwN2UwMjcyLi4zMTZlM2JjMDdlZTQ3ODMwZDg2NDM4NWMyOGMxNzVjMzhh
YTVlOTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0xMS0zMCAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBt
b21lbnR1bSBldmVudCBzeW50aGVzaXplcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNjUzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NTU3MTI1
OD4KKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBwYWwv
c3BpL21hYy9JT0tpdFNQSU1hYy5oOgorICAgICAgICBBZGQgc29tZSBTUEkuCisKIDIwMjEtMTEt
MjkgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDog
VW5pZnkgc3BlZWNoIHN5bnRoZXNpemVyIHBsYXRmb3JtIHVzYWdlIGZvciBNYWMvaU9TCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGU2Y2QzZTZjZDFiM2QxNzI5ZjE1NGY1ZTg3YjBmYzJlMjY3ZDY2ZDIuLmQ0NjkwOTA5
ZmFmZWE0NTFmZTZkNGQwNzUwNTUzODUzZmQ0MjRjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1
IEBACisyMDIxLTExLTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBhIG1vbWVudHVtIGV2ZW50IHN5bnRoZXNpemVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2NTMKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzg1NTcxMjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
KworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIFNjcm9sbEFuaW1h
dGlvbnMgbG9nIGNoYW5uZWwgdG8gV2ViS2l0IChpdCBhbHJlYWR5IGV4aXN0cyBpbiBXZWJDb3Jl
KS4KKworICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6U2Nyb2xs
aW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVy
YXRpb25DdXJ2ZTo6aW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZTo6Y29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmV2YWx1YXRlUXVhcnRpYyk6
CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjphY2NlbGVyYXRp
b25GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3Vy
dmU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2Vi
S2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZlbnQpOgor
ICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6b3BlcmF0
b3IhPSBjb25zdCk6CisgICAgICAgIEFkZCBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHF1YXJ0
aWMgc2Nyb2xsaW5nIGFjY2VsZXJhdGlvbiBjdXJ2ZSB3aXRoCisgICAgICAgIGEgdHJhaWxpbmcg
bGluZWFyIHRhbmdlbnQgcmVnaW9uLCBhbmQgYWxsb3dzIGludGVycG9sYXRpb24gYmV0d2VlbiBj
dXJ2ZXMKKyAgICAgICAgYW5kIGV2YWx1YXRpb24gb2YgdGhlIGN1cnZlIGF0IGEgcG9pbnQuCisK
KyAgICAgICAgKiBTaGFyZWQvbWFjL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFjLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6ZnJvbUZpeGVkUG9pbnQpOgorICAgICAgICAoV2ViS2l0
OjpyZWFkRml4ZWRQb2ludFBhcmFtZXRlcik6CisgICAgICAgIChXZWJLaXQ6OmZyb21JT0hJREN1
cnZlKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2NlbGVyYXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5h
dGl2ZVdoZWVsRXZlbnQpOgorICAgICAgICBHaXZlbiBhIE5hdGl2ZVdlYldoZWVsRXZlbnQsIGV4
dHJhY3QgaXRzIHVuZGVybHlpbmcgcGxhdGZvcm0gZXZlbnQKKyAgICAgICAgYW5kIGZldGNoIHRo
ZSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBmb3IgdGhlIG9yaWdpbmF0aW5nIGRldmljZS4K
KworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIEZldGNoIHRoZSBjdXJyZW50
IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIG9uIGVhY2ggbW9tZW50dW0gYmVnaW4gZXZlbnQs
CisgICAgICAgIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZW5kV2hlZWxFdmVudCk6CisgICAgICAgIFNlbmQgdGhlIFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlIHRvIEV2ZW50RGlzcGF0Y2hlciBqdXN0IGJlZm9yZQorICAgICAg
ICB3ZSBzZW5kIHRoZSBtb21lbnR1bSBiZWdpbiBldmVudCBhbG9uZywgaWYgaXQgaGFzIGNoYW5n
ZWQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aW5kb3dTY3JlZW5EaWRDaGFu
Z2UpOgorICAgICAgICBLZWVwIEV2ZW50RGlzcGF0Y2hlciBhcHByaXNlZCBvZiBjaGFuZ2VzIHRv
IHRoZSBjdXJyZW50IHNjcmVlbiBvZiB0aGUgcGFnZS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViS2l0OjpF
dmVudERpc3BhdGNoZXI6OmludGVybmFsV2hlZWxFdmVudCk6CisgICAgICAgIEZhY3RvciBtb3N0
IG9mIHdoZWVsRXZlbnQgb3V0IGludG8gaW50ZXJuYWxXaGVlbEV2ZW50LCBzbyB0aGF0CisgICAg
ICAgIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGNhbiBjYWxsIGludGVybmFsV2hlZWxFdmVudCgp
LCBza2lwcGluZyB0aGUgY29kZQorICAgICAgICBpbiB3aGVlbEV2ZW50KCkgdGhhdCBmb3J3YXJk
cyB0aGUgZXZlbnQuLi4gdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgQWxz
bywga2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgZXZlbnQgY2FtZSBmcm9tIChVSSBwcm9jZXNzIG9y
IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBhbmQgYXZvaWQgc2VuZGluZyBkaWRS
ZWNlaXZlRXZlbnQgcmVwbGllcyB0byB0aGUgVUkgcHJvY2VzcyBmb3Igc3ludGhldGljCisgICAg
ICAgIGV2ZW50cyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dC4KKworICAgICAgICAoV2ViS2l0
OjpFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQpOgorICAgICAgICBGb3J3YXJkIHdoZWVsIGV2
ZW50cyB0byBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci4KKworICAgICAgICAoV2ViS2l0OjpFdmVu
dERpc3BhdGNoZXI6OnNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKToKKyAgICAgICAgRm9y
d2FyZCBzY3JvbGxpbmcgY3VydmUgY2hhbmdlcyB0byBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci4K
KworICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZyZXNoZWQp
OgorICAgICAgICBGb3J3YXJkIGRpc3BsYXkgcmVmcmVzaCBjYWxsYmFja3MgdG8gTW9tZW50dW1F
dmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp3aW5k
b3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICBGb3J3YXJkIHBhZ2Ugc2NyZWVuIGNoYW5nZXMg
dG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6d2hlZWxFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpc3BhdGNoV2hlZWxFdmVudFdpdGhvdXRTY3JvbGxpbmcp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIERvbid0
IHNlbmQgZGlkUmVjZWl2ZUV2ZW50IGZvciBzeW50aGV0aWMgZXZlbnRzIGZyb20gdGhlIG1haW4g
dGhyZWFkIGVpdGhlci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2
ZW50RGlzcGF0Y2hlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50
RGlzcGF0Y2hlcjo6TW9tZW50dW1FdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViS2l0OjpN
b21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6fk1vbWVudHVtRXZlbnREaXNwYXRjaGVyKToKKyAgICAg
ICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmV2ZW50U2hvdWxkU3RhcnRTeW50
aGV0aWNNb21lbnR1bVBoYXNlIGNvbnN0KToKKyAgICAgICAgSWYgd2UgaGF2ZSBldmVyeXRoaW5n
IHdlIG5lZWQgKGEgc2Nyb2xsaW5nIGN1cnZlIC0gd2hpY2ggYWxzbyBpbXBsaWVzCisgICAgICAg
IHRoYXQgdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAtIGFuZCByYXcgcGxhdGZvcm0gZGVsdGFzKSwg
YW5kIHRoZSBldmVudAorICAgICAgICBpcyBhIG1vbWVudHVtIGJlZ2luIGV2ZW50LCB3ZSBjYW4g
dXNlIGl0IHRvIHN0YXJ0IGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNlLiAKKworICAgICAgICAo
V2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAg
ICAgIFN0YXJ0IG9yIHN0b3AgdGhlIG1vbWVudHVtIHBoYXNlIGFzIGFwcHJvcHJpYXRlLgorICAg
ICAgICBSZWNvcmQgYW55IGluY29taW5nIGZpbmdlcnMtZG93biBwaGFzZSBldmVudHMgaW4gYSBy
b2xsaW5nIGV2ZW50IGhpc3Rvcnkgc3RydWN0dXJlLgorICAgICAgICBCbG9jayBwbGF0Zm9ybS1l
dmVudC1kcml2ZW4gZXZlbnRzIGZyb20gYmVpbmcgZnVydGhlciBoYW5kbGVkIGJ5IFdlYktpdAor
ICAgICAgICBpZiB3ZSBhcmUgaW5zaWRlIGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNlLCBzaW5j
ZSB3ZSdsbCBiZSByZXBsYWNpbmcgdGhlbS4KKworICAgICAgICAoV2ViS2l0OjphcHBLaXRTY3Jv
bGxNdWx0aXBsaWVyRm9yRXZlbnQpOgorICAgICAgICBEZXRlcm1pbmUgdGhlIEFwcEtpdCBzY3Jv
bGwgbXVsaXBsaWVyICgiYWNjZWxlcmF0ZWQiIHZzICJ1bmFjY2VsZXJhdGVkIgorICAgICAgICBk
ZWx0YXMgaW4gTlNFdmVudCBwYXJsYW5jZSkgZnJvbSB0aGUgZXZlbnQgdmlhIGRpdmlzaW9uLgor
CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFN5bnRo
ZXRpY01vbWVudHVtRXZlbnQpOgorICAgICAgICBEaXNwYXRjaCBhIHN5bnRoZXRpYyBldmVudCB3
aXRoIHRoZSBnaXZlbiBtb21lbnR1bSBwaGFzZSBhbmQgZGVsdGEuCisgICAgICAgIFdlIGJvcnJv
dyBzb21lIHByb3BlcnRpZXMgZnJvbSB0aGUgZXZlbnQgdGhhdCBpbml0aWF0ZWQgdGhlIG1vbWVu
dHVtCisgICAgICAgIHBoYXNlIChlLmcuIHRoZSBwb3NpdGlvbiksIGFuZCBzb21lIGZyb20gd2hh
dGV2ZXIgZXZlbnQgd2UndmUgbW9zdAorICAgICAgICByZWNlbnRseSBzZWVuIChldmVuIGlmIHdl
IHRvbGQgdGhlIHJlc3Qgb2YgV2ViS2l0IHRvIGlnbm9yZSBpdCksIHNvCisgICAgICAgIHRoYXQg
d2UgZ2V0IHRoZSBtb3N0IHVwLXRvLWRhdGUgc3RhdGUgZm9yIGUuZy4gdGhlIGtleWJvYXJkIG1v
ZGlmaWVycy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlk
U3RhcnRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgUmVjb3JkIHJlbGV2YW50IGluZm9ybWF0aW9u
IGFib3V0IHRoZSBzdGFydCBldmVudCwgZ2VuZXJhdGUgdGhlCisgICAgICAgIG1vbWVudHVtIGN1
cnZlLCBhbmQgc3RhcnQgYSBmdWxsLXJhdGUgZGlzcGxheSBsaW5rLiBBbHNvLCBzZW5kIGEgbW9t
ZW50dW0KKyAgICAgICAgYmVnaW4gZXZlbnQsIHNpbmNlIHdlIGJsb2NrZWQgdGhlIHJlYWwgb25l
LgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRFbmRNb21l
bnR1bVBoYXNlKToKKyAgICAgICAgU2VuZCBhIG1vbWVudHVtIGVuZGVkIGV2ZW50LCBzaHV0IGRv
d24gdGhlIGRpc3BsYXkgbGluaywgYW5kIHJlc2V0IGFsbAorICAgICAgICBwZXItZ2VzdHVyZSBz
dGF0ZS4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c2V0U2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICBTdG9yZSBTY3JvbGxpbmdBY2NlbGVy
YXRpb25DdXJ2ZXMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0OjpNb21l
bnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheUlEIGNvbnN0KToKKyAgICAgICAgTG9vayB1cCB0
aGUgZGlzcGxheUlEIGZvciB0aGUgY3VycmVudCBnZXN0dXJlJ3MgcGFnZS4KKworICAgICAgICAo
V2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c3RhcnREaXNwbGF5TGluayk6CisgICAg
ICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdG9wRGlzcGxheUxpbmspOgor
ICAgICAgICBTdGFydCBhbmQgc3RvcCBhIGRpc3BsYXkgbGluaywgd2hpY2ggd2lsbCAtIGluIGEg
cm91bmRhYm91dCBtYW5uZXIgLQorICAgICAgICBldmVudHVhbGx5IGNhbGwgYmFjayBpbnRvIGRp
c3BsYXlXYXNSZWZyZXNoZWQuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERpc3Bh
dGNoZXI6OndpbmRvd1NjcmVlbkRpZENoYW5nZSk6CisgICAgICAgIFN0b3JlIERpc3BsYXlJRHMg
b24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZCk6CisgICAgICAgIFdoZW4gdGhlIGRpc3BsYXkg
bGluayBjYWxscyB1cyBiYWNrLCBlbWl0IGEgc2luZ2xlIG1vbWVudHVtIGNoYW5nZWQKKyAgICAg
ICAgZXZlbnQgb2Ygc3VmZmljaWVudCBkZWx0YSB0byBtb3ZlIHVzIHRvIHRoZSBkZXNpcmVkIG9m
ZnNldCBhbG9uZyB0aGUgY3VydmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERp
c3BhdGNoZXI6OmRpZFNjcm9sbFdpdGhJbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXQ6Ok1vbWVu
dHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTY3JvbGwpOgorICAgICAgICBSZWNvcmQgaW5jb21pbmcg
c2Nyb2xsaW5nIGV2ZW50cyBpbnRvIGEgcm9sbGluZyBoaXN0b3J5IGRlcXVlLgorCisgICAgICAg
IChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpidWlsZE9mZnNldFRhYmxlV2l0aElu
aXRpYWxEZWx0YSk6CisgICAgICAgIENvbXB1dGUgdGhlIG9mZnNldHMgZm9yIHRoZSBlbnRpcmUg
ImlkZWFsIGN1cnZlIiB0YWJsZSAoYXQgNjBIeikgYnkKKyAgICAgICAgcnVubmluZyB0aGUgYW5p
bWF0aW9uIGFuZCBhY2N1bXVsYXRpbmcgdGhlIGRlbHRhcy4KKworICAgICAgICAoV2ViS2l0Ojpp
bnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpv
ZmZzZXRBdFRpbWUpOgorICAgICAgICBJbnRlcnBvbGF0ZSBhbG9uZyB0aGUgImlkZWFsIGN1cnZl
IiB0byBkZXRlcm1pbmUgdGhlIGludGVuZGVkIG9mZnNldAorICAgICAgICBhdCBhIGdpdmVuIHRp
bWUuCisKKyAgICAgICAgKFdlYktpdDo6bW9tZW50dW1EZWNheVJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6Y29tcHV0ZU5leHREZWx0YSk6CisgICAgICAg
IENvbXB1dGUgdGhlIG5leHQgZGVsdGEgZ2l2ZW4gYSBkZWx0YSAoYW5kIHRoZSBldmVudCBoaXN0
b3J5KSBieSBhcHBseWluZworICAgICAgICBhIGJpdCBvZiBleHBvbmVudGlhbCBkZWNheSBhbmQg
dGhlbiBwYXNzaW5nIGl0IHRocm91Z2ggdGhlCisgICAgICAgIFNjcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlLiBXZSByZXR1cm4gYm90aCB0aGUgdW5hY2NlbGVyYXRlZAorICAgICAgICBhbmQgYWNj
ZWxlcmF0ZWQgZGVsdGFzLCBiZWNhdXNlIHRoZSBpbnB1dCB0byB0aGUgbmV4dCBpdGVyYXRpb24g
b2YKKyAgICAgICAgY29tcHV0ZU5leHREZWx0YSBpcyB0aGUgdW5hY2NlbGVyYXRlZCBkZWx0YSwg
YnV0IHRoZSBkZWx0YSBhcHBsaWVkCisgICAgICAgIHRvIHRoZSBhY3R1YWwgc2Nyb2xsIHBvc2l0
aW9uIGlzIHRoZSBhY2NlbGVyYXRlZCBkZWx0YS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oOiBBZGRlZC4KKwogMjAyMS0xMS0yOSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGJ1
aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oIGIvU291cmNl
L1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAppbmRleCA0MmNhYTU3NWVjOGZlMmYwMTg4Mjc3OWE0
YjQzMzFiZGFjYjI3YmZmLi5iMjYzZWU0NjQ4NTY2NjVjZTkwZjc4M2Q2Y2U3ZTBkZWQ5YWVlMDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTg3Niw2ICs4NzYsMTAgQEAKICNkZWZpbmUg
RU5BQkxFX1dIRUVMX0VWRU5UX0xBVENISU5HIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFD
KQorI2RlZmluZSBFTkFCTEVfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUiAxCisjZW5kaWYKKwog
I2lmICFkZWZpbmVkKEVOQUJMRV9TQ1JPTExJTkdfVEhSRUFEKQogI2lmIFVTRShOSUNPU0lBKQog
I2RlZmluZSBFTkFCTEVfU0NST0xMSU5HX1RIUkVBRCAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL21hYy9JT0tpdFNQSU1hYy5oCmluZGV4IDE5ZDVlYjg0ODBhNmJjMWJkZTUxMzhiN2Q5
NTNjOTY4ODgwOTIyZTcuLjE2NGQ3MDA3MmQ1NmQ2YmY3MmI1ZmY0MDgwZTNmODM5YzkzNzMwM2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5oCkBAIC04
NCw2ICs4NCw3IEBAIGVudW0gewogdHlwZWRlZiB1aW50MzJfdCBJT0hJREV2ZW50VHlwZTsKIAog
dHlwZWRlZiB1aW50MzJfdCBJT0hJREV2ZW50RmllbGQ7Cit0eXBlZGVmIHVpbnQ2NF90IElPSElE
RXZlbnRTZW5kZXJJRDsKIAogI2lmZGVmIF9fTFA2NF9fCiB0eXBlZGVmIGRvdWJsZSBJT0hJREZs
b2F0OwpAQCAtOTksNiArMTAwLDcgQEAgc3RhdGljIGNvbnN0IElPSElERXZlbnRGaWVsZCBrSU9I
SURFdmVudEZpZWxkU2Nyb2xsWSA9IChrSU9ISURFdmVudEZpZWxkU2Nyb2xsQmEKIAogdWludDY0
X3QgSU9ISURFdmVudEdldFRpbWVTdGFtcChJT0hJREV2ZW50UmVmKTsKIElPSElERmxvYXQgSU9I
SURFdmVudEdldEZsb2F0VmFsdWUoSU9ISURFdmVudFJlZiwgSU9ISURFdmVudEZpZWxkKTsKK0lP
SElERXZlbnRTZW5kZXJJRCBJT0hJREV2ZW50R2V0U2VuZGVySUQoSU9ISURFdmVudFJlZik7CiAK
IFdURl9FWFRFUk5fQ19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCBkNWU3YThj
YzExZWY2MGU1YmM3YTBjYzc4NjI3OGI4ZWNiMzFmZGViLi40NGUwYTdhY2I3YjUzZDYwYjQ3YWJj
NDZmOWRlMWRjZDlkZGVmY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xv
Z2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtOTEsNiAr
OTEsNyBAQCBleHRlcm4gIkMiIHsKICAgICBNKFJlbW90ZUxheWVyVHJlZSkgXAogICAgIE0oUmVz
aXplKSBcCiAgICAgTShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKSBcCisgICAgTShTY3JvbGxBbmlt
YXRpb25zKSBcCiAgICAgTShTY3JvbGxpbmcpIFwKICAgICBNKFNlbGVjdGlvbikgXAogICAgIE0o
U2VydmljZVdvcmtlcikgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xs
aW5nQWNjZWxlcmF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3MmRlYzQzYzFiN2Y1NWE2OTFhZGJh
ZTk3M2NiZDkwNjk4MDBiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmUuaCIKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorCisj
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmUoZmxvYXQgZ2FpbkxpbmVhciwgZmxvYXQgZ2FpblBhcmFib2xpYywgZmxvYXQgZ2FpbkN1
YmljLCBmbG9hdCBnYWluUXVhcnRpYywgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyLCBmbG9hdCB0
YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCBmbG9hdCByZXNvbHV0aW9uKQorICAgIDogbV9wYXJh
bWV0ZXJzIHsgZ2FpbkxpbmVhciwgZ2FpblBhcmFib2xpYywgZ2FpbkN1YmljLCBnYWluUXVhcnRp
YywgdGFuZ2VudFNwZWVkTGluZWFyLCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCByZXNvbHV0
aW9uIH0KK3sKK30KKworU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgU2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmU6OmludGVycG9sYXRlKGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZl
JiBmcm9tLCBjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgdG8sIGZsb2F0IGFtb3Vu
dCkKK3sKKyAgICBhdXRvIGludGVycG9sYXRlID0gWyZdIChmbG9hdCBhLCBmbG9hdCBiKSAtPiBm
bG9hdCB7CisgICAgICAgIHJldHVybiBhICsgYW1vdW50ICogKGIgLSBhKTsKKyAgICB9OworCisg
ICAgYXV0byBnYWluTGluZWFyID0gaW50ZXJwb2xhdGUoZnJvbS5tX3BhcmFtZXRlcnMuZ2Fpbkxp
bmVhciwgdG8ubV9wYXJhbWV0ZXJzLmdhaW5MaW5lYXIpOworICAgIGF1dG8gZ2FpblBhcmFib2xp
YyA9IGludGVycG9sYXRlKGZyb20ubV9wYXJhbWV0ZXJzLmdhaW5QYXJhYm9saWMsIHRvLm1fcGFy
YW1ldGVycy5nYWluUGFyYWJvbGljKTsKKyAgICBhdXRvIGdhaW5DdWJpYyA9IGludGVycG9sYXRl
KGZyb20ubV9wYXJhbWV0ZXJzLmdhaW5DdWJpYywgdG8ubV9wYXJhbWV0ZXJzLmdhaW5DdWJpYyk7
CisgICAgYXV0byBnYWluUXVhcnRpYyA9IGludGVycG9sYXRlKGZyb20ubV9wYXJhbWV0ZXJzLmdh
aW5RdWFydGljLCB0by5tX3BhcmFtZXRlcnMuZ2FpblF1YXJ0aWMpOworCisgICAgYXV0byB0YW5n
ZW50U3BlZWRMaW5lYXIgPSBpbnRlcnBvbGF0ZShmcm9tLm1fcGFyYW1ldGVycy50YW5nZW50U3Bl
ZWRMaW5lYXIsIHRvLm1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRMaW5lYXIpOworICAgIGF1dG8g
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCA9IGludGVycG9sYXRlKGZyb20ubV9wYXJhbWV0ZXJz
LnRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QsIHRvLm1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQ
YXJhYm9saWNSb290KTsKKworICAgIHJldHVybiB7IGdhaW5MaW5lYXIsIGdhaW5QYXJhYm9saWMs
IGdhaW5DdWJpYywgZ2FpblF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwgdGFuZ2VudFNwZWVk
UGFyYWJvbGljUm9vdCwgZnJvbS5tX3BhcmFtZXRlcnMucmVzb2x1dGlvbiB9OworfQorCit2b2lk
IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpjb21wdXRlSW50ZXJtZWRpYXRlVmFsdWVzSWZO
ZWVkZWQoKQoreworICAgIGlmIChtX2ludGVybWVkaWF0ZXMpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2ludGVybWVkaWF0ZXMgPSBDb21wdXRlZEludGVybWVkaWF0ZVZhbHVlcyB7IH07CisKKyAg
ICBmbG9hdCB0YW5nZW50SW5pdGlhbFk7CisgICAgbV9pbnRlcm1lZGlhdGVzLT50YW5nZW50U3Rh
cnRYID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworICAgIG1faW50ZXJtZWRp
YXRlcy0+ZmFsbG9mZlN0YXJ0WCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsK
KworICAgIGF1dG8gcXVhcnRpY1Nsb3BlID0gWyZdKGZsb2F0IHgpIHsKKyAgICAgICAgcmV0dXJu
ICg0ICogc3RkOjpwb3coeCwgMykgKiBzdGQ6OnBvdyhtX3BhcmFtZXRlcnMuZ2FpblF1YXJ0aWMs
IDQpKSArICgzICogc3RkOjpwb3coeCwgMikgKiBzdGQ6OnBvdyhtX3BhcmFtZXRlcnMuZ2FpbkN1
YmljLCAzKSkgKyAoMiAqIHggKiBzdGQ6OnBvdyhtX3BhcmFtZXRlcnMuZ2FpblBhcmFib2xpYywg
MikpICsgbV9wYXJhbWV0ZXJzLmdhaW5MaW5lYXI7CisgICAgfTsKKworICAgIGlmIChtX3BhcmFt
ZXRlcnMudGFuZ2VudFNwZWVkTGluZWFyKSB7CisgICAgICAgIHRhbmdlbnRJbml0aWFsWSA9IGV2
YWx1YXRlUXVhcnRpYyhtX3BhcmFtZXRlcnMudGFuZ2VudFNwZWVkTGluZWFyKTsKKyAgICAgICAg
bV9pbnRlcm1lZGlhdGVzLT50YW5nZW50U2xvcGUgPSBxdWFydGljU2xvcGUobV9wYXJhbWV0ZXJz
LnRhbmdlbnRTcGVlZExpbmVhcik7CisgICAgICAgIG1faW50ZXJtZWRpYXRlcy0+dGFuZ2VudElu
dGVyY2VwdCA9IHRhbmdlbnRJbml0aWFsWSAtIG1faW50ZXJtZWRpYXRlcy0+dGFuZ2VudFNsb3Bl
ICogbV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZExpbmVhcjsKKyAgICAgICAgbV9pbnRlcm1lZGlh
dGVzLT50YW5nZW50U3RhcnRYID0gbV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZExpbmVhcjsKKwor
ICAgICAgICBpZiAobV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHkxID0gbV9pbnRlcm1lZGlhdGVzLT50YW5nZW50U2xvcGUgKiBtX3Bh
cmFtZXRlcnMudGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCArIG1faW50ZXJtZWRpYXRlcy0+dGFu
Z2VudEludGVyY2VwdDsKKyAgICAgICAgICAgIG1faW50ZXJtZWRpYXRlcy0+ZmFsbG9mZlNsb3Bl
ID0gMiAqIHkxICogbV9pbnRlcm1lZGlhdGVzLT50YW5nZW50U2xvcGU7CisgICAgICAgICAgICBt
X2ludGVybWVkaWF0ZXMtPmZhbGxvZmZJbnRlcmNlcHQgPSBzdGQ6OnBvdyh5MSwgMikgLSBtX2lu
dGVybWVkaWF0ZXMtPmZhbGxvZmZTbG9wZSAqIG1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQYXJh
Ym9saWNSb290OworICAgICAgICAgICAgbV9pbnRlcm1lZGlhdGVzLT5mYWxsb2ZmU3RhcnRYID0g
bV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3Q7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKG1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQYXJhYm9saWNSb290KSB7CisgICAg
ICAgIHRhbmdlbnRJbml0aWFsWSA9IGV2YWx1YXRlUXVhcnRpYyhtX3BhcmFtZXRlcnMudGFuZ2Vu
dFNwZWVkUGFyYWJvbGljUm9vdCk7CisgICAgICAgIG1faW50ZXJtZWRpYXRlcy0+ZmFsbG9mZlNs
b3BlID0gcXVhcnRpY1Nsb3BlKG1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQYXJhYm9saWNSb290
KTsKKyAgICAgICAgbV9pbnRlcm1lZGlhdGVzLT5mYWxsb2ZmSW50ZXJjZXB0ID0gc3RkOjpwb3co
dGFuZ2VudEluaXRpYWxZLCAyKSAtIG1faW50ZXJtZWRpYXRlcy0+ZmFsbG9mZlNsb3BlICogIG1f
cGFyYW1ldGVycy50YW5nZW50U3BlZWRQYXJhYm9saWNSb290OworICAgICAgICBtX2ludGVybWVk
aWF0ZXMtPnRhbmdlbnRTdGFydFggPSBtX3BhcmFtZXRlcnMudGFuZ2VudFNwZWVkUGFyYWJvbGlj
Um9vdDsKKyAgICB9Cit9CisKK2Zsb2F0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpldmFs
dWF0ZVF1YXJ0aWMoZmxvYXQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjpwb3cobV9wYXJh
bWV0ZXJzLmdhaW5RdWFydGljICogeCwgNCkgKyBzdGQ6OnBvdyhtX3BhcmFtZXRlcnMuZ2FpbkN1
YmljICogeCwgMykgKyBzdGQ6OnBvdyhtX3BhcmFtZXRlcnMuZ2FpblBhcmFib2xpYyAqIHgsIDIp
ICsgbV9wYXJhbWV0ZXJzLmdhaW5MaW5lYXIgKiB4OworfQorCitmbG9hdCBTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZTo6YWNjZWxlcmF0aW9uRmFjdG9yKGZsb2F0IHZhbHVlKQoreworICAgIGNv
bnN0ZXhwciBmbG9hdCBmcmFtZVJhdGUgPSA2Ny5mOyAvLyBXaHkgaXMgdGhpcyA2NyBhbmQgbm90
IDYwPworICAgIGNvbnN0ZXhwciBmbG9hdCBjdXJzb3JTY2FsZSA9IDk2LmYgLyBmcmFtZVJhdGU7
CisKKyAgICBjb21wdXRlSW50ZXJtZWRpYXRlVmFsdWVzSWZOZWVkZWQoKTsKKworICAgIGZsb2F0
IG11bHRpcGxpZXI7CisgICAgZmxvYXQgZGV2aWNlU2NhbGUgPSBtX3BhcmFtZXRlcnMucmVzb2x1
dGlvbiAvIGZyYW1lUmF0ZTsKKyAgICB2YWx1ZSAvPSBkZXZpY2VTY2FsZTsKKworICAgIGlmICh2
YWx1ZSA8PSBtX2ludGVybWVkaWF0ZXMtPnRhbmdlbnRTdGFydFgpCisgICAgICAgIG11bHRpcGxp
ZXIgPSBldmFsdWF0ZVF1YXJ0aWModmFsdWUpOworICAgIGVsc2UgaWYgKHZhbHVlIDw9IG1faW50
ZXJtZWRpYXRlcy0+ZmFsbG9mZlN0YXJ0WCAmJiBtX2ludGVybWVkaWF0ZXMtPnRhbmdlbnRTdGFy
dFggPT0gbV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZExpbmVhcikKKyAgICAgICAgbXVsdGlwbGll
ciA9IG1faW50ZXJtZWRpYXRlcy0+dGFuZ2VudFNsb3BlICogdmFsdWUgKyBtX2ludGVybWVkaWF0
ZXMtPnRhbmdlbnRJbnRlcmNlcHQ7CisgICAgZWxzZQorICAgICAgICBtdWx0aXBsaWVyID0gc3Rk
OjpzcXJ0KG1faW50ZXJtZWRpYXRlcy0+ZmFsbG9mZlNsb3BlICogdmFsdWUgKyBtX2ludGVybWVk
aWF0ZXMtPmZhbGxvZmZJbnRlcmNlcHQpOworCisgICAgcmV0dXJuIG11bHRpcGxpZXIgKiBjdXJz
b3JTY2FsZTsKK30KKwordm9pZCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZW5jb2RlKElQ
Qzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fcGFyYW1ldGVy
cy5nYWluTGluZWFyOworICAgIGVuY29kZXIgPDwgbV9wYXJhbWV0ZXJzLmdhaW5QYXJhYm9saWM7
CisgICAgZW5jb2RlciA8PCBtX3BhcmFtZXRlcnMuZ2FpbkN1YmljOworICAgIGVuY29kZXIgPDwg
bV9wYXJhbWV0ZXJzLmdhaW5RdWFydGljOworCisgICAgZW5jb2RlciA8PCBtX3BhcmFtZXRlcnMu
dGFuZ2VudFNwZWVkTGluZWFyOworICAgIGVuY29kZXIgPDwgbV9wYXJhbWV0ZXJzLnRhbmdlbnRT
cGVlZFBhcmFib2xpY1Jvb3Q7CisKKyAgICBlbmNvZGVyIDw8IG1fcGFyYW1ldGVycy5yZXNvbHV0
aW9uOworfQorCitzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBmbG9hdCBnYWluTGluZWFyOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZ2FpbkxpbmVh
cikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgZmxvYXQgZ2FpblBhcmFib2xp
YzsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdhaW5QYXJhYm9saWMpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGZsb2F0IGdhaW5DdWJpYzsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGdhaW5DdWJpYykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgZmxv
YXQgZ2FpblF1YXJ0aWM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShnYWluUXVhcnRpYykpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBmbG9hdCB0YW5nZW50U3BlZWRMaW5l
YXI7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0YW5nZW50U3BlZWRMaW5lYXIpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGZsb2F0IHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jv
b3Q7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0YW5nZW50U3BlZWRQYXJhYm9saWNSb290KSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGZsb2F0IHJlc29sdXRpb247Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgZ2FpbkxpbmVhciwgZ2FpblBhcmFib2xpYywgZ2Fp
bkN1YmljLCBnYWluUXVhcnRpYywgdGFuZ2VudFNwZWVkTGluZWFyLCB0YW5nZW50U3BlZWRQYXJh
Ym9saWNSb290LCByZXNvbHV0aW9uIH0gfTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIGN1cnZlKQor
eworICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworCisgICAgdHMgPDwgIlNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIjsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZ2Fpbkxp
bmVhciIsIGN1cnZlLm1fcGFyYW1ldGVycy5nYWluTGluZWFyKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoImdhaW5QYXJhYm9saWMiLCBjdXJ2ZS5tX3BhcmFtZXRlcnMuZ2FpblBhcmFib2xpYyk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJnYWluQ3ViaWMiLCBjdXJ2ZS5tX3BhcmFtZXRlcnMuZ2FpbkN1
YmljKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImdhaW5RdWFydGljIiwgY3VydmUubV9wYXJhbWV0
ZXJzLmdhaW5RdWFydGljKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInRhbmdlbnRTcGVlZExpbmVh
ciIsIGN1cnZlLm1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRMaW5lYXIpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgidGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCIsIGN1cnZlLm1fcGFyYW1ldGVycy50
YW5nZW50U3BlZWRQYXJhYm9saWNSb290KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlc29sdXRp
b24iLCBjdXJ2ZS5tX3BhcmFtZXRlcnMucmVzb2x1dGlvbik7CisKKyAgICByZXR1cm4gdHM7Cit9
CisKKyNpZiAhUExBVEZPUk0oTUFDKQorCitzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlPiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZl
bnQoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpCit7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTI1Njk2ZTQxYjFk
NjA1MTNkNzUwZWM4NjA4MzVmMmRkZmZmMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaApAQCAtMCwwICsxLDEwMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5U
X0RJU1BBVENIRVIpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERlY29kZXI7
CitjbGFzcyBFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmF0aXZl
V2ViV2hlZWxFdmVudDsKKworY2xhc3MgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgeworcHVi
bGljOgorICAgIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKGZsb2F0IGdhaW5MaW5lYXIsIGZs
b2F0IGdhaW5QYXJhYm9saWMsIGZsb2F0IGdhaW5DdWJpYywgZmxvYXQgZ2FpblF1YXJ0aWMsIGZs
b2F0IHRhbmdlbnRTcGVlZExpbmVhciwgZmxvYXQgdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwg
ZmxvYXQgcmVzb2x1dGlvbik7CisKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZT4gZnJvbU5hdGl2ZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hl
ZWxFdmVudCYpOworCisgICAgc3RhdGljIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIGludGVy
cG9sYXRlKGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlJiBmcm9tLCBjb25zdCBTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgdG8sIGZsb2F0IGFtb3VudCk7CisKKyAgICBmbG9hdCBh
Y2NlbGVyYXRpb25GYWN0b3IoZmxvYXQpOworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVy
JikgY29uc3Q7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmU+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9wYXJhbWV0ZXJzLmdhaW5MaW5lYXIgPT0gb3RoZXIubV9wYXJhbWV0ZXJzLmdh
aW5MaW5lYXIKKyAgICAgICAgICAgICYmIG1fcGFyYW1ldGVycy5nYWluUGFyYWJvbGljID09IG90
aGVyLm1fcGFyYW1ldGVycy5nYWluUGFyYWJvbGljCisgICAgICAgICAgICAmJiBtX3BhcmFtZXRl
cnMuZ2FpbkN1YmljID09IG90aGVyLm1fcGFyYW1ldGVycy5nYWluQ3ViaWMKKyAgICAgICAgICAg
ICYmIG1fcGFyYW1ldGVycy5nYWluUXVhcnRpYyA9PSBvdGhlci5tX3BhcmFtZXRlcnMuZ2FpblF1
YXJ0aWMKKyAgICAgICAgICAgICYmIG1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRMaW5lYXIgPT0g
b3RoZXIubV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZExpbmVhcgorICAgICAgICAgICAgJiYgbV9w
YXJhbWV0ZXJzLnRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QgPT0gb3RoZXIubV9wYXJhbWV0ZXJz
LnRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QKKyAgICAgICAgICAgICYmIG1fcGFyYW1ldGVycy5y
ZXNvbHV0aW9uID09IG90aGVyLm1fcGFyYW1ldGVycy5yZXNvbHV0aW9uOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgCitwcml2YXRlOgorICAg
IGZyaWVuZCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZSYpOworCisgICAgdm9pZCBjb21wdXRlSW50ZXJtZWRpYXRlVmFs
dWVzSWZOZWVkZWQoKTsKKworICAgIGZsb2F0IGV2YWx1YXRlUXVhcnRpYyhmbG9hdCkgY29uc3Q7
CisKKyAgICBzdHJ1Y3QgeworICAgICAgICBmbG9hdCBnYWluTGluZWFyIHsgMCB9OworICAgICAg
ICBmbG9hdCBnYWluUGFyYWJvbGljIHsgMCB9OworICAgICAgICBmbG9hdCBnYWluQ3ViaWMgeyAw
IH07CisgICAgICAgIGZsb2F0IGdhaW5RdWFydGljIHsgMCB9OworICAgICAgICBmbG9hdCB0YW5n
ZW50U3BlZWRMaW5lYXIgeyAwIH07CisgICAgICAgIGZsb2F0IHRhbmdlbnRTcGVlZFBhcmFib2xp
Y1Jvb3QgeyAwIH07CisgICAgICAgIGZsb2F0IHJlc29sdXRpb24geyAwIH07CisgICAgfSBtX3Bh
cmFtZXRlcnM7CisKKyAgICBzdHJ1Y3QgQ29tcHV0ZWRJbnRlcm1lZGlhdGVWYWx1ZXMgeworICAg
ICAgICBmbG9hdCB0YW5nZW50U3RhcnRYIHsgMCB9OworICAgICAgICBmbG9hdCB0YW5nZW50U2xv
cGUgeyAwIH07CisgICAgICAgIGZsb2F0IHRhbmdlbnRJbnRlcmNlcHQgeyAwIH07CisgICAgICAg
IGZsb2F0IGZhbGxvZmZTdGFydFggeyAwIH07CisgICAgICAgIGZsb2F0IGZhbGxvZmZTbG9wZSB7
IDAgfTsKKyAgICAgICAgZmxvYXQgZmFsbG9mZkludGVyY2VwdCB7IDAgfTsKKyAgICB9OworCisg
ICAgc3RkOjpvcHRpb25hbDxDb21wdXRlZEludGVybWVkaWF0ZVZhbHVlcz4gbV9pbnRlcm1lZGlh
dGVzOworfTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wMGNiYzM2NzgyZDEwMjM0OGNkMGI1YjBlMjY3MjJhM2EyYTUwZTFkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1Njcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlTWFjLm1tCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oIgorCisj
aWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpICYmIFBMQVRGT1JNKE1BQykKKwor
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEku
aD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvSU9LaXRTUEkuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0YXRpYyBmbG9hdCBmcm9tRml4ZWRQb2ludChmbG9hdCB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdmFsdWUgLyA2NTUzNi4wZjsKK30KKworc3RhdGljIGZsb2F0IHJlYWRGaXhlZFBvaW50
UGFyYW1ldGVyKE5TRGljdGlvbmFyeSAqcGFyYW1ldGVycywgY29uc3QgY2hhciAqa2V5KQorewor
ICAgIHJldHVybiBmcm9tRml4ZWRQb2ludChbW3BhcmFtZXRlcnMgb2JqZWN0Rm9yS2V5OkAoa2V5
KV0gZmxvYXRWYWx1ZV0pOworfQorCitzdGF0aWMgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUg
ZnJvbUlPSElEQ3VydmUoTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJzLCBmbG9hdCByZXNvbHV0aW9u
KQoreworICAgIGF1dG8gZ2FpbkxpbmVhciA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBhcmFt
ZXRlcnMsIGtISURBY2NlbEdhaW5MaW5lYXJLZXkpOworICAgIGF1dG8gZ2FpblBhcmFib2xpYyA9
IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBhcmFtZXRlcnMsIGtISURBY2NlbEdhaW5QYXJhYm9s
aWNLZXkpOworICAgIGF1dG8gZ2FpbkN1YmljID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFy
YW1ldGVycywga0hJREFjY2VsR2FpbkN1YmljS2V5KTsKKyAgICBhdXRvIGdhaW5RdWFydGljID0g
cmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVycywga0hJREFjY2VsR2FpblF1YXJ0aWNL
ZXkpOworCisgICAgYXV0byB0YW5nZW50U3BlZWRMaW5lYXIgPSByZWFkRml4ZWRQb2ludFBhcmFt
ZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxUYW5nZW50U3BlZWRMaW5lYXJLZXkpOworICAgIGF1
dG8gdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBh
cmFtZXRlcnMsIGtISURBY2NlbFRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3RLZXkpOworCisgICAg
cmV0dXJuIHsgZ2FpbkxpbmVhciwgZ2FpblBhcmFib2xpYywgZ2FpbkN1YmljLCBnYWluUXVhcnRp
YywgdGFuZ2VudFNwZWVkTGluZWFyLCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290LCByZXNvbHV0
aW9uIH07Cit9CisKK3N0YXRpYyBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBmcm9tSU9ISURD
dXJ2ZUFycmF5V2l0aEFjY2VsZXJhdGlvbihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqaW9ISURD
dXJ2ZXMsIGZsb2F0IGRlc2lyZWRBY2NlbGVyYXRpb24sIGZsb2F0IHJlc29sdXRpb24pCit7Cisg
ICAgX19ibG9jayBzaXplX3QgY3VycmVudEluZGV4ID0gMDsKKyAgICBfX2Jsb2NrIFZlY3Rvcjxz
dGQ6OnBhaXI8ZmxvYXQsIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPj4gY3VydmVzOworCisg
ICAgW2lvSElEQ3VydmVzIGVudW1lcmF0ZU9iamVjdHNVc2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5
ICpwYXJhbWV0ZXJzLCBOU1VJbnRlZ2VyIGksIEJPT0wgKikgeworICAgICAgICBhdXRvIGN1cnZl
QWNjZWxlcmF0aW9uID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVycywga0hJREFj
Y2VsSW5kZXhLZXkpOworICAgICAgICBhdXRvIGN1cnZlID0gZnJvbUlPSElEQ3VydmUocGFyYW1l
dGVycywgcmVzb2x1dGlvbik7CisKKyAgICAgICAgaWYgKGRlc2lyZWRBY2NlbGVyYXRpb24gPiBj
dXJ2ZUFjY2VsZXJhdGlvbikKKyAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGk7CisKKyAgICAg
ICAgY3VydmVzLmFwcGVuZCh7IGN1cnZlQWNjZWxlcmF0aW9uLCBjdXJ2ZSB9KTsKKyAgICB9XTsK
KworICAgIC8vIEludGVycG9sYXRpb24gaWYgZGVzaXJlZEFjY2VsZXJhdGlvbiBpcyBpbiBiZXR3
ZWVuIHR3byBjdXJ2ZXMuCisgICAgaWYgKGN1cnZlc1tjdXJyZW50SW5kZXhdLmZpcnN0IDwgZGVz
aXJlZEFjY2VsZXJhdGlvbiAmJiAoY3VycmVudEluZGV4ICsgMSkgPCBjdXJ2ZXMuc2l6ZSgpKSB7
CisgICAgICAgIGNvbnN0IGF1dG8mIGxvd0N1cnZlID0gY3VydmVzW2N1cnJlbnRJbmRleF07Cisg
ICAgICAgIGNvbnN0IGF1dG8mIGhpZ2hDdXJ2ZSA9IGN1cnZlc1tjdXJyZW50SW5kZXggKyAxXTsK
KyAgICAgICAgZmxvYXQgcmF0aW8gPSAoZGVzaXJlZEFjY2VsZXJhdGlvbiAtIGxvd0N1cnZlLmZp
cnN0KSAvIChoaWdoQ3VydmUuZmlyc3QgLSBsb3dDdXJ2ZS5maXJzdCk7CisgICAgICAgIHJldHVy
biBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6aW50ZXJwb2xhdGUobG93Q3VydmUuc2Vjb25k
LCBoaWdoQ3VydmUuc2Vjb25kLCByYXRpbyk7CisgICAgfQorCisgICAgcmV0dXJuIGN1cnZlc1tj
dXJyZW50SW5kZXhdLnNlY29uZDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmU+IGZyb21JT0hJRERldmljZShJT0hJREV2ZW50U2VuZGVySUQgc2Vu
ZGVySUQpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxJT0hJREV2ZW50
U3lzdGVtQ2xpZW50UmVmPj4gY2xpZW50OworICAgIGlmICghY2xpZW50LmdldCgpKQorICAgICAg
ICBjbGllbnQuZ2V0KCkgPSBhZG9wdENGKElPSElERXZlbnRTeXN0ZW1DbGllbnRDcmVhdGVXaXRo
VHlwZShuaWwsIGtJT0hJREV2ZW50U3lzdGVtQ2xpZW50VHlwZVBhc3NpdmUsIG5pbCkpOworCisg
ICAgUmV0YWluUHRyPElPSElEU2VydmljZUNsaWVudFJlZj4gaW9ISURTZXJ2aWNlID0gYWRvcHRD
RihJT0hJREV2ZW50U3lzdGVtQ2xpZW50Q29weVNlcnZpY2VGb3JSZWdpc3RyeUlEKGNsaWVudC5n
ZXQoKS5nZXQoKSwgc2VuZGVySUQpKTsKKyAgICBpZiAoIWlvSElEU2VydmljZSkgeworICAgICAg
ICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3Vy
dmU6OmZyb21JT0hJRERldmljZSBkaWQgbm90IGZpbmQgbWF0Y2hpbmcgSElEIHNlcnZpY2UiKTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIGN1cnZlcyA9
IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KElPSElEU2VydmljZUNsaWVudENv
cHlQcm9wZXJ0eShpb0hJRFNlcnZpY2UuZ2V0KCksIENGU1RSKGtISURTY3JvbGxBY2NlbFBhcmFt
ZXRyaWNDdXJ2ZXNLZXkpKSkpOworICAgIGlmICghY3VydmVzKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbUlP
SElERGV2aWNlIGZhaWxlZCB0byBsb29rIHVwIGN1cnZlcyIpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBzb21lIGFkZGl0aW9u
YWwgZmFsbGJhY2sgdG8gaW1wbGVtZW50IGhlcmUsIHRob3VnaCB0aGlzIHNlZW1zIHVzdWFsbHkg
c3VmZmljaWVudC4KKyAgICBhdXRvIHNjcm9sbEFjY2VsZXJhdGlvblR5cGUgPSBhZG9wdENGKGR5
bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oSU9ISURTZXJ2aWNlQ2xpZW50Q29weVByb3BlcnR5
KGlvSElEU2VydmljZS5nZXQoKSwgQ0ZTVFIoIkhJRFNjcm9sbEFjY2VsZXJhdGlvblR5cGUiKSkp
KTsKKyAgICBpZiAoIXNjcm9sbEFjY2VsZXJhdGlvblR5cGUpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0coU2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tSU9I
SUREZXZpY2UgZmFpbGVkIHRvIGxvb2sgdXAgYWNjZWxlcmF0aW9uIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIHNjcm9sbEFjY2VsZXJhdGlv
biA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihJT0hJRFNlcnZpY2VDbGll
bnRDb3B5UHJvcGVydHkoaW9ISURTZXJ2aWNlLmdldCgpLCBzY3JvbGxBY2NlbGVyYXRpb25UeXBl
LmdldCgpKSkpOworICAgIGlmICghc2Nyb2xsQWNjZWxlcmF0aW9uKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJv
bUlPSElERGV2aWNlIGZhaWxlZCB0byBsb29rIHVwIGFjY2VsZXJhdGlvbiB2YWx1ZSIpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gcmVzb2x1dGlvbiA9
IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihJT0hJRFNlcnZpY2VDbGllbnRD
b3B5UHJvcGVydHkoaW9ISURTZXJ2aWNlLmdldCgpLCBDRlNUUihrSU9ISURTY3JvbGxSZXNvbHV0
aW9uS2V5KSkpKTsKKyAgICBpZiAoIXJlc29sdXRpb24pIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
U2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tSU9ISURE
ZXZpY2UgZmFpbGVkIHRvIGxvb2sgdXAgcmVzb2x1dGlvbiIpOworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBmcm9tSU9ISURDdXJ2ZUFycmF5V2l0aEFj
Y2VsZXJhdGlvbigoTlNBcnJheSAqKWN1cnZlcy5nZXQoKSwgZnJvbUZpeGVkUG9pbnQoWyhOU051
bWJlciAqKXNjcm9sbEFjY2VsZXJhdGlvbi5nZXQoKSBmbG9hdFZhbHVlXSksIGZyb21GaXhlZFBv
aW50KFsoTlNOdW1iZXIgKilyZXNvbHV0aW9uLmdldCgpIGZsb2F0VmFsdWVdKSk7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudChjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50
JiBuYXRpdmVXZWJXaGVlbEV2ZW50KQoreworICAgIE5TRXZlbnQgKmV2ZW50ID0gbmF0aXZlV2Vi
V2hlZWxFdmVudC5uYXRpdmVFdmVudCgpOworCisgICAgYXV0byBjZ0V2ZW50ID0gZXZlbnQuQ0dF
dmVudDsKKyAgICBpZiAoIWNnRXZlbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5p
bWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVu
dCBkaWQgbm90IGZpbmQgQ0cgZXZlbnQiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBhdXRvIGhpZEV2ZW50ID0gYWRvcHRDRihDR0V2ZW50Q29weUlPSElERXZl
bnQoY2dFdmVudCkpOworICAgIGlmICghaGlkRXZlbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
U2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZl
V2hlZWxFdmVudCBkaWQgbm90IGZpbmQgSElEIGV2ZW50Iik7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIGZyb21JT0hJRERldmljZShJT0hJREV2ZW50
R2V0U2VuZGVySUQoaGlkRXZlbnQuZ2V0KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikgJiYgUExBVEZP
Uk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQKaW5kZXggYjEzOGZkZDA1NzA1OGM4NTJkMTAyYmYyMmQ4YTA1MzA0
ZWM1YWYwYi4uYjhkMWNiOWM3ZjJhMzE4MjQyZDRhNzlmY2NhYzdiODQ2MWFjYjBhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CkBAIC0yMjQsNiArMjI0LDcgQEAgU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5j
cHAKIFNoYXJlZC9QcmludEluZm8uY3BwCiBTaGFyZWQvUlRDTmV0d29yay5jcHAKIFNoYXJlZC9S
VENQYWNrZXRPcHRpb25zLmNwcAorU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNw
cAogU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3BwCiBTaGFyZWQvU2Vz
c2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5vLXVuaWZ5CkBAIC04
MTIsNiArODEzLDcgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAorV2Vi
UHJvY2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJs
ZUNvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJv
eHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYTNlN2JiNjY0NzE5MzAyMzBmZTIzZjBh
NjgxYzNlN2EyMzI2ODM1My4uYzhiZTU1ODY5Mjc2ZTUwNjIwYmQzMzVjMDBlNjY2ZGYyYzQ1NGE5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMjIwLDYgKzIyMCw3IEBAIFNoYXJlZC9tYWMv
TmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbQogU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGgubW0K
IFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tCiBTaGFyZWQvbWFjL1ByaW50SW5mb01hYy5t
bQorU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbQogU2hhcmVkL21h
Yy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwCiBTaGFyZWQvbWFjL1NlY0l0ZW1SZXNwb25zZURhdGEu
Y3BwCiBTaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggODBmZDJhYjlmYzhmNjIzYTUzMzhjMDYwYjZhNjhmYmVmMjk5
ZDlhMy4uN2JiZTA5NGViZjgyN2M2NzAyMWFmZmFmYzU2NjQ2OTlkZTY5YzllMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yODk0LDYgKzI4OTQsMTIgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgTmF0aXZlV2ViV2hlZWxF
dmVudCYgZXZlbnQpCiAKICAgICBjbG9zZU92ZXJsYXllZFZpZXdzKCk7CiAKKyNpZiBFTkFCTEUo
TU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBo
YXZlIHRvIGxvb2sgdGhpcyB1cCByZXBlYXRlZGx5LCBidXQgaXQgY2FuIGFsc28gY2hhbmdlIG9j
Y2FzaW9uYWxseS4KKyAgICBpZiAoZXZlbnQubW9tZW50dW1QaGFzZSgpID09IFdlYldoZWVsRXZl
bnQ6OlBoYXNlQmVnYW4gJiYgcHJlZmVyZW5jZXMoKS5tb21lbnR1bVNjcm9sbGluZ0FuaW1hdG9y
RW5hYmxlZCgpKQorICAgICAgICBtX3Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlID0gU2Nyb2xs
aW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50KGV2ZW50KTsKKyNlbmRp
ZgorCiAgICAgaWYgKHdoZWVsRXZlbnRDb2FsZXNjZXIoKS5zaG91bGREaXNwYXRjaEV2ZW50KGV2
ZW50KSkgewogICAgICAgICBhdXRvIGV2ZW50ID0gd2hlZWxFdmVudENvYWxlc2NlcigpLm5leHRF
dmVudFRvRGlzcGF0Y2goKTsKICAgICAgICAgc2VuZFdoZWVsRXZlbnQoKmV2ZW50KTsKQEAgLTI5
NDEsNiArMjk0NywxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZFdoZWVsRXZlbnQoY29uc3Qg
V2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgICAgIHJ1YmJlckJhbmRhYmxlRWRnZXMuc2V0TGVm
dCghbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCkpOwogICAgICAgICBydWJiZXJCYW5kYWJs
ZUVkZ2VzLnNldFJpZ2h0KCFtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0ZW0oKSk7CiAgICAg
fQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgaWYgKGV2ZW50
Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZUJlZ2FuICYmIG1fc2Nyb2xs
aW5nQWNjZWxlcmF0aW9uQ3VydmUgIT0gbV9sYXN0U2VudFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkV2ZW50RGlzcGF0Y2hl
cjo6U2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUobV93ZWJQYWdlSUQsICptX3Njcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlKSwgMCwgeyB9LCBUaHJlYWQ6OlFPUzo6VXNlckludGVyYWN0aXZl
KTsKKyAgICAgICAgbV9sYXN0U2VudFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlID0gbV9zY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKKyAgICB9CisjZW5kaWYKKwogICAgIGNvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OkV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudChtX3dlYlBhZ2VJRCwg
ZXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMpLCAwLCB7IH0sIFRocmVhZDo6UU9TOjpVc2VySW50
ZXJhY3RpdmUpOwogCiAgICAgLy8gTWFudWFsbHkgcGluZyB0aGUgd2ViIHByb2Nlc3MgdG8gY2hl
Y2sgZm9yIHJlc3BvbnNpdmVuZXNzIHNpbmNlIG91ciB3aGVlbApAQCAtMzk0MSw2ICszOTU1LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQsIHN0ZDo6b3B0aW8KICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIHNlbmQoTWVzc2FnZXM6OkV2ZW50RGlzcGF0Y2hlcjo6
UGFnZVNjcmVlbkRpZENoYW5nZShtX3dlYlBhZ2VJRCwgZGlzcGxheUlEKSk7CiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCwgbm9taW5h
bEZyYW1lc1BlclNlY29uZCkpOwogfQogCkBAIC03ODk5LDYgKzc5MTQsMTAgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnJlc2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNldFN0YXRlUmVhc29uKQog
ICAgICAgICBtX3hyU3lzdGVtID0gbnVsbHB0cjsKICAgICB9CiAjZW5kaWYKKworI2lmIEVOQUJM
RShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIG1fbGFzdFNlbnRTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZSA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZChQcm9jZXNzVGVybWluYXRpb25SZWFz
b24gdGVybWluYXRpb25SZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CmluZGV4IGQ1ZmJlOGNjOGU2YTUwZTg4Nzc2ZGJiOTk1NjcyODE1YzExYTdlMjIuLjhkMDc2YzIx
NTI5YjAxMWFjNGY4MDI3ZmMxMmYzNTE5OTI0ZTI0YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUHJvY2Vzc1Rlcm1p
bmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5oIgogI2luY2x1ZGUg
IlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2
ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZVJl
c291cmNlLmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uUmVxdWVzdC5o
IgpAQCAtMzE1OSw2ICszMTYwLDExIEBAIHByaXZhdGU6CiAgICAgV2luZG93S2luZCBtX3dpbmRv
d0tpbmQgeyBXaW5kb3dLaW5kOjpVbnBhcmVudGVkIH07CiAKICAgICBXZWJOb3RpZmljYXRpb25N
YW5hZ2VyTWVzc2FnZUhhbmRsZXIgbV9ub3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXI7
CisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICBzdGQ6Om9wdGlv
bmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBtX3Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlOworICAgIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IG1fbGFz
dFNlbnRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKKyNlbmRpZgogfTsKIAogI2lmZGVmIF9f
T0JKQ19fCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBjYzBlMzg4NjBmYzM5YjI2MDk0ZGRmY2E2ZDdjZDdiYjZmMTE1ZDA2Li44MTA5Njc1
NjQ1MzMxZmRiZmJhNzJkZjFlNzEyNDM2NDYxNGEyYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0OTYsNiArMzQ5Niw5IEBACiAJ
CTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlT3ZlcmxheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRDY0ODI0OTI2NDRCMUFCMDAwMzAzMzUgLyogUmVtb3RlTGF5ZXJUcmVl
TGF5ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxheWVyVHJl
ZUxheWVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDY0ODI0QTI2NDRCMUFC
MDAwMzAzMzUgLyogUmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkyRDY1RDE5NDI3NEI4RTczMDA5QzQxMDEgLyogU2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ2
NUQxOTUyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTJENjVEMTk2Mjc0QjhFODQwMDlDNDEwMSAvKiBTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJENkFCNTNGMTkyQjFD
NEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7IHBhdGggPSBpb3Mv
V0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJENkFCNTQwMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1BERlBhZ2VOdW1iZXJJ
bmRpY2F0b3IubW07IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dL
VGh1bWJuYWlsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUaHVt
Ym5haWxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzc5LDYgKzM3ODIs
OCBAQAogCQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29udGV4dC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0SW5wdXRDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERTlCMTNCMjIzMUY3N0MwMDUyODdCNyAv
KiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJERUFDNUNFMUFDMzY4QkIwMEExOTVEOCAvKiBfV0tGaW5kT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tGaW5kT3B0aW9ucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREVFNzA5RDI3NTVBNDY4MDBGQkY4NjQgLyogTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9tZW50dW1FdmVudERpc3Bh
dGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkRFRTcwOUUyNzU1QTQ2ODAw
RkJGODY0IC8qIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkRGOTU5MzQxOEE0MjQxMjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFZpZXdHZXN0dXJlQ29u
dHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERjlFRUUzMUE3ODFGQjQwMEI2Q0ZCRSAvKiBB
UElGcmFtZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJ
RnJhbWVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRGOUVFRTQxQTc4
MUZCNDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBUElGcmFtZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcw
ODMsNiArNzA4OCw4IEBACiAJCQkJQkMyRDAyMTYxMkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1
bWVudE5hdmlnYXRpb25UeXBlLmggKi8sCiAJCQkJMUFBQjRBOEMxMjk2RjBBMjAwMjM5NTJGIC8q
IFNhbmRib3hFeHRlbnNpb24uaCAqLywKIAkJCQlFMUU1NTJDMzE2QUUwNjVFMDA0RUQ2NTMgLyog
U2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oICovLAorCQkJCTJENjVEMTk2Mjc0QjhF
ODQwMDlDNDEwMSAvKiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHAgKi8sCisJCQkJMkQ2
NUQxOTUyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmggKi8s
CiAJCQkJNUM4MEIzREQyMzY5MEYxMDAwODZFNkRFIC8qIFNlcnZpY2VXb3JrZXJJbml0aWFsaXph
dGlvbkRhdGEuY3BwICovLAogCQkJCTVDODBCM0RCMjM2OTBEOEQwMDg2RTZERSAvKiBTZXJ2aWNl
V29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJMUFGREU2NTcxOTU0QTQyQjAwQzQ4
RkZBIC8qIFNlc3Npb25TdGF0ZS5jcHAgKi8sCkBAIC05ODczLDkgKzk4ODAsOSBAQAogCQk1QzE1
N0EwQTI3MTdDOUYxMDBFRDUyODAgLyogd2VicHVzaGQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTVDQkI2RDREMjcxRjY3Q0MwMEZEMUE1RCAvKiBjb20u
YXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAogCQkJCTUxNjBFOTU0Mjc0Qjg4NzEwMDU2
NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggKi8sCiAJCQkJNTE2MEU5NTMyNzRCODg3MTAwNTY3
Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gKi8sCisJCQkJNUNCQjZENEQyNzFGNjdDQzAwRkQx
QTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxpc3QgKi8sCiAJCQkJNTFGN0JCNzUy
NzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLmggKi8sCiAJCQkJNTFG
N0JCNzQyNzQ0OThCQTAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLm1tICovLAog
CQkJCTUxNjBFOTVDMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCAq
LywKQEAgLTEwNjEyLDYgKzEwNjE5LDggQEAKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQg
LyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk5QjAzM0U3MjI1MjU4MEYzMDA1MDEwNzEgLyog
SVBDVGVzdGluZ0FQSS5jcHAgKi8sCiAJCQkJOUIwMzNFNzEyNTI1ODBGMzAwNTAxMDcxIC8qIElQ
Q1Rlc3RpbmdBUEkuaCAqLywKKwkJCQkyREVFNzA5RTI3NTVBNDY4MDBGQkY4NjQgLyogTW9tZW50
dW1FdmVudERpc3BhdGNoZXIuY3BwICovLAorCQkJCTJERUU3MDlEMjc1NUE0NjgwMEZCRjg2NCAv
KiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFC
RDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEg
LyogUGFnZUJhbm5lci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKQEAgLTExMTc4LDYgKzExMTg3LDcgQEAK
IAkJCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovLAog
CQkJCUMxRTEyM0I5MjBBMTE1NzIwMDI2NDZGNCAvKiBQREZDb250ZXh0TWVudS5oICovLAogCQkJ
CUUxQ0MxQjhGMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9NYWMubW0gKi8sCisJCQkJMkQ2
NUQxOTQyNzRCOEU3MzAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFjLm1t
ICovLAogCQkJCTUxRDEzMDRGMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERhdGEu
Y3BwICovLAogCQkJCTUxRDEzMDUwMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERh
dGEuaCAqLywKIAkJCQk1MUQxMzA1MTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNl
RGF0YS5jcHAgKi8sCkBAIC0xMjQyMywxMyArMTI0MzMsMTMgQEAKIAkJCWlzYSA9IFBCWEhlYWRl
cnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVz
ID0gKAorCQkJCTUxNjBFOTU2Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1QzE1NzlGQzI3MTdBRjUwMDBFRDUyODAgLyogRGFlbW9uVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY3QkI3NzI3NDQ5OEJCMDBDNDVBNzIgLyog
TW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjBFOTVFMjc0
QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxNjBFOTU5Mjc0QzBEODkwMDU2NzM4OCAvKiBQdXNoQXBwQnVuZGxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUY3QkI3QjI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENsaWVudENvbm5lY3Rp
b24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjBFOTVFMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2Nr
QXBwQnVuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTVDMTU3OUZDMjcxN0FGNTAw
MEVENTI4MCAvKiBEYWVtb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjBFOTU2
Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTJDRDY5RjI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbi5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTFGN0JCNzcyNzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE0OTYzLDE2ICsxNDk3MywxNiBAQAogCQkJaXNhID0g
UEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owog
CQkJZmlsZXMgPSAoCisJCQkJNTE2MEU5NTUyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJl
cXVlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdCN0ZCMDBFRDUyODAgLyog
QXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCN0QyNzQ1NjQwNDAw
QzQ1QTcyIC8qIENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkYyNzE3
QjZEMjAwRUQ1MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUMx
NTc5RkUyNzE3QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNUMxNTc5RkIyNzE3QUY1MDAwRUQ1MjgwIC8qIERhZW1vblV0aWxpdGllcy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTUxRjdCQjc2Mjc0NDk4QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxl
Rm9yVGVzdGluZy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxNjBFOTU1Mjc0Qjg4NzIwMDU2NzM4
OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2MEU5NUEyNzRD
MEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTYw
RTk2MDI3NEMyQTQwMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5Lm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTE2MEU5NUEyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MUY3QkI3QzI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENsaWVu
dENvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk1QzE1NzlGRTI3MTdCNkMxMDBFRDUy
ODAgLyogRGFlbW9uRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1QzE1NzlGQjI3MTdB
RjUwMDBFRDUyODAgLyogRGFlbW9uVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEy
Q0Q2QTAyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb24ubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1QzE1N0EwQzI3MTdDQTFEMDBFRDUyODAgLyogV2ViUHVzaERhZW1vbk1haW4ubW0gaW4g
U291cmNlcyAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAyYjlkYTcwNTUwMjkxZTUxZWQyM2JjNDlh
ZDc4Zjk0YWFiZDA1Zjk1Li5kZDMzNDAzNmYzODQ0MTI4OWYyMDhmZjdmMjdjYzdjNmI5MmRmN2Yx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3Bh
dGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlz
cGF0Y2hlci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIu
aCIKIAogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIK
ICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIK
QEAgLTYzLDYgKzY0LDkgQEAgUmVmPEV2ZW50RGlzcGF0Y2hlcj4gRXZlbnREaXNwYXRjaGVyOjpj
cmVhdGUoKQogRXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIoKQogICAgIDogbV9xdWV1
ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5FdmVudERpc3BhdGNoZXIiLCBX
b3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKICAgICAsIG1fcmVjZW50V2hlZWxFdmVu
dERlbHRhRmlsdGVyKFdoZWVsRXZlbnREZWx0YUZpbHRlcjo6Y3JlYXRlKCkpCisjaWYgRU5BQkxF
KE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgLCBtX21vbWVudHVtRXZlbnREaXNwYXRj
aGVyKFdURjo6bWFrZVVuaXF1ZTxNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcj4oKnRoaXMpKQorI2Vu
ZGlmCiB7CiB9CiAKQEAgLTk3LDcgKzEwMSw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjppbml0
aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAgICAgY29ubmVj
dGlvbi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNo
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9xdWV1ZS5nZXQoKSwgdGhpcyk7CiB9CiAKLXZv
aWQgRXZlbnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29u
c3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgUmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRh
YmxlRWRnZXMpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6aW50ZXJuYWxXaGVlbEV2ZW50KFBhZ2VJ
ZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgUmVjdEVk
Z2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxlRWRnZXMsIFdoZWVsRXZlbnRPcmlnaW4gd2hlZWxFdmVu
dE9yaWdpbikKIHsKICAgICBhdXRvIHByb2Nlc3NpbmdTdGVwcyA9IE9wdGlvblNldDxXZWJDb3Jl
OjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiB7IFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6
Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcsIFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5U
aHJlYWRGb3JCbG9ja2luZ0RPTUV2ZW50RGlzcGF0Y2ggfTsKICNpZiBFTkFCTEUoU0NST0xMSU5H
X1RIUkVBRCkKQEAgLTExNCw3ICsxMTgsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxF
dmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZQogICAg
ICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zY3JvbGxpbmdUcmVlc0xvY2sgfTsKICAgICAgICAgYXV0
byBzY3JvbGxpbmdUcmVlID0gbV9zY3JvbGxpbmdUcmVlcy5nZXQocGFnZUlEKTsKICAgICAgICAg
aWYgKCFzY3JvbGxpbmdUcmVlKSB7Ci0gICAgICAgICAgICBkaXNwYXRjaFdoZWVsRXZlbnRWaWFN
YWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKKyAgICAgICAg
ICAgIGRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlELCB3aGVlbEV2ZW50LCBw
cm9jZXNzaW5nU3RlcHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0xMzYsMTAgKzE0MCwxMCBAQCB2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6d2hlZWxFdmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZl
bnQmIHdoZQogCiAgICAgICAgIHNjcm9sbGluZ1RyZWUtPndpbGxQcm9jZXNzV2hlZWxFdmVudCgp
OwogCi0gICAgICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWUsIHdo
ZWVsRXZlbnQsIHBsYXRmb3JtV2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzLCB1c2VNYWluVGhy
ZWFkRm9yU2Nyb2xsaW5nLCBwYWdlSUQsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSB7
CisgICAgICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9sbGluZ1RyZWUsIHdoZWVs
RXZlbnQsIHBsYXRmb3JtV2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzLCB1c2VNYWluVGhyZWFk
Rm9yU2Nyb2xsaW5nLCBwYWdlSUQsIHdoZWVsRXZlbnRPcmlnaW4sIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9XSB7CiAgICAgICAgICAgICBpZiAodXNlTWFpblRocmVhZEZvclNjcm9sbGlu
ZykgewogICAgICAgICAgICAgICAgIHNjcm9sbGluZ1RyZWUtPndpbGxTZW5kRXZlbnRUb01haW5U
aHJlYWQocGxhdGZvcm1XaGVlbEV2ZW50KTsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5kaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJv
Y2Vzc2luZ1N0ZXBzKTsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNwYXRjaFdo
ZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBz
LCB3aGVlbEV2ZW50T3JpZ2luKTsKICAgICAgICAgICAgICAgICBzY3JvbGxpbmdUcmVlLT53YWl0
Rm9yRXZlbnRUb0JlUHJvY2Vzc2VkQnlNYWluVGhyZWFkKHBsYXRmb3JtV2hlZWxFdmVudCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTQ3LDIzICsxNTEsNDIg
QEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFnZUlE
LCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGUKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2Ny
b2xsaW5nVHJlZS0+aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybVdoZWVsRXZlbnQsIHByb2Nlc3Np
bmdTdGVwcyk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubmVlZHNNYWluVGhyZWFkUHJvY2Vz
c2luZygpKSB7Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hXaGVlbEV2
ZW50VmlhTWFpblRocmVhZChwYWdlSUQsIHdoZWVsRXZlbnQsIHJlc3VsdC5zdGVwcyk7CisgICAg
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVh
ZChwYWdlSUQsIHdoZWVsRXZlbnQsIHJlc3VsdC5zdGVwcywgd2hlZWxFdmVudE9yaWdpbik7CiAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGVwcy5jb250YWlucyhXaGVlbEV2ZW50UHJvY2Vz
c2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yU2Nyb2xsaW5nKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJZiB3ZSBzY3JvbGxlZCBv
biB0aGUgc2Nyb2xsaW5nIHRocmVhZCAoZXZlbiBpZiB3ZSBzZW5kIHRoZSBldmVudCB0byB0aGUg
bWFpbiB0aHJlYWQgZm9yIHBhc3NpdmUgZXZlbnQgaGFuZGxlcnMpCiAgICAgICAgICAgICAvLyBy
ZXNwb25kIHRvIHRoZSBVSSBwcm9jZXNzIHRoYXQgdGhlIGV2ZW50IHdhcyBoYW5kbGVkLgotICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZERpZFJlY2VpdmVFdmVudChwYWdlSUQsIHdoZWVs
RXZlbnQudHlwZSgpLCByZXN1bHQud2FzSGFuZGxlZCk7CisgICAgICAgICAgICBpZiAod2hlZWxF
dmVudE9yaWdpbiA9PSBXaGVlbEV2ZW50T3JpZ2luOjpVSVByb2Nlc3MpCisgICAgICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+c2VuZERpZFJlY2VpdmVFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQu
dHlwZSgpLCByZXN1bHQud2FzSGFuZGxlZCk7CiAgICAgICAgIH0pOwogICAgIH0gd2hpbGUgKGZh
bHNlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJ1YmJlckJhbmRhYmxlRWRnZXMpOwogCi0g
ICAgZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChwYWdlSUQsIHdoZWVsRXZlbnQsIHBy
b2Nlc3NpbmdTdGVwcyk7CisgICAgZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChwYWdl
SUQsIHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVwcywgd2hlZWxFdmVudE9yaWdpbik7CiAjZW5k
aWYKIH0KIAordm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIg
cGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBSZWN0RWRnZXM8Ym9vbD4g
cnViYmVyQmFuZGFibGVFZGdlcykKK3sKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFU
Q0hFUikKKyAgICBpZiAobV9tb21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+aGFuZGxlV2hlZWxFdmVu
dChwYWdlSUQsIHdoZWVsRXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMpKSB7CisgICAgICAgIHNl
bmREaWRSZWNlaXZlRXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LnR5cGUoKSwgdHJ1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBpbnRlcm5hbFdoZWVsRXZlbnQocGFnZUlE
LCB3aGVlbEV2ZW50LCBydWJiZXJCYW5kYWJsZUVkZ2VzLCBXaGVlbEV2ZW50T3JpZ2luOjpVSVBy
b2Nlc3MpOworfQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCit2b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUoUGFnZUlkZW50
aWZpZXIgcGFnZUlELCBjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgY3VydmUpCit7
CisgICAgbV9tb21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmUocGFnZUlELCBjdXJ2ZSk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShNQUNfR0VTVFVS
RV9FVkVOVFMpCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6Z2VzdHVyZUV2ZW50KFBhZ2VJZGVudGlm
aWVyIHBhZ2VJRCwgY29uc3QgV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkK
IHsKQEAgLTIzMCwxNSArMjUzLDE1IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFRv
dWNoRXZlbnRzKCkKIH0KICNlbmRpZgogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hX
aGVlbEV2ZW50VmlhTWFpblRocmVhZChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNv
bnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHJvY2Vz
c2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQs
IGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHJv
Y2Vzc2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMsIFdoZWVsRXZlbnRPcmlnaW4gd2hlZWxFdmVu
dE9yaWdpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwYWdlSUQs
IHdoZWVsRXZlbnQsIHN0ZXBzID0gcHJvY2Vzc2luZ1N0ZXBzIC0gV2hlZWxFdmVudFByb2Nlc3Np
bmdTdGVwczo6U2Nyb2xsaW5nVGhyZWFkXSgpIG11dGFibGUgewotICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5kaXNwYXRjaFdoZWVsRXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LCBzdGVwcyk7CisgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwg
cGFnZUlELCB3aGVlbEV2ZW50LCB3aGVlbEV2ZW50T3JpZ2luLCBzdGVwcyA9IHByb2Nlc3NpbmdT
dGVwcyAtIFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6OlNjcm9sbGluZ1RocmVhZF0oKSBtdXRh
YmxlIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hXaGVlbEV2ZW50KHBhZ2VJRCwg
d2hlZWxFdmVudCwgc3RlcHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogICAgIH0pOwogfQogCi12b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0PFdoZWVsRXZlbnRQ
cm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdTdGVwcykKK3ZvaWQgRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaFdoZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2
ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4gcHJv
Y2Vzc2luZ1N0ZXBzLCBXaGVlbEV2ZW50T3JpZ2luIHdoZWVsRXZlbnRPcmlnaW4pCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMjQ2LDcgKzI2OSw3IEBAIHZvaWQgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBj
b25zdCBXZWJXaGVlbEV2CiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICB3ZWJQYWdlLT53aGVlbEV2ZW50KHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVwcyk7CisgICAg
d2ViUGFnZS0+d2hlZWxFdmVudCh3aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3RlcHMsIHdoZWVsRXZl
bnRPcmlnaW4pOwogfQogCiAjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5UUykKQEAgLTI4NCw2
ICszMDcsMTEgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZyZXNoZWQoUGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBjb25zdCBEaXMKICAgICB0cmFjZVBvaW50KERpc3Bs
YXlSZWZyZXNoRGlzcGF0Y2hpbmdUb01haW5UaHJlYWQsIGRpc3BsYXlJRCwgc2VuZFRvTWFpblRo
cmVhZCk7CiAKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIEVOQUJMRShN
T01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIG1fbW9tZW50dW1FdmVudERpc3BhdGNoZXIt
PmRpc3BsYXlXYXNSZWZyZXNoZWQoZGlzcGxheUlELCBkaXNwbGF5VXBkYXRlKTsKKyNlbmRpZgor
CiAgICAgbm90aWZ5U2Nyb2xsaW5nVHJlZXNEaXNwbGF5V2FzUmVmcmVzaGVkKGRpc3BsYXlJRCk7
CiAKICAgICBpZiAoIXNlbmRUb01haW5UaHJlYWQpCkBAIC0yOTUsNCArMzIzLDE0IEBAIHZvaWQg
RXZlbnREaXNwYXRjaGVyOjpkaXNwbGF5V2FzUmVmcmVzaGVkKFBsYXRmb3JtRGlzcGxheUlEIGRp
c3BsYXlJRCwgY29uc3QgRGlzCiB9CiAjZW5kaWYKIAordm9pZCBFdmVudERpc3BhdGNoZXI6OnBh
Z2VTY3JlZW5EaWRDaGFuZ2UoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBQbGF0Zm9ybURpc3BsYXlJ
RCBkaXNwbGF5SUQpCit7CisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisg
ICAgbV9tb21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+cGFnZVNjcmVlbkRpZENoYW5nZShwYWdlSUQs
IGRpc3BsYXlJRCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOworICAgIFVOVVNF
RF9QQVJBTShkaXNwbGF5SUQpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
aAppbmRleCA5ODgxMjIwMWYwNDZlMzIzZmVkMTFiNGEwNWEwYWM5NWVkNTI3ZDFmLi5hYjBiYWFh
NDZlODczN2M5MDRiMGJhNGI1NjQwN2FlMTJiNmExODE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaApAQCAtNTAsNiArNTAsOCBA
QCB1c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAorY2xhc3MgTW9tZW50dW1FdmVudERpc3BhdGNoZXI7CitjbGFzcyBTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZTsKIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBXZWJXaGVlbEV2ZW50OwogCkBA
IC03Niw2ICs3OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbm90aWZ5U2Nyb2xsaW5nVHJlZXNE
aXNwbGF5V2FzUmVmcmVzaGVkKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKTsKIAorICAgIGVu
dW0gY2xhc3MgV2hlZWxFdmVudE9yaWdpbiA6IGJvb2wgeyBVSVByb2Nlc3MsIE1vbWVudHVtRXZl
bnREaXNwYXRjaGVyIH07CisgICAgdm9pZCBpbnRlcm5hbFdoZWVsRXZlbnQoV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9v
bD4gcnViYmVyQmFuZGFibGVFZGdlcywgV2hlZWxFdmVudE9yaWdpbik7CisKIHByaXZhdGU6CiAg
ICAgRXZlbnREaXNwYXRjaGVyKCk7CiAKQEAgLTg0LDYgKzg5LDkgQEAgcHJpdmF0ZToKIAogICAg
IC8vIE1lc3NhZ2UgaGFuZGxlcnMKICAgICB2b2lkIHdoZWVsRXZlbnQoV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9vbD4g
cnViYmVyQmFuZGFibGVFZGdlcyk7CisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENI
RVIpCisgICAgdm9pZCBzZXRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZShXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciwgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmKTsKKyNlbmRpZgog
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogICAgIHZvaWQgdG91Y2hFdmVudChXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViVG91Y2hFdmVudCYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgdG91Y2hFdmVudFdpdGhvdXRDYWxsYmFjayhXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViVG91Y2hFdmVudCYpOwpAQCAtOTMsOCArMTAx
LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8gVGhpcyBpcyBjYWxsZWQgb24gdGhlIG1h
aW4gdGhyZWFkLgotICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50KFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZl
bnRQcm9jZXNzaW5nU3RlcHM+KTsKLSAgICB2b2lkIGRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5U
aHJlYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBPcHRp
b25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4pOworICAgIHZvaWQgZGlz
cGF0Y2hXaGVlbEV2ZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2
ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+LCBXaGVl
bEV2ZW50T3JpZ2luKTsKKyAgICB2b2lkIGRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQo
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBPcHRpb25TZXQ8
V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4sIFdoZWVsRXZlbnRPcmlnaW4pOwog
CiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAgICAgdm9pZCBkaXNwYXRjaFRvdWNoRXZl
bnRzKCk7CkBAIC0xMTUsNiArMTIzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BsYXlEaWRS
ZWZyZXNoT25TY3JvbGxpbmdUaHJlYWQoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOwogI2Vu
ZGlmCiAKKyAgICB2b2lkIHBhZ2VTY3JlZW5EaWRDaGFuZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKTsKKwogICAgIFJlZjxXb3JrUXVldWU+IG1f
cXVldWU7CiAKICNpZiBFTkFCTEUoU0NST0xMSU5HX1RIUkVBRCkKQEAgLTEyNiw2ICsxMzYsMTAg
QEAgcHJpdmF0ZToKICAgICBMb2NrIG1fdG91Y2hFdmVudHNMb2NrOwogICAgIEhhc2hNYXA8V2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXIsIFRvdWNoRXZlbnRRdWV1ZT4gbV90b3VjaEV2ZW50cyBXVEZf
R1VBUkRFRF9CWV9MT0NLKG1fdG91Y2hFdmVudHNMb2NrKTsKICNlbmRpZgorCisjaWYgRU5BQkxF
KE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgc3RkOjp1bmlxdWVfcHRyPE1vbWVudHVt
RXZlbnREaXNwYXRjaGVyPiBtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyOworI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgppbmRleCAwOWFm
YzJjZWQxZDNmYmZjNjM5OTBiODg4NmI2MzY0ZjY4ODBiMzJjLi43MDcxZTc0MjhlYWEyZmFiZjRh
MWZhOTAxY2I3NTY0ZGU3MWYyOGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCkBAIC0zMiw0
ICszMiw5IEBAIG1lc3NhZ2VzIC0+IEV2ZW50RGlzcGF0Y2hlciB7CiAjaWYgSEFWRShDVkRJU1BM
QVlMSU5LKQogICAgIERpc3BsYXlXYXNSZWZyZXNoZWQodWludDMyX3QgZGlzcGxheUlELCBzdHJ1
Y3QgV2ViQ29yZTo6RGlzcGxheVVwZGF0ZSB1cGRhdGUsIGJvb2wgc2VuZFRvTWFpblRocmVhZCkK
ICNlbmRpZgorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgU2V0
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlE
LCBXZWJLaXQ6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIGN1cnZlKQorI2VuZGlmCisgICAg
UGFnZVNjcmVlbkRpZENoYW5nZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIHVpbnQz
Ml90IGRpc3BsYXlJRCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjY5
YzFjMzU5ZDQwZjRmMDFkMWRmNzhjMjAxYjg0YTc0ZjY2OTQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3BhdGNoZXIu
Y3BwCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmgiCisKKyNpZiBFTkFCTEUoTU9NRU5U
VU1fRVZFTlRfRElTUEFUQ0hFUikKKworI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlci5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheVJlZnJlc2hNb25pdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZGVsdGFIaXN0b3J5TWF4aW11bUFn
ZSA9IDUwMF9tczsKK3N0YXRpYyBjb25zdGV4cHIgU2Vjb25kcyBkZWx0YUhpc3RvcnlNYXhpbXVt
SW50ZXJ2YWwgPSAxNTBfbXM7CitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgaWRlYWxDdXJ2ZUZy
YW1lUmF0ZSA9IDFfcyAvIDYwOworCitNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6TW9tZW50dW1F
dmVudERpc3BhdGNoZXIoRXZlbnREaXNwYXRjaGVyJiBkaXNwYXRjaGVyKQorICAgIDogbV9vYnNl
cnZlcklEKERpc3BsYXlMaW5rT2JzZXJ2ZXJJRDo6Z2VuZXJhdGUoKSkKKyAgICAsIG1fZGlzcGF0
Y2hlcihkaXNwYXRjaGVyKQoreworfQorCitNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6fk1vbWVu
dHVtRXZlbnREaXNwYXRjaGVyKCkKK3sKKyAgICBzdG9wRGlzcGxheUxpbmsoKTsKK30KKworYm9v
bCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZXZlbnRTaG91bGRTdGFydFN5bnRoZXRpY01vbWVu
dHVtUGhhc2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlkZW50aWZpZXIsIGNvbnN0IFdl
YldoZWVsRXZlbnQmIGV2ZW50KSBjb25zdAoreworICAgIGlmIChldmVudC5tb21lbnR1bVBoYXNl
KCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VCZWdhbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFtX2FjY2VsZXJhdGlvbkN1cnZlcy5jb250YWlucyhwYWdlSWRlbnRpZmllcikp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnRE
aXNwYXRjaGVyIG5vdCB1c2luZyBzeW50aGV0aWMgbW9tZW50dW0gcGhhc2U6IG5vIGFjY2VsZXJh
dGlvbiBjdXJ2ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFl
dmVudC5yYXdQbGF0Zm9ybURlbHRhKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5p
bWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIG5vdCB1c2luZyBzeW50aGV0aWMgbW9t
ZW50dW0gcGhhc2U6IG5vIHJhdyBwbGF0Zm9ybSBkZWx0YSBvbiBzdGFydCBldmVudCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmhhbmRsZVdoZWVsRXZlbnQoV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgcGFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50LCBXZWJD
b3JlOjpSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcykKK3sKKyAgICBtX2xhc3RS
dWJiZXJCYW5kYWJsZUVkZ2VzID0gcnViYmVyQmFuZGFibGVFZGdlczsKKyAgICBtX2xhc3RJbmNv
bWluZ0V2ZW50ID0gZXZlbnQ7CisKKyAgICBib29sIGlzTW9tZW50dW1FdmVudCA9IGV2ZW50Lm1v
bWVudHVtUGhhc2UoKSAhPSBXZWJXaGVlbEV2ZW50OjpQaGFzZU5vbmU7CisKKyAgICBpZiAobV9j
dXJyZW50R2VzdHVyZS5hY3RpdmUpIHsKKyAgICAgICAgYm9vbCBwYWdlSWRlbnRpZmllckNoYW5n
ZWQgPSBwYWdlSWRlbnRpZmllciAhPSBtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyOwor
CisgICAgICAgIC8vIEFueSBpbmNvbWluZyB3aGVlbCBldmVudCBvdGhlciB0aGFuIGEgY2hhbmdl
ZCBldmVudCBmb3IgdGhlIGN1cnJlbnQgZ2VzdHVyZQorICAgICAgICAvLyBzaG91bGQgaW50ZXJy
dXB0IHRoZSBhbmltYXRpb247IGluIHRoZSB1c3VhbCBjYXNlLCBpdCB3aWxsIGJlCisgICAgICAg
IC8vIG1vbWVudHVtUGhhc2UgPT0gUGhhc2VFbmRlZCB0aGF0IGludGVycnVwdHMuCisgICAgICAg
IGJvb2wgZXZlbnRTaG91bGRJbnRlcnJ1cHRHZXN0dXJlID0gIWlzTW9tZW50dW1FdmVudCB8fCBl
dmVudC5tb21lbnR1bVBoYXNlKCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VDaGFuZ2VkOworCisg
ICAgICAgIGlmIChwYWdlSWRlbnRpZmllckNoYW5nZWQgfHwgZXZlbnRTaG91bGRJbnRlcnJ1cHRH
ZXN0dXJlKQorICAgICAgICAgICAgZGlkRW5kTW9tZW50dW1QaGFzZSgpOworICAgIH0KKworICAg
IGlmIChldmVudC5waGFzZSgpID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlQmVnYW4gfHwgZXZlbnQu
cGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZUNoYW5nZWQpIHsKKyAgICAgICAgZGlkUmVj
ZWl2ZVNjcm9sbEV2ZW50KGV2ZW50KTsKKworICAgICAgICBpZiAoYXV0byBsYXN0QWN0aXZlUGhh
c2VEZWx0YSA9IGV2ZW50LnJhd1BsYXRmb3JtRGVsdGEoKSkKKyAgICAgICAgICAgIG1fbGFzdEFj
dGl2ZVBoYXNlRGVsdGEgPSAqbGFzdEFjdGl2ZVBoYXNlRGVsdGE7CisgICAgfQorCisgICAgaWYg
KGV2ZW50U2hvdWxkU3RhcnRTeW50aGV0aWNNb21lbnR1bVBoYXNlKHBhZ2VJZGVudGlmaWVyLCBl
dmVudCkpCisgICAgICAgIGRpZFN0YXJ0TW9tZW50dW1QaGFzZShwYWdlSWRlbnRpZmllciwgZXZl
bnQpOworCisgICAgYm9vbCBpc01vbWVudHVtRXZlbnREdXJpbmdTeW50aGV0aWNHZXN0dXJlID0g
aXNNb21lbnR1bUV2ZW50ICYmIG1fY3VycmVudEdlc3R1cmUuYWN0aXZlOworCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgaWYgKGlzTW9tZW50dW1FdmVudER1cmluZ1N5bnRoZXRpY0dl
c3R1cmUpCisgICAgICAgIG1fY3VycmVudEdlc3R1cmUuYWNjdW11bGF0ZWRFdmVudE9mZnNldCAr
PSBldmVudC5kZWx0YSgpOworI2VuZGlmCisKKyAgICAvLyBDb25zdW1lIGFueSBub3JtYWwgbW9t
ZW50dW0gZXZlbnRzIHdoaWxlIHdlJ3JlIGluc2lkZSBhIHN5bnRoZXRpYyBtb21lbnR1bSBnZXN0
dXJlLgorICAgIHJldHVybiBpc01vbWVudHVtRXZlbnREdXJpbmdTeW50aGV0aWNHZXN0dXJlOwor
fQorCitzdGF0aWMgZmxvYXQgYXBwS2l0U2Nyb2xsTXVsdGlwbGllckZvckV2ZW50KGNvbnN0IFdl
YldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIGF1dG8gZGVsdGEgPSBldmVudC5kZWx0YSgpOwor
ICAgIGF1dG8gdW5hY2NlbGVyYXRlZERlbHRhID0gZXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhKCk7CisgICAgZmxvYXQgbXVsdGlwbGllciA9IDE7CisgICAgCisgICAgLy8gRklYTUU6
IENhbiB0aGUgQXBwS2l0IG11bHRpcGxpZXIgZXZlciBkaWZmZXIgYnkgYXhpcz8KKyAgICBpZiAo
ZGVsdGEud2lkdGgoKSAmJiB1bmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSkKKyAgICAgICAgbXVs
dGlwbGllciA9IHN0ZDo6bWF4KG11bHRpcGxpZXIsIGRlbHRhLndpZHRoKCkgLyB1bmFjY2VsZXJh
dGVkRGVsdGEud2lkdGgoKSk7CisgICAgaWYgKGRlbHRhLmhlaWdodCgpICYmIHVuYWNjZWxlcmF0
ZWREZWx0YS5oZWlnaHQoKSkKKyAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6bWF4KG11bHRpcGxp
ZXIsIGRlbHRhLmhlaWdodCgpIC8gdW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpKTsKKworICAg
IHJldHVybiBtdWx0aXBsaWVyOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaFN5bnRoZXRpY01vbWVudHVtRXZlbnQoV2ViV2hlZWxFdmVudDo6UGhhc2UgcGhhc2Us
IFdlYkNvcmU6OkZsb2F0U2l6ZSBkZWx0YSkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50R2VzdHVy
ZS5hY3RpdmUpOworICAgIEFTU0VSVChtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudCk7
CisKKyAgICBhdXRvIGFwcEtpdFNjcm9sbE11bHRpcGxpZXIgPSBhcHBLaXRTY3JvbGxNdWx0aXBs
aWVyRm9yRXZlbnQoKm1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50KTsKKyAgICBhdXRv
IGFwcEtpdEFjY2VsZXJhdGVkRGVsdGEgPSBkZWx0YSAqIGFwcEtpdFNjcm9sbE11bHRpcGxpZXI7
CisgICAgYXV0byB3aGVlbFRpY2tzID0gYXBwS2l0QWNjZWxlcmF0ZWREZWx0YSAvIFdlYkNvcmU6
OlNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICBhdXRvIHRpbWUgPSBXYWxsVGlt
ZTo6bm93KCk7CisKKyAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSB3b3VsZCBzdGljayBsZWdpdGlt
YXRlIHJhd1BsYXRmb3JtRGVsdGFzIG9uIHRoZSBldmVudCwKKyAgICAvLyBidXQgY3VycmVudGx5
IG5vdGhpbmcgd2lsbCBjb25zdW1lIHRoZW0sIGFuZCB3ZSdkIGhhdmUgdG8ga2VlcCB0cmFjayBv
ZiB0aGVtIHNlcGFyYXRlbHkuCisgICAgV2ViV2hlZWxFdmVudCBzeW50aGV0aWNFdmVudCgKKyAg
ICAgICAgV2ViRXZlbnQ6OldoZWVsLAorICAgICAgICBtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRp
bmdFdmVudC0+cG9zaXRpb24oKSwKKyAgICAgICAgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5n
RXZlbnQtPmdsb2JhbFBvc2l0aW9uKCksCisgICAgICAgIGFwcEtpdEFjY2VsZXJhdGVkRGVsdGEs
CisgICAgICAgIHdoZWVsVGlja3MsCisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4
ZWxXaGVlbEV2ZW50LAorICAgICAgICBtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudC0+
ZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKCksCisgICAgICAgIFdlYldoZWVsRXZlbnQ6OlBo
YXNlTm9uZSwKKyAgICAgICAgcGhhc2UsCisgICAgICAgIHRydWUsCisgICAgICAgIG1fY3VycmVu
dEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50LT5zY3JvbGxDb3VudCgpLAorICAgICAgICBkZWx0YSwK
KyAgICAgICAgbV9sYXN0SW5jb21pbmdFdmVudC0+bW9kaWZpZXJzKCksCisgICAgICAgIHRpbWUs
CisgICAgICAgIHRpbWUsCisgICAgICAgIHsgfSk7CisgICAgbV9kaXNwYXRjaGVyLmludGVybmFs
V2hlZWxFdmVudChtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyLCBzeW50aGV0aWNFdmVu
dCwgbV9sYXN0UnViYmVyQmFuZGFibGVFZGdlcywgRXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50
T3JpZ2luOjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcik7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVu
dERpc3BhdGNoZXI6OmRpZFN0YXJ0TW9tZW50dW1QaGFzZShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBwYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgbV9j
dXJyZW50R2VzdHVyZS5hY3RpdmUgPSB0cnVlOworICAgIG1fY3VycmVudEdlc3R1cmUucGFnZUlk
ZW50aWZpZXIgPSBwYWdlSWRlbnRpZmllcjsKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRp
bmdFdmVudCA9IGV2ZW50OworICAgIG1fY3VycmVudEdlc3R1cmUuY3VycmVudE9mZnNldCA9IHsg
fTsKKyAgICBtX2N1cnJlbnRHZXN0dXJlLnN0YXJ0VGltZSA9IFdhbGxUaW1lOjpub3coKTsKKyAg
ICBtX2N1cnJlbnRHZXN0dXJlLmFjY2VsZXJhdGlvbkN1cnZlID0gWyZdICgpIC0+IHN0ZDo6b3B0
aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IHsKKyAgICAgICAgYXV0byBjdXJ2ZUl0
ZXJhdG9yID0gbV9hY2NlbGVyYXRpb25DdXJ2ZXMuZmluZChtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJ
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGN1cnZlSXRlcmF0b3IgPT0gbV9hY2NlbGVyYXRpb25D
dXJ2ZXMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gY3Vy
dmVJdGVyYXRvci0+dmFsdWU7CisgICAgfSgpOworCisgICAgc3RhcnREaXNwbGF5TGluaygpOwor
CisgICAgLy8gRklYTUU6IFRoZSBzeXN0ZW0gZmFsbHMgYmFjayBmcm9tIHRoZSB0YWJsZSB0byBq
dXN0IGdlbmVyYXRpbmcgZGVsdGFzCisgICAgLy8gZGlyZWN0bHkgd2hlbiB0aGUgZnJhbWUgaW50
ZXJ2YWwgaXMgd2l0aGluIDIwZnBzIG9mIGlkZWFsQ3VydmVGcmFtZVJhdGU7CisgICAgLy8gd2Ug
c2hvdWxkIHBlcmhhcHMgZG8gdGhlIHNhbWUuCisgICAgYnVpbGRPZmZzZXRUYWJsZVdpdGhJbml0
aWFsRGVsdGEoKmV2ZW50LnJhd1BsYXRmb3JtRGVsdGEoKSk7CisKKyAgICBkaXNwYXRjaFN5bnRo
ZXRpY01vbWVudHVtRXZlbnQoV2ViV2hlZWxFdmVudDo6UGhhc2VCZWdhbiwgeyB9KTsKK30KKwor
dm9pZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlkRW5kTW9tZW50dW1QaGFzZSgpCit7Cisg
ICAgQVNTRVJUKG1fY3VycmVudEdlc3R1cmUuYWN0aXZlKTsKKworICAgIGRpc3BhdGNoU3ludGhl
dGljTW9tZW50dW1FdmVudChXZWJXaGVlbEV2ZW50OjpQaGFzZUVuZGVkLCB7IH0pOworCisgICAg
UkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIHNh
dyBtb21lbnR1bSBlbmQgcGhhc2Ugd2l0aCB0b3RhbCBvZmZzZXQgJS4xZiAlLjFmLCBkdXJhdGlv
biAlZiAoZXZlbnQgb2Zmc2V0IHdvdWxkIGhhdmUgYmVlbiAlLjFmICUuMWYpIiwgbV9jdXJyZW50
R2VzdHVyZS5jdXJyZW50T2Zmc2V0LndpZHRoKCksIG1fY3VycmVudEdlc3R1cmUuY3VycmVudE9m
ZnNldC5oZWlnaHQoKSwgKFdhbGxUaW1lOjpub3coKSAtIG1fY3VycmVudEdlc3R1cmUuc3RhcnRU
aW1lKS5zZWNvbmRzKCksIG1fY3VycmVudEdlc3R1cmUuYWNjdW11bGF0ZWRFdmVudE9mZnNldC53
aWR0aCgpLCBtX2N1cnJlbnRHZXN0dXJlLmFjY3VtdWxhdGVkRXZlbnRPZmZzZXQuaGVpZ2h0KCkp
OworCisgICAgc3RvcERpc3BsYXlMaW5rKCk7CisKKyAgICBtX2N1cnJlbnRHZXN0dXJlID0geyB9
OworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzZXRTY3JvbGxpbmdBY2NlbGVy
YXRpb25DdXJ2ZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSWRlbnRpZmllciwgc3RkOjpv
cHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gY3VydmUpCit7CisgICAgbV9hY2Nl
bGVyYXRpb25DdXJ2ZXMuc2V0KHBhZ2VJZGVudGlmaWVyLCBjdXJ2ZSk7CisKKyNpZiBVU0VfTU9N
RU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9URU1QT1JBUllfTE9HR0lORworICAgIFdURjo6VGV4dFN0
cmVhbSBzdHJlYW0oV1RGOjpUZXh0U3RyZWFtOjpMaW5lTW9kZTo6U2luZ2xlTGluZSk7CisgICAg
c3RyZWFtIDw8IGN1cnZlOworICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21l
bnR1bUV2ZW50RGlzcGF0Y2hlciBzZXQgY3VydmUgJXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0Zjgo
KS5kYXRhKCkpOworI2VuZGlmCit9CisKK1dlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIE1vbWVu
dHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwbGF5SUQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2N1
cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyKTsKKyAgICBhdXRvIGRpc3BsYXlJREl0ZXJhdG9y
ID0gbV9kaXNwbGF5SURzLmZpbmQobV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllcik7Cisg
ICAgaWYgKGRpc3BsYXlJREl0ZXJhdG9yID09IG1fZGlzcGxheUlEcy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZGlzcGxheUlESXRlcmF0b3ItPnZhbHVlOworfQorCit2
b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdGFydERpc3BsYXlMaW5rKCkKK3sKKyAgICBh
dXRvIGRpc3BsYXlJRCA9IHRoaXMtPmRpc3BsYXlJRCgpOworICAgIGlmICghZGlzcGxheUlEKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlciBmYWlsZWQgdG8gc3RhcnQgZGlzcGxheSBsaW5rIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogU3dpdGNoIGRvd24gdG8gbG93ZXItdGhhbi1mdWxsLXNw
ZWVkIGZyYW1lIHJhdGVzIGZvciB0aGUgdGFpbCBlbmQgb2YgdGhlIGN1cnZlLgorICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6U3RhcnREaXNwbGF5TGluayhtX29ic2VydmVySUQsIGRpc3Bs
YXlJRCwgRnVsbFNwZWVkRnJhbWVzUGVyU2Vjb25kKSwgMCk7CisgICAgUkVMRUFTRV9MT0coU2Ny
b2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIHN0YXJ0aW5nIGRpc3BsYXkg
bGluayBmb3IgZGlzcGxheSAlZCIsIGRpc3BsYXlJRCk7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVu
dERpc3BhdGNoZXI6OnN0b3BEaXNwbGF5TGluaygpCit7CisgICAgYXV0byBkaXNwbGF5SUQgPSB0
aGlzLT5kaXNwbGF5SUQoKTsKKyAgICBpZiAoIWRpc3BsYXlJRCkgeworICAgICAgICBSRUxFQVNF
X0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgZmFpbGVkIHRv
IHN0b3AgZGlzcGxheSBsaW5rIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OlN0b3BEaXNwbGF5TGluayhtX29ic2VydmVySUQsIGRpc3Bs
YXlJRCksIDApOworICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2
ZW50RGlzcGF0Y2hlciBzdG9wcGluZyBkaXNwbGF5IGxpbmsgZm9yIGRpc3BsYXkgJWQiLCBkaXNw
bGF5SUQpOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpwYWdlU2NyZWVuRGlk
Q2hhbmdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgV2ViQ29yZTo6UGxhdGZvcm1E
aXNwbGF5SUQgZGlzcGxheUlEKQoreworICAgIGJvb2wgYWZmZWN0c0N1cnJlbnRHZXN0dXJlID0g
KHBhZ2VJRCA9PSBtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyKTsKKyAgICBpZiAoYWZm
ZWN0c0N1cnJlbnRHZXN0dXJlKQorICAgICAgICBzdG9wRGlzcGxheUxpbmsoKTsKKworICAgIG1f
ZGlzcGxheUlEcy5zZXQocGFnZUlELCBkaXNwbGF5SUQpOworCisgICAgaWYgKGFmZmVjdHNDdXJy
ZW50R2VzdHVyZSkKKyAgICAgICAgc3RhcnREaXNwbGF5TGluaygpOworfQorCit2b2lkIE1vbWVu
dHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwbGF5V2FzUmVmcmVzaGVkKFdlYkNvcmU6OlBsYXRmb3Jt
RGlzcGxheUlEIGRpc3BsYXlJRCwgY29uc3QgV2ViQ29yZTo6RGlzcGxheVVwZGF0ZSYpCit7Cisg
ICAgaWYgKCFtX2N1cnJlbnRHZXN0dXJlLmFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGRpc3BsYXlJRCAhPSB0aGlzLT5kaXNwbGF5SUQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBhbmltYXRpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpIC0gbV9jdXJyZW50R2VzdHVy
ZS5zdGFydFRpbWU7CisgICAgYXV0byBkZXNpcmVkT2Zmc2V0ID0gb2Zmc2V0QXRUaW1lKGFuaW1h
dGlvblRpbWUpOworCisjaWYgIVVTRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSX1BSRU1BVFVS
RV9ST1VORElORykKKyAgICAvLyBJbnRlbnRpb25hbCBkZWx0YSByb3VuZGluZyAoYnV0IGF0IHRo
ZSBlbmQhKS4KKyAgICBGbG9hdFNpemUgZGVsdGEgPSByb3VuZGVkSW50U2l6ZShkZXNpcmVkT2Zm
c2V0IC0gbV9jdXJyZW50R2VzdHVyZS5jdXJyZW50T2Zmc2V0KTsKKyNlbHNlCisgICAgRmxvYXRT
aXplIGRlbHRhID0gZGVzaXJlZE9mZnNldCAtIG1fY3VycmVudEdlc3R1cmUuY3VycmVudE9mZnNl
dDsKKyNlbmRpZgorCisgICAgZGlzcGF0Y2hTeW50aGV0aWNNb21lbnR1bUV2ZW50KFdlYldoZWVs
RXZlbnQ6OlBoYXNlQ2hhbmdlZCwgLWRlbHRhKTsKKworICAgIG1fY3VycmVudEdlc3R1cmUuY3Vy
cmVudE9mZnNldCArPSBkZWx0YTsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6
ZGlkUmVjZWl2ZVNjcm9sbEV2ZW50V2l0aEludGVydmFsKEZsb2F0U2l6ZSBzaXplLCBTZWNvbmRz
IGZyYW1lSW50ZXJ2YWwpCit7CisgICAgYXV0byBwdXNoID0gW10oSGlzdG9yaWNhbERlbHRhcyYg
ZGVsdGFzLCBEZWx0YSBuZXdEZWx0YSkgeworICAgICAgICBib29sIGRpcmVjdGlvbkNoYW5nZWQg
PSBkZWx0YXMuc2l6ZSgpICYmIChkZWx0YXMuZmlyc3QoKS5yYXdQbGF0Zm9ybURlbHRhID4gMCkg
IT0gKG5ld0RlbHRhLnJhd1BsYXRmb3JtRGVsdGEgPiAwKTsKKyAgICAgICAgaWYgKGRpcmVjdGlv
bkNoYW5nZWQgfHwgbmV3RGVsdGEuZnJhbWVJbnRlcnZhbCA+IGRlbHRhSGlzdG9yeU1heGltdW1B
Z2UpCisgICAgICAgICAgICBkZWx0YXMuY2xlYXIoKTsKKworICAgICAgICBkZWx0YXMucHJlcGVu
ZChuZXdEZWx0YSk7CisgICAgICAgIGlmIChkZWx0YXMuc2l6ZSgpID4gZGVsdGFIaXN0b3J5UXVl
dWVTaXplKQorICAgICAgICAgICAgZGVsdGFzLnJlbW92ZUxhc3QoKTsKKyAgICB9OworCisgICAg
cHVzaChtX2RlbHRhSGlzdG9yeVgsIHsgc2l6ZS53aWR0aCgpLCBmcmFtZUludGVydmFsIH0pOwor
ICAgIHB1c2gobV9kZWx0YUhpc3RvcnlZLCB7IHNpemUuaGVpZ2h0KCksIGZyYW1lSW50ZXJ2YWwg
fSk7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmRpZFJlY2VpdmVTY3JvbGxF
dmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVu
dEdlc3R1cmUuYWN0aXZlKTsKKworICAgIGlmICghZXZlbnQucmF3UGxhdGZvcm1EZWx0YSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGRlbHRhID0gKmV2ZW50LnJhd1BsYXRmb3JtRGVs
dGEoKTsKKyAgICBhdXRvIHRpbWUgPSBldmVudC5pb0hJREV2ZW50VGltZXN0YW1wKCk7CisKKyAg
ICBpZiAoIW1fbGFzdFNjcm9sbFRpbWVzdGFtcCkgeworICAgICAgICBtX2xhc3RTY3JvbGxUaW1l
c3RhbXAgPSB0aW1lOworICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhhdCB0aGlzIG1hdGNoZXMg
dGhlIHN5c3RlbSAodGhleSBtYXkgZ28gd2l0aCAxMG1zIGZvciB0aGUgZmlyc3QgZnJhbWUpLgor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBmcmFtZUludGVydmFsID0gdGltZSAt
ICptX2xhc3RTY3JvbGxUaW1lc3RhbXA7CisgICAgbV9sYXN0U2Nyb2xsVGltZXN0YW1wID0gdGlt
ZTsKKworICAgIGRpZFJlY2VpdmVTY3JvbGxFdmVudFdpdGhJbnRlcnZhbChkZWx0YSwgZnJhbWVJ
bnRlcnZhbCk7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmJ1aWxkT2Zmc2V0
VGFibGVXaXRoSW5pdGlhbERlbHRhKEZsb2F0U2l6ZSBpbml0aWFsVW5hY2NlbGVyYXRlZERlbHRh
KQoreworI2lmIFVTRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSX1BSRU1BVFVSRV9ST1VORElO
RykKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmNhcnJ5T2Zmc2V0ID0geyB9OworI2VuZGlmCisgICAg
bV9jdXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZS5jbGVhcigpOworCisgICAgRmxvYXRTaXplIGFj
Y3VtdWxhdGVkT2Zmc2V0OworICAgIEZsb2F0U2l6ZSB1bmFjY2VsZXJhdGVkRGVsdGEgPSBpbml0
aWFsVW5hY2NlbGVyYXRlZERlbHRhOworCisgICAgZG8geworICAgICAgICBGbG9hdFNpemUgYWNj
ZWxlcmF0ZWREZWx0YTsKKyAgICAgICAgc3RkOjp0aWUodW5hY2NlbGVyYXRlZERlbHRhLCBhY2Nl
bGVyYXRlZERlbHRhKSA9IGNvbXB1dGVOZXh0RGVsdGEodW5hY2NlbGVyYXRlZERlbHRhKTsKKwor
ICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCArPSBhY2NlbGVyYXRlZERlbHRhOworICAgICAgICBt
X2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxlLmFwcGVuZChhY2N1bXVsYXRlZE9mZnNldCk7Cisg
ICAgfSB3aGlsZSAoc3RkOjphYnModW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpID4gMC41IHx8
IHN0ZDo6YWJzKHVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSkgPiAwLjUpOworCisgICAgUkVM
RUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGJ1aWx0
IHRhYmxlIHdpdGggJWxkIGZyYW1lcywgaW5pdGlhbCBkZWx0YSAlZiAlZiwgZGlzdGFuY2UgJWYg
JWYgKGluaXRpYWwgZGVsdGEgZnJvbSBsYXN0IGNoYW5nZWQgZXZlbnQgJWYgJWYpIiwgbV9jdXJy
ZW50R2VzdHVyZS5vZmZzZXRUYWJsZS5zaXplKCksIGluaXRpYWxVbmFjY2VsZXJhdGVkRGVsdGEu
d2lkdGgoKSwgaW5pdGlhbFVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSwgYWNjdW11bGF0ZWRP
ZmZzZXQud2lkdGgoKSwgYWNjdW11bGF0ZWRPZmZzZXQuaGVpZ2h0KCksIG1fbGFzdEFjdGl2ZVBo
YXNlRGVsdGEud2lkdGgoKSwgbV9sYXN0QWN0aXZlUGhhc2VEZWx0YS5oZWlnaHQoKSk7Cit9CisK
K3N0YXRpYyBmbG9hdCBpbnRlcnBvbGF0ZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCB0KQorewor
ICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7Cit9CisKK0Zsb2F0U2l6ZSBNb21lbnR1bUV2ZW50
RGlzcGF0Y2hlcjo6b2Zmc2V0QXRUaW1lKFNlY29uZHMgdGltZSkKK3sKKyAgICBpZiAoIW1fY3Vy
cmVudEdlc3R1cmUub2Zmc2V0VGFibGUuc2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgZmxvYXQgZnJhY3Rpb25hbEZyYW1lTnVtYmVyID0gdGltZS5zZWNvbmRzKCkgLyBpZGVhbEN1
cnZlRnJhbWVSYXRlLnNlY29uZHMoKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvd2VyRnJhbWVOdW1i
ZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZCBsb25nPihtX2N1cnJlbnRHZXN0dXJlLm9mZnNldFRhYmxl
LnNpemUoKSAtIDEsIGZsb29yKGZyYWN0aW9uYWxGcmFtZU51bWJlcikpOworICAgIHVuc2lnbmVk
IGxvbmcgdXBwZXJGcmFtZU51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkIGxvbmc+KG1fY3VycmVu
dEdlc3R1cmUub2Zmc2V0VGFibGUuc2l6ZSgpIC0gMSwgbG93ZXJGcmFtZU51bWJlciArIDEpOwor
ICAgIGZsb2F0IGFtb3VudCA9IGZyYWN0aW9uYWxGcmFtZU51bWJlciAtIGxvd2VyRnJhbWVOdW1i
ZXI7CisgICAgCisgICAgcmV0dXJuIHsKKyAgICAgICAgLWludGVycG9sYXRlKG1fY3VycmVudEdl
c3R1cmUub2Zmc2V0VGFibGVbbG93ZXJGcmFtZU51bWJlcl0ud2lkdGgoKSwgbV9jdXJyZW50R2Vz
dHVyZS5vZmZzZXRUYWJsZVt1cHBlckZyYW1lTnVtYmVyXS53aWR0aCgpLCBhbW91bnQpLAorICAg
ICAgICAtaW50ZXJwb2xhdGUobV9jdXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZVtsb3dlckZyYW1l
TnVtYmVyXS5oZWlnaHQoKSwgbV9jdXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZVt1cHBlckZyYW1l
TnVtYmVyXS5oZWlnaHQoKSwgYW1vdW50KQorICAgIH07Cit9CisKK3N0YXRpYyBmbG9hdCBtb21l
bnR1bURlY2F5UmF0ZShGbG9hdFNpemUgZGVsdGEsIFNlY29uZHMgZnJhbWVJbnRlcnZhbCkKK3sK
KyAgICBjb25zdGV4cHIgZmxvYXQgZGVmYXVsdERlY2F5ID0gMC45NzVmOworICAgIGNvbnN0ZXhw
ciBmbG9hdCB0YWlsVmVsb2NpdHkgPSAyNTAuZjsKKyAgICBjb25zdGV4cHIgZmxvYXQgdGFpbERl
Y2F5ID0gMC45MWY7CisgICAgYXV0byBhbHBoYSA9IGRlZmF1bHREZWNheTsKKworICAgIGlmIChm
cmFtZUludGVydmFsKSB7CisgICAgICAgIGZsb2F0IGluaXRpYWxWZWxvY2l0eSA9IGRlbHRhLmRp
YWdvbmFsTGVuZ3RoKCkgLyBmcmFtZUludGVydmFsLnNlY29uZHMoKTsKKyAgICAgICAgZmxvYXQg
d2Vha01vbWVudHVtID0gc3RkOjptYXg8ZmxvYXQ+KDAuZiwgKHRhaWxWZWxvY2l0eSAtIGluaXRp
YWxWZWxvY2l0eSkgLyB0YWlsVmVsb2NpdHkpOworICAgICAgICBhbHBoYSA9IGRlZmF1bHREZWNh
eSAtIChkZWZhdWx0RGVjYXkgLSB0YWlsRGVjYXkpICogd2Vha01vbWVudHVtOworICAgIH0KKwor
ICAgIHJldHVybiBzdGQ6OnBvdyhhbHBoYSwgKGZyYW1lSW50ZXJ2YWwuc2Vjb25kcygpIC8gMC4w
MDhmKSk7Cit9CisKK3N0YXRpYyBjb25zdGV4cHIgZmxvYXQgZnJvbUZpeGVkUG9pbnQoZmxvYXQg
dmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlIC8gNjU1MzYuMGY7Cit9CisKK3N0ZDo6cGFpcjxG
bG9hdFNpemUsIEZsb2F0U2l6ZT4gTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmNvbXB1dGVOZXh0
RGVsdGEoRmxvYXRTaXplIGN1cnJlbnRVbmFjY2VsZXJhdGVkRGVsdGEpCit7CisgICAgRmxvYXRT
aXplIHVuYWNjZWxlcmF0ZWREZWx0YSA9IGN1cnJlbnRVbmFjY2VsZXJhdGVkRGVsdGE7CisKKyAg
ICBmbG9hdCBkZWNheVJhdGUgPSBtb21lbnR1bURlY2F5UmF0ZSh1bmFjY2VsZXJhdGVkRGVsdGEs
IGlkZWFsQ3VydmVGcmFtZVJhdGUpOworICAgIHVuYWNjZWxlcmF0ZWREZWx0YS5zY2FsZShkZWNh
eVJhdGUpOworCisgICAgYXV0byBxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEgPSB1bmFjY2Vs
ZXJhdGVkRGVsdGE7CisKKyNpZiBVU0UoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9QUkVNQVRV
UkVfUk9VTkRJTkcpCisgICAgLy8gUm91bmQgYW5kIGNhcnJ5LgorICAgIGludDMyX3QgcXVhbnRp
emVkWCA9IHN0ZDo6cm91bmQocXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpOwor
ICAgIGludDMyX3QgcXVhbnRpemVkWSA9IHN0ZDo6cm91bmQocXVhbnRpemVkVW5hY2NlbGVyYXRl
ZERlbHRhLmhlaWdodCgpKTsKKworICAgIGlmIChzdGQ6OmFicyhxdWFudGl6ZWRVbmFjY2VsZXJh
dGVkRGVsdGEud2lkdGgoKSkgPCAxICYmIHN0ZDo6YWJzKHF1YW50aXplZFVuYWNjZWxlcmF0ZWRE
ZWx0YS5oZWlnaHQoKSkgPCAxKSB7CisgICAgICAgIGZsb2F0IGRlbHRhWEluY2x1ZGluZ0NhcnJ5
ID0gcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkgKyBtX2N1cnJlbnRHZXN0dXJl
LmNhcnJ5T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IGRlbHRhWUluY2x1ZGluZ0NhcnJ5
ID0gcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLmhlaWdodCgpICsgbV9jdXJyZW50R2VzdHVy
ZS5jYXJyeU9mZnNldC5oZWlnaHQoKTsKKworICAgICAgICAvLyBJbnRlbnRpb25hbCB0cnVuY2F0
aW9uLgorICAgICAgICBxdWFudGl6ZWRYID0gZGVsdGFYSW5jbHVkaW5nQ2Fycnk7CisgICAgICAg
IHF1YW50aXplZFkgPSBkZWx0YVlJbmNsdWRpbmdDYXJyeTsKKyAgICAgICAgbV9jdXJyZW50R2Vz
dHVyZS5jYXJyeU9mZnNldCA9IHsgZGVsdGFYSW5jbHVkaW5nQ2FycnkgLSBxdWFudGl6ZWRYLCBk
ZWx0YVlJbmNsdWRpbmdDYXJyeSAtIHF1YW50aXplZFkgfTsKKyAgICB9CisKKyAgICBxdWFudGl6
ZWRVbmFjY2VsZXJhdGVkRGVsdGEgPSB7IHN0YXRpY19jYXN0PGZsb2F0PihxdWFudGl6ZWRYKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHF1YW50aXplZFkpIH07CisjZW5kaWYKKworICAgIC8vIFRoZSBk
ZWx0YSBxdWV1ZSBvcGVyYXRlcyBvbiBwcmUtYWNjZWxlcmF0aW9uIGRlbHRhcywgc28gaW5zZXJ0
IHRoZSBuZXcgZXZlbnQgKmJlZm9yZSogYWNjZWxlcmF0aW5nLgorICAgIGRpZFJlY2VpdmVTY3Jv
bGxFdmVudFdpdGhJbnRlcnZhbChxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEsIGlkZWFsQ3Vy
dmVGcmFtZVJhdGUpOworCisgICAgYXV0byBhY2NlbGVyYXRlQXhpcyA9IFsmXSAoSGlzdG9yaWNh
bERlbHRhcyYgZGVsdGFzLCBmbG9hdCB2YWx1ZSkgeworICAgICAgICBmbG9hdCB0b3RhbERlbHRh
ID0gMDsKKyAgICAgICAgU2Vjb25kcyB0b3RhbFRpbWU7CisgICAgICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRlbHRhIDogZGVsdGFzKSB7CisgICAg
ICAgICAgICB0b3RhbERlbHRhICs9IHN0ZDo6YWJzKGRlbHRhLnJhd1BsYXRmb3JtRGVsdGEpOwor
ICAgICAgICAgICAgY291bnQrKzsKKworICAgICAgICAgICAgaWYgKGRlbHRhLmZyYW1lSW50ZXJ2
YWwgPiBkZWx0YUhpc3RvcnlNYXhpbXVtSW50ZXJ2YWwpIHsKKyAgICAgICAgICAgICAgICB0b3Rh
bFRpbWUgKz0gZGVsdGFIaXN0b3J5TWF4aW11bUludGVydmFsOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b3RhbFRpbWUgKz0gZGVsdGEuZnJh
bWVJbnRlcnZhbDsKKworICAgICAgICAgICAgaWYgKHRvdGFsVGltZSA+PSBkZWx0YUhpc3RvcnlN
YXhpbXVtQWdlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byBhdmVyYWdlRnJhbWVJbnRlcnZhbCA9IHN0ZDo6Y2xhbXAodG90YWxUaW1lIC8gY291bnQs
IDFfbXMsIGRlbHRhSGlzdG9yeU1heGltdW1JbnRlcnZhbCk7CisgICAgICAgIGZsb2F0IGF2ZXJh
Z2VGcmFtZUludGVydmFsTVMgPSBhdmVyYWdlRnJhbWVJbnRlcnZhbC5taWxsaXNlY29uZHMoKTsK
KyAgICAgICAgZmxvYXQgYXZlcmFnZURlbHRhID0gdG90YWxEZWx0YSAvIGNvdW50OworCisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIGlmICghbV9jdXJyZW50R2VzdHVyZS5kaWRM
b2dJbml0aWFsUXVldWVTdGF0ZSkKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1h
dGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBpbml0aWFsIGhpc3RvcmljYWwgZGVsdGFz
OiBhdmVyYWdlIGRlbHRhICVmLCBhdmVyYWdlIHRpbWUgJWZtcywgZXZlbnQgY291bnQgJWQiLCBh
dmVyYWdlRGVsdGEsIGF2ZXJhZ2VGcmFtZUludGVydmFsTVMsIGNvdW50KTsKKyNlbmRpZgorCisg
ICAgICAgIGNvbnN0ZXhwciBmbG9hdCB2ZWxvY2l0eUdhaW5BID0gZnJvbUZpeGVkUG9pbnQoMi5m
KTsKKyAgICAgICAgY29uc3RleHByIGZsb2F0IHZlbG9jaXR5R2FpbkIgPSBmcm9tRml4ZWRQb2lu
dCg5NTUuZik7CisgICAgICAgIGNvbnN0ZXhwciBmbG9hdCB2ZWxvY2l0eUNvbnN0YW50ID0gZnJv
bUZpeGVkUG9pbnQoOTgzNjkuZik7CisgICAgICAgIGNvbnN0ZXhwciBmbG9hdCBtaW5pbXVtVmVs
b2NpdHkgPSBmcm9tRml4ZWRQb2ludCgxLmYpOworCisgICAgICAgIGZsb2F0IHZlbG9jaXR5ID0g
KHZlbG9jaXR5R2FpbkEgKiBhdmVyYWdlRnJhbWVJbnRlcnZhbE1TICogYXZlcmFnZUZyYW1lSW50
ZXJ2YWxNUyAtIHZlbG9jaXR5R2FpbkIgKiBhdmVyYWdlRnJhbWVJbnRlcnZhbE1TICsgdmVsb2Np
dHlDb25zdGFudCkgKiBhdmVyYWdlRGVsdGE7CisgICAgICAgIHZlbG9jaXR5ID0gc3RkOjptYXg8
ZmxvYXQ+KHZlbG9jaXR5LCBtaW5pbXVtVmVsb2NpdHkpOworCisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIG1hdGggaXMgaW5jb21wbGV0ZSBpZiB3ZSBuZWVkIHRvIHN1cHBvcnQgYWNjZWxlcmF0aW9u
IHRhYmxlcyBhcyB3ZWxsLgorICAgICAgICBmbG9hdCBtdWx0aXBsaWVyID0gbV9jdXJyZW50R2Vz
dHVyZS5hY2NlbGVyYXRpb25DdXJ2ZS0+YWNjZWxlcmF0aW9uRmFjdG9yKHZlbG9jaXR5KSAvIHZl
bG9jaXR5OworICAgICAgICByZXR1cm4gdmFsdWUgKiBtdWx0aXBsaWVyOworICAgIH07CisKKyAg
ICBGbG9hdFNpemUgYWNjZWxlcmF0ZWREZWx0YSgKKyAgICAgICAgYWNjZWxlcmF0ZUF4aXMobV9k
ZWx0YUhpc3RvcnlYLCBxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEud2lkdGgoKSksCisgICAg
ICAgIGFjY2VsZXJhdGVBeGlzKG1fZGVsdGFIaXN0b3J5WSwgcXVhbnRpemVkVW5hY2NlbGVyYXRl
ZERlbHRhLmhlaWdodCgpKQorICAgICk7CisKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmRpZExvZ0lu
aXRpYWxRdWV1ZVN0YXRlID0gdHJ1ZTsKKworICAgIHJldHVybiB7IHVuYWNjZWxlcmF0ZWREZWx0
YSwgYWNjZWxlcmF0ZWREZWx0YSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1
bUV2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzU3MTkwZTFhYmVlM2MwMGY2MWY4
YzA1ZjQ3NmIwZGE2N2QwNTRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3BhdGNoZXIuaApAQCAtMCwwICsxLDEzMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5U
X0RJU1BBVENIRVIpCisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGRlY2lkZSB3aGlj
aCB2ZXJzaW9uIHdlIHdhbnQuCisjZGVmaW5lIFVTRV9NT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVS
X1BSRU1BVFVSRV9ST1VORElORyAwCisjZGVmaW5lIFVTRV9NT01FTlRVTV9FVkVOVF9ESVNQQVRD
SEVSX1RFTVBPUkFSWV9MT0dHSU5HIDEKKworI2luY2x1ZGUgIlNjcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlLmgiCisjaW5jbHVkZSAiV2ViV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUmVjdEVkZ2VzLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgRGlzcGxheVVw
ZGF0ZTsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBFdmVudERpc3BhdGNoZXI7CisKK2NsYXNzIE1vbWVudHVtRXZl
bnREaXNwYXRjaGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIoRXZlbnREaXNwYXRjaGVyJik7CisgICAgfk1vbWVudHVtRXZl
bnREaXNwYXRjaGVyKCk7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmLCBXZWJDb3JlOjpSZWN0RWRnZXM8Ym9v
bD4gcnViYmVyQmFuZGFibGVFZGdlcyk7CisKKyAgICB2b2lkIHNldFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlPik7CisKKyAgICB2b2lkIGRpc3BsYXlXYXNSZWZyZXNoZWQoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlVcGRhdGUmKTsK
KworICAgIHZvaWQgcGFnZVNjcmVlbkRpZENoYW5nZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwg
V2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOworCitwcml2YXRlOgorICAgIHZvaWQgZGlkU3Rh
cnRNb21lbnR1bVBoYXNlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2
ZW50Jik7CisgICAgdm9pZCBkaWRFbmRNb21lbnR1bVBoYXNlKCk7CisKKyAgICBib29sIGV2ZW50
U2hvdWxkU3RhcnRTeW50aGV0aWNNb21lbnR1bVBoYXNlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBjb25zdCBXZWJXaGVlbEV2ZW50JikgY29uc3Q7CisKKyAgICB2b2lkIHN0YXJ0RGlzcGxheUxp
bmsoKTsKKyAgICB2b2lkIHN0b3BEaXNwbGF5TGluaygpOworCisgICAgV2ViQ29yZTo6UGxhdGZv
cm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Q7CisKKyAgICB2b2lkIGRpc3BhdGNoU3ludGhl
dGljTW9tZW50dW1FdmVudChXZWJXaGVlbEV2ZW50OjpQaGFzZSwgV2ViQ29yZTo6RmxvYXRTaXpl
IGRlbHRhKTsKKworICAgIHZvaWQgYnVpbGRPZmZzZXRUYWJsZVdpdGhJbml0aWFsRGVsdGEoRmxv
YXRTaXplKTsKKworICAgIEZsb2F0U2l6ZSBvZmZzZXRBdFRpbWUoU2Vjb25kcyk7CisgICAgc3Rk
OjpwYWlyPEZsb2F0U2l6ZSwgRmxvYXRTaXplPiBjb21wdXRlTmV4dERlbHRhKEZsb2F0U2l6ZSBj
dXJyZW50VW5hY2NlbGVyYXRlZERlbHRhKTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZVNjcm9sbEV2
ZW50V2l0aEludGVydmFsKEZsb2F0U2l6ZSwgU2Vjb25kcyk7CisgICAgdm9pZCBkaWRSZWNlaXZl
U2Nyb2xsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOworCisgICAgc3RydWN0IERlbHRhIHsK
KyAgICAgICAgZmxvYXQgcmF3UGxhdGZvcm1EZWx0YTsKKyAgICAgICAgU2Vjb25kcyBmcmFtZUlu
dGVydmFsOworICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkZWx0YUhpc3Rv
cnlRdWV1ZVNpemUgPSA5OworICAgIHR5cGVkZWYgRGVxdWU8RGVsdGEsIGRlbHRhSGlzdG9yeVF1
ZXVlU2l6ZT4gSGlzdG9yaWNhbERlbHRhczsKKyAgICBIaXN0b3JpY2FsRGVsdGFzIG1fZGVsdGFI
aXN0b3J5WDsKKyAgICBIaXN0b3JpY2FsRGVsdGFzIG1fZGVsdGFIaXN0b3J5WTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IG1fbGFzdFNjcm9sbFRpbWVzdGFtcDsKKyAgICBzdGQ6Om9w
dGlvbmFsPFdlYldoZWVsRXZlbnQ+IG1fbGFzdEluY29taW5nRXZlbnQ7CisgICAgV2ViQ29yZTo6
UmVjdEVkZ2VzPGJvb2w+IG1fbGFzdFJ1YmJlckJhbmRhYmxlRWRnZXM7CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgRmxvYXRTaXplIG1fbGFzdEFjdGl2ZVBoYXNlRGVsdGE7CisjZW5k
aWYKKworICAgIHN0cnVjdCB7CisgICAgICAgIGJvb2wgYWN0aXZlIHsgZmFsc2UgfTsKKworICAg
ICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSWRlbnRpZmllcjsKKyAgICAgICAgc3Rk
OjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gYWNjZWxlcmF0aW9uQ3VydmU7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViV2hlZWxFdmVudD4gaW5pdGlhdGluZ0V2ZW50Owor
CisgICAgICAgIEZsb2F0U2l6ZSBjdXJyZW50T2Zmc2V0OworICAgICAgICBXYWxsVGltZSBzdGFy
dFRpbWU7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0U2l6ZT4gb2Zmc2V0VGFibGU7CisKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgRmxvYXRTaXplIGFjY3VtdWxhdGVkRXZlbnRP
ZmZzZXQ7CisgICAgICAgIGJvb2wgZGlkTG9nSW5pdGlhbFF1ZXVlU3RhdGUgeyBmYWxzZSB9Owor
I2VuZGlmCisKKyNpZiBVU0UoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9QUkVNQVRVUkVfUk9V
TkRJTkcpCisgICAgICAgIEZsb2F0U2l6ZSBjYXJyeU9mZnNldDsKKyNlbmRpZgorICAgIH0gbV9j
dXJyZW50R2VzdHVyZTsKKworICAgIERpc3BsYXlMaW5rT2JzZXJ2ZXJJRCBtX29ic2VydmVySUQ7
CisgICAgSGFzaE1hcDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6UGxhdGZvcm1E
aXNwbGF5SUQ+IG1fZGlzcGxheUlEczsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyLCBzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPj4gbV9hY2NlbGVy
YXRpb25DdXJ2ZXM7CisgICAgRXZlbnREaXNwYXRjaGVyJiBtX2Rpc3BhdGNoZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDc3Zjg0ZGNlN2ZhYWE0OTJhYTU1ZmVhMDI1YmI2
MDZlMGZkMDZjNWEuLjVjM2NmZDQyMzg3OGI2Y2M1NTIwMzUyZmFkMDQ1Y2NmNTlmMGNiMDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMDMx
LDcgKzMwMzEsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVs
RXZlbnQmIHdoZWVsRXZlbnQsIFBhZ2UqIHBhZ2UsIE9wdGlvbgogICAgIHJldHVybiBwYWdlLT51
c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtV2hlZWxFdmVudCwgcHJv
Y2Vzc2luZ1N0ZXBzKTsKIH0KIAotYm9vbCBXZWJQYWdlOjp3aGVlbEV2ZW50KGNvbnN0IFdlYldo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBz
PiBwcm9jZXNzaW5nU3RlcHMpCitib29sIFdlYlBhZ2U6OndoZWVsRXZlbnQoY29uc3QgV2ViV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0PFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+
IHByb2Nlc3NpbmdTdGVwcywgRXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50T3JpZ2luIHdoZWVs
RXZlbnRPcmlnaW4pCiB7CiAgICAgbV91c2VyQWN0aXZpdHkuaW1wdWxzZSgpOwogCkBAIC0zMDM5
LDcgKzMwMzksNyBAQCBib29sIFdlYlBhZ2U6OndoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCwgT3B0aW9uU2V0PFdoZWVsRXZlbnRQcgogCiAgICAgYm9vbCBoYW5kbGVk
ID0gaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50LCBtX3BhZ2UuZ2V0KCksIHByb2Nlc3NpbmdT
dGVwcyk7CiAKLSAgICBpZiAocHJvY2Vzc2luZ1N0ZXBzLmNvbnRhaW5zKFdoZWVsRXZlbnRQcm9j
ZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcpKQorICAgIGlmIChwcm9jZXNzaW5n
U3RlcHMuY29udGFpbnMoV2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6TWFpblRocmVhZEZvclNj
cm9sbGluZykgJiYgd2hlZWxFdmVudE9yaWdpbiA9PSBFdmVudERpc3BhdGNoZXI6OldoZWVsRXZl
bnRPcmlnaW46OlVJUHJvY2VzcykKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRSZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdoZWVsRXZlbnQudHlwZSgp
KSwgaGFuZGxlZCkpOwogCiAgICAgcmV0dXJuIGhhbmRsZWQ7CkBAIC0zMDUzLDcgKzMwNTMsNyBA
QCB2b2lkIFdlYlBhZ2U6OmRpc3BhdGNoV2hlZWxFdmVudFdpdGhvdXRTY3JvbGxpbmcoY29uc3Qg
V2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudAogI2Vsc2UKICAgICBib29sIGlzQ2FuY2VsYWJsZSA9
IHRydWU7CiAjZW5kaWYKLSAgICBib29sIGhhbmRsZWQgPSB0aGlzLT53aGVlbEV2ZW50KHdoZWVs
RXZlbnQsIHsgaXNDYW5jZWxhYmxlID8gV2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6TWFpblRo
cmVhZEZvckJsb2NraW5nRE9NRXZlbnREaXNwYXRjaCA6IFdoZWVsRXZlbnRQcm9jZXNzaW5nU3Rl
cHM6Ok1haW5UaHJlYWRGb3JOb25CbG9ja2luZ0RPTUV2ZW50RGlzcGF0Y2ggfSk7CisgICAgYm9v
bCBoYW5kbGVkID0gdGhpcy0+d2hlZWxFdmVudCh3aGVlbEV2ZW50LCB7IGlzQ2FuY2VsYWJsZSA/
IFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JCbG9ja2luZ0RPTUV2ZW50
RGlzcGF0Y2ggOiBXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yTm9uQmxv
Y2tpbmdET01FdmVudERpc3BhdGNoIH0sIEV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudE9yaWdp
bjo6VUlQcm9jZXNzKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihoYW5kbGVkKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IGQzNThhMjU2YzJh
YjMxNzJjZTA0MjhhZmRmZGUzOTkxNDk2YzljMmQuLjI2MmRlNmE0MmE2OTQ5NTMwMjAxYzcyM2Rh
ZTdlNDUyMmM1NzE2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJEb3dubG9hZElELmgiCiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFJbmZvLmgiCiAjaW5jbHVkZSAiRWRpdGluZ1JhbmdlLmgiCisjaW5jbHVk
ZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiRm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlv
bi5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXJUeXBlcy5oIgpAQCAtMTA2NSw3ICsxMDY2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3Rh
cnRXYWl0aW5nRm9yQ29udGV4dE1lbnVUb1Nob3coKSB7IG1fd2FpdGluZ0ZvckNvbnRleHRNZW51
VG9TaG93ID0gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICBib29sIHdoZWVsRXZlbnQoY29uc3QgV2Vi
V2hlZWxFdmVudCYsIE9wdGlvblNldDxXZWJDb3JlOjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBz
Pik7CisgICAgYm9vbCB3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmLCBPcHRpb25TZXQ8
V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4sIEV2ZW50RGlzcGF0Y2hlcjo6V2hl
ZWxFdmVudE9yaWdpbik7CiAKICAgICB2b2lkIHdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQoYm9v
bCk7CiAgICAgdm9pZCByZWNvbXB1dGVTaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHNT
dGF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445492</attachid>
            <date>2021-11-30 17:21:15 -0800</date>
            <delta_ts>2021-11-30 18:56:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233653-20211130172114.patch</filename>
            <type>text/plain</type>
            <size>84471</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc0OGM0NDZkZTAwNmUwNDE5OGNiNmE3
YmQ0MzAwOWM0ZDQyYjgyNzguLjhhNjNlMjI0MDZhY2VmMzgwZTg0MDMzNjYzNTg1ODUwNGJjMWI4
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhl
c2l6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzY1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vODU1NzEyNTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlLmg6Cisg
ICAgICAgIEFkZCBhbiBFTkFCTEUoKS4KKwogMjAyMS0xMS0yOSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIGZvciB0
aGUgV2ViIExvY2sgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA5ZTk2NTBhNTMxYTZhOTRlNjky
ZDA1YTEyZmY2ZTQwYzQwN2UwMjcyLi4zMTZlM2JjMDdlZTQ3ODMwZDg2NDM4NWMyOGMxNzVjMzhh
YTVlOTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0xMS0zMCAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBt
b21lbnR1bSBldmVudCBzeW50aGVzaXplcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNjUzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NTU3MTI1
OD4KKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBwYWwv
c3BpL21hYy9JT0tpdFNQSU1hYy5oOgorICAgICAgICBBZGQgc29tZSBTUEkuCisKIDIwMjEtMTEt
MjkgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDog
VW5pZnkgc3BlZWNoIHN5bnRoZXNpemVyIHBsYXRmb3JtIHVzYWdlIGZvciBNYWMvaU9TCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGU2Y2QzZTZjZDFiM2QxNzI5ZjE1NGY1ZTg3YjBmYzJlMjY3ZDY2ZDIuLmQ0NjkwOTA5
ZmFmZWE0NTFmZTZkNGQwNzUwNTUzODUzZmQ0MjRjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1
IEBACisyMDIxLTExLTMwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBhIG1vbWVudHVtIGV2ZW50IHN5bnRoZXNpemVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM2NTMKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzg1NTcxMjU4PgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
KworICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgQWRkIFNjcm9sbEFuaW1h
dGlvbnMgbG9nIGNoYW5uZWwgdG8gV2ViS2l0IChpdCBhbHJlYWR5IGV4aXN0cyBpbiBXZWJDb3Jl
KS4KKworICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6U2Nyb2xs
aW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVy
YXRpb25DdXJ2ZTo6aW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZTo6Y29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmV2YWx1YXRlUXVhcnRpYyk6
CisgICAgICAgIChXZWJLaXQ6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjphY2NlbGVyYXRp
b25GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3Vy
dmU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2Vi
S2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5hdGl2ZVdoZWVsRXZlbnQpOgor
ICAgICAgICAqIFNoYXJlZC9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6b3BlcmF0
b3IhPSBjb25zdCk6CisgICAgICAgIEFkZCBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHF1YXJ0
aWMgc2Nyb2xsaW5nIGFjY2VsZXJhdGlvbiBjdXJ2ZSB3aXRoCisgICAgICAgIGEgdHJhaWxpbmcg
bGluZWFyIHRhbmdlbnQgcmVnaW9uLCBhbmQgYWxsb3dzIGludGVycG9sYXRpb24gYmV0d2VlbiBj
dXJ2ZXMKKyAgICAgICAgYW5kIGV2YWx1YXRpb24gb2YgdGhlIGN1cnZlIGF0IGEgcG9pbnQuCisK
KyAgICAgICAgKiBTaGFyZWQvbWFjL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlTWFjLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6ZnJvbUZpeGVkUG9pbnQpOgorICAgICAgICAoV2ViS2l0
OjpyZWFkRml4ZWRQb2ludFBhcmFtZXRlcik6CisgICAgICAgIChXZWJLaXQ6OmZyb21JT0hJREN1
cnZlKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2NlbGVyYXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZnJvbU5h
dGl2ZVdoZWVsRXZlbnQpOgorICAgICAgICBHaXZlbiBhIE5hdGl2ZVdlYldoZWVsRXZlbnQsIGV4
dHJhY3QgaXRzIHVuZGVybHlpbmcgcGxhdGZvcm0gZXZlbnQKKyAgICAgICAgYW5kIGZldGNoIHRo
ZSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBmb3IgdGhlIG9yaWdpbmF0aW5nIGRldmljZS4K
KworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIEZldGNoIHRoZSBjdXJyZW50
IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIG9uIGVhY2ggbW9tZW50dW0gYmVnaW4gZXZlbnQs
CisgICAgICAgIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZW5kV2hlZWxFdmVudCk6CisgICAgICAgIFNlbmQgdGhlIFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlIHRvIEV2ZW50RGlzcGF0Y2hlciBqdXN0IGJlZm9yZQorICAgICAg
ICB3ZSBzZW5kIHRoZSBtb21lbnR1bSBiZWdpbiBldmVudCBhbG9uZywgaWYgaXQgaGFzIGNoYW5n
ZWQuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aW5kb3dTY3JlZW5EaWRDaGFu
Z2UpOgorICAgICAgICBLZWVwIEV2ZW50RGlzcGF0Y2hlciBhcHByaXNlZCBvZiBjaGFuZ2VzIHRv
IHRoZSBjdXJyZW50IHNjcmVlbiBvZiB0aGUgcGFnZS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViS2l0OjpF
dmVudERpc3BhdGNoZXI6OmludGVybmFsV2hlZWxFdmVudCk6CisgICAgICAgIEZhY3RvciBtb3N0
IG9mIHdoZWVsRXZlbnQgb3V0IGludG8gaW50ZXJuYWxXaGVlbEV2ZW50LCBzbyB0aGF0CisgICAg
ICAgIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGNhbiBjYWxsIGludGVybmFsV2hlZWxFdmVudCgp
LCBza2lwcGluZyB0aGUgY29kZQorICAgICAgICBpbiB3aGVlbEV2ZW50KCkgdGhhdCBmb3J3YXJk
cyB0aGUgZXZlbnQuLi4gdG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgQWxz
bywga2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgZXZlbnQgY2FtZSBmcm9tIChVSSBwcm9jZXNzIG9y
IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBhbmQgYXZvaWQgc2VuZGluZyBkaWRS
ZWNlaXZlRXZlbnQgcmVwbGllcyB0byB0aGUgVUkgcHJvY2VzcyBmb3Igc3ludGhldGljCisgICAg
ICAgIGV2ZW50cyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dC4KKworICAgICAgICAoV2ViS2l0
OjpFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQpOgorICAgICAgICBGb3J3YXJkIHdoZWVsIGV2
ZW50cyB0byBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci4KKworICAgICAgICAoV2ViS2l0OjpFdmVu
dERpc3BhdGNoZXI6OnNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKToKKyAgICAgICAgRm9y
d2FyZCBzY3JvbGxpbmcgY3VydmUgY2hhbmdlcyB0byBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci4K
KworICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZyZXNoZWQp
OgorICAgICAgICBGb3J3YXJkIGRpc3BsYXkgcmVmcmVzaCBjYWxsYmFja3MgdG8gTW9tZW50dW1F
dmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp3aW5k
b3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICBGb3J3YXJkIHBhZ2Ugc2NyZWVuIGNoYW5nZXMg
dG8gTW9tZW50dW1FdmVudERpc3BhdGNoZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6d2hlZWxFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpc3BhdGNoV2hlZWxFdmVudFdpdGhvdXRTY3JvbGxpbmcp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIERvbid0
IHNlbmQgZGlkUmVjZWl2ZUV2ZW50IGZvciBzeW50aGV0aWMgZXZlbnRzIGZyb20gdGhlIG1haW4g
dGhyZWFkIGVpdGhlci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Nb21lbnR1bUV2
ZW50RGlzcGF0Y2hlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50
RGlzcGF0Y2hlcjo6TW9tZW50dW1FdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoV2ViS2l0OjpN
b21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6fk1vbWVudHVtRXZlbnREaXNwYXRjaGVyKToKKyAgICAg
ICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmV2ZW50U2hvdWxkU3RhcnRTeW50
aGV0aWNNb21lbnR1bVBoYXNlIGNvbnN0KToKKyAgICAgICAgSWYgd2UgaGF2ZSBldmVyeXRoaW5n
IHdlIG5lZWQgKGEgc2Nyb2xsaW5nIGN1cnZlIC0gd2hpY2ggYWxzbyBpbXBsaWVzCisgICAgICAg
IHRoYXQgdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAtIGFuZCByYXcgcGxhdGZvcm0gZGVsdGFzKSwg
YW5kIHRoZSBldmVudAorICAgICAgICBpcyBhIG1vbWVudHVtIGJlZ2luIGV2ZW50LCB3ZSBjYW4g
dXNlIGl0IHRvIHN0YXJ0IGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNlLiAKKworICAgICAgICAo
V2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAg
ICAgIFN0YXJ0IG9yIHN0b3AgdGhlIG1vbWVudHVtIHBoYXNlIGFzIGFwcHJvcHJpYXRlLgorICAg
ICAgICBSZWNvcmQgYW55IGluY29taW5nIGZpbmdlcnMtZG93biBwaGFzZSBldmVudHMgaW4gYSBy
b2xsaW5nIGV2ZW50IGhpc3Rvcnkgc3RydWN0dXJlLgorICAgICAgICBCbG9jayBwbGF0Zm9ybS1l
dmVudC1kcml2ZW4gZXZlbnRzIGZyb20gYmVpbmcgZnVydGhlciBoYW5kbGVkIGJ5IFdlYktpdAor
ICAgICAgICBpZiB3ZSBhcmUgaW5zaWRlIGEgc3ludGhldGljIG1vbWVudHVtIHBoYXNlLCBzaW5j
ZSB3ZSdsbCBiZSByZXBsYWNpbmcgdGhlbS4KKworICAgICAgICAoV2ViS2l0OjphcHBLaXRTY3Jv
bGxNdWx0aXBsaWVyRm9yRXZlbnQpOgorICAgICAgICBEZXRlcm1pbmUgdGhlIEFwcEtpdCBzY3Jv
bGwgbXVsaXBsaWVyICgiYWNjZWxlcmF0ZWQiIHZzICJ1bmFjY2VsZXJhdGVkIgorICAgICAgICBk
ZWx0YXMgaW4gTlNFdmVudCBwYXJsYW5jZSkgZnJvbSB0aGUgZXZlbnQgdmlhIGRpdmlzaW9uLgor
CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFN5bnRo
ZXRpY01vbWVudHVtRXZlbnQpOgorICAgICAgICBEaXNwYXRjaCBhIHN5bnRoZXRpYyBldmVudCB3
aXRoIHRoZSBnaXZlbiBtb21lbnR1bSBwaGFzZSBhbmQgZGVsdGEuCisgICAgICAgIFdlIGJvcnJv
dyBzb21lIHByb3BlcnRpZXMgZnJvbSB0aGUgZXZlbnQgdGhhdCBpbml0aWF0ZWQgdGhlIG1vbWVu
dHVtCisgICAgICAgIHBoYXNlIChlLmcuIHRoZSBwb3NpdGlvbiksIGFuZCBzb21lIGZyb20gd2hh
dGV2ZXIgZXZlbnQgd2UndmUgbW9zdAorICAgICAgICByZWNlbnRseSBzZWVuIChldmVuIGlmIHdl
IHRvbGQgdGhlIHJlc3Qgb2YgV2ViS2l0IHRvIGlnbm9yZSBpdCksIHNvCisgICAgICAgIHRoYXQg
d2UgZ2V0IHRoZSBtb3N0IHVwLXRvLWRhdGUgc3RhdGUgZm9yIGUuZy4gdGhlIGtleWJvYXJkIG1v
ZGlmaWVycy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlk
U3RhcnRNb21lbnR1bVBoYXNlKToKKyAgICAgICAgUmVjb3JkIHJlbGV2YW50IGluZm9ybWF0aW9u
IGFib3V0IHRoZSBzdGFydCBldmVudCwgZ2VuZXJhdGUgdGhlCisgICAgICAgIG1vbWVudHVtIGN1
cnZlLCBhbmQgc3RhcnQgYSBmdWxsLXJhdGUgZGlzcGxheSBsaW5rLiBBbHNvLCBzZW5kIGEgbW9t
ZW50dW0KKyAgICAgICAgYmVnaW4gZXZlbnQsIHNpbmNlIHdlIGJsb2NrZWQgdGhlIHJlYWwgb25l
LgorCisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRFbmRNb21l
bnR1bVBoYXNlKToKKyAgICAgICAgU2VuZCBhIG1vbWVudHVtIGVuZGVkIGV2ZW50LCBzaHV0IGRv
d24gdGhlIGRpc3BsYXkgbGluaywgYW5kIHJlc2V0IGFsbAorICAgICAgICBwZXItZ2VzdHVyZSBz
dGF0ZS4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c2V0U2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUpOgorICAgICAgICBTdG9yZSBTY3JvbGxpbmdBY2NlbGVy
YXRpb25DdXJ2ZXMgb24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0OjpNb21l
bnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGxheUlEIGNvbnN0KToKKyAgICAgICAgTG9vayB1cCB0
aGUgZGlzcGxheUlEIGZvciB0aGUgY3VycmVudCBnZXN0dXJlJ3MgcGFnZS4KKworICAgICAgICAo
V2ViS2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c3RhcnREaXNwbGF5TGluayk6CisgICAg
ICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpzdG9wRGlzcGxheUxpbmspOgor
ICAgICAgICBTdGFydCBhbmQgc3RvcCBhIGRpc3BsYXkgbGluaywgd2hpY2ggd2lsbCAtIGluIGEg
cm91bmRhYm91dCBtYW5uZXIgLQorICAgICAgICBldmVudHVhbGx5IGNhbGwgYmFjayBpbnRvIGRp
c3BsYXlXYXNSZWZyZXNoZWQuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERpc3Bh
dGNoZXI6OndpbmRvd1NjcmVlbkRpZENoYW5nZSk6CisgICAgICAgIFN0b3JlIERpc3BsYXlJRHMg
b24gYSBwZXItcGFnZSBiYXNpcy4KKworICAgICAgICAoV2ViS2l0OjpNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZCk6CisgICAgICAgIFdoZW4gdGhlIGRpc3BsYXkg
bGluayBjYWxscyB1cyBiYWNrLCBlbWl0IGEgc2luZ2xlIG1vbWVudHVtIGNoYW5nZWQKKyAgICAg
ICAgZXZlbnQgb2Ygc3VmZmljaWVudCBkZWx0YSB0byBtb3ZlIHVzIHRvIHRoZSBkZXNpcmVkIG9m
ZnNldCBhbG9uZyB0aGUgY3VydmUuCisKKyAgICAgICAgKFdlYktpdDo6TW9tZW50dW1FdmVudERp
c3BhdGNoZXI6OmRpZFNjcm9sbFdpdGhJbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXQ6Ok1vbWVu
dHVtRXZlbnREaXNwYXRjaGVyOjpkaWRTY3JvbGwpOgorICAgICAgICBSZWNvcmQgaW5jb21pbmcg
c2Nyb2xsaW5nIGV2ZW50cyBpbnRvIGEgcm9sbGluZyBoaXN0b3J5IGRlcXVlLgorCisgICAgICAg
IChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpidWlsZE9mZnNldFRhYmxlV2l0aElu
aXRpYWxEZWx0YSk6CisgICAgICAgIENvbXB1dGUgdGhlIG9mZnNldHMgZm9yIHRoZSBlbnRpcmUg
ImlkZWFsIGN1cnZlIiB0YWJsZSAoYXQgNjBIeikgYnkKKyAgICAgICAgcnVubmluZyB0aGUgYW5p
bWF0aW9uIGFuZCBhY2N1bXVsYXRpbmcgdGhlIGRlbHRhcy4KKworICAgICAgICAoV2ViS2l0Ojpp
bnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpv
ZmZzZXRBdFRpbWUpOgorICAgICAgICBJbnRlcnBvbGF0ZSBhbG9uZyB0aGUgImlkZWFsIGN1cnZl
IiB0byBkZXRlcm1pbmUgdGhlIGludGVuZGVkIG9mZnNldAorICAgICAgICBhdCBhIGdpdmVuIHRp
bWUuCisKKyAgICAgICAgKFdlYktpdDo6bW9tZW50dW1EZWNheVJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6Y29tcHV0ZU5leHREZWx0YSk6CisgICAgICAg
IENvbXB1dGUgdGhlIG5leHQgZGVsdGEgZ2l2ZW4gYSBkZWx0YSAoYW5kIHRoZSBldmVudCBoaXN0
b3J5KSBieSBhcHBseWluZworICAgICAgICBhIGJpdCBvZiBleHBvbmVudGlhbCBkZWNheSBhbmQg
dGhlbiBwYXNzaW5nIGl0IHRocm91Z2ggdGhlCisgICAgICAgIFNjcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlLiBXZSByZXR1cm4gYm90aCB0aGUgdW5hY2NlbGVyYXRlZAorICAgICAgICBhbmQgYWNj
ZWxlcmF0ZWQgZGVsdGFzLCBiZWNhdXNlIHRoZSBpbnB1dCB0byB0aGUgbmV4dCBpdGVyYXRpb24g
b2YKKyAgICAgICAgY29tcHV0ZU5leHREZWx0YSBpcyB0aGUgdW5hY2NlbGVyYXRlZCBkZWx0YSwg
YnV0IHRoZSBkZWx0YSBhcHBsaWVkCisgICAgICAgIHRvIHRoZSBhY3R1YWwgc2Nyb2xsIHBvc2l0
aW9uIGlzIHRoZSBhY2NlbGVyYXRlZCBkZWx0YS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oOiBBZGRlZC4KKwogMjAyMS0xMS0yOSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIGJ1
aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oIGIvU291cmNl
L1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAppbmRleCA0MmNhYTU3NWVjOGZlMmYwMTg4Mjc3OWE0
YjQzMzFiZGFjYjI3YmZmLi5iMjYzZWU0NjQ4NTY2NjVjZTkwZjc4M2Q2Y2U3ZTBkZWQ5YWVlMDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKQEAgLTg3Niw2ICs4NzYsMTAgQEAKICNkZWZpbmUg
RU5BQkxFX1dIRUVMX0VWRU5UX0xBVENISU5HIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFD
KQorI2RlZmluZSBFTkFCTEVfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUiAxCisjZW5kaWYKKwog
I2lmICFkZWZpbmVkKEVOQUJMRV9TQ1JPTExJTkdfVEhSRUFEKQogI2lmIFVTRShOSUNPU0lBKQog
I2RlZmluZSBFTkFCTEVfU0NST0xMSU5HX1RIUkVBRCAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL3NwaS9tYWMvSU9LaXRTUElNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL21hYy9JT0tpdFNQSU1hYy5oCmluZGV4IDE5ZDVlYjg0ODBhNmJjMWJkZTUxMzhiN2Q5
NTNjOTY4ODgwOTIyZTcuLmQ0MzBiODE1ZDQ0Y2E1NDAzZmQ0MTEwMWViZmUzNDQ3NTIzZGQ3ZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL21hYy9JT0tpdFNQSU1hYy5oCkBAIC02
Niw2ICs2Niw4IEBAIElPSElEU2VydmljZUNsaWVudFJlZiBJT0hJREV2ZW50U3lzdGVtQ2xpZW50
Q29weVNlcnZpY2VGb3JSZWdpc3RyeUlEKElPSElERXZlbnRTCiB2b2lkIElPSElERXZlbnRTeXN0
ZW1DbGllbnRSZWdpc3RlckRldmljZU1hdGNoaW5nQmxvY2soSU9ISURFdmVudFN5c3RlbUNsaWVu
dFJlZiwgSU9ISURTZXJ2aWNlQ2xpZW50QmxvY2ssIHZvaWQgKiwgdm9pZCAqKTsKIHZvaWQgSU9I
SURFdmVudFN5c3RlbUNsaWVudFVucmVnaXN0ZXJEZXZpY2VNYXRjaGluZ0Jsb2NrKElPSElERXZl
bnRTeXN0ZW1DbGllbnRSZWYpOwogdm9pZCBJT0hJREV2ZW50U3lzdGVtQ2xpZW50U2NoZWR1bGVX
aXRoRGlzcGF0Y2hRdWV1ZShJT0hJREV2ZW50U3lzdGVtQ2xpZW50UmVmLCBkaXNwYXRjaF9xdWV1
ZV90KTsKK3ZvaWQgSU9ISURFdmVudFN5c3RlbUNsaWVudFNldERpc3BhdGNoUXVldWUoSU9ISURF
dmVudFN5c3RlbUNsaWVudFJlZiwgZGlzcGF0Y2hfcXVldWVfdCk7Cit2b2lkIElPSElERXZlbnRT
eXN0ZW1DbGllbnRBY3RpdmF0ZShJT0hJREV2ZW50U3lzdGVtQ2xpZW50UmVmKTsKIAogQ0ZUeXBl
UmVmIElPSElEU2VydmljZUNsaWVudENvcHlQcm9wZXJ0eShJT0hJRFNlcnZpY2VDbGllbnRSZWYg
c2VydmljZSwgQ0ZTdHJpbmdSZWYga2V5KTsKIApAQCAtODQsNiArODYsNyBAQCBlbnVtIHsKIHR5
cGVkZWYgdWludDMyX3QgSU9ISURFdmVudFR5cGU7CiAKIHR5cGVkZWYgdWludDMyX3QgSU9ISURF
dmVudEZpZWxkOwordHlwZWRlZiB1aW50NjRfdCBJT0hJREV2ZW50U2VuZGVySUQ7CiAKICNpZmRl
ZiBfX0xQNjRfXwogdHlwZWRlZiBkb3VibGUgSU9ISURGbG9hdDsKQEAgLTk5LDYgKzEwMiw3IEBA
IHN0YXRpYyBjb25zdCBJT0hJREV2ZW50RmllbGQga0lPSElERXZlbnRGaWVsZFNjcm9sbFkgPSAo
a0lPSElERXZlbnRGaWVsZFNjcm9sbEJhCiAKIHVpbnQ2NF90IElPSElERXZlbnRHZXRUaW1lU3Rh
bXAoSU9ISURFdmVudFJlZik7CiBJT0hJREZsb2F0IElPSElERXZlbnRHZXRGbG9hdFZhbHVlKElP
SElERXZlbnRSZWYsIElPSElERXZlbnRGaWVsZCk7CitJT0hJREV2ZW50U2VuZGVySUQgSU9ISURF
dmVudEdldFNlbmRlcklEKElPSElERXZlbnRSZWYpOwogCiBXVEZfRVhURVJOX0NfRU5ECiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vTG9nZ2luZy5oIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggZDVlN2E4Y2MxMWVmNjBlNWJjN2EwY2M3ODYyNzhi
OGVjYjMxZmRlYi4uNDRlMGE3YWNiN2I1M2Q2MGI0N2FiYzQ2ZjlkZTFkY2Q5ZGRlZmNiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTkxLDYgKzkxLDcgQEAgZXh0ZXJuICJDIiB7CiAg
ICAgTShSZW1vdGVMYXllclRyZWUpIFwKICAgICBNKFJlc2l6ZSkgXAogICAgIE0oUmVzb3VyY2VM
b2FkU3RhdGlzdGljcykgXAorICAgIE0oU2Nyb2xsQW5pbWF0aW9ucykgXAogICAgIE0oU2Nyb2xs
aW5nKSBcCiAgICAgTShTZWxlY3Rpb24pIFwKICAgICBNKFNlcnZpY2VXb3JrZXIpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xNzJkZWM0M2MxYjdmNTVhNjkxYWRiYWU5NzNjYmQ5MDY5ODAwYjYwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmUuY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmgiCisKKyNpZiBFTkFC
TEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmU6OlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKGZsb2F0IGdhaW5MaW5lYXIs
IGZsb2F0IGdhaW5QYXJhYm9saWMsIGZsb2F0IGdhaW5DdWJpYywgZmxvYXQgZ2FpblF1YXJ0aWMs
IGZsb2F0IHRhbmdlbnRTcGVlZExpbmVhciwgZmxvYXQgdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9v
dCwgZmxvYXQgcmVzb2x1dGlvbikKKyAgICA6IG1fcGFyYW1ldGVycyB7IGdhaW5MaW5lYXIsIGdh
aW5QYXJhYm9saWMsIGdhaW5DdWJpYywgZ2FpblF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwg
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwgcmVzb2x1dGlvbiB9Cit7Cit9CisKK1Njcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjppbnRlcnBvbGF0
ZShjb25zdCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSYgZnJvbSwgY29uc3QgU2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmUmIHRvLCBmbG9hdCBhbW91bnQpCit7CisgICAgYXV0byBpbnRlcnBv
bGF0ZSA9IFsmXSAoZmxvYXQgYSwgZmxvYXQgYikgLT4gZmxvYXQgeworICAgICAgICByZXR1cm4g
YSArIGFtb3VudCAqIChiIC0gYSk7CisgICAgfTsKKworICAgIGF1dG8gZ2FpbkxpbmVhciA9IGlu
dGVycG9sYXRlKGZyb20ubV9wYXJhbWV0ZXJzLmdhaW5MaW5lYXIsIHRvLm1fcGFyYW1ldGVycy5n
YWluTGluZWFyKTsKKyAgICBhdXRvIGdhaW5QYXJhYm9saWMgPSBpbnRlcnBvbGF0ZShmcm9tLm1f
cGFyYW1ldGVycy5nYWluUGFyYWJvbGljLCB0by5tX3BhcmFtZXRlcnMuZ2FpblBhcmFib2xpYyk7
CisgICAgYXV0byBnYWluQ3ViaWMgPSBpbnRlcnBvbGF0ZShmcm9tLm1fcGFyYW1ldGVycy5nYWlu
Q3ViaWMsIHRvLm1fcGFyYW1ldGVycy5nYWluQ3ViaWMpOworICAgIGF1dG8gZ2FpblF1YXJ0aWMg
PSBpbnRlcnBvbGF0ZShmcm9tLm1fcGFyYW1ldGVycy5nYWluUXVhcnRpYywgdG8ubV9wYXJhbWV0
ZXJzLmdhaW5RdWFydGljKTsKKworICAgIGF1dG8gdGFuZ2VudFNwZWVkTGluZWFyID0gaW50ZXJw
b2xhdGUoZnJvbS5tX3BhcmFtZXRlcnMudGFuZ2VudFNwZWVkTGluZWFyLCB0by5tX3BhcmFtZXRl
cnMudGFuZ2VudFNwZWVkTGluZWFyKTsKKyAgICBhdXRvIHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jv
b3QgPSBpbnRlcnBvbGF0ZShmcm9tLm1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQYXJhYm9saWNS
b290LCB0by5tX3BhcmFtZXRlcnMudGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCk7CisKKyAgICBy
ZXR1cm4geyBnYWluTGluZWFyLCBnYWluUGFyYWJvbGljLCBnYWluQ3ViaWMsIGdhaW5RdWFydGlj
LCB0YW5nZW50U3BlZWRMaW5lYXIsIHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QsIGZyb20ubV9w
YXJhbWV0ZXJzLnJlc29sdXRpb24gfTsKK30KKwordm9pZCBTY3JvbGxpbmdBY2NlbGVyYXRpb25D
dXJ2ZTo6Y29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9p
bnRlcm1lZGlhdGVzKQorICAgICAgICByZXR1cm47CisgICAgbV9pbnRlcm1lZGlhdGVzID0gQ29t
cHV0ZWRJbnRlcm1lZGlhdGVWYWx1ZXMgeyB9OworCisgICAgZmxvYXQgdGFuZ2VudEluaXRpYWxZ
OworICAgIG1faW50ZXJtZWRpYXRlcy0+dGFuZ2VudFN0YXJ0WCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptYXgoKTsKKyAgICBtX2ludGVybWVkaWF0ZXMtPmZhbGxvZmZTdGFydFggPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CisKKyAgICBhdXRvIHF1YXJ0aWNTbG9w
ZSA9IFsmXShmbG9hdCB4KSB7CisgICAgICAgIHJldHVybiAoNCAqIHN0ZDo6cG93KHgsIDMpICog
c3RkOjpwb3cobV9wYXJhbWV0ZXJzLmdhaW5RdWFydGljLCA0KSkgKyAoMyAqIHN0ZDo6cG93KHgs
IDIpICogc3RkOjpwb3cobV9wYXJhbWV0ZXJzLmdhaW5DdWJpYywgMykpICsgKDIgKiB4ICogc3Rk
Ojpwb3cobV9wYXJhbWV0ZXJzLmdhaW5QYXJhYm9saWMsIDIpKSArIG1fcGFyYW1ldGVycy5nYWlu
TGluZWFyOworICAgIH07CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZExpbmVh
cikgeworICAgICAgICB0YW5nZW50SW5pdGlhbFkgPSBldmFsdWF0ZVF1YXJ0aWMobV9wYXJhbWV0
ZXJzLnRhbmdlbnRTcGVlZExpbmVhcik7CisgICAgICAgIG1faW50ZXJtZWRpYXRlcy0+dGFuZ2Vu
dFNsb3BlID0gcXVhcnRpY1Nsb3BlKG1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRMaW5lYXIpOwor
ICAgICAgICBtX2ludGVybWVkaWF0ZXMtPnRhbmdlbnRJbnRlcmNlcHQgPSB0YW5nZW50SW5pdGlh
bFkgLSBtX2ludGVybWVkaWF0ZXMtPnRhbmdlbnRTbG9wZSAqIG1fcGFyYW1ldGVycy50YW5nZW50
U3BlZWRMaW5lYXI7CisgICAgICAgIG1faW50ZXJtZWRpYXRlcy0+dGFuZ2VudFN0YXJ0WCA9IG1f
cGFyYW1ldGVycy50YW5nZW50U3BlZWRMaW5lYXI7CisKKyAgICAgICAgaWYgKG1fcGFyYW1ldGVy
cy50YW5nZW50U3BlZWRQYXJhYm9saWNSb290KSB7CisgICAgICAgICAgICBmbG9hdCB5MSA9IG1f
aW50ZXJtZWRpYXRlcy0+dGFuZ2VudFNsb3BlICogbV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZFBh
cmFib2xpY1Jvb3QgKyBtX2ludGVybWVkaWF0ZXMtPnRhbmdlbnRJbnRlcmNlcHQ7CisgICAgICAg
ICAgICBtX2ludGVybWVkaWF0ZXMtPmZhbGxvZmZTbG9wZSA9IDIgKiB5MSAqIG1faW50ZXJtZWRp
YXRlcy0+dGFuZ2VudFNsb3BlOworICAgICAgICAgICAgbV9pbnRlcm1lZGlhdGVzLT5mYWxsb2Zm
SW50ZXJjZXB0ID0gc3RkOjpwb3coeTEsIDIpIC0gbV9pbnRlcm1lZGlhdGVzLT5mYWxsb2ZmU2xv
cGUgKiBtX3BhcmFtZXRlcnMudGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdDsKKyAgICAgICAgICAg
IG1faW50ZXJtZWRpYXRlcy0+ZmFsbG9mZlN0YXJ0WCA9IG1fcGFyYW1ldGVycy50YW5nZW50U3Bl
ZWRQYXJhYm9saWNSb290OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3BhcmFtZXRlcnMu
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCkgeworICAgICAgICB0YW5nZW50SW5pdGlhbFkgPSBl
dmFsdWF0ZVF1YXJ0aWMobV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QpOwor
ICAgICAgICBtX2ludGVybWVkaWF0ZXMtPmZhbGxvZmZTbG9wZSA9IHF1YXJ0aWNTbG9wZShtX3Bh
cmFtZXRlcnMudGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCk7CisgICAgICAgIG1faW50ZXJtZWRp
YXRlcy0+ZmFsbG9mZkludGVyY2VwdCA9IHN0ZDo6cG93KHRhbmdlbnRJbml0aWFsWSwgMikgLSBt
X2ludGVybWVkaWF0ZXMtPmZhbGxvZmZTbG9wZSAqICBtX3BhcmFtZXRlcnMudGFuZ2VudFNwZWVk
UGFyYWJvbGljUm9vdDsKKyAgICAgICAgbV9pbnRlcm1lZGlhdGVzLT50YW5nZW50U3RhcnRYID0g
bV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3Q7CisgICAgfQorfQorCitmbG9h
dCBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTo6ZXZhbHVhdGVRdWFydGljKGZsb2F0IHgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6cG93KG1fcGFyYW1ldGVycy5nYWluUXVhcnRpYyAqIHgs
IDQpICsgc3RkOjpwb3cobV9wYXJhbWV0ZXJzLmdhaW5DdWJpYyAqIHgsIDMpICsgc3RkOjpwb3co
bV9wYXJhbWV0ZXJzLmdhaW5QYXJhYm9saWMgKiB4LCAyKSArIG1fcGFyYW1ldGVycy5nYWluTGlu
ZWFyICogeDsKK30KKworZmxvYXQgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmFjY2VsZXJh
dGlvbkZhY3RvcihmbG9hdCB2YWx1ZSkKK3sKKyAgICBjb25zdGV4cHIgZmxvYXQgZnJhbWVSYXRl
ID0gNjcuZjsgLy8gV2h5IGlzIHRoaXMgNjcgYW5kIG5vdCA2MD8KKyAgICBjb25zdGV4cHIgZmxv
YXQgY3Vyc29yU2NhbGUgPSA5Ni5mIC8gZnJhbWVSYXRlOworCisgICAgY29tcHV0ZUludGVybWVk
aWF0ZVZhbHVlc0lmTmVlZGVkKCk7CisKKyAgICBmbG9hdCBtdWx0aXBsaWVyOworICAgIGZsb2F0
IGRldmljZVNjYWxlID0gbV9wYXJhbWV0ZXJzLnJlc29sdXRpb24gLyBmcmFtZVJhdGU7CisgICAg
dmFsdWUgLz0gZGV2aWNlU2NhbGU7CisKKyAgICBpZiAodmFsdWUgPD0gbV9pbnRlcm1lZGlhdGVz
LT50YW5nZW50U3RhcnRYKQorICAgICAgICBtdWx0aXBsaWVyID0gZXZhbHVhdGVRdWFydGljKHZh
bHVlKTsKKyAgICBlbHNlIGlmICh2YWx1ZSA8PSBtX2ludGVybWVkaWF0ZXMtPmZhbGxvZmZTdGFy
dFggJiYgbV9pbnRlcm1lZGlhdGVzLT50YW5nZW50U3RhcnRYID09IG1fcGFyYW1ldGVycy50YW5n
ZW50U3BlZWRMaW5lYXIpCisgICAgICAgIG11bHRpcGxpZXIgPSBtX2ludGVybWVkaWF0ZXMtPnRh
bmdlbnRTbG9wZSAqIHZhbHVlICsgbV9pbnRlcm1lZGlhdGVzLT50YW5nZW50SW50ZXJjZXB0Owor
ICAgIGVsc2UKKyAgICAgICAgbXVsdGlwbGllciA9IHN0ZDo6c3FydChtX2ludGVybWVkaWF0ZXMt
PmZhbGxvZmZTbG9wZSAqIHZhbHVlICsgbV9pbnRlcm1lZGlhdGVzLT5mYWxsb2ZmSW50ZXJjZXB0
KTsKKworICAgIHJldHVybiBtdWx0aXBsaWVyICogY3Vyc29yU2NhbGU7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3BhcmFtZXRlcnMuZ2FpbkxpbmVhcjsKKyAgICBlbmNv
ZGVyIDw8IG1fcGFyYW1ldGVycy5nYWluUGFyYWJvbGljOworICAgIGVuY29kZXIgPDwgbV9wYXJh
bWV0ZXJzLmdhaW5DdWJpYzsKKyAgICBlbmNvZGVyIDw8IG1fcGFyYW1ldGVycy5nYWluUXVhcnRp
YzsKKworICAgIGVuY29kZXIgPDwgbV9wYXJhbWV0ZXJzLnRhbmdlbnRTcGVlZExpbmVhcjsKKyAg
ICBlbmNvZGVyIDw8IG1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQYXJhYm9saWNSb290OworCisg
ICAgZW5jb2RlciA8PCBtX3BhcmFtZXRlcnMucmVzb2x1dGlvbjsKK30KKworc3RkOjpvcHRpb25h
bDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6
OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgZmxvYXQgZ2FpbkxpbmVhcjsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdhaW5MaW5lYXIpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGZsb2F0IGdhaW5QYXJhYm9saWM7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShnYWluUGFyYWJvbGljKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBm
bG9hdCBnYWluQ3ViaWM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShnYWluQ3ViaWMpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGZsb2F0IGdhaW5RdWFydGljOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoZ2FpblF1YXJ0aWMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodGFuZ2VudFNwZWVkTGluZWFyKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBmbG9hdCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290OworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBmbG9hdCByZXNvbHV0aW9uOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
eyB7IGdhaW5MaW5lYXIsIGdhaW5QYXJhYm9saWMsIGdhaW5DdWJpYywgZ2FpblF1YXJ0aWMsIHRh
bmdlbnRTcGVlZExpbmVhciwgdGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwgcmVzb2x1dGlvbiB9
IH07Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlJiBjdXJ2ZSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91
cFNjb3BlIGdyb3VwKHRzKTsKKworICAgIHRzIDw8ICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2
ZSI7CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImdhaW5MaW5lYXIiLCBjdXJ2ZS5tX3BhcmFtZXRl
cnMuZ2FpbkxpbmVhcik7CisgICAgdHMuZHVtcFByb3BlcnR5KCJnYWluUGFyYWJvbGljIiwgY3Vy
dmUubV9wYXJhbWV0ZXJzLmdhaW5QYXJhYm9saWMpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZ2Fp
bkN1YmljIiwgY3VydmUubV9wYXJhbWV0ZXJzLmdhaW5DdWJpYyk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJnYWluUXVhcnRpYyIsIGN1cnZlLm1fcGFyYW1ldGVycy5nYWluUXVhcnRpYyk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJ0YW5nZW50U3BlZWRMaW5lYXIiLCBjdXJ2ZS5tX3BhcmFtZXRlcnMu
dGFuZ2VudFNwZWVkTGluZWFyKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInRhbmdlbnRTcGVlZFBh
cmFib2xpY1Jvb3QiLCBjdXJ2ZS5tX3BhcmFtZXRlcnMudGFuZ2VudFNwZWVkUGFyYWJvbGljUm9v
dCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXNvbHV0aW9uIiwgY3VydmUubV9wYXJhbWV0ZXJz
LnJlc29sdXRpb24pOworCisgICAgcmV0dXJuIHRzOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykK
Kworc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gU2Nyb2xsaW5nQWNj
ZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVs
RXZlbnQmKQoreworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQ
QVRDSEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xsaW5nQWNjZWxl
cmF0aW9uQ3VydmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjkyNTY5NmU0MWIxZDYwNTEzZDc1MGVjODYwODM1ZjJkZGZm
ZjFiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZ0Fj
Y2VsZXJhdGlvbkN1cnZlLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorCisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBEZWNvZGVyOworY2xhc3MgRW5jb2RlcjsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5hdGl2ZVdlYldoZWVsRXZlbnQ7CisKK2NsYXNz
IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxpbmdBY2Nl
bGVyYXRpb25DdXJ2ZShmbG9hdCBnYWluTGluZWFyLCBmbG9hdCBnYWluUGFyYWJvbGljLCBmbG9h
dCBnYWluQ3ViaWMsIGZsb2F0IGdhaW5RdWFydGljLCBmbG9hdCB0YW5nZW50U3BlZWRMaW5lYXIs
IGZsb2F0IHRhbmdlbnRTcGVlZFBhcmFib2xpY1Jvb3QsIGZsb2F0IHJlc29sdXRpb24pOworCisg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IGZyb21O
YXRpdmVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKKworICAgIHN0YXRp
YyBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSBpbnRlcnBvbGF0ZShjb25zdCBTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZSYgZnJvbSwgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUm
IHRvLCBmbG9hdCBhbW91bnQpOworCisgICAgZmxvYXQgYWNjZWxlcmF0aW9uRmFjdG9yKGZsb2F0
KTsKKworICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBkZWNvZGUoSVBDOjpEZWNv
ZGVyJik7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGFyYW1ldGVycy5n
YWluTGluZWFyID09IG90aGVyLm1fcGFyYW1ldGVycy5nYWluTGluZWFyCisgICAgICAgICAgICAm
JiBtX3BhcmFtZXRlcnMuZ2FpblBhcmFib2xpYyA9PSBvdGhlci5tX3BhcmFtZXRlcnMuZ2FpblBh
cmFib2xpYworICAgICAgICAgICAgJiYgbV9wYXJhbWV0ZXJzLmdhaW5DdWJpYyA9PSBvdGhlci5t
X3BhcmFtZXRlcnMuZ2FpbkN1YmljCisgICAgICAgICAgICAmJiBtX3BhcmFtZXRlcnMuZ2FpblF1
YXJ0aWMgPT0gb3RoZXIubV9wYXJhbWV0ZXJzLmdhaW5RdWFydGljCisgICAgICAgICAgICAmJiBt
X3BhcmFtZXRlcnMudGFuZ2VudFNwZWVkTGluZWFyID09IG90aGVyLm1fcGFyYW1ldGVycy50YW5n
ZW50U3BlZWRMaW5lYXIKKyAgICAgICAgICAgICYmIG1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQ
YXJhYm9saWNSb290ID09IG90aGVyLm1fcGFyYW1ldGVycy50YW5nZW50U3BlZWRQYXJhYm9saWNS
b290CisgICAgICAgICAgICAmJiBtX3BhcmFtZXRlcnMucmVzb2x1dGlvbiA9PSBvdGhlci5tX3Bh
cmFtZXRlcnMucmVzb2x1dGlvbjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUmKTsK
KworICAgIHZvaWQgY29tcHV0ZUludGVybWVkaWF0ZVZhbHVlc0lmTmVlZGVkKCk7CisKKyAgICBm
bG9hdCBldmFsdWF0ZVF1YXJ0aWMoZmxvYXQpIGNvbnN0OworCisgICAgc3RydWN0IHsKKyAgICAg
ICAgZmxvYXQgZ2FpbkxpbmVhciB7IDAgfTsKKyAgICAgICAgZmxvYXQgZ2FpblBhcmFib2xpYyB7
IDAgfTsKKyAgICAgICAgZmxvYXQgZ2FpbkN1YmljIHsgMCB9OworICAgICAgICBmbG9hdCBnYWlu
UXVhcnRpYyB7IDAgfTsKKyAgICAgICAgZmxvYXQgdGFuZ2VudFNwZWVkTGluZWFyIHsgMCB9Owor
ICAgICAgICBmbG9hdCB0YW5nZW50U3BlZWRQYXJhYm9saWNSb290IHsgMCB9OworICAgICAgICBm
bG9hdCByZXNvbHV0aW9uIHsgMCB9OworICAgIH0gbV9wYXJhbWV0ZXJzOworCisgICAgc3RydWN0
IENvbXB1dGVkSW50ZXJtZWRpYXRlVmFsdWVzIHsKKyAgICAgICAgZmxvYXQgdGFuZ2VudFN0YXJ0
WCB7IDAgfTsKKyAgICAgICAgZmxvYXQgdGFuZ2VudFNsb3BlIHsgMCB9OworICAgICAgICBmbG9h
dCB0YW5nZW50SW50ZXJjZXB0IHsgMCB9OworICAgICAgICBmbG9hdCBmYWxsb2ZmU3RhcnRYIHsg
MCB9OworICAgICAgICBmbG9hdCBmYWxsb2ZmU2xvcGUgeyAwIH07CisgICAgICAgIGZsb2F0IGZh
bGxvZmZJbnRlcmNlcHQgeyAwIH07CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29tcHV0
ZWRJbnRlcm1lZGlhdGVWYWx1ZXM+IG1faW50ZXJtZWRpYXRlczsKK307CisKK1RleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZl
Jik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1PTUVOVFVN
X0VWRU5UX0RJU1BBVENIRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDEwYzJlMTJl
MGVjNGY2NTE0NjE3YmMxNWQ0MmFhM2YxM2RhMGNmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbQpAQCAt
MCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUuaCIKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVO
VF9ESVNQQVRDSEVSKSAmJiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2Nv
Y29hL0lPS2l0U1BJLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgZmxvYXQgZnJv
bUZpeGVkUG9pbnQoZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlIC8gNjU1MzYuMGY7
Cit9CisKK3N0YXRpYyBmbG9hdCByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihOU0RpY3Rpb25hcnkg
KnBhcmFtZXRlcnMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKyAgICByZXR1cm4gZnJvbUZpeGVkUG9p
bnQoW1twYXJhbWV0ZXJzIG9iamVjdEZvcktleTpAKGtleSldIGZsb2F0VmFsdWVdKTsKK30KKwor
c3RhdGljIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlIGZyb21JT0hJREN1cnZlKE5TRGljdGlv
bmFyeSAqcGFyYW1ldGVycywgZmxvYXQgcmVzb2x1dGlvbikKK3sKKyAgICBhdXRvIGdhaW5MaW5l
YXIgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxHYWluTGlu
ZWFyS2V5KTsKKyAgICBhdXRvIGdhaW5QYXJhYm9saWMgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRl
cihwYXJhbWV0ZXJzLCBrSElEQWNjZWxHYWluUGFyYWJvbGljS2V5KTsKKyAgICBhdXRvIGdhaW5D
dWJpYyA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVyKHBhcmFtZXRlcnMsIGtISURBY2NlbEdhaW5D
dWJpY0tleSk7CisgICAgYXV0byBnYWluUXVhcnRpYyA9IHJlYWRGaXhlZFBvaW50UGFyYW1ldGVy
KHBhcmFtZXRlcnMsIGtISURBY2NlbEdhaW5RdWFydGljS2V5KTsKKworICAgIGF1dG8gdGFuZ2Vu
dFNwZWVkTGluZWFyID0gcmVhZEZpeGVkUG9pbnRQYXJhbWV0ZXIocGFyYW1ldGVycywga0hJREFj
Y2VsVGFuZ2VudFNwZWVkTGluZWFyS2V5KTsKKyAgICBhdXRvIHRhbmdlbnRTcGVlZFBhcmFib2xp
Y1Jvb3QgPSByZWFkRml4ZWRQb2ludFBhcmFtZXRlcihwYXJhbWV0ZXJzLCBrSElEQWNjZWxUYW5n
ZW50U3BlZWRQYXJhYm9saWNSb290S2V5KTsKKworICAgIHJldHVybiB7IGdhaW5MaW5lYXIsIGdh
aW5QYXJhYm9saWMsIGdhaW5DdWJpYywgZ2FpblF1YXJ0aWMsIHRhbmdlbnRTcGVlZExpbmVhciwg
dGFuZ2VudFNwZWVkUGFyYWJvbGljUm9vdCwgcmVzb2x1dGlvbiB9OworfQorCitzdGF0aWMgU2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgZnJvbUlPSElEQ3VydmVBcnJheVdpdGhBY2NlbGVyYXRp
b24oTlNBcnJheTxOU0RpY3Rpb25hcnkgKj4gKmlvSElEQ3VydmVzLCBmbG9hdCBkZXNpcmVkQWNj
ZWxlcmF0aW9uLCBmbG9hdCByZXNvbHV0aW9uKQoreworICAgIF9fYmxvY2sgc2l6ZV90IGN1cnJl
bnRJbmRleCA9IDA7CisgICAgX19ibG9jayBWZWN0b3I8c3RkOjpwYWlyPGZsb2F0LCBTY3JvbGxp
bmdBY2NlbGVyYXRpb25DdXJ2ZT4+IGN1cnZlczsKKworICAgIFtpb0hJREN1cnZlcyBlbnVtZXJh
dGVPYmplY3RzVXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqcGFyYW1ldGVycywgTlNVSW50ZWdl
ciBpLCBCT09MICopIHsKKyAgICAgICAgYXV0byBjdXJ2ZUFjY2VsZXJhdGlvbiA9IHJlYWRGaXhl
ZFBvaW50UGFyYW1ldGVyKHBhcmFtZXRlcnMsIGtISURBY2NlbEluZGV4S2V5KTsKKyAgICAgICAg
YXV0byBjdXJ2ZSA9IGZyb21JT0hJREN1cnZlKHBhcmFtZXRlcnMsIHJlc29sdXRpb24pOworCisg
ICAgICAgIGlmIChkZXNpcmVkQWNjZWxlcmF0aW9uID4gY3VydmVBY2NlbGVyYXRpb24pCisgICAg
ICAgICAgICBjdXJyZW50SW5kZXggPSBpOworCisgICAgICAgIGN1cnZlcy5hcHBlbmQoeyBjdXJ2
ZUFjY2VsZXJhdGlvbiwgY3VydmUgfSk7CisgICAgfV07CisKKyAgICAvLyBJbnRlcnBvbGF0aW9u
IGlmIGRlc2lyZWRBY2NlbGVyYXRpb24gaXMgaW4gYmV0d2VlbiB0d28gY3VydmVzLgorICAgIGlm
IChjdXJ2ZXNbY3VycmVudEluZGV4XS5maXJzdCA8IGRlc2lyZWRBY2NlbGVyYXRpb24gJiYgKGN1
cnJlbnRJbmRleCArIDEpIDwgY3VydmVzLnNpemUoKSkgeworICAgICAgICBjb25zdCBhdXRvJiBs
b3dDdXJ2ZSA9IGN1cnZlc1tjdXJyZW50SW5kZXhdOworICAgICAgICBjb25zdCBhdXRvJiBoaWdo
Q3VydmUgPSBjdXJ2ZXNbY3VycmVudEluZGV4ICsgMV07CisgICAgICAgIGZsb2F0IHJhdGlvID0g
KGRlc2lyZWRBY2NlbGVyYXRpb24gLSBsb3dDdXJ2ZS5maXJzdCkgLyAoaGlnaEN1cnZlLmZpcnN0
IC0gbG93Q3VydmUuZmlyc3QpOworICAgICAgICByZXR1cm4gU2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmU6OmludGVycG9sYXRlKGxvd0N1cnZlLnNlY29uZCwgaGlnaEN1cnZlLnNlY29uZCwgcmF0
aW8pOworICAgIH0KKworICAgIHJldHVybiBjdXJ2ZXNbY3VycmVudEluZGV4XS5zZWNvbmQ7Cit9
CisKK3N0YXRpYyBSZXRhaW5QdHI8SU9ISURFdmVudFN5c3RlbUNsaWVudFJlZj4gY3JlYXRlSElE
Q2xpZW50KCkKK3sKKyAgICBhdXRvIGNsaWVudCA9IGFkb3B0Q0YoSU9ISURFdmVudFN5c3RlbUNs
aWVudENyZWF0ZVdpdGhUeXBlKG5pbCwga0lPSElERXZlbnRTeXN0ZW1DbGllbnRUeXBlUGFzc2l2
ZSwgbmlsKSk7CisgICAgSU9ISURFdmVudFN5c3RlbUNsaWVudFNldERpc3BhdGNoUXVldWUoY2xp
ZW50LmdldCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKKyAgICBJT0hJREV2ZW50U3lz
dGVtQ2xpZW50QWN0aXZhdGUoY2xpZW50LmdldCgpKTsKKyAgICByZXR1cm4gY2xpZW50OworfQor
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4gZnJvbUlP
SElERGV2aWNlKElPSElERXZlbnRTZW5kZXJJRCBzZW5kZXJJRCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPElPSElERXZlbnRTeXN0ZW1DbGllbnRSZWY+PiBjbGllbnQ7
CisgICAgaWYgKCFjbGllbnQuZ2V0KCkpCisgICAgICAgIGNsaWVudC5nZXQoKSA9IGNyZWF0ZUhJ
RENsaWVudCgpOworCisgICAgUmV0YWluUHRyPElPSElEU2VydmljZUNsaWVudFJlZj4gaW9ISURT
ZXJ2aWNlID0gYWRvcHRDRihJT0hJREV2ZW50U3lzdGVtQ2xpZW50Q29weVNlcnZpY2VGb3JSZWdp
c3RyeUlEKGNsaWVudC5nZXQoKS5nZXQoKSwgc2VuZGVySUQpKTsKKyAgICBpZiAoIWlvSElEU2Vy
dmljZSkgeworICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiU2Nyb2xsaW5n
QWNjZWxlcmF0aW9uQ3VydmU6OmZyb21JT0hJRERldmljZSBkaWQgbm90IGZpbmQgbWF0Y2hpbmcg
SElEIHNlcnZpY2UiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBhdXRvIGN1cnZlcyA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGQXJyYXlSZWY+KElPSElE
U2VydmljZUNsaWVudENvcHlQcm9wZXJ0eShpb0hJRFNlcnZpY2UuZ2V0KCksIENGU1RSKGtISURT
Y3JvbGxBY2NlbFBhcmFtZXRyaWNDdXJ2ZXNLZXkpKSkpOworICAgIGlmICghY3VydmVzKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZTo6ZnJvbUlPSElERGV2aWNlIGZhaWxlZCB0byBsb29rIHVwIGN1cnZlcyIpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGVyZSBp
cyBzb21lIGFkZGl0aW9uYWwgZmFsbGJhY2sgdG8gaW1wbGVtZW50IGhlcmUsIHRob3VnaCB0aGlz
IHNlZW1zIHVzdWFsbHkgc3VmZmljaWVudC4KKyAgICBhdXRvIHNjcm9sbEFjY2VsZXJhdGlvblR5
cGUgPSBhZG9wdENGKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oSU9ISURTZXJ2aWNlQ2xp
ZW50Q29weVByb3BlcnR5KGlvSElEU2VydmljZS5nZXQoKSwgQ0ZTVFIoIkhJRFNjcm9sbEFjY2Vs
ZXJhdGlvblR5cGUiKSkpKTsKKyAgICBpZiAoIXNjcm9sbEFjY2VsZXJhdGlvblR5cGUpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlOjpmcm9tSU9ISUREZXZpY2UgZmFpbGVkIHRvIGxvb2sgdXAgYWNjZWxlcmF0aW9uIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIHNj
cm9sbEFjY2VsZXJhdGlvbiA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihJ
T0hJRFNlcnZpY2VDbGllbnRDb3B5UHJvcGVydHkoaW9ISURTZXJ2aWNlLmdldCgpLCBzY3JvbGxB
Y2NlbGVyYXRpb25UeXBlLmdldCgpKSkpOworICAgIGlmICghc2Nyb2xsQWNjZWxlcmF0aW9uKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJTY3JvbGxpbmdBY2NlbGVy
YXRpb25DdXJ2ZTo6ZnJvbUlPSElERGV2aWNlIGZhaWxlZCB0byBsb29rIHVwIGFjY2VsZXJhdGlv
biB2YWx1ZSIpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGF1
dG8gcmVzb2x1dGlvbiA9IGFkb3B0Q0YoZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihJT0hJ
RFNlcnZpY2VDbGllbnRDb3B5UHJvcGVydHkoaW9ISURTZXJ2aWNlLmdldCgpLCBDRlNUUihrSU9I
SURTY3JvbGxSZXNvbHV0aW9uS2V5KSkpKTsKKyAgICBpZiAoIXJlc29sdXRpb24pIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlOjpmcm9tSU9ISUREZXZpY2UgZmFpbGVkIHRvIGxvb2sgdXAgcmVzb2x1dGlvbiIpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHJldHVybiBmcm9tSU9ISURD
dXJ2ZUFycmF5V2l0aEFjY2VsZXJhdGlvbigoTlNBcnJheSAqKWN1cnZlcy5nZXQoKSwgZnJvbUZp
eGVkUG9pbnQoWyhOU051bWJlciAqKXNjcm9sbEFjY2VsZXJhdGlvbi5nZXQoKSBmbG9hdFZhbHVl
XSksIGZyb21GaXhlZFBvaW50KFsoTlNOdW1iZXIgKilyZXNvbHV0aW9uLmdldCgpIGZsb2F0VmFs
dWVdKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IFNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudChjb25zdCBOYXRp
dmVXZWJXaGVlbEV2ZW50JiBuYXRpdmVXZWJXaGVlbEV2ZW50KQoreworICAgIE5TRXZlbnQgKmV2
ZW50ID0gbmF0aXZlV2ViV2hlZWxFdmVudC5uYXRpdmVFdmVudCgpOworCisgICAgYXV0byBjZ0V2
ZW50ID0gZXZlbnQuQ0dFdmVudDsKKyAgICBpZiAoIWNnRXZlbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOjpmcm9t
TmF0aXZlV2hlZWxFdmVudCBkaWQgbm90IGZpbmQgQ0cgZXZlbnQiKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIGhpZEV2ZW50ID0gYWRvcHRDRihDR0V2
ZW50Q29weUlPSElERXZlbnQoY2dFdmVudCkpOworICAgIGlmICghaGlkRXZlbnQpIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0coU2Nyb2xsQW5pbWF0aW9ucywgIlNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1
cnZlOjpmcm9tTmF0aXZlV2hlZWxFdmVudCBkaWQgbm90IGZpbmQgSElEIGV2ZW50Iik7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIGZyb21JT0hJRERl
dmljZShJT0hJREV2ZW50R2V0U2VuZGVySUQoaGlkRXZlbnQuZ2V0KCkpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFU
Q0hFUikgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggYjEzOGZkZDA1NzA1OGM4NTJk
MTAyYmYyMmQ4YTA1MzA0ZWM1YWYwYi4uYjhkMWNiOWM3ZjJhMzE4MjQyZDRhNzlmY2NhYzdiODQ2
MWFjYjBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yMjQsNiArMjI0LDcgQEAgU2hhcmVkL1BsYXRmb3Jt
UG9wdXBNZW51RGF0YS5jcHAKIFNoYXJlZC9QcmludEluZm8uY3BwCiBTaGFyZWQvUlRDTmV0d29y
ay5jcHAKIFNoYXJlZC9SVENQYWNrZXRPcHRpb25zLmNwcAorU2hhcmVkL1Njcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlLmNwcAogU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEu
Y3BwCiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAg
QG5vLXVuaWZ5CkBAIC04MTIsNiArODEzLDcgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0
aW5nQVBJLmNwcAorV2ViUHJvY2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNw
cAogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXND
b2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYTNlN2JiNjY0
NzE5MzAyMzBmZTIzZjBhNjgxYzNlN2EyMzI2ODM1My4uYzhiZTU1ODY5Mjc2ZTUwNjIwYmQzMzVj
MDBlNjY2ZGYyYzQ1NGE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMjIwLDYgKzIyMCw3
IEBAIFNoYXJlZC9tYWMvTmF0aXZlV2ViV2hlZWxFdmVudE1hYy5tbQogU2hhcmVkL21hYy9PYmpD
T2JqZWN0R3JhcGgubW0KIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tCiBTaGFyZWQvbWFj
L1ByaW50SW5mb01hYy5tbQorU2hhcmVkL21hYy9TY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1h
Yy5tbQogU2hhcmVkL21hYy9TZWNJdGVtUmVxdWVzdERhdGEuY3BwCiBTaGFyZWQvbWFjL1NlY0l0
ZW1SZXNwb25zZURhdGEuY3BwCiBTaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggODBmZDJhYjlmYzhmNjIzYTUzMzhj
MDYwYjZhNjhmYmVmMjk5ZDlhMy4uN2JiZTA5NGViZjgyN2M2NzAyMWFmZmFmYzU2NjQ2OTlkZTY5
YzllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0yODk0
LDYgKzI4OTQsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
TmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBjbG9zZU92ZXJsYXllZFZpZXdzKCk7
CiAKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGxvb2sgdGhpcyB1cCByZXBlYXRlZGx5LCBidXQgaXQgY2Fu
IGFsc28gY2hhbmdlIG9jY2FzaW9uYWxseS4KKyAgICBpZiAoZXZlbnQubW9tZW50dW1QaGFzZSgp
ID09IFdlYldoZWVsRXZlbnQ6OlBoYXNlQmVnYW4gJiYgcHJlZmVyZW5jZXMoKS5tb21lbnR1bVNj
cm9sbGluZ0FuaW1hdG9yRW5hYmxlZCgpKQorICAgICAgICBtX3Njcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlID0gU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU6OmZyb21OYXRpdmVXaGVlbEV2ZW50
KGV2ZW50KTsKKyNlbmRpZgorCiAgICAgaWYgKHdoZWVsRXZlbnRDb2FsZXNjZXIoKS5zaG91bGRE
aXNwYXRjaEV2ZW50KGV2ZW50KSkgewogICAgICAgICBhdXRvIGV2ZW50ID0gd2hlZWxFdmVudENv
YWxlc2NlcigpLm5leHRFdmVudFRvRGlzcGF0Y2goKTsKICAgICAgICAgc2VuZFdoZWVsRXZlbnQo
KmV2ZW50KTsKQEAgLTI5NDEsNiArMjk0NywxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2VuZFdo
ZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCiAgICAgICAgIHJ1YmJlckJhbmRh
YmxlRWRnZXMuc2V0TGVmdCghbV9iYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCkpOwogICAgICAg
ICBydWJiZXJCYW5kYWJsZUVkZ2VzLnNldFJpZ2h0KCFtX2JhY2tGb3J3YXJkTGlzdC0+Zm9yd2Fy
ZEl0ZW0oKSk7CiAgICAgfQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIp
CisgICAgaWYgKGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZUJl
Z2FuICYmIG1fc2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUgIT0gbV9sYXN0U2VudFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6
OkV2ZW50RGlzcGF0Y2hlcjo6U2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUobV93ZWJQYWdl
SUQsICptX3Njcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlKSwgMCwgeyB9LCBUaHJlYWQ6OlFPUzo6
VXNlckludGVyYWN0aXZlKTsKKyAgICAgICAgbV9sYXN0U2VudFNjcm9sbGluZ0FjY2VsZXJhdGlv
bkN1cnZlID0gbV9zY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVu
dChtX3dlYlBhZ2VJRCwgZXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMpLCAwLCB7IH0sIFRocmVh
ZDo6UU9TOjpVc2VySW50ZXJhY3RpdmUpOwogCiAgICAgLy8gTWFudWFsbHkgcGluZyB0aGUgd2Vi
IHByb2Nlc3MgdG8gY2hlY2sgZm9yIHJlc3BvbnNpdmVuZXNzIHNpbmNlIG91ciB3aGVlbApAQCAt
Mzk0MSw2ICszOTU1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1NjcmVlbkRpZENoYW5n
ZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIHN0ZDo6b3B0aW8KICAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIHNlbmQoTWVzc2FnZXM6OkV2
ZW50RGlzcGF0Y2hlcjo6UGFnZVNjcmVlbkRpZENoYW5nZShtX3dlYlBhZ2VJRCwgZGlzcGxheUlE
KSk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKGRp
c3BsYXlJRCwgbm9taW5hbEZyYW1lc1BlclNlY29uZCkpOwogfQogCkBAIC03ODk5LDYgKzc5MTQs
MTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNl
dFN0YXRlUmVhc29uKQogICAgICAgICBtX3hyU3lzdGVtID0gbnVsbHB0cjsKICAgICB9CiAjZW5k
aWYKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIG1fbGFzdFNl
bnRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZSA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZChQcm9jZXNz
VGVybWluYXRpb25SZWFzb24gdGVybWluYXRpb25SZWFzb24pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCmluZGV4IGQ1ZmJlOGNjOGU2YTUwZTg4Nzc2ZGJiOTk1NjcyODE1YzEx
YTdlMjIuLjhkMDc2YzIxNTI5YjAxMWFjNGY4MDI3ZmMxMmYzNTE5OTI0ZTI0YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVk
ZSAiUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxl
ci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdB
Y2NlbGVyYXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1
ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25QZXJt
aXNzaW9uUmVxdWVzdC5oIgpAQCAtMzE1OSw2ICszMTYwLDExIEBAIHByaXZhdGU6CiAgICAgV2lu
ZG93S2luZCBtX3dpbmRvd0tpbmQgeyBXaW5kb3dLaW5kOjpVbnBhcmVudGVkIH07CiAKICAgICBX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZUhhbmRsZXIgbV9ub3RpZmljYXRpb25NYW5hZ2Vy
TWVzc2FnZUhhbmRsZXI7CisKKyNpZiBFTkFCTEUoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikK
KyAgICBzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBtX3Njcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlOworICAgIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsaW5nQWNjZWxlcmF0
aW9uQ3VydmU+IG1fbGFzdFNlbnRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZTsKKyNlbmRpZgog
fTsKIAogI2lmZGVmIF9fT0JKQ19fCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjYzBlMzg4NjBmYzM5YjI2MDk0ZGRmY2E2ZDdjZDdiYjZm
MTE1ZDA2Li44MTA5Njc1NjQ1MzMxZmRiZmJhNzJkZjFlNzEyNDM2NDYxNGEyYmM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0OTYs
NiArMzQ5Niw5IEBACiAJCTJENUM5RDA0MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zlcmxh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlT3ZlcmxheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDY0ODI0OTI2NDRCMUFCMDAwMzAzMzUgLyog
UmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbW90ZUxheWVyVHJlZUxheWVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDY0ODI0QTI2NDRCMUFCMDAwMzAzMzUgLyogUmVtb3RlTGF5ZXJUcmVlTGF5ZXJzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlTGF5ZXJz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDY1RDE5NDI3NEI4RTczMDA5QzQx
MDEgLyogU2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkQ2NUQxOTUyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENjVEMTk2Mjc0QjhFODQwMDlDNDEwMSAv
KiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3Jv
bGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJENkFCNTNGMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tQREZQYWdlTnVtYmVySW5kaWNhdG9y
Lmg7IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJENkFCNTQwMTkyQjFDNEEwMDNBOUZEMSAvKiBXS1BERlBhZ2VOdW1i
ZXJJbmRpY2F0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBX
S1BERlBhZ2VOdW1iZXJJbmRpY2F0b3IubW07IHBhdGggPSBpb3MvV0tQREZQYWdlTnVtYmVySW5k
aWNhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDZCMzcxOTE4QTk2N0FE
MDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBfV0tUaHVtYm5haWxWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNzc5LDYgKzM3ODIsOCBAQAogCQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4
dElucHV0Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0
SW5wdXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERTlCMTNCMjIz
MUY3N0MwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERUFDNUNFMUFDMzY4QkIwMEExOTVEOCAvKiBf
V0tGaW5kT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tGaW5k
T3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREVFNzA5RDI3NTVBNDY4
MDBGQkY4NjQgLyogTW9tZW50dW1FdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkRF
RTcwOUUyNzU1QTQ2ODAwRkJGODY0IC8qIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRGOTU5MzQxOEE0MjQxMjAwOTc4NUExIC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJERjlFRUUzMUE3ODFG
QjQwMEI2Q0ZCRSAvKiBBUElGcmFtZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQVBJRnJhbWVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkRGOUVFRTQxQTc4MUZCNDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBUElGcmFtZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTcwODMsNiArNzA4OCw4IEBACiAJCQkJQkMyRDAyMTYxMkFDNDFDQjAwRTcz
MkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggKi8sCiAJCQkJMUFBQjRBOEMxMjk2
RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb24uaCAqLywKIAkJCQlFMUU1NTJDMzE2QUUw
NjVFMDA0RUQ2NTMgLyogU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oICovLAorCQkJ
CTJENjVEMTk2Mjc0QjhFODQwMDlDNDEwMSAvKiBTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5j
cHAgKi8sCisJCQkJMkQ2NUQxOTUyNzRCOEU4NDAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlLmggKi8sCiAJCQkJNUM4MEIzREQyMzY5MEYxMDAwODZFNkRFIC8qIFNlcnZpY2VX
b3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3BwICovLAogCQkJCTVDODBCM0RCMjM2OTBEOEQwMDg2
RTZERSAvKiBTZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmggKi8sCiAJCQkJMUFGREU2
NTcxOTU0QTQyQjAwQzQ4RkZBIC8qIFNlc3Npb25TdGF0ZS5jcHAgKi8sCkBAIC05ODczLDkgKzk4
ODAsOSBAQAogCQk1QzE1N0EwQTI3MTdDOUYxMDBFRDUyODAgLyogd2VicHVzaGQgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTVDQkI2RDREMjcxRjY3Q0Mw
MEZEMUE1RCAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAogCQkJCTUxNjBF
OTU0Mjc0Qjg4NzEwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggKi8sCiAJCQkJNTE2MEU5
NTMyNzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gKi8sCisJCQkJNUNCQjZE
NEQyNzFGNjdDQzAwRkQxQTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxpc3QgKi8s
CiAJCQkJNTFGN0JCNzUyNzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5n
LmggKi8sCiAJCQkJNTFGN0JCNzQyNzQ0OThCQTAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JU
ZXN0aW5nLm1tICovLAogCQkJCTUxNjBFOTVDMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVu
ZGxlUmVnaXN0cnkuaCAqLywKQEAgLTEwNjEyLDYgKzEwNjE5LDggQEAKIAkJCQkxQTkwQzFGMjEy
NjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk5QjAzM0U3MjI1MjU4
MEYzMDA1MDEwNzEgLyogSVBDVGVzdGluZ0FQSS5jcHAgKi8sCiAJCQkJOUIwMzNFNzEyNTI1ODBG
MzAwNTAxMDcxIC8qIElQQ1Rlc3RpbmdBUEkuaCAqLywKKwkJCQkyREVFNzA5RTI3NTVBNDY4MDBG
QkY4NjQgLyogTW9tZW50dW1FdmVudERpc3BhdGNoZXIuY3BwICovLAorCQkJCTJERUU3MDlEMjc1
NUE0NjgwMEZCRjg2NCAvKiBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oICovLAogCQkJCTdDMzg3
NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3
Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMw
MDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKQEAgLTExMTc4
LDYgKzExMTg3LDcgQEAKIAkJCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2Fy
ZFR5cGVzLm1tICovLAogCQkJCUMxRTEyM0I5MjBBMTE1NzIwMDI2NDZGNCAvKiBQREZDb250ZXh0
TWVudS5oICovLAogCQkJCUUxQ0MxQjhGMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9NYWMu
bW0gKi8sCisJCQkJMkQ2NUQxOTQyNzRCOEU3MzAwOUM0MTAxIC8qIFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlTWFjLm1tICovLAogCQkJCTUxRDEzMDRGMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJ
dGVtUmVxdWVzdERhdGEuY3BwICovLAogCQkJCTUxRDEzMDUwMTM4MkVBQzAwMDM1MUVERCAvKiBT
ZWNJdGVtUmVxdWVzdERhdGEuaCAqLywKIAkJCQk1MUQxMzA1MTEzODJFQUMwMDAzNTFFREQgLyog
U2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgKi8sCkBAIC0xMjQyMywxMyArMTI0MzMsMTMgQEAKIAkJ
CWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTUxNjBFOTU2Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBC
dW5kbGVSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzE1NzlGQzI3MTdBRjUwMDBFRDUy
ODAgLyogRGFlbW9uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUY3QkI3NzI3NDQ5
OEJCMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUxNjBFOTVFMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNjBFOTU5Mjc0QzBEODkwMDU2NzM4OCAvKiBQdXNoQXBwQnVu
ZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY3QkI3QjI3NDRDNTA3MDBDNDVBNzIgLyogUHVz
aENsaWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjBFOTVFMjc0QzJBMDMw
MDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTVD
MTU3OUZDMjcxN0FGNTAwMEVENTI4MCAvKiBEYWVtb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUxNjBFOTU2Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTJDRDY5RjI3MjMzOTNBMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1v
bi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGN0JCNzcyNzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tB
cHBCdW5kbGVGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE0OTYzLDE2ICsxNDk3Mywx
NiBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJNTE2MEU5NTUyNzRCODg3MjAwNTY3Mzg4
IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdC
N0ZCMDBFRDUyODAgLyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFG
N0JCN0QyNzQ1NjQwNDAwQzQ1QTcyIC8qIENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUMxNTc5RkYyNzE3QjZEMjAwRUQ1MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUMxNTc5RkUyNzE3QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNUMxNTc5RkIyNzE3QUY1MDAwRUQ1MjgwIC8qIERhZW1vblV0
aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjdCQjc2Mjc0NDk4QkIwMEM0NUE3MiAv
KiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxNjBFOTU1
Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTE2MEU5NUEyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MTYwRTk2MDI3NEMyQTQwMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lz
dHJ5Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE2MEU5NUEyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1
c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUY3QkI3QzI3NDRDNTA3MDBDNDVB
NzIgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk1QzE1NzlG
RTI3MTdCNkMxMDBFRDUyODAgLyogRGFlbW9uRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1QzE1NzlGQjI3MTdBRjUwMDBFRDUyODAgLyogRGFlbW9uVXRpbGl0aWVzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTEyQ0Q2QTAyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb24ubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwQzI3MTdDQTFEMDBFRDUyODAgLyogV2ViUHVzaERh
ZW1vbk1haW4ubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAyYjlkYTcwNTUw
MjkxZTUxZWQyM2JjNDlhZDc4Zjk0YWFiZDA1Zjk1Li43MTNiZGQ5NjQ1Mjk2YmZlMDMyNWZmMDFh
NTZhZmQ5MTdiNzc4ZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJF
dmVudERpc3BhdGNoZXIuaCIKIAogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJXZWJFdmVu
dENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5TWVzc2FnZXMuaCIKQEAgLTYzLDYgKzY0LDkgQEAgUmVmPEV2ZW50RGlzcGF0Y2hlcj4gRXZl
bnREaXNwYXRjaGVyOjpjcmVhdGUoKQogRXZlbnREaXNwYXRjaGVyOjpFdmVudERpc3BhdGNoZXIo
KQogICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5FdmVu
dERpc3BhdGNoZXIiLCBXb3JrUXVldWU6OlFPUzo6VXNlckludGVyYWN0aXZlKSkKICAgICAsIG1f
cmVjZW50V2hlZWxFdmVudERlbHRhRmlsdGVyKFdoZWVsRXZlbnREZWx0YUZpbHRlcjo6Y3JlYXRl
KCkpCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgLCBtX21vbWVu
dHVtRXZlbnREaXNwYXRjaGVyKFdURjo6bWFrZVVuaXF1ZTxNb21lbnR1bUV2ZW50RGlzcGF0Y2hl
cj4oKnRoaXMpKQorI2VuZGlmCiB7CiB9CiAKQEAgLTk3LDcgKzEwMSw3IEBAIHZvaWQgRXZlbnRE
aXNwYXRjaGVyOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rp
b24pCiAgICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpFdmVudERpc3BhdGNoZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9xdWV1ZS5nZXQoKSwg
dGhpcyk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjp3aGVlbEV2ZW50KFBhZ2VJZGVudGlm
aWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgUmVjdEVkZ2VzPGJv
b2w+IHJ1YmJlckJhbmRhYmxlRWRnZXMpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6aW50ZXJuYWxX
aGVlbEV2ZW50KFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwgUmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxlRWRnZXMsIFdoZWVsRXZlbnRP
cmlnaW4gd2hlZWxFdmVudE9yaWdpbikKIHsKICAgICBhdXRvIHByb2Nlc3NpbmdTdGVwcyA9IE9w
dGlvblNldDxXZWJDb3JlOjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiB7IFdoZWVsRXZlbnRQ
cm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcsIFdoZWVsRXZlbnRQcm9jZXNz
aW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JCbG9ja2luZ0RPTUV2ZW50RGlzcGF0Y2ggfTsKICNpZiBF
TkFCTEUoU0NST0xMSU5HX1RIUkVBRCkKQEAgLTExNCw3ICsxMTgsNyBAQCB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6d2hlZWxFdmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVs
RXZlbnQmIHdoZQogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zY3JvbGxpbmdUcmVlc0xvY2sg
fTsKICAgICAgICAgYXV0byBzY3JvbGxpbmdUcmVlID0gbV9zY3JvbGxpbmdUcmVlcy5nZXQocGFn
ZUlEKTsKICAgICAgICAgaWYgKCFzY3JvbGxpbmdUcmVlKSB7Ci0gICAgICAgICAgICBkaXNwYXRj
aFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0
ZXBzKTsKKyAgICAgICAgICAgIGRpc3BhdGNoV2hlZWxFdmVudFZpYU1haW5UaHJlYWQocGFnZUlE
LCB3aGVlbEV2ZW50LCBwcm9jZXNzaW5nU3RlcHMsIHdoZWVsRXZlbnRPcmlnaW4pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMzYsMTAgKzE0MCwxMCBAQCB2
b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudChQYWdlSWRlbnRpZmllciBwYWdlSUQsIGNv
bnN0IFdlYldoZWVsRXZlbnQmIHdoZQogCiAgICAgICAgIHNjcm9sbGluZ1RyZWUtPndpbGxQcm9j
ZXNzV2hlZWxFdmVudCgpOwogCi0gICAgICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Nj
cm9sbGluZ1RyZWUsIHdoZWVsRXZlbnQsIHBsYXRmb3JtV2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0
ZXBzLCB1c2VNYWluVGhyZWFkRm9yU2Nyb2xsaW5nLCBwYWdlSUQsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9XSB7CisgICAgICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goW3Njcm9s
bGluZ1RyZWUsIHdoZWVsRXZlbnQsIHBsYXRmb3JtV2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBz
LCB1c2VNYWluVGhyZWFkRm9yU2Nyb2xsaW5nLCBwYWdlSUQsIHdoZWVsRXZlbnRPcmlnaW4sIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSB7CiAgICAgICAgICAgICBpZiAodXNlTWFpblRo
cmVhZEZvclNjcm9sbGluZykgewogICAgICAgICAgICAgICAgIHNjcm9sbGluZ1RyZWUtPndpbGxT
ZW5kRXZlbnRUb01haW5UaHJlYWQocGxhdGZvcm1XaGVlbEV2ZW50KTsKLSAgICAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5kaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwg
d2hlZWxFdmVudCwgcHJvY2Vzc2luZ1N0ZXBzKTsKKyAgICAgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5kaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKHBhZ2VJRCwgd2hlZWxFdmVudCwg
cHJvY2Vzc2luZ1N0ZXBzLCB3aGVlbEV2ZW50T3JpZ2luKTsKICAgICAgICAgICAgICAgICBzY3Jv
bGxpbmdUcmVlLT53YWl0Rm9yRXZlbnRUb0JlUHJvY2Vzc2VkQnlNYWluVGhyZWFkKHBsYXRmb3Jt
V2hlZWxFdmVudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAt
MTQ3LDIzICsxNTEsNDIgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQoUGFnZUlk
ZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGUKICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gc2Nyb2xsaW5nVHJlZS0+aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybVdoZWVs
RXZlbnQsIHByb2Nlc3NpbmdTdGVwcyk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQubmVlZHNN
YWluVGhyZWFkUHJvY2Vzc2luZygpKSB7Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+
ZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChwYWdlSUQsIHdoZWVsRXZlbnQsIHJlc3Vs
dC5zdGVwcyk7CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hXaGVlbEV2
ZW50VmlhTWFpblRocmVhZChwYWdlSUQsIHdoZWVsRXZlbnQsIHJlc3VsdC5zdGVwcywgd2hlZWxF
dmVudE9yaWdpbik7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGVwcy5jb250YWlucyhX
aGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yU2Nyb2xsaW5nKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJ
ZiB3ZSBzY3JvbGxlZCBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZCAoZXZlbiBpZiB3ZSBzZW5kIHRo
ZSBldmVudCB0byB0aGUgbWFpbiB0aHJlYWQgZm9yIHBhc3NpdmUgZXZlbnQgaGFuZGxlcnMpCiAg
ICAgICAgICAgICAvLyByZXNwb25kIHRvIHRoZSBVSSBwcm9jZXNzIHRoYXQgdGhlIGV2ZW50IHdh
cyBoYW5kbGVkLgotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZERpZFJlY2VpdmVFdmVu
dChwYWdlSUQsIHdoZWVsRXZlbnQudHlwZSgpLCByZXN1bHQud2FzSGFuZGxlZCk7CisgICAgICAg
ICAgICBpZiAod2hlZWxFdmVudE9yaWdpbiA9PSBXaGVlbEV2ZW50T3JpZ2luOjpVSVByb2Nlc3Mp
CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2VuZERpZFJlY2VpdmVFdmVudChwYWdl
SUQsIHdoZWVsRXZlbnQudHlwZSgpLCByZXN1bHQud2FzSGFuZGxlZCk7CiAgICAgICAgIH0pOwog
ICAgIH0gd2hpbGUgKGZhbHNlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJ1YmJlckJhbmRh
YmxlRWRnZXMpOwogCi0gICAgZGlzcGF0Y2hXaGVlbEV2ZW50VmlhTWFpblRocmVhZChwYWdlSUQs
IHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVwcyk7CisgICAgZGlzcGF0Y2hXaGVlbEV2ZW50Vmlh
TWFpblRocmVhZChwYWdlSUQsIHdoZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVwcywgd2hlZWxFdmVu
dE9yaWdpbik7CiAjZW5kaWYKIH0KIAordm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQo
UGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBS
ZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGFibGVFZGdlcykKK3sKKyNpZiBFTkFCTEUoTU9NRU5U
VU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICBpZiAobV9tb21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+
aGFuZGxlV2hlZWxFdmVudChwYWdlSUQsIHdoZWVsRXZlbnQsIHJ1YmJlckJhbmRhYmxlRWRnZXMp
KSB7CisgICAgICAgIHNlbmREaWRSZWNlaXZlRXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LnR5cGUo
KSwgdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBpbnRlcm5hbFdo
ZWVsRXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LCBydWJiZXJCYW5kYWJsZUVkZ2VzLCBXaGVlbEV2
ZW50T3JpZ2luOjpVSVByb2Nlc3MpOworfQorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJ
U1BBVENIRVIpCit2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9u
Q3VydmUoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBzdGQ6Om9wdGlvbmFsPFNjcm9sbGluZ0FjY2Vs
ZXJhdGlvbkN1cnZlPiBjdXJ2ZSkKK3sKKyAgICBtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT5z
ZXRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZShwYWdlSUQsIGN1cnZlKTsKK30KKyNlbmRpZgor
CiAjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5UUykKIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpn
ZXN0dXJlRXZlbnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJLaXQ6OldlYkdlc3R1
cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogewpAQCAtMjMwLDE1ICsyNTMsMTUgQEAgdm9pZCBFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoVG91Y2hFdmVudHMoKQogfQogI2VuZGlmCiAKLXZvaWQgRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0
aW9uU2V0PFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdTdGVwcykKK3ZvaWQg
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgd2hlZWxFdmVudCwg
T3B0aW9uU2V0PFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+IHByb2Nlc3NpbmdTdGVwcywgV2hl
ZWxFdmVudE9yaWdpbiB3aGVlbEV2ZW50T3JpZ2luKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9
IFJlZiB7ICp0aGlzIH0sIHBhZ2VJRCwgd2hlZWxFdmVudCwgc3RlcHMgPSBwcm9jZXNzaW5nU3Rl
cHMgLSBXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpTY3JvbGxpbmdUaHJlYWRdKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPmRpc3BhdGNoV2hlZWxFdmVudChwYWdlSUQsIHdo
ZWVsRXZlbnQsIHN0ZXBzKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3Rl
ZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwYWdlSUQsIHdoZWVsRXZlbnQsIHdoZWVsRXZlbnRPcmln
aW4sIHN0ZXBzID0gcHJvY2Vzc2luZ1N0ZXBzIC0gV2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6
U2Nyb2xsaW5nVGhyZWFkXSgpIG11dGFibGUgeworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNw
YXRjaFdoZWVsRXZlbnQocGFnZUlELCB3aGVlbEV2ZW50LCBzdGVwcywgd2hlZWxFdmVudE9yaWdp
bik7CiAgICAgfSk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZl
bnQoUGFnZUlkZW50aWZpZXIgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVlbEV2ZW50
LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4gcHJvY2Vzc2luZ1N0ZXBzKQor
dm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVudChQYWdlSWRlbnRpZmllciBw
YWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2
ZW50UHJvY2Vzc2luZ1N0ZXBzPiBwcm9jZXNzaW5nU3RlcHMsIFdoZWVsRXZlbnRPcmlnaW4gd2hl
ZWxFdmVudE9yaWdpbikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0y
NDYsNyArMjY5LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVudChQ
YWdlSWRlbnRpZmllciBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXYKICAgICBpZiAoIXdlYlBhZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIHdlYlBhZ2UtPndoZWVsRXZlbnQod2hlZWxFdmVudCwg
cHJvY2Vzc2luZ1N0ZXBzKTsKKyAgICB3ZWJQYWdlLT53aGVlbEV2ZW50KHdoZWVsRXZlbnQsIHBy
b2Nlc3NpbmdTdGVwcywgd2hlZWxFdmVudE9yaWdpbik7CiB9CiAKICNpZiBFTkFCTEUoTUFDX0dF
U1RVUkVfRVZFTlRTKQpAQCAtMjg0LDYgKzMwNywxMSBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGxheVdhc1JlZnJlc2hlZChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIGNvbnN0IERp
cwogICAgIHRyYWNlUG9pbnQoRGlzcGxheVJlZnJlc2hEaXNwYXRjaGluZ1RvTWFpblRocmVhZCwg
ZGlzcGxheUlELCBzZW5kVG9NYWluVGhyZWFkKTsKIAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVIpCisgICAgbV9t
b21lbnR1bUV2ZW50RGlzcGF0Y2hlci0+ZGlzcGxheVdhc1JlZnJlc2hlZChkaXNwbGF5SUQsIGRp
c3BsYXlVcGRhdGUpOworI2VuZGlmCisKICAgICBub3RpZnlTY3JvbGxpbmdUcmVlc0Rpc3BsYXlX
YXNSZWZyZXNoZWQoZGlzcGxheUlEKTsKIAogICAgIGlmICghc2VuZFRvTWFpblRocmVhZCkKQEAg
LTI5NSw0ICszMjMsMTQgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BsYXlXYXNSZWZyZXNo
ZWQoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBjb25zdCBEaXMKIH0KICNlbmRpZgogCit2
b2lkIEV2ZW50RGlzcGF0Y2hlcjo6cGFnZVNjcmVlbkRpZENoYW5nZShQYWdlSWRlbnRpZmllciBw
YWdlSUQsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKK3sKKyNpZiBFTkFCTEUoTU9NRU5U
VU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICBtX21vbWVudHVtRXZlbnREaXNwYXRjaGVyLT5wYWdl
U2NyZWVuRGlkQ2hhbmdlKHBhZ2VJRCwgZGlzcGxheUlEKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHBhZ2VJRCk7CisgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlJRCk7CisjZW5kaWYKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDk4ODEyMjAxZjA0NmUzMjNmZWQxMWI0YTA1
YTBhYzk1ZWQ1MjdkMWYuLmU0NzdmYjg3M2I4NzExNTc3NmU3M2MxNzY2OWVmNWQ0OWJjMGE3ZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0
Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0
Y2hlci5oCkBAIC01MCw2ICs1MCw4IEBAIHVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMy
X3Q7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBNb21lbnR1bUV2ZW50RGlzcGF0Y2hl
cjsKK2NsYXNzIFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlOwogY2xhc3MgV2ViUGFnZTsKIGNs
YXNzIFdlYldoZWVsRXZlbnQ7CiAKQEAgLTc2LDYgKzc4LDkgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBub3RpZnlTY3JvbGxpbmdUcmVlc0Rpc3BsYXlXYXNSZWZyZXNoZWQoV2ViQ29yZTo6UGxhdGZv
cm1EaXNwbGF5SUQpOwogCisgICAgZW51bSBjbGFzcyBXaGVlbEV2ZW50T3JpZ2luIDogYm9vbCB7
IFVJUHJvY2VzcywgTW9tZW50dW1FdmVudERpc3BhdGNoZXIgfTsKKyAgICB2b2lkIGludGVybmFs
V2hlZWxFdmVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYs
IFdlYkNvcmU6OlJlY3RFZGdlczxib29sPiBydWJiZXJCYW5kYWJsZUVkZ2VzLCBXaGVlbEV2ZW50
T3JpZ2luKTsKKwogcHJpdmF0ZToKICAgICBFdmVudERpc3BhdGNoZXIoKTsKIApAQCAtODQsNiAr
ODksOSBAQCBwcml2YXRlOgogCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycwogICAgIHZvaWQgd2hl
ZWxFdmVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYsIFdl
YkNvcmU6OlJlY3RFZGdlczxib29sPiBydWJiZXJCYW5kYWJsZUVkZ2VzKTsKKyNpZiBFTkFCTEUo
TU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUikKKyAgICB2b2lkIHNldFNjcm9sbGluZ0FjY2VsZXJh
dGlvbkN1cnZlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPFNjcm9sbGlu
Z0FjY2VsZXJhdGlvbkN1cnZlPik7CisjZW5kaWYKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKICAgICB2b2lkIHRvdWNoRXZlbnQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0IFdl
YlRvdWNoRXZlbnQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lk
IHRvdWNoRXZlbnRXaXRob3V0Q2FsbGJhY2soV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIGNvbnN0
IFdlYlRvdWNoRXZlbnQmKTsKQEAgLTkzLDggKzEwMSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAog
ICAgIC8vIFRoaXMgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICB2b2lkIGRpc3Bh
dGNoV2hlZWxFdmVudChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVu
dCYsIE9wdGlvblNldDxXZWJDb3JlOjpXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPik7Ci0gICAg
dm9pZCBkaXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQ
cm9jZXNzaW5nU3RlcHM+KTsKKyAgICB2b2lkIGRpc3BhdGNoV2hlZWxFdmVudChXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYsIE9wdGlvblNldDxXZWJDb3JlOjpX
aGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiwgV2hlZWxFdmVudE9yaWdpbik7CisgICAgdm9pZCBk
aXNwYXRjaFdoZWVsRXZlbnRWaWFNYWluVGhyZWFkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBj
b25zdCBXZWJXaGVlbEV2ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6OldoZWVsRXZlbnRQcm9jZXNz
aW5nU3RlcHM+LCBXaGVlbEV2ZW50T3JpZ2luKTsKIAogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQogICAgIHZvaWQgZGlzcGF0Y2hUb3VjaEV2ZW50cygpOwpAQCAtMTE1LDYgKzEyMyw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkaXNwbGF5RGlkUmVmcmVzaE9uU2Nyb2xsaW5nVGhyZWFkKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKTsKICNlbmRpZgogCisgICAgdm9pZCBwYWdlU2NyZWVu
RGlkQ2hhbmdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpQbGF0Zm9ybURpc3Bs
YXlJRCk7CisKICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwogCiAjaWYgRU5BQkxFKFNDUk9M
TElOR19USFJFQUQpCkBAIC0xMjYsNiArMTM2LDEwIEBAIHByaXZhdGU6CiAgICAgTG9jayBtX3Rv
dWNoRXZlbnRzTG9jazsKICAgICBIYXNoTWFwPFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBUb3Vj
aEV2ZW50UXVldWU+IG1fdG91Y2hFdmVudHMgV1RGX0dVQVJERURfQllfTE9DSyhtX3RvdWNoRXZl
bnRzTG9jayk7CiAjZW5kaWYKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVS
KQorICAgIHN0ZDo6dW5pcXVlX3B0cjxNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcj4gbV9tb21lbnR1
bUV2ZW50RGlzcGF0Y2hlcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNo
ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERp
c3BhdGNoZXIubWVzc2FnZXMuaW4KaW5kZXggMDlhZmMyY2VkMWQzZmJmYzYzOTkwYjg4ODZiNjM2
NGY2ODgwYjMyYy4uMzQ4ZDQ3MTA1ZTQ5NjhjZjc1MGE1MzdjY2JlM2M1YjVkMzkyYWI4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgpAQCAtMzIsNCArMzIsOSBAQCBtZXNzYWdlcyAtPiBFdmVu
dERpc3BhdGNoZXIgewogI2lmIEhBVkUoQ1ZESVNQTEFZTElOSykKICAgICBEaXNwbGF5V2FzUmVm
cmVzaGVkKHVpbnQzMl90IGRpc3BsYXlJRCwgc3RydWN0IFdlYkNvcmU6OkRpc3BsYXlVcGRhdGUg
dXBkYXRlLCBib29sIHNlbmRUb01haW5UaHJlYWQpCiAjZW5kaWYKKworI2lmIEVOQUJMRShNT01F
TlRVTV9FVkVOVF9ESVNQQVRDSEVSKQorICAgIFNldFNjcm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZl
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgc3RkOjpvcHRpb25hbDxXZWJLaXQ6OlNj
cm9sbGluZ0FjY2VsZXJhdGlvbkN1cnZlPiBjdXJ2ZSkKKyNlbmRpZgorICAgIFBhZ2VTY3JlZW5E
aWRDaGFuZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlELCB1aW50MzJfdCBkaXNwbGF5
SUQpCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Nb21l
bnR1bUV2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Nb21lbnR1bUV2ZW50RGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTI2OWMxYzM1OWQ0MGY0
ZjAxZDFkZjc4YzIwMWI4NGE3NGY2Njk0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMCww
ICsxLDQ2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJN
b21lbnR1bUV2ZW50RGlzcGF0Y2hlci5oIgorCisjaWYgRU5BQkxFKE1PTUVOVFVNX0VWRU5UX0RJ
U1BBVENIRVIpCisKKyNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGRlbHRhSGlzdG9yeU1heGltdW1BZ2UgPSA1MDBfbXM7
CitzdGF0aWMgY29uc3RleHByIFNlY29uZHMgZGVsdGFIaXN0b3J5TWF4aW11bUludGVydmFsID0g
MTUwX21zOworc3RhdGljIGNvbnN0ZXhwciBTZWNvbmRzIGlkZWFsQ3VydmVGcmFtZVJhdGUgPSAx
X3MgLyA2MDsKKworTW9tZW50dW1FdmVudERpc3BhdGNoZXI6Ok1vbWVudHVtRXZlbnREaXNwYXRj
aGVyKEV2ZW50RGlzcGF0Y2hlciYgZGlzcGF0Y2hlcikKKyAgICA6IG1fb2JzZXJ2ZXJJRChEaXNw
bGF5TGlua09ic2VydmVySUQ6OmdlbmVyYXRlKCkpCisgICAgLCBtX2Rpc3BhdGNoZXIoZGlzcGF0
Y2hlcikKK3sKK30KKworTW9tZW50dW1FdmVudERpc3BhdGNoZXI6On5Nb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcigpCit7CisgICAgc3RvcERpc3BsYXlMaW5rKCk7Cit9CisKK2Jvb2wgTW9tZW50dW1F
dmVudERpc3BhdGNoZXI6OmV2ZW50U2hvdWxkU3RhcnRTeW50aGV0aWNNb21lbnR1bVBoYXNlKFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50
JiBldmVudCkgY29uc3QKK3sKKyAgICBpZiAoZXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFdlYldo
ZWVsRXZlbnQ6OlBoYXNlQmVnYW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
bV9hY2NlbGVyYXRpb25DdXJ2ZXMuY29udGFpbnMocGFnZUlkZW50aWZpZXIpKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBu
b3QgdXNpbmcgc3ludGhldGljIG1vbWVudHVtIHBoYXNlOiBubyBhY2NlbGVyYXRpb24gY3VydmUi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZXZlbnQucmF3UGxh
dGZvcm1EZWx0YSgpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlvbnMsICJN
b21lbnR1bUV2ZW50RGlzcGF0Y2hlciBub3QgdXNpbmcgc3ludGhldGljIG1vbWVudHVtIHBoYXNl
OiBubyByYXcgcGxhdGZvcm0gZGVsdGEgb24gc3RhcnQgZXZlbnQiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vbWVudHVtRXZl
bnREaXNwYXRjaGVyOjpoYW5kbGVXaGVlbEV2ZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBh
Z2VJZGVudGlmaWVyLCBjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCwgV2ViQ29yZTo6UmVjdEVk
Z2VzPGJvb2w+IHJ1YmJlckJhbmRhYmxlRWRnZXMpCit7CisgICAgbV9sYXN0UnViYmVyQmFuZGFi
bGVFZGdlcyA9IHJ1YmJlckJhbmRhYmxlRWRnZXM7CisgICAgbV9sYXN0SW5jb21pbmdFdmVudCA9
IGV2ZW50OworCisgICAgYm9vbCBpc01vbWVudHVtRXZlbnQgPSBldmVudC5tb21lbnR1bVBoYXNl
KCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VOb25lOworCisgICAgaWYgKG1fY3VycmVudEdlc3R1
cmUuYWN0aXZlKSB7CisgICAgICAgIGJvb2wgcGFnZUlkZW50aWZpZXJDaGFuZ2VkID0gcGFnZUlk
ZW50aWZpZXIgIT0gbV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllcjsKKworICAgICAgICAv
LyBBbnkgaW5jb21pbmcgd2hlZWwgZXZlbnQgb3RoZXIgdGhhbiBhIGNoYW5nZWQgZXZlbnQgZm9y
IHRoZSBjdXJyZW50IGdlc3R1cmUKKyAgICAgICAgLy8gc2hvdWxkIGludGVycnVwdCB0aGUgYW5p
bWF0aW9uOyBpbiB0aGUgdXN1YWwgY2FzZSwgaXQgd2lsbCBiZQorICAgICAgICAvLyBtb21lbnR1
bVBoYXNlID09IFBoYXNlRW5kZWQgdGhhdCBpbnRlcnJ1cHRzLgorICAgICAgICBib29sIGV2ZW50
U2hvdWxkSW50ZXJydXB0R2VzdHVyZSA9ICFpc01vbWVudHVtRXZlbnQgfHwgZXZlbnQubW9tZW50
dW1QaGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBoYXNlQ2hhbmdlZDsKKworICAgICAgICBpZiAo
cGFnZUlkZW50aWZpZXJDaGFuZ2VkIHx8IGV2ZW50U2hvdWxkSW50ZXJydXB0R2VzdHVyZSkKKyAg
ICAgICAgICAgIGRpZEVuZE1vbWVudHVtUGhhc2UoKTsKKyAgICB9CisKKyAgICBpZiAoZXZlbnQu
cGhhc2UoKSA9PSBXZWJXaGVlbEV2ZW50OjpQaGFzZUJlZ2FuIHx8IGV2ZW50LnBoYXNlKCkgPT0g
V2ViV2hlZWxFdmVudDo6UGhhc2VDaGFuZ2VkKSB7CisgICAgICAgIGRpZFJlY2VpdmVTY3JvbGxF
dmVudChldmVudCk7CisKKyAgICAgICAgaWYgKGF1dG8gbGFzdEFjdGl2ZVBoYXNlRGVsdGEgPSBl
dmVudC5yYXdQbGF0Zm9ybURlbHRhKCkpCisgICAgICAgICAgICBtX2xhc3RBY3RpdmVQaGFzZURl
bHRhID0gKmxhc3RBY3RpdmVQaGFzZURlbHRhOworICAgIH0KKworICAgIGlmIChldmVudFNob3Vs
ZFN0YXJ0U3ludGhldGljTW9tZW50dW1QaGFzZShwYWdlSWRlbnRpZmllciwgZXZlbnQpKQorICAg
ICAgICBkaWRTdGFydE1vbWVudHVtUGhhc2UocGFnZUlkZW50aWZpZXIsIGV2ZW50KTsKKworICAg
IGJvb2wgaXNNb21lbnR1bUV2ZW50RHVyaW5nU3ludGhldGljR2VzdHVyZSA9IGlzTW9tZW50dW1F
dmVudCAmJiBtX2N1cnJlbnRHZXN0dXJlLmFjdGl2ZTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorICAgIGlmIChpc01vbWVudHVtRXZlbnREdXJpbmdTeW50aGV0aWNHZXN0dXJlKQorICAg
ICAgICBtX2N1cnJlbnRHZXN0dXJlLmFjY3VtdWxhdGVkRXZlbnRPZmZzZXQgKz0gZXZlbnQuZGVs
dGEoKTsKKyNlbmRpZgorCisgICAgLy8gQ29uc3VtZSBhbnkgbm9ybWFsIG1vbWVudHVtIGV2ZW50
cyB3aGlsZSB3ZSdyZSBpbnNpZGUgYSBzeW50aGV0aWMgbW9tZW50dW0gZ2VzdHVyZS4KKyAgICBy
ZXR1cm4gaXNNb21lbnR1bUV2ZW50RHVyaW5nU3ludGhldGljR2VzdHVyZTsKK30KKworc3RhdGlj
IGZsb2F0IGFwcEtpdFNjcm9sbE11bHRpcGxpZXJGb3JFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50
JiBldmVudCkKK3sKKyAgICBhdXRvIGRlbHRhID0gZXZlbnQuZGVsdGEoKTsKKyAgICBhdXRvIHVu
YWNjZWxlcmF0ZWREZWx0YSA9IGV2ZW50LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YSgpOwor
ICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOworICAgIAorICAgIC8vIEZJWE1FOiBDYW4gdGhlIEFw
cEtpdCBtdWx0aXBsaWVyIGV2ZXIgZGlmZmVyIGJ5IGF4aXM/CisgICAgaWYgKGRlbHRhLndpZHRo
KCkgJiYgdW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpCisgICAgICAgIG11bHRpcGxpZXIgPSBz
dGQ6Om1heChtdWx0aXBsaWVyLCBkZWx0YS53aWR0aCgpIC8gdW5hY2NlbGVyYXRlZERlbHRhLndp
ZHRoKCkpOworICAgIGlmIChkZWx0YS5oZWlnaHQoKSAmJiB1bmFjY2VsZXJhdGVkRGVsdGEuaGVp
Z2h0KCkpCisgICAgICAgIG11bHRpcGxpZXIgPSBzdGQ6Om1heChtdWx0aXBsaWVyLCBkZWx0YS5o
ZWlnaHQoKSAvIHVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSk7CisKKyAgICByZXR1cm4gbXVs
dGlwbGllcjsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTeW50
aGV0aWNNb21lbnR1bUV2ZW50KFdlYldoZWVsRXZlbnQ6OlBoYXNlIHBoYXNlLCBXZWJDb3JlOjpG
bG9hdFNpemUgZGVsdGEpCit7CisgICAgQVNTRVJUKG1fY3VycmVudEdlc3R1cmUuYWN0aXZlKTsK
KyAgICBBU1NFUlQobV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQpOworCisgICAgYXV0
byBhcHBLaXRTY3JvbGxNdWx0aXBsaWVyID0gYXBwS2l0U2Nyb2xsTXVsdGlwbGllckZvckV2ZW50
KCptX2N1cnJlbnRHZXN0dXJlLmluaXRpYXRpbmdFdmVudCk7CisgICAgYXV0byBhcHBLaXRBY2Nl
bGVyYXRlZERlbHRhID0gZGVsdGEgKiBhcHBLaXRTY3JvbGxNdWx0aXBsaWVyOworICAgIGF1dG8g
d2hlZWxUaWNrcyA9IGFwcEtpdEFjY2VsZXJhdGVkRGVsdGEgLyBXZWJDb3JlOjpTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgYXV0byB0aW1lID0gV2FsbFRpbWU6Om5vdygpOwor
CisgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291bGQgc3RpY2sgbGVnaXRpbWF0ZSByYXdQbGF0
Zm9ybURlbHRhcyBvbiB0aGUgZXZlbnQsCisgICAgLy8gYnV0IGN1cnJlbnRseSBub3RoaW5nIHdp
bGwgY29uc3VtZSB0aGVtLCBhbmQgd2UnZCBoYXZlIHRvIGtlZXAgdHJhY2sgb2YgdGhlbSBzZXBh
cmF0ZWx5LgorICAgIFdlYldoZWVsRXZlbnQgc3ludGhldGljRXZlbnQoCisgICAgICAgIFdlYkV2
ZW50OjpXaGVlbCwKKyAgICAgICAgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQtPnBv
c2l0aW9uKCksCisgICAgICAgIG1fY3VycmVudEdlc3R1cmUuaW5pdGlhdGluZ0V2ZW50LT5nbG9i
YWxQb3NpdGlvbigpLAorICAgICAgICBhcHBLaXRBY2NlbGVyYXRlZERlbHRhLAorICAgICAgICB3
aGVlbFRpY2tzLAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVu
dCwKKyAgICAgICAgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQtPmRpcmVjdGlvbklu
dmVydGVkRnJvbURldmljZSgpLAorICAgICAgICBXZWJXaGVlbEV2ZW50OjpQaGFzZU5vbmUsCisg
ICAgICAgIHBoYXNlLAorICAgICAgICB0cnVlLAorICAgICAgICBtX2N1cnJlbnRHZXN0dXJlLmlu
aXRpYXRpbmdFdmVudC0+c2Nyb2xsQ291bnQoKSwKKyAgICAgICAgZGVsdGEsCisgICAgICAgIG1f
bGFzdEluY29taW5nRXZlbnQtPm1vZGlmaWVycygpLAorICAgICAgICB0aW1lLAorICAgICAgICB0
aW1lLAorICAgICAgICB7IH0pOworICAgIG1fZGlzcGF0Y2hlci5pbnRlcm5hbFdoZWVsRXZlbnQo
bV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllciwgc3ludGhldGljRXZlbnQsIG1fbGFzdFJ1
YmJlckJhbmRhYmxlRWRnZXMsIEV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudE9yaWdpbjo6TW9t
ZW50dW1FdmVudERpc3BhdGNoZXIpOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVy
OjpkaWRTdGFydE1vbWVudHVtUGhhc2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlkZW50
aWZpZXIsIGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIG1fY3VycmVudEdlc3R1
cmUuYWN0aXZlID0gdHJ1ZTsKKyAgICBtX2N1cnJlbnRHZXN0dXJlLnBhZ2VJZGVudGlmaWVyID0g
cGFnZUlkZW50aWZpZXI7CisgICAgbV9jdXJyZW50R2VzdHVyZS5pbml0aWF0aW5nRXZlbnQgPSBl
dmVudDsKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRPZmZzZXQgPSB7IH07CisgICAgbV9j
dXJyZW50R2VzdHVyZS5zdGFydFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisgICAgbV9jdXJyZW50
R2VzdHVyZS5hY2NlbGVyYXRpb25DdXJ2ZSA9IFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPFNjcm9s
bGluZ0FjY2VsZXJhdGlvbkN1cnZlPiB7CisgICAgICAgIGF1dG8gY3VydmVJdGVyYXRvciA9IG1f
YWNjZWxlcmF0aW9uQ3VydmVzLmZpbmQobV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllcik7
CisgICAgICAgIGlmIChjdXJ2ZUl0ZXJhdG9yID09IG1fYWNjZWxlcmF0aW9uQ3VydmVzLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIGN1cnZlSXRlcmF0b3It
PnZhbHVlOworICAgIH0oKTsKKworICAgIHN0YXJ0RGlzcGxheUxpbmsoKTsKKworICAgIC8vIEZJ
WE1FOiBUaGUgc3lzdGVtIGZhbGxzIGJhY2sgZnJvbSB0aGUgdGFibGUgdG8ganVzdCBnZW5lcmF0
aW5nIGRlbHRhcworICAgIC8vIGRpcmVjdGx5IHdoZW4gdGhlIGZyYW1lIGludGVydmFsIGlzIHdp
dGhpbiAyMGZwcyBvZiBpZGVhbEN1cnZlRnJhbWVSYXRlOworICAgIC8vIHdlIHNob3VsZCBwZXJo
YXBzIGRvIHRoZSBzYW1lLgorICAgIGJ1aWxkT2Zmc2V0VGFibGVXaXRoSW5pdGlhbERlbHRhKCpl
dmVudC5yYXdQbGF0Zm9ybURlbHRhKCkpOworCisgICAgZGlzcGF0Y2hTeW50aGV0aWNNb21lbnR1
bUV2ZW50KFdlYldoZWVsRXZlbnQ6OlBoYXNlQmVnYW4sIHsgfSk7Cit9CisKK3ZvaWQgTW9tZW50
dW1FdmVudERpc3BhdGNoZXI6OmRpZEVuZE1vbWVudHVtUGhhc2UoKQoreworICAgIEFTU0VSVCht
X2N1cnJlbnRHZXN0dXJlLmFjdGl2ZSk7CisKKyAgICBkaXNwYXRjaFN5bnRoZXRpY01vbWVudHVt
RXZlbnQoV2ViV2hlZWxFdmVudDo6UGhhc2VFbmRlZCwgeyB9KTsKKworICAgIFJFTEVBU0VfTE9H
KFNjcm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBzYXcgbW9tZW50dW0g
ZW5kIHBoYXNlIHdpdGggdG90YWwgb2Zmc2V0ICUuMWYgJS4xZiwgZHVyYXRpb24gJWYgKGV2ZW50
IG9mZnNldCB3b3VsZCBoYXZlIGJlZW4gJS4xZiAlLjFmKSIsIG1fY3VycmVudEdlc3R1cmUuY3Vy
cmVudE9mZnNldC53aWR0aCgpLCBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRPZmZzZXQuaGVpZ2h0
KCksIChXYWxsVGltZTo6bm93KCkgLSBtX2N1cnJlbnRHZXN0dXJlLnN0YXJ0VGltZSkuc2Vjb25k
cygpLCBtX2N1cnJlbnRHZXN0dXJlLmFjY3VtdWxhdGVkRXZlbnRPZmZzZXQud2lkdGgoKSwgbV9j
dXJyZW50R2VzdHVyZS5hY2N1bXVsYXRlZEV2ZW50T2Zmc2V0LmhlaWdodCgpKTsKKworICAgIHN0
b3BEaXNwbGF5TGluaygpOworCisgICAgbV9jdXJyZW50R2VzdHVyZSA9IHsgfTsKK30KKwordm9p
ZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6c2V0U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmUo
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8U2Ny
b2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IGN1cnZlKQoreworICAgIG1fYWNjZWxlcmF0aW9uQ3Vy
dmVzLnNldChwYWdlSWRlbnRpZmllciwgY3VydmUpOworCisjaWYgVVNFX01PTUVOVFVNX0VWRU5U
X0RJU1BBVENIRVJfVEVNUE9SQVJZX0xPR0dJTkcKKyAgICBXVEY6OlRleHRTdHJlYW0gc3RyZWFt
KFdURjo6VGV4dFN0cmVhbTo6TGluZU1vZGU6OlNpbmdsZUxpbmUpOworICAgIHN0cmVhbSA8PCBj
dXJ2ZTsKKyAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVudERp
c3BhdGNoZXIgc2V0IGN1cnZlICVzIiwgc3RyZWFtLnJlbGVhc2UoKS51dGY4KCkuZGF0YSgpKTsK
KyNlbmRpZgorfQorCitXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCBNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGxheUlEKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50R2VzdHVy
ZS5wYWdlSWRlbnRpZmllcik7CisgICAgYXV0byBkaXNwbGF5SURJdGVyYXRvciA9IG1fZGlzcGxh
eUlEcy5maW5kKG1fY3VycmVudEdlc3R1cmUucGFnZUlkZW50aWZpZXIpOworICAgIGlmIChkaXNw
bGF5SURJdGVyYXRvciA9PSBtX2Rpc3BsYXlJRHMuZW5kKCkpCisgICAgICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIGRpc3BsYXlJREl0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBNb21lbnR1
bUV2ZW50RGlzcGF0Y2hlcjo6c3RhcnREaXNwbGF5TGluaygpCit7CisgICAgYXV0byBkaXNwbGF5
SUQgPSB0aGlzLT5kaXNwbGF5SUQoKTsKKyAgICBpZiAoIWRpc3BsYXlJRCkgeworICAgICAgICBS
RUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNoZXIgZmFp
bGVkIHRvIHN0YXJ0IGRpc3BsYXkgbGluayIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFN3aXRjaCBkb3duIHRvIGxvd2VyLXRoYW4tZnVsbC1zcGVlZCBmcmFtZSBy
YXRlcyBmb3IgdGhlIHRhaWwgZW5kIG9mIHRoZSBjdXJ2ZS4KKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OlN0YXJ0RGlzcGxheUxpbmsobV9vYnNlcnZlcklELCBkaXNwbGF5SUQsIEZ1bGxT
cGVlZEZyYW1lc1BlclNlY29uZCksIDApOworICAgIFJFTEVBU0VfTE9HKFNjcm9sbEFuaW1hdGlv
bnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBzdGFydGluZyBkaXNwbGF5IGxpbmsgZm9yIGRp
c3BsYXkgJWQiLCBkaXNwbGF5SUQpOworfQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVy
OjpzdG9wRGlzcGxheUxpbmsoKQoreworICAgIGF1dG8gZGlzcGxheUlEID0gdGhpcy0+ZGlzcGxh
eUlEKCk7CisgICAgaWYgKCFkaXNwbGF5SUQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU2Nyb2xs
QW5pbWF0aW9ucywgIk1vbWVudHVtRXZlbnREaXNwYXRjaGVyIGZhaWxlZCB0byBzdG9wIGRpc3Bs
YXkgbGluayIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Byb3h5OjpTdG9wRGlzcGxheUxpbmsobV9vYnNlcnZlcklELCBkaXNwbGF5SUQpLCAwKTsK
KyAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9tZW50dW1FdmVudERpc3BhdGNo
ZXIgc3RvcHBpbmcgZGlzcGxheSBsaW5rIGZvciBkaXNwbGF5ICVkIiwgZGlzcGxheUlEKTsKK30K
Kwordm9pZCBNb21lbnR1bUV2ZW50RGlzcGF0Y2hlcjo6cGFnZVNjcmVlbkRpZENoYW5nZShXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQsIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEIGRp
c3BsYXlJRCkKK3sKKyAgICBib29sIGFmZmVjdHNDdXJyZW50R2VzdHVyZSA9IChwYWdlSUQgPT0g
bV9jdXJyZW50R2VzdHVyZS5wYWdlSWRlbnRpZmllcik7CisgICAgaWYgKGFmZmVjdHNDdXJyZW50
R2VzdHVyZSkKKyAgICAgICAgc3RvcERpc3BsYXlMaW5rKCk7CisKKyAgICBtX2Rpc3BsYXlJRHMu
c2V0KHBhZ2VJRCwgZGlzcGxheUlEKTsKKworICAgIGlmIChhZmZlY3RzQ3VycmVudEdlc3R1cmUp
CisgICAgICAgIHN0YXJ0RGlzcGxheUxpbmsoKTsKK30KKwordm9pZCBNb21lbnR1bUV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGxheVdhc1JlZnJlc2hlZChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlVcGRhdGUmKQoreworICAgIGlmICghbV9j
dXJyZW50R2VzdHVyZS5hY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkaXNwbGF5
SUQgIT0gdGhpcy0+ZGlzcGxheUlEKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYW5p
bWF0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKSAtIG1fY3VycmVudEdlc3R1cmUuc3RhcnRUaW1l
OworICAgIGF1dG8gZGVzaXJlZE9mZnNldCA9IG9mZnNldEF0VGltZShhbmltYXRpb25UaW1lKTsK
KworI2lmICFVU0UoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9QUkVNQVRVUkVfUk9VTkRJTkcp
CisgICAgLy8gSW50ZW50aW9uYWwgZGVsdGEgcm91bmRpbmcgKGJ1dCBhdCB0aGUgZW5kISkuCisg
ICAgRmxvYXRTaXplIGRlbHRhID0gcm91bmRlZEludFNpemUoZGVzaXJlZE9mZnNldCAtIG1fY3Vy
cmVudEdlc3R1cmUuY3VycmVudE9mZnNldCk7CisjZWxzZQorICAgIEZsb2F0U2l6ZSBkZWx0YSA9
IGRlc2lyZWRPZmZzZXQgLSBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRPZmZzZXQ7CisjZW5kaWYK
KworICAgIGRpc3BhdGNoU3ludGhldGljTW9tZW50dW1FdmVudChXZWJXaGVlbEV2ZW50OjpQaGFz
ZUNoYW5nZWQsIC1kZWx0YSk7CisKKyAgICBtX2N1cnJlbnRHZXN0dXJlLmN1cnJlbnRPZmZzZXQg
Kz0gZGVsdGE7Cit9CisKK3ZvaWQgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6OmRpZFJlY2VpdmVT
Y3JvbGxFdmVudFdpdGhJbnRlcnZhbChGbG9hdFNpemUgc2l6ZSwgU2Vjb25kcyBmcmFtZUludGVy
dmFsKQoreworICAgIGF1dG8gcHVzaCA9IFtdKEhpc3RvcmljYWxEZWx0YXMmIGRlbHRhcywgRGVs
dGEgbmV3RGVsdGEpIHsKKyAgICAgICAgYm9vbCBkaXJlY3Rpb25DaGFuZ2VkID0gZGVsdGFzLnNp
emUoKSAmJiAoZGVsdGFzLmZpcnN0KCkucmF3UGxhdGZvcm1EZWx0YSA+IDApICE9IChuZXdEZWx0
YS5yYXdQbGF0Zm9ybURlbHRhID4gMCk7CisgICAgICAgIGlmIChkaXJlY3Rpb25DaGFuZ2VkIHx8
IG5ld0RlbHRhLmZyYW1lSW50ZXJ2YWwgPiBkZWx0YUhpc3RvcnlNYXhpbXVtQWdlKQorICAgICAg
ICAgICAgZGVsdGFzLmNsZWFyKCk7CisKKyAgICAgICAgZGVsdGFzLnByZXBlbmQobmV3RGVsdGEp
OworICAgICAgICBpZiAoZGVsdGFzLnNpemUoKSA+IGRlbHRhSGlzdG9yeVF1ZXVlU2l6ZSkKKyAg
ICAgICAgICAgIGRlbHRhcy5yZW1vdmVMYXN0KCk7CisgICAgfTsKKworICAgIHB1c2gobV9kZWx0
YUhpc3RvcnlYLCB7IHNpemUud2lkdGgoKSwgZnJhbWVJbnRlcnZhbCB9KTsKKyAgICBwdXNoKG1f
ZGVsdGFIaXN0b3J5WSwgeyBzaXplLmhlaWdodCgpLCBmcmFtZUludGVydmFsIH0pOworfQorCit2
b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpkaWRSZWNlaXZlU2Nyb2xsRXZlbnQoY29uc3Qg
V2ViV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRHZXN0dXJlLmFj
dGl2ZSk7CisKKyAgICBpZiAoIWV2ZW50LnJhd1BsYXRmb3JtRGVsdGEoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBkZWx0YSA9ICpldmVudC5yYXdQbGF0Zm9ybURlbHRhKCk7CisgICAg
YXV0byB0aW1lID0gZXZlbnQuaW9ISURFdmVudFRpbWVzdGFtcCgpOworCisgICAgaWYgKCFtX2xh
c3RTY3JvbGxUaW1lc3RhbXApIHsKKyAgICAgICAgbV9sYXN0U2Nyb2xsVGltZXN0YW1wID0gdGlt
ZTsKKyAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoYXQgdGhpcyBtYXRjaGVzIHRoZSBzeXN0ZW0g
KHRoZXkgbWF5IGdvIHdpdGggMTBtcyBmb3IgdGhlIGZpcnN0IGZyYW1lKS4KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gZnJhbWVJbnRlcnZhbCA9IHRpbWUgLSAqbV9sYXN0U2Ny
b2xsVGltZXN0YW1wOworICAgIG1fbGFzdFNjcm9sbFRpbWVzdGFtcCA9IHRpbWU7CisKKyAgICBk
aWRSZWNlaXZlU2Nyb2xsRXZlbnRXaXRoSW50ZXJ2YWwoZGVsdGEsIGZyYW1lSW50ZXJ2YWwpOwor
fQorCit2b2lkIE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpidWlsZE9mZnNldFRhYmxlV2l0aElu
aXRpYWxEZWx0YShGbG9hdFNpemUgaW5pdGlhbFVuYWNjZWxlcmF0ZWREZWx0YSkKK3sKKyNpZiBV
U0UoTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9QUkVNQVRVUkVfUk9VTkRJTkcpCisgICAgbV9j
dXJyZW50R2VzdHVyZS5jYXJyeU9mZnNldCA9IHsgfTsKKyNlbmRpZgorICAgIG1fY3VycmVudEdl
c3R1cmUub2Zmc2V0VGFibGUuY2xlYXIoKTsKKworICAgIEZsb2F0U2l6ZSBhY2N1bXVsYXRlZE9m
ZnNldDsKKyAgICBGbG9hdFNpemUgdW5hY2NlbGVyYXRlZERlbHRhID0gaW5pdGlhbFVuYWNjZWxl
cmF0ZWREZWx0YTsKKworICAgIGRvIHsKKyAgICAgICAgRmxvYXRTaXplIGFjY2VsZXJhdGVkRGVs
dGE7CisgICAgICAgIHN0ZDo6dGllKHVuYWNjZWxlcmF0ZWREZWx0YSwgYWNjZWxlcmF0ZWREZWx0
YSkgPSBjb21wdXRlTmV4dERlbHRhKHVuYWNjZWxlcmF0ZWREZWx0YSk7CisKKyAgICAgICAgYWNj
dW11bGF0ZWRPZmZzZXQgKz0gYWNjZWxlcmF0ZWREZWx0YTsKKyAgICAgICAgbV9jdXJyZW50R2Vz
dHVyZS5vZmZzZXRUYWJsZS5hcHBlbmQoYWNjdW11bGF0ZWRPZmZzZXQpOworICAgIH0gd2hpbGUg
KHN0ZDo6YWJzKHVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpKSA+IDAuNSB8fCBzdGQ6OmFicyh1
bmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0KCkpID4gMC41KTsKKworICAgIFJFTEVBU0VfTE9HKFNj
cm9sbEFuaW1hdGlvbnMsICJNb21lbnR1bUV2ZW50RGlzcGF0Y2hlciBidWlsdCB0YWJsZSB3aXRo
ICVsZCBmcmFtZXMsIGluaXRpYWwgZGVsdGEgJWYgJWYsIGRpc3RhbmNlICVmICVmIChpbml0aWFs
IGRlbHRhIGZyb20gbGFzdCBjaGFuZ2VkIGV2ZW50ICVmICVmKSIsIG1fY3VycmVudEdlc3R1cmUu
b2Zmc2V0VGFibGUuc2l6ZSgpLCBpbml0aWFsVW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCksIGlu
aXRpYWxVbmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0KCksIGFjY3VtdWxhdGVkT2Zmc2V0LndpZHRo
KCksIGFjY3VtdWxhdGVkT2Zmc2V0LmhlaWdodCgpLCBtX2xhc3RBY3RpdmVQaGFzZURlbHRhLndp
ZHRoKCksIG1fbGFzdEFjdGl2ZVBoYXNlRGVsdGEuaGVpZ2h0KCkpOworfQorCitzdGF0aWMgZmxv
YXQgaW50ZXJwb2xhdGUoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgdCkKK3sKKyAgICByZXR1cm4g
YSArIHQgKiAoYiAtIGEpOworfQorCitGbG9hdFNpemUgTW9tZW50dW1FdmVudERpc3BhdGNoZXI6
Om9mZnNldEF0VGltZShTZWNvbmRzIHRpbWUpCit7CisgICAgaWYgKCFtX2N1cnJlbnRHZXN0dXJl
Lm9mZnNldFRhYmxlLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGZsb2F0IGZy
YWN0aW9uYWxGcmFtZU51bWJlciA9IHRpbWUuc2Vjb25kcygpIC8gaWRlYWxDdXJ2ZUZyYW1lUmF0
ZS5zZWNvbmRzKCk7CisgICAgdW5zaWduZWQgbG9uZyBsb3dlckZyYW1lTnVtYmVyID0gc3RkOjpt
aW48dW5zaWduZWQgbG9uZz4obV9jdXJyZW50R2VzdHVyZS5vZmZzZXRUYWJsZS5zaXplKCkgLSAx
LCBmbG9vcihmcmFjdGlvbmFsRnJhbWVOdW1iZXIpKTsKKyAgICB1bnNpZ25lZCBsb25nIHVwcGVy
RnJhbWVOdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZCBsb25nPihtX2N1cnJlbnRHZXN0dXJlLm9m
ZnNldFRhYmxlLnNpemUoKSAtIDEsIGxvd2VyRnJhbWVOdW1iZXIgKyAxKTsKKyAgICBmbG9hdCBh
bW91bnQgPSBmcmFjdGlvbmFsRnJhbWVOdW1iZXIgLSBsb3dlckZyYW1lTnVtYmVyOworICAgIAor
ICAgIHJldHVybiB7CisgICAgICAgIC1pbnRlcnBvbGF0ZShtX2N1cnJlbnRHZXN0dXJlLm9mZnNl
dFRhYmxlW2xvd2VyRnJhbWVOdW1iZXJdLndpZHRoKCksIG1fY3VycmVudEdlc3R1cmUub2Zmc2V0
VGFibGVbdXBwZXJGcmFtZU51bWJlcl0ud2lkdGgoKSwgYW1vdW50KSwKKyAgICAgICAgLWludGVy
cG9sYXRlKG1fY3VycmVudEdlc3R1cmUub2Zmc2V0VGFibGVbbG93ZXJGcmFtZU51bWJlcl0uaGVp
Z2h0KCksIG1fY3VycmVudEdlc3R1cmUub2Zmc2V0VGFibGVbdXBwZXJGcmFtZU51bWJlcl0uaGVp
Z2h0KCksIGFtb3VudCkKKyAgICB9OworfQorCitzdGF0aWMgZmxvYXQgbW9tZW50dW1EZWNheVJh
dGUoRmxvYXRTaXplIGRlbHRhLCBTZWNvbmRzIGZyYW1lSW50ZXJ2YWwpCit7CisgICAgY29uc3Rl
eHByIGZsb2F0IGRlZmF1bHREZWNheSA9IDAuOTc1ZjsKKyAgICBjb25zdGV4cHIgZmxvYXQgdGFp
bFZlbG9jaXR5ID0gMjUwLmY7CisgICAgY29uc3RleHByIGZsb2F0IHRhaWxEZWNheSA9IDAuOTFm
OworICAgIGF1dG8gYWxwaGEgPSBkZWZhdWx0RGVjYXk7CisKKyAgICBpZiAoZnJhbWVJbnRlcnZh
bCkgeworICAgICAgICBmbG9hdCBpbml0aWFsVmVsb2NpdHkgPSBkZWx0YS5kaWFnb25hbExlbmd0
aCgpIC8gZnJhbWVJbnRlcnZhbC5zZWNvbmRzKCk7CisgICAgICAgIGZsb2F0IHdlYWtNb21lbnR1
bSA9IHN0ZDo6bWF4PGZsb2F0PigwLmYsICh0YWlsVmVsb2NpdHkgLSBpbml0aWFsVmVsb2NpdHkp
IC8gdGFpbFZlbG9jaXR5KTsKKyAgICAgICAgYWxwaGEgPSBkZWZhdWx0RGVjYXkgLSAoZGVmYXVs
dERlY2F5IC0gdGFpbERlY2F5KSAqIHdlYWtNb21lbnR1bTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RkOjpwb3coYWxwaGEsIChmcmFtZUludGVydmFsLnNlY29uZHMoKSAvIDAuMDA4ZikpOworfQor
CitzdGF0aWMgY29uc3RleHByIGZsb2F0IGZyb21GaXhlZFBvaW50KGZsb2F0IHZhbHVlKQorewor
ICAgIHJldHVybiB2YWx1ZSAvIDY1NTM2LjBmOworfQorCitzdGQ6OnBhaXI8RmxvYXRTaXplLCBG
bG9hdFNpemU+IE1vbWVudHVtRXZlbnREaXNwYXRjaGVyOjpjb21wdXRlTmV4dERlbHRhKEZsb2F0
U2l6ZSBjdXJyZW50VW5hY2NlbGVyYXRlZERlbHRhKQoreworICAgIEZsb2F0U2l6ZSB1bmFjY2Vs
ZXJhdGVkRGVsdGEgPSBjdXJyZW50VW5hY2NlbGVyYXRlZERlbHRhOworCisgICAgZmxvYXQgZGVj
YXlSYXRlID0gbW9tZW50dW1EZWNheVJhdGUodW5hY2NlbGVyYXRlZERlbHRhLCBpZGVhbEN1cnZl
RnJhbWVSYXRlKTsKKyAgICB1bmFjY2VsZXJhdGVkRGVsdGEuc2NhbGUoZGVjYXlSYXRlKTsKKwor
ICAgIGF1dG8gcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhID0gdW5hY2NlbGVyYXRlZERlbHRh
OworCisjaWYgVVNFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVJfUFJFTUFUVVJFX1JPVU5ESU5H
KQorICAgIC8vIFJvdW5kIGFuZCBjYXJyeS4KKyAgICBpbnQzMl90IHF1YW50aXplZFggPSBzdGQ6
OnJvdW5kKHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpKTsKKyAgICBpbnQzMl90
IHF1YW50aXplZFkgPSBzdGQ6OnJvdW5kKHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YS5oZWln
aHQoKSk7CisKKyAgICBpZiAoc3RkOjphYnMocXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLndp
ZHRoKCkpIDwgMSAmJiBzdGQ6OmFicyhxdWFudGl6ZWRVbmFjY2VsZXJhdGVkRGVsdGEuaGVpZ2h0
KCkpIDwgMSkgeworICAgICAgICBmbG9hdCBkZWx0YVhJbmNsdWRpbmdDYXJyeSA9IHF1YW50aXpl
ZFVuYWNjZWxlcmF0ZWREZWx0YS53aWR0aCgpICsgbV9jdXJyZW50R2VzdHVyZS5jYXJyeU9mZnNl
dC53aWR0aCgpOworICAgICAgICBmbG9hdCBkZWx0YVlJbmNsdWRpbmdDYXJyeSA9IHF1YW50aXpl
ZFVuYWNjZWxlcmF0ZWREZWx0YS5oZWlnaHQoKSArIG1fY3VycmVudEdlc3R1cmUuY2FycnlPZmZz
ZXQuaGVpZ2h0KCk7CisKKyAgICAgICAgLy8gSW50ZW50aW9uYWwgdHJ1bmNhdGlvbi4KKyAgICAg
ICAgcXVhbnRpemVkWCA9IGRlbHRhWEluY2x1ZGluZ0NhcnJ5OworICAgICAgICBxdWFudGl6ZWRZ
ID0gZGVsdGFZSW5jbHVkaW5nQ2Fycnk7CisgICAgICAgIG1fY3VycmVudEdlc3R1cmUuY2FycnlP
ZmZzZXQgPSB7IGRlbHRhWEluY2x1ZGluZ0NhcnJ5IC0gcXVhbnRpemVkWCwgZGVsdGFZSW5jbHVk
aW5nQ2FycnkgLSBxdWFudGl6ZWRZIH07CisgICAgfQorCisgICAgcXVhbnRpemVkVW5hY2NlbGVy
YXRlZERlbHRhID0geyBzdGF0aWNfY2FzdDxmbG9hdD4ocXVhbnRpemVkWCksIHN0YXRpY19jYXN0
PGZsb2F0PihxdWFudGl6ZWRZKSB9OworI2VuZGlmCisKKyAgICAvLyBUaGUgZGVsdGEgcXVldWUg
b3BlcmF0ZXMgb24gcHJlLWFjY2VsZXJhdGlvbiBkZWx0YXMsIHNvIGluc2VydCB0aGUgbmV3IGV2
ZW50ICpiZWZvcmUqIGFjY2VsZXJhdGluZy4KKyAgICBkaWRSZWNlaXZlU2Nyb2xsRXZlbnRXaXRo
SW50ZXJ2YWwocXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLCBpZGVhbEN1cnZlRnJhbWVSYXRl
KTsKKworICAgIGF1dG8gYWNjZWxlcmF0ZUF4aXMgPSBbJl0gKEhpc3RvcmljYWxEZWx0YXMmIGRl
bHRhcywgZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgZmxvYXQgdG90YWxEZWx0YSA9IDA7CisgICAg
ICAgIFNlY29uZHMgdG90YWxUaW1lOworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisKKyAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBkZWx0YSA6IGRlbHRhcykgeworICAgICAgICAgICAgdG90
YWxEZWx0YSArPSBzdGQ6OmFicyhkZWx0YS5yYXdQbGF0Zm9ybURlbHRhKTsKKyAgICAgICAgICAg
IGNvdW50Kys7CisKKyAgICAgICAgICAgIGlmIChkZWx0YS5mcmFtZUludGVydmFsID4gZGVsdGFI
aXN0b3J5TWF4aW11bUludGVydmFsKSB7CisgICAgICAgICAgICAgICAgdG90YWxUaW1lICs9IGRl
bHRhSGlzdG9yeU1heGltdW1JbnRlcnZhbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdG90YWxUaW1lICs9IGRlbHRhLmZyYW1lSW50ZXJ2YWw7
CisKKyAgICAgICAgICAgIGlmICh0b3RhbFRpbWUgPj0gZGVsdGFIaXN0b3J5TWF4aW11bUFnZSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYXZlcmFn
ZUZyYW1lSW50ZXJ2YWwgPSBzdGQ6OmNsYW1wKHRvdGFsVGltZSAvIGNvdW50LCAxX21zLCBkZWx0
YUhpc3RvcnlNYXhpbXVtSW50ZXJ2YWwpOworICAgICAgICBmbG9hdCBhdmVyYWdlRnJhbWVJbnRl
cnZhbE1TID0gYXZlcmFnZUZyYW1lSW50ZXJ2YWwubWlsbGlzZWNvbmRzKCk7CisgICAgICAgIGZs
b2F0IGF2ZXJhZ2VEZWx0YSA9IHRvdGFsRGVsdGEgLyBjb3VudDsKKworI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgICAgICBpZiAoIW1fY3VycmVudEdlc3R1cmUuZGlkTG9nSW5pdGlhbFF1
ZXVlU3RhdGUpCisgICAgICAgICAgICBSRUxFQVNFX0xPRyhTY3JvbGxBbmltYXRpb25zLCAiTW9t
ZW50dW1FdmVudERpc3BhdGNoZXIgaW5pdGlhbCBoaXN0b3JpY2FsIGRlbHRhczogYXZlcmFnZSBk
ZWx0YSAlZiwgYXZlcmFnZSB0aW1lICVmbXMsIGV2ZW50IGNvdW50ICVkIiwgYXZlcmFnZURlbHRh
LCBhdmVyYWdlRnJhbWVJbnRlcnZhbE1TLCBjb3VudCk7CisjZW5kaWYKKworICAgICAgICBjb25z
dGV4cHIgZmxvYXQgdmVsb2NpdHlHYWluQSA9IGZyb21GaXhlZFBvaW50KDIuZik7CisgICAgICAg
IGNvbnN0ZXhwciBmbG9hdCB2ZWxvY2l0eUdhaW5CID0gZnJvbUZpeGVkUG9pbnQoOTU1LmYpOwor
ICAgICAgICBjb25zdGV4cHIgZmxvYXQgdmVsb2NpdHlDb25zdGFudCA9IGZyb21GaXhlZFBvaW50
KDk4MzY5LmYpOworICAgICAgICBjb25zdGV4cHIgZmxvYXQgbWluaW11bVZlbG9jaXR5ID0gZnJv
bUZpeGVkUG9pbnQoMS5mKTsKKworICAgICAgICBmbG9hdCB2ZWxvY2l0eSA9ICh2ZWxvY2l0eUdh
aW5BICogYXZlcmFnZUZyYW1lSW50ZXJ2YWxNUyAqIGF2ZXJhZ2VGcmFtZUludGVydmFsTVMgLSB2
ZWxvY2l0eUdhaW5CICogYXZlcmFnZUZyYW1lSW50ZXJ2YWxNUyArIHZlbG9jaXR5Q29uc3RhbnQp
ICogYXZlcmFnZURlbHRhOworICAgICAgICB2ZWxvY2l0eSA9IHN0ZDo6bWF4PGZsb2F0Pih2ZWxv
Y2l0eSwgbWluaW11bVZlbG9jaXR5KTsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBtYXRoIGlz
IGluY29tcGxldGUgaWYgd2UgbmVlZCB0byBzdXBwb3J0IGFjY2VsZXJhdGlvbiB0YWJsZXMgYXMg
d2VsbC4KKyAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IG1fY3VycmVudEdlc3R1cmUuYWNjZWxl
cmF0aW9uQ3VydmUtPmFjY2VsZXJhdGlvbkZhY3Rvcih2ZWxvY2l0eSkgLyB2ZWxvY2l0eTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlICogbXVsdGlwbGllcjsKKyAgICB9OworCisgICAgRmxvYXRTaXpl
IGFjY2VsZXJhdGVkRGVsdGEoCisgICAgICAgIGFjY2VsZXJhdGVBeGlzKG1fZGVsdGFIaXN0b3J5
WCwgcXVhbnRpemVkVW5hY2NlbGVyYXRlZERlbHRhLndpZHRoKCkpLAorICAgICAgICBhY2NlbGVy
YXRlQXhpcyhtX2RlbHRhSGlzdG9yeVksIHF1YW50aXplZFVuYWNjZWxlcmF0ZWREZWx0YS5oZWln
aHQoKSkKKyAgICApOworCisgICAgbV9jdXJyZW50R2VzdHVyZS5kaWRMb2dJbml0aWFsUXVldWVT
dGF0ZSA9IHRydWU7CisKKyAgICByZXR1cm4geyB1bmFjY2VsZXJhdGVkRGVsdGEsIGFjY2VsZXJh
dGVkRGVsdGEgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTW9tZW50dW1FdmVudERpc3Bh
dGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL01vbWVudHVtRXZlbnRE
aXNwYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM1NzE5MGUxYWJlZTNjMDBmNjFmOGMwNWY0NzZiMGRh
NjdkMDU0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL01vbWVudHVtRXZlbnREaXNwYXRjaGVyLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNT01FTlRVTV9FVkVOVF9ESVNQQVRDSEVS
KQorCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSBkZWNpZGUgd2hpY2ggdmVyc2lvbiB3
ZSB3YW50LgorI2RlZmluZSBVU0VfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9QUkVNQVRVUkVf
Uk9VTkRJTkcgMAorI2RlZmluZSBVU0VfTU9NRU5UVU1fRVZFTlRfRElTUEFUQ0hFUl9URU1QT1JB
UllfTE9HR0lORyAxCisKKyNpbmNsdWRlICJTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZS5oIgor
I2luY2x1ZGUgIldlYldoZWVsRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1JlY3RFZGdlcy5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IERpc3BsYXlVcGRhdGU7Cit1c2lu
ZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgRXZlbnREaXNwYXRjaGVyOworCitjbGFzcyBNb21lbnR1bUV2ZW50RGlzcGF0Y2hl
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTW9tZW50dW1FdmVudERpc3BhdGNoZXIpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE1vbWVudHVtRXZlbnRE
aXNwYXRjaGVyKEV2ZW50RGlzcGF0Y2hlciYpOworICAgIH5Nb21lbnR1bUV2ZW50RGlzcGF0Y2hl
cigpOworCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBjb25zdCBXZWJXaGVlbEV2ZW50JiwgV2ViQ29yZTo6UmVjdEVkZ2VzPGJvb2w+IHJ1YmJlckJh
bmRhYmxlRWRnZXMpOworCisgICAgdm9pZCBzZXRTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZShX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRp
b25DdXJ2ZT4pOworCisgICAgdm9pZCBkaXNwbGF5V2FzUmVmcmVzaGVkKFdlYkNvcmU6OlBsYXRm
b3JtRGlzcGxheUlELCBjb25zdCBXZWJDb3JlOjpEaXNwbGF5VXBkYXRlJik7CisKKyAgICB2b2lk
IHBhZ2VTY3JlZW5EaWRDaGFuZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBs
YXRmb3JtRGlzcGxheUlEKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRpZFN0YXJ0TW9tZW50dW1Q
aGFzZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2ViV2hlZWxFdmVudCYpOworICAg
IHZvaWQgZGlkRW5kTW9tZW50dW1QaGFzZSgpOworCisgICAgYm9vbCBldmVudFNob3VsZFN0YXJ0
U3ludGhldGljTW9tZW50dW1QaGFzZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgY29uc3QgV2Vi
V2hlZWxFdmVudCYpIGNvbnN0OworCisgICAgdm9pZCBzdGFydERpc3BsYXlMaW5rKCk7CisgICAg
dm9pZCBzdG9wRGlzcGxheUxpbmsoKTsKKworICAgIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlE
IGRpc3BsYXlJRCgpIGNvbnN0OworCisgICAgdm9pZCBkaXNwYXRjaFN5bnRoZXRpY01vbWVudHVt
RXZlbnQoV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBkZWx0YSk7CisK
KyAgICB2b2lkIGJ1aWxkT2Zmc2V0VGFibGVXaXRoSW5pdGlhbERlbHRhKEZsb2F0U2l6ZSk7CisK
KyAgICBGbG9hdFNpemUgb2Zmc2V0QXRUaW1lKFNlY29uZHMpOworICAgIHN0ZDo6cGFpcjxGbG9h
dFNpemUsIEZsb2F0U2l6ZT4gY29tcHV0ZU5leHREZWx0YShGbG9hdFNpemUgY3VycmVudFVuYWNj
ZWxlcmF0ZWREZWx0YSk7CisKKyAgICB2b2lkIGRpZFJlY2VpdmVTY3JvbGxFdmVudFdpdGhJbnRl
cnZhbChGbG9hdFNpemUsIFNlY29uZHMpOworICAgIHZvaWQgZGlkUmVjZWl2ZVNjcm9sbEV2ZW50
KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKworICAgIHN0cnVjdCBEZWx0YSB7CisgICAgICAgIGZs
b2F0IHJhd1BsYXRmb3JtRGVsdGE7CisgICAgICAgIFNlY29uZHMgZnJhbWVJbnRlcnZhbDsKKyAg
ICB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZGVsdGFIaXN0b3J5UXVldWVTaXpl
ID0gOTsKKyAgICB0eXBlZGVmIERlcXVlPERlbHRhLCBkZWx0YUhpc3RvcnlRdWV1ZVNpemU+IEhp
c3RvcmljYWxEZWx0YXM7CisgICAgSGlzdG9yaWNhbERlbHRhcyBtX2RlbHRhSGlzdG9yeVg7Cisg
ICAgSGlzdG9yaWNhbERlbHRhcyBtX2RlbHRhSGlzdG9yeVk7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PFdhbGxUaW1lPiBtX2xhc3RTY3JvbGxUaW1lc3RhbXA7CisgICAgc3RkOjpvcHRpb25hbDxXZWJX
aGVlbEV2ZW50PiBtX2xhc3RJbmNvbWluZ0V2ZW50OworICAgIFdlYkNvcmU6OlJlY3RFZGdlczxi
b29sPiBtX2xhc3RSdWJiZXJCYW5kYWJsZUVkZ2VzOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIEZsb2F0U2l6ZSBtX2xhc3RBY3RpdmVQaGFzZURlbHRhOworI2VuZGlmCisKKyAgICBz
dHJ1Y3QgeworICAgICAgICBib29sIGFjdGl2ZSB7IGZhbHNlIH07CisKKyAgICAgICAgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlkZW50aWZpZXI7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
U2Nyb2xsaW5nQWNjZWxlcmF0aW9uQ3VydmU+IGFjY2VsZXJhdGlvbkN1cnZlOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPFdlYldoZWVsRXZlbnQ+IGluaXRpYXRpbmdFdmVudDsKKworICAgICAgICBG
bG9hdFNpemUgY3VycmVudE9mZnNldDsKKyAgICAgICAgV2FsbFRpbWUgc3RhcnRUaW1lOworCisg
ICAgICAgIFZlY3RvcjxGbG9hdFNpemU+IG9mZnNldFRhYmxlOworCisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgICAgIEZsb2F0U2l6ZSBhY2N1bXVsYXRlZEV2ZW50T2Zmc2V0OworICAg
ICAgICBib29sIGRpZExvZ0luaXRpYWxRdWV1ZVN0YXRlIHsgZmFsc2UgfTsKKyNlbmRpZgorCisj
aWYgVVNFKE1PTUVOVFVNX0VWRU5UX0RJU1BBVENIRVJfUFJFTUFUVVJFX1JPVU5ESU5HKQorICAg
ICAgICBGbG9hdFNpemUgY2FycnlPZmZzZXQ7CisjZW5kaWYKKyAgICB9IG1fY3VycmVudEdlc3R1
cmU7CisKKyAgICBEaXNwbGF5TGlua09ic2VydmVySUQgbV9vYnNlcnZlcklEOworICAgIEhhc2hN
YXA8V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEPiBt
X2Rpc3BsYXlJRHM7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgc3RkOjpv
cHRpb25hbDxTY3JvbGxpbmdBY2NlbGVyYXRpb25DdXJ2ZT4+IG1fYWNjZWxlcmF0aW9uQ3VydmVz
OworICAgIEV2ZW50RGlzcGF0Y2hlciYgbV9kaXNwYXRjaGVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAppbmRleCA3N2Y4NGRjZTdmYWFhNDkyYWE1NWZlYTAyNWJiNjA2ZTBmZDA2YzVh
Li41YzNjZmQ0MjM4NzhiNmNjNTUyMDM1MmZhZDA0NWNjZjU5ZjBjYjAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzAzMSw3ICszMDMxLDcg
QEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiB3aGVl
bEV2ZW50LCBQYWdlKiBwYWdlLCBPcHRpb24KICAgICByZXR1cm4gcGFnZS0+dXNlcklucHV0QnJp
ZGdlKCkuaGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybVdoZWVsRXZlbnQsIHByb2Nlc3NpbmdTdGVw
cyk7CiB9CiAKLWJvb2wgV2ViUGFnZTo6d2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiB3
aGVlbEV2ZW50LCBPcHRpb25TZXQ8V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4gcHJvY2Vzc2lu
Z1N0ZXBzKQorYm9vbCBXZWJQYWdlOjp3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzPiBwcm9jZXNzaW5n
U3RlcHMsIEV2ZW50RGlzcGF0Y2hlcjo6V2hlZWxFdmVudE9yaWdpbiB3aGVlbEV2ZW50T3JpZ2lu
KQogewogICAgIG1fdXNlckFjdGl2aXR5LmltcHVsc2UoKTsKIApAQCAtMzAzOSw3ICszMDM5LDcg
QEAgYm9vbCBXZWJQYWdlOjp3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIHdoZWVsRXZl
bnQsIE9wdGlvblNldDxXaGVlbEV2ZW50UHIKIAogICAgIGJvb2wgaGFuZGxlZCA9IGhhbmRsZVdo
ZWVsRXZlbnQod2hlZWxFdmVudCwgbV9wYWdlLmdldCgpLCBwcm9jZXNzaW5nU3RlcHMpOwogCi0g
ICAgaWYgKHByb2Nlc3NpbmdTdGVwcy5jb250YWlucyhXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBz
OjpNYWluVGhyZWFkRm9yU2Nyb2xsaW5nKSkKKyAgICBpZiAocHJvY2Vzc2luZ1N0ZXBzLmNvbnRh
aW5zKFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JTY3JvbGxpbmcpICYm
IHdoZWVsRXZlbnRPcmlnaW4gPT0gRXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50T3JpZ2luOjpV
SVByb2Nlc3MpCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2
ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aGVlbEV2ZW50LnR5cGUoKSksIGhhbmRsZWQp
KTsKIAogICAgIHJldHVybiBoYW5kbGVkOwpAQCAtMzA1Myw3ICszMDUzLDcgQEAgdm9pZCBXZWJQ
YWdlOjpkaXNwYXRjaFdoZWVsRXZlbnRXaXRob3V0U2Nyb2xsaW5nKGNvbnN0IFdlYldoZWVsRXZl
bnQmIHdoZWVsRXZlbnQKICNlbHNlCiAgICAgYm9vbCBpc0NhbmNlbGFibGUgPSB0cnVlOwogI2Vu
ZGlmCi0gICAgYm9vbCBoYW5kbGVkID0gdGhpcy0+d2hlZWxFdmVudCh3aGVlbEV2ZW50LCB7IGlz
Q2FuY2VsYWJsZSA/IFdoZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM6Ok1haW5UaHJlYWRGb3JCbG9j
a2luZ0RPTUV2ZW50RGlzcGF0Y2ggOiBXaGVlbEV2ZW50UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhy
ZWFkRm9yTm9uQmxvY2tpbmdET01FdmVudERpc3BhdGNoIH0pOworICAgIGJvb2wgaGFuZGxlZCA9
IHRoaXMtPndoZWVsRXZlbnQod2hlZWxFdmVudCwgeyBpc0NhbmNlbGFibGUgPyBXaGVlbEV2ZW50
UHJvY2Vzc2luZ1N0ZXBzOjpNYWluVGhyZWFkRm9yQmxvY2tpbmdET01FdmVudERpc3BhdGNoIDog
V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwczo6TWFpblRocmVhZEZvck5vbkJsb2NraW5nRE9NRXZl
bnREaXNwYXRjaCB9LCBFdmVudERpc3BhdGNoZXI6OldoZWVsRXZlbnRPcmlnaW46OlVJUHJvY2Vz
cyk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFuZGxlZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBkMzU4YTI1NmMyYWIzMTcyY2UwNDI4
YWZkZmRlMzk5MTQ5NmM5YzJkLi4yNjJkZTZhNDJhNjk0OTUzMDIwMWM3MjNkYWU3ZTQ1MjJjNTcx
NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRG93bmxvYWRJRC5oIgogI2luY2x1ZGUgIkRyYXdpbmdB
cmVhSW5mby5oIgogI2luY2x1ZGUgIkVkaXRpbmdSYW5nZS5oIgorI2luY2x1ZGUgIkV2ZW50RGlz
cGF0Y2hlci5oIgogI2luY2x1ZGUgIkZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaCIKICNpbmNs
dWRlICJHZW9sb2NhdGlvbklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyVHlwZXMu
aCIKQEAgLTEwNjUsNyArMTA2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0V2FpdGluZ0Zv
ckNvbnRleHRNZW51VG9TaG93KCkgeyBtX3dhaXRpbmdGb3JDb250ZXh0TWVudVRvU2hvdyA9IHRy
dWU7IH0KICNlbmRpZgogCi0gICAgYm9vbCB3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQm
LCBPcHRpb25TZXQ8V2ViQ29yZTo6V2hlZWxFdmVudFByb2Nlc3NpbmdTdGVwcz4pOworICAgIGJv
b2wgd2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiwgT3B0aW9uU2V0PFdlYkNvcmU6Oldo
ZWVsRXZlbnRQcm9jZXNzaW5nU3RlcHM+LCBFdmVudERpc3BhdGNoZXI6OldoZWVsRXZlbnRPcmln
aW4pOwogCiAgICAgdm9pZCB3aGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGJvb2wpOwogICAgIHZv
aWQgcmVjb21wdXRlU2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRzU3RhdGUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>