<?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>143680</bug_id>
          
          <creation_ts>2015-04-13 15:20:43 -0700</creation_ts>
          <short_desc>[iOS] When simultaneously exiting-and-entering fullscreen, WebVideoFullscreenManager/Proxy becomes confused about what video element it represents.</short_desc>
          <delta_ts>2015-04-16 15:44:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>143615</dependson>
    
    <dependson>143674</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1084974</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-13 15:20:43 -0700</bug_when>
    <thetext>[iOS] When simultaneously exiting-and-entering fullscreen, WebVideoFullscreenManager/Proxy becomes confused about what video element it represents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084987</commentid>
    <comment_count>1</comment_count>
      <attachid>250681</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-13 15:55:19 -0700</bug_when>
    <thetext>Created attachment 250681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085163</commentid>
    <comment_count>2</comment_count>
      <attachid>250681</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-14 09:54:01 -0700</bug_when>
    <thetext>Comment on attachment 250681
Patch

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

Need to upload a new patch that is rebased.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h:46
&gt; +class WebVideoFullscreenModelContext : public RefCounted&lt;WebVideoFullscreenModelContext&gt;, public WebCore::WebVideoFullscreenModel, public WebCore::WebVideoFullscreenChangeObserver {

Can any of this inheritance be private rather than public? Can this class be marked final.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h:48
&gt; +    static RefPtr&lt;WebVideoFullscreenModelContext&gt; create(WebVideoFullscreenManagerProxy* manager, uint64_t contextId)

Can the manager be null? If not, this should be a reference.

This should return a Ref&lt;&gt;, not a RefPtr&lt;&gt;.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h:52
&gt; +    virtual ~WebVideoFullscreenModelContext() { }

This should not be needed; it should be created automatically by the compiler without declaring it.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h:65
&gt; +    {        

Trailing whitespace here should be omitted.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:231
&gt; +    if (m_contextMap.contains(contextId))
&gt; +        return m_contextMap.get(contextId);

This function does a double hash table lookup. Instead of using contains, get, and set, this function should use add.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:234
&gt; +    RefPtr&lt;WebCore::WebVideoFullscreenInterfaceAVKit&gt; interface = adoptRef(new WebVideoFullscreenInterfaceAVKit());

We try to do all adoptRef in functions in a class. I suggest adding a create function to this class.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:242
&gt; +    return WTF::move(tuple);

I don’t think this move is needed. Here’s my suggested different way to write this entire &quot;ensure&quot; function:

    void addResult = m_contextMap.add(contextId, ModelInterfaceTuple();
    if (addResult.isNewEntry)
        addResult.iterator-&gt;value = createModelAndInterface(contextId);
    return addResult.iterator-&gt;value;

Then we would write a separate create function that looks something like this:

    auto context = WebVideoFullscreenModelContext::create(*this, contextId);
    auto interface = WebVideoFullscreenInterfaceAVKit::create(context.get(), context.get());
    return std::make_tuple(context, interface);

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:245
&gt; +WebVideoFullscreenModelContext* WebVideoFullscreenManagerProxy::ensureModel(uint64_t contextId)

This should return a reference, not a pointer.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:250
&gt; +WebCore::WebVideoFullscreenInterfaceAVKit* WebVideoFullscreenManagerProxy::ensureInterface(uint64_t contextId)

This should return a reference, not a pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085240</commentid>
    <comment_count>3</comment_count>
      <attachid>250681</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-14 13:35:01 -0700</bug_when>
    <thetext>Comment on attachment 250681
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h:46
&gt;&gt; +class WebVideoFullscreenModelContext : public RefCounted&lt;WebVideoFullscreenModelContext&gt;, public WebCore::WebVideoFullscreenModel, public WebCore::WebVideoFullscreenChangeObserver {
&gt; 
&gt; Can any of this inheritance be private rather than public? Can this class be marked final.

This causes a cast from (e.g.) WebVideoFullscreenModelContext* to WebVideoFullscreenChangeObserver* to fail to compile.  It can be marked as final, however.

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h:48
&gt;&gt; +    static RefPtr&lt;WebVideoFullscreenModelContext&gt; create(WebVideoFullscreenManagerProxy* manager, uint64_t contextId)
&gt; 
&gt; Can the manager be null? If not, this should be a reference.
&gt; 
&gt; This should return a Ref&lt;&gt;, not a RefPtr&lt;&gt;.

Ok &amp; ok.

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h:52
&gt;&gt; +    virtual ~WebVideoFullscreenModelContext() { }
&gt; 
&gt; This should not be needed; it should be created automatically by the compiler without declaring it.

Without it, there is a compiler warning about a missing virtual destructor.

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:231
&gt;&gt; +        return m_contextMap.get(contextId);
&gt; 
&gt; This function does a double hash table lookup. Instead of using contains, get, and set, this function should use add.

Ah, I avoided this (when I was using Ref&lt;&gt;s everywhere) because I&apos;d have to create the objects up front. But I guess there&apos;s no need to redefine ModelInterfaceTuple in terms of Ref&lt;&gt;s, and leave them as RefPtr&lt;&gt;s.

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:234
&gt;&gt; +    RefPtr&lt;WebCore::WebVideoFullscreenInterfaceAVKit&gt; interface = adoptRef(new WebVideoFullscreenInterfaceAVKit());
&gt; 
&gt; We try to do all adoptRef in functions in a class. I suggest adding a create function to this class.

Will Do.

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:242
&gt;&gt; +    return WTF::move(tuple);
&gt; 
&gt; I don’t think this move is needed. Here’s my suggested different way to write this entire &quot;ensure&quot; function:
&gt; 
&gt;     void addResult = m_contextMap.add(contextId, ModelInterfaceTuple();
&gt;     if (addResult.isNewEntry)
&gt;         addResult.iterator-&gt;value = createModelAndInterface(contextId);
&gt;     return addResult.iterator-&gt;value;
&gt; 
&gt; Then we would write a separate create function that looks something like this:
&gt; 
&gt;     auto context = WebVideoFullscreenModelContext::create(*this, contextId);
&gt;     auto interface = WebVideoFullscreenInterfaceAVKit::create(context.get(), context.get());
&gt;     return std::make_tuple(context, interface);

Ok.

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:245
&gt;&gt; +WebVideoFullscreenModelContext* WebVideoFullscreenManagerProxy::ensureModel(uint64_t contextId)
&gt; 
&gt; This should return a reference, not a pointer.

Ok.

&gt;&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:250
&gt;&gt; +WebCore::WebVideoFullscreenInterfaceAVKit* WebVideoFullscreenManagerProxy::ensureInterface(uint64_t contextId)
&gt; 
&gt; This should return a reference, not a pointer.

Ok.

I&apos;ll make the matching changes over on the WebFullscreenManager side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085271</commentid>
    <comment_count>4</comment_count>
      <attachid>250741</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-14 14:39:04 -0700</bug_when>
    <thetext>Created attachment 250741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085633</commentid>
    <comment_count>5</comment_count>
      <attachid>250835</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-15 12:45:57 -0700</bug_when>
    <thetext>Created attachment 250835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085689</commentid>
    <comment_count>6</comment_count>
      <attachid>250864</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-15 14:33:57 -0700</bug_when>
    <thetext>Created attachment 250864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085700</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-15 15:02:03 -0700</bug_when>
    <thetext>rdar://problem/18913948</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085708</commentid>
    <comment_count>8</comment_count>
      <attachid>250868</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-15 15:14:26 -0700</bug_when>
    <thetext>Created attachment 250868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085734</commentid>
    <comment_count>9</comment_count>
      <attachid>250876</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-15 15:40:49 -0700</bug_when>
    <thetext>Created attachment 250876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086082</commentid>
    <comment_count>10</comment_count>
      <attachid>250876</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-16 15:06:26 -0700</bug_when>
    <thetext>Comment on attachment 250876
Patch

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

&gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h:71
&gt; +    static Ref&lt;WebVideoFullscreenInterfaceAVKit&gt; create() { return adoptRef(*new WebVideoFullscreenInterfaceAVKit()); }

We normally don&apos;t put these on one line.

&gt; Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.h:48
&gt; +    static RefPtr&lt;WebVideoFullscreenModelVideoElement&gt; create() { return adoptRef(*new WebVideoFullscreenModelVideoElement()); }

Unwrap.

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:243
&gt; +        auto&amp; model = std::get&lt;0&gt;(tuple);
&gt; +        auto&amp; interface = std::get&lt;1&gt;(tuple);

auto isn&apos;t helping me here. Nor is the tuple, raeally. How do I know what &lt;0&gt; and &lt;1&gt; are?

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:298
&gt; +    return *std::get&lt;0&gt;(ensureModelAndInterface(contextId));

Magic 0

&gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:303
&gt; +    return *std::get&lt;1&gt;(ensureModelAndInterface(contextId));

Magic 1

&gt; Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm:169
&gt; +        auto model = std::get&lt;0&gt;(tuple);
&gt; +        auto interface = std::get&lt;1&gt;(tuple);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086095</commentid>
    <comment_count>11</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-16 15:26:49 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 250876 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250876&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h:71
&gt; &gt; +    static Ref&lt;WebVideoFullscreenInterfaceAVKit&gt; create() { return adoptRef(*new WebVideoFullscreenInterfaceAVKit()); }
&gt; 
&gt; We normally don&apos;t put these on one line.
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.h:48
&gt; &gt; +    static RefPtr&lt;WebVideoFullscreenModelVideoElement&gt; create() { return adoptRef(*new WebVideoFullscreenModelVideoElement()); }
&gt; 
&gt; Unwrap.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:243
&gt; &gt; +        auto&amp; model = std::get&lt;0&gt;(tuple);
&gt; &gt; +        auto&amp; interface = std::get&lt;1&gt;(tuple);
&gt; 
&gt; auto isn&apos;t helping me here. Nor is the tuple, raeally. How do I know what
&gt; &lt;0&gt; and &lt;1&gt; are?

How do you know what pair.first and pair.second are?  That said, this could probably be changed to:

RefPtr&lt;WebVideoFullscreenModelContext&gt; model;
RefPtr&lt;WebVideoFullscreenInterfaceAVKit&gt; interface;
std::tie(model, interface) = tuple;

&gt; &gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:298
&gt; &gt; +    return *std::get&lt;0&gt;(ensureModelAndInterface(contextId));
&gt; 
&gt; Magic 0

Think of it as equivalent to `pair.first`.  In C++14, this would be std::get&lt;WebVideoFullscreenModelContext*&gt;(...).

&gt; &gt; Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm:303
&gt; &gt; +    return *std::get&lt;1&gt;(ensureModelAndInterface(contextId));
&gt; 
&gt; Magic 1

Think of it as equivalent to `pair.second`.  In C++14, this would be std::get&lt;WebVideoFullscreenInterfaceAVKit*&gt;(...).

&gt; &gt; Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm:169
&gt; &gt; +        auto model = std::get&lt;0&gt;(tuple);
&gt; &gt; +        auto interface = std::get&lt;1&gt;(tuple);
&gt; 
&gt; Ditto.

Same as the first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086105</commentid>
    <comment_count>12</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-16 15:44:11 -0700</bug_when>
    <thetext>Committed r182914: &lt;http://trac.webkit.org/changeset/182914&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250681</attachid>
            <date>2015-04-13 15:55:19 -0700</date>
            <delta_ts>2015-04-14 14:39:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143680-20150413155423.patch</filename>
            <type>text/plain</type>
            <size>89685</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ1NzIxNTlhMmZkOGYx
MjBmOTY4OTZlYzA2ZDgyZGY0NmI3NGIwMS4uOTdjNTIxNDM3MWJlMTc0YTcxYWU1MjI3OWIwZTlh
NzFiMTdmMmUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDE1LTA0LTEzICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0
YW5lb3VzbHkgZXhpdGluZy1hbmQtZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci9Qcm94eSBiZWNvbWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVu
dCBpdCByZXByZXNlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQzNjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIGdldHRlcnMgZm9yIHRoZSB2aWRlbydzIGZ1bGxzY3JlZW4gbGF5ZXIsIGFu
ZCBiZSBtb3JlIHRvbGVyYW50IGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCBzZXRWaWRlb0VsZW1l
bnQoKSBhbmQgCisgICAgICAgIHNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSBhcmUgY2Fs
bGVkLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp2aWRlb0Z1bGxzY3JlZW5MYXllcik6IEFkZGVkIHNpbXBs
ZSBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6dmlkZW9FbGVtZW50KTogQWRkZWQgc2ltcGxlIGdldHRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpOiBEZWxldGVkLiBNb3ZlZCB0byAubW0gZmlsZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW06CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQpOiBJbml0aWFsaXplIGl2YXJzIGluIHRo
ZSAuaCBmaWxlLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSk6IENhbGwgdGhvc2UgbWV0aG9kcyBza2lw
cGVkIGluIHNldFZpZGVvRWxlbWVudCgpCisgICAgICAgICAgICBpZiBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSBoYWQgbm90IHlldCBiZWVuIHNldC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOiBOdWxsLWNoZWNrIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9FbGVt
ZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQz
Njc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCBhOTJjNzBhMTQwMmFmNmQ1ODc0MjA0ZGExYTI4MzI0YTU3NTA4
ZTQxLi43Y2MwZDBjZmY1ODlhYzBkN2VkMmY3OWNhODhmMWE2NDQ5N2FiM2Y2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsMTk4IEBACiAyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0YW5lb3VzbHkgZXhpdGluZy1hbmQt
ZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci9Qcm94eSBiZWNv
bWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVudCBpdCByZXByZXNlbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG9yaWdpbmFs
IGFzc3VtcHRpb24gb2YgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBhbmQgLVByb3h5IHdhcyB0
aGF0IHRoZSB0d28gY2xhc3NlcyB3b3VsZCByZXByZXNlbnQgYQorICAgICAgICBzaW5nbGUgdmlk
ZW8gZWxlbWVudCBhbmQgaXRzIGZ1bGwgc2NyZWVuIHN0YXRlLiBXaXRoIG11bHRpcGxlIGFuaW1h
dGlvbnMgaW4gYW5kIG91dCBvZiBmdWxsc2NyZWVuIGNvbWJpbmVkIHdpdGgKKyAgICAgICAgbXVs
dGlwbGUgZnVsbHNjcmVlbiBtb2RlcywgdGhpcyBhc3N1bXB0aW9uIG5vIGxvbmdlciBob2xkcyB0
cnVlLgorCisgICAgICAgIFJhdGhlciB0aGFuIGhhdmluZyBhIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIgd2hpY2ggL2lzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQsIHRo
ZSBtYW5hZ2VyIG5vdworICAgICAgICAvaGFzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQgKG9yIGhhcyBtYW55IHN1Y2ggbW9kZWxzKS4gRGl0dG8gZm9yIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgYW5kCisgICAgICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LiBUaGUgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgc3RpbGwgbmVlZHMgYSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB0bworICAgICAgICBjb21tdW5pY2F0ZSB3aXRoLCBzbyBh
IG5ldyB3cmFwcGVyIGNsYXNzIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0LiBEaXR0byBmb3IKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQgYW5kIHRoZSBuZXcgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dC4gVGhlc2UgY29udGV4dCBjbGFzc2VzCisgICAgICAgIGFyZSBwYWlyZWQg
YW5kIHNoYXJlIGEgY29udGV4dElkLCBhbGxvd2luZyB0aGUgbWFuYWdlciBhbmQgaXRzIHByb3h5
IHRvIHJvdXRlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIFVJUHJvY2VzcydzCisgICAgICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IHRvLWFuZC1mcm9tIHRoZSBXZWJQcm9jZXNzJ3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuCisKKyAgICAgICAgQm90aCB0aGUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCB0YWtlIGEgYmFjay1wb2ludGVyIHRvIHRoZWlyCisgICAgICAgIG1h
bmFnZXIgb3IgbWFuYWdlciBwcm94eSwgYW5kIGVhY2ggbWV0aG9kIG9uIHRoZSBjb250ZXh0IHNp
bXBseSBjYWxscyB0aGUgbWF0Y2hpbmcgbWV0aG9kIG9uIHRoZSBtYW5hZ2VyIGFuZAorICAgICAg
ICBwYXNzZXMgaXRzIGNvbnRleHRJZCBhcyBhIHBhcmFtZXRlci4KKworICAgICAgICBCb3RoIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IHBhc3MgdGhhdCBjb250ZXh0SWQgaW4gZWFjaCBvZiB0aGVpcgorICAgICAgICBj
cm9zcy1wcm9jZXNzIG1lc3NhZ2VzLgorCisgICAgICAgIE9uIHRoZSBvdGhlciBzaWRlLCB0aGUg
bWFuYWdlciBhbmQgcHJveHkgYWxzbyBoYXZlIGEgbWFwIGJldHdlZW4gY29udGV4dElkcyBhbmQg
dGhlaXIgbWF0Y2hpbmcKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQgKGluIHRoZSBjYXNlIG9mIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpIG9yCisgICAgICAg
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IChpbiB0aGUgY2FzZSBvZiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpLgorCisgICAgICAgIFdoaWxlIHRoaXMgY2hhbmdlIGlz
IGxhcmdlIGJ5IExvQywgaXQgaXMgYWxtb3N0IGVudGlyZWx5IGJvaWxlcnBsYXRlLiAgVGhlIG5l
dyBhbmQgaW50ZXJlc3RpbmcgcGllY2VzIGFyZSB0aGVzZToKKworICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSk6IE5vIGxvbmdlciBhIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRh
dGUpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50ZXJmYWNlcywgaW52YWxpZGF0aW5n
IGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gTGF6aWx5IGNyZWF0ZSwgYW5kIGFkZCB0
byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5ldyBtb2RlbCBhbmQgaW50ZXJmYWNl
IG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjplbnN1cmVNb2RlbCk6IFJldHVybiB0aGUgbW9kZWwgaGFsZiBvZiBlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmVuc3VyZUludGVyZmFjZSk6IFJldHVybiB0aGUgaW50ZXJmYWNlIGhhbGYgb2YgZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOiBXYWxrIHRocm91Z2ggdGhlIG91dHN0YW5k
aW5nIGludGVyZmFjZSBvYmplY3RzLCBhbmQgaWYgCisgICAgICAgICAgICBhbnkgaGF2ZSBhIGZ1
bGxzY3JlZW4gbW9kZSB3aGljaCBtYXRjaGVzIHRoZSBhYm91dC10by1iZS1mdWxsc2NyZWVuIGlu
dGVyZmFjZSwgcmVxdWVzdCB0aGF0IHRoYXQgb3RoZXIgaW50ZXJmYWNlCisgICAgICAgICAgICBl
eGl0IGZ1bGxzY3JlZW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6bmV4dENvbnRleHRJZCk6IFN0YXRpYywg
aW5jcmVtZW50aW5nIGNvdW50ZXIgdXNlZCBhcyBhIGNvbnRleHRJZCBzb3VyY2UuCisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIpOiBObyBsb25nZXIgYSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50ZXJmYWNlcywg
aW52YWxpZGF0aW5nIGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKTogIEFkZGVkLiBMYXppbHkgY3JlYXRlLCBh
bmQgYWRkIHRvIHRoZSBtX2NvbnRleHRNYXAKKyAgICAgICAgICAgIGEgbmV3IG1vZGVsIGFuZCBp
bnRlcmZhY2Ugb2JqZWN0LgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjplbnN1cmVNb2RlbCk6IFJldHVybiB0aGUgbW9kZWwgaGFsZiBvZiBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjplbnN1cmVJbnRlcmZhY2UpOiBSZXR1cm4gdGhlIGludGVyZmFjZSBoYWxmIG9mIGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKCkuCisKKyAgICAgICAgTmV3IGNsYXNzZXMgYW5kIG1ldGhvZHMgd2hp
Y2gganVzdCBmb3J3YXJkIG9uIHRvIHRoZWlyIG93bmluZyBvYmplY3RzOgorCisgICAgICAgICog
VUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6On5XZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmxheWVySG9zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0TGF5ZXJIb3N0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRJbml0aWFsVmlkZW9MYXllckZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2NydWJiaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjplbmRTY3J1YmJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNl
ZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjplbmRTY2FubmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEV4
aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpzZXRWaWRlb0xheWVyRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnZpZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckdyYXZpdHkpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnZpZGVvTGF5
ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2Rl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVs
bHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OmludmFsaWRhdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpsYXllckhvc3RpbmdD
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDo6aXNBbmltYXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0OjpzZXRJc0FuaW1hdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnRhcmdldElzRnVsbHNjcmVlbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldFRhcmdl
dElzRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0RnVsbHNjcmVlbk1vZGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojppc0Z1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojpz
ZXRJc0Z1bGxzY3JlZW4pOgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGluZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlh
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0UmF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldFZp
ZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OnNldFNlZWthYmxlUmFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0QXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0
RXh0ZXJuYWxQbGF5YmFjayk6CisKKyAgICAgICAgQ3Jvc3MtcHJvY2VzcyBtZXRob2RzIHdoaWNo
IG5vdyB0YWtlIGEgY29udGV4dElkIHBhcmFtZXRlcjoKKworICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAq
IFVJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVl
bldpdGhJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0QnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFNlZWth
YmxlUmFuZ2VzVmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RHVyYXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNl
dFJhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpjbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwbGF5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwYXVzZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpi
ZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdC
YWNrd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jh
dml0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6dmlkZW9MYXllckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp2aWRlb0xheWVyR3Jhdml0
eSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JW
aWRlb0VsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpyZXNldE1lZGlhU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c2V0QnVmZmVyZWRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFNlZWthYmxlUmFuZ2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0Q2FuUGxheUZhc3RSZXZlcnNl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RXh0ZXJuYWxQbGF5YmFjayk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnBsYXkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpwYXVzZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5kU2NydWJiaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2Vla1RvVGlt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZhc3RTZWVr
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY2Fu
bmluZ0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjplbmRTY2FubmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVk
aWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpm
dWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFbnRlckZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9M
YXllckdyYXZpdHlFbnVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVl
bik6IERlbGV0ZWQuCisKKzIwMTUtMDQtMTMgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKICAgICAgICAgW0Z1bGxzY3JlZW5dIENocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNj
cmVlbigpIHNob3VsZCB0YWtlIGEgcG9pbnRlciB0byBhIEhUTUxWaWRlb0VsZW1lbnQuCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM2NzQKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCA3ZDFhNjAzYTI0NDcxNGVjYzll
NDBkNTQwMzRmMDU2MGE4N2NjNjJlLi5iMmI1MzdmOWNiM2FjNjM4YTdmNDllMjM1ZTAwZmYzYTJm
NjkzYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtMTI4LDYg
KzEyOCw3IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29u
c3Q7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHZvaWQgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
UGxhdGZvcm1MYXllciopOworICAgIFBsYXRmb3JtTGF5ZXIqIHZpZGVvRnVsbHNjcmVlbkxheWVy
KCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0Z1bGxzY3JlZW5MYXllci5nZXQoKTsgfQogICAgIHZv
aWQgc2V0VmlkZW9GdWxsc2NyZWVuRnJhbWUoRmxvYXRSZWN0KTsKICAgICB2b2lkIHNldFZpZGVv
RnVsbHNjcmVlbkdyYXZpdHkoTWVkaWFQbGF5ZXI6OlZpZGVvR3Jhdml0eSk7CiAgICAgTWVkaWFQ
bGF5ZXI6OlZpZGVvR3Jhdml0eSB2aWRlb0Z1bGxzY3JlZW5HcmF2aXR5KCkgY29uc3QgeyByZXR1
cm4gbV92aWRlb0Z1bGxzY3JlZW5HcmF2aXR5OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5o
CmluZGV4IDg0NzNmNmIwNDQyNGI5NDdkODc5NWM3NzI3Zjk4NjEwMmJlYTUyY2IuLmY5OTljMzQ0
MTRiOTFlNjUyYWEyNTZiYmFmZjJhYWM2N2UwZjg0NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdC5oCkBAIC0xMDYsNiArMTA2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENhbmNlbE9w
dGltaXplZEZ1bGxzY3JlZW4oKTsKICAgICB2b2lkIHByZXBhcmVGb3JPcHRpbWl6ZWRGdWxsc2Ny
ZWVuU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7CiAKKyAgICB2b2lk
IHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9p
ZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAg
Ym9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
ID09IG1vZGU7IH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgYmVnaW5TZXNzaW9uKCk7CiAgICAg
dm9pZCBzZXR1cEZ1bGxzY3JlZW5JbnRlcm5hbChQbGF0Zm9ybUxheWVyJiwgY29uc3QgSW50UmVj
dCYgaW5pdGlhbFJlY3QsIFVJVmlldyAqLCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CkBAIC0xMTQsMTEgKzExOSw2
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuSW50ZXJuYWwoY29uc3QgSW50
UmVjdCYgZmluYWxSZWN0KTsKICAgICB2b2lkIGNsZWFudXBGdWxsc2NyZWVuSW50ZXJuYWwoKTsK
IAotICAgIHZvaWQgc2V0TW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KTsKLSAgICB2b2lkIGNsZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlKTsKLSAgICBib29sIGhhc01vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlKSBjb25zdCB7IHJldHVybiBtX21vZGUgJiBtb2RlOyB9Ci0gICAgYm9vbCBpc01v
ZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSBjb25zdCB7IHJl
dHVybiBtX21vZGUgPT0gbW9kZTsgfQotCiAgICAgUmV0YWluUHRyPFdlYkFWUGxheWVyQ29udHJv
bGxlcj4gbV9wbGF5ZXJDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxBVlBsYXllclZpZXdDb250
cm9sbGVyPiBtX3BsYXllclZpZXdDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxDQUxheWVyPiBt
X3ZpZGVvTGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmluZGV4IDU5OWE3
NGEzYTc5NmQxNTE1NDI3MjViZTc2ZGEyMzlkMDY2ODc4YzkuLjQ2MWJlZTlmMmEyMmY2YTViYTFh
NDU2ZWVhNTVlYTM5ZmU4MmU4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5o
CkBAIC00Nyw4ICs0Nyw5IEBAIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50IDogcHVibGljIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsLCBwdWJsCiBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudCgpOwotICAgIHZvaWQgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZSogaW50ZXJmYWNlKSB7bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2UgPSBpbnRlcmZhY2U7fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlKFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSopOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZGVvRWxlbWVudC5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VmlkZW9GdWxsc2NyZWVuTGF5ZXIoUGxhdGZvcm1MYXllciopOwogICAgIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqKSBvdmVycmlkZTsKQEAgLTgxLDggKzgyLDggQEAgcHJp
dmF0ZToKICAgICAKICAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7
CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXI7Ci0g
ICAgYm9vbCBtX2lzTGlzdGVuaW5nOwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSog
bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U7CisgICAgYm9vbCBtX2lzTGlzdGVuaW5nIHsgZmFs
c2UgfTsKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UqIG1fdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlIHsgbnVsbHB0ciB9OwogICAgIEZsb2F0UmVjdCBtX3ZpZGVvRnJhbWU7CiAgICAg
VmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBtX2xlZ2libGVUcmFja3NGb3JNZW51OwogICAgIFZl
Y3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IG1fYXVkaW9UcmFja3NGb3JNZW51OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50Lm1tCmluZGV4IDY5ZjdiZGE2MmI2NDQwNzI2Y2Y0NzNmYTlk
OTk4ZmMzNTMwZGZlMDUuLjExZWQ2NjM5ZjQwZWViM2RhNjFlNDI1ZTUzOTYyNjNkNzMzOTQxNDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQubW0KQEAgLTUzLDggKzUzLDYgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiAgICAgOiBFdmVu
dExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50TGlzdGVuZXJUeXBlKQotICAgICwgbV9p
c0xpc3RlbmluZyhmYWxzZSkKLSAgICAsIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKG51bGxw
dHIpCiB7CiB9CiAKQEAgLTYyLDYgKzYwLDIwIEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKQogewogfQog
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBpbnRlcmZhY2Up
Cit7CisgICAgaWYgKGludGVyZmFjZSA9PSBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBpbnRlcmZh
Y2U7CisKKyAgICBpZiAobV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpIHsKKyAgICAgICAgbV92
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnJlc2V0TWVkaWFTdGF0ZSgpOworICAgICAgICBpZiAo
bV92aWRlb0VsZW1lbnQpCisgICAgICAgICAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+
c2V0VmlkZW9EaW1lbnNpb25zKHRydWUsIG1fdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIG1f
dmlkZW9FbGVtZW50LT52aWRlb0hlaWdodCgpKTsKKyAgICB9Cit9CisKIHZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVt
ZW50KiB2aWRlb0VsZW1lbnQpCiB7CiAgICAgaWYgKG1fdmlkZW9FbGVtZW50ID09IHZpZGVvRWxl
bWVudCkKQEAgLTY5LDcgKzgxLDEzIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ6OnNldFZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50KiB2aWRlCiAKICAgICBp
ZiAobV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpCiAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlLT5yZXNldE1lZGlhU3RhdGUoKTsKLSAgICAKKworICAgIGlmIChtX3ZpZGVvRWxl
bWVudCAmJiBtX3ZpZGVvRWxlbWVudC0+ZnVsbHNjcmVlbk1vZGUoKSkKKyAgICAgICAgbV92aWRl
b0VsZW1lbnQtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlTm9uZSk7CisKKyAgICBpZiAobV92aWRlb0VsZW1lbnQgJiYgbV92aWRlb0Vs
ZW1lbnQtPnZpZGVvRnVsbHNjcmVlbkxheWVyKCkpCisgICAgICAgIG1fdmlkZW9FbGVtZW50LT5z
ZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihudWxscHRyKTsKKwogICAgIGlmIChtX3ZpZGVvRWxlbWVu
dCAmJiBtX2lzTGlzdGVuaW5nKSB7CiAgICAgICAgIGZvciAoYXV0byBldmVudE5hbWUgOiBvYnNl
cnZlZEV2ZW50TmFtZXMoKSkKICAgICAgICAgICAgIG1fdmlkZW9FbGVtZW50LT5yZW1vdmVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZSwgdGhpcywgZmFsc2UpOwpAQCAtODcsNyArMTA1LDggQEAgdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGUKIAogICAgIHVwZGF0ZUZvckV2ZW50TmFtZShldmVudE5hbWVB
bGwoKSk7CiAKLSAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNp
b25zKHRydWUsIHZpZGVvRWxlbWVudC0+dmlkZW9XaWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVv
SGVpZ2h0KCkpOworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKKyAgICAgICAg
bV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UtPnNldFZpZGVvRGltZW5zaW9ucyh0cnVlLCB2aWRl
b0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwgdmlkZW9FbGVtZW50LT52aWRlb0hlaWdodCgpKTsKIH0K
IAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6aGFuZGxlRXZlbnQo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50KiBldmVudCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCmluZGV4IGQ5ZTY1Y2U5MzM4YmY4YzM1YTMxMDY0ODBj
OWNjNmEyYTIyNDc1MTYuLmFjODBhMzUwZWVjODFkZWY1YWNhNzZiYWM1YzVjNDJmOGZkOTc4OTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaApAQCAtNDEsMzQgKzQxLDMxIEBAIE9CSkNfQ0xB
U1MgVUlWaWV3OwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2Ns
YXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTsKIAotY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUFWS2l0LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2Jz
ZXJ2ZXIsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+LCBw
dWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwsIHB1YmxpYyBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7Cisg
ICAgc3RhdGljIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJ
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dChtYW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51
bGxwdHI7IH0KIAotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAg
ICBQbGF0Zm9ybUxheWVyKiBsYXllckhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdC5n
ZXQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJIb3N0KFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiYm
IGxheWVySG9zdCkgeyBtX2xheWVySG9zdCA9IFdURjo6bW92ZShsYXllckhvc3QpOyB9CiAKLSAg
ICAvLyBUcmFuc2xhdGUgdG8gRnVsbHNjcmVlbkludGVyZmFjZQotICAgIHZvaWQgc2V0dXBGdWxs
c2NyZWVuV2l0aElEKHVpbnQzMl90LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVj
dCwgZmxvYXQgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7
Ci0gICAgdm9pZCBzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpwYWly
PGRvdWJsZSwgZG91YmxlPj4mKTsKLSAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0
aWVzKGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERl
dmljZU5hbWUpOwotICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJl
cGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgaW5saW5lUmVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRJbml0aWFsVmlkZW9MYXllckZy
YW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkgeyBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1l
OyB9CiAKLSAgICAvLyBGdWxsc2NyZWVuIE9ic2VydmVyCi0gICAgdmlydHVhbCB2b2lkIGRpZFNl
dHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxz
Y3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJp
ZGU7Ci0gICAgCi0gICAgLy8gRnVsbHNjcmVlbk1vZGVsCitwcml2YXRlOgorICAgIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkqIG1h
bmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICAgICAgOiBtX21hbmFnZXIobWFuYWdlcikK
KyAgICAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCisgICAgeyAgICAgICAgCisgICAgfQor
CisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwKICAgICB2aXJ0dWFsIHZvaWQgcGxheSgp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCB0b2dnbGVQbGF5U3RhdGUoKSBvdmVycmlkZTsKQEAgLTc5LDE4ICs3Niw5MiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCgpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQoKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZW5kU2Nhbm5pbmcoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFZp
ZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6RmxvYXRSZWN0IHZpZGVvTGF5ZXJGcmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJDb3JlOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlkZW9MYXllckdyYXZpdHkoVmlkZW9HcmF2aXR5KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFZp
ZGVvR3Jhdml0eSB2aWRlb0xheWVyR3Jhdml0eSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90KSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogCi0gICAgV2ViUGFnZVBy
b3h5KiBtX3BhZ2U7CisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBk
aWRFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVw
RnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUoKSBvdmVycmlkZTsKKworICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eSogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90IG1fY29udGV4dElkOwogICAgIFJldGFpblB0
cjxQbGF0Zm9ybUxheWVyPiBtX2xheWVySG9zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92
aWRlb0xheWVyRnJhbWU7CiAgICAgVmlkZW9HcmF2aXR5IG1fdmlkZW9MYXllckdyYXZpdHkgeyBW
aWRlb0dyYXZpdHlSZXNpemUgfTsKIH07CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eT4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBhZ2VQ
cm94eSYpOworICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpOwor
CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDsKKworICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpIG92
ZXJyaWRlOworCisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ+LCBSZWZQdHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUg
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQqIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQqIGVuc3VyZUlu
dGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisgICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWlu
dDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRG
dWxsc2NyZWVuKTsKKyAgICB2b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgc2V0Q3VycmVudFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3Vy
cmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSk7CisgICAgdm9pZCBzZXRCdWZmZXJlZFRpbWUodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKKyAgICB2b2lkIHNldFZpZGVv
RGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8sIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworICAgIHZvaWQgc2V0U2Vla2FibGVSYW5nZXNWZWN0b3Io
dWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFu
Z2VzKTsKKyAgICB2b2lkIHNldENhblBsYXlGYXN0UmV2ZXJzZSh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnModWlu
dDY0X3QgY29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3Rl
ZEluZGV4KTsKKyAgICB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnModWludDY0
X3QgY29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KTsKKyAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxp
emVkRGV2aWNlTmFtZSk7CisgICAgdm9pZCBzZXREdXJhdGlvbih1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBkdXJhdGlvbik7CisgICAgdm9pZCBzZXRSYXRlKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKTsKKyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCk7CisgICAgdm9pZCBjbGVhbnVwRnVs
bHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRv
SW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0
IGlubGluZVJlY3QpOworCisgICAgLy8gTWVzc2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcgorICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcGF1c2Uo
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2Vl
a1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGZhc3RT
ZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgYmVnaW5TY2Fu
bmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdC
YWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBk
aWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0Vmlk
ZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0KTsKKyAg
ICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSk7CisgICAgdm9pZCBzZWxlY3RB
dWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAg
IHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpOworICAgIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisg
ICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkKTsK
KworICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOworICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVs
SW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKworfTsKICAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCmlu
ZGV4IDc0NjA0MDI5NTNkYTBjMzdiMGZmZDY2ODhkMjEzN2FiZGQ2ZTcyNDUuLmE0ZTdjMjdhOGUz
YmMyMTI4M2U0NTEzOGVhODI0NzZlZDcwNjNhMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMiwyMSArMjIsMjEgQEAKIAogI2lmIFBMQVRGT1JN
KElPUykKIG1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSB7Ci0gICAg
UmVzZXRNZWRpYVN0YXRlKCkKLSAgICBTZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUs
IGRvdWJsZSBob3N0VGltZSkKLSAgICBTZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGlt
ZSkKLSAgICBTZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkKLSAgICBTZXRTZWVrYWJsZVJhbmdlc1ZlY3RvcihWZWN0b3I8c3Rk
OjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzKTsKLSAgICBTZXRDYW5QbGF5RmFzdFJldmVy
c2UoYm9vbCB2YWx1ZSk7Ci0gICAgU2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoVmVjdG9y
PFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Ci0gICAgU2V0TGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhWZWN0b3I8U3RyaW5nPiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KTsKLSAgICBTZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyhib29sIGVu
YWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsK
LSAgICBTZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pCi0gICAgU2V0UmF0ZShib29sIGlzUGxh
eWluZywgZG91YmxlIHJhdGUpCi0gICAgU2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQzMl90IHZp
ZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1Nj
YWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQotICAg
IEVudGVyRnVsbHNjcmVlbigpCi0gICAgRXhpdEZ1bGxzY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBm
aW5hbFJlY3QpCi0gICAgQ2xlYW51cEZ1bGxzY3JlZW4oKQotICAgIFByZXBhcmVkVG9SZXR1cm5U
b0lubGluZShib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5lUmVjdCkKKyAgICBS
ZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQorICAgIFNldEN1cnJlbnRUaW1lKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCisg
ICAgU2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGlt
ZSkKKyAgICBTZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1Zp
ZGVvLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgIFNldFNlZWthYmxlUmFu
Z2VzVmVjdG9yKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRv
dWJsZT4+IHJhbmdlcykKKyAgICBTZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4
dElkLCBib29sIHZhbHVlKQorICAgIFNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2
NF90IGNvbnRleHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKKyAgICBTZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAg
ICBTZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
ZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUp
CisgICAgU2V0RHVyYXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCisg
ICAgU2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0
ZSkKKyAgICBTZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJf
dCB2aWRlb0xheWVySUQsIFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3Rp
bmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikK
KyAgICBFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIEV4aXRGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCisgICAg
Q2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIFByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50
UmVjdCBpbmxpbmVSZWN0KQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCmlu
ZGV4IDMyNTM4YzJiYWQ3YTUyYTRjYjRjN2FjMDcxOTc5ODc1MDI0NGRiOWEuLjIxN2ZhYzFkYzRi
YWI5NDlhZWVlZTk0MzgzZTIwOWI2OWI3YmU4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tCkBAIC00OCw2ICs0OCwxNDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+IDgwMjAwCiAKKyNwcmFnbWEgbWFyayAtIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6cGxheSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5wbGF5KG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OnBhdXNlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PnBhdXNlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAg
bV9tYW5hZ2VyLT50b2dnbGVQbGF5U3RhdGUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY3J1YmJpbmcobV9jb250ZXh0SWQp
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZW5kU2NydWJiaW5n
KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmVuZFNjcnViYmlu
ZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3sKKyAg
ICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVrKG1fY29udGV4dElk
LCB0aW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nQmFja3dhcmQo
bV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZW5kU2Nhbm5pbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVy
RnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQoreworICAgIG1fdmlkZW9MYXllckZyYW1l
ID0gZnJhbWU7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRl
b0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKK30KKworV2ViQ29yZTo6RmxvYXRSZWN0
IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dmlkZW9MYXllckZyYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV92aWRlb0xheWVyRnJhbWU7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJDb3JlOjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7CisgICAgbV92aWRlb0xh
eWVyR3Jhdml0eSA9IGdyYXZpdHk7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRWaWRlb0xheWVyR3Jhdml0eShtX2NvbnRleHRJZCwgZ3Jhdml0eSk7Cit9CisKK1dl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyR3Jhdml0eSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmlkZW9MYXllckdyYXZpdHk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklkKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IG9wdGlvbklk
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0TGVnaWJs
ZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKG1fY29udGV4
dElkLCBtb2RlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRp
ZFNldHVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNjcmVlbihtX2NvbnRl
eHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0
RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5k
aWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVlbihtX2NvbnRleHRJ
ZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFu
YWdlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElkKTsKK30KKworI3By
YWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisKIFBhc3NSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSkpOwpAQCAtNTcsOCArMTk5
LDYgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWcKICAgICA6IG1fcGFnZSgmcGFnZSkKIHsKICAg
ICBtX3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBh
Z2VJRCgpLCAqdGhpcyk7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwodGhpcyk7Ci0g
ICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7CiB9CiAKIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eSgpCkBAIC03MCwzNyArMjEwLDkxIEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpOwotCiAgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgbV9wYWdl
ID0gbnVsbHB0cjsKIAotICAgIFttX2xheWVySG9zdCByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0g
ICAgbV9sYXllckhvc3QuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0
TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbW9kZWwgPSBzdGQ6OmdldDwwPih0dXBsZSk7
CisgICAgICAgIGF1dG8gaW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4odHVwbGUpOworCisgICAgICAg
IGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgICAgICBbbW9kZWwtPmxheWVySG9zdCgpIHJl
bW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbW9kZWwtPnNldExheWVySG9zdChudWxscHRy
KTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50MzJfdCB2
aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBo
b3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4p
CitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgaWYgKG1fY29udGV4dE1hcC5jb250YWlucyhjb250ZXh0
SWQpKQorICAgICAgICByZXR1cm4gbV9jb250ZXh0TWFwLmdldChjb250ZXh0SWQpOworCisgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSh0aGlzLCBjb250ZXh0SWQpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0g
YWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCkpOworCisgICAg
aW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbChtb2RlbC5nZXQoKSk7CisgICAg
aW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihtb2RlbC5nZXQo
KSk7CisKKyAgICBNb2RlbEludGVyZmFjZVR1cGxlIHR1cGxlID0gc3RkOjptYWtlX3R1cGxlKG1v
ZGVsLCBpbnRlcmZhY2UpOworICAgIG1fY29udGV4dE1hcC5zZXQoY29udGV4dElkLCB0dXBsZSk7
CisKKyAgICByZXR1cm4gV1RGOjptb3ZlKHR1cGxlKTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVs
KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8MD4oZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSkuZ2V0KCk7Cit9CisKK1dlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuIHN0ZDo6
Z2V0PDE+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpLmdldCgpOworfQorCisj
cHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQo
dWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwg
Ym9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCiB7CiAgICAgQVNTRVJUKHZpZGVvTGF5ZXJJ
RCk7Ci0gICAgbV9sYXllckhvc3QgPSBXS01ha2VSZW5kZXJMYXllcih2aWRlb0xheWVySUQpOwor
ICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNl
OworCisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVy
ZmFjZShjb250ZXh0SWQpOworCisgICAgbW9kZWwtPnNldEluaXRpYWxWaWRlb0xheWVyRnJhbWUo
aW5pdGlhbFJlY3QpOworICAgIG1vZGVsLT5zZXRMYXllckhvc3QoV0tNYWtlUmVuZGVyTGF5ZXIo
dmlkZW9MYXllcklEKSk7CiAgICAgaWYgKGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciAhPSAxKSB7
CiAgICAgICAgIC8vIEludmVydCB0aGUgc2NhbGUgdHJhbnNmb3JtIGFkZGVkIGluIHRoZSBXZWJQ
cm9jZXNzIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vMTgzMTY1NDI+LgogICAgICAgICBmbG9hdCBp
bnZlcnNlU2NhbGUgPSAxIC8gaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yOwotICAgICAgICBbbV9s
YXllckhvc3Qgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaW52ZXJzZVNjYWxl
LCBpbnZlcnNlU2NhbGUsIDEpXTsKKyAgICAgICAgW21vZGVsLT5sYXllckhvc3QoKSBzZXRUcmFu
c2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwg
MSldOwogICAgIH0KIAotICAgIG1fdmlkZW9MYXllckZyYW1lID0gaW5pdGlhbFJlY3Q7Ci0KICAg
ICBVSVZpZXcgKnBhcmVudFZpZXcgPSBkb3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5PigqbV9wYWdlLT5kcmF3aW5nQXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9v
dExheWVyKCk7Ci0gICAgc2V0dXBGdWxsc2NyZWVuKCptX2xheWVySG9zdC5nZXQoKSwgaW5pdGlh
bFJlY3QsIHBhcmVudFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93T3B0aW1pemVkRnVs
bHNjcmVlbik7CisgICAgaW50ZXJmYWNlLT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhv
c3QoKSwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93
T3B0aW1pemVkRnVsbHNjcmVlbik7CiB9Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbW9kZSkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQobW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpLT5yZXNldE1lZGlhU3RhdGUoKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3Rk
OjpwYWlyPGRvdWJsZSwgZG91YmxlPj4mIHJhbmdlcykKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IGN1cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCktPnNldEN1cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBob3N0VGltZSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRCdWZmZXJlZFRpbWUodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIGVuc3VyZUludGVyZmFj
ZShjb250ZXh0SWQpLT5zZXRCdWZmZXJlZFRpbWUoYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8sIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCktPnNldFZpZGVvRGltZW5zaW9u
cyhoYXNWaWRlbywgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcih1aW50NjRfdCBjb250ZXh0SWQs
IFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMpCiB7CiAgICAgUmVmUHRy
PFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJhbmdlIDogcmFuZ2VzKQpAQCAtMTExLDExOCArMzA1LDE2NCBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0U2Vla2FibGVSYW5nZXNWZWN0b3Io
Y29uc3QgVmVjdG9yPHN0ZDo6cAogICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2UuZmlyc3Qs
IHJhbmdlLnNlY29uZCk7CiAgICAgfQogCi0gICAgc2V0U2Vla2FibGVSYW5nZXMoKnRpbWVSYW5n
ZXMpOworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLT5zZXRTZWVrYWJsZVJhbmdlcygq
dGltZVJhbmdlcyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyhib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdl
dFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnNldENhblBsYXlGYXN0UmV2ZXJzZSh1aW50NjRfdCBjb250ZXh0SWQs
IGJvb2wgdmFsdWUpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCktPnNldENhblBs
YXlGYXN0UmV2ZXJzZSh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQs
IFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCktPnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
KG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250
ZXh0SWQsIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7
CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCktPnNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxv
Y2FsaXplZERldmljZU5hbWUpCiB7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlwZSk7
Ci0gICAgCiAgICAgQVNTRVJUKHR5cGUgPT0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpU
YXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6
VGFyZ2V0VHlwZVRWT3V0IHx8IHR5cGUgPT0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpU
YXJnZXRUeXBlTm9uZSk7CiAgICAgCi0gICAgc2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0
eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KS0+c2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1l
KTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6c2V0RHVyYXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCiB7
Ci0gICAgYm9vbCBpc1ZpZXdWaXNpYmxlID0gbV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCk7Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoaXNWaWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CiB9
Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1Jl
dHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5saW5l
UmVjdCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFJhdGUodWlu
dDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCiB7Ci0gICAgbV9w
YWdlLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VBVktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlubGlu
ZVJlY3QpOworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLT5zZXRSYXRlKGlzUGxheWlu
ZywgcmF0ZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgYXV0byBpbnRlcmZhY2UgPSBlbnN1cmVJbnRl
cmZhY2UoY29udGV4dElkKTsKKyAgICBpbnRlcmZhY2UtPmVudGVyRnVsbHNjcmVlbigpOworCisg
ICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNjcmVlbiBtb2Rl
IGF0IGEgdGltZToKKyAgICBmb3IgKGF1dG8mIGNvbnRleHRQYWlyIDogbV9jb250ZXh0TWFwKSB7
CisgICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29udGV4dFBhaXIua2V5OworICAgICAg
ICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6OmdldDwxPihjb250ZXh0UGFp
ci52YWx1ZSk7CisgICAgICAgIGlmIChvdGhlckludGVyZmFjZS0+aGFzTW9kZShpbnRlcmZhY2Ut
Pm1vZGUoKSkpCisgICAgICAgICAgICBvdGhlckludGVyZmFjZS0+cmVxdWVzdEhpZGVBbmRFeGl0
RnVsbHNjcmVlbigpOworICAgIH0KIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJl
Y3QgZmluYWxSZWN0KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0g
ICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAgIGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpLT5leGl0RnVsbHNjcmVlbihmaW5hbFJlY3QpOwogfQotICAgIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCkKIHsKLSAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgW21fbGF5ZXJI
b3N0IHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBtX2xheWVySG9zdC5jbGVhcigpOwotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkQ2xl
YW51cEZ1bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCktPmNsZWFudXBGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlk
U2V0dXBGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+ZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKCk7CisKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KS0+cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlubGluZVJlY3QpOwogfQogCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkK
KyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwbGF5KHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OkRpZEVudGVyRnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICBtX3BhZ2Ut
PmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBsYXkoKQordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OlBsYXkoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpQYXVzZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwYXVz
ZSgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3Rh
dGUodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UGF1c2UoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpUb2dnbGVQ
bGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0gICAgCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKCkKKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2NydWJi
aW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKCkKKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQp
CiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpCZWdpblNjcnViYmluZygpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkVuZFNjcnViYmluZyhjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmVuZFNjcnViYmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQogewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RW5kU2Ny
dWJiaW5nKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2Vla1RvVGltZShjb250ZXh0SWQsIHRpbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKIHsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNlZWtU
b1RpbWUodGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RmFzdFNlZWsoY29udGV4dElkLCB0aW1lKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGYXN0U2Vl
ayh0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjYW5uaW5nRm9yd2FyZChjb250ZXh0SWQp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6QmVn
aW5TY2FubmluZ0ZvcndhcmQoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFja3dh
cmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkVuZFNjYW5uaW5nKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpFbmRT
Y2FubmluZygpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVlc3RFeGl0RnVsbHNjcmVlbihjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotRmxvYXRSZWN0IFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6dmlkZW9MYXllckZyYW1lKCkgY29uc3QKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQogewotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJGcmFtZTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbihjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUp
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRXhpdEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNjcmVlbigpOworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVlbigpOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKQoreworICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCogbW9k
ZWwgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpOworCisgICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hd
OworICAgIFttb2RlbC0+bGF5ZXJIb3N0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIG1v
ZGVsLT5zZXRMYXllckhvc3QobnVsbHB0cik7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKworICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4dElk
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5
ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKIHsK
LSAgICBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1lOwogICAgIEBhdXRvcmVsZWFzZXBvb2wgewog
I2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gOTAwMDAKICAgICAgICAgQktT
QW5pbWF0aW9uRmVuY2VIYW5kbGUqIHN5bmNocm9uaXphdGlvbkZlbmNlID0gW1VJV2luZG93IF9z
eW5jaHJvbml6ZWREcmF3aW5nRmVuY2VdOwpAQCAtMjMxLDMwICs0NzEsMzYgQEAgdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3JlOjpG
bG9hdFJlY3QgZnJhbWUKICAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5jZVBvcnQgPSBbVUlX
aW5kb3cgX3N5bmNocm9uaXplRHJhd2luZ0Fjcm9zc1Byb2Nlc3Nlc107CiAjZW5kaWYKIAotICAg
ICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNl
dFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwg
TUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9M
YXllckZyYW1lRmVuY2VkKGNvbnRleHRJZCwgZnJhbWUsIElQQzo6QXR0YWNobWVudChmZW5jZVBv
cnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSksIG1fcGFnZS0+cGFnZUlEKCkpOwogICAgIH0K
IH0KIAotV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJHcmF2aXR5KCkgY29uc3QKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0eSh1
aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRl
b0dyYXZpdHkgZ3Jhdml0eSkKIHsKLSAgICByZXR1cm4gbV92aWRlb0xheWVyR3Jhdml0eTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZp
ZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRWaWRlb0xheWVyR3Jhdml0eShXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5IGdyYXZpdHkpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4
KQogewotICAgIG1fdmlkZW9MYXllckdyYXZpdHkgPSBncmF2aXR5OwotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXllckdyYXZp
dHlFbnVtKCh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZWxlY3RBdWRpb01l
ZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0
aW9uKHVpbnQ2NF90IGluZGV4KQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3Qg
aW5kZXgpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpT
ZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlE
KCkpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OlNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBib29sIGlzVmlld1Zpc2libGUg
PSBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShjb250
ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30KKwogI2VuZGlmCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCmluZGV4IGQxMjg4NmJmYjQ5
YmIwNjhjODY3ZTczYWI4NTJmMGEzZDc1YmE4NjIuLjk5YjQ4ZTg2YTAwNTMxMTRhNGJhZjAxOGJk
MDgzOGJkOTZkNjIwZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAg
LTUxLDUzICs1MiwxMTkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIExheWVySG9zdGlu
Z0NvbnRleHQ7CiBjbGFzcyBXZWJQYWdlOworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1YmxpYyBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCwgcHVibGljIFdlYkNvcmU6OldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citj
bGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIqIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCht
YW5hZ2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFn
ZXIgPSBudWxscHRyOyB9CisKKyAgICBMYXllckhvc3RpbmdDb250ZXh0KiBsYXllckhvc3RpbmdD
b250ZXh0KCkgeyByZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LmdldCgpOyB9CisgICAgdm9p
ZCBzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250
ZXh0PiYmKTsKKworICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzQW5p
bWF0aW5nOyB9CisgICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29sIGZsYWcpIHsgbV9pc0FuaW1h
dGluZyA9IGZsYWc7IH0KKworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuKCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXRJc0Z1bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldFRhcmdldElzRnVsbHNj
cmVlbihib29sIGZsYWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmbGFnOyB9CisKKyAgICBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIGZ1bGxzY3JlZW5N
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZTsgfQorICAgIHZvaWQgc2V0RnVs
bHNjcmVlbk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlKSB7IG1fZnVsbHNjcmVlbk1vZGUgPSBtb2RlOyB9CisKKyAgICBib29sIGlzRnVsbHNj
cmVlbigpIGNvbnN0IHsgcmV0dXJuIG1faXNGdWxsc2NyZWVuOyB9CisgICAgdm9pZCBzZXRJc0Z1
bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0gZmxhZzsgfQorCitwcml2YXRl
OgorICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQorICAgIHZpcnR1YWwgdm9pZCBy
ZXNldE1lZGlhU3RhdGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24o
ZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFRpbWUoZG91Ymxl
IGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHNldEJ1ZmZlcmVkVGltZShkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNlZWthYmxl
UmFuZ2VzKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RG
OjpTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0
b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4
dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBXVEY6OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1l
KSBvdmVycmlkZTsKKworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlciosIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0
SWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0
aW5nQ29udGV4dDsKKyAgICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wg
bV90YXJnZXRJc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgYm9vbCBtX2lz
RnVsbHNjcmVlbiB7IGZhbHNlIH07Cit9OworCitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4sIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYlBhZ2U+KTsK
ICAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAgICAgCiAgICAgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVy
Jikgb3ZlcnJpZGU7Ci0gICAgCisKKyAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50CiAg
ICAgYm9vbCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZvaWQgZW50ZXJW
aWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCos
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwogICAgIHZv
aWQgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9F
bGVtZW50Kik7CiAgICAgCiBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ7CisKICAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKFBhc3NSZWZQdHI8V2ViUGFnZT4pOwotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIHJocykgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLSAgICAKLSAgICAv
LyBGdWxsc2NyZWVuSW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRv
dWJsZSBhbmNob3JUaW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyZWRU
aW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRS
YXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFu
Z2VzKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxp
emVkRGV2aWNlTmFtZSkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBhZGRpdGlvbmFsIGluY29taW5nCi0g
ICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRFbnRlckZ1bGxzY3JlZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4o
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGJvb2wgaXNQYWdlVmlzaWJsZSk7Ci0gICAg
dm9pZCBzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywg
SVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCk7CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0
cjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsK
KyAgICBNb2RlbEludGVyZmFjZVR1cGxlIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQqIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQ29udGV4dCogZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dAorICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBzZXREdXJhdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSk7CisgICAgdm9pZCBz
ZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91
YmxlIGFuY2hvclRpbWUpOworICAgIHZvaWQgc2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBzZXRSYXRlKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSk7CisgICAgdm9pZCBz
ZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNlZWthYmxlUmFuZ2VzKHVpbnQ2
NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYpOworICAgIHZvaWQgc2V0
Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSk7CisgICAg
dm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAg
ICB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElk
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7
CisgICAgdm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBl
bmFibGVkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisKKyAgICAvLyBN
ZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eQorICAgIHZvaWQgcGxh
eSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjcnVi
YmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRF
eGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRW50ZXJGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lRmVuY2Vk
KHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRh
Y2htZW50IGZlbmNlUG9ydCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWlu
dDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KTsKKyAgICB2b2lkIHNlbGVjdEF1ZGlv
TWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9p
ZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBp
bmRleCk7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElk
LCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2
b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wg
aXNQYWdlVmlzaWJsZSk7CiAgICAgCiAgICAgV2ViUGFnZSogbV9wYWdlOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OwotICAgIAot
ICAgIGJvb2wgbV9pc0FuaW1hdGluZzsKLSAgICBib29sIG1fdGFyZ2V0SXNGdWxsc2NyZWVuOwot
ICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbV9mdWxs
c2NyZWVuTW9kZTsKLSAgICBib29sIG1faXNGdWxsc2NyZWVuOworICAgIEhhc2hNYXA8V2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudCosIHVpbnQ2NF90PiBtX3ZpZGVvRWxlbWVudHM7CisgICAgSGFz
aE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBsZT4gbV9jb250ZXh0TWFwOwogfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KaW5kZXggZDNjNjhhMzY2Y2Y4MTU0ZWRkZGIxODZkZDJlNmM5MzQ3ZmRhNTJhYi4uMDEz
ZGEzZWU2MjI0NWQxNDI1MmZjYjE0YTBhYjk4MzBhMDc0ZWM2ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0yMiwyNiArMjIsMjYgQEAKIAogI2lmIFBMQVRGT1JN
KElPUykKIG1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgewotICAgIFBsYXko
KQotICAgIFBhdXNlKCkKLSAgICBUb2dnbGVQbGF5U3RhdGUoKQotICAgIEJlZ2luU2NydWJiaW5n
KCkKLSAgICBFbmRTY3J1YmJpbmcoKQotICAgIFNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCi0gICAg
RmFzdFNlZWsoZG91YmxlIHRpbWUpCi0gICAgQmVnaW5TY2FubmluZ0ZvcndhcmQoKQotICAgIEJl
Z2luU2Nhbm5pbmdCYWNrd2FyZCgpCi0gICAgRW5kU2Nhbm5pbmcoKQotICAgIFJlcXVlc3RFeGl0
RnVsbHNjcmVlbigpCi0gICAgRGlkU2V0dXBGdWxsc2NyZWVuKCkKLSAgICBEaWRFeGl0RnVsbHNj
cmVlbigpCi0gICAgRGlkRW50ZXJGdWxsc2NyZWVuKCkKLSAgICBEaWRDbGVhbnVwRnVsbHNjcmVl
bigpCi0gICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKFdlYkNvcmU6OkZsb2F0UmVjdCBib3Vu
ZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCi0gICAgU2V0VmlkZW9MYXllckdyYXZpdHlF
bnVtKHVuc2lnbmVkIGdyYXZpdHkpCi0gICAgU2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRf
dCBpbmRleCkKLSAgICBTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi0g
ICAgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKLSAgICBGdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUoYm9vbCBpc1BhZ2VWaXNpYmxlKQorICAgIFBsYXkodWludDY0X3QgY29udGV4
dElkKQorICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBUb2dnbGVQbGF5U3RhdGUo
dWludDY0X3QgY29udGV4dElkKQorICAgIEJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKKyAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFNlZWtUb1RpbWUo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKKyAgICBGYXN0U2Vlayh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90
IGNvbnRleHRJZCkKKyAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElk
KQorICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBSZXF1ZXN0RXhpdEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZFNldHVwRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpCisgICAgRGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQorICAgIERpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkQ2xl
YW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIFNldFZpZGVvTGF5ZXJGcmFt
ZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQ
Qzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCisgICAgU2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVp
bnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0eSkKKyAgICBTZWxlY3RBdWRpb01lZGlh
T3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAgU2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCisgICAg
RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQorICAg
IEZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQ
YWdlVmlzaWJsZSkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KaW5kZXggOTFlNjU0NjJj
YWU3NDRmZWMzMTQ3ZWJmZWMzMzQ5OTViOTk4NjEyMS4uY2FkMWFjYzIwZmU5YjExZjY4YzgyYzQy
MjlhY2Y2Y2QwMWFkODAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCkBAIC02MCw2ICs2MCw5NyBA
QCBzdGF0aWMgSW50UmVjdCBjbGllbnRSZWN0Rm9yRWxlbWVudChIVE1MRWxlbWVudCogZWxlbWVu
dCkKICAgICByZXR1cm4gZWxlbWVudC0+Y2xpZW50UmVjdCgpOwogfQogCitzdGF0aWMgdWludDY0
X3QgbmV4dENvbnRleHRJZCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnRleHRJZCA9IDA7
CisgICAgcmV0dXJuICsrY29udGV4dElkOworfQorCisjcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciogbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIDogbV9tYW5hZ2Vy
KG1hbmFnZXIpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0
OjpzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250
ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gV1RGOjptb3Zl
KGNvbnRleHQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnJlc2V0TWVkaWFTdGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5yZXNldE1lZGlhU3RhdGUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldER1cmF0aW9uKG1fY29u
dGV4dElkLCBkdXJhdGlvbik7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9y
VGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldEN1cnJl
bnRUaW1lKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKGRvdWJs
ZSBidWZmZXJlZFRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5zZXRCdWZmZXJlZFRpbWUobV9jb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0UmF0ZShib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+c2V0UmF0ZShtX2NvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldFZpZGVvRGlt
ZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9EaW1lbnNpb25zKG1f
Y29udGV4dElkLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2ViQ29y
ZTo6VGltZVJhbmdlcyYgcmFuZ2VzKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+c2V0U2Vla2FibGVSYW5nZXMobV9jb250ZXh0SWQsIHJhbmdlcyk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0Q2FuUGxheUZhc3RSZXZl
cnNlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5zZXRDYW5QbGF5RmFzdFJldmVyc2UobV9jb250ZXh0SWQsIHZhbHVlKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRBdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0
QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVk
SW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNl
dExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYg
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMobV9jb250
ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBF
eHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBXVEY6OlN0cmluZyBsb2NhbGl6ZWREZXZp
Y2VOYW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0RXh0
ZXJuYWxQbGF5YmFjayhtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNl
TmFtZSk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKwog
UGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJQYWdlPiBwYWdlKQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlKSk7CkBAIC02NywyMCAr
MTU4LDU3IEBAIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFBhc3NSZWZQCiAKIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdlPiBwYWdl
KQogICAgIDogbV9wYWdlKHBhZ2UuZ2V0KCkpCi0gICAgLCBtX2lzQW5pbWF0aW5nKGZhbHNlKQot
ICAgICwgbV90YXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpCi0gICAgLCBtX2Z1bGxzY3JlZW5Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQotICAgICwgbV9pc0Z1
bGxzY3JlZW4oZmFsc2UpCiB7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKHRo
aXMpOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBw
YWdlLT5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp+
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1f
Y29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBhdXRvIG1vZGVsID0gc3RkOjpnZXQ8MD4o
dHVwbGUpOworICAgICAgICBhdXRvIGludGVyZmFjZSA9IHN0ZDo6Z2V0PDE+KHR1cGxlKTsKKwor
ICAgICAgICBtb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKG51bGxwdHIpOwor
ICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOworCisgICAgICAgIGludGVy
ZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOwor
ICAgIG1fdmlkZW9FbGVtZW50cy5jbGVhcigpOworCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCitXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICBpZiAobV9jb250ZXh0TWFwLmNvbnRhaW5zKGNvbnRleHRJZCkpCisgICAgICAgIHJl
dHVybiBtX2NvbnRleHRNYXAuZ2V0KGNvbnRleHRJZCk7CisKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsID0gYWRvcHRSZWYobmV3IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0OjpjcmVhdGUodGhpcywgY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+
c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRl
cm5hbEhvc3RpbmdQcm9jZXNzKCkpOworICAgIG1vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UoaW50ZXJmYWNlLmdldCgpKTsKKworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgdHVw
bGUgPSBzdGQ6Om1ha2VfdHVwbGUobW9kZWwsIGludGVyZmFjZSk7CisgICAgbV9jb250ZXh0TWFw
LnNldChjb250ZXh0SWQsIHR1cGxlKTsKKworICAgIHJldHVybiBXVEY6Om1vdmUodHVwbGUpOwor
fQorCitXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIHJldHVybiBzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQp
KS5nZXQoKTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4
dElkKSkuZ2V0KCk7Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50
OgorCiBib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpOwpAQCAt
OTAsNjYgKzIxOCw4MCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZQogewogICAgIEFTU0VSVCht
b2RlICE9IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKIAotICAg
IG1fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworICAgIHVpbnQ2NF90IGNvbnRleHRJZDsK
IAotICAgIG1fdGFyZ2V0SXNGdWxsc2NyZWVuID0gdHJ1ZTsKLSAgICBtX2Z1bGxzY3JlZW5Nb2Rl
ID0gbW9kZTsKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50cy5jb250YWlucyh2aWRlb0VsZW1lbnQp
KSB7CisgICAgICAgIGNvbnRleHRJZCA9IG5leHRDb250ZXh0SWQoKTsKKyAgICAgICAgbV92aWRl
b0VsZW1lbnRzLnNldCh2aWRlb0VsZW1lbnQsIGNvbnRleHRJZCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQodmlkZW9FbGVtZW50KTsKIAotICAg
IGlmIChtX2lzQW5pbWF0aW5nKQotICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVs
LCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAg
IGludGVyZmFjZS0+c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKHRydWUpOworICAgIGludGVyZmFjZS0+
c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCh2aWRl
b0VsZW1lbnQpOwogCi0gICAgbV9pc0FuaW1hdGluZyA9IHRydWU7Ci0gICAgc2V0VmlkZW9FbGVt
ZW50KHZpZGVvRWxlbWVudCk7CisgICAgaWYgKGludGVyZmFjZS0+aXNBbmltYXRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7CiAKLSAg
ICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JF
eHRlcm5hbEhvc3RpbmdQcm9jZXNzKCk7Ci0gICAgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3Jl
ZW4gPSBtX3ZpZGVvRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkuYWxsb3dzQWx0ZXJuYXRlRnVsbHNj
cmVlbigqbV92aWRlb0VsZW1lbnQuZ2V0KCkpOworICAgIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxs
c2NyZWVuID0gdmlkZW9FbGVtZW50LT5tZWRpYVNlc3Npb24oKS5hbGxvd3NBbHRlcm5hdGVGdWxs
c2NyZWVuKCp2aWRlb0VsZW1lbnQpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQobV9s
YXllckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvckVsZW1lbnQodmlk
ZW9FbGVtZW50KSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBtX2Z1bGxzY3JlZW5Nb2Rl
LCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBG
dWxsc2NyZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0
KCktPmNvbnRleHRJRCgpLCBjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRlb0VsZW1lbnQpLCBtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKSwgYWxs
b3dPcHRpbWl6ZWRGdWxsc2NyZWVuKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KikKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+
IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVtZW50LnJlbGVhc2UoKTsKLSAgICBtX3RhcmdldElz
RnVsbHNjcmVlbiA9IGZhbHNlOworICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMo
dmlkZW9FbGVtZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVu
dHMuZ2V0KHZpZGVvRWxlbWVudCk7CisgICAgYXV0byBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZh
Y2UoY29udGV4dElkKTsKIAotICAgIGlmIChtX2lzQW5pbWF0aW5nKQorICAgIGludGVyZmFjZS0+
c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKworICAgIGlmIChpbnRlcmZhY2UtPmlzQW5p
bWF0aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faXNBbmltYXRpbmcgPSB0cnVlOwot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRlb0VsZW1lbnQuZ2V0KCkp
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVl
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4dElkLCBjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRl
b0VsZW1lbnQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKCkKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDoKKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpS
ZXNldE1lZGlhU3RhdGUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZShj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXREdXJhdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSBkdXJhdGlvbikKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6U2V0RHVyYXRpb24oZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6U2V0RHVyYXRpb24oY29udGV4dElkLCBkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEN1cnJlbnRUaW1lKGRv
dWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OnNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1
cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0Q3VycmVudFRpbWUoY3VycmVu
dFRpbWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0Q3VycmVudFRpbWUo
Y29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEJ1ZmZlcmVkVGltZShkb3Vi
bGUgYnVmZmVyZWRUaW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRCdWZm
ZXJlZFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQogewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpT
ZXRCdWZmZXJlZFRpbWUoYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEJ1
ZmZlcmVkVGltZShjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFJhdGUoYm9vbCBpc1BsYXlp
bmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
c2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFj
a1JhdGUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OlNldFJhdGUoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6U2V0UmF0ZShjb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
c2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvRGltZW5zaW9ucyh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhoYXNWaWRlbywgd2lkdGgsIGhlaWdodCksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29udGV4dElkLCBoYXNWaWRl
bywgd2lkdGgsIGhlaWdodCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogICAgIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBXZWJDb3JlOjpU
aW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpz
ZXRTZWVrYWJsZVJhbmdlcyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVS
YW5nZXMmIHRpbWVSYW5nZXMpCiB7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJs
ZT4+IHJhbmdlc1ZlY3RvcjsKICAgICAKQEAgLTE2MCwzMCArMzAyLDEwNCBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFdlYkNvcmU6OlRp
bWVSYW5nZXMmIHRpbQogICAgICAgICByYW5nZXNWZWN0b3IuYXBwZW5kKHN0ZDo6cGFpcjxkb3Vi
bGUsZG91YmxlPihzdGFydCwgZW5kKSk7CiAgICAgfQogCi0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFNlZWthYmxlUmFuZ2VzVmVj
dG9yKFdURjo6bW92ZShyYW5nZXNWZWN0b3IpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFNl
ZWthYmxlUmFuZ2VzVmVjdG9yKGNvbnRleHRJZCwgV1RGOjptb3ZlKHJhbmdlc1ZlY3RvcikpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpz
ZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCB2YWx1ZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
YWx1ZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6U2V0Q2FuUGxheUZhc3RSZXZlcnNlKHZhbHVlKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OlNldENhblBsYXlGYXN0UmV2ZXJzZShjb250ZXh0SWQsIHZhbHVlKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEF1ZGlv
TWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6U2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29udGV4dElkLCBvcHRp
b25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25z
KG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0TGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpzZXRFeHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcgbG9j
YWxpemVkRGV2aWNlTmFtZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RXh0
ZXJuYWxQbGF5YmFjayh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBl
LCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0RXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXMoZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRhcmdldFR5cGUpLCBsb2Nh
bGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEV4dGVybmFsUGxheWJh
Y2tQcm9wZXJ0aWVzKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRh
cmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0g
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbigp
CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eToKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90IGNv
bnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLT5wbGF5KCk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQor
eworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCktPnBhdXNlKCk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLT50b2dnbGVQbGF5U3RhdGUoKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS0+YmVnaW5TY3J1YmJpbmco
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbmRTY3J1YmJpbmcodWlu
dDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCktPmVuZFNjcnVi
YmluZygpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNlZWtUb1RpbWUo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLT5zZWVrVG9UaW1lKHRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAg
ZW5zdXJlTW9kZWwoY29udGV4dElkKS0+ZmFzdFNlZWsodGltZSk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4
dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCktPmJlZ2luU2Nhbm5pbmdGb3J3YXJk
KCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0Jh
Y2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LT5iZWdpblNjYW5uaW5nQmFja3dhcmQoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS0+ZW5kU2Nhbm5pbmcoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorewor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCktPnJlcXVlc3RFeGl0RnVsbHNjcmVlbigpOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24o
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQp
LT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxs
c2NyZWVuTW9kZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLT5mdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdl
cyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAg
ICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwogI2lmbmRlZiBO
REVCVUcKQEAgLTIwMCw4MyArNDE2LDExMSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmRpZFNldHVwRnVsbHNjcmVlbigpCiAgICAgLy8gVGhpcyBzY2FsZSBmYWN0b3IgaXMgaW52
ZXJ0ZWQgaW4gdGhlIGhvc3RpbmcgcHJvY2Vzcy4KICAgICBmbG9hdCBob3N0aW5nU2NhbGVGYWN0
b3IgPSBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgW3ZpZGVvTGF5ZXIgc2V0VHJh
bnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaG9zdGluZ1NjYWxlRmFjdG9yLCBob3N0aW5n
U2NhbGVGYWN0b3IsIDEpXTsKLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RMYXll
cih2aWRlb0xheWVyKTsKIAotICAgIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIp
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+
c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5M
YXllcih2aWRlb0xheWVyKTsKKwogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiAKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RW50
ZXJGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxzY3JlZW4oY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbigpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAg
bV9pc0FuaW1hdGluZyA9IGZhbHNlOwotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7CisgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAg
IHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29u
dGV4dElkKTsKIAotICAgIGlmIChtX3RhcmdldElzRnVsbHNjcmVlbikKKyAgICBpbnRlcmZhY2Ut
PnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVlbihm
YWxzZSk7CisKKyAgICBpZiAoaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlv
dXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBX
ZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGV4aXRWaWRlb0Z1bGxzY3JlZW4oKTsKLSAgICAgICAg
cHJvdGVjdC5jbGVhcigpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBz
dHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgbW9kZWxdIHsK
KyAgICAgICAgc3Ryb25nVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCht
b2RlbC0+dmlkZW9FbGVtZW50KCkpOwogICAgIH0pOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIHNl
dFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7Ci0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
KworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwogCi0gICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKG1fbGF5
ZXJIb3N0aW5nQ29udGV4dCkgewotICAgICAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0LT5z
ZXRSb290TGF5ZXIobnVsbHB0cik7Ci0gICAgICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQg
PSBudWxscHRyOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtzdHJvbmdUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAgICAgICBpZiAoaW50ZXJm
YWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIGludGVyZmFjZS0+bGF5
ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIobnVsbHB0cik7CisgICAgICAgICAgICBp
bnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG1fcGFnZSkKLSAgICAgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbigpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgICAgICBpZiAoc3Ryb25n
VGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFudXBGdWxsc2NyZWVuKGNv
bnRleHRJZCksIHN0cm9uZ1RoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOwogICAgIH0pOwogfQogICAg
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbigp
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX2lzQW5pbWF0aW5nID0gZmFsc2U7Ci0gICAgbV9p
c0Z1bGxzY3JlZW4gPSBmYWxzZTsKLSAgICAKLSAgICBzZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7
Ci0KLSAgICBpZiAoIW1fdGFyZ2V0SXNGdWxsc2NyZWVuKQorICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwg
aW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBp
bnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNldElzRnVs
bHNjcmVlbihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOworCisgICAgbW9kZWwtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZp
ZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKworICAgIGlmICghaW50ZXJmYWNl
LT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkgeworICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50
KG51bGxwdHIpOworICAgICAgICBtb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
KG51bGxwdHIpOworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV92
aWRlb0VsZW1lbnRzLnJlbW92ZSh2aWRlb0VsZW1lbnQuZ2V0KCkpOworICAgICAgICBtX2NvbnRl
eHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAv
LyBlbnRlciBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgZHVy
aW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXiB7Ci0g
ICAgICAgIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KG1fdmlkZW9FbGVtZW50
LmdldCgpLCBtX2Z1bGxzY3JlZW5Nb2RlKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAg
IC8vIGV4aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1
cmluZyBhbiBhbmltYXRpb24uCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+
IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB2aWRlb0Vs
ZW1lbnQsIG1vZGVdIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50LmdldCgpLCBtb2RlKTsKICAgICB9KTsKIH0KICAg
ICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlF
bnVtKHVuc2lnbmVkIGdyYXZpdHkpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNl
dFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZp
dHkpCiB7Ci0gICAgc2V0VmlkZW9MYXllckdyYXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
OjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS0+c2V0
VmlkZW9MYXllckdyYXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkp
Z3Jhdml0eSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZShib29sIGlzUGFnZVZpc2libGUpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKIHsKKyAgICBhdXRvIG1vZGVsID0gZW5zdXJl
TW9kZWwoY29udGV4dElkKTsKKwogICAgIGlmICghaXNQYWdlVmlzaWJsZSkKLSAgICAgICAgbV92
aWRlb0VsZW1lbnQtPnNjcm9sbEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNlKTsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UHJlcGFy
ZWRUb1JldHVyblRvSW5saW5lKHRydWUsIGNsaWVudFJlY3RGb3JFbGVtZW50KG1fdmlkZW9FbGVt
ZW50LmdldCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICBtb2RlbC0+dmlkZW9FbGVt
ZW50KCktPnNjcm9sbEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNlKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UHJlcGFyZWRUb1Jl
dHVyblRvSW5saW5lKGNvbnRleHRJZCwgdHJ1ZSwgY2xpZW50UmVjdEZvckVsZW1lbnQobW9kZWwt
PnZpZGVvRWxlbWVudCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogICAgIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoV2ViQ29yZTo6
RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNl
UG9ydCkKIHsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOworCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAg
IFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAgIGlmIChtX2xheWVy
SG9zdGluZ0NvbnRleHQpCi0gICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0RmVuY2VQ
b3J0KGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIHNldFZpZGVvTGF5ZXJGcmFtZShib3VuZHMpOwor
ICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJm
YWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgp
KTsKKyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7CiAgICAgbWFjaF9wb3J0
X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7CiAgICAgW0NB
VHJhbnNhY3Rpb24gY29tbWl0XTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250741</attachid>
            <date>2015-04-14 14:39:04 -0700</date>
            <delta_ts>2015-04-15 12:45:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143680-20150414143808.patch</filename>
            <type>text/plain</type>
            <size>95402</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmIwYzhkMjg1MTIxNTNm
MDY5OWUwMGUwYWY2MGI5NjFiMjUyMGU3OS4uZDNhZDFlMzYxM2JkMzk1M2ExYWRmNTM3NTYwMzQy
MDg1MmQwNzgxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDE1LTA0LTEzICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0
YW5lb3VzbHkgZXhpdGluZy1hbmQtZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci9Qcm94eSBiZWNvbWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVu
dCBpdCByZXByZXNlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQzNjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIGdldHRlcnMgZm9yIHRoZSB2aWRlbydzIGZ1bGxzY3JlZW4gbGF5ZXIsIGFu
ZCBiZSBtb3JlIHRvbGVyYW50IGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCBzZXRWaWRlb0VsZW1l
bnQoKSBhbmQgCisgICAgICAgIHNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSBhcmUgY2Fs
bGVkLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp2aWRlb0Z1bGxzY3JlZW5MYXllcik6IEFkZGVkIHNpbXBs
ZSBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6dmlkZW9FbGVtZW50KTogQWRkZWQgc2ltcGxlIGdldHRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpOiBEZWxldGVkLiBNb3ZlZCB0byAubW0gZmlsZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW06CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQpOiBJbml0aWFsaXplIGl2YXJzIGluIHRo
ZSAuaCBmaWxlLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSk6IENhbGwgdGhvc2UgbWV0aG9kcyBza2lw
cGVkIGluIHNldFZpZGVvRWxlbWVudCgpCisgICAgICAgICAgICBpZiBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSBoYWQgbm90IHlldCBiZWVuIHNldC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOiBOdWxsLWNoZWNrIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9FbGVt
ZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQz
Njc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCBiMmU0NzcxMmNiMTM2ZmVkNTM1NTRhNTRhOTBjYmM0ZDA5YWY5
OTY1Li5mNTM1NTZiMjQwYzc5YTU4OTMyMGZiZTkzODNkNDM1NWY1YzY5MjBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsMjAwIEBACiAyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0YW5lb3VzbHkgZXhpdGluZy1hbmQt
ZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci9Qcm94eSBiZWNv
bWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVudCBpdCByZXByZXNlbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG9yaWdpbmFs
IGFzc3VtcHRpb24gb2YgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBhbmQgLVByb3h5IHdhcyB0
aGF0IHRoZSB0d28gY2xhc3NlcyB3b3VsZCByZXByZXNlbnQgYQorICAgICAgICBzaW5nbGUgdmlk
ZW8gZWxlbWVudCBhbmQgaXRzIGZ1bGwgc2NyZWVuIHN0YXRlLiBXaXRoIG11bHRpcGxlIGFuaW1h
dGlvbnMgaW4gYW5kIG91dCBvZiBmdWxsc2NyZWVuIGNvbWJpbmVkIHdpdGgKKyAgICAgICAgbXVs
dGlwbGUgZnVsbHNjcmVlbiBtb2RlcywgdGhpcyBhc3N1bXB0aW9uIG5vIGxvbmdlciBob2xkcyB0
cnVlLgorCisgICAgICAgIFJhdGhlciB0aGFuIGhhdmluZyBhIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIgd2hpY2ggL2lzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQsIHRo
ZSBtYW5hZ2VyIG5vdworICAgICAgICAvaGFzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQgKG9yIGhhcyBtYW55IHN1Y2ggbW9kZWxzKS4gRGl0dG8gZm9yIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgYW5kCisgICAgICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LiBUaGUgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgc3RpbGwgbmVlZHMgYSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB0bworICAgICAgICBjb21tdW5pY2F0ZSB3aXRoLCBzbyBh
IG5ldyB3cmFwcGVyIGNsYXNzIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0LiBEaXR0byBmb3IKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQgYW5kIHRoZSBuZXcgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dC4gVGhlc2UgY29udGV4dCBjbGFzc2VzCisgICAgICAgIGFyZSBwYWlyZWQg
YW5kIHNoYXJlIGEgY29udGV4dElkLCBhbGxvd2luZyB0aGUgbWFuYWdlciBhbmQgaXRzIHByb3h5
IHRvIHJvdXRlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIFVJUHJvY2VzcydzCisgICAgICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IHRvLWFuZC1mcm9tIHRoZSBXZWJQcm9jZXNzJ3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuCisKKyAgICAgICAgQm90aCB0aGUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCB0YWtlIGEgYmFjay1wb2ludGVyIHRvIHRoZWlyCisgICAgICAgIG1h
bmFnZXIgb3IgbWFuYWdlciBwcm94eSwgYW5kIGVhY2ggbWV0aG9kIG9uIHRoZSBjb250ZXh0IHNp
bXBseSBjYWxscyB0aGUgbWF0Y2hpbmcgbWV0aG9kIG9uIHRoZSBtYW5hZ2VyIGFuZAorICAgICAg
ICBwYXNzZXMgaXRzIGNvbnRleHRJZCBhcyBhIHBhcmFtZXRlci4KKworICAgICAgICBCb3RoIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IHBhc3MgdGhhdCBjb250ZXh0SWQgaW4gZWFjaCBvZiB0aGVpcgorICAgICAgICBj
cm9zcy1wcm9jZXNzIG1lc3NhZ2VzLgorCisgICAgICAgIE9uIHRoZSBvdGhlciBzaWRlLCB0aGUg
bWFuYWdlciBhbmQgcHJveHkgYWxzbyBoYXZlIGEgbWFwIGJldHdlZW4gY29udGV4dElkcyBhbmQg
dGhlaXIgbWF0Y2hpbmcKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQgKGluIHRoZSBjYXNlIG9mIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpIG9yCisgICAgICAg
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IChpbiB0aGUgY2FzZSBvZiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpLgorCisgICAgICAgIFdoaWxlIHRoaXMgY2hhbmdlIGlz
IGxhcmdlIGJ5IExvQywgaXQgaXMgYWxtb3N0IGVudGlyZWx5IGJvaWxlcnBsYXRlLiAgVGhlIG5l
dyBhbmQgaW50ZXJlc3RpbmcgcGllY2VzIGFyZSB0aGVzZToKKworICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSk6IE5vIGxvbmdlciBhIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRh
dGUpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50ZXJmYWNlcywgaW52YWxpZGF0aW5n
IGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gUmV0dXJuIGEgbmV3IG1vZGVsIGFuZCBp
bnRlcmZhY2UgdHVwbGUuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gTGF6aWx5IGNyZWF0ZSwg
YW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5ldyBtb2RlbCBhbmQg
aW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjplbnN1cmVNb2RlbCk6IFJldHVybiB0aGUgbW9kZWwgaGFsZiBvZiBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6IFJldHVybiB0aGUgaW50ZXJmYWNlIGhhbGYg
b2YgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOiBXYWxrIHRocm91Z2ggdGhl
IG91dHN0YW5kaW5nIGludGVyZmFjZSBvYmplY3RzLCBhbmQgaWYgCisgICAgICAgICAgICBhbnkg
aGF2ZSBhIGZ1bGxzY3JlZW4gbW9kZSB3aGljaCBtYXRjaGVzIHRoZSBhYm91dC10by1iZS1mdWxs
c2NyZWVuIGludGVyZmFjZSwgcmVxdWVzdCB0aGF0IHRoYXQgb3RoZXIgaW50ZXJmYWNlCisgICAg
ICAgICAgICBleGl0IGZ1bGxzY3JlZW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6bmV4dENvbnRleHRJZCk6
IFN0YXRpYywgaW5jcmVtZW50aW5nIGNvdW50ZXIgdXNlZCBhcyBhIGNvbnRleHRJZCBzb3VyY2Uu
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIpOiBObyBsb25nZXIgYSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50
ZXJmYWNlcywgaW52YWxpZGF0aW5nIGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKTogQWRkZWQuIFJldHVybiBh
IG5ldyBtb2RlbCBhbmQgaW50ZXJmYWNlIHR1cGxlLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6ICBBZGRlZC4gTGF6
aWx5IGNyZWF0ZSwgYW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5l
dyBtb2RlbCBhbmQgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwpOiBSZXR1cm4gdGhlIG1vZGVsIGhhbGYgb2Yg
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKTogUmV0dXJuIHRoZSBpbnRlcmZhY2UgaGFs
ZiBvZiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSgpLgorCisgICAgICAgIE5ldyBjbGFzc2VzIGFu
ZCBtZXRob2RzIHdoaWNoIGp1c3QgZm9yd2FyZCBvbiB0byB0aGVpciBvd25pbmcgb2JqZWN0czoK
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpsYXllckhvc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldExheWVySG9zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0SW5pdGlhbFZp
ZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpiZWdpblNj
cnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZW5k
U2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0Ojp2aWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpm
dWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
bGF5ZXJIb3N0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ6OmlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0SXNBbmltYXRpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp0YXJnZXRJc0Z1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRUYXJnZXRJc0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpmdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEZ1bGxzY3JlZW5Nb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
aXNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6c2V0SXNGdWxsc2NyZWVuKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMYXllckhvc3RpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEJ1ZmZlcmVkVGlt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldFJhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRTZWVrYWJsZVJhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldENhblBsYXlGYXN0
UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorCisgICAgICAgIENyb3NzLXByb2Nlc3Mg
bWV0aG9kcyB3aGljaCBub3cgdGFrZSBhIGNvbnRleHRJZCBwYXJhbWV0ZXI6CisKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXR1cEZ1bGxzY3JlZW5XaXRoSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEJ1ZmZlcmVkVGltZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9E
aW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRBdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRSYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lu
bGluZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWspOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpi
ZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0
VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJGcmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dmlk
ZW9MYXllckdyYXZpdHkpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEJ1ZmZlcmVkVGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldENhblBs
YXlGYXN0UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEV4dGVybmFs
UGxheWJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpw
bGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1c2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp0b2dnbGVQbGF5
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdp
blNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2Vs
ZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVh
bnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4pOiBEZWxldGVkLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4
aXRWaWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9F
bGVtZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzNjc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggNDUyYzM0
M2YwYTg1OGQ5YWE3MGU5Yzc0MDk5OTZkNGE3Njg5MTRiMy4uMTQwOWU2YjBiNjA3NDExMWU2MWNi
OTFhNjM3NTM2OWQ2NmExYzFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKQEAgLTEyOCw2ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0Z1
bGxzY3JlZW5MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCk7IH0KICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZsb2F0UmVjdCk7CiAgICAg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkp
OwogICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9GdWxsc2NyZWVuR3Jhdml0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuR3Jhdml0eTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJB
VktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0KaW5kZXggM2Y4NTVkMGYxMmI0MDY0OWE5NmZiNmFmZTk4OTY2ZTEx
YTNhNThiMy4uN2E1MzczNzYyOTE5MGVkNGQ3MGI2NDIxYjI5NGY0ZmY2NTNmZDE3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC0xMjUsOSArMTI1LDkgQEAgcHVibGljOgog
ewogICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxlYXNlIGluIGRpZEV4aXRG
dWxsc2NyZWVuOgogICAgIAotICAgIF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOworICAgIF9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7Ci0gICAgX21vZGVs
ID0gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKKyAg
ICBfbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7
CiAgICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoX2ludGVyZmFjZS5n
ZXQoKSk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoX21vZGVs
LmdldCgpKTsKICAgICBfbW9kZWwtPnNldFZpZGVvRWxlbWVudChfdmlkZW9FbGVtZW50LmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5kZXggODQ3M2Y2YjA0NDI0Yjk0N2Q4Nzk1
Yzc3MjdmOTg2MTAyYmVhNTJjYi4uYTUzMTI5Njc4MWVhODdiNzc4YjliMGU1ZDlkYjUxOTYwM2Zh
ODg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKQEAgLTY4LDcgKzY4LDcgQEAgY2xh
c3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQKICAgICAs
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gewogCiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKTsKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KCkpOyB9CiAgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKSB7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAg
ICBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KICAgICB2b2lkIHNldElzT3B0aW1pemVkKGJvb2wpOwotICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgp
IGNvbnN0OwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHN0ZDo6ZnVuY3Rp
b248dm9pZChib29sKT4gY2FsbGJhY2spOwogCiAgICAgdm9pZCB3aWxsU3RhcnRPcHRpbWl6ZWRG
dWxsc2NyZWVuKCk7CkBAIC0xMDYsNyArMTA2LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENh
bmNlbE9wdGltaXplZEZ1bGxzY3JlZW4oKTsKICAgICB2b2lkIHByZXBhcmVGb3JPcHRpbWl6ZWRG
dWxsc2NyZWVuU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7CiAKKyAg
ICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisg
ICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7
CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4g
bV9tb2RlID09IG1vZGU7IH0KKwogcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCk7CiAgICAgdm9pZCBiZWdpblNlc3Npb24oKTsK
ICAgICB2b2lkIHNldHVwRnVsbHNjcmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXImLCBjb25zdCBJ
bnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKICAgICB2b2lkIGVu
dGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOwpAQCAtMTE0LDExICsxMjAsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IEludFJlY3QmIGZpbmFsUmVj
dCk7CiAgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CiAKLSAgICB2b2lkIHNl
dE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgYm9v
bCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29u
c3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09
IG1vZGU7IH0KLQogICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVy
Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5
ZXJWaWV3Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92aWRlb0xheWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCmluZGV4IDI5MzhlYTg3ODkxM2YxZTIzZDQ1OTBl
ZWFiYzgyYzEyODFiOGNhZjkuLjgwOTEwOWFjZmQ1ZTBkNzMwOTQyNzYzYzM3ZGFmYzEwMmFlNjQ3
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KQEAgLTExNzUsNyArMTE3NSw3IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5U
b0lubGluZShib29sIHZpc2libGUsIGNvCiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQo
KQorYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb09wdGltaXplZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX3BsYXllckNvbnRy
b2xsZXIgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxs
c2NyZWVuTW9kZVN0YW5kYXJkICYmIHdrSXNPcHRpbWl6ZWRGdWxsc2NyZWVuU3VwcG9ydGVkKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmluZGV4IDU5OWE3NGEzYTc5NmQx
NTE1NDI3MjViZTc2ZGEyMzlkMDY2ODc4YzkuLmVjNTRhOWY4MTY5MzY1MTU4MThmMGRkNjQzZmY2
Zjg3MmUwNGFhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCkBAIC00NSwx
MCArNDUsMTEgQEAgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwogCiBjbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgc3RhdGlj
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgp
KTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50KCk7Ci0gICAgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSA9IGludGVyZmFjZTt9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCop
OworICAgIFdFQkNPUkVfRVhQT1JUIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsMTQgKzc2
LDE3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09S
RV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKwogcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2ZWRF
dmVudE5hbWVzKCk7CiAgICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFsbCgp
OwogICAgIAogICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAg
ICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKLSAgICBi
b29sIG1faXNMaXN0ZW5pbmc7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9
OworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UgeyBudWxscHRyIH07CiAgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKICAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CiAgICAgVmVjdG9y
PFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0KaW5kZXggNjlmN2JkYTYyYjY0NDA3MjZjZjQ3M2ZhOWQ5OThm
YzM1MzBkZmUwNS4uMTFlZDY2MzlmNDBlZWIzZGE2MWU0MjVlNTM5NjI2M2Q3MzM5NDE0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtNTMsOCArNTMsNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKICAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlz
dGVuaW5nKGZhbHNlKQotICAgICwgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cikK
IHsKIH0KIApAQCAtNjIsNiArNjAsMjAgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiB7CiB9CiAKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZShXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UqIGludGVyZmFjZSkKK3sK
KyAgICBpZiAoaW50ZXJmYWNlID09IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFjZTsK
KworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkgeworICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+cmVzZXRNZWRpYVN0YXRlKCk7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRW
aWRlb0RpbWVuc2lvbnModHJ1ZSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwgbV92aWRl
b0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOworICAgIH0KK30KKwogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCkKIHsKICAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50
KQpAQCAtNjksNyArODEsMTMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGUKIAogICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UtPnJlc2V0TWVkaWFTdGF0ZSgpOwotICAgIAorCisgICAgaWYgKG1fdmlkZW9FbGVtZW50
ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpKQorICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVOb25lKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVu
dC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOworCiAgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYm
IG1faXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVk
RXZlbnROYW1lcygpKQogICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CkBAIC04Nyw3ICsxMDUsOCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCogdmlkZQogCiAgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgp
KTsKIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMo
dHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWln
aHQoKSk7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNpb25zKHRydWUsIHZpZGVvRWxl
bWVudC0+dmlkZW9XaWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOwogfQogCiB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCA0
NTAzNjViOTlhNDg0MWY4YTUyYjQzMmE3NTNlODMxNTgyZTQzMzU3Li4wZjQ0NWJjNmFhN2JmMjc0
Y2Q0MzhmNjI0NGZhODQ5MjkxYmYzZTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRpYyBpbnQz
Ml90IGRldmljZU9yaWVudGF0aW9uKCkKICAgICBpZiAoIV9wYWdlIHx8ICFfcGFnZS0+dmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0
dXJuIF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPm1vZGUoKSAmIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQ7CisgICAgcmV0dXJu
IF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPmhhc01vZGUoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7CiB9CiAKIC0gKEJPT0wp
X21heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oCmluZGV4IGQ5ZTY1Y2U5MzM4YmY4YzM1YTMxMDY0ODBjOWNjNmEyYTIyNDc1MTYuLmI0OThh
ZThlNWJhODdmMmIyNDEzYWVmOGM0NmJhMWZlNDc2NWRlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaApAQCAtNDEsMzQgKzQxLDMxIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDog
cHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LCBwdWJsaWMg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIsIHB1YmxpYyBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7Ci0gICAgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisgICAgc3RhdGljIFJlZjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5h
Z2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
KyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIAotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUxheWVyKiBs
YXllckhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdC5nZXQoKTsgfQorICAgIHZvaWQg
c2V0TGF5ZXJIb3N0KFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiYmIGxheWVySG9zdCkgeyBtX2xh
eWVySG9zdCA9IFdURjo6bW92ZShsYXllckhvc3QpOyB9CiAKLSAgICAvLyBUcmFuc2xhdGUgdG8g
RnVsbHNjcmVlbkludGVyZmFjZQotICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQz
Ml90LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0Rl
dmljZVNjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7Ci0gICAgdm9pZCBzZXRTZWVr
YWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4m
KTsKLSAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKGJvb2wgZW5hYmxlZCwg
dWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwotICAgIHZv
aWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5s
aW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5saW5lUmVjdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRJbml0aWFsVmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0
UmVjdCBmcmFtZSkgeyBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1lOyB9CiAKLSAgICAvLyBGdWxs
c2NyZWVuIE9ic2VydmVyCi0gICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgLy8g
RnVsbHNjcmVlbk1vZGVsCitwcml2YXRlOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAgICAgICwgbV9jb250
ZXh0SWQoY29udGV4dElkKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbAogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgp
IG92ZXJyaWRlOwpAQCAtNzksMTggKzc2LDk3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2lu
U2Nhbm5pbmdCYWNrd2FyZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbmRTY2Fubmlu
ZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZs
b2F0UmVjdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlkZW9M
YXllckZyYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dy
YXZpdHkpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgVmlkZW9HcmF2aXR5IHZpZGVvTGF5ZXJHcmF2
aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSkgb3ZlcnJpZGU7CiAKLSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAgICAvLyBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1
bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOwor
CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgdWlu
dDY0X3QgbV9jb250ZXh0SWQ7CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fbGF5ZXJI
b3N0OwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3ZpZGVvTGF5ZXJGcmFtZTsKICAgICBWaWRl
b0dyYXZpdHkgbV92aWRlb0xheWVyR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSB9OwogfTsK
KworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVhbCB+V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsK
KworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIGJvb2wgaGFz
TW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25z
dDsKKyAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OworCisgICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBh
Z2VQcm94eSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0JiBlbnN1cmVJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcgorICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0
aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7
CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgaG9zdFRpbWUpOworICAgIHZvaWQgc2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMo
dWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNlZWthYmxlUmFuZ2VzVmVjdG9yKHVpbnQ2NF90IGNv
bnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcyk7CisgICAg
dm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVl
KTsKKyAgICB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Cisg
ICAgdm9pZCBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAg
dm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgIHZvaWQgc2V0RHVyYXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVy
YXRpb24pOworICAgIHZvaWQgc2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5
aW5nLCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0
KTsKKworICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICB2
b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBl
bmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJk
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIHNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsK
KyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1
cGxlPiBtX2NvbnRleHRNYXA7CisKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgppbmRleCA3NDYwNDAy
OTUzZGEwYzM3YjBmZmQ2Njg4ZDIxMzdhYmRkNmU3MjQ1Li5hNGU3YzI3YThlM2JjMjEyODNlNDUx
MzhlYTgyNDc2ZWQ3MDYzYTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMjIsMjEgKzIyLDIxIEBACiAKICNpZiBQTEFURk9STShJT1MpCiBtZXNz
YWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewotICAgIFJlc2V0TWVkaWFT
dGF0ZSgpCi0gICAgU2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9z
dFRpbWUpCi0gICAgU2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCi0gICAgU2V0
VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpCi0gICAgU2V0U2Vla2FibGVSYW5nZXNWZWN0b3IoVmVjdG9yPHN0ZDo6cGFpcjxkb3Vi
bGUsIGRvdWJsZT4+IHJhbmdlcyk7Ci0gICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFs
dWUpOwotICAgIFNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKFZlY3RvcjxTdHJpbmc+IG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIFNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgU2V0RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXMoYm9vbCBlbmFibGVkLCB1aW50
MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgU2V0RHVy
YXRpb24oZG91YmxlIGR1cmF0aW9uKQotICAgIFNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGRvdWJs
ZSByYXRlKQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50MzJfdCB2aWRlb0xheWVySUQs
IFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3Rvciwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKLSAgICBFbnRlckZ1bGxz
Y3JlZW4oKQotICAgIEV4aXRGdWxsc2NyZWVuKFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQot
ICAgIENsZWFudXBGdWxsc2NyZWVuKCkKLSAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9v
bCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCisgICAgUmVzZXRNZWRpYVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQorICAgIFNldEJ1ZmZl
cmVkVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCisgICAgU2V0
VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICBTZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcih1
aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5n
ZXMpCisgICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
YWx1ZSkKKyAgICBTZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAg
U2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgU2V0RXh0ZXJu
YWxQbGF5YmFja1Byb3BlcnRpZXModWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVp
bnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQorICAgIFNldER1
cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQorICAgIFNldFJhdGUo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCisgICAgU2V0
dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXll
cklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0
b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCisgICAgRW50ZXJG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQorICAgIENsZWFudXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5l
UmVjdCkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQppbmRleCAwZmVlNzQz
MGY5ZjExZDJiN2RiMTAzMDEyZmQwOWZiYWU0YWIwMDA1Li44OTE3NDFhMzMyYzRjYWUzYTgzNTM0
M2VlMTJkYTdjNDQ0YjZjZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtNTUs
NiArNTUsMTQ4IEBAIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0CiAKICNlbHNlCiAKKyNwcmFnbWEg
bWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6cGxheSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5wbGF5KG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnBhdXNlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPnBhdXNlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQbGF5U3RhdGUobV9jb250ZXh0SWQpOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY3J1YmJpbmco
bV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUg
dGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVr
KG1fY29udGV4dElkLCB0aW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5u
aW5nQmFja3dhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RFeGl0RnVsbHNjcmVlbiht
X2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpz
ZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQoreworICAgIG1fdmlk
ZW9MYXllckZyYW1lID0gZnJhbWU7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRWaWRlb0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKK30KKworV2ViQ29y
ZTo6RmxvYXRSZWN0IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dmlkZW9MYXllckZy
YW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWRlb0xheWVyRnJhbWU7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7Cisg
ICAgbV92aWRlb0xheWVyR3Jhdml0eSA9IGdyYXZpdHk7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xheWVyR3Jhdml0eShtX2NvbnRleHRJZCwgZ3Jhdml0
eSk7Cit9CisKK1dlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyR3Jhdml0eSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdmlkZW9MYXllckdyYXZpdHk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9w
dGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0
QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IG9wdGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKG1fY29udGV4dElkLCBtb2RlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNj
cmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAg
bV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVl
bihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQoreworICAgIGlmIChtX21hbmFnZXIpCisg
ICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElk
KTsKK30KKworI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisK
IFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSkpOwpA
QCAtNjQsOCArMjA2LDYgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWcKICAgICA6IG1fcGFnZSgm
cGFnZSkKIHsKICAgICBtX3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwodGhpcyk7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7
CiB9CiAKIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6fldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSgpCkBAIC03NywzNyArMjE3LDExNyBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQogCiB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKTsKLQogICAgIG1fcGFnZS0+
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogICAgIG1fcGFnZSA9IG51bGxwdHI7CiAKLSAgICBbbV9sYXllckhvc3QgcmVtb3ZlRnJvbVN1
cGVybGF5ZXJdOwotICAgIG1fbGF5ZXJIb3N0LmNsZWFyKCk7CisgICAgZm9yIChhdXRvJiB0dXBs
ZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBhdXRvJiBtb2RlbCA9IHN0ZDo6
Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgYXV0byYgaW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4odHVw
bGUpOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgICAgICBbbW9kZWwt
PmxheWVySG9zdCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbW9kZWwtPnNldExh
eWVySG9zdChudWxscHRyKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW4oKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFs
dWVzKCkpCisgICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpOworfQorCitib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Cit7
CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAg
ICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50MzJfdCB2aWRl
b0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0
aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCiti
b29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dW
aWRlb09wdGltaXplZCgpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4
dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5tYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVm
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKKyAgICBSZWY8V2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZSA9IFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKTsKKworICAgIGludGVyZmFjZS0+c2V0
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKKyAgICBpbnRlcmZhY2UtPnNl
dFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURjo6bW92ZShtb2RlbCksIFdURjo6bW92ZShpbnRlcmZh
Y2UpKTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFj
ZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29u
dGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOworICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpKTsKK30KKworV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJv
bSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50
MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBm
bG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxz
Y3JlZW4pCiB7CiAgICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7Ci0gICAgbV9sYXllckhvc3QgPSBX
S01ha2VSZW5kZXJMYXllcih2aWRlb0xheWVySUQpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlOworCisgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAg
bW9kZWwtPnNldEluaXRpYWxWaWRlb0xheWVyRnJhbWUoaW5pdGlhbFJlY3QpOworICAgIG1vZGVs
LT5zZXRMYXllckhvc3QoV0tNYWtlUmVuZGVyTGF5ZXIodmlkZW9MYXllcklEKSk7CiAgICAgaWYg
KGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciAhPSAxKSB7CiAgICAgICAgIC8vIEludmVydCB0aGUg
c2NhbGUgdHJhbnNmb3JtIGFkZGVkIGluIHRoZSBXZWJQcm9jZXNzIHRvIGZpeCA8cmRhcjovL3By
b2JsZW0vMTgzMTY1NDI+LgogICAgICAgICBmbG9hdCBpbnZlcnNlU2NhbGUgPSAxIC8gaG9zdGlu
Z0RldmljZVNjYWxlRmFjdG9yOwotICAgICAgICBbbV9sYXllckhvc3Qgc2V0VHJhbnNmb3JtOkNB
VHJhbnNmb3JtM0RNYWtlU2NhbGUoaW52ZXJzZVNjYWxlLCBpbnZlcnNlU2NhbGUsIDEpXTsKKyAg
ICAgICAgW21vZGVsLT5sYXllckhvc3QoKSBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VT
Y2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwgMSldOwogICAgIH0KIAotICAgIG1fdmlk
ZW9MYXllckZyYW1lID0gaW5pdGlhbFJlY3Q7Ci0KICAgICBVSVZpZXcgKnBhcmVudFZpZXcgPSBk
b3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9wYWdlLT5kcmF3aW5n
QXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7Ci0gICAgc2V0dXBGdWxs
c2NyZWVuKCptX2xheWVySG9zdC5nZXQoKSwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIHZpZGVv
RnVsbHNjcmVlbk1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CisgICAgaW50ZXJmYWNl
LT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3QoKSwgaW5pdGlhbFJlY3QsIHBhcmVu
dFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CiB9
Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSh1aW50
NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQobW9kZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0ZSgp
OwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFNlZWth
YmxlUmFuZ2VzVmVjdG9yKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiYg
cmFuZ2VzKQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q3VycmVu
dFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0
VGltZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRDdXJyZW50VGltZShj
dXJyZW50VGltZSwgaG9zdFRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZl
cmVkVGltZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRCdWZmZXJlZFRp
bWUoYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8s
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkuc2V0VmlkZW9EaW1lbnNpb25zKGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFNlZWthYmxlUmFu
Z2VzVmVjdG9yKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRv
dWJsZT4+IHJhbmdlcykKIHsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRp
bWVSYW5nZXM6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMp
CkBAIC0xMTgsMTE4ICszMzgsMTY0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpwCiAgICAgICAg
IHRpbWVSYW5nZXMtPmFkZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKICAgICB9CiAKLSAg
ICBzZXRTZWVrYWJsZVJhbmdlcygqdGltZVJhbmdlcyk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkuc2V0U2Vla2FibGVSYW5nZXMoKnRpbWVSYW5nZXMpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KS5zZXRDYW5QbGF5RmFzdFJldmVyc2UodmFsdWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnModWludDY0X3Qg
Y29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldEF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuc2V0TGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVz
KGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmlj
ZU5hbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RXh0ZXJuYWxQ
bGF5YmFja1Byb3BlcnRpZXModWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQz
Ml90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQogewogICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9
IHN0YXRpY19jYXN0PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGU+KHRhcmdldFR5cGUpOwotICAgIAogICAgIEFTU0VSVCh0eXBlID09IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZUFpclBsYXkgfHwgdHlwZSA9PSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZU5vbmUpOwogICAgIAotICAgIHNldEV4
dGVybmFsUGxheWJhY2soZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuc2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0
eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RHVyYXRpb24odWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgYm9vbCBpc1ZpZXdWaXNpYmxlID0gbV9wYWdl
LT5pc1ZpZXdWaXNpYmxlKCk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoaXNWaWV3VmlzaWJs
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBpbmxpbmVSZWN0KQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6c2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBk
b3VibGUgcmF0ZSkKIHsKLSAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgp
OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuc2V0UmF0ZShpc1BsYXlpbmcsIHJhdGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6UmVxdWVzdEV4aXRGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGF1dG8m
IGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOworICAgIGludGVyZmFjZS5l
bnRlckZ1bGxzY3JlZW4oKTsKKworICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEg
Z2l2ZW4gZnVsbCBzY3JlZW4gbW9kZSBhdCBhIHRpbWU6CisgICAgZm9yIChhdXRvJiBjb250ZXh0
UGFpciA6IG1fY29udGV4dE1hcCkgeworICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNv
bnRleHRQYWlyLmtleTsKKyAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0g
c3RkOjpnZXQ8MT4oY29udGV4dFBhaXIudmFsdWUpOworICAgICAgICBpZiAob3RoZXJJbnRlcmZh
Y2UtPmhhc01vZGUoaW50ZXJmYWNlLm1vZGUoKSkpCisgICAgICAgICAgICBvdGhlckludGVyZmFj
ZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIH0KIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7CiB9
Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1
bGxzY3JlZW4oKQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIFtDQVRyYW5zYWN0aW9uIGZs
dXNoXTsKLSAgICBbbV9sYXllckhvc3QgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIG1fbGF5
ZXJIb3N0LmNsZWFyKCk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVsbHNjcmVlbigpOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVu
KCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJl
Y3QgaW5saW5lUmVjdCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisgICAgZW5zdXJl
SW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlu
bGluZVJlY3QpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RW50ZXJGdWxsc2NyZWVuKCkKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwbGF5
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLSAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnBsYXkoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBhdXNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OlBsYXkoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpQYXVzZShjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpwYXVzZSgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Ojp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UGF1c2UoKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CiB9Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxh
eVN0YXRlKCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZSgpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OkJlZ2luU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQot
ICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5n
KCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1
aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjcnViYmluZygpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkVu
ZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZygpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSB0aW1lKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6RW5kU2NydWJiaW5nKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2Vla1RvVGltZShj
b250ZXh0SWQsIHRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OlNlZWtUb1RpbWUodGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RmFzdFNlZWso
Y29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBj
b250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpGYXN0U2Vlayh0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjYW5uaW5n
Rm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0
X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpC
ZWdpblNjYW5uaW5nQmFja3dhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dh
cmQoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OkVuZFNjYW5uaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcoKQordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpFbmRTY2FubmluZygpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVlc3RFeGl0
RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotRmxvYXRSZWN0
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dmlkZW9MYXllckZyYW1lKCkgY29uc3QK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQogewotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJGcmFtZTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNl
dHVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3Jl
OjpGbG9hdFJlY3QgZnJhbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4o
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNj
cmVlbigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbihjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVl
bigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8mIG1vZGVsID0gZW5z
dXJlTW9kZWwoY29udGV4dElkKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKKyAgICBb
bW9kZWwubGF5ZXJIb3N0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIG1vZGVsLnNldExh
eWVySG9zdChudWxscHRyKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOworCisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQogewotICAgIG1fdmlk
ZW9MYXllckZyYW1lID0gZnJhbWU7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAjaWYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiA5MDAwMAogICAgICAgICBCS1NBbmltYXRpb25G
ZW5jZUhhbmRsZSogc3luY2hyb25pemF0aW9uRmVuY2UgPSBbVUlXaW5kb3cgX3N5bmNocm9uaXpl
ZERyYXdpbmdGZW5jZV07CkBAIC0yMzgsMzAgKzUwNCwzNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBm
cmFtZQogICAgICAgICBtYWNoX3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3lu
Y2hyb25pemVEcmF3aW5nQWNyb3NzUHJvY2Vzc2VzXTsKICNlbmRpZgogCi0gICAgICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXll
ckZyYW1lRmVuY2VkKGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19U
WVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVG
ZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFDSF9N
U0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgfQogfQogCi1XZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6dmlkZW9MYXllckdyYXZpdHkoKSBjb25zdAordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBn
cmF2aXR5KQogewotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJHcmF2aXR5OworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXllckdy
YXZpdHlFbnVtKGNvbnRleHRJZCwgKHVuc2lnbmVkKWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkg
Z3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RBdWRp
b01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCiB7Ci0gICAg
bV92aWRlb0xheWVyR3Jhdml0eSA9IGdyYXZpdHk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oKHVu
c2lnbmVkKWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24o
Y29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0
X3QgaW5kZXgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNl
bGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNlbGVjdExlZ2li
bGVNZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0g
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTW9kZUNo
YW5nZWQoY29udGV4dElkLCBtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkKQoreworICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+
aXNWaWV3VmlzaWJsZSgpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNW
aWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCiAjZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKaW5kZXggZDEyODg2YmZiNDliYjA2OGM4Njdl
NzNhYjg1MmYwYTNkNzViYTg2Mi4uNTY5OTg1MzIzZmYwODNmZDc2MjJjZGEwYzIyY2ZmMmYwMjA1
MTczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNTEsNTMgKzUy
LDEyMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsK
IGNsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYg
bWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250
ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRy
OyB9CisKKyAgICBMYXllckhvc3RpbmdDb250ZXh0KiBsYXllckhvc3RpbmdDb250ZXh0KCkgeyBy
ZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckhv
c3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYmKTsKKwor
ICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzQW5pbWF0aW5nOyB9Cisg
ICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29sIGZsYWcpIHsgbV9pc0FuaW1hdGluZyA9IGZsYWc7
IH0KKworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRJc0Z1bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldFRhcmdldElzRnVsbHNjcmVlbihib29sIGZs
YWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmbGFnOyB9CisKKyAgICBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIGZ1bGxzY3JlZW5Nb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZTsgfQorICAgIHZvaWQgc2V0RnVsbHNjcmVlbk1vZGUo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSB7IG1f
ZnVsbHNjcmVlbk1vZGUgPSBtb2RlOyB9CisKKyAgICBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0
IHsgcmV0dXJuIG1faXNGdWxsc2NyZWVuOyB9CisgICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9v
bCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0gZmxhZzsgfQorCitwcml2YXRlOgorICAgIC8vIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQorICAgIHZpcnR1YWwgdm9pZCByZXNldE1lZGlhU3Rh
dGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEJ1ZmZl
cmVkVGltZShkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFuZ2VzKGNvbnN0
IFdlYkNvcmU6OlRpbWVSYW5nZXMmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2Fu
UGxheUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJp
bmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlLCBXVEY6OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsK
KworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsK
KyAgICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV90YXJnZXRJc0Z1
bGxzY3JlZW4geyBmYWxzZSB9OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgYm9vbCBtX2lzRnVsbHNjcmVlbiB7
IGZhbHNlIH07Cit9OworCitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGlj
IFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYlBhZ2U+KTsKICAgICB2aXJ0dWFs
IH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAgICAgCiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7
Ci0gICAgCisKKyAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50CiAgICAgYm9vbCBzdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3Jl
ZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCosIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwogICAgIHZvaWQgZXhpdFZpZGVv
RnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kik7CiAg
ICAgCiBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ7CisKICAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFBh
c3NSZWZQdHI8V2ViUGFnZT4pOwotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2
ZW50TGlzdGVuZXImIHJocykgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLSAgICAKLSAgICAvLyBGdWxsc2NyZWVu
SW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JU
aW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBi
dWZmZXJlZFRpbWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFdl
YkNvcmU6OlRpbWVSYW5nZXMmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FuUGxh
eUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIHNl
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZSkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBhZGRpdGlvbmFsIGluY29taW5nCi0gICAgdmlydHVhbCB2
b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxz
Y3JlZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKGJvb2wgaXNQYWdlVmlzaWJsZSk7Ci0gICAgdm9pZCBzZXRWaWRl
b0xheWVyRnJhbWVGZW5jZWQoV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCk7CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbElu
dGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKKworICAgIC8vIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIHNldER1cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlKTsKKyAgICB2b2lk
IHNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgYW5jaG9yVGltZSk7CisgICAgdm9pZCBzZXRCdWZmZXJlZFRpbWUodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKKyAgICB2b2lkIHNldFJhdGUodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKKyAgICB2b2lk
IHNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8sIGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOworICAgIHZvaWQgc2V0U2Vla2FibGVSYW5nZXModWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJik7CisgICAgdm9pZCBz
ZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKTsKKyAg
ICB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwor
ICAgIHZvaWQgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KTsKKyAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2sodWludDY0X3QgY29udGV4dElkLCBib29s
IGVuYWJsZWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKworICAgIC8v
IE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisgICAgdm9pZCBw
bGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWVrVG9UaW1lKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgZmFzdFNlZWsodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRp
ZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFbnRlckZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZENsZWFudXBGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWVGZW5j
ZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0
dGFjaG1lbnQgZmVuY2VQb3J0KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1
aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpOworICAgIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2
b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAg
IHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBpc1BhZ2VWaXNpYmxlKTsKICAgICAKICAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7Ci0gICAg
Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nOwotICAgIGJvb2wgbV90YXJnZXRJc0Z1bGxzY3JlZW47
Ci0gICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1
bGxzY3JlZW5Nb2RlOwotICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW47CisgICAgSGFzaE1hcDxXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKKyAgICBI
YXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7CiB9Owog
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNz
YWdlcy5pbgppbmRleCBkM2M2OGEzNjZjZjgxNTRlZGRkYjE4NmRkMmU2YzkzNDdmZGE1MmFiLi4w
MTNkYTNlZTYyMjQ1ZDE0MjUyZmNiMTRhMGFiOTgzMGEwNzRlYzZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTIyLDI2ICsyMiwyNiBAQAogCiAjaWYgUExBVEZP
Uk0oSU9TKQogbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciB7Ci0gICAgUGxh
eSgpCi0gICAgUGF1c2UoKQotICAgIFRvZ2dsZVBsYXlTdGF0ZSgpCi0gICAgQmVnaW5TY3J1YmJp
bmcoKQotICAgIEVuZFNjcnViYmluZygpCi0gICAgU2Vla1RvVGltZShkb3VibGUgdGltZSkKLSAg
ICBGYXN0U2Vlayhkb3VibGUgdGltZSkKLSAgICBCZWdpblNjYW5uaW5nRm9yd2FyZCgpCi0gICAg
QmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLSAgICBFbmRTY2FubmluZygpCi0gICAgUmVxdWVzdEV4
aXRGdWxsc2NyZWVuKCkKLSAgICBEaWRTZXR1cEZ1bGxzY3JlZW4oKQotICAgIERpZEV4aXRGdWxs
c2NyZWVuKCkKLSAgICBEaWRFbnRlckZ1bGxzY3JlZW4oKQotICAgIERpZENsZWFudXBGdWxsc2Ny
ZWVuKCkKLSAgICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoV2ViQ29yZTo6RmxvYXRSZWN0IGJv
dW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKLSAgICBTZXRWaWRlb0xheWVyR3Jhdml0
eUVudW0odW5zaWduZWQgZ3Jhdml0eSkKLSAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2
NF90IGluZGV4KQotICAgIFNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkK
LSAgICBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotICAgIEZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZShib29sIGlzUGFnZVZpc2libGUpCisgICAgUGxheSh1aW50NjRfdCBjb250
ZXh0SWQpCisgICAgUGF1c2UodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZVBsYXlTdGF0
ZSh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKQorICAgIEVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2Vla1RvVGlt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEZhc3RTZWVrKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCisgICAgQmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0
X3QgY29udGV4dElkKQorICAgIEJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgRW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFJlcXVlc3RFeGl0
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkU2V0dXBGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgRGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRD
bGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2V0VmlkZW9MYXllckZy
YW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywg
SVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKKyAgICBTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0o
dWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQorICAgIFNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKKyAgICBTZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKKyAg
ICBGdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCisg
ICAgRnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBp
c1BhZ2VWaXNpYmxlKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQppbmRleCA0NzJmYmYx
YmM4YTRiODg3MzNjMWUzNzU2MDMzYWI3ZGNmZDg4ZTU5Li5jNTY2NjJjYmJhNTNiODJjOWVhZDU2
YzFkYzg4ODdjM2ZhMWE2ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KQEAgLTYwLDYgKzYwLDk3
IEBAIHN0YXRpYyBJbnRSZWN0IGNsaWVudFJlY3RGb3JFbGVtZW50KEhUTUxFbGVtZW50KiBlbGVt
ZW50KQogICAgIHJldHVybiBlbGVtZW50LT5jbGllbnRSZWN0KCk7CiB9CiAKK3N0YXRpYyB1aW50
NjRfdCBuZXh0Q29udGV4dElkKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0g
MDsKKyAgICByZXR1cm4gKytjb250ZXh0SWQ7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgOiBtX21hbmFn
ZXIoJm1hbmFnZXIpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdD
b250ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gV1RGOjpt
b3ZlKGNvbnRleHQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6OnJlc2V0TWVkaWFTdGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5yZXNldE1lZGlhU3RhdGUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldER1cmF0aW9uKG1f
Y29udGV4dElkLCBkdXJhdGlvbik7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5j
aG9yVGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldEN1
cnJlbnRUaW1lKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKGRv
dWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRCdWZmZXJlZFRpbWUobV9jb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0UmF0ZShib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+c2V0UmF0ZShtX2NvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUp
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldFZpZGVv
RGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9EaW1lbnNpb25z
KG1fY29udGV4dElkLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2Vi
Q29yZTo6VGltZVJhbmdlcyYgcmFuZ2VzKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+c2V0U2Vla2FibGVSYW5nZXMobV9jb250ZXh0SWQsIHJhbmdlcyk7Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0Q2FuUGxheUZhc3RS
ZXZlcnNlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRDYW5QbGF5RmFzdFJldmVyc2UobV9jb250ZXh0SWQsIHZhbHVlKTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRBdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVj
dGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5n
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMobV9j
b250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVk
LCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBXVEY6OlN0cmluZyBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0
RXh0ZXJuYWxQbGF5YmFjayhtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2
aWNlTmFtZSk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIK
KwogUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJQYWdlPiBwYWdlKQogewogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlKSk7CkBAIC02Nywy
MCArMTU4LDU5IEBAIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFBhc3NSZWZQCiAKIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdlPiBw
YWdlKQogICAgIDogbV9wYWdlKHBhZ2UuZ2V0KCkpCi0gICAgLCBtX2lzQW5pbWF0aW5nKGZhbHNl
KQotICAgICwgbV90YXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpCi0gICAgLCBtX2Z1bGxzY3JlZW5N
b2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQotICAgICwgbV9p
c0Z1bGxzY3JlZW4oZmFsc2UpCiB7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
KHRoaXMpOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBwYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6
IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBhdXRvIG1vZGVsID0gc3RkOjpnZXQ8
MD4odHVwbGUpOworICAgICAgICBhdXRvIGludGVyZmFjZSA9IHN0ZDo6Z2V0PDE+KHR1cGxlKTsK
KworICAgICAgICBtb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKG51bGxwdHIp
OworICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOworCisgICAgICAgIGlu
dGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigp
OworICAgIG1fdmlkZW9FbGVtZW50cy5jbGVhcigpOworCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCitX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJ
ZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5n
Q29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKKyAgICBtb2RlbC0+
c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKGludGVyZmFjZS5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURjo6bW92ZShtb2RlbCksIFdURjo6bW92ZShpbnRlcmZh
Y2UpKTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBs
ZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFk
ZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKK30KKworV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCkpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKSk7Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50
OgorCiBib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpOwpAQCAt
OTAsNjYgKzIyMCw4MCBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZQogewogICAgIEFTU0VSVCht
b2RlICE9IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKIAotICAg
IG1fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50OworICAgIHVpbnQ2NF90IGNvbnRleHRJZDsK
IAotICAgIG1fdGFyZ2V0SXNGdWxsc2NyZWVuID0gdHJ1ZTsKLSAgICBtX2Z1bGxzY3JlZW5Nb2Rl
ID0gbW9kZTsKKyAgICBpZiAoIW1fdmlkZW9FbGVtZW50cy5jb250YWlucyh2aWRlb0VsZW1lbnQp
KSB7CisgICAgICAgIGNvbnRleHRJZCA9IG5leHRDb250ZXh0SWQoKTsKKyAgICAgICAgbV92aWRl
b0VsZW1lbnRzLnNldCh2aWRlb0VsZW1lbnQsIGNvbnRleHRJZCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQodmlkZW9FbGVtZW50KTsKIAotICAg
IGlmIChtX2lzQW5pbWF0aW5nKQotICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVs
LCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAg
IGludGVyZmFjZS0+c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKHRydWUpOworICAgIGludGVyZmFjZS0+
c2V0RnVsbHNjcmVlbk1vZGUobW9kZSk7CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCh2aWRl
b0VsZW1lbnQpOwogCi0gICAgbV9pc0FuaW1hdGluZyA9IHRydWU7Ci0gICAgc2V0VmlkZW9FbGVt
ZW50KHZpZGVvRWxlbWVudCk7CisgICAgaWYgKGludGVyZmFjZS0+aXNBbmltYXRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7CiAKLSAg
ICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JF
eHRlcm5hbEhvc3RpbmdQcm9jZXNzKCk7Ci0gICAgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3Jl
ZW4gPSBtX3ZpZGVvRWxlbWVudC0+bWVkaWFTZXNzaW9uKCkuYWxsb3dzQWx0ZXJuYXRlRnVsbHNj
cmVlbigqbV92aWRlb0VsZW1lbnQuZ2V0KCkpOworICAgIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxs
c2NyZWVuID0gdmlkZW9FbGVtZW50LT5tZWRpYVNlc3Npb24oKS5hbGxvd3NBbHRlcm5hdGVGdWxs
c2NyZWVuKCp2aWRlb0VsZW1lbnQpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQobV9s
YXllckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvckVsZW1lbnQodmlk
ZW9FbGVtZW50KSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBtX2Z1bGxzY3JlZW5Nb2Rl
LCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBG
dWxsc2NyZWVuV2l0aElEKGNvbnRleHRJZCwgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0
KCktPmNvbnRleHRJRCgpLCBjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRlb0VsZW1lbnQpLCBtX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKSwgYWxs
b3dPcHRpbWl6ZWRGdWxsc2NyZWVuKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KikKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+
IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVtZW50LnJlbGVhc2UoKTsKLSAgICBtX3RhcmdldElz
RnVsbHNjcmVlbiA9IGZhbHNlOworICAgIEFTU0VSVChtX3ZpZGVvRWxlbWVudHMuY29udGFpbnMo
dmlkZW9FbGVtZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxlbWVu
dHMuZ2V0KHZpZGVvRWxlbWVudCk7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJm
YWNlKGNvbnRleHRJZCk7CiAKLSAgICBpZiAobV9pc0FuaW1hdGluZykKKyAgICBpbnRlcmZhY2Uu
c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKworICAgIGlmIChpbnRlcmZhY2UuaXNBbmlt
YXRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pc0FuaW1hdGluZyA9IHRydWU7Ci0g
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OkV4aXRGdWxsc2NyZWVuKGNsaWVudFJlY3RGb3JFbGVtZW50KHZpZGVvRWxlbWVudC5nZXQoKSkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OkV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCwgY2xpZW50UmVjdEZvckVsZW1lbnQodmlkZW9F
bGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSgpCisjcHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UmVz
ZXRNZWRpYVN0YXRlKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpSZXNldE1lZGlhU3RhdGUoY29u
dGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUg
ZHVyYXRpb24pCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OlNldER1cmF0aW9uKGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OlNldER1cmF0aW9uKGNvbnRleHRJZCwgZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZShkb3Vi
bGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJy
ZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEN1cnJlbnRUaW1lKGN1cnJlbnRU
aW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEN1cnJlbnRUaW1lKGNv
bnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRCdWZmZXJlZFRpbWUoZG91Ymxl
IGJ1ZmZlcmVkVGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0QnVmZmVy
ZWRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKIHsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0
QnVmZmVyZWRUaW1lKGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRCdWZm
ZXJlZFRpbWUoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5n
LCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNl
dFJhdGUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpTZXRSYXRlKGlzUGxheWluZywgcGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldFJhdGUoY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNl
dFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0RpbWVuc2lvbnModWlu
dDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6U2V0VmlkZW9EaW1lbnNpb25zKGNvbnRleHRJZCwgaGFzVmlkZW8s
IHdpZHRoLCBoZWlnaHQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KICAgICAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2ViQ29yZTo6VGlt
ZVJhbmdlcyYgdGltZVJhbmdlcykKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0
U2Vla2FibGVSYW5nZXModWludDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFu
Z2VzJiB0aW1lUmFuZ2VzKQogewogICAgIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+
PiByYW5nZXNWZWN0b3I7CiAgICAgCkBAIC0xNjAsMzAgKzMwNCwxMDQgQEAgdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBXZWJDb3JlOjpUaW1l
UmFuZ2VzJiB0aW0KICAgICAgICAgcmFuZ2VzVmVjdG9yLmFwcGVuZChzdGQ6OnBhaXI8ZG91Ymxl
LGRvdWJsZT4oc3RhcnQsIGVuZCkpOwogICAgIH0KIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRTZWVrYWJsZVJhbmdlc1ZlY3Rv
cihXVEY6Om1vdmUocmFuZ2VzVmVjdG9yKSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRTZWVr
YWJsZVJhbmdlc1ZlY3Rvcihjb250ZXh0SWQsIFdURjo6bW92ZShyYW5nZXNWZWN0b3IpKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0
Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnNldENhblBsYXlGYXN0UmV2ZXJzZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFs
dWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldENhblBsYXlGYXN0UmV2ZXJzZSh2YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkp
OworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpTZXRDYW5QbGF5RmFzdFJldmVyc2UoY29udGV4dElkLCB2YWx1ZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRf
dCBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRBdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRBdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnRleHRJZCwgb3B0aW9u
cywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
dWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0
X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhv
cHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
c2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2Fs
aXplZERldmljZU5hbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEV4dGVy
bmFsUGxheWJhY2sodWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwg
U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEV4dGVybmFsUGxheWJhY2tQcm9w
ZXJ0aWVzKGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0YXJnZXRUeXBlKSwgbG9jYWxp
emVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRFeHRlcm5hbFBsYXliYWNr
UHJvcGVydGllcyhjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0YXJn
ZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQotICAg
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQor
CisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wbGF5KCk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGF1c2UoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGxheVN0YXRlKCk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY3J1YmJpbmcoKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbmRTY3J1YmJpbmcodWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2NydWJiaW5nKCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2Vla1RvVGltZSh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCku
c2Vla1RvVGltZSh0aW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpm
YXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQoreworICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuZmFzdFNlZWsodGltZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0ZvcndhcmQoKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWlu
dDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2Fu
bmluZ0JhY2t3YXJkKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5k
U2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuZW5kU2Nhbm5pbmcoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpy
ZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkucmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vs
ZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWlu
dDY0X3QgaW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5zZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24oaW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKK3sK
KyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh2aWRlb0Z1
bGxzY3JlZW5Nb2RlKTsKK30KKworI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjoKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRT
ZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewogICAgIFBsYXRmb3JtTGF5ZXIq
IHZpZGVvTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjAwLDgz
ICs0MTgsMTExIEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxs
c2NyZWVuKCkKICAgICAvLyBUaGlzIHNjYWxlIGZhY3RvciBpcyBpbnZlcnRlZCBpbiB0aGUgaG9z
dGluZyBwcm9jZXNzLgogICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciA9IG1fcGFnZS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKTsKICAgICBbdmlkZW9MYXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zv
cm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3RpbmdTY2FsZUZhY3RvciwgMSld
OwotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOwog
Ci0gICAgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXllcik7CisgICAgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGll
KG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsK
KworICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlk
ZW9MYXllcik7CisgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIp
OworCiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIAotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpFbnRlckZ1bGxzY3JlZW4oKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlk
RW50ZXJGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX2lzQW5pbWF0aW5nID0g
ZmFsc2U7Ci0gICAgbV9pc0Z1bGxzY3JlZW4gPSBmYWxzZTsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogCi0gICAg
aWYgKG1fdGFyZ2V0SXNGdWxsc2NyZWVuKQorICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmco
ZmFsc2UpOworICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKworICAgIGlm
IChpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBk
dXJpbmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheIHsK
LSAgICAgICAgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChtX3ZpZGVvRWxlbWVu
dC5nZXQoKSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0
cm9uZ1RoaXMsIG1vZGVsXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPmV4aXRWaWRlb0Z1bGxzY3Jl
ZW5Gb3JWaWRlb0VsZW1lbnQobW9kZWwtPnZpZGVvRWxlbWVudCgpKTsKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVlbigpCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKLSAgICBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwotICAgIF9fYmxv
Y2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRo
aXMpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9k
ZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVy
ZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
bmlsKTsKIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57
Ci0gICAgICAgIGlmIChtX2xheWVySG9zdGluZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIG1fbGF5
ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKG51bGxwdHIpOwotICAgICAgICAgICAgbV9s
YXllckhvc3RpbmdDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgY29udGV4dElkLCBpbnRlcmZhY2VdIHsK
KyAgICAgICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7CisgICAgICAg
ICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExheWVyKG51bGxw
dHIpOworICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250ZXh0KG51bGxw
dHIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Q2xlYW51cEZ1
bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsK
KyAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHN0cm9uZ1RoaXMt
Pm1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpD
bGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBzdHJvbmdUaGlzLT5tX3BhZ2UtPnBhZ2VJRCgp
KTsKICAgICB9KTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlk
Q2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRD
bGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9pc0FuaW1hdGlu
ZyA9IGZhbHNlOwotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7Ci0gICAgCi0gICAgc2V0Vmlk
ZW9FbGVtZW50KG51bGxwdHIpOwotCi0gICAgaWYgKCFtX3RhcmdldElzRnVsbHNjcmVlbikKKyAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Cisg
ICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisgICAg
aW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworICAgIEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsK
KworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOworICAgIFJlZlB0cjxI
VE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisK
KyAgICBpZiAoIWludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgbW9k
ZWwtPnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbW9kZWwtPnNldFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZShudWxscHRyKTsKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlk
YXRlKCk7CisgICAgICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlkZW9FbGVtZW50LmdldCgp
KTsKKyAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOwogICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgLy8gZW50ZXIgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZp
b3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBhbmltYXRpb24uCi0gICAgX19ibG9jayBSZWZQdHI8
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAg
V2ViVGhyZWFkUnVuKF4gewotICAgICAgICBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxl
bWVudChtX3ZpZGVvRWxlbWVudC5nZXQoKSwgbV9mdWxsc2NyZWVuTW9kZSk7Ci0gICAgICAgIHBy
b3RlY3QuY2xlYXIoKTsKKyAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2
aW91c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgorICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihb
c3Ryb25nVGhpcywgdmlkZW9FbGVtZW50LCBtb2RlXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPmVu
dGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudC5nZXQoKSwgbW9k
ZSk7CiAgICAgfSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNl
dFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1bnNpZ25lZCBncmF2aXR5KQordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4
dElkLCB1bnNpZ25lZCBncmF2aXR5KQogewotICAgIHNldFZpZGVvTGF5ZXJHcmF2aXR5KChXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5KWdyYXZpdHkpOworICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdyYXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShib29sIGlzUGFnZVZpc2li
bGUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKIHsKKyAgICBh
dXRvJiBtb2RlbCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCk7CisKICAgICBpZiAoIWlzUGFnZVZp
c2libGUpCi0gICAgICAgIG1fdmlkZW9FbGVtZW50LT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJs
ZShmYWxzZSk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh0cnVlLCBjbGllbnRSZWN0Rm9y
RWxlbWVudChtX3ZpZGVvRWxlbWVudC5nZXQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAg
ICAgbW9kZWwudmlkZW9FbGVtZW50KCktPnNjcm9sbEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNl
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6UHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGNvbnRleHRJZCwgdHJ1ZSwgY2xpZW50UmVj
dEZvckVsZW1lbnQobW9kZWwudmlkZW9FbGVtZW50KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9
CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFt
ZUZlbmNlZChXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQ
b3J0KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVG
ZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6
OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQogeworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKICAgICBbQ0FUcmFuc2Fj
dGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07
Ci0gICAgaWYgKG1fbGF5ZXJIb3N0aW5nQ29udGV4dCkKLSAgICAgICAgbV9sYXllckhvc3RpbmdD
b250ZXh0LT5zZXRGZW5jZVBvcnQoZmVuY2VQb3J0LnBvcnQoKSk7Ci0gICAgc2V0VmlkZW9MYXll
ckZyYW1lKGJvdW5kcyk7CisgICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgp
KQorICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0RmVuY2VQb3J0
KGZlbmNlUG9ydC5wb3J0KCkpOworICAgIG1vZGVsLT5zZXRWaWRlb0xheWVyRnJhbWUoYm91bmRz
KTsKICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBmZW5jZVBvcnQu
cG9ydCgpKTsKICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250835</attachid>
            <date>2015-04-15 12:45:57 -0700</date>
            <delta_ts>2015-04-15 14:33:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143680-20150415124500.patch</filename>
            <type>text/plain</type>
            <size>83700</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTRhYTY3OTA2MWJhNDhi
YmNjZjUwNjdjZjM5MTU4OTVlMWExZTNmZS4uNzUxOWExNzE5Y2Y3MWY0NDY4MDVlYWEyMGQ1ZmY3
NTI1M2JlZTRjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwMCBAQAogMjAxNS0wNC0xMyAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBbaU9TXSBXaGVuIHNpbXVs
dGFuZW91c2x5IGV4aXRpbmctYW5kLWVudGVyaW5nIGZ1bGxzY3JlZW4sIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIvUHJveHkgYmVjb21lcyBjb25mdXNlZCBhYm91dCB3aGF0IHZpZGVvIGVsZW1l
bnQgaXQgcmVwcmVzZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MzY4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBvcmlnaW5hbCBhc3N1bXB0aW9uIG9mIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIgYW5kIC1Qcm94eSB3YXMgdGhhdCB0aGUgdHdvIGNsYXNzZXMgd291bGQgcmVwcmVzZW50
IGEKKyAgICAgICAgc2luZ2xlIHZpZGVvIGVsZW1lbnQgYW5kIGl0cyBmdWxsIHNjcmVlbiBzdGF0
ZS4gV2l0aCBtdWx0aXBsZSBhbmltYXRpb25zIGluIGFuZCBvdXQgb2YgZnVsbHNjcmVlbiBjb21i
aW5lZCB3aXRoCisgICAgICAgIG11bHRpcGxlIGZ1bGxzY3JlZW4gbW9kZXMsIHRoaXMgYXNzdW1w
dGlvbiBubyBsb25nZXIgaG9sZHMgdHJ1ZS4KKworICAgICAgICBSYXRoZXIgdGhhbiBoYXZpbmcg
YSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIHdoaWNoIC9pc2EvIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50LCB0aGUgbWFuYWdlciBub3cKKyAgICAgICAgL2hhc2EvIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IChvciBoYXMgbWFueSBzdWNoIG1vZGVscyku
IERpdHRvIGZvciBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIGFuZAorICAgICAgICBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC4gVGhlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUFWS2l0IHN0aWxsIG5lZWRzIGEgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwgdG8KKyAgICAgICAg
Y29tbXVuaWNhdGUgd2l0aCwgc28gYSBuZXcgd3JhcHBlciBjbGFzcyBpcyB1c2VkIGZvciB0aGF0
IHB1cnBvc2UsIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dC4gRGl0dG8gZm9yCisgICAg
ICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IGFuZCB0aGUgbmV3IGNsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQuIFRoZXNlIGNvbnRleHQgY2xhc3Nl
cworICAgICAgICBhcmUgcGFpcmVkIGFuZCBzaGFyZSBhIGNvbnRleHRJZCwgYWxsb3dpbmcgdGhl
IG1hbmFnZXIgYW5kIGl0cyBwcm94eSB0byByb3V0ZSBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBVSVBy
b2Nlc3MncworICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCB0by1hbmQt
ZnJvbSB0aGUgV2ViUHJvY2VzcydzIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50
LgorCisgICAgICAgIEJvdGggdGhlIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCBhbmQg
dGhlIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQgdGFrZSBhIGJhY2stcG9pbnRl
ciB0byB0aGVpcgorICAgICAgICBtYW5hZ2VyIG9yIG1hbmFnZXIgcHJveHksIGFuZCBlYWNoIG1l
dGhvZCBvbiB0aGUgY29udGV4dCBzaW1wbHkgY2FsbHMgdGhlIG1hdGNoaW5nIG1ldGhvZCBvbiB0
aGUgbWFuYWdlciBhbmQKKyAgICAgICAgcGFzc2VzIGl0cyBjb250ZXh0SWQgYXMgYSBwYXJhbWV0
ZXIuCisKKyAgICAgICAgQm90aCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBhbmQgdGhl
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSBwYXNzIHRoYXQgY29udGV4dElkIGluIGVh
Y2ggb2YgdGhlaXIKKyAgICAgICAgY3Jvc3MtcHJvY2VzcyBtZXNzYWdlcy4KKworICAgICAgICBP
biB0aGUgb3RoZXIgc2lkZSwgdGhlIG1hbmFnZXIgYW5kIHByb3h5IGFsc28gaGF2ZSBhIG1hcCBi
ZXR3ZWVuIGNvbnRleHRJZHMgYW5kIHRoZWlyIG1hdGNoaW5nCisgICAgICAgIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50IChpbiB0aGUgY2FzZSBvZiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKSBvcgorICAgICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCAo
aW4gdGhlIGNhc2Ugb2YgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KS4KKworICAgICAg
ICBXaGlsZSB0aGlzIGNoYW5nZSBpcyBsYXJnZSBieSBMb0MsIGl0IGlzIGFsbW9zdCBlbnRpcmVs
eSBib2lsZXJwbGF0ZS4gIFRoZSBuZXcgYW5kIGludGVyZXN0aW5nIHBpZWNlcyBhcmUgdGhlc2U6
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpOiBObyBsb25nZXIgYSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjppbnZhbGlkYXRlKTogV2FsayB0aHJvdWdoIHRoZSBtb2RlbHMgYW5kIGlu
dGVyZmFjZXMsIGludmFsaWRhdGluZyBlYWNoLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKTogQWRkZWQuIFJl
dHVybiBhIG5ldyBtb2RlbCBhbmQgaW50ZXJmYWNlIHR1cGxlLgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKTog
QWRkZWQuIExhemlseSBjcmVhdGUsIGFuZCBhZGQgdG8gdGhlIG1fY29udGV4dE1hcAorICAgICAg
ICAgICAgYSBuZXcgbW9kZWwgYW5kIGludGVyZmFjZSBvYmplY3QuCisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWwpOiBSZXR1cm4gdGhl
IG1vZGVsIGhhbGYgb2YgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktp
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UpOiBSZXR1
cm4gdGhlIGludGVyZmFjZSBoYWxmIG9mIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKCkuCisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsc2Ny
ZWVuKTogV2FsayB0aHJvdWdoIHRoZSBvdXRzdGFuZGluZyBpbnRlcmZhY2Ugb2JqZWN0cywgYW5k
IGlmIAorICAgICAgICAgICAgYW55IGhhdmUgYSBmdWxsc2NyZWVuIG1vZGUgd2hpY2ggbWF0Y2hl
cyB0aGUgYWJvdXQtdG8tYmUtZnVsbHNjcmVlbiBpbnRlcmZhY2UsIHJlcXVlc3QgdGhhdCB0aGF0
IG90aGVyIGludGVyZmFjZQorICAgICAgICAgICAgZXhpdCBmdWxsc2NyZWVuLgorICAgICAgICAq
IFdlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW06CisgICAgICAgIChX
ZWJLaXQ6Om5leHRDb250ZXh0SWQpOiBTdGF0aWMsIGluY3JlbWVudGluZyBjb3VudGVyIHVzZWQg
YXMgYSBjb250ZXh0SWQgc291cmNlLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKTogTm8gbG9uZ2VyIGEgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKTogV2FsayB0aHJv
dWdoIHRoZSBtb2RlbHMgYW5kIGludGVyZmFjZXMsIGludmFsaWRhdGluZyBlYWNoLgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVy
ZmFjZSk6IEFkZGVkLiBSZXR1cm4gYSBuZXcgbW9kZWwgYW5kIGludGVyZmFjZSB0dXBsZS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJ
bnRlcmZhY2UpOiAgQWRkZWQuIExhemlseSBjcmVhdGUsIGFuZCBhZGQgdG8gdGhlIG1fY29udGV4
dE1hcAorICAgICAgICAgICAgYSBuZXcgbW9kZWwgYW5kIGludGVyZmFjZSBvYmplY3QuCisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKTogUmV0
dXJuIHRoZSBtb2RlbCBoYWxmIG9mIGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKCkuCisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSk6IFJl
dHVybiB0aGUgaW50ZXJmYWNlIGhhbGYgb2YgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKwor
ICAgICAgICBOZXcgY2xhc3NlcyBhbmQgbWV0aG9kcyB3aGljaCBqdXN0IGZvcndhcmQgb24gdG8g
dGhlaXIgb3duaW5nIG9iamVjdHM6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6bGF5
ZXJIb3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpzZXRMYXllckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OnNldEluaXRpYWxWaWRlb0xheWVyRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2Vla1RvVGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZmFzdFNlZWspOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdG
b3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpiZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
dmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEVu
dGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ6OmxheWVySG9zdGluZ0NvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojppc0FuaW1hdGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldElz
QW5pbWF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6dGFyZ2V0SXNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0VGFyZ2V0SXNGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6ZnVsbHNjcmVl
bk1vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRGdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ6OmlzRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldElzRnVsbHNjcmVlbik6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldER1cmF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0Q3Vy
cmVudFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpzZXRCdWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRSYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0VmlkZW9EaW1lbnNpb25zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0U2Vla2Fi
bGVSYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKwor
ICAgICAgICBDcm9zcy1wcm9jZXNzIG1ldGhvZHMgd2hpY2ggbm93IHRha2UgYSBjb250ZXh0SWQg
cGFyYW1ldGVyOgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0aElEKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXNldE1lZGlhU3RhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEN1cnJl
bnRUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZXRCdWZmZXJlZFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNldFZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0U2Vla2FibGVSYW5nZXNWZWN0b3IpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldENhblBsYXlG
YXN0UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXREdXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxs
c2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbmRTY3J1YmJpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlZWtU
b1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmZhc3RTZWVrKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbmRTY2FubmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEV4aXRG
dWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZENsZWFudXBG
dWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRWaWRlb0xheWVyRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxl
Y3RMZWdpYmxlTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5s
aW5lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp2
aWRlb0xheWVyRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJHcmF2aXR5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlkZW9GdWxs
c2NyZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldER1cmF0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0Q3VycmVudFRp
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRCdWZm
ZXJlZFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpz
ZXRSYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0
VmlkZW9EaW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6c2V0U2Vla2FibGVSYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpzZXRDYW5QbGF5RmFzdFJldmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpzZXRFeHRlcm5hbFBsYXliYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6dG9nZ2xlUGxheVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbmRTY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZmFzdFNlZWspOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuZFNjYW5u
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVz
dEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVs
bHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRp
ZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuKTogRGVsZXRlZC4KKworMjAxNS0w
NC0xMyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAgICAgICBbRnVsbHNj
cmVlbl0gQ2hyb21lQ2xpZW50OjpleGl0VmlkZW9GdWxsc2NyZWVuKCkgc2hvdWxkIHRha2UgYSBw
b2ludGVyIHRvIGEgSFRNTFZpZGVvRWxlbWVudC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzY3NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDQ1MDM2NWI5OWE0ODQxZjhhNTJiNDMy
YTc1M2U4MzE1ODJlNDMzNTcuLjBmNDQ1YmM2YWE3YmYyNzRjZDQzOGY2MjQ0ZmE4NDkyOTFiZjNl
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCkBAIC0yNDIsNyArMjQyLDcgQEAgc3RhdGljIGludDMyX3QgZGV2aWNlT3JpZW50YXRpb24o
KQogICAgIGlmICghX3BhZ2UgfHwgIV9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gX3BhZ2UtPnZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIoKS0+bW9kZSgpICYgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9G
dWxsc2NyZWVuTW9kZU9wdGltaXplZDsKKyAgICByZXR1cm4gX3BhZ2UtPnZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIoKS0+aGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlT3B0aW1pemVkKTsKIH0KIAogLSAoQk9PTClfbWF5QXV0b21hdGljYWxseVNob3dW
aWRlb09wdGltaXplZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKaW5kZXggZDllNjVjZTkzMzhi
ZjhjMzVhMzEwNjQ4MGM5Y2M2YTJhMjI0NzUxNi4uYjQ5OGFlOGU1YmE4N2YyYjI0MTNhZWY4YzQ2
YmExZmU0NzY1ZGU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oCkBAIC00MSwzNCArNDEs
MzEgQEAgT0JKQ19DTEFTUyBVSVZpZXc7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
UGFnZVByb3h5OworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OwogCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5DaGFuZ2VPYnNlcnZlciwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dCBmaW5hbDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0PiwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIgIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkoKTsKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dD4gY3JlYXRlKFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSYgbWFuYWdlciwg
dWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQoKSB7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZSgp
IHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShXZWJQYWdlUHJveHkmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2Rl
ciYpIG92ZXJyaWRlOworICAgIFBsYXRmb3JtTGF5ZXIqIGxheWVySG9zdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJIb3N0LmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckhvc3QoUmV0YWluUHRy
PFBsYXRmb3JtTGF5ZXI+JiYgbGF5ZXJIb3N0KSB7IG1fbGF5ZXJIb3N0ID0gV1RGOjptb3ZlKGxh
eWVySG9zdCk7IH0KIAotICAgIC8vIFRyYW5zbGF0ZSB0byBGdWxsc2NyZWVuSW50ZXJmYWNlCi0g
ICAgdm9pZCBzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDMyX3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRp
bWl6ZWRGdWxsc2NyZWVuKTsKLSAgICB2b2lkIHNldFNlZWthYmxlUmFuZ2VzVmVjdG9yKGNvbnN0
IFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiYpOwotICAgIHZvaWQgc2V0RXh0ZXJu
YWxQbGF5YmFja1Byb3BlcnRpZXMoYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBT
dHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNoYW5n
ZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBpbmxpbmVSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldElu
aXRpYWxWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKSB7IG1fdmlkZW9M
YXllckZyYW1lID0gZnJhbWU7IH0KIAotICAgIC8vIEZ1bGxzY3JlZW4gT2JzZXJ2ZXIKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRF
eGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVs
bHNjcmVlbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICAvLyBGdWxsc2NyZWVuTW9kZWwKK3ByaXZh
dGU6CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSYgbWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgICAgICA6IG1f
bWFuYWdlcigmbWFuYWdlcikKKyAgICAgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCisgICAg
eworICAgIH0KKworICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsCiAgICAgdmlydHVhbCB2
b2lkIHBsYXkoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUGxheVN0YXRlKCkgb3ZlcnJpZGU7CkBAIC03OSwxOCAr
NzYsOTcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQo
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGVuZFNjYW5uaW5nKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVlbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0KSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aWRlb0xheWVyRnJhbWUoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KFZpZGVvR3Jhdml0eSkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBWaWRlb0dyYXZpdHkgdmlkZW9MYXllckdyYXZpdHkoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBvdmVycmlkZTsKIAotICAg
IFdlYlBhZ2VQcm94eSogbV9wYWdlOworICAgIC8vIFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9i
c2VydmVyCisgICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkqIG1fbWFuYWdlcjsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKICAg
ICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9sYXllckhvc3Q7CiAgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG1fdmlkZW9MYXllckZyYW1lOwogICAgIFZpZGVvR3Jhdml0eSBtX3ZpZGVvTGF5ZXJH
cmF2aXR5IHsgVmlkZW9HcmF2aXR5UmVzaXplIH07CiB9OworCitjbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IGNyZWF0
ZShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCByZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgYm9vbCBoYXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIGNvbnN0OworICAgIGJvb2wgbWF5QXV0b21h
dGljYWxseVNob3dWaWRlb09wdGltaXplZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ7CisKKyAgICBleHBsaWNpdCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURl
Y29kZXImKSBvdmVycmlkZTsKKworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiwgUmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbEludGVy
ZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7Cisg
ICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQmIGVuc3VyZU1v
ZGVsKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworCisg
ICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisgICAgdm9pZCBz
ZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5n
U2NhbGVGYWN0b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKKyAgICB2b2lkIHJlc2V0TWVkaWFT
dGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0Q3VycmVudFRpbWUodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSk7CisgICAg
dm9pZCBzZXRCdWZmZXJlZFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRU
aW1lKTsKKyAgICB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaGFzVmlkZW8sIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworICAgIHZvaWQg
c2V0U2Vla2FibGVSYW5nZXNWZWN0b3IodWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpw
YWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzKTsKKyAgICB2b2lkIHNldENhblBsYXlGYXN0UmV2
ZXJzZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIHNldExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIHNldEV4dGVybmFsUGxheWJh
Y2tQcm9wZXJ0aWVzKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0
YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAgdm9pZCBzZXREdXJh
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbik7CisgICAgdm9pZCBzZXRS
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKTsKKyAg
ICB2b2lkIGVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZXhp
dEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVj
dCk7CisgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpOworCisgICAgLy8gTWVzc2FnZXMg
dG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgcGF1c2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRv
Z2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY3J1YmJp
bmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBj
b250ZXh0SWQpOworICAgIHZvaWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSB0aW1lKTsKKyAgICB2b2lkIGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRp
bWUpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAg
IHZvaWQgZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlcXVlc3RF
eGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkU2V0dXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKHVpbnQ2NF90IGNvbnRleHRJZCwg
V2ViQ29yZTo6RmxvYXRSZWN0KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2
NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jh
dml0eSk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUodWludDY0X3QgY29udGV4dElkKTsKKworICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOworICAg
IEhhc2hNYXA8dWludDY0X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKKwor
fTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDc0NjA0MDI5NTNkYTBjMzdiMGZmZDY2ODhkMjEz
N2FiZGQ2ZTcyNDUuLmE0ZTdjMjdhOGUzYmMyMTI4M2U0NTEzOGVhODI0NzZlZDcwNjNhMGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMiwyMSAr
MjIsMjEgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIG1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eSB7Ci0gICAgUmVzZXRNZWRpYVN0YXRlKCkKLSAgICBTZXRDdXJyZW50
VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0VGltZSkKLSAgICBTZXRCdWZmZXJl
ZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkKLSAgICBTZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBo
YXNWaWRlbywgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLSAgICBTZXRTZWVrYWJs
ZVJhbmdlc1ZlY3RvcihWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzKTsK
LSAgICBTZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCB2YWx1ZSk7Ci0gICAgU2V0QXVkaW9NZWRp
YVNlbGVjdGlvbk9wdGlvbnMoVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0
ZWRJbmRleCk7Ci0gICAgU2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhWZWN0b3I8U3Ry
aW5nPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KTsKLSAgICBTZXRFeHRlcm5hbFBs
YXliYWNrUHJvcGVydGllcyhib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmlu
ZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKLSAgICBTZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24p
Ci0gICAgU2V0UmF0ZShib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCi0gICAgU2V0dXBGdWxs
c2NyZWVuV2l0aElEKHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgV2ViQ29yZTo6SW50UmVjdCBpbml0
aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dP
cHRpbWl6ZWRGdWxsc2NyZWVuKQotICAgIEVudGVyRnVsbHNjcmVlbigpCi0gICAgRXhpdEZ1bGxz
Y3JlZW4oV2ViQ29yZTo6SW50UmVjdCBmaW5hbFJlY3QpCi0gICAgQ2xlYW51cEZ1bGxzY3JlZW4o
KQotICAgIFByZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIFdlYkNvcmU6Oklu
dFJlY3QgaW5saW5lUmVjdCkKKyAgICBSZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElk
KQorICAgIFNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRU
aW1lLCBkb3VibGUgaG9zdFRpbWUpCisgICAgU2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSkKKyAgICBTZXRWaWRlb0RpbWVuc2lvbnModWludDY0
X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0KQorICAgIFNldFNlZWthYmxlUmFuZ2VzVmVjdG9yKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVj
dG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcykKKyAgICBTZXRDYW5QbGF5RmFz
dFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQorICAgIFNldEF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBTZXRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWlu
dDY0X3Qgc2VsZWN0ZWRJbmRleCkKKyAgICBTZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpCisgICAgU2V0RHVyYXRpb24odWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgZHVyYXRpb24pCisgICAgU2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaXNQbGF5aW5nLCBkb3VibGUgcmF0ZSkKKyAgICBTZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWlu
dDY0X3QgY29udGV4dElkLCB1aW50MzJfdCB2aWRlb0xheWVySUQsIFdlYkNvcmU6OkludFJlY3Qg
aW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3RvciwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFs
bG93T3B0aW1pemVkRnVsbHNjcmVlbikKKyAgICBFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKQorICAgIEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SW50UmVjdCBmaW5hbFJlY3QpCisgICAgQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKQorICAgIFByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQogfQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Lm1tCmluZGV4IDBmZWU3NDMwZjlmMTFkMmI3ZGIxMDMwMTJmZDA5
ZmJhZTRhYjAwMDUuLjg5MTc0MWEzMzJjNGNhZTNhODM1MzQzZWUxMmRhN2M0NDRiNmNmNDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tCkBAIC01NSw2ICs1NSwxNDggQEAgUGFzc1JlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6Y3JlYXQKIAogI2Vsc2UKIAorI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpw
bGF5KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnBsYXkobV9j
b250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cGF1
c2UoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGF1c2UobV9j
b250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dG9n
Z2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikK
KyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyhtX2NvbnRleHRJZCk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmcoKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZW5kU2NydWJiaW5nKG1fY29udGV4
dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNlZWtUb1Rp
bWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2Vy
LT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250ZXh0SWQsIHRpbWUpOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0Zv
cndhcmQoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YmVnaW5T
Y2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5h
Z2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZChtX2NvbnRleHRJ
ZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjplbmRTY2Fubmlu
ZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY2Fubmlu
ZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJD
b3JlOjpGbG9hdFJlY3QgZnJhbWUpCit7CisgICAgbV92aWRlb0xheWVyRnJhbWUgPSBmcmFtZTsK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFZpZGVvTGF5ZXJGcmFt
ZShtX2NvbnRleHRJZCwgZnJhbWUpOworfQorCitXZWJDb3JlOjpGbG9hdFJlY3QgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyRnJhbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ZpZGVvTGF5ZXJGcmFtZTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBtX3ZpZGVvTGF5ZXJHcmF2aXR5
ID0gZ3Jhdml0eTsKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFZp
ZGVvTGF5ZXJHcmF2aXR5KG1fY29udGV4dElkLCBncmF2aXR5KTsKK30KKworV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OnZpZGVvTGF5ZXJHcmF2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWRl
b0xheWVyR3Jhdml0eTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCit7CisgICAgaWYgKG1f
bWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKG1fY29u
dGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZWxlY3RMZWdpYmxlTWVkaWFPcHRp
b24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9jb250ZXh0SWQsIG1vZGUp
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkU2V0dXBGdWxs
c2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZFNl
dHVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRGdWxsc2NyZWVu
KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZEV4aXRGdWxs
c2NyZWVuKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5mdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUobV9jb250ZXh0SWQpOworfQorCisjcHJhZ21hIG1hcmsg
LSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKwogUGFzc1JlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y3Jl
YXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShwYWdlKSk7CkBAIC02NCw4ICsyMDYsNiBAQCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eShXZWJQYWdlUHJveHkmIHBhZwogICAgIDogbV9wYWdlKCZwYWdlKQogewogICAgIG1fcGFnZS0+
cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0
aGlzKTsKLSAgICBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKLSAgICBzZXRXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKIH0KIAogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCkKQEAgLTc3
LDM3ICsyMTcsMTE3IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6fldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6aW52YWxpZGF0ZSgpOwotCiAgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgbV9wYWdlID0gbnVsbHB0
cjsKIAotICAgIFttX2xheWVySG9zdCByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgbV9sYXll
ckhvc3QuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVl
cygpKSB7CisgICAgICAgIGF1dG8mIG1vZGVsID0gc3RkOjpnZXQ8MD4odHVwbGUpOworICAgICAg
ICBhdXRvJiBpbnRlcmZhY2UgPSBzdGQ6OmdldDwxPih0dXBsZSk7CisKKyAgICAgICAgaW50ZXJm
YWNlLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIFttb2RlbC0+bGF5ZXJIb3N0KCkgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOworICAgICAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0KG51bGxwdHIpOworICAg
IH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpCit7CisgICAg
Zm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKKyAgICAgICAgc3RkOjpn
ZXQ8MT4odHVwbGUpLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK2Jvb2wg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBs
ZSktPmhhc01vZGUobW9kZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3Rvciwg
SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2Rl
LCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkgY29uc3QK
K3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAg
ICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRp
bWl6ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VU
dXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJm
YWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRl
KCp0aGlzLCBjb250ZXh0SWQpOworICAgIFJlZjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQ6OmNyZWF0ZSgpOworCisgICAgaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bCgmbW9kZWwuZ2V0KCkpOworICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hh
bmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUo
V1RGOjptb3ZlKG1vZGVsKSwgV1RGOjptb3ZlKGludGVyZmFjZSkpOworfQorCitXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQs
IE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZh
Y2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30K
KworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4g
KnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCYgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQorewor
ICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElk
KSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNj
cmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2Fs
ZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKIHsKICAgICBBU1NFUlQo
dmlkZW9MYXllcklEKTsKLSAgICBtX2xheWVySG9zdCA9IFdLTWFrZVJlbmRlckxheWVyKHZpZGVv
TGF5ZXJJRCk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9k
ZWw7CisgICAgUmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
PiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBtb2RlbC0+c2V0SW5pdGlhbFZpZGVv
TGF5ZXJGcmFtZShpbml0aWFsUmVjdCk7CisgICAgbW9kZWwtPnNldExheWVySG9zdChXS01ha2VS
ZW5kZXJMYXllcih2aWRlb0xheWVySUQpKTsKICAgICBpZiAoaG9zdGluZ0RldmljZVNjYWxlRmFj
dG9yICE9IDEpIHsKICAgICAgICAgLy8gSW52ZXJ0IHRoZSBzY2FsZSB0cmFuc2Zvcm0gYWRkZWQg
aW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0Mj4uCiAgICAg
ICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEgLyBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3I7Ci0g
ICAgICAgIFttX2xheWVySG9zdCBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShp
bnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwgMSldOworICAgICAgICBbbW9kZWwtPmxheWVySG9z
dCgpIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwgaW52
ZXJzZVNjYWxlLCAxKV07CiAgICAgfQogCi0gICAgbV92aWRlb0xheWVyRnJhbWUgPSBpbml0aWFs
UmVjdDsKLQogICAgIFVJVmlldyAqcGFyZW50VmlldyA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLnJlbW90ZUxheWVyVHJl
ZUhvc3QoKS5yb290TGF5ZXIoKTsKLSAgICBzZXR1cEZ1bGxzY3JlZW4oKm1fbGF5ZXJIb3N0Lmdl
dCgpLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYWxsb3dP
cHRpbWl6ZWRGdWxsc2NyZWVuKTsKKyAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNjcmVlbigqbW9k
ZWwtPmxheWVySG9zdCgpLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgdmlkZW9GdWxsc2NyZWVu
TW9kZSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlhRWxl
bWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxz
Y3JlZW5Nb2RlQ2hhbmdlZChtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgZW5zdXJlSW50
ZXJmYWNlKGNvbnRleHRJZCkucmVzZXRNZWRpYVN0YXRlKCk7CiB9Ci0gICAgCi12b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0U2Vla2FibGVSYW5nZXNWZWN0b3IoY29uc3Qg
VmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+JiByYW5nZXMpCisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQoreworICAgIGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpLnNldEN1cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBob3N0VGltZSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRCdWZmZXJlZFRp
bWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIGVuc3Vy
ZUludGVyZmFjZShjb250ZXh0SWQpLnNldEJ1ZmZlcmVkVGltZShidWZmZXJlZFRpbWUpOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9EaW1lbnNpb25z
KHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRWaWRlb0Rp
bWVuc2lvbnMoaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0U2Vla2FibGVSYW5nZXNWZWN0b3IodWludDY0X3QgY29u
dGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzKQogewogICAg
IFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcykKQEAgLTExOCwxMTggKzMzOCwxNjQg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFNlZWthYmxlUmFuZ2Vz
VmVjdG9yKGNvbnN0IFZlY3RvcjxzdGQ6OnAKICAgICAgICAgdGltZVJhbmdlcy0+YWRkKHJhbmdl
LmZpcnN0LCByYW5nZS5zZWNvbmQpOwogICAgIH0KIAotICAgIHNldFNlZWthYmxlUmFuZ2VzKCp0
aW1lUmFuZ2VzKTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRTZWVrYWJsZVJh
bmdlcygqdGltZVJhbmdlcyk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVl
KQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldENhblBsYXlGYXN0UmV2ZXJz
ZSh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRB
dWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxTdHJp
bmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAgZW5zdXJlSW50ZXJm
YWNlKGNvbnRleHRJZCkuc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucywgc2Vs
ZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9y
PFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVJ
bnRlcmZhY2UoY29udGV4dElkKS5zZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlv
bnMsIHNlbGVjdGVkSW5kZXgpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6c2V0RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXMoYm9vbCBlbmFibGVkLCB1aW50MzJf
dCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5n
IGxvY2FsaXplZERldmljZU5hbWUpCiB7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4odGFyZ2V0VHlw
ZSk7Ci0gICAgCiAgICAgQVNTRVJUKHR5cGUgPT0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OjpUYXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZTo6VGFyZ2V0VHlwZVRWT3V0IHx8IHR5cGUgPT0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
OjpUYXJnZXRUeXBlTm9uZSk7CiAgICAgCi0gICAgc2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVk
LCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKS5zZXRFeHRlcm5hbFBsYXliYWNrKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5h
bWUpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpzZXREdXJhdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBkdXJhdGlvbikK
IHsKLSAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKTsKLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZShpc1ZpZXdWaXNpYmxlKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuc2V0RHVyYXRpb24oZHVyYXRpb24pOwog
fQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGlubGlu
ZVJlY3QpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRSYXRlKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKQogewotICAgIG1f
cGFnZS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7Ci0gICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxp
bmVSZWN0KTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRSYXRlKGlzUGxheWlu
ZywgcmF0ZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1
ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RXhpdEZ1bGxzY3Jl
ZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50
ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgaW50ZXJmYWNlLmVudGVyRnVsbHNjcmVlbigpOworCisg
ICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNjcmVlbiBtb2Rl
IGF0IGEgdGltZToKKyAgICBmb3IgKGF1dG8mIGNvbnRleHRQYWlyIDogbV9jb250ZXh0TWFwKSB7
CisgICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29udGV4dFBhaXIua2V5OworICAgICAg
ICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6OmdldDwxPihjb250ZXh0UGFp
ci52YWx1ZSk7CisgICAgICAgIGlmIChvdGhlckludGVyZmFjZS0+aGFzTW9kZShpbnRlcmZhY2Uu
bW9kZSgpKSkKKyAgICAgICAgICAgIG90aGVySW50ZXJmYWNlLT5yZXF1ZXN0SGlkZUFuZEV4aXRG
dWxsc2NyZWVuKCk7CisgICAgfQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SW50UmVj
dCBmaW5hbFJlY3QpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAg
ICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpCiB7Ci0gICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hdOwotICAgIFttX2xheWVySG9z
dCByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgbV9sYXllckhvc3QuY2xlYXIoKTsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZENsZWFu
dXBGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGVuc3VyZUludGVyZmFjZShj
b250ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0KQogewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkU2V0
dXBGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+ZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKCk7CisKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5w
cmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQorI3By
YWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3QgY29udGV4dElkKQog
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
RGlkRW50ZXJGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+ZGlk
RW50ZXJGdWxsc2NyZWVuKCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpQbGF5KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cGxheSgpCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cGF1c2UodWludDY0X3QgY29udGV4dElkKQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UGxh
eSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBhdXNlKCkK
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSh1
aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpQYXVzZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlRvZ2dsZVBsYXlT
dGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUoKQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6VG9nZ2xlUGxheVN0YXRlKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6QmVnaW5TY3J1YmJpbmco
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcoKQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkJl
Z2luU2NydWJiaW5nKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RW5kU2NydWJiaW5nKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6ZW5kU2NydWJiaW5nKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpFbmRTY3J1YmJp
bmcoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGltZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQogewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2Vla1RvVGlt
ZSh0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGYXN0U2Vlayhjb250ZXh0SWQsIHRpbWUpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZhc3RTZWVrKHRp
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdGb3J3YXJkKGNvbnRleHRJZCksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNj
YW5uaW5nRm9yd2FyZCgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZChj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6QmVn
aW5TY2FubmluZ0JhY2t3YXJkKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RW5kU2Nhbm5pbmcoY29udGV4
dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjplbmRTY2FubmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkVuZFNjYW5u
aW5nKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi1GbG9hdFJlY3QgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5Ojp2aWRlb0xheWVyRnJhbWUoKSBjb25zdAordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7
Ci0gICAgcmV0dXJuIG1fdmlkZW9MYXllckZyYW1lOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkU2V0dXBGdWxsc2NyZWVuKGNvbnRleHRJ
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZSkKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgYXV0byYgbW9kZWwgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpOwor
CisgICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hdOworICAgIFttb2RlbC5sYXllckhvc3QoKSByZW1v
dmVGcm9tU3VwZXJsYXllcl07CisgICAgbW9kZWwuc2V0TGF5ZXJIb3N0KG51bGxwdHIpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkQ2xl
YW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisKKyAgICBtX2Nv
bnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4dElkLCBXZWJD
b3JlOjpGbG9hdFJlY3QgZnJhbWUpCiB7Ci0gICAgbV92aWRlb0xheWVyRnJhbWUgPSBmcmFtZTsK
ICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+IDkwMDAwCiAgICAgICAgIEJLU0FuaW1hdGlvbkZlbmNlSGFuZGxlKiBzeW5jaHJvbml6
YXRpb25GZW5jZSA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVkRHJhd2luZ0ZlbmNlXTsKQEAgLTIz
OCwzMCArNTA0LDM2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRW
aWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lCiAgICAgICAgIG1hY2hfcG9y
dF9uYW1lX3QgZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURyYXdpbmdBY3Jvc3NQ
cm9jZXNzZXNdOwogI2VuZGlmCiAKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoZnJhbWUsIElQ
Qzo6QXR0YWNobWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0SWQsIGZyYW1l
LCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKICAgICB9CiB9CiAKLVdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp2aWRl
b0xheWVyR3Jhdml0eSgpIGNvbnN0Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCiB7Ci0gICAgcmV0dXJu
IG1fdmlkZW9MYXllckdyYXZpdHk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29udGV4dElkLCAo
dW5zaWduZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qg
Y29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsKLSAgICBtX3ZpZGVvTGF5ZXJHcmF2aXR5ID0g
Z3Jhdml0eTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSgodW5zaWduZWQpZ3Jhdml0eSksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6U2VsZWN0QXVkaW9NZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9w
YWdlLT5wYWdlSUQoKSk7CiB9Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2VsZWN0QXVkaW9NZWRpYU9wdGlvbihp
bmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGNvbnRleHRJ
ZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgaW5k
ZXgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9k
ZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChjb250ZXh0SWQsIG1vZGUp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgYm9vbCBpc1ZpZXdWaXNpYmxlID0gbV9wYWdlLT5pc1ZpZXdWaXNpYmxlKCk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCBpc1ZpZXdWaXNpYmxlKSwgbV9wYWdlLT5w
YWdlSUQoKSk7Cit9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIuaAppbmRleCBkMTNlNjIyYmMyN2E0OTI3N2M2OTEzM2QxZjNiMGQ0MzExYmJhZDQ2Li42
YWMzNmI5NzQ3NTQyMzM0NTJiYzBiYjZiYWIwYzBkYWY3ZDQwMDM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC01MSw1MyArNTIsMTIwIEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBMYXllckhvc3RpbmdDb250ZXh0OwogY2xhc3MgV2ViUGFnZTsKK2NsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAKLWNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UsIHByaXZhdGUg
SVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ+LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+
IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250
ZXh0SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAgIH0KKyAgICB2
aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7CisKKyAgICB2b2lk
IGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKworICAgIExheWVySG9zdGlu
Z0NvbnRleHQqIGxheWVySG9zdGluZ0NvbnRleHQoKSB7IHJldHVybiBtX2xheWVySG9zdGluZ0Nv
bnRleHQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRleHQoc3RkOjp1bmlx
dWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYpOworCisgICAgYm9vbCBpc0FuaW1hdGluZygp
IGNvbnN0IHsgcmV0dXJuIG1faXNBbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldElzQW5pbWF0aW5n
KGJvb2wgZmxhZykgeyBtX2lzQW5pbWF0aW5nID0gZmxhZzsgfQorCisgICAgYm9vbCB0YXJnZXRJ
c0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldElzRnVsbHNjcmVlbjsgfQorICAg
IHZvaWQgc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX3RhcmdldElzRnVsbHNj
cmVlbiA9IGZsYWc7IH0KKworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgZnVsbHNjcmVlbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxzY3JlZW5N
b2RlOyB9CisgICAgdm9pZCBzZXRGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIHsgbV9mdWxsc2NyZWVuTW9kZSA9IG1vZGU7
IH0KKworICAgIGJvb2wgaXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9pc0Z1bGxzY3Jl
ZW47IH0KKyAgICB2b2lkIHNldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV9pc0Z1bGxzY3Jl
ZW4gPSBmbGFnOyB9CisKK3ByaXZhdGU6CisgICAgLy8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlCisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyZWRUaW1lKGRvdWJsZSkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXli
YWNrUmF0ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhi
b29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCB2
YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxlTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90
IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFBs
YXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIFdURjo6U3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworCisgICAgV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiwgdWludDY0X3Qg
Y29udGV4dElkKTsKKworICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1fbWFuYWdlcjsK
KyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0
aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OworICAgIGJvb2wgbV9pc0FuaW1hdGlu
ZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3RhcmdldElzRnVsbHNjcmVlbiB7IGZhbHNlIH07Cisg
ICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1bGxz
Y3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU5vbmUgfTsKKyAgICBib29sIG1faXNGdWxsc2NyZWVuIHsgZmFsc2UgfTsKK307CisKK2NsYXNz
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gY3JlYXRl
KFBhc3NSZWZQdHI8V2ViUGFnZT4pOwogICAgIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIoKTsKICAgICAKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKLSAgICAKKworICAgIC8vIEludGVy
ZmFjZSB0byBDaHJvbWVDbGllbnQKICAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkg
Y29uc3Q7CiAgICAgdm9pZCBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9G
dWxsc2NyZWVuTW9kZSk7CiAgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVt
ZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmKTsKICAgICAKIHByb3RlY3RlZDoKKyAgICBm
cmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsKKwogICAgIGV4
cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdlPik7Ci0g
ICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgcmhzKSBvdmVy
cmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpFdmVudExpc3RlbmVyKj4odGhpcykg
PT0gJnJoczsgfQotICAgIAotICAgIC8vIEZ1bGxzY3JlZW5JbnRlcmZhY2UKLSAgICB2aXJ0dWFs
IHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldER1
cmF0aW9uKGRvdWJsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRUaW1l
KGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNr
UmF0ZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRGltZW5zaW9ucyhib29s
IGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCB2YWx1
ZSkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5k
ZXgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZElu
ZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxQbGF5YmFjayhib29s
IGVuYWJsZWQsIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1Rh
cmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsKLQotICAgIC8v
IGFkZGl0aW9uYWwgaW5jb21pbmcKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVu
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhbnVwRnVs
bHNjcmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eUVudW0odW5z
aWduZWQpOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoYm9v
bCBpc1BhZ2VWaXNpYmxlKTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChXZWJD
b3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KTsKKyAgICB0
eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50PiwgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+
PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUgY3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbEludGVyZmFjZVR1
cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1cmVNb2RlbCh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAgLy8gSW50ZXJm
YWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKyAgICB2b2lkIHJlc2V0
TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0RHVyYXRpb24odWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUpOworICAgIHZvaWQgc2V0Q3VycmVudFRpbWUodWludDY0
X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKTsKKyAg
ICB2b2lkIHNldEJ1ZmZlcmVkVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJl
ZFRpbWUpOworICAgIHZvaWQgc2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5
aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOworICAgIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCk7CisgICAgdm9pZCBzZXRTZWVrYWJsZVJhbmdlcyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0
IFdlYkNvcmU6OlRpbWVSYW5nZXMmKTsKKyAgICB2b2lkIHNldENhblBsYXlGYXN0UmV2ZXJzZSh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0QXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
b3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBzZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQgc2V0RXh0ZXJu
YWxQbGF5YmFjayh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViQ29yZTo6V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpOworCisgICAgLy8gTWVzc2FnZXMgZnJvbSBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyAgICB2b2lkIHBsYXkodWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQ
bGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsK
KyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZXF1ZXN0RXhpdEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVl
bih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQs
IFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpOwor
ICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5z
aWduZWQgZ3Jhdml0eSk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVnaWJsZU1lZGlh
T3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgZnVs
bHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0
dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpOwogICAg
IAogICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFZpZGVvRWxl
bWVudD4gbV92aWRlb0VsZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0Nv
bnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKLSAgICAKLSAgICBib29sIG1faXNBbmltYXRp
bmc7Ci0gICAgYm9vbCBtX3RhcmdldElzRnVsbHNjcmVlbjsKLSAgICBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fZnVsbHNjcmVlbk1vZGU7Ci0gICAgYm9v
bCBtX2lzRnVsbHNjcmVlbjsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQq
LCB1aW50NjRfdD4gbV92aWRlb0VsZW1lbnRzOworICAgIEhhc2hNYXA8dWludDY0X3QsIE1vZGVs
SW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4IGQzYzY4YTM2
NmNmODE1NGVkZGRiMTg2ZGQyZTZjOTM0N2ZkYTUyYWIuLjAxM2RhM2VlNjIyNDVkMTQyNTJmY2Ix
NGEwYWI5ODMwYTA3NGVjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5p
bgpAQCAtMjIsMjYgKzIyLDI2IEBACiAKICNpZiBQTEFURk9STShJT1MpCiBtZXNzYWdlcyAtPiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIHsKLSAgICBQbGF5KCkKLSAgICBQYXVzZSgpCi0gICAg
VG9nZ2xlUGxheVN0YXRlKCkKLSAgICBCZWdpblNjcnViYmluZygpCi0gICAgRW5kU2NydWJiaW5n
KCkKLSAgICBTZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQotICAgIEZhc3RTZWVrKGRvdWJsZSB0aW1l
KQotICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLSAgICBCZWdpblNjYW5uaW5nQmFja3dhcmQo
KQotICAgIEVuZFNjYW5uaW5nKCkKLSAgICBSZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQotICAgIERp
ZFNldHVwRnVsbHNjcmVlbigpCi0gICAgRGlkRXhpdEZ1bGxzY3JlZW4oKQotICAgIERpZEVudGVy
RnVsbHNjcmVlbigpCi0gICAgRGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQotICAgIFNldFZpZGVvTGF5
ZXJGcmFtZUZlbmNlZChXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQg
ZmVuY2VQb3J0KQotICAgIFNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1bnNpZ25lZCBncmF2aXR5
KQotICAgIFNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi0gICAgU2VsZWN0
TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQotICAgIGZ1bGxzY3JlZW5Nb2RlQ2hh
bmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVv
RnVsbHNjcmVlbk1vZGUpCi0gICAgRnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGJvb2wgaXNQ
YWdlVmlzaWJsZSkKKyAgICBQbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQYXVzZSh1aW50
NjRfdCBjb250ZXh0SWQpCisgICAgVG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkK
KyAgICBCZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRW5kU2NydWJiaW5n
KHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwg
ZG91YmxlIHRpbWUpCisgICAgRmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGlt
ZSkKKyAgICBCZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQmVn
aW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFbmRTY2FubmluZyh1
aW50NjRfdCBjb250ZXh0SWQpCisgICAgUmVxdWVzdEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBEaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAg
IERpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRFbnRlckZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2
NF90IGNvbnRleHRJZCkKKyAgICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29u
dGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQ
b3J0KQorICAgIFNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250ZXh0SWQsIHVu
c2lnbmVkIGdyYXZpdHkpCisgICAgU2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250
ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQorICAgIFNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQorICAgIEZ1bGxzY3JlZW5Nb2RlQ2hhbmdl
ZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKKyAgICBGdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCiB9CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCmluZGV4IDQ1YTNlMjk4MjBlYjJmYzI3NTUzNzVkMmY0MTA5
MjAyNmJiYTg3ZGEuLjc1MTM0M2Q1NDM0ZWE2ZWQ4NDYxMmFkYjYzMDgzMjhjM2FkOTcwMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbQpAQCAtNjAsNiArNjAsOTcgQEAgc3RhdGljIEludFJlY3QgY2xp
ZW50UmVjdEZvckVsZW1lbnQoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1l
bnQtPmNsaWVudFJlY3QoKTsKIH0KIAorc3RhdGljIHVpbnQ2NF90IG5leHRDb250ZXh0SWQoKQor
eworICAgIHN0YXRpYyB1aW50NjRfdCBjb250ZXh0SWQgPSAwOworICAgIHJldHVybiArK2NvbnRl
eHRJZDsKK30KKworI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dAorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIs
IHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKKyAgICAsIG1f
Y29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKQoreworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVySG9zdGluZ0Nv
bnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYgY29udGV4dCkKK3sK
KyAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEY6Om1vdmUoY29udGV4dCk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6cmVzZXRNZWRpYVN0YXRlKCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnJlc2V0TWVkaWFTdGF0
ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+c2V0RHVyYXRpb24obV9jb250ZXh0SWQsIGR1cmF0aW9uKTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRDdXJyZW50
VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0Q3VycmVudFRpbWUobV9jb250ZXh0SWQs
IGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0OjpzZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldEJ1ZmZlcmVkVGltZSht
X2NvbnRleHRJZCwgYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0OjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1Jh
dGUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRSYXRlKG1f
Y29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlk
ZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0RpbWVuc2lvbnMobV9jb250ZXh0SWQsIGhhc1ZpZGVv
LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiByYW5n
ZXMpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRTZWVrYWJs
ZVJhbmdlcyhtX2NvbnRleHRJZCwgcmFuZ2VzKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCB2YWx1ZSkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldENhblBsYXlGYXN0UmV2
ZXJzZShtX2NvbnRleHRJZCwgdmFsdWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3Rv
cjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRBdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9ucyhtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhtX2NvbnRleHRJZCwgb3B0aW9ucywgc2Vs
ZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6c2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJhY2tUYXJn
ZXRUeXBlIHR5cGUsIFdURjo6U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7CisgICAgaWYg
KG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRFeHRlcm5hbFBsYXliYWNrKG1fY29u
dGV4dElkLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKK30KKworI3ByYWdt
YSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCiBQYXNzUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZShQYXNz
UmVmUHRyPFdlYlBhZ2U+IHBhZ2UpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2UpKTsKQEAgLTY3LDIwICsxNTgsNTkgQEAgUGFzc1JlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpj
cmVhdGUoUGFzc1JlZlAKIAogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcihQYXNzUmVmUHRyPFdlYlBhZ2U+IHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFn
ZS5nZXQoKSkKLSAgICAsIG1faXNBbmltYXRpbmcoZmFsc2UpCi0gICAgLCBtX3RhcmdldElzRnVs
bHNjcmVlbihmYWxzZSkKLSAgICAsIG1fZnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudDo6
VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpCi0gICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKIHsK
LSAgICBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UodGhpcyk7CiAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UtPnBhZ2VJRCgpLCAqdGhp
cyk7CiB9CiAKIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKCkKIHsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygp
KSB7CisgICAgICAgIGF1dG8gbW9kZWwgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIGF1
dG8gaW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4odHVwbGUpOworCisgICAgICAgIG1vZGVsLT5zZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7CisgICAgICAgIG1vZGVsLT5zZXRW
aWRlb0VsZW1lbnQobnVsbHB0cik7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7
CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV92aWRlb0VsZW1lbnRz
LmNsZWFyKCk7CisKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKK1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRl
TW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+
c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRl
cm5hbEhvc3RpbmdQcm9jZXNzKCkpOworICAgIG1vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2UoaW50ZXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUo
V1RGOjptb3ZlKG1vZGVsKSwgV1RGOjptb3ZlKGludGVyZmFjZSkpOworfQorCitXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwgTW9kZWxJbnRl
cmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0
SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCitXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAq
c3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7Cit9CisKK1dl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpz
dGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworI3By
YWdtYSBtYXJrIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6CisKIGJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKSBjb25zdAogewogICAgIHJl
dHVybiBTZXR0aW5nczo6YXZLaXRFbmFibGVkKCk7CkBAIC05MCw2NiArMjIwLDc5IEBAIHZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0Vs
ZW1lbnQoSFRNTFZpZGVvRWxlCiB7CiAgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1lZGlhRWxlbWVu
dDo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogCi0gICAgbV92aWRlb0VsZW1lbnQgPSAmdmlk
ZW9FbGVtZW50OworICAgIHVpbnQ2NF90IGNvbnRleHRJZDsKIAotICAgIG1fdGFyZ2V0SXNGdWxs
c2NyZWVuID0gdHJ1ZTsKLSAgICBtX2Z1bGxzY3JlZW5Nb2RlID0gbW9kZTsKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdmlkZW9FbGVtZW50cy5hZGQoJnZpZGVvRWxlbWVudCwgMCk7CisgICAgaWYg
KGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gbmV4dENvbnRleHRJZCgpOworICAgIGNvbnRleHRJZCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAKLSAgICBpZiAobV9pc0FuaW1hdGluZykKLSAgICAgICAgcmV0dXJuOworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVm
UHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBz
dGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRl
eHRJZCk7CiAKLSAgICBtX2lzQW5pbWF0aW5nID0gdHJ1ZTsKLSAgICBzZXRWaWRlb0VsZW1lbnQo
JnZpZGVvRWxlbWVudCk7CisgICAgaW50ZXJmYWNlLT5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4odHJ1
ZSk7CisgICAgaW50ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKKyAgICBtb2RlbC0+
c2V0VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1lbnQpOwogCi0gICAgbV9sYXllckhvc3RpbmdDb250
ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2Vz
cygpOwotICAgIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuID0gbV92aWRlb0VsZW1lbnQt
Pm1lZGlhU2Vzc2lvbigpLmFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4oKm1fdmlkZW9FbGVtZW50
LmdldCgpKTsKKyAgICBpZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKKworICAgIGJvb2wgYWxs
b3dPcHRpbWl6ZWRGdWxsc2NyZWVuID0gdmlkZW9FbGVtZW50Lm1lZGlhU2Vzc2lvbigpLmFsbG93
c0FsdGVybmF0ZUZ1bGxzY3JlZW4odmlkZW9FbGVtZW50KTsKICAgICAKLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2Ny
ZWVuV2l0aElEKG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCksIGNsaWVudFJlY3RG
b3JFbGVtZW50KCZ2aWRlb0VsZW1lbnQpLCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIG1f
ZnVsbHNjcmVlbk1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbiksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQoY29udGV4dElkLCBpbnRlcmZhY2UtPmxheWVy
SG9zdGluZ0NvbnRleHQoKS0+Y29udGV4dElEKCksIGNsaWVudFJlY3RGb3JFbGVtZW50KCZ2aWRl
b0VsZW1lbnQpLCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFjZS0+ZnVsbHNj
cmVlbk1vZGUoKSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVl
bkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JikKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChX
ZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPEhU
TUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVtZW50LnJlbGVhc2UoKTsK
LSAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZhbHNlOworICAgIEFTU0VSVChtX3ZpZGVvRWxl
bWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOworCisgICAgdWludDY0X3QgY29udGV4dElk
ID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKKyAgICBhdXRvJiBpbnRlcmZh
Y2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKIAotICAgIGlmIChtX2lzQW5pbWF0aW5n
KQorICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYg
KGludGVyZmFjZS5pc0FuaW1hdGluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lzQW5p
bWF0aW5nID0gdHJ1ZTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY2xpZW50UmVjdEZvckVsZW1lbnQodmlk
ZW9FbGVtZW50LmdldCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGludGVyZmFjZS5zZXRJ
c0FuaW1hdGluZyh0cnVlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4dElkLCBjbGllbnRSZWN0
Rm9yRWxlbWVudCgmdmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSgpCisjcHJhZ21hIG1h
cmsgSW50ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNv
bnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpS
ZXNldE1lZGlhU3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAgICAgCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlv
bikKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24odWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldER1cmF0aW9uKGR1cmF0aW9uKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldER1cmF0aW9uKGNvbnRleHRJZCwgZHVyYXRpb24pLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpz
ZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEN1
cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OlNldEN1cnJlbnRUaW1lKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRpbWUpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRC
dWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6c2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZl
cmVkVGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6U2V0QnVmZmVyZWRUaW1lKGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpTZXRCdWZmZXJlZFRpbWUoY29udGV4dElkLCBidWZmZXJlZFRpbWUpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRS
YXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnNldFJhdGUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWlu
ZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRSYXRlKGlzUGxheWluZywgcGxheWJhY2tS
YXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFJhdGUoY29udGV4dElkLCBpc1BsYXlpbmcs
IHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRW
aWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoaGFzVmlkZW8sIHdp
ZHRoLCBoZWlnaHQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0VmlkZW9EaW1lbnNpb25zKGNv
bnRleHRJZCwgaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0K
ICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0U2Vla2FibGVSYW5nZXMo
Y29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcykKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c2V0U2Vla2FibGVSYW5nZXModWludDY0X3QgY29udGV4dElkLCBjb25z
dCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQogewogICAgIFZlY3RvcjxzdGQ6OnBh
aXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7CiAgICAgCkBAIC0xNjAsMzAgKzMwMywx
MDQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdlcyhj
b25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW0KICAgICAgICAgcmFuZ2VzVmVjdG9yLmFwcGVu
ZChzdGQ6OnBhaXI8ZG91YmxlLGRvdWJsZT4oc3RhcnQsIGVuZCkpOwogICAgIH0KIAotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRT
ZWVrYWJsZVJhbmdlc1ZlY3RvcihXVEY6Om1vdmUocmFuZ2VzVmVjdG9yKSksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpTZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcihjb250ZXh0SWQsIFdURjo6bW92ZShy
YW5nZXNWZWN0b3IpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldENhblBsYXlGYXN0UmV2ZXJzZSh1aW50NjRfdCBj
b250ZXh0SWQsIGJvb2wgdmFsdWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldENhblBsYXlGYXN0UmV2ZXJzZSh2YWx1ZSks
IG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRDYW5QbGF5RmFzdFJldmVyc2UoY29udGV4dElkLCB2
YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpTZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZElu
ZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25z
KGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVj
dGVkSW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0TGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQo
KSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OlNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29udGV4dElkLCBvcHRpb25z
LCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdGFyZ2V0
VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnNldEV4dGVybmFsUGxheWJhY2sodWludDY0X3QgY29udGV4dElkLCBib29sIGVu
YWJsZWQsIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1Rhcmdl
dFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCiB7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEV4
dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKGVuYWJsZWQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0
YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpT
ZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyhjb250ZXh0SWQsIGVuYWJsZWQsIHN0YXRpY19j
YXN0PHVpbnQzMl90Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+
cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRT
ZXR1cEZ1bGxzY3JlZW4oKQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5w
bGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1c2UodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGF1c2UoKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp0b2dnbGVQbGF5U3RhdGUodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9nZ2xlUGxheVN0
YXRlKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY3J1YmJp
bmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVn
aW5TY3J1YmJpbmcoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbmRT
Y3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJ
ZCkuZW5kU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQoreworICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1l
KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZmFzdFNlZWsodGltZSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2Fubmlu
Z0ZvcndhcmQoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdpblNj
YW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNv
bnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmcoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmVxdWVzdEV4aXRGdWxsc2NyZWVuKCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAgIGVuc3VyZU1v
ZGVsKGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9G
dWxsc2NyZWVuTW9kZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKK30KKworI3ByYWdtYSBtYXJrIE1lc3Nh
Z2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjoKKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewog
ICAgIFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CiAjaWZuZGVm
IE5ERUJVRwpAQCAtMjAwLDgzICs0MTcsMTE4IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKICAgICAvLyBUaGlzIHNjYWxlIGZhY3RvciBpcyBp
bnZlcnRlZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgogICAgIGZsb2F0IGhvc3RpbmdTY2FsZUZh
Y3RvciA9IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBbdmlkZW9MYXllciBzZXRU
cmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0b3IsIGhvc3Rp
bmdTY2FsZUZhY3RvciwgMSldOwotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExh
eWVyKHZpZGVvTGF5ZXIpOwogCi0gICAgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9MYXll
cik7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2Rl
bDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJm
YWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRl
cmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgp
LT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7CisgICAgbW9kZWwtPnNldFZpZGVvRnVsbHNjcmVl
bkxheWVyKHZpZGVvTGF5ZXIpOworCiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIAotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpF
bnRlckZ1bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVlbihj
b250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAg
ICBtX2lzQW5pbWF0aW5nID0gZmFsc2U7Ci0gICAgbV9pc0Z1bGxzY3JlZW4gPSBmYWxzZTsKKyAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7Cisg
ICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShj
b250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisgICAg
aW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYgKGludGVyZmFjZS0+
dGFyZ2V0SXNGdWxsc2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Rhcmdl
dElzRnVsbHNjcmVlbikKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50
ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOworICAgIGlmICghdmlkZW9FbGVtZW50KQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91
c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdl
YlRocmVhZFJ1biheIHsKLSAgICAgICAgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVu
dCgqbV92aWRlb0VsZW1lbnQpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7CisgICAgV2ViVGhy
ZWFkUnVuKFtzdHJvbmdUaGlzLCB2aWRlb0VsZW1lbnRdIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+
ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50KTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0RnVsbHNjcmVl
bigpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOwot
ICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBw
cm90ZWN0KHRoaXMpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2Ny
ZWVuTGF5ZXIobmlsKTsKIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57Ci0gICAgICAgIGlmIChtX2xheWVySG9zdGluZ0NvbnRleHQpIHsKLSAgICAgICAg
ICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKG51bGxwdHIpOwotICAgICAg
ICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgY29udGV4dElkLCBpbnRl
cmZhY2VdIHsKKyAgICAgICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKSB7
CisgICAgICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExh
eWVyKG51bGxwdHIpOworICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3RpbmdDb250
ZXh0KG51bGxwdHIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0gICAgICAgICAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Q2xlYW51cEZ1bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgICAgIHByb3RlY3Qu
Y2xlYXIoKTsKKyAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fcGFnZSkKKyAgICAgICAgICAgIHN0
cm9uZ1RoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBzdHJvbmdUaGlzLT5tX3BhZ2Ut
PnBhZ2VJRCgpKTsKICAgICB9KTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9p
c0FuaW1hdGluZyA9IGZhbHNlOwotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7Ci0gICAgCi0g
ICAgc2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJm
YWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZh
Y2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNldElzRnVsbHNjcmVl
bihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
ID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOworCisgICAgbW9kZWwtPnNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKG5pbCk7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxl
bWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKworICAgIGlmICghaW50ZXJmYWNlLT50YXJn
ZXRJc0Z1bGxzY3JlZW4oKSkgeworICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxw
dHIpOworICAgICAgICBtb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKG51bGxw
dHIpOworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV92aWRlb0Vs
ZW1lbnRzLnJlbW92ZSh2aWRlb0VsZW1lbnQuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHRNYXAu
cmVtb3ZlKGNvbnRleHRJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIW1f
dGFyZ2V0SXNGdWxsc2NyZWVuKQorICAgIGlmICghdmlkZW9FbGVtZW50KQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBlbnRlciBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSBy
ZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJl
YWRSdW4oXiB7Ci0gICAgICAgIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCpt
X3ZpZGVvRWxlbWVudCwgbV9mdWxsc2NyZWVuTW9kZSk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIo
KTsKKyAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVl
c3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgorICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywg
dmlkZW9FbGVtZW50LCBtb2RlXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVyVmlkZW9GdWxs
c2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQsIG1vZGUpOwogICAgIH0pOwogfQog
ICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyR3Jhdml0
eUVudW0odW5zaWduZWQgZ3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jh
dml0eSkKIHsKLSAgICBzZXRWaWRlb0xheWVyR3Jhdml0eSgoV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNl
dFZpZGVvTGF5ZXJHcmF2aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5
KWdyYXZpdHkpOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxs
c2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoYm9vbCBpc1BhZ2VWaXNpYmxlKQordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCiB7CisgICAgYXV0byYgbW9kZWwgPSBlbnN1
cmVNb2RlbChjb250ZXh0SWQpOworCiAgICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQotICAgICAgICBt
X3ZpZGVvRWxlbWVudC0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2UpOwotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpQcmVw
YXJlZFRvUmV0dXJuVG9JbmxpbmUodHJ1ZSwgY2xpZW50UmVjdEZvckVsZW1lbnQobV92aWRlb0Vs
ZW1lbnQuZ2V0KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIG1vZGVsLnZpZGVvRWxl
bWVudCgpLT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShmYWxzZSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9S
ZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIHRydWUsIGNsaWVudFJlY3RGb3JFbGVtZW50KG1vZGVs
LnZpZGVvRWxlbWVudCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogICAgIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoV2ViQ29yZTo6
RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNl
UG9ydCkKIHsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBp
bnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFu
ZEludGVyZmFjZShjb250ZXh0SWQpOworCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwogICAg
IFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAgIGlmIChtX2xheWVy
SG9zdGluZ0NvbnRleHQpCi0gICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0RmVuY2VQ
b3J0KGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIHNldFZpZGVvTGF5ZXJGcmFtZShib3VuZHMpOwor
ICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAgICAgaW50ZXJm
YWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgp
KTsKKyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7CiAgICAgbWFjaF9wb3J0
X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7CiAgICAgW0NB
VHJhbnNhY3Rpb24gY29tbWl0XTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250864</attachid>
            <date>2015-04-15 14:33:57 -0700</date>
            <delta_ts>2015-04-15 15:14:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143680-20150415143300.patch</filename>
            <type>text/plain</type>
            <size>95521</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyODYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI0YmQ1MjFkMTgyMzIy
YTU1OGUxNGE1YjViZDI5NWI1ODBkOWFlZi4uY2QzNzgxMmI3MjAwM2Y4NDJjNTlkMTViOGIyZTEw
NDE5MjlmMjdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDE1LTA0LTEzICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0
YW5lb3VzbHkgZXhpdGluZy1hbmQtZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci9Qcm94eSBiZWNvbWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVu
dCBpdCByZXByZXNlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQzNjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIGdldHRlcnMgZm9yIHRoZSB2aWRlbydzIGZ1bGxzY3JlZW4gbGF5ZXIsIGFu
ZCBiZSBtb3JlIHRvbGVyYW50IGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCBzZXRWaWRlb0VsZW1l
bnQoKSBhbmQgCisgICAgICAgIHNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSBhcmUgY2Fs
bGVkLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp2aWRlb0Z1bGxzY3JlZW5MYXllcik6IEFkZGVkIHNpbXBs
ZSBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6dmlkZW9FbGVtZW50KTogQWRkZWQgc2ltcGxlIGdldHRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpOiBEZWxldGVkLiBNb3ZlZCB0byAubW0gZmlsZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW06CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQpOiBJbml0aWFsaXplIGl2YXJzIGluIHRo
ZSAuaCBmaWxlLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSk6IENhbGwgdGhvc2UgbWV0aG9kcyBza2lw
cGVkIGluIHNldFZpZGVvRWxlbWVudCgpCisgICAgICAgICAgICBpZiBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSBoYWQgbm90IHlldCBiZWVuIHNldC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOiBOdWxsLWNoZWNrIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9FbGVt
ZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQz
Njc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA1NTJhMjJlNzdkZmY1MWE4NDlmOGQxNjQ0NjI3OWQ2Y2RhZTE5
OTNiLi5hOTdmYWExNDRlMTU5YTU3OWZiZGYzYWYzZTgwOTlmMWE2NDRhOGMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsMjAwIEBACiAyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0YW5lb3VzbHkgZXhpdGluZy1hbmQt
ZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci9Qcm94eSBiZWNv
bWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVudCBpdCByZXByZXNlbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG9yaWdpbmFs
IGFzc3VtcHRpb24gb2YgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBhbmQgLVByb3h5IHdhcyB0
aGF0IHRoZSB0d28gY2xhc3NlcyB3b3VsZCByZXByZXNlbnQgYQorICAgICAgICBzaW5nbGUgdmlk
ZW8gZWxlbWVudCBhbmQgaXRzIGZ1bGwgc2NyZWVuIHN0YXRlLiBXaXRoIG11bHRpcGxlIGFuaW1h
dGlvbnMgaW4gYW5kIG91dCBvZiBmdWxsc2NyZWVuIGNvbWJpbmVkIHdpdGgKKyAgICAgICAgbXVs
dGlwbGUgZnVsbHNjcmVlbiBtb2RlcywgdGhpcyBhc3N1bXB0aW9uIG5vIGxvbmdlciBob2xkcyB0
cnVlLgorCisgICAgICAgIFJhdGhlciB0aGFuIGhhdmluZyBhIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIgd2hpY2ggL2lzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQsIHRo
ZSBtYW5hZ2VyIG5vdworICAgICAgICAvaGFzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQgKG9yIGhhcyBtYW55IHN1Y2ggbW9kZWxzKS4gRGl0dG8gZm9yIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgYW5kCisgICAgICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LiBUaGUgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgc3RpbGwgbmVlZHMgYSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB0bworICAgICAgICBjb21tdW5pY2F0ZSB3aXRoLCBzbyBh
IG5ldyB3cmFwcGVyIGNsYXNzIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0LiBEaXR0byBmb3IKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQgYW5kIHRoZSBuZXcgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dC4gVGhlc2UgY29udGV4dCBjbGFzc2VzCisgICAgICAgIGFyZSBwYWlyZWQg
YW5kIHNoYXJlIGEgY29udGV4dElkLCBhbGxvd2luZyB0aGUgbWFuYWdlciBhbmQgaXRzIHByb3h5
IHRvIHJvdXRlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIFVJUHJvY2VzcydzCisgICAgICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IHRvLWFuZC1mcm9tIHRoZSBXZWJQcm9jZXNzJ3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuCisKKyAgICAgICAgQm90aCB0aGUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCB0YWtlIGEgYmFjay1wb2ludGVyIHRvIHRoZWlyCisgICAgICAgIG1h
bmFnZXIgb3IgbWFuYWdlciBwcm94eSwgYW5kIGVhY2ggbWV0aG9kIG9uIHRoZSBjb250ZXh0IHNp
bXBseSBjYWxscyB0aGUgbWF0Y2hpbmcgbWV0aG9kIG9uIHRoZSBtYW5hZ2VyIGFuZAorICAgICAg
ICBwYXNzZXMgaXRzIGNvbnRleHRJZCBhcyBhIHBhcmFtZXRlci4KKworICAgICAgICBCb3RoIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IHBhc3MgdGhhdCBjb250ZXh0SWQgaW4gZWFjaCBvZiB0aGVpcgorICAgICAgICBj
cm9zcy1wcm9jZXNzIG1lc3NhZ2VzLgorCisgICAgICAgIE9uIHRoZSBvdGhlciBzaWRlLCB0aGUg
bWFuYWdlciBhbmQgcHJveHkgYWxzbyBoYXZlIGEgbWFwIGJldHdlZW4gY29udGV4dElkcyBhbmQg
dGhlaXIgbWF0Y2hpbmcKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQgKGluIHRoZSBjYXNlIG9mIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpIG9yCisgICAgICAg
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IChpbiB0aGUgY2FzZSBvZiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpLgorCisgICAgICAgIFdoaWxlIHRoaXMgY2hhbmdlIGlz
IGxhcmdlIGJ5IExvQywgaXQgaXMgYWxtb3N0IGVudGlyZWx5IGJvaWxlcnBsYXRlLiAgVGhlIG5l
dyBhbmQgaW50ZXJlc3RpbmcgcGllY2VzIGFyZSB0aGVzZToKKworICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSk6IE5vIGxvbmdlciBhIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRh
dGUpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50ZXJmYWNlcywgaW52YWxpZGF0aW5n
IGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gUmV0dXJuIGEgbmV3IG1vZGVsIGFuZCBp
bnRlcmZhY2UgdHVwbGUuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gTGF6aWx5IGNyZWF0ZSwg
YW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5ldyBtb2RlbCBhbmQg
aW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjplbnN1cmVNb2RlbCk6IFJldHVybiB0aGUgbW9kZWwgaGFsZiBvZiBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6IFJldHVybiB0aGUgaW50ZXJmYWNlIGhhbGYg
b2YgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOiBXYWxrIHRocm91Z2ggdGhl
IG91dHN0YW5kaW5nIGludGVyZmFjZSBvYmplY3RzLCBhbmQgaWYgCisgICAgICAgICAgICBhbnkg
aGF2ZSBhIGZ1bGxzY3JlZW4gbW9kZSB3aGljaCBtYXRjaGVzIHRoZSBhYm91dC10by1iZS1mdWxs
c2NyZWVuIGludGVyZmFjZSwgcmVxdWVzdCB0aGF0IHRoYXQgb3RoZXIgaW50ZXJmYWNlCisgICAg
ICAgICAgICBleGl0IGZ1bGxzY3JlZW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6bmV4dENvbnRleHRJZCk6
IFN0YXRpYywgaW5jcmVtZW50aW5nIGNvdW50ZXIgdXNlZCBhcyBhIGNvbnRleHRJZCBzb3VyY2Uu
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIpOiBObyBsb25nZXIgYSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50
ZXJmYWNlcywgaW52YWxpZGF0aW5nIGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKTogQWRkZWQuIFJldHVybiBh
IG5ldyBtb2RlbCBhbmQgaW50ZXJmYWNlIHR1cGxlLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6ICBBZGRlZC4gTGF6
aWx5IGNyZWF0ZSwgYW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5l
dyBtb2RlbCBhbmQgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwpOiBSZXR1cm4gdGhlIG1vZGVsIGhhbGYgb2Yg
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKTogUmV0dXJuIHRoZSBpbnRlcmZhY2UgaGFs
ZiBvZiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSgpLgorCisgICAgICAgIE5ldyBjbGFzc2VzIGFu
ZCBtZXRob2RzIHdoaWNoIGp1c3QgZm9yd2FyZCBvbiB0byB0aGVpciBvd25pbmcgb2JqZWN0czoK
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpsYXllckhvc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldExheWVySG9zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0SW5pdGlhbFZp
ZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpiZWdpblNj
cnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZW5k
U2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0Ojp2aWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpm
dWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
bGF5ZXJIb3N0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ6OmlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0SXNBbmltYXRpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp0YXJnZXRJc0Z1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRUYXJnZXRJc0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpmdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEZ1bGxzY3JlZW5Nb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
aXNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6c2V0SXNGdWxsc2NyZWVuKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMYXllckhvc3RpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEJ1ZmZlcmVkVGlt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldFJhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRTZWVrYWJsZVJhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldENhblBsYXlGYXN0
UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorCisgICAgICAgIENyb3NzLXByb2Nlc3Mg
bWV0aG9kcyB3aGljaCBub3cgdGFrZSBhIGNvbnRleHRJZCBwYXJhbWV0ZXI6CisKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXR1cEZ1bGxzY3JlZW5XaXRoSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEJ1ZmZlcmVkVGltZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9E
aW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRBdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRSYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lu
bGluZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWspOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpi
ZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0
VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJGcmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dmlk
ZW9MYXllckdyYXZpdHkpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEJ1ZmZlcmVkVGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldENhblBs
YXlGYXN0UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEV4dGVybmFs
UGxheWJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpw
bGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1c2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp0b2dnbGVQbGF5
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdp
blNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2Vs
ZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVh
bnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4pOiBEZWxldGVkLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4
aXRWaWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9F
bGVtZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzNjc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggNDUyYzM0
M2YwYTg1OGQ5YWE3MGU5Yzc0MDk5OTZkNGE3Njg5MTRiMy4uMTQwOWU2YjBiNjA3NDExMWU2MWNi
OTFhNjM3NTM2OWQ2NmExYzFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKQEAgLTEyOCw2ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0Z1
bGxzY3JlZW5MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCk7IH0KICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZsb2F0UmVjdCk7CiAgICAg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkp
OwogICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9GdWxsc2NyZWVuR3Jhdml0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuR3Jhdml0eTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJB
VktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0KaW5kZXggM2Y4NTVkMGYxMmI0MDY0OWE5NmZiNmFmZTk4OTY2ZTEx
YTNhNThiMy4uN2E1MzczNzYyOTE5MGVkNGQ3MGI2NDIxYjI5NGY0ZmY2NTNmZDE3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC0xMjUsOSArMTI1LDkgQEAgcHVibGljOgog
ewogICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxlYXNlIGluIGRpZEV4aXRG
dWxsc2NyZWVuOgogICAgIAotICAgIF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOworICAgIF9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7Ci0gICAgX21vZGVs
ID0gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKKyAg
ICBfbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7
CiAgICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoX2ludGVyZmFjZS5n
ZXQoKSk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoX21vZGVs
LmdldCgpKTsKICAgICBfbW9kZWwtPnNldFZpZGVvRWxlbWVudChfdmlkZW9FbGVtZW50LmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5kZXggODQ3M2Y2YjA0NDI0Yjk0N2Q4Nzk1
Yzc3MjdmOTg2MTAyYmVhNTJjYi4uYTUzMTI5Njc4MWVhODdiNzc4YjliMGU1ZDlkYjUxOTYwM2Zh
ODg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKQEAgLTY4LDcgKzY4LDcgQEAgY2xh
c3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQKICAgICAs
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gewogCiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKTsKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KCkpOyB9CiAgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKSB7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAg
ICBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KICAgICB2b2lkIHNldElzT3B0aW1pemVkKGJvb2wpOwotICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgp
IGNvbnN0OwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHN0ZDo6ZnVuY3Rp
b248dm9pZChib29sKT4gY2FsbGJhY2spOwogCiAgICAgdm9pZCB3aWxsU3RhcnRPcHRpbWl6ZWRG
dWxsc2NyZWVuKCk7CkBAIC0xMDYsNyArMTA2LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENh
bmNlbE9wdGltaXplZEZ1bGxzY3JlZW4oKTsKICAgICB2b2lkIHByZXBhcmVGb3JPcHRpbWl6ZWRG
dWxsc2NyZWVuU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7CiAKKyAg
ICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisg
ICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7
CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4g
bV9tb2RlID09IG1vZGU7IH0KKwogcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCk7CiAgICAgdm9pZCBiZWdpblNlc3Npb24oKTsK
ICAgICB2b2lkIHNldHVwRnVsbHNjcmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXImLCBjb25zdCBJ
bnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKICAgICB2b2lkIGVu
dGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOwpAQCAtMTE0LDExICsxMjAsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IEludFJlY3QmIGZpbmFsUmVj
dCk7CiAgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CiAKLSAgICB2b2lkIHNl
dE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgYm9v
bCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29u
c3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09
IG1vZGU7IH0KLQogICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVy
Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5
ZXJWaWV3Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92aWRlb0xheWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCmluZGV4IDI5MzhlYTg3ODkxM2YxZTIzZDQ1OTBl
ZWFiYzgyYzEyODFiOGNhZjkuLjgwOTEwOWFjZmQ1ZTBkNzMwOTQyNzYzYzM3ZGFmYzEwMmFlNjQ3
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KQEAgLTExNzUsNyArMTE3NSw3IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5U
b0lubGluZShib29sIHZpc2libGUsIGNvCiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQo
KQorYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb09wdGltaXplZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX3BsYXllckNvbnRy
b2xsZXIgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxs
c2NyZWVuTW9kZVN0YW5kYXJkICYmIHdrSXNPcHRpbWl6ZWRGdWxsc2NyZWVuU3VwcG9ydGVkKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmluZGV4IDU5OWE3NGEzYTc5NmQx
NTE1NDI3MjViZTc2ZGEyMzlkMDY2ODc4YzkuLmVjNTRhOWY4MTY5MzY1MTU4MThmMGRkNjQzZmY2
Zjg3MmUwNGFhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCkBAIC00NSwx
MCArNDUsMTEgQEAgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwogCiBjbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgc3RhdGlj
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgp
KTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50KCk7Ci0gICAgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSA9IGludGVyZmFjZTt9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCop
OworICAgIFdFQkNPUkVfRVhQT1JUIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsMTQgKzc2
LDE3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09S
RV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKwogcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2ZWRF
dmVudE5hbWVzKCk7CiAgICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFsbCgp
OwogICAgIAogICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAg
ICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKLSAgICBi
b29sIG1faXNMaXN0ZW5pbmc7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9
OworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UgeyBudWxscHRyIH07CiAgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKICAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CiAgICAgVmVjdG9y
PFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0KaW5kZXggNjlmN2JkYTYyYjY0NDA3MjZjZjQ3M2ZhOWQ5OThm
YzM1MzBkZmUwNS4uMTFlZDY2MzlmNDBlZWIzZGE2MWU0MjVlNTM5NjI2M2Q3MzM5NDE0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtNTMsOCArNTMsNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKICAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlz
dGVuaW5nKGZhbHNlKQotICAgICwgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cikK
IHsKIH0KIApAQCAtNjIsNiArNjAsMjAgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiB7CiB9CiAKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZShXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UqIGludGVyZmFjZSkKK3sK
KyAgICBpZiAoaW50ZXJmYWNlID09IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFjZTsK
KworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkgeworICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+cmVzZXRNZWRpYVN0YXRlKCk7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRW
aWRlb0RpbWVuc2lvbnModHJ1ZSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwgbV92aWRl
b0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOworICAgIH0KK30KKwogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCkKIHsKICAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50
KQpAQCAtNjksNyArODEsMTMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGUKIAogICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UtPnJlc2V0TWVkaWFTdGF0ZSgpOwotICAgIAorCisgICAgaWYgKG1fdmlkZW9FbGVtZW50
ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpKQorICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVOb25lKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVu
dC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOworCiAgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYm
IG1faXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVk
RXZlbnROYW1lcygpKQogICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CkBAIC04Nyw3ICsxMDUsOCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCogdmlkZQogCiAgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgp
KTsKIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMo
dHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWln
aHQoKSk7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNpb25zKHRydWUsIHZpZGVvRWxl
bWVudC0+dmlkZW9XaWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOwogfQogCiB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCAz
YmNlMDBiZThiNDUzN2EwOTNiODk3ZGIzMjI1YzUwNTVlMDgzNGRlLi42ZTY5NzdiZjBiYmEzMGVj
YTZkZjJiMmQxMjljZGE4ZDBmYzc4OGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRpYyBpbnQz
Ml90IGRldmljZU9yaWVudGF0aW9uKCkKICAgICBpZiAoIV9wYWdlIHx8ICFfcGFnZS0+dmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0
dXJuIF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPm1vZGUoKSAmIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQ7CisgICAgcmV0dXJu
IF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPmhhc01vZGUoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7CiB9CiAKIC0gKEJPT0wp
X21heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oCmluZGV4IGQ5ZTY1Y2U5MzM4YmY4YzM1YTMxMDY0ODBjOWNjNmEyYTIyNDc1MTYuLmI0OThh
ZThlNWJhODdmMmIyNDEzYWVmOGM0NmJhMWZlNDc2NWRlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaApAQCAtNDEsMzQgKzQxLDMxIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDog
cHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LCBwdWJsaWMg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIsIHB1YmxpYyBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7Ci0gICAgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisgICAgc3RhdGljIFJlZjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5h
Z2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
KyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIAotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUxheWVyKiBs
YXllckhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdC5nZXQoKTsgfQorICAgIHZvaWQg
c2V0TGF5ZXJIb3N0KFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiYmIGxheWVySG9zdCkgeyBtX2xh
eWVySG9zdCA9IFdURjo6bW92ZShsYXllckhvc3QpOyB9CiAKLSAgICAvLyBUcmFuc2xhdGUgdG8g
RnVsbHNjcmVlbkludGVyZmFjZQotICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQz
Ml90LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0Rl
dmljZVNjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7Ci0gICAgdm9pZCBzZXRTZWVr
YWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4m
KTsKLSAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKGJvb2wgZW5hYmxlZCwg
dWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwotICAgIHZv
aWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5s
aW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5saW5lUmVjdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRJbml0aWFsVmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0
UmVjdCBmcmFtZSkgeyBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1lOyB9CiAKLSAgICAvLyBGdWxs
c2NyZWVuIE9ic2VydmVyCi0gICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgLy8g
RnVsbHNjcmVlbk1vZGVsCitwcml2YXRlOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAgICAgICwgbV9jb250
ZXh0SWQoY29udGV4dElkKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbAogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgp
IG92ZXJyaWRlOwpAQCAtNzksMTggKzc2LDk3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2lu
U2Nhbm5pbmdCYWNrd2FyZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbmRTY2Fubmlu
ZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZs
b2F0UmVjdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlkZW9M
YXllckZyYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dy
YXZpdHkpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgVmlkZW9HcmF2aXR5IHZpZGVvTGF5ZXJHcmF2
aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSkgb3ZlcnJpZGU7CiAKLSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAgICAvLyBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1
bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOwor
CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgdWlu
dDY0X3QgbV9jb250ZXh0SWQ7CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fbGF5ZXJI
b3N0OwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3ZpZGVvTGF5ZXJGcmFtZTsKICAgICBWaWRl
b0dyYXZpdHkgbV92aWRlb0xheWVyR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSB9OwogfTsK
KworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVhbCB+V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsK
KworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIGJvb2wgaGFz
TW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25z
dDsKKyAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OworCisgICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBh
Z2VQcm94eSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0JiBlbnN1cmVJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcgorICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0
aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7
CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgaG9zdFRpbWUpOworICAgIHZvaWQgc2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMo
dWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNlZWthYmxlUmFuZ2VzVmVjdG9yKHVpbnQ2NF90IGNv
bnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcyk7CisgICAg
dm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVl
KTsKKyAgICB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Cisg
ICAgdm9pZCBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAg
dm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgIHZvaWQgc2V0RHVyYXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVy
YXRpb24pOworICAgIHZvaWQgc2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5
aW5nLCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0
KTsKKworICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICB2
b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBl
bmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJk
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIHNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsK
KyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1
cGxlPiBtX2NvbnRleHRNYXA7CisKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgppbmRleCA3NDYwNDAy
OTUzZGEwYzM3YjBmZmQ2Njg4ZDIxMzdhYmRkNmU3MjQ1Li5hNGU3YzI3YThlM2JjMjEyODNlNDUx
MzhlYTgyNDc2ZWQ3MDYzYTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMjIsMjEgKzIyLDIxIEBACiAKICNpZiBQTEFURk9STShJT1MpCiBtZXNz
YWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewotICAgIFJlc2V0TWVkaWFT
dGF0ZSgpCi0gICAgU2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9z
dFRpbWUpCi0gICAgU2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCi0gICAgU2V0
VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpCi0gICAgU2V0U2Vla2FibGVSYW5nZXNWZWN0b3IoVmVjdG9yPHN0ZDo6cGFpcjxkb3Vi
bGUsIGRvdWJsZT4+IHJhbmdlcyk7Ci0gICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFs
dWUpOwotICAgIFNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKFZlY3RvcjxTdHJpbmc+IG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIFNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgU2V0RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXMoYm9vbCBlbmFibGVkLCB1aW50
MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgU2V0RHVy
YXRpb24oZG91YmxlIGR1cmF0aW9uKQotICAgIFNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGRvdWJs
ZSByYXRlKQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50MzJfdCB2aWRlb0xheWVySUQs
IFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3Rvciwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKLSAgICBFbnRlckZ1bGxz
Y3JlZW4oKQotICAgIEV4aXRGdWxsc2NyZWVuKFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQot
ICAgIENsZWFudXBGdWxsc2NyZWVuKCkKLSAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9v
bCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCisgICAgUmVzZXRNZWRpYVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQorICAgIFNldEJ1ZmZl
cmVkVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCisgICAgU2V0
VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICBTZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcih1
aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5n
ZXMpCisgICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
YWx1ZSkKKyAgICBTZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAg
U2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgU2V0RXh0ZXJu
YWxQbGF5YmFja1Byb3BlcnRpZXModWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVp
bnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQorICAgIFNldER1
cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQorICAgIFNldFJhdGUo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCisgICAgU2V0
dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXll
cklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0
b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCisgICAgRW50ZXJG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQorICAgIENsZWFudXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5l
UmVjdCkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQppbmRleCAwZmVlNzQz
MGY5ZjExZDJiN2RiMTAzMDEyZmQwOWZiYWU0YWIwMDA1Li44OTE3NDFhMzMyYzRjYWUzYTgzNTM0
M2VlMTJkYTdjNDQ0YjZjZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtNTUs
NiArNTUsMTQ4IEBAIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0CiAKICNlbHNlCiAKKyNwcmFnbWEg
bWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dAorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6cGxheSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5wbGF5KG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnBhdXNlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAg
ICBtX21hbmFnZXItPnBhdXNlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnRvZ2dsZVBsYXlTdGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT50b2dnbGVQbGF5U3RhdGUobV9jb250ZXh0SWQpOworfQor
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY3J1YmJpbmcoKQor
eworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+YmVnaW5TY3J1YmJpbmco
bV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZW5kU2NydWJiaW5nKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PmVuZFNjcnViYmluZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpzZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChtX21hbmFn
ZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2Vla1RvVGltZShtX2NvbnRleHRJZCwgdGltZSk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmYXN0U2Vlayhkb3VibGUg
dGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZhc3RTZWVr
KG1fY29udGV4dElkLCB0aW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENv
bnRleHQ6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdGb3J3YXJkKG1fY29udGV4dElkKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5u
aW5nQmFja3dhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsQ29udGV4dDo6ZW5kU2Nhbm5pbmcoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+ZW5kU2Nhbm5pbmcobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnJlcXVlc3RFeGl0RnVsbHNjcmVlbiht
X2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpz
ZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQoreworICAgIG1fdmlk
ZW9MYXllckZyYW1lID0gZnJhbWU7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRWaWRlb0xheWVyRnJhbWUobV9jb250ZXh0SWQsIGZyYW1lKTsKK30KKworV2ViQ29y
ZTo6RmxvYXRSZWN0IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dmlkZW9MYXllckZy
YW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWRlb0xheWVyRnJhbWU7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit7Cisg
ICAgbV92aWRlb0xheWVyR3Jhdml0eSA9IGdyYXZpdHk7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0xheWVyR3Jhdml0eShtX2NvbnRleHRJZCwgZ3Jhdml0
eSk7Cit9CisKK1dlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyR3Jhdml0eSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdmlkZW9MYXllckdyYXZpdHk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IG9w
dGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2VsZWN0
QXVkaW9NZWRpYU9wdGlvbihtX2NvbnRleHRJZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2
NF90IG9wdGlvbklkKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKG1fY29udGV4dElkLCBtb2RlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5kaWRTZXR1cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZEVudGVyRnVsbHNj
cmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OjpkaWRFeGl0RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAg
bV9tYW5hZ2VyLT5kaWRFeGl0RnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5kaWRDbGVhbnVwRnVsbHNjcmVl
bihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQoreworICAgIGlmIChtX21hbmFnZXIpCisg
ICAgICAgIG1fbWFuYWdlci0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKG1fY29udGV4dElk
KTsKK30KKworI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisK
IFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkocGFnZSkpOwpA
QCAtNjQsOCArMjA2LDYgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVByb3h5JiBwYWcKICAgICA6IG1fcGFnZSgm
cGFnZSkKIHsKICAgICBtX3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWwodGhpcyk7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7
CiB9CiAKIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6fldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eSgpCkBAIC03NywzNyArMjE3LDExNyBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQogCiB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmludmFsaWRhdGUoKTsKLQogICAgIG1fcGFnZS0+
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogICAgIG1fcGFnZSA9IG51bGxwdHI7CiAKLSAgICBbbV9sYXllckhvc3QgcmVtb3ZlRnJvbVN1
cGVybGF5ZXJdOwotICAgIG1fbGF5ZXJIb3N0LmNsZWFyKCk7CisgICAgZm9yIChhdXRvJiB0dXBs
ZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBhdXRvJiBtb2RlbCA9IHN0ZDo6
Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgYXV0byYgaW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4odHVw
bGUpOworCisgICAgICAgIGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgICAgICBbbW9kZWwt
PmxheWVySG9zdCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbW9kZWwtPnNldExh
eWVySG9zdChudWxscHRyKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RIaWRlQW5kRXhp
dEZ1bGxzY3JlZW4oKQoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFs
dWVzKCkpCisgICAgICAgIHN0ZDo6Z2V0PDE+KHR1cGxlKS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVs
bHNjcmVlbigpOworfQorCitib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6aGFz
TW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIGNvbnN0Cit7
CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAg
ICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5oYXNNb2RlKG1vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50MzJfdCB2aWRl
b0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBmbG9hdCBob3N0
aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCiti
b29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWF5QXV0b21hdGljYWxseVNob3dW
aWRlb09wdGltaXplZCgpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4
dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoc3RkOjpnZXQ8MT4odHVwbGUpLT5tYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVm
PFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4gbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKKyAgICBSZWY8V2ViQ29y
ZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZSA9IFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpjcmVhdGUoKTsKKworICAgIGludGVyZmFjZS0+c2V0
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoJm1vZGVsLmdldCgpKTsKKyAgICBpbnRlcmZhY2UtPnNl
dFdlYlZpZGVvRnVsbHNjcmVlbkNoYW5nZU9ic2VydmVyKCZtb2RlbC5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURjo6bW92ZShtb2RlbCksIFdURjo6bW92ZShpbnRlcmZh
Y2UpKTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpNb2RlbEludGVyZmFj
ZVR1cGxlJiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsQW5kSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY29u
dGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkpOworICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dCYg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVNb2RlbCh1aW50NjRfdCBjb250
ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihlbnN1cmVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpKTsKK30KKworV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
QVZLaXQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlSW50ZXJmYWNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJv
bSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDY0X3QgY29udGV4dElkLCB1aW50
MzJfdCB2aWRlb0xheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxSZWN0LCBm
bG9hdCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IsIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxz
Y3JlZW4pCiB7CiAgICAgQVNTRVJUKHZpZGVvTGF5ZXJJRCk7Ci0gICAgbV9sYXllckhvc3QgPSBX
S01ha2VSZW5kZXJMYXllcih2aWRlb0xheWVySUQpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlOworCisgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAg
bW9kZWwtPnNldEluaXRpYWxWaWRlb0xheWVyRnJhbWUoaW5pdGlhbFJlY3QpOworICAgIG1vZGVs
LT5zZXRMYXllckhvc3QoV0tNYWtlUmVuZGVyTGF5ZXIodmlkZW9MYXllcklEKSk7CiAgICAgaWYg
KGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvciAhPSAxKSB7CiAgICAgICAgIC8vIEludmVydCB0aGUg
c2NhbGUgdHJhbnNmb3JtIGFkZGVkIGluIHRoZSBXZWJQcm9jZXNzIHRvIGZpeCA8cmRhcjovL3By
b2JsZW0vMTgzMTY1NDI+LgogICAgICAgICBmbG9hdCBpbnZlcnNlU2NhbGUgPSAxIC8gaG9zdGlu
Z0RldmljZVNjYWxlRmFjdG9yOwotICAgICAgICBbbV9sYXllckhvc3Qgc2V0VHJhbnNmb3JtOkNB
VHJhbnNmb3JtM0RNYWtlU2NhbGUoaW52ZXJzZVNjYWxlLCBpbnZlcnNlU2NhbGUsIDEpXTsKKyAg
ICAgICAgW21vZGVsLT5sYXllckhvc3QoKSBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VT
Y2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwgMSldOwogICAgIH0KIAotICAgIG1fdmlk
ZW9MYXllckZyYW1lID0gaW5pdGlhbFJlY3Q7Ci0KICAgICBVSVZpZXcgKnBhcmVudFZpZXcgPSBk
b3duY2FzdDxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqbV9wYWdlLT5kcmF3aW5n
QXJlYSgpKS5yZW1vdGVMYXllclRyZWVIb3N0KCkucm9vdExheWVyKCk7Ci0gICAgc2V0dXBGdWxs
c2NyZWVuKCptX2xheWVySG9zdC5nZXQoKSwgaW5pdGlhbFJlY3QsIHBhcmVudFZpZXcsIHZpZGVv
RnVsbHNjcmVlbk1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CisgICAgaW50ZXJmYWNl
LT5zZXR1cEZ1bGxzY3JlZW4oKm1vZGVsLT5sYXllckhvc3QoKSwgaW5pdGlhbFJlY3QsIHBhcmVu
dFZpZXcsIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7CiB9
Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1v
ZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSh1aW50
NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQobW9kZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnJlc2V0TWVkaWFTdGF0ZSgp
OwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFNlZWth
YmxlUmFuZ2VzVmVjdG9yKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiYg
cmFuZ2VzKQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q3VycmVu
dFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBob3N0
VGltZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRDdXJyZW50VGltZShj
dXJyZW50VGltZSwgaG9zdFRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZl
cmVkVGltZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRCdWZmZXJlZFRp
bWUoYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8s
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgZW5zdXJlSW50ZXJmYWNl
KGNvbnRleHRJZCkuc2V0VmlkZW9EaW1lbnNpb25zKGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFNlZWthYmxlUmFu
Z2VzVmVjdG9yKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRv
dWJsZT4+IHJhbmdlcykKIHsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IFRp
bWVSYW5nZXM6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMp
CkBAIC0xMTgsMTE4ICszMzgsMTY0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpwCiAgICAgICAg
IHRpbWVSYW5nZXMtPmFkZChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKICAgICB9CiAKLSAg
ICBzZXRTZWVrYWJsZVJhbmdlcygqdGltZVJhbmdlcyk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkuc2V0U2Vla2FibGVSYW5nZXMoKnRpbWVSYW5nZXMpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90
IGNvbnRleHRJZCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KS5zZXRDYW5QbGF5RmFzdFJldmVyc2UodmFsdWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnModWludDY0X3Qg
Y29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldEF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50
NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVk
SW5kZXgpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuc2V0TGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVz
KGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmlj
ZU5hbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RXh0ZXJuYWxQ
bGF5YmFja1Byb3BlcnRpZXModWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVpbnQz
Ml90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQogewogICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSA9
IHN0YXRpY19jYXN0PFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFj
a1RhcmdldFR5cGU+KHRhcmdldFR5cGUpOwotICAgIAogICAgIEFTU0VSVCh0eXBlID09IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZUFpclBsYXkgfHwgdHlwZSA9PSBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVUVk91dCB8fCB0eXBlID09IFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6VGFyZ2V0VHlwZU5vbmUpOwogICAgIAotICAgIHNldEV4
dGVybmFsUGxheWJhY2soZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7CisgICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuc2V0RXh0ZXJuYWxQbGF5YmFjayhlbmFibGVkLCB0
eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RHVyYXRpb24odWludDY0X3QgY29udGV4
dElkLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgYm9vbCBpc1ZpZXdWaXNpYmxlID0gbV9wYWdl
LT5pc1ZpZXdWaXNpYmxlKCk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoaXNWaWV3VmlzaWJs
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBpbmxpbmVSZWN0KQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6c2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBk
b3VibGUgcmF0ZSkKIHsKLSAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgp
OwotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuc2V0UmF0ZShpc1BsYXlpbmcsIHJhdGUpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6UmVxdWVzdEV4aXRGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGF1dG8m
IGludGVyZmFjZSA9IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpOworICAgIGludGVyZmFjZS5l
bnRlckZ1bGxzY3JlZW4oKTsKKworICAgIC8vIE9ubHkgb25lIGNvbnRleHQgY2FuIGJlIGluIGEg
Z2l2ZW4gZnVsbCBzY3JlZW4gbW9kZSBhdCBhIHRpbWU6CisgICAgZm9yIChhdXRvJiBjb250ZXh0
UGFpciA6IG1fY29udGV4dE1hcCkgeworICAgICAgICBhdXRvJiBvdGhlckNvbnRleHRJZCA9IGNv
bnRleHRQYWlyLmtleTsKKyAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBvdGhlckNvbnRleHRJZCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8mIG90aGVySW50ZXJmYWNlID0g
c3RkOjpnZXQ8MT4oY29udGV4dFBhaXIudmFsdWUpOworICAgICAgICBpZiAob3RoZXJJbnRlcmZh
Y2UtPmhhc01vZGUoaW50ZXJmYWNlLm1vZGUoKSkpCisgICAgICAgICAgICBvdGhlckludGVyZmFj
ZS0+cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIH0KIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4oKSwg
bV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNjcmVlbigpOworICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLmV4aXRGdWxsc2NyZWVuKGZpbmFsUmVjdCk7CiB9
Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1
bGxzY3JlZW4oKQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIFtDQVRyYW5zYWN0aW9uIGZs
dXNoXTsKLSAgICBbbV9sYXllckhvc3QgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIG1fbGF5
ZXJIb3N0LmNsZWFyKCk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5jbGVhbnVwRnVsbHNjcmVlbigpOwogfQog
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkU2V0dXBGdWxsc2NyZWVu
KCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJl
Y3QgaW5saW5lUmVjdCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkRpZFNldHVwRnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpOworCisgICAgZW5zdXJl
SW50ZXJmYWNlKGNvbnRleHRJZCkucHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlu
bGluZVJlY3QpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RW50ZXJGdWxsc2NyZWVuKCkKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyB0byBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwbGF5
KHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLSAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVlbigpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UGxheShjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnBsYXkoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBhdXNlKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OlBsYXkoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpQYXVzZShjb250ZXh0
SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpwYXVzZSgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Ojp0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UGF1c2UoKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpUb2dnbGVQbGF5U3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CiB9Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxh
eVN0YXRlKCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlRvZ2dsZVBsYXlTdGF0ZSgpLCBtX3BhZ2UtPnBh
Z2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OkJlZ2luU2NydWJiaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQot
ICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2NydWJiaW5n
KCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyh1
aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjcnViYmluZygpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkVu
ZFNjcnViYmluZyhjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZygpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSB0aW1lKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6RW5kU2NydWJiaW5nKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2Vla1RvVGltZShj
b250ZXh0SWQsIHRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OlNlZWtUb1RpbWUodGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RmFzdFNlZWso
Y29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpmYXN0U2Vlayhkb3VibGUgdGltZSkKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBj
b250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpGYXN0U2Vlayh0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjYW5uaW5n
Rm9yd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0
X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpC
ZWdpblNjYW5uaW5nQmFja3dhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAK
LXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5uaW5nQmFja3dh
cmQoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OkVuZFNjYW5uaW5nKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcoKQordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpFbmRTY2FubmluZygpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVlc3RFeGl0
RnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotRmxvYXRSZWN0
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dmlkZW9MYXllckZyYW1lKCkgY29uc3QK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQogewotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJGcmFtZTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZFNl
dHVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFtZShXZWJDb3Jl
OjpGbG9hdFJlY3QgZnJhbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRXhpdEZ1bGxzY3JlZW4o
Y29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5kaWRFeGl0RnVsbHNj
cmVlbigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkRW50
ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkRpZEVudGVyRnVsbHNjcmVlbihjb250
ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEVudGVyRnVsbHNjcmVl
bigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51
cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8mIG1vZGVsID0gZW5z
dXJlTW9kZWwoY29udGV4dElkKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKKyAgICBb
bW9kZWwubGF5ZXJIb3N0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIG1vZGVsLnNldExh
eWVySG9zdChudWxscHRyKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OkRpZENsZWFudXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOworCisgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQogewotICAgIG1fdmlk
ZW9MYXllckZyYW1lID0gZnJhbWU7CiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CiAjaWYgX19JUEhP
TkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiA5MDAwMAogICAgICAgICBCS1NBbmltYXRpb25G
ZW5jZUhhbmRsZSogc3luY2hyb25pemF0aW9uRmVuY2UgPSBbVUlXaW5kb3cgX3N5bmNocm9uaXpl
ZERyYXdpbmdGZW5jZV07CkBAIC0yMzgsMzAgKzUwNCwzNiBAQCB2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBm
cmFtZQogICAgICAgICBtYWNoX3BvcnRfbmFtZV90IGZlbmNlUG9ydCA9IFtVSVdpbmRvdyBfc3lu
Y2hyb25pemVEcmF3aW5nQWNyb3NzUHJvY2Vzc2VzXTsKICNlbmRpZgogCi0gICAgICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXll
ckZyYW1lRmVuY2VkKGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19U
WVBFX01PVkVfU0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVG
ZW5jZWQoY29udGV4dElkLCBmcmFtZSwgSVBDOjpBdHRhY2htZW50KGZlbmNlUG9ydCwgTUFDSF9N
U0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgfQogfQogCi1XZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6dmlkZW9MYXllckdyYXZpdHkoKSBjb25zdAordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBn
cmF2aXR5KQogewotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJHcmF2aXR5OworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0VmlkZW9MYXllckdy
YXZpdHlFbnVtKGNvbnRleHRJZCwgKHVuc2lnbmVkKWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkg
Z3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RBdWRp
b01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCiB7Ci0gICAg
bV92aWRlb0xheWVyR3Jhdml0eSA9IGdyYXZpdHk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oKHVu
c2lnbmVkKWdyYXZpdHkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNlbGVjdEF1ZGlvTWVkaWFPcHRpb24o
Y29udGV4dElkLCBpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0
X3QgaW5kZXgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNl
bGVjdEF1ZGlvTWVkaWFPcHRpb24oaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNlbGVjdExlZ2li
bGVNZWRpYU9wdGlvbihjb250ZXh0SWQsIGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0g
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1l
ZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQogewotICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKGluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTW9kZUNo
YW5nZWQoY29udGV4dElkLCBtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkKQoreworICAgIGJvb2wgaXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+
aXNWaWV3VmlzaWJsZSgpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGNvbnRleHRJZCwgaXNW
aWV3VmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpOworfQorCiAjZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKaW5kZXggZDEzZTYyMmJjMjdhNDkyNzdjNjkx
MzNkMWYzYjBkNDMxMWJiYWQ0Ni4uNmFjMzZiOTc0NzU0MjMzNDUyYmMwYmI2YmFiMGMwZGFmN2Q0
MDAzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNTEsNTMgKzUy
LDEyMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsK
IGNsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOwogCi1jbGFz
cyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK2NsYXNzIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0PiBjcmVhdGUoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYg
bWFuYWdlciwgdWludDY0X3QgY29udGV4dElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChtYW5hZ2VyLCBjb250
ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX21hbmFnZXIgPSBudWxscHRy
OyB9CisKKyAgICBMYXllckhvc3RpbmdDb250ZXh0KiBsYXllckhvc3RpbmdDb250ZXh0KCkgeyBy
ZXR1cm4gbV9sYXllckhvc3RpbmdDb250ZXh0LmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckhv
c3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiYmKTsKKwor
ICAgIGJvb2wgaXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzQW5pbWF0aW5nOyB9Cisg
ICAgdm9pZCBzZXRJc0FuaW1hdGluZyhib29sIGZsYWcpIHsgbV9pc0FuaW1hdGluZyA9IGZsYWc7
IH0KKworICAgIGJvb2wgdGFyZ2V0SXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRJc0Z1bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldFRhcmdldElzRnVsbHNjcmVlbihib29sIGZs
YWcpIHsgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmbGFnOyB9CisKKyAgICBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIGZ1bGxzY3JlZW5Nb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9mdWxsc2NyZWVuTW9kZTsgfQorICAgIHZvaWQgc2V0RnVsbHNjcmVlbk1vZGUo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKSB7IG1f
ZnVsbHNjcmVlbk1vZGUgPSBtb2RlOyB9CisKKyAgICBib29sIGlzRnVsbHNjcmVlbigpIGNvbnN0
IHsgcmV0dXJuIG1faXNGdWxsc2NyZWVuOyB9CisgICAgdm9pZCBzZXRJc0Z1bGxzY3JlZW4oYm9v
bCBmbGFnKSB7IG1faXNGdWxsc2NyZWVuID0gZmxhZzsgfQorCitwcml2YXRlOgorICAgIC8vIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZQorICAgIHZpcnR1YWwgdm9pZCByZXNldE1lZGlhU3Rh
dGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1l
LCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEJ1ZmZl
cmVkVGltZShkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGJvb2wg
aXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFuZ2VzKGNvbnN0
IFdlYkNvcmU6OlRpbWVSYW5nZXMmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2Fu
UGxheUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJp
bmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlLCBXVEY6OlN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsK
KworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlciYsIHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyKiBtX21hbmFnZXI7CisgICAgdWludDY0X3QgbV9jb250ZXh0SWQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsK
KyAgICBib29sIG1faXNBbmltYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV90YXJnZXRJc0Z1
bGxzY3JlZW4geyBmYWxzZSB9OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZSB7IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIH07CisgICAgYm9vbCBtX2lzRnVsbHNjcmVlbiB7
IGZhbHNlIH07Cit9OworCitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIDogcHVibGlj
IFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4sIHByaXZhdGUgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYlBhZ2U+KTsKICAgICB2aXJ0dWFs
IH5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCk7CiAgICAgCiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7
Ci0gICAgCisKKyAgICAvLyBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50CiAgICAgYm9vbCBzdXBw
b3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0OwogICAgIHZvaWQgZW50ZXJWaWRlb0Z1bGxzY3Jl
ZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOwogICAgIHZvaWQgZXhpdFZpZGVv
RnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Jik7CiAg
ICAgCiBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ7CisKICAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKFBh
c3NSZWZQdHI8V2ViUGFnZT4pOwotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2
ZW50TGlzdGVuZXImIHJocykgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RXZlbnRMaXN0ZW5lcio+KHRoaXMpID09ICZyaHM7IH0KLSAgICAKLSAgICAvLyBGdWxsc2NyZWVu
SW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JU
aW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBi
dWZmZXJlZFRpbWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSYXRlKGJvb2wgaXNQ
bGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFdl
YkNvcmU6OlRpbWVSYW5nZXMmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FuUGxh
eUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIHNl
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9u
cywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVkLCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFt
ZSkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBhZGRpdGlvbmFsIGluY29taW5nCi0gICAgdmlydHVhbCB2
b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxz
Y3JlZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVl
bk1heVJldHVyblRvSW5saW5lKGJvb2wgaXNQYWdlVmlzaWJsZSk7Ci0gICAgdm9pZCBzZXRWaWRl
b0xheWVyRnJhbWVGZW5jZWQoV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCk7CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4sIFJlZlB0cjxXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0Pj4gTW9kZWxJbnRlcmZhY2VUdXBsZTsKKyAgICBNb2RlbElu
dGVyZmFjZVR1cGxlIGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7
CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSYgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKTsKKyAgICBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudCYgZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKTsKKyAgICBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBlbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKTsKKworICAgIC8vIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAg
ICB2b2lkIHNldER1cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlKTsKKyAgICB2b2lk
IHNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgYW5jaG9yVGltZSk7CisgICAgdm9pZCBzZXRCdWZmZXJlZFRpbWUodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKTsKKyAgICB2b2lkIHNldFJhdGUodWludDY0X3Qg
Y29udGV4dElkLCBib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKTsKKyAgICB2b2lk
IHNldFZpZGVvRGltZW5zaW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8sIGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOworICAgIHZvaWQgc2V0U2Vla2FibGVSYW5nZXModWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJik7CisgICAgdm9pZCBz
ZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKTsKKyAg
ICB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwor
ICAgIHZvaWQgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4
KTsKKyAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2sodWludDY0X3QgY29udGV4dElkLCBib29s
IGVuYWJsZWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKworICAgIC8v
IE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5CisgICAgdm9pZCBw
bGF5KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBwYXVzZSh1aW50NjRfdCBjb250ZXh0
SWQpOworICAgIHZvaWQgdG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZWVrVG9UaW1lKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgZmFzdFNlZWsodWludDY0X3QgY29u
dGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90
IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpOwor
ICAgIHZvaWQgcmVxdWVzdEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRp
ZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBkaWRFbnRlckZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZENsZWFudXBGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXRWaWRlb0xheWVyRnJhbWVGZW5j
ZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0
dGFjaG1lbnQgZmVuY2VQb3J0KTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1
aW50NjRfdCBjb250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpOworICAgIHZvaWQgc2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2
b2lkIHNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90
IGluZGV4KTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0
SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAg
IHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCBpc1BhZ2VWaXNpYmxlKTsKICAgICAKICAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ+IG1fdmlkZW9FbGVtZW50OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBtX2xheWVySG9zdGluZ0NvbnRleHQ7Ci0gICAg
Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nOwotICAgIGJvb2wgbV90YXJnZXRJc0Z1bGxzY3JlZW47
Ci0gICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtX2Z1
bGxzY3JlZW5Nb2RlOwotICAgIGJvb2wgbV9pc0Z1bGxzY3JlZW47CisgICAgSGFzaE1hcDxXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50KiwgdWludDY0X3Q+IG1fdmlkZW9FbGVtZW50czsKKyAgICBI
YXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1cGxlPiBtX2NvbnRleHRNYXA7CiB9Owog
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNz
YWdlcy5pbgppbmRleCBkM2M2OGEzNjZjZjgxNTRlZGRkYjE4NmRkMmU2YzkzNDdmZGE1MmFiLi4w
MTNkYTNlZTYyMjQ1ZDE0MjUyZmNiMTRhMGFiOTgzMGEwNzRlYzZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTIyLDI2ICsyMiwyNiBAQAogCiAjaWYgUExBVEZP
Uk0oSU9TKQogbWVzc2FnZXMgLT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciB7Ci0gICAgUGxh
eSgpCi0gICAgUGF1c2UoKQotICAgIFRvZ2dsZVBsYXlTdGF0ZSgpCi0gICAgQmVnaW5TY3J1YmJp
bmcoKQotICAgIEVuZFNjcnViYmluZygpCi0gICAgU2Vla1RvVGltZShkb3VibGUgdGltZSkKLSAg
ICBGYXN0U2Vlayhkb3VibGUgdGltZSkKLSAgICBCZWdpblNjYW5uaW5nRm9yd2FyZCgpCi0gICAg
QmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKLSAgICBFbmRTY2FubmluZygpCi0gICAgUmVxdWVzdEV4
aXRGdWxsc2NyZWVuKCkKLSAgICBEaWRTZXR1cEZ1bGxzY3JlZW4oKQotICAgIERpZEV4aXRGdWxs
c2NyZWVuKCkKLSAgICBEaWRFbnRlckZ1bGxzY3JlZW4oKQotICAgIERpZENsZWFudXBGdWxsc2Ny
ZWVuKCkKLSAgICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQoV2ViQ29yZTo6RmxvYXRSZWN0IGJv
dW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKLSAgICBTZXRWaWRlb0xheWVyR3Jhdml0
eUVudW0odW5zaWduZWQgZ3Jhdml0eSkKLSAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2
NF90IGluZGV4KQotICAgIFNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkK
LSAgICBmdWxsc2NyZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2RlKQotICAgIEZ1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZShib29sIGlzUGFnZVZpc2libGUpCisgICAgUGxheSh1aW50NjRfdCBjb250
ZXh0SWQpCisgICAgUGF1c2UodWludDY0X3QgY29udGV4dElkKQorICAgIFRvZ2dsZVBsYXlTdGF0
ZSh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgQmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKQorICAgIEVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2Vla1RvVGlt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEZhc3RTZWVrKHVpbnQ2NF90
IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCisgICAgQmVnaW5TY2FubmluZ0ZvcndhcmQodWludDY0
X3QgY29udGV4dElkKQorICAgIEJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgRW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQorICAgIFJlcXVlc3RFeGl0
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkU2V0dXBGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0
SWQpCisgICAgRGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRD
bGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgU2V0VmlkZW9MYXllckZy
YW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywg
SVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKKyAgICBTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0o
dWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQorICAgIFNlbGVjdEF1ZGlvTWVk
aWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKKyAgICBTZWxlY3RM
ZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKKyAg
ICBGdWxsc2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCisg
ICAgRnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBp
c1BhZ2VWaXNpYmxlKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQppbmRleCA0NWEzZTI5
ODIwZWIyZmMyNzU1Mzc1ZDJmNDEwOTIwMjZiYmE4N2RhLi43NTEzNDNkNTQzNGVhNmVkODQ2MTJh
ZGI2MzA4MzI4YzNhZDk3MDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KQEAgLTYwLDYgKzYwLDk3
IEBAIHN0YXRpYyBJbnRSZWN0IGNsaWVudFJlY3RGb3JFbGVtZW50KEhUTUxFbGVtZW50KiBlbGVt
ZW50KQogICAgIHJldHVybiBlbGVtZW50LT5jbGllbnRSZWN0KCk7CiB9CiAKK3N0YXRpYyB1aW50
NjRfdCBuZXh0Q29udGV4dElkKCkKK3sKKyAgICBzdGF0aWMgdWludDY0X3QgY29udGV4dElkID0g
MDsKKyAgICByZXR1cm4gKytjb250ZXh0SWQ7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKworV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50NjRfdCBjb250ZXh0SWQpCisgICAgOiBtX21hbmFn
ZXIoJm1hbmFnZXIpCisgICAgLCBtX2NvbnRleHRJZChjb250ZXh0SWQpCit7Cit9CisKK1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZh
Y2VDb250ZXh0KCkKK3sKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRMYXllckhvc3RpbmdDb250ZXh0KHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdD
b250ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gV1RGOjpt
b3ZlKGNvbnRleHQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6OnJlc2V0TWVkaWFTdGF0ZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5yZXNldE1lZGlhU3RhdGUobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldER1cmF0aW9uKGRvdWJsZSBkdXJhdGlvbikK
K3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldER1cmF0aW9uKG1f
Y29udGV4dElkLCBkdXJhdGlvbik7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5j
aG9yVGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldEN1
cnJlbnRUaW1lKG1fY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0QnVmZmVyZWRUaW1lKGRv
dWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRCdWZmZXJlZFRpbWUobV9jb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0UmF0ZShib29sIGlzUGxh
eWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+c2V0UmF0ZShtX2NvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUp
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldFZpZGVv
RGltZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9EaW1lbnNpb25z
KG1fY29udGV4dElkLCBoYXNWaWRlbywgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2Vi
Q29yZTo6VGltZVJhbmdlcyYgcmFuZ2VzKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+c2V0U2Vla2FibGVSYW5nZXMobV9jb250ZXh0SWQsIHJhbmdlcyk7Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0Q2FuUGxheUZhc3RS
ZXZlcnNlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5zZXRDYW5QbGF5RmFzdFJldmVyc2UobV9jb250ZXh0SWQsIHZhbHVlKTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRBdWRpb01lZGlhU2VsZWN0
aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMobV9jb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVj
dGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5n
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMobV9j
b250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2soYm9vbCBlbmFibGVk
LCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlLCBXVEY6OlN0cmluZyBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0
RXh0ZXJuYWxQbGF5YmFjayhtX2NvbnRleHRJZCwgZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2
aWNlTmFtZSk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIK
KwogUGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJQYWdlPiBwYWdlKQogewogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihwYWdlKSk7CkBAIC02Nywy
MCArMTU4LDU5IEBAIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFBhc3NSZWZQCiAKIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdlPiBw
YWdlKQogICAgIDogbV9wYWdlKHBhZ2UuZ2V0KCkpCi0gICAgLCBtX2lzQW5pbWF0aW5nKGZhbHNl
KQotICAgICwgbV90YXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpCi0gICAgLCBtX2Z1bGxzY3JlZW5N
b2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKQotICAgICwgbV9p
c0Z1bGxzY3JlZW4oZmFsc2UpCiB7Ci0gICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
KHRoaXMpOwogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBwYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6
IG1fY29udGV4dE1hcC52YWx1ZXMoKSkgeworICAgICAgICBhdXRvIG1vZGVsID0gc3RkOjpnZXQ8
MD4odHVwbGUpOworICAgICAgICBhdXRvIGludGVyZmFjZSA9IHN0ZDo6Z2V0PDE+KHR1cGxlKTsK
KworICAgICAgICBtb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKG51bGxwdHIp
OworICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOworCisgICAgICAgIGlu
dGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigp
OworICAgIG1fdmlkZW9FbGVtZW50cy5jbGVhcigpOworCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCitX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsID0gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2UgPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUoKnRoaXMsIGNvbnRleHRJ
ZCk7CisKKyAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJIb3N0aW5n
Q29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0aW5nUHJvY2VzcygpKTsKKyAgICBtb2RlbC0+
c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKGludGVyZmFjZS5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3R1cGxlKFdURjo6bW92ZShtb2RlbCksIFdURjo6bW92ZShpbnRlcmZh
Y2UpKTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRlcmZhY2VUdXBs
ZSYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFk
ZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKK30KKworV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRl
eHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNl
KGNvbnRleHRJZCkpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0JiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKSk7Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2UgdG8gQ2hyb21lQ2xpZW50
OgorCiBib29sIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2Ny
ZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gU2V0dGluZ3M6OmF2S2l0RW5hYmxlZCgpOwpAQCAt
OTAsNjYgKzIyMCw3OSBAQCB2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVudGVyVmlk
ZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZQogewogICAgIEFTU0VSVCht
b2RlICE9IEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKIAotICAg
IG1fdmlkZW9FbGVtZW50ID0gJnZpZGVvRWxlbWVudDsKKyAgICB1aW50NjRfdCBjb250ZXh0SWQ7
CiAKLSAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IHRydWU7Ci0gICAgbV9mdWxsc2NyZWVuTW9k
ZSA9IG1vZGU7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZpZGVvRWxlbWVudHMuYWRkKCZ2aWRl
b0VsZW1lbnQsIDApOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG5leHRDb250ZXh0SWQoKTsKKyAgICBjb250ZXh0SWQg
PSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgaWYgKG1faXNBbmltYXRpbmcpCi0g
ICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOwogCi0gICAgbV9pc0FuaW1hdGluZyA9IHRydWU7
Ci0gICAgc2V0VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1lbnQpOworICAgIGludGVyZmFjZS0+c2V0
VGFyZ2V0SXNGdWxsc2NyZWVuKHRydWUpOworICAgIGludGVyZmFjZS0+c2V0RnVsbHNjcmVlbk1v
ZGUobW9kZSk7CisgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudCgmdmlkZW9FbGVtZW50KTsKIAot
ICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZv
ckV4dGVybmFsSG9zdGluZ1Byb2Nlc3MoKTsKLSAgICBib29sIGFsbG93T3B0aW1pemVkRnVsbHNj
cmVlbiA9IG1fdmlkZW9FbGVtZW50LT5tZWRpYVNlc3Npb24oKS5hbGxvd3NBbHRlcm5hdGVGdWxs
c2NyZWVuKCptX3ZpZGVvRWxlbWVudC5nZXQoKSk7CisgICAgaWYgKGludGVyZmFjZS0+aXNBbmlt
YXRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludGVyZmFjZS0+c2V0SXNBbmltYXRpbmco
dHJ1ZSk7CisKKyAgICBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbiA9IHZpZGVvRWxlbWVu
dC5tZWRpYVNlc3Npb24oKS5hbGxvd3NBbHRlcm5hdGVGdWxsc2NyZWVuKHZpZGVvRWxlbWVudCk7
CiAgICAgCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldHVwRnVsbHNjcmVlbldpdGhJRChtX2xheWVySG9zdGluZ0NvbnRleHQtPmNv
bnRleHRJRCgpLCBjbGllbnRSZWN0Rm9yRWxlbWVudCgmdmlkZW9FbGVtZW50KSwgbV9wYWdlLT5k
ZXZpY2VTY2FsZUZhY3RvcigpLCBtX2Z1bGxzY3JlZW5Nb2RlLCBhbGxvd09wdGltaXplZEZ1bGxz
Y3JlZW4pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0dXBGdWxsc2NyZWVuV2l0aElEKGNvbnRl
eHRJZCwgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPmNvbnRleHRJRCgpLCBjbGll
bnRSZWN0Rm9yRWxlbWVudCgmdmlkZW9FbGVtZW50KSwgbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3Rv
cigpLCBpbnRlcmZhY2UtPmZ1bGxzY3JlZW5Nb2RlKCksIGFsbG93T3B0aW1pemVkRnVsbHNjcmVl
biksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVv
RWxlbWVudCYpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVt
ZW50KQogewotICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtX3Zp
ZGVvRWxlbWVudC5yZWxlYXNlKCk7Ci0gICAgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSBmYWxzZTsK
KyAgICBBU1NFUlQobV92aWRlb0VsZW1lbnRzLmNvbnRhaW5zKCZ2aWRlb0VsZW1lbnQpKTsKKwor
ICAgIHVpbnQ2NF90IGNvbnRleHRJZCA9IG1fdmlkZW9FbGVtZW50cy5nZXQoJnZpZGVvRWxlbWVu
dCk7CisgICAgYXV0byYgaW50ZXJmYWNlID0gZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CiAK
LSAgICBpZiAobV9pc0FuaW1hdGluZykKKyAgICBpbnRlcmZhY2Uuc2V0VGFyZ2V0SXNGdWxsc2Ny
ZWVuKGZhbHNlKTsKKworICAgIGlmIChpbnRlcmZhY2UuaXNBbmltYXRpbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9pc0FuaW1hdGluZyA9IHRydWU7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVuKGNs
aWVudFJlY3RGb3JFbGVtZW50KHZpZGVvRWxlbWVudC5nZXQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBpbnRlcmZhY2Uuc2V0SXNBbmltYXRpbmcodHJ1ZSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRGdWxsc2NyZWVu
KGNvbnRleHRJZCwgY2xpZW50UmVjdEZvckVsZW1lbnQoJnZpZGVvRWxlbWVudCkpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXNldE1l
ZGlhU3RhdGUoKQorI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0OgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlc2V0
TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0ZSgpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRE
dXJhdGlvbihkb3VibGUgZHVyYXRpb24pCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OnNldER1cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQogewotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpT
ZXREdXJhdGlvbihkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXREdXJhdGlvbihj
b250ZXh0SWQsIGR1cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgYW5jaG9yVGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0Q3Vy
cmVudFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBh
bmNob3JUaW1lKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpTZXRDdXJyZW50VGltZShjdXJyZW50VGltZSwgYW5jaG9yVGltZSks
IG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRDdXJyZW50VGltZShjb250ZXh0SWQsIGN1cnJlbnRU
aW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEJ1ZmZlcmVkVGltZSh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEJ1ZmZlcmVkVGltZShidWZm
ZXJlZFRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0QnVmZmVyZWRUaW1lKGNvbnRleHRJ
ZCwgYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tS
YXRlKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRSYXRlKHVpbnQ2NF90IGNv
bnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKIHsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0UmF0
ZShpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRSYXRl
KGNvbnRleHRJZCwgaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0RpbWVuc2lvbnMo
Ym9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwg
Ym9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKIHsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0VmlkZW9E
aW1lbnNpb25zKGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0KSwgbV9wYWdlLT5wYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OlNldFZpZGVvRGltZW5zaW9ucyhjb250ZXh0SWQsIGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0KSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHRpbWVSYW5n
ZXMpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFNlZWthYmxlUmFuZ2VzKHVp
bnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcykK
IHsKICAgICBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2VzVmVjdG9yOwog
ICAgIApAQCAtMTYwLDMwICszMDMsMTA0IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltCiAgICAg
ICAgIHJhbmdlc1ZlY3Rvci5hcHBlbmQoc3RkOjpwYWlyPGRvdWJsZSxkb3VibGU+KHN0YXJ0LCBl
bmQpKTsKICAgICB9CiAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6U2V0U2Vla2FibGVSYW5nZXNWZWN0b3IoV1RGOjptb3ZlKHJhbmdl
c1ZlY3RvcikpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0U2Vla2FibGVSYW5nZXNWZWN0b3Io
Y29udGV4dElkLCBXVEY6Om1vdmUocmFuZ2VzVmVjdG9yKSksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldENhblBsYXlGYXN0UmV2ZXJz
ZShib29sIHZhbHVlKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDYW5QbGF5
RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVlKQogewotICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRDYW5Q
bGF5RmFzdFJldmVyc2UodmFsdWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0Q2FuUGxheUZh
c3RSZXZlcnNlKGNvbnRleHRJZCwgdmFsdWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnMob3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRBdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBv
cHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
CiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OlNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRJ
bmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEV4dGVybmFsUGxheWJh
Y2soYm9vbCBlbmFibGVkLCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRFeHRlcm5hbFBsYXliYWNrKHVpbnQ2
NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6
OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlIHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWRE
ZXZpY2VOYW1lKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpTZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyhlbmFibGVkLCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4odGFyZ2V0VHlwZSksIGxvY2FsaXplZERldmljZU5hbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXMoY29udGV4
dElkLCBlbmFibGVkLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odGFyZ2V0VHlwZSksIGxvY2FsaXpl
ZERldmljZU5hbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKKworI3ByYWdtYSBtYXJrIE1l
c3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OgorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnBsYXkodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVu
c3VyZU1vZGVsKGNvbnRleHRJZCkucGxheSgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLnBhdXNlKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLnRvZ2dsZVBsYXlTdGF0ZSgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OmJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1
cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjcnViYmluZygpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3Vi
bGUgdGltZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlZWtUb1RpbWUodGltZSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZmFzdFNlZWsodWludDY0X3Qg
Y29udGV4dElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZh
c3RTZWVrKHRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChj
b250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdGb3J3YXJkKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkK
K3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuZFNjYW5uaW5nKHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmVuZFNjYW5uaW5nKCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVxdWVzdEV4aXRGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnJl
cXVlc3RFeGl0RnVsbHNjcmVlbigpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBp
bmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdEF1ZGlvTWVkaWFPcHRp
b24oaW5kZXgpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQorewor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTW9kZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCit7CisgICAgZW5zdXJlTW9kZWwo
Y29udGV4dElkKS5mdWxsc2NyZWVuTW9kZUNoYW5nZWQodmlkZW9GdWxsc2NyZWVuTW9kZSk7Cit9
CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyID0gW0NB
TGF5ZXIgbGF5ZXJdOwogI2lmbmRlZiBOREVCVUcKQEAgLTIwMCw4MyArNDE3LDExOCBAQCB2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVlbigpCiAgICAgLy8g
VGhpcyBzY2FsZSBmYWN0b3IgaXMgaW52ZXJ0ZWQgaW4gdGhlIGhvc3RpbmcgcHJvY2Vzcy4KICAg
ICBmbG9hdCBob3N0aW5nU2NhbGVGYWN0b3IgPSBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7
CiAgICAgW3ZpZGVvTGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaG9z
dGluZ1NjYWxlRmFjdG9yLCBob3N0aW5nU2NhbGVGYWN0b3IsIDEpXTsKLSAgICBtX2xheWVySG9z
dGluZ0NvbnRleHQtPnNldFJvb3RMYXllcih2aWRlb0xheWVyKTsKIAotICAgIHNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNl
KSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBpbnRlcmZhY2Ut
PmxheWVySG9zdGluZ0NvbnRleHQoKS0+c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOworICAgIG1v
ZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyKTsKKwogICAgIFtDQVRyYW5z
YWN0aW9uIGNvbW1pdF07CiAKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6RW50ZXJGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkp
OworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAg
ICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbigp
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9pc0FuaW1hdGluZyA9IGZhbHNlOwotICAgIG1faXNG
dWxsc2NyZWVuID0gZmFsc2U7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlk
ZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+c2V0SXNB
bmltYXRpbmcoZmFsc2UpOworICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsK
KworICAgIGlmIChpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVlbigpKQorICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV90YXJnZXRJc0Z1bGxzY3JlZW4pCisgICAgUmVmUHRyPEhUTUxWaWRl
b0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKyAgICBpZiAo
IXZpZGVvRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gZXhpdCBmdWxsc2NyZWVu
IG5vdyBpZiBpdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4K
LSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4g
cHJvdGVjdCh0aGlzKTsKLSAgICBXZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGV4aXRWaWRlb0Z1
bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKm1fdmlkZW9FbGVtZW50KTsKLSAgICAgICAgcHJvdGVj
dC5jbGVhcigpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBzdHJvbmdU
aGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ryb25nVGhpcywgdmlkZW9FbGVtZW50XSB7
CisgICAgICAgIHN0cm9uZ1RoaXMtPmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQo
KnZpZGVvRWxlbWVudCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgc2V0VmlkZW9G
dWxsc2NyZWVuTGF5ZXIobmlsKTsKLSAgICBfX2Jsb2NrIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWws
IGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCisgICAg
bW9kZWwtPnNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CiAKLSAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAobV9sYXllckhvc3Rp
bmdDb250ZXh0KSB7Ci0gICAgICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQtPnNldFJvb3RM
YXllcihudWxscHRyKTsKLSAgICAgICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IG51bGxw
dHI7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhp
cyk7CisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW3N0cm9u
Z1RoaXMsIGNvbnRleHRJZCwgaW50ZXJmYWNlXSB7CisgICAgICAgIGlmIChpbnRlcmZhY2UtPmxh
eWVySG9zdGluZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgaW50ZXJmYWNlLT5sYXllckhvc3Rp
bmdDb250ZXh0KCktPnNldFJvb3RMYXllcihudWxscHRyKTsKKyAgICAgICAgICAgIGludGVyZmFj
ZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChudWxscHRyKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAobV9wYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFudXBGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlE
KCkpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgICAgIGlmIChzdHJvbmdUaGlzLT5t
X3BhZ2UpCisgICAgICAgICAgICBzdHJvbmdUaGlzLT5tX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElk
KSwgc3Ryb25nVGhpcy0+bV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgfSk7CiB9CiAgICAgCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKQogewotICAgIG1faXNBbmltYXRpbmcgPSBmYWxzZTsKLSAgICBtX2lzRnVsbHNj
cmVlbiA9IGZhbHNlOwotICAgIAotICAgIHNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAg
c3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250
ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisgICAgaW50
ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworICAgIEhUTUxNZWRpYUVsZW1lbnQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSA9IGludGVyZmFjZS0+ZnVsbHNjcmVlbk1vZGUoKTsKKwor
ICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwpOworICAgIFJlZlB0cjxIVE1M
VmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlkZW9FbGVtZW50KCk7CisKKyAg
ICBpZiAoIWludGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCkpIHsKKyAgICAgICAgbW9kZWwt
PnNldFZpZGVvRWxlbWVudChudWxscHRyKTsKKyAgICAgICAgbW9kZWwtPnNldFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZShudWxscHRyKTsKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRl
KCk7CisgICAgICAgIG1fdmlkZW9FbGVtZW50cy5yZW1vdmUodmlkZW9FbGVtZW50LmdldCgpKTsK
KyAgICAgICAgbV9jb250ZXh0TWFwLnJlbW92ZShjb250ZXh0SWQpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKCFtX3RhcmdldElzRnVsbHNjcmVlbikKKyAgICBpZiAoIXZpZGVv
RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gZW50ZXIgZnVsbHNjcmVlbiBub3cg
aWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBhbiBhbmltYXRpb24uCi0gICAg
X19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3Rl
Y3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF4gewotICAgICAgICBlbnRlclZpZGVvRnVsbHNj
cmVlbkZvclZpZGVvRWxlbWVudCgqbV92aWRlb0VsZW1lbnQsIG1fZnVsbHNjcmVlbk1vZGUpOwot
ICAgICAgICBwcm90ZWN0LmNsZWFyKCk7CisgICAgLy8gZXhpdCBmdWxsc2NyZWVuIG5vdyBpZiBp
dCB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJU
aHJlYWRSdW4oW3N0cm9uZ1RoaXMsIHZpZGVvRWxlbWVudCwgbW9kZV0geworICAgICAgICBzdHJv
bmdUaGlzLT5lbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50
LCBtb2RlKTsKICAgICB9KTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkIGdyYXZpdHkpCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBj
b250ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCiB7Ci0gICAgc2V0VmlkZW9MYXllckdyYXZpdHko
KFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7CisgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5zZXRWaWRlb0xheWVyR3Jhdml0eSgoV2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKGJvb2wgaXNQYWdl
VmlzaWJsZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1heVJl
dHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BhZ2VWaXNpYmxlKQogewor
ICAgIGF1dG8mIG1vZGVsID0gZW5zdXJlTW9kZWwoY29udGV4dElkKTsKKwogICAgIGlmICghaXNQ
YWdlVmlzaWJsZSkKLSAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNjcm9sbEludG9WaWV3SWZOb3RW
aXNpYmxlKGZhbHNlKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6UHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHRydWUsIGNsaWVudFJl
Y3RGb3JFbGVtZW50KG1fdmlkZW9FbGVtZW50LmdldCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOwor
ICAgICAgICBtb2RlbC52aWRlb0VsZW1lbnQoKS0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUo
ZmFsc2UpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCB0cnVlLCBjbGll
bnRSZWN0Rm9yRWxlbWVudChtb2RlbC52aWRlb0VsZW1lbnQoKSkpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXll
ckZyYW1lRmVuY2VkKFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBm
ZW5jZVBvcnQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJG
cmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMs
IElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCiB7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRl
cmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKwogICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKICAgICBbQ0FUcmFuc2FjdGlvbiBzZXRBbmltYXRpb25EdXJhdGlv
bjowXTsKLSAgICBpZiAobV9sYXllckhvc3RpbmdDb250ZXh0KQotICAgICAgICBtX2xheWVySG9z
dGluZ0NvbnRleHQtPnNldEZlbmNlUG9ydChmZW5jZVBvcnQucG9ydCgpKTsKLSAgICBzZXRWaWRl
b0xheWVyRnJhbWUoYm91bmRzKTsKKyAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250
ZXh0KCkpCisgICAgICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRGZW5j
ZVBvcnQoZmVuY2VQb3J0LnBvcnQoKSk7CisgICAgbW9kZWwtPnNldFZpZGVvTGF5ZXJGcmFtZShi
b3VuZHMpOwogICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGZlbmNl
UG9ydC5wb3J0KCkpOwogICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250868</attachid>
            <date>2015-04-15 15:14:26 -0700</date>
            <delta_ts>2015-04-15 15:40:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143680-20150415151329.patch</filename>
            <type>text/plain</type>
            <size>95828</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyODYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI0YmQ1MjFkMTgyMzIy
YTU1OGUxNGE1YjViZDI5NWI1ODBkOWFlZi4uY2QzNzgxMmI3MjAwM2Y4NDJjNTlkMTViOGIyZTEw
NDE5MjlmMjdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDE1LTA0LTEzICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0
YW5lb3VzbHkgZXhpdGluZy1hbmQtZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci9Qcm94eSBiZWNvbWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVu
dCBpdCByZXByZXNlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQzNjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIGdldHRlcnMgZm9yIHRoZSB2aWRlbydzIGZ1bGxzY3JlZW4gbGF5ZXIsIGFu
ZCBiZSBtb3JlIHRvbGVyYW50IGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCBzZXRWaWRlb0VsZW1l
bnQoKSBhbmQgCisgICAgICAgIHNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSBhcmUgY2Fs
bGVkLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp2aWRlb0Z1bGxzY3JlZW5MYXllcik6IEFkZGVkIHNpbXBs
ZSBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6dmlkZW9FbGVtZW50KTogQWRkZWQgc2ltcGxlIGdldHRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpOiBEZWxldGVkLiBNb3ZlZCB0byAubW0gZmlsZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW06CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQpOiBJbml0aWFsaXplIGl2YXJzIGluIHRo
ZSAuaCBmaWxlLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSk6IENhbGwgdGhvc2UgbWV0aG9kcyBza2lw
cGVkIGluIHNldFZpZGVvRWxlbWVudCgpCisgICAgICAgICAgICBpZiBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSBoYWQgbm90IHlldCBiZWVuIHNldC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOiBOdWxsLWNoZWNrIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9FbGVt
ZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQz
Njc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA1NTJhMjJlNzdkZmY1MWE4NDlmOGQxNjQ0NjI3OWQ2Y2RhZTE5
OTNiLi5hOTdmYWExNDRlMTU5YTU3OWZiZGYzYWYzZTgwOTlmMWE2NDRhOGMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsMjAwIEBACiAyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0YW5lb3VzbHkgZXhpdGluZy1hbmQt
ZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci9Qcm94eSBiZWNv
bWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVudCBpdCByZXByZXNlbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG9yaWdpbmFs
IGFzc3VtcHRpb24gb2YgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBhbmQgLVByb3h5IHdhcyB0
aGF0IHRoZSB0d28gY2xhc3NlcyB3b3VsZCByZXByZXNlbnQgYQorICAgICAgICBzaW5nbGUgdmlk
ZW8gZWxlbWVudCBhbmQgaXRzIGZ1bGwgc2NyZWVuIHN0YXRlLiBXaXRoIG11bHRpcGxlIGFuaW1h
dGlvbnMgaW4gYW5kIG91dCBvZiBmdWxsc2NyZWVuIGNvbWJpbmVkIHdpdGgKKyAgICAgICAgbXVs
dGlwbGUgZnVsbHNjcmVlbiBtb2RlcywgdGhpcyBhc3N1bXB0aW9uIG5vIGxvbmdlciBob2xkcyB0
cnVlLgorCisgICAgICAgIFJhdGhlciB0aGFuIGhhdmluZyBhIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIgd2hpY2ggL2lzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQsIHRo
ZSBtYW5hZ2VyIG5vdworICAgICAgICAvaGFzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQgKG9yIGhhcyBtYW55IHN1Y2ggbW9kZWxzKS4gRGl0dG8gZm9yIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgYW5kCisgICAgICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LiBUaGUgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgc3RpbGwgbmVlZHMgYSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB0bworICAgICAgICBjb21tdW5pY2F0ZSB3aXRoLCBzbyBh
IG5ldyB3cmFwcGVyIGNsYXNzIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0LiBEaXR0byBmb3IKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQgYW5kIHRoZSBuZXcgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dC4gVGhlc2UgY29udGV4dCBjbGFzc2VzCisgICAgICAgIGFyZSBwYWlyZWQg
YW5kIHNoYXJlIGEgY29udGV4dElkLCBhbGxvd2luZyB0aGUgbWFuYWdlciBhbmQgaXRzIHByb3h5
IHRvIHJvdXRlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIFVJUHJvY2VzcydzCisgICAgICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IHRvLWFuZC1mcm9tIHRoZSBXZWJQcm9jZXNzJ3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuCisKKyAgICAgICAgQm90aCB0aGUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCB0YWtlIGEgYmFjay1wb2ludGVyIHRvIHRoZWlyCisgICAgICAgIG1h
bmFnZXIgb3IgbWFuYWdlciBwcm94eSwgYW5kIGVhY2ggbWV0aG9kIG9uIHRoZSBjb250ZXh0IHNp
bXBseSBjYWxscyB0aGUgbWF0Y2hpbmcgbWV0aG9kIG9uIHRoZSBtYW5hZ2VyIGFuZAorICAgICAg
ICBwYXNzZXMgaXRzIGNvbnRleHRJZCBhcyBhIHBhcmFtZXRlci4KKworICAgICAgICBCb3RoIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IHBhc3MgdGhhdCBjb250ZXh0SWQgaW4gZWFjaCBvZiB0aGVpcgorICAgICAgICBj
cm9zcy1wcm9jZXNzIG1lc3NhZ2VzLgorCisgICAgICAgIE9uIHRoZSBvdGhlciBzaWRlLCB0aGUg
bWFuYWdlciBhbmQgcHJveHkgYWxzbyBoYXZlIGEgbWFwIGJldHdlZW4gY29udGV4dElkcyBhbmQg
dGhlaXIgbWF0Y2hpbmcKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQgKGluIHRoZSBjYXNlIG9mIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpIG9yCisgICAgICAg
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IChpbiB0aGUgY2FzZSBvZiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpLgorCisgICAgICAgIFdoaWxlIHRoaXMgY2hhbmdlIGlz
IGxhcmdlIGJ5IExvQywgaXQgaXMgYWxtb3N0IGVudGlyZWx5IGJvaWxlcnBsYXRlLiAgVGhlIG5l
dyBhbmQgaW50ZXJlc3RpbmcgcGllY2VzIGFyZSB0aGVzZToKKworICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSk6IE5vIGxvbmdlciBhIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRh
dGUpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50ZXJmYWNlcywgaW52YWxpZGF0aW5n
IGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gUmV0dXJuIGEgbmV3IG1vZGVsIGFuZCBp
bnRlcmZhY2UgdHVwbGUuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gTGF6aWx5IGNyZWF0ZSwg
YW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5ldyBtb2RlbCBhbmQg
aW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjplbnN1cmVNb2RlbCk6IFJldHVybiB0aGUgbW9kZWwgaGFsZiBvZiBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6IFJldHVybiB0aGUgaW50ZXJmYWNlIGhhbGYg
b2YgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOiBXYWxrIHRocm91Z2ggdGhl
IG91dHN0YW5kaW5nIGludGVyZmFjZSBvYmplY3RzLCBhbmQgaWYgCisgICAgICAgICAgICBhbnkg
aGF2ZSBhIGZ1bGxzY3JlZW4gbW9kZSB3aGljaCBtYXRjaGVzIHRoZSBhYm91dC10by1iZS1mdWxs
c2NyZWVuIGludGVyZmFjZSwgcmVxdWVzdCB0aGF0IHRoYXQgb3RoZXIgaW50ZXJmYWNlCisgICAg
ICAgICAgICBleGl0IGZ1bGxzY3JlZW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6bmV4dENvbnRleHRJZCk6
IFN0YXRpYywgaW5jcmVtZW50aW5nIGNvdW50ZXIgdXNlZCBhcyBhIGNvbnRleHRJZCBzb3VyY2Uu
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIpOiBObyBsb25nZXIgYSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50
ZXJmYWNlcywgaW52YWxpZGF0aW5nIGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKTogQWRkZWQuIFJldHVybiBh
IG5ldyBtb2RlbCBhbmQgaW50ZXJmYWNlIHR1cGxlLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6ICBBZGRlZC4gTGF6
aWx5IGNyZWF0ZSwgYW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5l
dyBtb2RlbCBhbmQgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwpOiBSZXR1cm4gdGhlIG1vZGVsIGhhbGYgb2Yg
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKTogUmV0dXJuIHRoZSBpbnRlcmZhY2UgaGFs
ZiBvZiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSgpLgorCisgICAgICAgIE5ldyBjbGFzc2VzIGFu
ZCBtZXRob2RzIHdoaWNoIGp1c3QgZm9yd2FyZCBvbiB0byB0aGVpciBvd25pbmcgb2JqZWN0czoK
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpsYXllckhvc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldExheWVySG9zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0SW5pdGlhbFZp
ZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpiZWdpblNj
cnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZW5k
U2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0Ojp2aWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpm
dWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
bGF5ZXJIb3N0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ6OmlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0SXNBbmltYXRpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp0YXJnZXRJc0Z1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRUYXJnZXRJc0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpmdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEZ1bGxzY3JlZW5Nb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
aXNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6c2V0SXNGdWxsc2NyZWVuKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMYXllckhvc3RpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEJ1ZmZlcmVkVGlt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldFJhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRTZWVrYWJsZVJhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldENhblBsYXlGYXN0
UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorCisgICAgICAgIENyb3NzLXByb2Nlc3Mg
bWV0aG9kcyB3aGljaCBub3cgdGFrZSBhIGNvbnRleHRJZCBwYXJhbWV0ZXI6CisKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXR1cEZ1bGxzY3JlZW5XaXRoSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEJ1ZmZlcmVkVGltZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9E
aW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRBdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRSYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lu
bGluZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWspOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpi
ZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0
VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJGcmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dmlk
ZW9MYXllckdyYXZpdHkpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEJ1ZmZlcmVkVGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldENhblBs
YXlGYXN0UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEV4dGVybmFs
UGxheWJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpw
bGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1c2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp0b2dnbGVQbGF5
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdp
blNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2Vs
ZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVh
bnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4pOiBEZWxldGVkLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4
aXRWaWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9F
bGVtZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzNjc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggNDUyYzM0
M2YwYTg1OGQ5YWE3MGU5Yzc0MDk5OTZkNGE3Njg5MTRiMy4uMTQwOWU2YjBiNjA3NDExMWU2MWNi
OTFhNjM3NTM2OWQ2NmExYzFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKQEAgLTEyOCw2ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0Z1
bGxzY3JlZW5MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCk7IH0KICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZsb2F0UmVjdCk7CiAgICAg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkp
OwogICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9GdWxsc2NyZWVuR3Jhdml0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuR3Jhdml0eTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJB
VktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0KaW5kZXggM2Y4NTVkMGYxMmI0MDY0OWE5NmZiNmFmZTk4OTY2ZTEx
YTNhNThiMy4uN2E1MzczNzYyOTE5MGVkNGQ3MGI2NDIxYjI5NGY0ZmY2NTNmZDE3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC0xMjUsOSArMTI1LDkgQEAgcHVibGljOgog
ewogICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxlYXNlIGluIGRpZEV4aXRG
dWxsc2NyZWVuOgogICAgIAotICAgIF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOworICAgIF9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7Ci0gICAgX21vZGVs
ID0gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKKyAg
ICBfbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7
CiAgICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoX2ludGVyZmFjZS5n
ZXQoKSk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoX21vZGVs
LmdldCgpKTsKICAgICBfbW9kZWwtPnNldFZpZGVvRWxlbWVudChfdmlkZW9FbGVtZW50LmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5kZXggODQ3M2Y2YjA0NDI0Yjk0N2Q4Nzk1
Yzc3MjdmOTg2MTAyYmVhNTJjYi4uYTUzMTI5Njc4MWVhODdiNzc4YjliMGU1ZDlkYjUxOTYwM2Zh
ODg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKQEAgLTY4LDcgKzY4LDcgQEAgY2xh
c3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQKICAgICAs
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gewogCiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKTsKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KCkpOyB9CiAgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKSB7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAg
ICBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KICAgICB2b2lkIHNldElzT3B0aW1pemVkKGJvb2wpOwotICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgp
IGNvbnN0OwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHN0ZDo6ZnVuY3Rp
b248dm9pZChib29sKT4gY2FsbGJhY2spOwogCiAgICAgdm9pZCB3aWxsU3RhcnRPcHRpbWl6ZWRG
dWxsc2NyZWVuKCk7CkBAIC0xMDYsNyArMTA2LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENh
bmNlbE9wdGltaXplZEZ1bGxzY3JlZW4oKTsKICAgICB2b2lkIHByZXBhcmVGb3JPcHRpbWl6ZWRG
dWxsc2NyZWVuU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7CiAKKyAg
ICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisg
ICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7
CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4g
bV9tb2RlID09IG1vZGU7IH0KKwogcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCk7CiAgICAgdm9pZCBiZWdpblNlc3Npb24oKTsK
ICAgICB2b2lkIHNldHVwRnVsbHNjcmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXImLCBjb25zdCBJ
bnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKICAgICB2b2lkIGVu
dGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOwpAQCAtMTE0LDExICsxMjAsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IEludFJlY3QmIGZpbmFsUmVj
dCk7CiAgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CiAKLSAgICB2b2lkIHNl
dE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgYm9v
bCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29u
c3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09
IG1vZGU7IH0KLQogICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVy
Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5
ZXJWaWV3Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92aWRlb0xheWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCmluZGV4IDI5MzhlYTg3ODkxM2YxZTIzZDQ1OTBl
ZWFiYzgyYzEyODFiOGNhZjkuLjgwOTEwOWFjZmQ1ZTBkNzMwOTQyNzYzYzM3ZGFmYzEwMmFlNjQ3
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KQEAgLTExNzUsNyArMTE3NSw3IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5U
b0lubGluZShib29sIHZpc2libGUsIGNvCiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQo
KQorYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb09wdGltaXplZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX3BsYXllckNvbnRy
b2xsZXIgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxs
c2NyZWVuTW9kZVN0YW5kYXJkICYmIHdrSXNPcHRpbWl6ZWRGdWxsc2NyZWVuU3VwcG9ydGVkKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmluZGV4IDU5OWE3NGEzYTc5NmQx
NTE1NDI3MjViZTc2ZGEyMzlkMDY2ODc4YzkuLmVjNTRhOWY4MTY5MzY1MTU4MThmMGRkNjQzZmY2
Zjg3MmUwNGFhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCkBAIC00NSwx
MCArNDUsMTEgQEAgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwogCiBjbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgc3RhdGlj
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgp
KTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50KCk7Ci0gICAgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSA9IGludGVyZmFjZTt9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCop
OworICAgIFdFQkNPUkVfRVhQT1JUIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsMTQgKzc2
LDE3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09S
RV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKwogcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2ZWRF
dmVudE5hbWVzKCk7CiAgICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFsbCgp
OwogICAgIAogICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAg
ICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKLSAgICBi
b29sIG1faXNMaXN0ZW5pbmc7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9
OworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UgeyBudWxscHRyIH07CiAgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKICAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CiAgICAgVmVjdG9y
PFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0KaW5kZXggNjlmN2JkYTYyYjY0NDA3MjZjZjQ3M2ZhOWQ5OThm
YzM1MzBkZmUwNS4uMTFlZDY2MzlmNDBlZWIzZGE2MWU0MjVlNTM5NjI2M2Q3MzM5NDE0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtNTMsOCArNTMsNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKICAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlz
dGVuaW5nKGZhbHNlKQotICAgICwgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cikK
IHsKIH0KIApAQCAtNjIsNiArNjAsMjAgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiB7CiB9CiAKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZShXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UqIGludGVyZmFjZSkKK3sK
KyAgICBpZiAoaW50ZXJmYWNlID09IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFjZTsK
KworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkgeworICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+cmVzZXRNZWRpYVN0YXRlKCk7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRW
aWRlb0RpbWVuc2lvbnModHJ1ZSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwgbV92aWRl
b0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOworICAgIH0KK30KKwogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCkKIHsKICAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50
KQpAQCAtNjksNyArODEsMTMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGUKIAogICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UtPnJlc2V0TWVkaWFTdGF0ZSgpOwotICAgIAorCisgICAgaWYgKG1fdmlkZW9FbGVtZW50
ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpKQorICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVOb25lKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVu
dC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOworCiAgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYm
IG1faXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVk
RXZlbnROYW1lcygpKQogICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CkBAIC04Nyw3ICsxMDUsOCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCogdmlkZQogCiAgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgp
KTsKIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMo
dHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWln
aHQoKSk7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNpb25zKHRydWUsIHZpZGVvRWxl
bWVudC0+dmlkZW9XaWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOwogfQogCiB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCAz
YmNlMDBiZThiNDUzN2EwOTNiODk3ZGIzMjI1YzUwNTVlMDgzNGRlLi42ZTY5NzdiZjBiYmEzMGVj
YTZkZjJiMmQxMjljZGE4ZDBmYzc4OGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRpYyBpbnQz
Ml90IGRldmljZU9yaWVudGF0aW9uKCkKICAgICBpZiAoIV9wYWdlIHx8ICFfcGFnZS0+dmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0
dXJuIF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPm1vZGUoKSAmIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQ7CisgICAgcmV0dXJu
IF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPmhhc01vZGUoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7CiB9CiAKIC0gKEJPT0wp
X21heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oCmluZGV4IGQ5ZTY1Y2U5MzM4YmY4YzM1YTMxMDY0ODBjOWNjNmEyYTIyNDc1MTYuLmI0OThh
ZThlNWJhODdmMmIyNDEzYWVmOGM0NmJhMWZlNDc2NWRlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaApAQCAtNDEsMzQgKzQxLDMxIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDog
cHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LCBwdWJsaWMg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIsIHB1YmxpYyBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7Ci0gICAgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisgICAgc3RhdGljIFJlZjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5h
Z2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
KyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIAotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUxheWVyKiBs
YXllckhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdC5nZXQoKTsgfQorICAgIHZvaWQg
c2V0TGF5ZXJIb3N0KFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiYmIGxheWVySG9zdCkgeyBtX2xh
eWVySG9zdCA9IFdURjo6bW92ZShsYXllckhvc3QpOyB9CiAKLSAgICAvLyBUcmFuc2xhdGUgdG8g
RnVsbHNjcmVlbkludGVyZmFjZQotICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQz
Ml90LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0Rl
dmljZVNjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7Ci0gICAgdm9pZCBzZXRTZWVr
YWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4m
KTsKLSAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKGJvb2wgZW5hYmxlZCwg
dWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwotICAgIHZv
aWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5s
aW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5saW5lUmVjdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRJbml0aWFsVmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0
UmVjdCBmcmFtZSkgeyBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1lOyB9CiAKLSAgICAvLyBGdWxs
c2NyZWVuIE9ic2VydmVyCi0gICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgLy8g
RnVsbHNjcmVlbk1vZGVsCitwcml2YXRlOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAgICAgICwgbV9jb250
ZXh0SWQoY29udGV4dElkKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbAogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgp
IG92ZXJyaWRlOwpAQCAtNzksMTggKzc2LDk3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2lu
U2Nhbm5pbmdCYWNrd2FyZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbmRTY2Fubmlu
ZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZs
b2F0UmVjdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlkZW9M
YXllckZyYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dy
YXZpdHkpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgVmlkZW9HcmF2aXR5IHZpZGVvTGF5ZXJHcmF2
aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSkgb3ZlcnJpZGU7CiAKLSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAgICAvLyBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1
bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOwor
CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgdWlu
dDY0X3QgbV9jb250ZXh0SWQ7CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fbGF5ZXJI
b3N0OwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3ZpZGVvTGF5ZXJGcmFtZTsKICAgICBWaWRl
b0dyYXZpdHkgbV92aWRlb0xheWVyR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSB9OwogfTsK
KworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVhbCB+V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsK
KworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIGJvb2wgaGFz
TW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25z
dDsKKyAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OworCisgICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBh
Z2VQcm94eSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0JiBlbnN1cmVJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcgorICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0
aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7
CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgaG9zdFRpbWUpOworICAgIHZvaWQgc2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMo
dWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNlZWthYmxlUmFuZ2VzVmVjdG9yKHVpbnQ2NF90IGNv
bnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcyk7CisgICAg
dm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVl
KTsKKyAgICB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Cisg
ICAgdm9pZCBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAg
dm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgIHZvaWQgc2V0RHVyYXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVy
YXRpb24pOworICAgIHZvaWQgc2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5
aW5nLCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0
KTsKKworICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICB2
b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBl
bmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJk
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIHNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsK
KyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1
cGxlPiBtX2NvbnRleHRNYXA7CisKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgppbmRleCA3NDYwNDAy
OTUzZGEwYzM3YjBmZmQ2Njg4ZDIxMzdhYmRkNmU3MjQ1Li5hNGU3YzI3YThlM2JjMjEyODNlNDUx
MzhlYTgyNDc2ZWQ3MDYzYTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMjIsMjEgKzIyLDIxIEBACiAKICNpZiBQTEFURk9STShJT1MpCiBtZXNz
YWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewotICAgIFJlc2V0TWVkaWFT
dGF0ZSgpCi0gICAgU2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9z
dFRpbWUpCi0gICAgU2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCi0gICAgU2V0
VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpCi0gICAgU2V0U2Vla2FibGVSYW5nZXNWZWN0b3IoVmVjdG9yPHN0ZDo6cGFpcjxkb3Vi
bGUsIGRvdWJsZT4+IHJhbmdlcyk7Ci0gICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFs
dWUpOwotICAgIFNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKFZlY3RvcjxTdHJpbmc+IG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIFNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgU2V0RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXMoYm9vbCBlbmFibGVkLCB1aW50
MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgU2V0RHVy
YXRpb24oZG91YmxlIGR1cmF0aW9uKQotICAgIFNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGRvdWJs
ZSByYXRlKQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50MzJfdCB2aWRlb0xheWVySUQs
IFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3Rvciwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKLSAgICBFbnRlckZ1bGxz
Y3JlZW4oKQotICAgIEV4aXRGdWxsc2NyZWVuKFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQot
ICAgIENsZWFudXBGdWxsc2NyZWVuKCkKLSAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9v
bCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCisgICAgUmVzZXRNZWRpYVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQorICAgIFNldEJ1ZmZl
cmVkVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCisgICAgU2V0
VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICBTZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcih1
aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5n
ZXMpCisgICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
YWx1ZSkKKyAgICBTZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAg
U2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgU2V0RXh0ZXJu
YWxQbGF5YmFja1Byb3BlcnRpZXModWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVp
bnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQorICAgIFNldER1
cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQorICAgIFNldFJhdGUo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCisgICAgU2V0
dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXll
cklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0
b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCisgICAgRW50ZXJG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQorICAgIENsZWFudXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5l
UmVjdCkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQppbmRleCAwZmVlNzQz
MGY5ZjExZDJiN2RiMTAzMDEyZmQwOWZiYWU0YWIwMDA1Li44YWM0YTVmMDk2ODAxYjlmOTNjOWE0
MDY0YjVkMDJlZDIxZjc4MTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtNTMs
OCArNTMsMTYzIEBAIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
K3sKK30KKworYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CiAjZWxzZQogCisjcHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnBsYXkoKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cGxheShtX2NvbnRleHRJZCk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwYXVzZSgpCit7CisgICAg
aWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5wYXVzZShtX2NvbnRleHRJZCk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp0b2dnbGVQbGF5U3RhdGUo
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+dG9nZ2xlUGxheVN0
YXRlKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OmJlZ2luU2NydWJiaW5nKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21h
bmFnZXItPmJlZ2luU2NydWJiaW5nKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmVuZFNjcnViYmluZygpCit7CisgICAgaWYgKG1fbWFuYWdl
cikKKyAgICAgICAgbV9tYW5hZ2VyLT5lbmRTY3J1YmJpbmcobV9jb250ZXh0SWQpOworfQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2Vla1RvVGltZShkb3VibGUgdGlt
ZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNlZWtUb1RpbWUo
bV9jb250ZXh0SWQsIHRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6ZmFzdFNlZWsoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAg
ICAgbV9tYW5hZ2VyLT5mYXN0U2VlayhtX2NvbnRleHRJZCwgdGltZSk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpiZWdpblNjYW5uaW5nRm9yd2FyZCgpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjYW5uaW5nRm9yd2Fy
ZChtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0
OjpiZWdpblNjYW5uaW5nQmFja3dhcmQoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAg
IG1fbWFuYWdlci0+YmVnaW5TY2FubmluZ0JhY2t3YXJkKG1fY29udGV4dElkKTsKK30KKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmVuZFNjYW5uaW5nKCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmVuZFNjYW5uaW5nKG1fY29udGV4dElk
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnJlcXVlc3RFeGl0
RnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5y
ZXF1ZXN0RXhpdEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVj
dCBmcmFtZSkKK3sKKyAgICBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1lOworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckZyYW1lKG1fY29udGV4dElk
LCBmcmFtZSk7Cit9CisKK1dlYkNvcmU6OkZsb2F0UmVjdCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OnZpZGVvTGF5ZXJGcmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlkZW9M
YXllckZyYW1lOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0
VmlkZW9MYXllckdyYXZpdHkoV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSBncmF2aXR5KQoreworICAgIG1fdmlkZW9MYXllckdyYXZpdHkgPSBncmF2aXR5Owor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0VmlkZW9MYXllckdyYXZp
dHkobV9jb250ZXh0SWQsIGdyYXZpdHkpOworfQorCitXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dmlk
ZW9MYXllckdyYXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJHcmF2aXR5
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9N
ZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAg
ICAgICBtX21hbmFnZXItPnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlv
bklkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBvcHRpb25JZCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihtX2NvbnRleHRJ
ZCwgb3B0aW9uSWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2NvbnRleHRJZCwgbW9kZSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkU2V0dXBGdWxsc2NyZWVu
KG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OmRpZEVudGVyRnVsbHNjcmVlbigpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5kaWRFbnRlckZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlm
IChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkRXhpdEZ1bGxzY3JlZW4obV9jb250
ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkQ2xl
YW51cEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4obV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkKK3sK
KyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZShtX2NvbnRleHRJZCk7Cit9CisKKyNwcmFnbWEgbWFyayAtIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eQorCiBQYXNzUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eT4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViUGFnZVBy
b3h5JiBwYWdlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5KHBhZ2UpKTsKQEAgLTY0LDggKzIxOSw2IEBAIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBhZ2VQcm94
eSYgcGFnCiAgICAgOiBtX3BhZ2UoJnBhZ2UpCiB7CiAgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwotICAgIHNl
dFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKHRoaXMpOwotICAgIHNldFdlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyKHRoaXMpOwogfQogCiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6On5XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoKQpAQCAtNzcsMzcgKzIzMCwxMTcg
QEAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5KCkKIAogdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFs
aWRhdGUoKQogewotICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0OjppbnZhbGlk
YXRlKCk7Ci0KICAgICBtX3BhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICBtX3BhZ2UgPSBudWxscHRyOwogCi0gICAgW21f
bGF5ZXJIb3N0IHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBtX2xheWVySG9zdC5jbGVhcigp
OworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAg
ICAgYXV0byYgbW9kZWwgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisgICAgICAgIGF1dG8mIGludGVy
ZmFjZSA9IHN0ZDo6Z2V0PDE+KHR1cGxlKTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRh
dGUoKTsKKyAgICAgICAgW21vZGVsLT5sYXllckhvc3QoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07
CisgICAgICAgIG1vZGVsLT5zZXRMYXllckhvc3QobnVsbHB0cik7CisgICAgfQorCisgICAgbV9j
b250ZXh0TWFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpyZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKK3sKKyAgICBmb3IgKGF1dG8mIHR1
cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKQorICAgICAgICBzdGQ6OmdldDwxPih0dXBsZSkt
PnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsKK30KKworYm9vbCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZSBtb2RlKSBjb25zdAoreworICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRN
YXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHN0ZDo6Z2V0PDE+KHR1cGxlKS0+aGFzTW9kZSht
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNh
bGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDog
bV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSkt
Pm1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6TW9kZWxJbnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIFJl
ZjxXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0g
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OmNyZWF0ZSgpOworCisgICAgaW50ZXJm
YWNlLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOworICAgIGludGVy
ZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsK
KworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUoV1RGOjptb3ZlKG1vZGVsKSwgV1RGOjptb3Zl
KGludGVyZmFjZSkpOworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVs
SW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9jb250ZXh0TWFwLmFkZChjb250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7Cisg
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gY3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4g
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2
NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5k
SW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCitXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRl
cmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5z
dXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpzZXR1cEZ1bGxzY3JlZW5XaXRoSUQodWludDMyX3QgdmlkZW9M
YXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGlu
Z0RldmljZVNjYWxlRmFjdG9yLCBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
IHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQorI3By
YWdtYSBtYXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0aElEKHVp
bnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yLCBIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUsIGJv
b2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKQogewogICAgIEFTU0VSVCh2aWRlb0xheWVySUQp
OwotICAgIG1fbGF5ZXJIb3N0ID0gV0tNYWtlUmVuZGVyTGF5ZXIodmlkZW9MYXllcklEKTsKKyAg
ICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbDsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ+IGludGVyZmFjZTsK
KworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UoY29udGV4dElkKTsKKworICAgIG1vZGVsLT5zZXRJbml0aWFsVmlkZW9MYXllckZyYW1lKGlu
aXRpYWxSZWN0KTsKKyAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0KFdLTWFrZVJlbmRlckxheWVyKHZp
ZGVvTGF5ZXJJRCkpOwogICAgIGlmIChob3N0aW5nRGV2aWNlU2NhbGVGYWN0b3IgIT0gMSkgewog
ICAgICAgICAvLyBJbnZlcnQgdGhlIHNjYWxlIHRyYW5zZm9ybSBhZGRlZCBpbiB0aGUgV2ViUHJv
Y2VzcyB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzE4MzE2NTQyPi4KICAgICAgICAgZmxvYXQgaW52
ZXJzZVNjYWxlID0gMSAvIGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvcjsKLSAgICAgICAgW21fbGF5
ZXJIb3N0IHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VTY2FsZSwg
aW52ZXJzZVNjYWxlLCAxKV07CisgICAgICAgIFttb2RlbC0+bGF5ZXJIb3N0KCkgc2V0VHJhbnNm
b3JtOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUoaW52ZXJzZVNjYWxlLCBpbnZlcnNlU2NhbGUsIDEp
XTsKICAgICB9CiAKLSAgICBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGluaXRpYWxSZWN0OwotCiAgICAg
VUlWaWV3ICpwYXJlbnRWaWV3ID0gZG93bmNhc3Q8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eT4oKm1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkucmVtb3RlTGF5ZXJUcmVlSG9zdCgpLnJvb3RM
YXllcigpOwotICAgIHNldHVwRnVsbHNjcmVlbigqbV9sYXllckhvc3QuZ2V0KCksIGluaXRpYWxS
ZWN0LCBwYXJlbnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd09wdGltaXplZEZ1bGxz
Y3JlZW4pOworICAgIGludGVyZmFjZS0+c2V0dXBGdWxsc2NyZWVuKCptb2RlbC0+bGF5ZXJIb3N0
KCksIGluaXRpYWxSZWN0LCBwYXJlbnRWaWV3LCB2aWRlb0Z1bGxzY3JlZW5Nb2RlLCBhbGxvd09w
dGltaXplZEZ1bGxzY3JlZW4pOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlIG1vZGUpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFu
Z2VkKG1vZGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKS5yZXNldE1lZGlhU3RhdGUoKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpw
YWlyPGRvdWJsZSwgZG91YmxlPj4mIHJhbmdlcykKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1
cnJlbnRUaW1lLCBkb3VibGUgaG9zdFRpbWUpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuc2V0Q3VycmVudFRpbWUoY3VycmVudFRpbWUsIGhvc3RUaW1lKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEJ1ZmZlcmVkVGltZSh1aW50NjRfdCBj
b250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNv
bnRleHRJZCkuc2V0QnVmZmVyZWRUaW1lKGJ1ZmZlcmVkVGltZSk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29u
dGV4dElkLCBib29sIGhhc1ZpZGVvLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQor
eworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldFZpZGVvRGltZW5zaW9ucyhoYXNW
aWRlbywgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcih1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXMpCiB7CiAgICAgUmVmUHRyPFRpbWVS
YW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHJhbmdlIDogcmFuZ2VzKQpAQCAtMTE4LDExOCArMzUxLDE2NCBAQCB2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0U2Vla2FibGVSYW5nZXNWZWN0b3IoY29uc3Qg
VmVjdG9yPHN0ZDo6cAogICAgICAgICB0aW1lUmFuZ2VzLT5hZGQocmFuZ2UuZmlyc3QsIHJhbmdl
LnNlY29uZCk7CiAgICAgfQogCi0gICAgc2V0U2Vla2FibGVSYW5nZXMoKnRpbWVSYW5nZXMpOwor
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldFNlZWthYmxlUmFuZ2VzKCp0aW1lUmFu
Z2VzKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldENhblBs
YXlGYXN0UmV2ZXJzZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCit7CisgICAgZW5z
dXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuc2V0Q2FuUGxheUZhc3RSZXZlcnNlKHZhbHVlKTsKK30K
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEF1ZGlvTWVkaWFTZWxl
Y3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElk
KS5zZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldExlZ2libGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250
ZXh0SWQpLnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRJ
bmRleCk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRFeHRl
cm5hbFBsYXliYWNrUHJvcGVydGllcyhib29sIGVuYWJsZWQsIHVpbnQzMl90IHRhcmdldFR5cGUs
IFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OnNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgYm9vbCBlbmFibGVkLCB1aW50MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2
aWNlTmFtZSkKIHsKICAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlPih0YXJnZXRUeXBlKTsKLSAgICAKICAg
ICBBU1NFUlQodHlwZSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVB
aXJQbGF5IHx8IHR5cGUgPT0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpUYXJnZXRUeXBl
VFZPdXQgfHwgdHlwZSA9PSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2U6OlRhcmdldFR5cGVO
b25lKTsKICAgICAKLSAgICBzZXRFeHRlcm5hbFBsYXliYWNrKGVuYWJsZWQsIHR5cGUsIGxvY2Fs
aXplZERldmljZU5hbWUpOworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldEV4dGVy
bmFsUGxheWJhY2soZW5hYmxlZCwgdHlwZSwgbG9jYWxpemVkRGV2aWNlTmFtZSk7CiB9Ci0gICAg
Ci12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldER1
cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQogewotICAgIGJvb2wg
aXNWaWV3VmlzaWJsZSA9IG1fcGFnZS0+aXNWaWV3VmlzaWJsZSgpOwotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RnVsbHNjcmVlbk1heVJldHVy
blRvSW5saW5lKGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBlbnN1cmVJ
bnRlcmZhY2UoY29udGV4dElkKS5zZXREdXJhdGlvbihkdXJhdGlvbik7CiB9Ci0gICAgCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5l
KGJvb2wgdmlzaWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5saW5lUmVjdCkKKwordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFJhdGUodWludDY0X3QgY29udGV4
dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCiB7Ci0gICAgbV9wYWdlLT5mdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdDo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHZpc2libGUsIGlubGluZVJlY3QpOworICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldFJhdGUoaXNQbGF5aW5nLCByYXRlKTsKIH0K
IAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnJlcXVlc3RFeGl0RnVsbHNj
cmVlbigpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlJlcXVlc3RFeGl0RnVsbHNjcmVlbigpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICBhdXRvJiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4
dElkKTsKKyAgICBpbnRlcmZhY2UuZW50ZXJGdWxsc2NyZWVuKCk7CisKKyAgICAvLyBPbmx5IG9u
ZSBjb250ZXh0IGNhbiBiZSBpbiBhIGdpdmVuIGZ1bGwgc2NyZWVuIG1vZGUgYXQgYSB0aW1lOgor
ICAgIGZvciAoYXV0byYgY29udGV4dFBhaXIgOiBtX2NvbnRleHRNYXApIHsKKyAgICAgICAgYXV0
byYgb3RoZXJDb250ZXh0SWQgPSBjb250ZXh0UGFpci5rZXk7CisgICAgICAgIGlmIChjb250ZXh0
SWQgPT0gb3RoZXJDb250ZXh0SWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBh
dXRvJiBvdGhlckludGVyZmFjZSA9IHN0ZDo6Z2V0PDE+KGNvbnRleHRQYWlyLnZhbHVlKTsKKyAg
ICAgICAgaWYgKG90aGVySW50ZXJmYWNlLT5oYXNNb2RlKGludGVyZmFjZS5tb2RlKCkpKQorICAg
ICAgICAgICAgb3RoZXJJbnRlcmZhY2UtPnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKTsK
KyAgICB9CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0
RnVsbHNjcmVlbigpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpJbnRSZWN0IGZpbmFsUmVjdCkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkRpZEV4aXRGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+ZGlk
RXhpdEZ1bGxzY3JlZW4oKTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5leGl0RnVs
bHNjcmVlbihmaW5hbFJlY3QpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmNsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
LSAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgW21fbGF5ZXJIb3N0IHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKLSAgICBtX2xheWVySG9zdC5jbGVhcigpOwotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkQ2xlYW51cEZ1bGxzY3JlZW4o
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuY2xl
YW51cEZ1bGxzY3JlZW4oKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmRpZFNldHVwRnVsbHNjcmVlbigpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCiB7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4o
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUoKTsKKworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnByZXBhcmVkVG9SZXR1
cm5Ub0lubGluZSh2aXNpYmxlLCBpbmxpbmVSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbigpCisjcHJhZ21hIG1hcmsgTWVz
c2FnZXMgdG8gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCit2b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFbnRlckZ1bGxz
Y3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgbV9wYWdlLT5kaWRFbnRlckZ1bGxzY3Jl
ZW4oKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OlBsYXkoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpwbGF5KCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpQbGF5KCksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6UGF1c2UoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0gICAgCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cGF1c2UoKQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OlBhdXNlKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6VG9nZ2xlUGxheVN0YXRlKGNvbnRleHRJ
ZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnRvZ2dsZVBsYXlTdGF0ZSgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpUb2dnbGVQ
bGF5U3RhdGUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjcnViYmluZyhjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpiZWdpblNjcnViYmluZygpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjplbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6QmVnaW5TY3J1YmJpbmco
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpFbmRTY3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbmRTY3J1
YmJpbmcoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlZWtUb1RpbWUo
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkVuZFNjcnViYmluZygpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OlNlZWtUb1RpbWUoY29udGV4dElkLCB0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWVrVG9UaW1lKGRv
dWJsZSB0aW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZhc3RTZWVr
KHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZWVrVG9UaW1lKHRpbWUpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OkZhc3RTZWVrKGNvbnRleHRJZCwgdGltZSksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWsoZG91
YmxlIHRpbWUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5TY2Fu
bmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RmFzdFNlZWsodGltZSksIG1fcGFnZS0+
cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6QmVnaW5TY2FubmluZ0ZvcndhcmQoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpiZWdpblNjYW5u
aW5nRm9yd2FyZCgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5T
Y2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdGb3J3YXJk
KCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3YXJkKGNvbnRleHRJZCksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpCZWdpblNjYW5uaW5nQmFj
a3dhcmQoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpFbmRTY2FubmluZyhjb250ZXh0SWQpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVu
ZFNjYW5uaW5nKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0
RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RW5kU2Nhbm5pbmcoKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpSZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CiB9CiAKLUZsb2F0UmVjdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZp
ZGVvTGF5ZXJGcmFtZSgpIGNvbnN0Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eTo6ZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICByZXR1cm4g
bV92aWRlb0xheWVyRnJhbWU7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpEaWRTZXR1cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRW
aWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lKQordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OkRpZEV4aXRGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpE
aWRFbnRlckZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5kaWRFbnRlckZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmRpZENsZWFudXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sK
KyAgICBhdXRvJiBtb2RlbCA9IGVuc3VyZU1vZGVsKGNvbnRleHRJZCk7CisKKyAgICBbQ0FUcmFu
c2FjdGlvbiBmbHVzaF07CisgICAgW21vZGVsLmxheWVySG9zdCgpIHJlbW92ZUZyb21TdXBlcmxh
eWVyXTsKKyAgICBtb2RlbC5zZXRMYXllckhvc3QobnVsbHB0cik7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRDbGVhbnVwRnVsbHNjcmVl
bihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKworICAgIG1fY29udGV4dE1hcC5yZW1v
dmUoY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnNldFZpZGVvTGF5ZXJGcmFtZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVj
dCBmcmFtZSkKIHsKLSAgICBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1lOwogICAgIEBhdXRvcmVs
ZWFzZXBvb2wgewogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gOTAwMDAK
ICAgICAgICAgQktTQW5pbWF0aW9uRmVuY2VIYW5kbGUqIHN5bmNocm9uaXphdGlvbkZlbmNlID0g
W1VJV2luZG93IF9zeW5jaHJvbml6ZWREcmF3aW5nRmVuY2VdOwpAQCAtMjM4LDMwICs1MTcsMzYg
QEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFt
ZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUKICAgICAgICAgbWFjaF9wb3J0X25hbWVfdCBmZW5j
ZVBvcnQgPSBbVUlXaW5kb3cgX3N5bmNocm9uaXplRHJhd2luZ0Fjcm9zc1Byb2Nlc3Nlc107CiAj
ZW5kaWYKIAotICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChmcmFtZSwgSVBDOjpBdHRhY2htZW50
KGZlbmNlUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6U2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKGNvbnRleHRJZCwgZnJhbWUsIElQQzo6QXR0YWNo
bWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKSksIG1fcGFnZS0+cGFnZUlE
KCkpOwogICAgIH0KIH0KIAotV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVv
R3Jhdml0eSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJHcmF2aXR5
KCkgY29uc3QKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xh
eWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKIHsKLSAgICByZXR1cm4gbV92aWRlb0xheWVy
R3Jhdml0eTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bShjb250ZXh0SWQsICh1bnNpZ25lZClncmF2
aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRWaWRlb0xheWVyR3Jhdml0eShXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVp
bnQ2NF90IGluZGV4KQogewotICAgIG1fdmlkZW9MYXllckdyYXZpdHkgPSBncmF2aXR5OwotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2V0Vmlk
ZW9MYXllckdyYXZpdHlFbnVtKCh1bnNpZ25lZClncmF2aXR5KSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpT
ZWxlY3RBdWRpb01lZGlhT3B0aW9uKGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KLSAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RB
dWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyOjpTZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oY29udGV4dElkLCBpbmRleCksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50
NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVl
bk1vZGUgbW9kZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OlNlbGVjdExlZ2libGVNZWRpYU9wdGlvbihpbmRleCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6RnVsbHNjcmVlbk1vZGVDaGFuZ2VkKGNvbnRleHRJZCwgbW9kZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNj
cmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBib29sIGlz
Vmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2libGUoKTsKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5U
b0lubGluZShjb250ZXh0SWQsIGlzVmlld1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKK30K
KwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oCmluZGV4
IGQxM2U2MjJiYzI3YTQ5Mjc3YzY5MTMzZDFmM2IwZDQzMTFiYmFkNDYuLjZhYzM2Yjk3NDc1NDIz
MzQ1MmJjMGJiNmJhYjBjMGRhZjdkNDAwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXllci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKQEAgLTUxLDUzICs1MiwxMjAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IExheWVySG9zdGluZ0NvbnRleHQ7CiBjbGFzcyBXZWJQYWdlOworY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciA6IHB1Ymxp
YyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCwgcHVibGljIFdl
YkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0IDogcHVi
bGljIFJlZkNvdW50ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4sIHB1Ymxp
YyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gY3JlYXRlKFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXImIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQobWFuYWdlciwgY29udGV4dElkKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgp
IHsgbV9tYW5hZ2VyID0gbnVsbHB0cjsgfQorCisgICAgTGF5ZXJIb3N0aW5nQ29udGV4dCogbGF5
ZXJIb3N0aW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC5nZXQoKTsg
fQorICAgIHZvaWQgc2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJI
b3N0aW5nQ29udGV4dD4mJik7CisKKyAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9pc0FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0SXNBbmltYXRpbmcoYm9vbCBmbGFnKSB7
IG1faXNBbmltYXRpbmcgPSBmbGFnOyB9CisKKyAgICBib29sIHRhcmdldElzRnVsbHNjcmVlbigp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0SXNGdWxsc2NyZWVuOyB9CisgICAgdm9pZCBzZXRUYXJn
ZXRJc0Z1bGxzY3JlZW4oYm9vbCBmbGFnKSB7IG1fdGFyZ2V0SXNGdWxsc2NyZWVuID0gZmxhZzsg
fQorCisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBm
dWxsc2NyZWVuTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHNjcmVlbk1vZGU7IH0KKyAgICB2
b2lkIHNldEZ1bGxzY3JlZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUgbW9kZSkgeyBtX2Z1bGxzY3JlZW5Nb2RlID0gbW9kZTsgfQorCisgICAgYm9v
bCBpc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbHNjcmVlbjsgfQorICAgIHZv
aWQgc2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX2lzRnVsbHNjcmVlbiA9IGZsYWc7IH0K
KworcHJpdmF0ZToKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNl
dER1cmF0aW9uKGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRU
aW1lKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBzZXRCdWZmZXJlZFRpbWUoZG91YmxlKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8s
IGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldENhblBsYXlGYXN0UmV2ZXJzZShib29sIHZhbHVlKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3Qg
VmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
Y29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEV4dGVybmFsUGxheWJhY2soYm9vbCBl
bmFibGVkLCBFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgV1RGOjpTdHJpbmcgbG9jYWxpemVk
RGV2aWNlTmFtZSkgb3ZlcnJpZGU7CisKKyAgICBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXImLCB1aW50NjRfdCBjb250ZXh0SWQpOwor
CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciogbV9tYW5hZ2VyOworICAgIHVpbnQ2NF90
IG1fY29udGV4dElkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXllckhvc3RpbmdDb250ZXh0PiBt
X2xheWVySG9zdGluZ0NvbnRleHQ7CisgICAgYm9vbCBtX2lzQW5pbWF0aW5nIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fdGFyZ2V0SXNGdWxsc2NyZWVuIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fZnVsbHNjcmVlbk1vZGUgeyBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSB9OworICAg
IGJvb2wgbV9pc0Z1bGxzY3JlZW4geyBmYWxzZSB9OworfTsKKworY2xhc3MgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI+LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBjcmVhdGUoUGFzc1JlZlB0cjxX
ZWJQYWdlPik7CiAgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpOwogICAg
IAogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNz
YWdlRGVjb2RlciYpIG92ZXJyaWRlOwotICAgIAorCisgICAgLy8gSW50ZXJmYWNlIHRvIENocm9t
ZUNsaWVudAogICAgIGJvb2wgc3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKSBjb25zdDsKICAgICB2
b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
KTsKICAgICB2b2lkIGV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoV2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudCYpOwogICAgIAogcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OworCiAgICAgZXhwbGljaXQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcihQYXNzUmVmUHRyPFdlYlBhZ2U+KTsKLSAgICB2aXJ0dWFsIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiByaHMpIG92ZXJyaWRlIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqPih0aGlzKSA9PSAmcmhzOyB9Ci0g
ICAgCi0gICAgLy8gRnVsbHNjcmVlbkludGVyZmFjZQotICAgIHZpcnR1YWwgdm9pZCByZXNldE1l
ZGlhU3RhdGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHVyYXRpb24oZG91Ymxl
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJl
bnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEJ1ZmZlcmVkVGltZShkb3VibGUgYnVmZmVyZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UmF0ZShib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRT
ZWVrYWJsZVJhbmdlcyhjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldENhblBsYXlGYXN0UmV2ZXJzZShib29sIHZhbHVlKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgV2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgU3Ry
aW5nIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOwotCi0gICAgLy8gYWRkaXRpb25hbCBp
bmNvbWluZwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1bGxzY3JlZW4oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEV4aXRG
dWxsc2NyZWVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1bnNpZ25lZCk7Ci0gICAg
dmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShib29sIGlzUGFnZVZpc2li
bGUpOwotICAgIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKFdlYkNvcmU6OkZsb2F0UmVj
dCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpOworICAgIHR5cGVkZWYgc3RkOjp0
dXBsZTxSZWZQdHI8V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+
LCBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4+IE1vZGVsSW50ZXJm
YWNlVHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFj
ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1v
ZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViQ29yZTo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQmIGVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCYgZW5zdXJlSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dAorICAgIHZvaWQgcmVzZXRNZWRpYVN0YXRlKHVp
bnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBzZXREdXJhdGlvbih1aW50NjRfdCBjb250ZXh0
SWQsIGRvdWJsZSk7CisgICAgdm9pZCBzZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250ZXh0SWQs
IGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpOworICAgIHZvaWQgc2V0QnVm
ZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAg
dm9pZCBzZXRSYXRlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBs
YXliYWNrUmF0ZSk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4
dElkLCBib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKKyAgICB2b2lk
IHNldFNlZWthYmxlUmFuZ2VzKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgV2ViQ29yZTo6VGlt
ZVJhbmdlcyYpOworICAgIHZvaWQgc2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRl
eHRJZCwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
cyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50
NjRfdCBzZWxlY3RlZEluZGV4KTsKKyAgICB2b2lkIHNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9w
dGlvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywg
dWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrKHVp
bnQ2NF90IGNvbnRleHRJZCwgYm9vbCBlbmFibGVkLCBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5JbnRlcmZhY2U6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVk
RGV2aWNlTmFtZSk7CisKKyAgICAvLyBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eQorICAgIHZvaWQgcGxheSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
cGF1c2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSh1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgYmVnaW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4
dElkKTsKKyAgICB2b2lkIGVuZFNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgc2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lk
IGZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpOworICAgIHZvaWQgYmVn
aW5TY2FubmluZ0ZvcndhcmQodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Nh
bm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZW5kU2Nhbm5pbmco
dWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHJlcXVlc3RFeGl0RnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkU2V0dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAg
dm9pZCBkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQg
c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCk7CisgICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5
KTsKKyAgICB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElkLCB1
aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0
X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCk7CisgICAgdm9pZCBmdWxsc2NyZWVuTW9kZUNo
YW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRl
b0Z1bGxzY3JlZW5Nb2RlKTsKKyAgICB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSk7CiAgICAgCiAgICAgV2ViUGFn
ZSogbV9wYWdlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVv
RWxlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXll
ckhvc3RpbmdDb250ZXh0OwotICAgIAotICAgIGJvb2wgbV9pc0FuaW1hdGluZzsKLSAgICBib29s
IG1fdGFyZ2V0SXNGdWxsc2NyZWVuOwotICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUgbV9mdWxsc2NyZWVuTW9kZTsKLSAgICBib29sIG1faXNGdWxsc2Ny
ZWVuOworICAgIEhhc2hNYXA8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCosIHVpbnQ2NF90PiBt
X3ZpZGVvRWxlbWVudHM7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgTW9kZWxJbnRlcmZhY2VUdXBs
ZT4gbV9jb250ZXh0TWFwOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KaW5kZXggZDNjNjhhMzY2Y2Y4MTU0ZWRkZGIx
ODZkZDJlNmM5MzQ3ZmRhNTJhYi4uMDEzZGEzZWU2MjI0NWQxNDI1MmZjYjE0YTBhYjk4MzBhMDc0
ZWM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0yMiwyNiAr
MjIsMjYgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIG1lc3NhZ2VzIC0+IFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIgewotICAgIFBsYXkoKQotICAgIFBhdXNlKCkKLSAgICBUb2dnbGVQbGF5U3Rh
dGUoKQotICAgIEJlZ2luU2NydWJiaW5nKCkKLSAgICBFbmRTY3J1YmJpbmcoKQotICAgIFNlZWtU
b1RpbWUoZG91YmxlIHRpbWUpCi0gICAgRmFzdFNlZWsoZG91YmxlIHRpbWUpCi0gICAgQmVnaW5T
Y2FubmluZ0ZvcndhcmQoKQotICAgIEJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCi0gICAgRW5kU2Nh
bm5pbmcoKQotICAgIFJlcXVlc3RFeGl0RnVsbHNjcmVlbigpCi0gICAgRGlkU2V0dXBGdWxsc2Ny
ZWVuKCkKLSAgICBEaWRFeGl0RnVsbHNjcmVlbigpCi0gICAgRGlkRW50ZXJGdWxsc2NyZWVuKCkK
LSAgICBEaWRDbGVhbnVwRnVsbHNjcmVlbigpCi0gICAgU2V0VmlkZW9MYXllckZyYW1lRmVuY2Vk
KFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCi0g
ICAgU2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVuc2lnbmVkIGdyYXZpdHkpCi0gICAgU2VsZWN0
QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKLSAgICBTZWxlY3RMZWdpYmxlTWVkaWFP
cHRpb24odWludDY0X3QgaW5kZXgpCi0gICAgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9k
ZSkKLSAgICBGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoYm9vbCBpc1BhZ2VWaXNpYmxlKQor
ICAgIFBsYXkodWludDY0X3QgY29udGV4dElkKQorICAgIFBhdXNlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKKyAgICBUb2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKQorICAgIEJlZ2luU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFbmRTY3J1YmJpbmcodWludDY0X3QgY29u
dGV4dElkKQorICAgIFNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSkK
KyAgICBGYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorICAgIEJlZ2lu
U2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBCZWdpblNjYW5uaW5nQmFj
a3dhcmQodWludDY0X3QgY29udGV4dElkKQorICAgIEVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRl
eHRJZCkKKyAgICBSZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAg
IERpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRGlkRXhpdEZ1bGxz
Y3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZEVudGVyRnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQpCisgICAgRGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElk
KQorICAgIFNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5jZVBvcnQpCisgICAgU2V0
VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5zaWduZWQgZ3Jhdml0
eSkKKyAgICBTZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0
X3QgaW5kZXgpCisgICAgU2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgdWludDY0X3QgaW5kZXgpCisgICAgRnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNv
bnRleHRJZCwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2
aWRlb0Z1bGxzY3JlZW5Nb2RlKQorICAgIEZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQYWdlVmlzaWJsZSkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0KaW5kZXggNDVhM2UyOTgyMGViMmZjMjc1NTM3NWQyZjQxMDkyMDI2YmJhODdkYS4u
NzUxMzQzZDU0MzRlYTZlZDg0NjEyYWRiNjMwODMyOGMzYWQ5NzAwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1tCkBAIC02MCw2ICs2MCw5NyBAQCBzdGF0aWMgSW50UmVjdCBjbGllbnRSZWN0Rm9yRWxl
bWVudChIVE1MRWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudC0+Y2xpZW50UmVj
dCgpOwogfQogCitzdGF0aWMgdWludDY0X3QgbmV4dENvbnRleHRJZCgpCit7CisgICAgc3RhdGlj
IHVpbnQ2NF90IGNvbnRleHRJZCA9IDA7CisgICAgcmV0dXJuICsrY29udGV4dElkOworfQorCisj
cHJhZ21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0CisKK1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQoV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciYgbWFuYWdlciwgdWludDY0X3QgY29u
dGV4dElkKQorICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQorICAgICwgbV9jb250ZXh0SWQoY29u
dGV4dElkKQoreworfQorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp+V2Vi
VmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChzdGQ6OnVu
aXF1ZV9wdHI8TGF5ZXJIb3N0aW5nQ29udGV4dD4mJiBjb250ZXh0KQoreworICAgIG1fbGF5ZXJI
b3N0aW5nQ29udGV4dCA9IFdURjo6bW92ZShjb250ZXh0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpyZXNldE1lZGlhU3RhdGUoKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+cmVzZXRNZWRpYVN0YXRlKG1fY29udGV4dElk
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXREdXJh
dGlvbihkb3VibGUgZHVyYXRpb24pCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9t
YW5hZ2VyLT5zZXREdXJhdGlvbihtX2NvbnRleHRJZCwgZHVyYXRpb24pOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEN1cnJlbnRUaW1lKGRvdWJsZSBj
dXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAg
ICAgICAgbV9tYW5hZ2VyLT5zZXRDdXJyZW50VGltZShtX2NvbnRleHRJZCwgY3VycmVudFRpbWUs
IGFuY2hvclRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6OnNldEJ1ZmZlcmVkVGltZShkb3VibGUgYnVmZmVyZWRUaW1lKQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0QnVmZmVyZWRUaW1lKG1fY29udGV4dElkLCBi
dWZmZXJlZFRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6OnNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFJhdGUobV9jb250ZXh0SWQsIGlz
UGxheWluZywgcGxheWJhY2tSYXRlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VDb250ZXh0OjpzZXRWaWRlb0RpbWVuc2lvbnMoYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPnNldFZpZGVvRGltZW5zaW9ucyhtX2NvbnRleHRJZCwgaGFzVmlkZW8sIHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldFNl
ZWthYmxlUmFuZ2VzKGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmIHJhbmdlcykKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFNlZWthYmxlUmFuZ2VzKG1fY29u
dGV4dElkLCByYW5nZXMpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6OnNldENhblBsYXlGYXN0UmV2ZXJzZShib29sIHZhbHVlKQoreworICAgIGlmIChtX21h
bmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0Q2FuUGxheUZhc3RSZXZlcnNlKG1fY29udGV4
dElkLCB2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5n
PiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAobV9tYW5hZ2Vy
KQorICAgICAgICBtX21hbmFnZXItPnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKG1fY29u
dGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNv
bnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRMZWdpYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zKG1fY29udGV4dElkLCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRFeHRlcm5h
bFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUgdHlwZSwg
V1RGOjpTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX21hbmFnZXItPnNldEV4dGVybmFsUGxheWJhY2sobV9jb250ZXh0SWQsIGVuYWJs
ZWQsIHR5cGUsIGxvY2FsaXplZERldmljZU5hbWUpOworfQorCisjcHJhZ21hIG1hcmsgLSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyCisKIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcj4gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6Y3JlYXRlKFBhc3NSZWZQdHI8V2ViUGFn
ZT4gcGFnZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIocGFnZSkpOwpAQCAtNjcsMjAgKzE1OCw1OSBAQCBQYXNzUmVmUHRyPFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNyZWF0ZShQYXNzUmVm
UAogCiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
KFBhc3NSZWZQdHI8V2ViUGFnZT4gcGFnZSkKICAgICA6IG1fcGFnZShwYWdlLmdldCgpKQotICAg
ICwgbV9pc0FuaW1hdGluZyhmYWxzZSkKLSAgICAsIG1fdGFyZ2V0SXNGdWxsc2NyZWVuKGZhbHNl
KQotICAgICwgbV9mdWxsc2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlTm9uZSkKLSAgICAsIG1faXNGdWxsc2NyZWVuKGZhbHNlKQogewotICAgIHNldFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZSh0aGlzKTsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIAogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewor
ICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2NvbnRleHRNYXAudmFsdWVzKCkpIHsKKyAgICAgICAg
YXV0byBtb2RlbCA9IHN0ZDo6Z2V0PDA+KHR1cGxlKTsKKyAgICAgICAgYXV0byBpbnRlcmZhY2Ug
PSBzdGQ6OmdldDwxPih0dXBsZSk7CisKKyAgICAgICAgbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZShudWxscHRyKTsKKyAgICAgICAgbW9kZWwtPnNldFZpZGVvRWxlbWVudChu
dWxscHRyKTsKKworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAg
ICBtX2NvbnRleHRNYXAuY2xlYXIoKTsKKyAgICBtX3ZpZGVvRWxlbWVudHMuY2xlYXIoKTsKKwog
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAorV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6TW9kZWxJbnRl
cmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpjcmVhdGVNb2RlbEFuZEludGVy
ZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVl
bk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNl
Q29udGV4dD4gaW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRMYXllckhvc3Rp
bmdDb250ZXh0KExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvckV4dGVybmFsSG9zdGluZ1By
b2Nlc3MoKSk7CisgICAgbW9kZWwtPnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZShpbnRl
cmZhY2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShXVEY6Om1vdmUobW9k
ZWwpLCBXVEY6Om1vdmUoaW50ZXJmYWNlKSk7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuc3Vy
ZU1vZGVsQW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fY29udGV4dE1hcC5hZGQoY29udGV4dElkLCBNb2RlbEludGVyZmFjZVR1cGxlKCkp
OworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGNyZWF0ZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Cit9CisKK1dlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgcmV0dXJuICpzdGQ6OmdldDwwPihl
bnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsKK30KKworV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlQ29udGV4dCYgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50
ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICByZXR1cm4gKnN0ZDo6Z2V0PDE+KGVu
c3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkpOworfQorCisjcHJhZ21hIG1hcmsgSW50
ZXJmYWNlIHRvIENocm9tZUNsaWVudDoKKwogYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNldHRpbmdz
OjphdktpdEVuYWJsZWQoKTsKQEAgLTkwLDY2ICsyMjAsNzkgQEAgdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjplbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlk
ZW9FbGUKIHsKICAgICBBU1NFUlQobW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlTm9uZSk7CiAKLSAgICBtX3ZpZGVvRWxlbWVudCA9ICZ2aWRlb0VsZW1lbnQ7Cisg
ICAgdWludDY0X3QgY29udGV4dElkOwogCi0gICAgbV90YXJnZXRJc0Z1bGxzY3JlZW4gPSB0cnVl
OwotICAgIG1fZnVsbHNjcmVlbk1vZGUgPSBtb2RlOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92
aWRlb0VsZW1lbnRzLmFkZCgmdmlkZW9FbGVtZW50LCAwKTsKKyAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBuZXh0Q29udGV4
dElkKCk7CisgICAgY29udGV4dElkID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAotICAg
IGlmIChtX2lzQW5pbWF0aW5nKQotICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVs
LCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKIAotICAg
IG1faXNBbmltYXRpbmcgPSB0cnVlOwotICAgIHNldFZpZGVvRWxlbWVudCgmdmlkZW9FbGVtZW50
KTsKKyAgICBpbnRlcmZhY2UtPnNldFRhcmdldElzRnVsbHNjcmVlbih0cnVlKTsKKyAgICBpbnRl
cmZhY2UtPnNldEZ1bGxzY3JlZW5Nb2RlKG1vZGUpOworICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1l
bnQoJnZpZGVvRWxlbWVudCk7CiAKLSAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhv
c3RpbmdDb250ZXh0OjpjcmVhdGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCk7Ci0gICAgYm9v
bCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4gPSBtX3ZpZGVvRWxlbWVudC0+bWVkaWFTZXNzaW9u
KCkuYWxsb3dzQWx0ZXJuYXRlRnVsbHNjcmVlbigqbV92aWRlb0VsZW1lbnQuZ2V0KCkpOworICAg
IGlmIChpbnRlcmZhY2UtPmlzQW5pbWF0aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnRl
cmZhY2UtPnNldElzQW5pbWF0aW5nKHRydWUpOworCisgICAgYm9vbCBhbGxvd09wdGltaXplZEZ1
bGxzY3JlZW4gPSB2aWRlb0VsZW1lbnQubWVkaWFTZXNzaW9uKCkuYWxsb3dzQWx0ZXJuYXRlRnVs
bHNjcmVlbih2aWRlb0VsZW1lbnQpOwogICAgIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQobV9s
YXllckhvc3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvckVsZW1lbnQoJnZp
ZGVvRWxlbWVudCksIG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9mdWxsc2NyZWVuTW9k
ZSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldHVw
RnVsbHNjcmVlbldpdGhJRChjb250ZXh0SWQsIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4
dCgpLT5jb250ZXh0SUQoKSwgY2xpZW50UmVjdEZvckVsZW1lbnQoJnZpZGVvRWxlbWVudCksIG1f
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpLCBh
bGxvd09wdGltaXplZEZ1bGxzY3JlZW4pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVt
ZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxW
aWRlb0VsZW1lbnQmIHZpZGVvRWxlbWVudCkKIHsKLSAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVu
dD4gdmlkZW9FbGVtZW50ID0gbV92aWRlb0VsZW1lbnQucmVsZWFzZSgpOwotICAgIG1fdGFyZ2V0
SXNGdWxsc2NyZWVuID0gZmFsc2U7CisgICAgQVNTRVJUKG1fdmlkZW9FbGVtZW50cy5jb250YWlu
cygmdmlkZW9FbGVtZW50KSk7CisKKyAgICB1aW50NjRfdCBjb250ZXh0SWQgPSBtX3ZpZGVvRWxl
bWVudHMuZ2V0KCZ2aWRlb0VsZW1lbnQpOworICAgIGF1dG8mIGludGVyZmFjZSA9IGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpOwogCi0gICAgaWYgKG1faXNBbmltYXRpbmcpCisgICAgaW50ZXJm
YWNlLnNldFRhcmdldElzRnVsbHNjcmVlbihmYWxzZSk7CisKKyAgICBpZiAoaW50ZXJmYWNlLmlz
QW5pbWF0aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faXNBbmltYXRpbmcgPSB0cnVl
OwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpFeGl0RnVsbHNjcmVlbihjbGllbnRSZWN0Rm9yRWxlbWVudCh2aWRlb0VsZW1lbnQuZ2V0
KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgaW50ZXJmYWNlLnNldElzQW5pbWF0aW5nKHRy
dWUpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQsIGNsaWVudFJlY3RGb3JFbGVtZW50KCZ2
aWRlb0VsZW1lbnQpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKCkKKyNwcmFnbWEgbWFyayBJbnRlcmZhY2Ug
dG8gV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDoKKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpyZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpSZXNldE1lZGlhU3RhdGUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlJlc2V0TWVkaWFTdGF0
ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXREdXJhdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSBkdXJhdGlvbikKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0RHVyYXRpb24oZHVyYXRpb24pLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6U2V0RHVyYXRpb24oY29udGV4dElkLCBkdXJhdGlvbiksIG1fcGFnZS0+cGFnZUlE
KCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEN1cnJlbnRUaW1l
KGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91Ymxl
IGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0Q3VycmVudFRpbWUoY3Vy
cmVudFRpbWUsIGFuY2hvclRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0Q3VycmVudFRp
bWUoY29udGV4dElkLCBjdXJyZW50VGltZSwgYW5jaG9yVGltZSksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEJ1ZmZlcmVkVGltZShk
b3VibGUgYnVmZmVyZWRUaW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRC
dWZmZXJlZFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQogewot
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
OjpTZXRCdWZmZXJlZFRpbWUoYnVmZmVyZWRUaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNl
dEJ1ZmZlcmVkVGltZShjb250ZXh0SWQsIGJ1ZmZlcmVkVGltZSksIG1fcGFnZS0+cGFnZUlEKCkp
OwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFJhdGUoYm9vbCBpc1Bs
YXlpbmcsIGZsb2F0IHBsYXliYWNrUmF0ZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5
YmFja1JhdGUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OlNldFJhdGUoaXNQbGF5aW5nLCBwbGF5YmFja1JhdGUpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6U2V0UmF0ZShjb250ZXh0SWQsIGlzUGxheWluZywgcGxheWJhY2tSYXRl
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6c2V0VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvRGltZW5zaW9u
cyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OlNldFZpZGVvRGltZW5zaW9ucyhoYXNWaWRlbywgd2lkdGgsIGhlaWdodCks
IG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoY29udGV4dElkLCBoYXNW
aWRlbywgd2lkdGgsIGhlaWdodCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogICAgIAotdm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBXZWJDb3Jl
OjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpzZXRTZWVrYWJsZVJhbmdlcyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFdlYkNvcmU6OlRp
bWVSYW5nZXMmIHRpbWVSYW5nZXMpCiB7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRv
dWJsZT4+IHJhbmdlc1ZlY3RvcjsKICAgICAKQEAgLTE2MCwzMCArMzAzLDEwNCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFNlZWthYmxlUmFuZ2VzKGNvbnN0IFdlYkNvcmU6
OlRpbWVSYW5nZXMmIHRpbQogICAgICAgICByYW5nZXNWZWN0b3IuYXBwZW5kKHN0ZDo6cGFpcjxk
b3VibGUsZG91YmxlPihzdGFydCwgZW5kKSk7CiAgICAgfQogCi0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFNlZWthYmxlUmFuZ2Vz
VmVjdG9yKFdURjo6bW92ZShyYW5nZXNWZWN0b3IpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNl
dFNlZWthYmxlUmFuZ2VzVmVjdG9yKGNvbnRleHRJZCwgV1RGOjptb3ZlKHJhbmdlc1ZlY3Rvcikp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCB2YWx1ZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9v
bCB2YWx1ZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6U2V0Q2FuUGxheUZhc3RSZXZlcnNlKHZhbHVlKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldENhblBsYXlGYXN0UmV2ZXJzZShjb250ZXh0SWQsIHZhbHVlKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0QXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNl
dEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEF1
ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6U2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29udGV4dElkLCBv
cHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRp
b25zKG9wdGlvbnMsIHNlbGVjdGVkSW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0TGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb250ZXh0SWQsIG9wdGlvbnMsIHNlbGVjdGVkSW5k
ZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRFeHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRUeXBlLCBTdHJpbmcg
bG9jYWxpemVkRGV2aWNlTmFtZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0
RXh0ZXJuYWxQbGF5YmFjayh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0YXJnZXRU
eXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0RXh0ZXJuYWxQbGF5YmFj
a1Byb3BlcnRpZXMoZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRhcmdldFR5cGUpLCBs
b2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEV4dGVybmFsUGxh
eWJhY2tQcm9wZXJ0aWVzKGNvbnRleHRJZCwgZW5hYmxlZCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHRhcmdldFR5cGUpLCBsb2NhbGl6ZWREZXZpY2VOYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9
Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZFNldHVwRnVsbHNjcmVl
bigpCisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eToKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpwbGF5KHVpbnQ2NF90
IGNvbnRleHRJZCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnBsYXkoKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpwYXVzZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5wYXVzZSgpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnRvZ2dsZVBsYXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS50b2dnbGVQbGF5U3RhdGUoKTsKK30KKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdpblNjcnViYmluZyh1aW50NjRfdCBj
b250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjcnViYmluZygp
OworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmVuZFNjcnViYmluZyh1aW50
NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5lbmRTY3J1YmJp
bmcoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWVrVG9UaW1lKHVp
bnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4
dElkKS5zZWVrVG9UaW1lKHRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmZhc3RTZWVrKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5mYXN0U2Vlayh0aW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjpiZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
Cit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdpblNjYW5uaW5nRm9yd2FyZCgpOwor
fQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElkKS5iZWdp
blNjYW5uaW5nQmFja3dhcmQoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjplbmRTY2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5lbmRTY2FubmluZygpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5z
dXJlTW9kZWwoY29udGV4dElkKS5yZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlhT3B0aW9uKHVpbnQ2NF90
IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgZW5zdXJlTW9kZWwoY29udGV4dElk
KS5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3QgY29udGV4dElk
LCB1aW50NjRfdCBpbmRleCkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLnNlbGVjdExl
Z2libGVNZWRpYU9wdGlvbihpbmRleCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxzY3JlZW5Nb2Rl
KQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHZp
ZGVvRnVsbHNjcmVlbk1vZGUpOworfQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOgorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7CiAgICAgUGxhdGZvcm1M
YXllciogdmlkZW9MYXllciA9IFtDQUxheWVyIGxheWVyXTsKICNpZm5kZWYgTkRFQlVHCkBAIC0y
MDAsODMgKzQxNywxMTggQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1
cEZ1bGxzY3JlZW4oKQogICAgIC8vIFRoaXMgc2NhbGUgZmFjdG9yIGlzIGludmVydGVkIGluIHRo
ZSBob3N0aW5nIHByb2Nlc3MuCiAgICAgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yID0gbV9wYWdl
LT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIFt2aWRlb0xheWVyIHNldFRyYW5zZm9ybTpDQVRy
YW5zZm9ybTNETWFrZVNjYWxlKGhvc3RpbmdTY2FsZUZhY3RvciwgaG9zdGluZ1NjYWxlRmFjdG9y
LCAxKV07Ci0gICAgbV9sYXllckhvc3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIodmlkZW9MYXll
cik7CiAKLSAgICBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcih2aWRlb0xheWVyKTsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3Rk
Ojp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0
SWQpOworCisgICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldFJvb3RMYXll
cih2aWRlb0xheWVyKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIodmlkZW9M
YXllcik7CisKICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwogCi0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVsbHNjcmVl
bigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpk
aWRFbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQogewotICAgIG1faXNBbmltYXRp
bmcgPSBmYWxzZTsKLSAgICBtX2lzRnVsbHNjcmVlbiA9IGZhbHNlOworICAgIFJlZlB0cjxXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZSht
b2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisK
KyAgICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNl
dElzRnVsbHNjcmVlbihmYWxzZSk7CisKKyAgICBpZiAoaW50ZXJmYWNlLT50YXJnZXRJc0Z1bGxz
Y3JlZW4oKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fdGFyZ2V0SXNGdWxsc2NyZWVu
KQorICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiB2aWRlb0VsZW1lbnQgPSBtb2RlbC0+dmlk
ZW9FbGVtZW50KCk7CisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIGV4aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVk
IGR1cmluZyBhbiBhbmltYXRpb24uCi0gICAgX19ibG9jayBSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7Ci0gICAgV2ViVGhyZWFkUnVuKF4g
ewotICAgICAgICBleGl0VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCptX3ZpZGVvRWxl
bWVudCk7Ci0gICAgICAgIHByb3RlY3QuY2xlYXIoKTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBXZWJUaHJlYWRSdW4oW3N0cm9u
Z1RoaXMsIHZpZGVvRWxlbWVudF0geworICAgICAgICBzdHJvbmdUaGlzLT5leGl0VmlkZW9GdWxs
c2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQpOwogICAgIH0pOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxsc2NyZWVuKCkKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKQogewotICAgIHNldFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7Ci0gICAgX19ibG9jayBS
ZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IHByb3RlY3QodGhpcyk7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBtb2RlbDsK
KyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dD4gaW50ZXJmYWNl
OworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9kZWxBbmRJbnRlcmZh
Y2UoY29udGV4dElkKTsKKworICAgIG1vZGVsLT5zZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihuaWwp
OwogCi0gICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAg
ICAgICAgaWYgKG1fbGF5ZXJIb3N0aW5nQ29udGV4dCkgewotICAgICAgICAgICAgbV9sYXllckhv
c3RpbmdDb250ZXh0LT5zZXRSb290TGF5ZXIobnVsbHB0cik7Ci0gICAgICAgICAgICBtX2xheWVy
SG9zdGluZ0NvbnRleHQgPSBudWxscHRyOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOworICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIFtzdHJvbmdUaGlzLCBjb250ZXh0SWQsIGludGVyZmFjZV0geworICAg
ICAgICBpZiAoaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAg
IGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpLT5zZXRSb290TGF5ZXIobnVsbHB0cik7
CisgICAgICAgICAgICBpbnRlcmZhY2UtPnNldExheWVySG9zdGluZ0NvbnRleHQobnVsbHB0cik7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fcGFnZSkKLSAgICAgICAgICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNj
cmVlbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAg
ICAgICBpZiAoc3Ryb25nVGhpcy0+bV9wYWdlKQorICAgICAgICAgICAgc3Ryb25nVGhpcy0+bV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkNsZWFu
dXBGdWxsc2NyZWVuKGNvbnRleHRJZCksIHN0cm9uZ1RoaXMtPm1fcGFnZS0+cGFnZUlEKCkpOwog
ICAgIH0pOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVh
bnVwRnVsbHNjcmVlbigpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZENsZWFu
dXBGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX2lzQW5pbWF0aW5nID0g
ZmFsc2U7Ci0gICAgbV9pc0Z1bGxzY3JlZW4gPSBmYWxzZTsKLSAgICAKLSAgICBzZXRWaWRlb0Vs
ZW1lbnQobnVsbHB0cik7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29u
dGV4dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJl
TW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+c2V0SXNBbmlt
YXRpbmcoZmFsc2UpOworICAgIGludGVyZmFjZS0+c2V0SXNGdWxsc2NyZWVuKGZhbHNlKTsKKyAg
ICBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUgPSBpbnRlcmZhY2Ut
PmZ1bGxzY3JlZW5Nb2RlKCk7CisKKyAgICBtb2RlbC0+c2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
bmlsKTsKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlkZW9FbGVtZW50ID0gbW9kZWwt
PnZpZGVvRWxlbWVudCgpOworCisgICAgaWYgKCFpbnRlcmZhY2UtPnRhcmdldElzRnVsbHNjcmVl
bigpKSB7CisgICAgICAgIG1vZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7CisgICAgICAg
IG1vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7CisgICAgICAg
IGludGVyZmFjZS0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX3ZpZGVvRWxlbWVudHMucmVtb3Zl
KHZpZGVvRWxlbWVudC5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dE1hcC5yZW1vdmUoY29udGV4
dElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghbV90YXJnZXRJc0Z1bGxz
Y3JlZW4pCisgICAgaWYgKCF2aWRlb0VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IGVudGVyIGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJp
bmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMpOwotICAgIFdlYlRocmVhZFJ1biheIHsKLSAg
ICAgICAgZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoKm1fdmlkZW9FbGVtZW50
LCBtX2Z1bGxzY3JlZW5Nb2RlKTsKLSAgICAgICAgcHJvdGVjdC5jbGVhcigpOworICAgIC8vIGV4
aXQgZnVsbHNjcmVlbiBub3cgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGR1cmluZyBh
biBhbmltYXRpb24uCisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9u
Z1RoaXModGhpcyk7CisgICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB2aWRlb0VsZW1lbnQs
IG1vZGVdIHsKKyAgICAgICAgc3Ryb25nVGhpcy0+ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRl
b0VsZW1lbnQoKnZpZGVvRWxlbWVudCwgbW9kZSk7CiAgICAgfSk7CiB9CiAgICAgCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1bnNpZ25l
ZCBncmF2aXR5KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVy
R3Jhdml0eUVudW0odWludDY0X3QgY29udGV4dElkLCB1bnNpZ25lZCBncmF2aXR5KQogewotICAg
IHNldFZpZGVvTGF5ZXJHcmF2aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2
aXR5KWdyYXZpdHkpOworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2V0VmlkZW9MYXllckdy
YXZpdHkoKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpZ3Jhdml0eSk7CiB9
CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZShib29sIGlzUGFnZVZpc2libGUpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaXNQYWdlVmlzaWJsZSkKIHsKKyAgICBhdXRvJiBtb2RlbCA9IGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCk7CisKICAgICBpZiAoIWlzUGFnZVZpc2libGUpCi0gICAgICAgIG1fdmlkZW9FbGVtZW50
LT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShmYWxzZSk7Ci0gICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlByZXBhcmVkVG9SZXR1cm5U
b0lubGluZSh0cnVlLCBjbGllbnRSZWN0Rm9yRWxlbWVudChtX3ZpZGVvRWxlbWVudC5nZXQoKSkp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgbW9kZWwudmlkZW9FbGVtZW50KCktPnNjcm9s
bEludG9WaWV3SWZOb3RWaXNpYmxlKGZhbHNlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UHJlcGFyZWRUb1JldHVyblRvSW5saW5l
KGNvbnRleHRJZCwgdHJ1ZSwgY2xpZW50UmVjdEZvckVsZW1lbnQobW9kZWwudmlkZW9FbGVtZW50
KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChXZWJDb3JlOjpGbG9hdFJlY3QgYm91
bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWludDY0X3QgY29udGV4dElkLCBXZWJD
b3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0KQogeworICAg
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAg
ICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNv
bnRleHRJZCk7CisKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CiAgICAgW0NBVHJhbnNhY3Rp
b24gc2V0QW5pbWF0aW9uRHVyYXRpb246MF07Ci0gICAgaWYgKG1fbGF5ZXJIb3N0aW5nQ29udGV4
dCkKLSAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0LT5zZXRGZW5jZVBvcnQoZmVuY2VQb3J0
LnBvcnQoKSk7Ci0gICAgc2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7CisgICAgaWYgKGludGVy
ZmFjZS0+bGF5ZXJIb3N0aW5nQ29udGV4dCgpKQorICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9z
dGluZ0NvbnRleHQoKS0+c2V0RmVuY2VQb3J0KGZlbmNlUG9ydC5wb3J0KCkpOworICAgIG1vZGVs
LT5zZXRWaWRlb0xheWVyRnJhbWUoYm91bmRzKTsKICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZSht
YWNoX3Rhc2tfc2VsZigpLCBmZW5jZVBvcnQucG9ydCgpKTsKICAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250876</attachid>
            <date>2015-04-15 15:40:49 -0700</date>
            <delta_ts>2015-04-16 15:06:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143680-20150415153952.patch</filename>
            <type>text/plain</type>
            <size>95907</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyODYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTI0YmQ1MjFkMTgyMzIy
YTU1OGUxNGE1YjViZDI5NWI1ODBkOWFlZi4uY2QzNzgxMmI3MjAwM2Y4NDJjNTlkMTViOGIyZTEw
NDE5MjlmMjdhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDE1LTA0LTEzICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0
YW5lb3VzbHkgZXhpdGluZy1hbmQtZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci9Qcm94eSBiZWNvbWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVu
dCBpdCByZXByZXNlbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQzNjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIGdldHRlcnMgZm9yIHRoZSB2aWRlbydzIGZ1bGxzY3JlZW4gbGF5ZXIsIGFu
ZCBiZSBtb3JlIHRvbGVyYW50IGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCBzZXRWaWRlb0VsZW1l
bnQoKSBhbmQgCisgICAgICAgIHNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSBhcmUgY2Fs
bGVkLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp2aWRlb0Z1bGxzY3JlZW5MYXllcik6IEFkZGVkIHNpbXBs
ZSBnZXR0ZXIuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5N
b2RlbFZpZGVvRWxlbWVudDo6dmlkZW9FbGVtZW50KTogQWRkZWQgc2ltcGxlIGdldHRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRX
ZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UpOiBEZWxldGVkLiBNb3ZlZCB0byAubW0gZmlsZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQubW06CisgICAgICAgIChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQpOiBJbml0aWFsaXplIGl2YXJzIGluIHRo
ZSAuaCBmaWxlLgorICAgICAgICAoV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6
OnNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSk6IENhbGwgdGhvc2UgbWV0aG9kcyBza2lw
cGVkIGluIHNldFZpZGVvRWxlbWVudCgpCisgICAgICAgICAgICBpZiBtX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSBoYWQgbm90IHlldCBiZWVuIHNldC4KKyAgICAgICAgKFdlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQpOiBOdWxsLWNoZWNrIG1fdmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9FbGVt
ZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQz
Njc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA1NTJhMjJlNzdkZmY1MWE4NDlmOGQxNjQ0NjI3OWQ2Y2RhZTE5
OTNiLi5hOTdmYWExNDRlMTU5YTU3OWZiZGYzYWYzZTgwOTlmMWE2NDRhOGMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsMjAwIEBACiAyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCisgICAgICAgIFtpT1NdIFdoZW4gc2ltdWx0YW5lb3VzbHkgZXhpdGluZy1hbmQt
ZW50ZXJpbmcgZnVsbHNjcmVlbiwgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci9Qcm94eSBiZWNv
bWVzIGNvbmZ1c2VkIGFib3V0IHdoYXQgdmlkZW8gZWxlbWVudCBpdCByZXByZXNlbnRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNjgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG9yaWdpbmFs
IGFzc3VtcHRpb24gb2YgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlciBhbmQgLVByb3h5IHdhcyB0
aGF0IHRoZSB0d28gY2xhc3NlcyB3b3VsZCByZXByZXNlbnQgYQorICAgICAgICBzaW5nbGUgdmlk
ZW8gZWxlbWVudCBhbmQgaXRzIGZ1bGwgc2NyZWVuIHN0YXRlLiBXaXRoIG11bHRpcGxlIGFuaW1h
dGlvbnMgaW4gYW5kIG91dCBvZiBmdWxsc2NyZWVuIGNvbWJpbmVkIHdpdGgKKyAgICAgICAgbXVs
dGlwbGUgZnVsbHNjcmVlbiBtb2RlcywgdGhpcyBhc3N1bXB0aW9uIG5vIGxvbmdlciBob2xkcyB0
cnVlLgorCisgICAgICAgIFJhdGhlciB0aGFuIGhhdmluZyBhIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIgd2hpY2ggL2lzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQsIHRo
ZSBtYW5hZ2VyIG5vdworICAgICAgICAvaGFzYS8gV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQgKG9yIGhhcyBtYW55IHN1Y2ggbW9kZWxzKS4gRGl0dG8gZm9yIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgYW5kCisgICAgICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFW
S2l0LiBUaGUgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQgc3RpbGwgbmVlZHMgYSBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCB0bworICAgICAgICBjb21tdW5pY2F0ZSB3aXRoLCBzbyBh
IG5ldyB3cmFwcGVyIGNsYXNzIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0LiBEaXR0byBmb3IKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQgYW5kIHRoZSBuZXcgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dC4gVGhlc2UgY29udGV4dCBjbGFzc2VzCisgICAgICAgIGFyZSBwYWlyZWQg
YW5kIHNoYXJlIGEgY29udGV4dElkLCBhbGxvd2luZyB0aGUgbWFuYWdlciBhbmQgaXRzIHByb3h5
IHRvIHJvdXRlIG1lc3NhZ2VzIGJldHdlZW4gdGhlIFVJUHJvY2VzcydzCisgICAgICAgIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IHRvLWFuZC1mcm9tIHRoZSBXZWJQcm9jZXNzJ3Mg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuCisKKyAgICAgICAgQm90aCB0aGUg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0IGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCB0YWtlIGEgYmFjay1wb2ludGVyIHRvIHRoZWlyCisgICAgICAgIG1h
bmFnZXIgb3IgbWFuYWdlciBwcm94eSwgYW5kIGVhY2ggbWV0aG9kIG9uIHRoZSBjb250ZXh0IHNp
bXBseSBjYWxscyB0aGUgbWF0Y2hpbmcgbWV0aG9kIG9uIHRoZSBtYW5hZ2VyIGFuZAorICAgICAg
ICBwYXNzZXMgaXRzIGNvbnRleHRJZCBhcyBhIHBhcmFtZXRlci4KKworICAgICAgICBCb3RoIHRo
ZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIGFuZCB0aGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5IHBhc3MgdGhhdCBjb250ZXh0SWQgaW4gZWFjaCBvZiB0aGVpcgorICAgICAgICBj
cm9zcy1wcm9jZXNzIG1lc3NhZ2VzLgorCisgICAgICAgIE9uIHRoZSBvdGhlciBzaWRlLCB0aGUg
bWFuYWdlciBhbmQgcHJveHkgYWxzbyBoYXZlIGEgbWFwIGJldHdlZW4gY29udGV4dElkcyBhbmQg
dGhlaXIgbWF0Y2hpbmcKKyAgICAgICAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQgKGluIHRoZSBjYXNlIG9mIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpIG9yCisgICAgICAg
IFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0IChpbiB0aGUgY2FzZSBvZiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkpLgorCisgICAgICAgIFdoaWxlIHRoaXMgY2hhbmdlIGlz
IGxhcmdlIGJ5IExvQywgaXQgaXMgYWxtb3N0IGVudGlyZWx5IGJvaWxlcnBsYXRlLiAgVGhlIG5l
dyBhbmQgaW50ZXJlc3RpbmcgcGllY2VzIGFyZSB0aGVzZToKKworICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eSk6IE5vIGxvbmdlciBhIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRh
dGUpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50ZXJmYWNlcywgaW52YWxpZGF0aW5n
IGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gUmV0dXJuIGEgbmV3IG1vZGVsIGFuZCBp
bnRlcmZhY2UgdHVwbGUuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UpOiBBZGRlZC4gTGF6aWx5IGNyZWF0ZSwg
YW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5ldyBtb2RlbCBhbmQg
aW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjplbnN1cmVNb2RlbCk6IFJldHVybiB0aGUgbW9kZWwgaGFsZiBvZiBlbnN1cmVN
b2RlbEFuZEludGVyZmFjZSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmVuc3VyZUludGVyZmFjZSk6IFJldHVybiB0aGUgaW50ZXJmYWNlIGhhbGYg
b2YgZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxzY3JlZW4pOiBXYWxrIHRocm91Z2ggdGhl
IG91dHN0YW5kaW5nIGludGVyZmFjZSBvYmplY3RzLCBhbmQgaWYgCisgICAgICAgICAgICBhbnkg
aGF2ZSBhIGZ1bGxzY3JlZW4gbW9kZSB3aGljaCBtYXRjaGVzIHRoZSBhYm91dC10by1iZS1mdWxs
c2NyZWVuIGludGVyZmFjZSwgcmVxdWVzdCB0aGF0IHRoYXQgb3RoZXIgaW50ZXJmYWNlCisgICAg
ICAgICAgICBleGl0IGZ1bGxzY3JlZW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6bmV4dENvbnRleHRJZCk6
IFN0YXRpYywgaW5jcmVtZW50aW5nIGNvdW50ZXIgdXNlZCBhcyBhIGNvbnRleHRJZCBzb3VyY2Uu
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIpOiBObyBsb25nZXIgYSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVv
RWxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6fldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIpOiBXYWxrIHRocm91Z2ggdGhlIG1vZGVscyBhbmQgaW50
ZXJmYWNlcywgaW52YWxpZGF0aW5nIGVhY2guCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OmVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKTogQWRkZWQuIFJldHVybiBh
IG5ldyBtb2RlbCBhbmQgaW50ZXJmYWNlIHR1cGxlLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSk6ICBBZGRlZC4gTGF6
aWx5IGNyZWF0ZSwgYW5kIGFkZCB0byB0aGUgbV9jb250ZXh0TWFwCisgICAgICAgICAgICBhIG5l
dyBtb2RlbCBhbmQgaW50ZXJmYWNlIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwpOiBSZXR1cm4gdGhlIG1vZGVsIGhhbGYgb2Yg
ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZW5zdXJlSW50ZXJmYWNlKTogUmV0dXJuIHRoZSBpbnRlcmZhY2UgaGFs
ZiBvZiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSgpLgorCisgICAgICAgIE5ldyBjbGFzc2VzIGFu
ZCBtZXRob2RzIHdoaWNoIGp1c3QgZm9yd2FyZCBvbiB0byB0aGVpciBvd25pbmcgb2JqZWN0czoK
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp+
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpsYXllckhvc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldExheWVySG9zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0SW5pdGlhbFZp
ZGVvTGF5ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
Q29udGV4dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpwYXVzZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6dG9nZ2xlUGxheVN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpiZWdpblNj
cnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6ZW5kU2NydWJiaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpzZWVrVG9UaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTW9kZWxDb250ZXh0OjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0ZvcndhcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmJlZ2luU2Nhbm5pbmdCYWNrd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZW5k
U2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRl
eHQ6OnJlcXVlc3RFeGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsQ29udGV4dDo6c2V0VmlkZW9MYXllckZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5
ZXJHcmF2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0Ojp2aWRlb0xheWVyR3Jhdml0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpm
dWxsc2NyZWVuTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmRpZFNldHVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFeGl0RnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6
ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
bGF5ZXJIb3N0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUNvbnRleHQ6OmlzQW5pbWF0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0SXNBbmltYXRpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojp0YXJnZXRJc0Z1bGxz
Y3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0OjpzZXRUYXJnZXRJc0Z1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpmdWxsc2NyZWVuTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEZ1bGxzY3JlZW5Nb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6
aXNGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6c2V0SXNGdWxsc2NyZWVuKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRMYXllckhvc3RpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dDo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEJ1ZmZlcmVkVGlt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6
OnNldFJhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0OjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRTZWVrYWJsZVJhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldENhblBsYXlGYXN0
UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNv
bnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ6OnNldEV4dGVybmFsUGxheWJhY2spOgorCisgICAgICAgIENyb3NzLXByb2Nlc3Mg
bWV0aG9kcyB3aGljaCBub3cgdGFrZSBhIGNvbnRleHRJZCBwYXJhbWV0ZXI6CisKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXR1cEZ1bGxzY3JlZW5XaXRoSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OnJlc2V0TWVkaWFTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEJ1ZmZlcmVkVGltZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9E
aW1lbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRBdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0RXh0ZXJuYWxQbGF5YmFja1By
b3BlcnRpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZXRSYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpleGl0RnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6Y2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lu
bGluZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
cGF1c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnRvZ2dsZVBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2Vla1RvVGltZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZmFzdFNlZWspOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3
YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpi
ZWdpblNjYW5uaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmVuZFNjYW5uaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlk
RXhpdEZ1bGxzY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmRpZEVudGVyRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFZpZGVvTGF5ZXJGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0
VmlkZW9MYXllckdyYXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9wdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZnVsbHNj
cmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnZpZGVvTGF5ZXJGcmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6dmlk
ZW9MYXllckdyYXZpdHkpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9p
b3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpleGl0VmlkZW9G
dWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEJ1ZmZlcmVkVGltZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0RpbWVuc2lvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJsZVJhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldENhblBs
YXlGYXN0UmV2ZXJzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldEV4dGVybmFs
UGxheWJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpw
bGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1c2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp0b2dnbGVQbGF5
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpiZWdp
blNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OmVuZFNjcnViYmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNlZWtUb1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpmYXN0U2Vlayk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5kU2Nhbm5pbmcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZWxlY3RBdWRpb01lZGlh
T3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2Vs
ZWN0TGVnaWJsZU1lZGlhT3B0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcjo6ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRDbGVh
bnVwRnVsbHNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OnNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmV4aXRW
aWRlb0Z1bGxzY3JlZW4pOiBEZWxldGVkLgorCisyMDE1LTA0LTEzICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgorCiAgICAgICAgIFtGdWxsc2NyZWVuXSBDaHJvbWVDbGllbnQ6OmV4
aXRWaWRlb0Z1bGxzY3JlZW4oKSBzaG91bGQgdGFrZSBhIHBvaW50ZXIgdG8gYSBIVE1MVmlkZW9F
bGVtZW50LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzNjc0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggNDUyYzM0
M2YwYTg1OGQ5YWE3MGU5Yzc0MDk5OTZkNGE3Njg5MTRiMy4uMTQwOWU2YjBiNjA3NDExMWU2MWNi
OTFhNjM3NTM2OWQ2NmExYzFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKQEAgLTEyOCw2ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHNldFZpZGVvRnVs
bHNjcmVlbkxheWVyKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0Z1
bGxzY3JlZW5MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuTGF5ZXIuZ2V0
KCk7IH0KICAgICB2b2lkIHNldFZpZGVvRnVsbHNjcmVlbkZyYW1lKEZsb2F0UmVjdCk7CiAgICAg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5HcmF2aXR5KE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkp
OwogICAgIE1lZGlhUGxheWVyOjpWaWRlb0dyYXZpdHkgdmlkZW9GdWxsc2NyZWVuR3Jhdml0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GdWxsc2NyZWVuR3Jhdml0eTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJB
VktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0KaW5kZXggM2Y4NTVkMGYxMmI0MDY0OWE5NmZiNmFmZTk4OTY2ZTEx
YTNhNThiMy4uN2E1MzczNzYyOTE5MGVkNGQ3MGI2NDIxYjI5NGY0ZmY2NTNmZDE3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXJBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlckFWS2l0Lm1tCkBAIC0xMjUsOSArMTI1LDkgQEAgcHVibGljOgog
ewogICAgIFtzZWxmIHJldGFpbl07IC8vIEJhbGFuY2VkIGJ5IC1yZWxlYXNlIGluIGRpZEV4aXRG
dWxsc2NyZWVuOgogICAgIAotICAgIF9pbnRlcmZhY2UgPSBhZG9wdFJlZihuZXcgV2ViVmlkZW9G
dWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQpOworICAgIF9pbnRlcmZhY2UgPSBXZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdDo6Y3JlYXRlKCk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlk
ZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJl9jaGFuZ2VPYnNlcnZlcik7Ci0gICAgX21vZGVs
ID0gYWRvcHRSZWYobmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KTsKKyAg
ICBfbW9kZWwgPSBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7
CiAgICAgX21vZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoX2ludGVyZmFjZS5n
ZXQoKSk7CiAgICAgX2ludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWwoX21vZGVs
LmdldCgpKTsKICAgICBfbW9kZWwtPnNldFZpZGVvRWxlbWVudChfdmlkZW9FbGVtZW50LmdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKaW5kZXggODQ3M2Y2YjA0NDI0Yjk0N2Q4Nzk1
Yzc3MjdmOTg2MTAyYmVhNTJjYi4uYTUzMTI5Njc4MWVhODdiNzc4YjliMGU1ZDlkYjUxOTYwM2Zh
ODg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUFWS2l0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LmgKQEAgLTY4LDcgKzY4LDcgQEAgY2xh
c3MgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQKICAgICAs
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VB
VktpdD4gewogCiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKTsKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUFWS2l0KCkpOyB9CiAgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQVZLaXQoKSB7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsKFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsKik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcihXZWJWaWRlb0Z1
bGxzY3JlZW5DaGFuZ2VPYnNlcnZlciopOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAKICAg
ICBIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX21vZGU7IH0KICAgICB2b2lkIHNldElzT3B0aW1pemVkKGJvb2wpOwotICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb09wdGltaXplZCgp
IGNvbnN0OwogICAgIHZvaWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKHN0ZDo6ZnVuY3Rp
b248dm9pZChib29sKT4gY2FsbGJhY2spOwogCiAgICAgdm9pZCB3aWxsU3RhcnRPcHRpbWl6ZWRG
dWxsc2NyZWVuKCk7CkBAIC0xMDYsNyArMTA2LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENh
bmNlbE9wdGltaXplZEZ1bGxzY3JlZW4oKTsKICAgICB2b2lkIHByZXBhcmVGb3JPcHRpbWl6ZWRG
dWxsc2NyZWVuU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7CiAKKyAg
ICB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Cisg
ICAgdm9pZCBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7
CisgICAgYm9vbCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUg
bW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQorICAgIGJvb2wgaXNNb2RlKEhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4g
bV9tb2RlID09IG1vZGU7IH0KKwogcHJvdGVjdGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0KCk7CiAgICAgdm9pZCBiZWdpblNlc3Npb24oKTsK
ICAgICB2b2lkIHNldHVwRnVsbHNjcmVlbkludGVybmFsKFBsYXRmb3JtTGF5ZXImLCBjb25zdCBJ
bnRSZWN0JiBpbml0aWFsUmVjdCwgVUlWaWV3ICosIEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVs
bHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKICAgICB2b2lkIGVu
dGVyRnVsbHNjcmVlbk9wdGltaXplZCgpOwpAQCAtMTE0LDExICsxMjAsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBleGl0RnVsbHNjcmVlbkludGVybmFsKGNvbnN0IEludFJlY3QmIGZpbmFsUmVj
dCk7CiAgICAgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbkludGVybmFsKCk7CiAKLSAgICB2b2lkIHNl
dE1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgdm9pZCBj
bGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgYm9v
bCBoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29u
c3QgeyByZXR1cm4gbV9tb2RlICYgbW9kZTsgfQotICAgIGJvb2wgaXNNb2RlKEhUTUxNZWRpYUVs
ZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09
IG1vZGU7IH0KLQogICAgIFJldGFpblB0cjxXZWJBVlBsYXllckNvbnRyb2xsZXI+IG1fcGxheWVy
Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8QVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5
ZXJWaWV3Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV92aWRlb0xheWVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCmluZGV4IDI5MzhlYTg3ODkxM2YxZTIzZDQ1OTBl
ZWFiYzgyYzEyODFiOGNhZjkuLjgwOTEwOWFjZmQ1ZTBkNzMwOTQyNzYzYzM3ZGFmYzEwMmFlNjQ3
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0KQEAgLTExNzUsNyArMTE3NSw3IEBA
IHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5U
b0lubGluZShib29sIHZpc2libGUsIGNvCiAgICAgfSk7CiB9CiAKLWJvb2wgV2ViVmlkZW9GdWxs
c2NyZWVuSW50ZXJmYWNlQVZLaXQ6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQo
KQorYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdDo6bWF5QXV0b21hdGljYWxs
eVNob3dWaWRlb09wdGltaXplZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX3BsYXllckNvbnRy
b2xsZXIgaXNQbGF5aW5nXSAmJiBtX21vZGUgPT0gSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxs
c2NyZWVuTW9kZVN0YW5kYXJkICYmIHdrSXNPcHRpbWl6ZWRGdWxsc2NyZWVuU3VwcG9ydGVkKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9X
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCmluZGV4IDU5OWE3NGEzYTc5NmQx
NTE1NDI3MjViZTc2ZGEyMzlkMDY2ODc4YzkuLmVjNTRhOWY4MTY5MzY1MTU4MThmMGRkNjQzZmY2
Zjg3MmUwNGFhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5oCkBAIC00NSwx
MCArNDUsMTEgQEAgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOwogCiBjbGFzcyBX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCA6IHB1YmxpYyBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbCwgcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCk7CisgICAgc3RhdGlj
IFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgp
KTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfldlYlZpZGVvRnVsbHNjcmVlbk1vZGVs
VmlkZW9FbGVtZW50KCk7Ci0gICAgdm9pZCBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Uo
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBpbnRlcmZhY2UpIHttX3ZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSA9IGludGVyZmFjZTt9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UoV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCop
OworICAgIFdFQkNPUkVfRVhQT1JUIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlkZW9FbGVtZW50LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRWaWRlb0Z1bGxzY3JlZW5MYXllcihQbGF0Zm9ybUxheWVyKik7CiAgICAgCiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopIG92ZXJyaWRlOwpAQCAtNzUsMTQgKzc2
LDE3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwogCitwcm90ZWN0ZWQ6CisgICAgV0VCQ09S
RV9FWFBPUlQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQoKTsKKwogcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdURjo6QXRvbWljU3RyaW5nPiYgb2JzZXJ2ZWRF
dmVudE5hbWVzKCk7CiAgICAgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZUFsbCgp
OwogICAgIAogICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKICAg
ICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92aWRlb0Z1bGxzY3JlZW5MYXllcjsKLSAgICBi
b29sIG1faXNMaXN0ZW5pbmc7Ci0gICAgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKiBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZTsKKyAgICBib29sIG1faXNMaXN0ZW5pbmcgeyBmYWxzZSB9
OworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSogbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UgeyBudWxscHRyIH07CiAgICAgRmxvYXRSZWN0IG1fdmlkZW9GcmFtZTsKICAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4+IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnU7CiAgICAgVmVjdG9y
PFJlZlB0cjxBdWRpb1RyYWNrPj4gbV9hdWRpb1RyYWNrc0Zvck1lbnU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxWaWRlb0VsZW1lbnQubW0KaW5kZXggNjlmN2JkYTYyYjY0NDA3MjZjZjQ3M2ZhOWQ5OThm
YzM1MzBkZmUwNS4uMTFlZDY2MzlmNDBlZWIzZGE2MWU0MjVlNTM5NjI2M2Q3MzM5NDE0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1v
ZGVsVmlkZW9FbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudC5tbQpAQCAtNTMsOCArNTMsNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQ6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50KCkKICAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBtX2lzTGlz
dGVuaW5nKGZhbHNlKQotICAgICwgbV92aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cikK
IHsKIH0KIApAQCAtNjIsNiArNjAsMjAgQEAgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0Vs
ZW1lbnQ6On5XZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCgpCiB7CiB9CiAKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ6OnNldFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZShXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UqIGludGVyZmFjZSkKK3sK
KyAgICBpZiAoaW50ZXJmYWNlID09IG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSA9IGludGVyZmFjZTsK
KworICAgIGlmIChtX3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkgeworICAgICAgICBtX3ZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZS0+cmVzZXRNZWRpYVN0YXRlKCk7CisgICAgICAgIGlmIChtX3Zp
ZGVvRWxlbWVudCkKKyAgICAgICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRW
aWRlb0RpbWVuc2lvbnModHJ1ZSwgbV92aWRlb0VsZW1lbnQtPnZpZGVvV2lkdGgoKSwgbV92aWRl
b0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOworICAgIH0KK30KKwogdm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvRWxlbWVudCkKIHsKICAgICBpZiAobV92aWRlb0VsZW1lbnQgPT0gdmlkZW9FbGVtZW50
KQpAQCAtNjksNyArODEsMTMgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxl
bWVudDo6c2V0VmlkZW9FbGVtZW50KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGUKIAogICAgIGlmICht
X3ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSkKICAgICAgICAgbV92aWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2UtPnJlc2V0TWVkaWFTdGF0ZSgpOwotICAgIAorCisgICAgaWYgKG1fdmlkZW9FbGVtZW50
ICYmIG1fdmlkZW9FbGVtZW50LT5mdWxsc2NyZWVuTW9kZSgpKQorICAgICAgICBtX3ZpZGVvRWxl
bWVudC0+ZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKEhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNj
cmVlbk1vZGVOb25lKTsKKworICAgIGlmIChtX3ZpZGVvRWxlbWVudCAmJiBtX3ZpZGVvRWxlbWVu
dC0+dmlkZW9GdWxsc2NyZWVuTGF5ZXIoKSkKKyAgICAgICAgbV92aWRlb0VsZW1lbnQtPnNldFZp
ZGVvRnVsbHNjcmVlbkxheWVyKG51bGxwdHIpOworCiAgICAgaWYgKG1fdmlkZW9FbGVtZW50ICYm
IG1faXNMaXN0ZW5pbmcpIHsKICAgICAgICAgZm9yIChhdXRvIGV2ZW50TmFtZSA6IG9ic2VydmVk
RXZlbnROYW1lcygpKQogICAgICAgICAgICAgbV92aWRlb0VsZW1lbnQtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lLCB0aGlzLCBmYWxzZSk7CkBAIC04Nyw3ICsxMDUsOCBAQCB2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpzZXRWaWRlb0VsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCogdmlkZQogCiAgICAgdXBkYXRlRm9yRXZlbnROYW1lKGV2ZW50TmFtZUFsbCgp
KTsKIAotICAgIG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlLT5zZXRWaWRlb0RpbWVuc2lvbnMo
dHJ1ZSwgdmlkZW9FbGVtZW50LT52aWRlb1dpZHRoKCksIHZpZGVvRWxlbWVudC0+dmlkZW9IZWln
aHQoKSk7CisgICAgaWYgKG1fdmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICBtX3Zp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZS0+c2V0VmlkZW9EaW1lbnNpb25zKHRydWUsIHZpZGVvRWxl
bWVudC0+dmlkZW9XaWR0aCgpLCB2aWRlb0VsZW1lbnQtPnZpZGVvSGVpZ2h0KCkpOwogfQogCiB2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50OjpoYW5kbGVFdmVudChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqIGV2ZW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQppbmRleCAz
YmNlMDBiZThiNDUzN2EwOTNiODk3ZGIzMjI1YzUwNTVlMDgzNGRlLi42ZTY5NzdiZjBiYmEzMGVj
YTZkZjJiMmQxMjljZGE4ZDBmYzc4OGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMjQyLDcgKzI0Miw3IEBAIHN0YXRpYyBpbnQz
Ml90IGRldmljZU9yaWVudGF0aW9uKCkKICAgICBpZiAoIV9wYWdlIHx8ICFfcGFnZS0+dmlkZW9G
dWxsc2NyZWVuTWFuYWdlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0
dXJuIF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPm1vZGUoKSAmIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGVPcHRpbWl6ZWQ7CisgICAgcmV0dXJu
IF9wYWdlLT52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCktPmhhc01vZGUoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU9wdGltaXplZCk7CiB9CiAKIC0gKEJPT0wp
X21heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94
eS5oCmluZGV4IGQ5ZTY1Y2U5MzM4YmY4YzM1YTMxMDY0ODBjOWNjNmEyYTIyNDc1MTYuLmI0OThh
ZThlNWJhODdmMmIyNDEzYWVmOGM0NmJhMWZlNDc2NWRlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
UHJveHkuaApAQCAtNDEsMzQgKzQxLDMxIEBAIE9CSkNfQ0xBU1MgVUlWaWV3OwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTsKIAotY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDog
cHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0LCBwdWJsaWMg
V2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuQ2hhbmdlT2JzZXJ2ZXIsIHB1YmxpYyBXZWJDb3Jl
OjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitjbGFzcyBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQgZmluYWw6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIHB1YmxpYyBXZWJDb3JlOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCwgcHVibGljIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVl
bkNoYW5nZU9ic2VydmVyICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7Ci0gICAgdmly
dHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisgICAgc3RhdGljIFJlZjxX
ZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dChtYW5h
Z2VyLCBjb250ZXh0SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
KyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KIAotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUxheWVyKiBs
YXllckhvc3QoKSBjb25zdCB7IHJldHVybiBtX2xheWVySG9zdC5nZXQoKTsgfQorICAgIHZvaWQg
c2V0TGF5ZXJIb3N0KFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiYmIGxheWVySG9zdCkgeyBtX2xh
eWVySG9zdCA9IFdURjo6bW92ZShsYXllckhvc3QpOyB9CiAKLSAgICAvLyBUcmFuc2xhdGUgdG8g
RnVsbHNjcmVlbkludGVyZmFjZQotICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQz
Ml90LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsUmVjdCwgZmxvYXQgaG9zdGluZ0Rl
dmljZVNjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7Ci0gICAgdm9pZCBzZXRTZWVr
YWJsZVJhbmdlc1ZlY3Rvcihjb25zdCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4m
KTsKLSAgICB2b2lkIHNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKGJvb2wgZW5hYmxlZCwg
dWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOwotICAgIHZv
aWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVv
RnVsbHNjcmVlbk1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5s
aW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5saW5lUmVjdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRJbml0aWFsVmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0
UmVjdCBmcmFtZSkgeyBtX3ZpZGVvTGF5ZXJGcmFtZSA9IGZyYW1lOyB9CiAKLSAgICAvLyBGdWxs
c2NyZWVuIE9ic2VydmVyCi0gICAgdmlydHVhbCB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbigpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgLy8g
RnVsbHNjcmVlbk1vZGVsCitwcml2YXRlOgorICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkmIG1hbmFnZXIsIHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIpCisgICAgICAgICwgbV9jb250
ZXh0SWQoY29udGV4dElkKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbAogICAgIHZpcnR1YWwgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVBsYXlTdGF0ZSgp
IG92ZXJyaWRlOwpAQCAtNzksMTggKzc2LDk3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2lu
U2Nhbm5pbmdCYWNrd2FyZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbmRTY2Fubmlu
ZygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZs
b2F0UmVjdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlkZW9M
YXllckZyYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvTGF5
ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0eShWaWRlb0dy
YXZpdHkpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgVmlkZW9HcmF2aXR5IHZpZGVvTGF5ZXJHcmF2
aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdEF1ZGlvTWVkaWFP
cHRpb24odWludDY0X3QpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24odWludDY0X3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBmdWxsc2Ny
ZWVuTW9kZUNoYW5nZWQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSkgb3ZlcnJpZGU7CiAKLSAgICBXZWJQYWdlUHJveHkqIG1fcGFnZTsKKyAgICAvLyBXZWJW
aWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZXR1cEZ1
bGxzY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVu
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEV4aXRGdWxsc2NyZWVuKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFudXBGdWxsc2NyZWVuKCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpIG92ZXJyaWRlOwor
CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiBtX21hbmFnZXI7CisgICAgdWlu
dDY0X3QgbV9jb250ZXh0SWQ7CiAgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fbGF5ZXJI
b3N0OwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3ZpZGVvTGF5ZXJGcmFtZTsKICAgICBWaWRl
b0dyYXZpdHkgbV92aWRlb0xheWVyR3Jhdml0eSB7IFZpZGVvR3Jhdml0eVJlc2l6ZSB9OwogfTsK
KworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5IDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5Jik7CisgICAgdmlydHVhbCB+V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsK
KworICAgIHZvaWQgcmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOworICAgIGJvb2wgaGFz
TW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlKSBjb25z
dDsKKyAgICBib29sIG1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9PcHRpbWl6ZWQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250
ZXh0OworCisgICAgZXhwbGljaXQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KFdlYlBh
Z2VQcm94eSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dD4sIFJlZlB0cjxX
ZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4+IE1vZGVsSW50ZXJmYWNl
VHVwbGU7CisgICAgTW9kZWxJbnRlcmZhY2VUdXBsZSBjcmVhdGVNb2RlbEFuZEludGVyZmFjZSh1
aW50NjRfdCBjb250ZXh0SWQpOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUmIGVuc3VyZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0JiBlbnN1cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYkNv
cmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0JiBlbnN1cmVJbnRlcmZhY2UodWlu
dDY0X3QgY29udGV4dElkKTsKKworICAgIC8vIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlcgorICAgIHZvaWQgc2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdWludDMyX3QgdmlkZW9MYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0
aWFsUmVjdCwgZmxvYXQgaG9zdGluZ1NjYWxlRmFjdG9yLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbik7
CisgICAgdm9pZCByZXNldE1lZGlhU3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lk
IHNldEN1cnJlbnRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGN1cnJlbnRUaW1lLCBk
b3VibGUgaG9zdFRpbWUpOworICAgIHZvaWQgc2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRl
eHRJZCwgZG91YmxlIGJ1ZmZlcmVkVGltZSk7CisgICAgdm9pZCBzZXRWaWRlb0RpbWVuc2lvbnMo
dWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVvLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KTsKKyAgICB2b2lkIHNldFNlZWthYmxlUmFuZ2VzVmVjdG9yKHVpbnQ2NF90IGNv
bnRleHRJZCwgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+IHJhbmdlcyk7CisgICAg
dm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2UodWludDY0X3QgY29udGV4dElkLCBib29sIHZhbHVl
KTsKKyAgICB2b2lkIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRl
eHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7Cisg
ICAgdm9pZCBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJ
ZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAg
dm9pZCBzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5h
bWUpOworICAgIHZvaWQgc2V0RHVyYXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVy
YXRpb24pOworICAgIHZvaWQgc2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgaXNQbGF5
aW5nLCBkb3VibGUgcmF0ZSk7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2Vi
Q29yZTo6SW50UmVjdCBmaW5hbFJlY3QpOworICAgIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4odWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0
KTsKKworICAgIC8vIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIKKyAgICB2
b2lkIHBsYXkodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNv
bnRleHRJZCk7CisgICAgdm9pZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGJlZ2luU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBl
bmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWlu
dDY0X3QgY29udGV4dElkLCBkb3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJk
KHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWlu
dDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCByZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZv
aWQgZGlkRXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1
bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFt
ZSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCk7CisgICAgdm9pZCBzZXRW
aWRlb0xheWVyR3Jhdml0eSh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OldlYlZpZGVvRnVs
bHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkpOworICAgIHZvaWQgc2VsZWN0QXVkaW9NZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsKKyAgICB2b2lkIHNlbGVj
dExlZ2libGVNZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KTsK
KyAgICB2b2lkIGZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUpOworICAgIHZvaWQgZnVs
bHNjcmVlbk1heVJldHVyblRvSW5saW5lKHVpbnQ2NF90IGNvbnRleHRJZCk7CisKKyAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBNb2RlbEludGVyZmFjZVR1
cGxlPiBtX2NvbnRleHRNYXA7CisKK307CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgppbmRleCA3NDYwNDAy
OTUzZGEwYzM3YjBmZmQ2Njg4ZDIxMzdhYmRkNmU3MjQ1Li5hNGU3YzI3YThlM2JjMjEyODNlNDUx
MzhlYTgyNDc2ZWQ3MDYzYTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMjIsMjEgKzIyLDIxIEBACiAKICNpZiBQTEFURk9STShJT1MpCiBtZXNz
YWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkgewotICAgIFJlc2V0TWVkaWFT
dGF0ZSgpCi0gICAgU2V0Q3VycmVudFRpbWUoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgaG9z
dFRpbWUpCi0gICAgU2V0QnVmZmVyZWRUaW1lKGRvdWJsZSBidWZmZXJlZFRpbWUpCi0gICAgU2V0
VmlkZW9EaW1lbnNpb25zKGJvb2wgaGFzVmlkZW8sIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpCi0gICAgU2V0U2Vla2FibGVSYW5nZXNWZWN0b3IoVmVjdG9yPHN0ZDo6cGFpcjxkb3Vi
bGUsIGRvdWJsZT4+IHJhbmdlcyk7Ci0gICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFs
dWUpOwotICAgIFNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKFZlY3RvcjxTdHJpbmc+IG9w
dGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOwotICAgIFNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnMoVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRl
eCk7Ci0gICAgU2V0RXh0ZXJuYWxQbGF5YmFja1Byb3BlcnRpZXMoYm9vbCBlbmFibGVkLCB1aW50
MzJfdCB0YXJnZXRUeXBlLCBTdHJpbmcgbG9jYWxpemVkRGV2aWNlTmFtZSk7Ci0gICAgU2V0RHVy
YXRpb24oZG91YmxlIGR1cmF0aW9uKQotICAgIFNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGRvdWJs
ZSByYXRlKQotICAgIFNldHVwRnVsbHNjcmVlbldpdGhJRCh1aW50MzJfdCB2aWRlb0xheWVySUQs
IFdlYkNvcmU6OkludFJlY3QgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdTY2FsZUZhY3Rvciwg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKLSAgICBFbnRlckZ1bGxz
Y3JlZW4oKQotICAgIEV4aXRGdWxsc2NyZWVuKFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQot
ICAgIENsZWFudXBGdWxsc2NyZWVuKCkKLSAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9v
bCB2aXNpYmxlLCBXZWJDb3JlOjpJbnRSZWN0IGlubGluZVJlY3QpCisgICAgUmVzZXRNZWRpYVN0
YXRlKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRDdXJyZW50VGltZSh1aW50NjRfdCBjb250
ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQorICAgIFNldEJ1ZmZl
cmVkVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBidWZmZXJlZFRpbWUpCisgICAgU2V0
VmlkZW9EaW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICBTZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcih1
aW50NjRfdCBjb250ZXh0SWQsIFZlY3RvcjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5n
ZXMpCisgICAgU2V0Q2FuUGxheUZhc3RSZXZlcnNlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCB2
YWx1ZSkKKyAgICBTZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0
SWQsIFZlY3RvcjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAg
U2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRfdCBjb250ZXh0SWQsIFZlY3Rv
cjxTdHJpbmc+IG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCisgICAgU2V0RXh0ZXJu
YWxQbGF5YmFja1Byb3BlcnRpZXModWludDY0X3QgY29udGV4dElkLCBib29sIGVuYWJsZWQsIHVp
bnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQorICAgIFNldER1
cmF0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIGR1cmF0aW9uKQorICAgIFNldFJhdGUo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGxheWluZywgZG91YmxlIHJhdGUpCisgICAgU2V0
dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDMyX3QgdmlkZW9MYXll
cklELCBXZWJDb3JlOjpJbnRSZWN0IGluaXRpYWxSZWN0LCBmbG9hdCBob3N0aW5nU2NhbGVGYWN0
b3IsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9G
dWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd09wdGltaXplZEZ1bGxzY3JlZW4pCisgICAgRW50ZXJG
dWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFeGl0RnVsbHNjcmVlbih1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkludFJlY3QgZmluYWxSZWN0KQorICAgIENsZWFudXBGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkLCBib29sIHZpc2libGUsIFdlYkNvcmU6OkludFJlY3QgaW5saW5l
UmVjdCkKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQppbmRleCAwZmVlNzQz
MGY5ZjExZDJiN2RiMTAzMDEyZmQwOWZiYWU0YWIwMDA1Li44MDBlYTA2MWI1MWFlNWEzNjI1OWU2
YzcyZTQ3N2UzYjEwNDg1ZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbQpAQCAtNTMs
OCArNTMsMTY4IEBAIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5PiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkK
K3sKK30KKworYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Omhhc01vZGUoSFRN
TE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRv
bWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpyZXF1ZXN0SGlkZUFu
ZEV4aXRGdWxsc2NyZWVuKCkKK3sKKworfQogI2Vsc2UKIAorI3ByYWdtYSBtYXJrIC0gV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxD
b250ZXh0OjpwbGF5KCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXIt
PnBsYXkobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6cGF1c2UoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+
cGF1c2UobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dDo6dG9nZ2xlUGxheVN0YXRlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPnRvZ2dsZVBsYXlTdGF0ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjpiZWdpblNjcnViYmluZygpCit7CisgICAgaWYgKG1f
bWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5iZWdpblNjcnViYmluZyhtX2NvbnRleHRJZCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0OjplbmRTY3J1YmJpbmco
KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZW5kU2NydWJiaW5n
KG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6
OnNlZWtUb1RpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAg
bV9tYW5hZ2VyLT5zZWVrVG9UaW1lKG1fY29udGV4dElkLCB0aW1lKTsKK30KKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQoreworICAg
IGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZmFzdFNlZWsobV9jb250ZXh0SWQs
IHRpbWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5T
Y2FubmluZ0ZvcndhcmQoKQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdl
ci0+YmVnaW5TY2FubmluZ0ZvcndhcmQobV9jb250ZXh0SWQpOworfQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6YmVnaW5TY2FubmluZ0JhY2t3YXJkKCkKK3sKKyAgICBp
ZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCht
X2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojpl
bmRTY2FubmluZygpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5l
bmRTY2FubmluZyhtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTW9k
ZWxDb250ZXh0OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlmIChtX21hbmFnZXIp
CisgICAgICAgIG1fbWFuYWdlci0+cmVxdWVzdEV4aXRGdWxsc2NyZWVuKG1fY29udGV4dElkKTsK
K30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJG
cmFtZShXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCit7CisgICAgbV92aWRlb0xheWVyRnJhbWUg
PSBmcmFtZTsKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldFZpZGVv
TGF5ZXJGcmFtZShtX2NvbnRleHRJZCwgZnJhbWUpOworfQorCitXZWJDb3JlOjpGbG9hdFJlY3Qg
V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0Ojp2aWRlb0xheWVyRnJhbWUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJGcmFtZTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnNldFZpZGVvTGF5ZXJHcmF2aXR5KFdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgZ3Jhdml0eSkKK3sKKyAgICBtX3ZpZGVvTGF5
ZXJHcmF2aXR5ID0gZ3Jhdml0eTsKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPnNldFZpZGVvTGF5ZXJHcmF2aXR5KG1fY29udGV4dElkLCBncmF2aXR5KTsKK30KKworV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbENvbnRleHQ6OnZpZGVvTGF5ZXJHcmF2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV92aWRlb0xheWVyR3Jhdml0eTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bENvbnRleHQ6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQpCit7Cisg
ICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZWxlY3RBdWRpb01lZGlhT3B0
aW9uKG1fY29udGV4dElkLCBvcHRpb25JZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TW9kZWxDb250ZXh0OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWludDY0X3Qgb3B0aW9uSWQp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZWxlY3RMZWdpYmxl
TWVkaWFPcHRpb24obV9jb250ZXh0SWQsIG9wdGlvbklkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQobV9jb250ZXh0
SWQsIG1vZGUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4dDo6ZGlk
U2V0dXBGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFn
ZXItPmRpZFNldHVwRnVsbHNjcmVlbihtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTW9kZWxDb250ZXh0OjpkaWRFbnRlckZ1bGxzY3JlZW4oKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+ZGlkRW50ZXJGdWxsc2NyZWVuKG1fY29udGV4
dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmRpZEV4aXRG
dWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPmRp
ZEV4aXRGdWxsc2NyZWVuKG1fY29udGV4dElkKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5Nb2RlbENvbnRleHQ6OmRpZENsZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBpZiAobV9tYW5h
Z2VyKQorICAgICAgICBtX21hbmFnZXItPmRpZENsZWFudXBGdWxsc2NyZWVuKG1fY29udGV4dElk
KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbENvbnRleHQ6OmZ1bGxzY3JlZW5N
YXlSZXR1cm5Ub0lubGluZSgpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5h
Z2VyLT5mdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUobV9jb250ZXh0SWQpOworfQorCisjcHJh
Z21hIG1hcmsgLSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKwogUGFzc1JlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQ
cm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eShwYWdlKSk7CkBAIC02NCw4ICsyMjQs
NiBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eShXZWJQYWdlUHJveHkmIHBhZwogICAgIDogbV9wYWdlKCZwYWdlKQogewogICAg
IG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFn
ZUlEKCksICp0aGlzKTsKLSAgICBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbCh0aGlzKTsKLSAg
ICBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5DaGFuZ2VPYnNlcnZlcih0aGlzKTsKIH0KIAogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
KCkKQEAgLTc3LDM3ICsyMzUsMTE3IEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6
fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eSgpCiAKIHZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKCkKIHsKLSAgICBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VBVktpdDo6aW52YWxpZGF0ZSgpOwotCiAgICAgbV9wYWdlLT5wcm9jZXNzKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgbV9wYWdl
ID0gbnVsbHB0cjsKIAotICAgIFttX2xheWVySG9zdCByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0g
ICAgbV9sYXllckhvc3QuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0
TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8mIG1vZGVsID0gc3RkOjpnZXQ8MD4odHVwbGUp
OworICAgICAgICBhdXRvJiBpbnRlcmZhY2UgPSBzdGQ6OmdldDwxPih0dXBsZSk7CisKKyAgICAg
ICAgaW50ZXJmYWNlLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIFttb2RlbC0+bGF5ZXJIb3N0KCkg
cmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgICAgICBtb2RlbC0+c2V0TGF5ZXJIb3N0KG51bGxw
dHIpOworICAgIH0KKworICAgIG1fY29udGV4dE1hcC5jbGVhcigpOworfQorCit2b2lkIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVxdWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigp
Cit7CisgICAgZm9yIChhdXRvJiB0dXBsZSA6IG1fY29udGV4dE1hcC52YWx1ZXMoKSkKKyAgICAg
ICAgc3RkOjpnZXQ8MT4odHVwbGUpLT5yZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7Cit9
CisKK2Jvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpoYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICBmb3IgKGF1
dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChzdGQ6Omdl
dDwxPih0dXBsZSktPmhhc01vZGUobW9kZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2V0dXBGdWxsc2NyZWVuV2l0aElEKHVpbnQzMl90IHZpZGVvTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2Fs
ZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2aWRlb0Z1bGxz
Y3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKK2Jvb2wgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvT3B0aW1pemVk
KCkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFwLnZhbHVlcygp
KSB7CisgICAgICAgIGlmIChzdGQ6OmdldDwxPih0dXBsZSktPm1heUF1dG9tYXRpY2FsbHlTaG93
VmlkZW9PcHRpbWl6ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6TW9kZWxJ
bnRlcmZhY2VUdXBsZSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmNyZWF0ZU1vZGVs
QW5kSW50ZXJmYWNlKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBSZWY8V2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWxDb250ZXh0PiBtb2RlbCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29udGV4
dDo6Y3JlYXRlKCp0aGlzLCBjb250ZXh0SWQpOworICAgIFJlZjxXZWJDb3JlOjpXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VBVktpdD4gaW50ZXJmYWNlID0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQVZLaXQ6OmNyZWF0ZSgpOworCisgICAgaW50ZXJmYWNlLT5zZXRXZWJWaWRlb0Z1bGxz
Y3JlZW5Nb2RlbCgmbW9kZWwuZ2V0KCkpOworICAgIGludGVyZmFjZS0+c2V0V2ViVmlkZW9GdWxs
c2NyZWVuQ2hhbmdlT2JzZXJ2ZXIoJm1vZGVsLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6Om1h
a2VfdHVwbGUoV1RGOjptb3ZlKG1vZGVsKSwgV1RGOjptb3ZlKGludGVyZmFjZSkpOworfQorCitX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6Ok1vZGVsSW50ZXJmYWNlVHVwbGUmIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0
X3QgY29udGV4dElkKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jb250ZXh0TWFwLmFkZChj
b250ZXh0SWQsIE1vZGVsSW50ZXJmYWNlVHVwbGUoKSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlTW9kZWxB
bmRJbnRlcmZhY2UoY29udGV4dElkKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKK30KKworV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxDb250ZXh0JiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk6OmVuc3VyZU1vZGVsKHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAg
ICByZXR1cm4gKnN0ZDo6Z2V0PDA+KGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCkp
OworfQorCitXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdCYgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjplbnN1cmVJbnRlcmZhY2UodWludDY0X3QgY29udGV4
dElkKQoreworICAgIHJldHVybiAqc3RkOjpnZXQ8MT4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2Uo
Y29udGV4dElkKSk7Cit9CisKKyNwcmFnbWEgbWFyayBNZXNzYWdlcyBmcm9tIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNl
dHVwRnVsbHNjcmVlbldpdGhJRCh1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQzMl90IHZpZGVvTGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbFJlY3QsIGZsb2F0IGhvc3RpbmdE
ZXZpY2VTY2FsZUZhY3RvciwgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSB2
aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbikKIHsKICAg
ICBBU1NFUlQodmlkZW9MYXllcklEKTsKLSAgICBtX2xheWVySG9zdCA9IFdLTWFrZVJlbmRlckxh
eWVyKHZpZGVvTGF5ZXJJRCk7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsQ29u
dGV4dD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUFWS2l0PiBpbnRlcmZhY2U7CisKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBtb2RlbC0+c2V0SW5p
dGlhbFZpZGVvTGF5ZXJGcmFtZShpbml0aWFsUmVjdCk7CisgICAgbW9kZWwtPnNldExheWVySG9z
dChXS01ha2VSZW5kZXJMYXllcih2aWRlb0xheWVySUQpKTsKICAgICBpZiAoaG9zdGluZ0Rldmlj
ZVNjYWxlRmFjdG9yICE9IDEpIHsKICAgICAgICAgLy8gSW52ZXJ0IHRoZSBzY2FsZSB0cmFuc2Zv
cm0gYWRkZWQgaW4gdGhlIFdlYlByb2Nlc3MgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS8xODMxNjU0
Mj4uCiAgICAgICAgIGZsb2F0IGludmVyc2VTY2FsZSA9IDEgLyBob3N0aW5nRGV2aWNlU2NhbGVG
YWN0b3I7Ci0gICAgICAgIFttX2xheWVySG9zdCBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1h
a2VTY2FsZShpbnZlcnNlU2NhbGUsIGludmVyc2VTY2FsZSwgMSldOworICAgICAgICBbbW9kZWwt
PmxheWVySG9zdCgpIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGludmVyc2VT
Y2FsZSwgaW52ZXJzZVNjYWxlLCAxKV07CiAgICAgfQogCi0gICAgbV92aWRlb0xheWVyRnJhbWUg
PSBpbml0aWFsUmVjdDsKLQogICAgIFVJVmlldyAqcGFyZW50VmlldyA9IGRvd25jYXN0PFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UtPmRyYXdpbmdBcmVhKCkpLnJlbW90
ZUxheWVyVHJlZUhvc3QoKS5yb290TGF5ZXIoKTsKLSAgICBzZXR1cEZ1bGxzY3JlZW4oKm1fbGF5
ZXJIb3N0LmdldCgpLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgdmlkZW9GdWxsc2NyZWVuTW9k
ZSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKKyAgICBpbnRlcmZhY2UtPnNldHVwRnVsbHNj
cmVlbigqbW9kZWwtPmxheWVySG9zdCgpLCBpbml0aWFsUmVjdCwgcGFyZW50VmlldywgdmlkZW9G
dWxsc2NyZWVuTW9kZSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKTsKIH0KLSAgICAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRN
TE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQorCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cmVzZXRNZWRpYVN0YXRlKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAg
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkucmVzZXRNZWRpYVN0YXRlKCk7CiB9Ci0gICAgCi12
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0U2Vla2FibGVSYW5nZXNWZWN0
b3IoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+JiByYW5nZXMpCisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRDdXJyZW50VGltZSh1aW50NjRf
dCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGhvc3RUaW1lKQoreworICAg
IGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldEN1cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBo
b3N0VGltZSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRC
dWZmZXJlZFRpbWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgYnVmZmVyZWRUaW1lKQorewor
ICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldEJ1ZmZlcmVkVGltZShidWZmZXJlZFRp
bWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9E
aW1lbnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgdW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5z
ZXRWaWRlb0RpbWVuc2lvbnMoaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0U2Vla2FibGVSYW5nZXNWZWN0b3IodWlu
dDY0X3QgY29udGV4dElkLCBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gcmFuZ2Vz
KQogewogICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcykKQEAgLTExOCwxMTgg
KzM1NiwxNjQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldFNlZWth
YmxlUmFuZ2VzVmVjdG9yKGNvbnN0IFZlY3RvcjxzdGQ6OnAKICAgICAgICAgdGltZVJhbmdlcy0+
YWRkKHJhbmdlLmZpcnN0LCByYW5nZS5zZWNvbmQpOwogICAgIH0KIAotICAgIHNldFNlZWthYmxl
UmFuZ2VzKCp0aW1lUmFuZ2VzKTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRT
ZWVrYWJsZVJhbmdlcygqdGltZVJhbmdlcyk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyhib29sIGVuYWJsZWQs
IHVpbnQzMl90IHRhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKQordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldENhblBsYXlGYXN0UmV2ZXJzZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCit7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRl
eHRJZCkuc2V0Q2FuUGxheUZhc3RSZXZlcnNlKHZhbHVlKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2
NF90IGNvbnRleHRJZCwgVmVjdG9yPFN0cmluZz4gb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJ
bmRleCkKK3sKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRBdWRpb01lZGlhU2Vs
ZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMo
dWludDY0X3QgY29udGV4dElkLCBWZWN0b3I8U3RyaW5nPiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQoreworICAgIGVuc3VyZUludGVyZmFjZShjb250ZXh0SWQpLnNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVy
dGllcyh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgdWludDMyX3QgdGFyZ2V0VHlw
ZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCiB7CiAgICAgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZT4o
dGFyZ2V0VHlwZSk7Ci0gICAgCiAgICAgQVNTRVJUKHR5cGUgPT0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlOjpUYXJnZXRUeXBlQWlyUGxheSB8fCB0eXBlID09IFdlYlZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZTo6VGFyZ2V0VHlwZVRWT3V0IHx8IHR5cGUgPT0gV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlOjpUYXJnZXRUeXBlTm9uZSk7CiAgICAgCi0gICAgc2V0RXh0ZXJuYWxQbGF5YmFj
ayhlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKKyAgICBlbnN1cmVJbnRlcmZh
Y2UoY29udGV4dElkKS5zZXRFeHRlcm5hbFBsYXliYWNrKGVuYWJsZWQsIHR5cGUsIGxvY2FsaXpl
ZERldmljZU5hbWUpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpzZXREdXJhdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBk
dXJhdGlvbikKIHsKLSAgICBib29sIGlzVmlld1Zpc2libGUgPSBtX3BhZ2UtPmlzVmlld1Zpc2li
bGUoKTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXI6OkZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShpc1ZpZXdWaXNpYmxlKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CisgICAgZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCkuc2V0RHVyYXRpb24oZHVy
YXRpb24pOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZShib29sIHZpc2libGUsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGlubGluZVJlY3QpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojpz
ZXRSYXRlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBpc1BsYXlpbmcsIGRvdWJsZSByYXRlKQog
ewotICAgIG1fcGFnZS0+ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7Ci0gICAgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQ6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh2aXNp
YmxlLCBpbmxpbmVSZWN0KTsKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKS5zZXRSYXRl
KGlzUGxheWluZywgcmF0ZSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmVudGVyRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9w
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpSZXF1ZXN0RXhp
dEZ1bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgYXV0byYgaW50ZXJmYWNlID0g
ZW5zdXJlSW50ZXJmYWNlKGNvbnRleHRJZCk7CisgICAgaW50ZXJmYWNlLmVudGVyRnVsbHNjcmVl
bigpOworCisgICAgLy8gT25seSBvbmUgY29udGV4dCBjYW4gYmUgaW4gYSBnaXZlbiBmdWxsIHNj
cmVlbiBtb2RlIGF0IGEgdGltZToKKyAgICBmb3IgKGF1dG8mIGNvbnRleHRQYWlyIDogbV9jb250
ZXh0TWFwKSB7CisgICAgICAgIGF1dG8mIG90aGVyQ29udGV4dElkID0gY29udGV4dFBhaXIua2V5
OworICAgICAgICBpZiAoY29udGV4dElkID09IG90aGVyQ29udGV4dElkKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYXV0byYgb3RoZXJJbnRlcmZhY2UgPSBzdGQ6OmdldDwxPihj
b250ZXh0UGFpci52YWx1ZSk7CisgICAgICAgIGlmIChvdGhlckludGVyZmFjZS0+aGFzTW9kZShp
bnRlcmZhY2UubW9kZSgpKSkKKyAgICAgICAgICAgIG90aGVySW50ZXJmYWNlLT5yZXF1ZXN0SGlk
ZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgfQogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZGlkRXhpdEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29y
ZTo6SW50UmVjdCBmaW5hbFJlY3QpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbigpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKLSAgICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgZW5zdXJlSW50ZXJm
YWNlKGNvbnRleHRJZCkuZXhpdEZ1bGxzY3JlZW4oZmluYWxSZWN0KTsKIH0KLSAgICAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbigpCisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpjbGVhbnVwRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hdOwotICAgIFtt
X2xheWVySG9zdCByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgbV9sYXllckhvc3QuY2xlYXIo
KTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkRpZENsZWFudXBGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGVuc3VyZUlu
dGVyZmFjZShjb250ZXh0SWQpLmNsZWFudXBGdWxsc2NyZWVuKCk7CiB9CiAKLXZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnByZXBhcmVkVG9SZXR1cm5Ub0lubGluZSh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgdmlzaWJsZSwgV2ViQ29yZTo6SW50UmVjdCBpbmxpbmVSZWN0
KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6RGlkU2V0dXBGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+
ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKCk7CisKKyAgICBlbnN1cmVJbnRlcmZhY2UoY29u
dGV4dElkKS5wcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodmlzaWJsZSwgaW5saW5lUmVjdCk7CiB9
CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3Jl
ZW4oKQorI3ByYWdtYSBtYXJrIE1lc3NhZ2VzIHRvIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIK
Kwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnBsYXkodWludDY0X3QgY29u
dGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1f
cGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpQbGF5KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlE
KCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cGxheSgpCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6cGF1c2UodWludDY0X3QgY29udGV4
dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6UGxheSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlBhdXNlKGNvbnRleHRJZCksIG1fcGFnZS0+
cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6
OnBhdXNlKCkKKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnRvZ2dsZVBs
YXlTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpQYXVzZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlRv
Z2dsZVBsYXlTdGF0ZShjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Ojp0b2dnbGVQbGF5U3RhdGUoKQorCit2
b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcodWludDY0
X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6VG9nZ2xlUGxheVN0YXRlKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6QmVnaW5T
Y3J1YmJpbmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0gICAgCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6YmVnaW5TY3J1YmJpbmcoKQorCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKHVpbnQ2NF90IGNvbnRl
eHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXI6OkJlZ2luU2NydWJiaW5nKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RW5kU2NydWJiaW5nKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6ZW5kU2NydWJiaW5nKCkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlclByb3h5OjpzZWVrVG9UaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91YmxlIHRpbWUpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpF
bmRTY3J1YmJpbmcoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZWVrVG9UaW1lKGNvbnRleHRJZCwgdGlt
ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6c2Vla1RvVGltZShkb3VibGUgdGltZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlclByb3h5OjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQog
ewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
U2Vla1RvVGltZSh0aW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGYXN0U2Vlayhjb250ZXh0SWQsIHRp
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OmZhc3RTZWVrKGRvdWJsZSB0aW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkZh
c3RTZWVrKHRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdGb3J3YXJkKGNvbnRl
eHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6YmVnaW5TY2FubmluZ0ZvcndhcmQoKQordm9pZCBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
CiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpCZWdpblNjYW5uaW5nRm9yd2FyZCgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OkJlZ2luU2Nhbm5pbmdC
YWNrd2FyZChjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2luU2Nhbm5pbmdCYWNrd2FyZCgpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4
dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFu
YWdlcjo6QmVnaW5TY2FubmluZ0JhY2t3YXJkKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RW5kU2Nhbm5p
bmcoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjplbmRTY2FubmluZygpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6cmVxdWVzdEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkK
IHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6
OkVuZFNjYW5uaW5nKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6UmVxdWVzdEV4aXRGdWxsc2NyZWVuKGNv
bnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi1GbG9hdFJlY3QgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5Ojp2aWRlb0xheWVyRnJhbWUoKSBjb25zdAordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OmRpZFNldHVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250
ZXh0SWQpCiB7Ci0gICAgcmV0dXJuIG1fdmlkZW9MYXllckZyYW1lOworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkU2V0dXBGdWxsc2NyZWVu
KGNvbnRleHRJZCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCBm
cmFtZSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFeGl0RnVsbHNj
cmVlbih1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpEaWRFeGl0RnVsbHNjcmVlbihjb250ZXh0SWQpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPmRpZEV4aXRGdWxsc2NyZWVuKCk7Cit9CisK
K3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRFbnRlckZ1bGxzY3JlZW4o
dWludDY0X3QgY29udGV4dElkKQoreworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6RGlkRW50ZXJGdWxsc2NyZWVuKGNvbnRleHRJZCksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+ZGlkRW50ZXJGdWxsc2NyZWVuKCk7Cit9CisKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1
aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgYXV0byYgbW9kZWwgPSBlbnN1cmVNb2RlbChjb250
ZXh0SWQpOworCisgICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hdOworICAgIFttb2RlbC5sYXllckhv
c3QoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgbW9kZWwuc2V0TGF5ZXJIb3N0KG51bGxw
dHIpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6RGlkQ2xlYW51cEZ1bGxzY3JlZW4oY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisK
KyAgICBtX2NvbnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZXRWaWRlb0xheWVyRnJhbWUodWludDY0X3QgY29udGV4
dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgZnJhbWUpCiB7Ci0gICAgbV92aWRlb0xheWVyRnJhbWUg
PSBmcmFtZTsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9O
X01JTl9SRVFVSVJFRCA+IDkwMDAwCiAgICAgICAgIEJLU0FuaW1hdGlvbkZlbmNlSGFuZGxlKiBz
eW5jaHJvbml6YXRpb25GZW5jZSA9IFtVSVdpbmRvdyBfc3luY2hyb25pemVkRHJhd2luZ0ZlbmNl
XTsKQEAgLTIzOCwzMCArNTIyLDM2IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpzZXRWaWRlb0xheWVyRnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lCiAgICAgICAg
IG1hY2hfcG9ydF9uYW1lX3QgZmVuY2VQb3J0ID0gW1VJV2luZG93IF9zeW5jaHJvbml6ZURyYXdp
bmdBY3Jvc3NQcm9jZXNzZXNdOwogI2VuZGlmCiAKLSAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQo
ZnJhbWUsIElQQzo6QXR0YWNobWVudChmZW5jZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5E
KSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChjb250ZXh0
SWQsIGZyYW1lLCBJUEM6OkF0dGFjaG1lbnQoZmVuY2VQb3J0LCBNQUNIX01TR19UWVBFX01PVkVf
U0VORCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICB9CiB9CiAKLVdlYkNvcmU6OldlYlZpZGVv
RnVsbHNjcmVlbk1vZGVsOjpWaWRlb0dyYXZpdHkgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Ojp2aWRlb0xheWVyR3Jhdml0eSgpIGNvbnN0Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkodWludDY0X3QgY29udGV4dElkLCBXZWJD
b3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6VmlkZW9HcmF2aXR5IGdyYXZpdHkpCiB7Ci0g
ICAgcmV0dXJuIG1fdmlkZW9MYXllckdyYXZpdHk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpTZXRWaWRlb0xheWVyR3Jhdml0eUVudW0oY29u
dGV4dElkLCAodW5zaWduZWQpZ3Jhdml0eSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6c2V0VmlkZW9MYXllckdyYXZpdHkoV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSBncmF2aXR5KQordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdEF1ZGlvTWVkaWFPcHRpb24o
dWludDY0X3QgY29udGV4dElkLCB1aW50NjRfdCBpbmRleCkKIHsKLSAgICBtX3ZpZGVvTGF5ZXJH
cmF2aXR5ID0gZ3Jhdml0eTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OlNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSgodW5zaWduZWQpZ3Jhdml0
eSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2VsZWN0QXVkaW9NZWRpYU9wdGlvbihjb250ZXh0SWQsIGlu
ZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9Ci0gICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXJQcm94eTo6c2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50NjRfdCBpbmRleCkKKwor
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OnNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQogewotICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2VsZWN0QXVkaW9NZWRp
YU9wdGlvbihpbmRleCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9u
KGNvbnRleHRJZCwgaW5kZXgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KLSAgICAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpzZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24odWlu
dDY0X3QgaW5kZXgpCisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxs
c2NyZWVuTW9kZUNoYW5nZWQodWludDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpGdWxsc2NyZWVuTW9kZUNoYW5nZWQo
Y29udGV4dElkLCBtb2RlKSwgbV9wYWdlLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0
X3QgY29udGV4dElkKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6U2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4KSwgbV9wYWdlLT5w
YWdlSUQoKSk7CisgICAgYm9vbCBpc1ZpZXdWaXNpYmxlID0gbV9wYWdlLT5pc1ZpZXdWaXNpYmxl
KCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoY29udGV4dElkLCBpc1ZpZXdWaXNpYmxlKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIuaAppbmRleCBkMTNlNjIyYmMyN2E0OTI3N2M2OTEzM2QxZjNiMGQ0MzEx
YmJhZDQ2Li42YWMzNmI5NzQ3NTQyMzM0NTJiYzBiYjZiYWIwYzBkYWY3ZDQwMDM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bUNBTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1l
bnQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC01MSw1MyArNTIsMTIwIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBMYXllckhvc3RpbmdDb250ZXh0OwogY2xhc3MgV2ViUGFn
ZTsKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI7CiAKLWNsYXNzIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxW
aWRlb0VsZW1lbnQsIHB1YmxpYyBXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2Us
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZGVvRnVsbHNjcmVlbklu
dGVyZmFjZUNvbnRleHQ+LCBwdWJsaWMgV2ViQ29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ+IGNyZWF0ZShXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiBtYW5hZ2VyLCB1aW50
NjRfdCBjb250ZXh0SWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KG1hbmFnZXIsIGNvbnRleHRJZCkpOworICAg
IH0KKyAgICB2aXJ0dWFsIH5XZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KCk7CisK
KyAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1fbWFuYWdlciA9IG51bGxwdHI7IH0KKworICAgIExh
eWVySG9zdGluZ0NvbnRleHQqIGxheWVySG9zdGluZ0NvbnRleHQoKSB7IHJldHVybiBtX2xheWVy
SG9zdGluZ0NvbnRleHQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExheWVySG9zdGluZ0NvbnRleHQo
c3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYpOworCisgICAgYm9vbCBpc0Fu
aW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNBbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldElz
QW5pbWF0aW5nKGJvb2wgZmxhZykgeyBtX2lzQW5pbWF0aW5nID0gZmxhZzsgfQorCisgICAgYm9v
bCB0YXJnZXRJc0Z1bGxzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldElzRnVsbHNjcmVl
bjsgfQorICAgIHZvaWQgc2V0VGFyZ2V0SXNGdWxsc2NyZWVuKGJvb2wgZmxhZykgeyBtX3Rhcmdl
dElzRnVsbHNjcmVlbiA9IGZsYWc7IH0KKworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgZnVsbHNjcmVlbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxzY3JlZW5Nb2RlOyB9CisgICAgdm9pZCBzZXRGdWxsc2NyZWVuTW9kZShXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUpIHsgbV9mdWxsc2NyZWVuTW9k
ZSA9IG1vZGU7IH0KKworICAgIGJvb2wgaXNGdWxsc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9p
c0Z1bGxzY3JlZW47IH0KKyAgICB2b2lkIHNldElzRnVsbHNjcmVlbihib29sIGZsYWcpIHsgbV9p
c0Z1bGxzY3JlZW4gPSBmbGFnOyB9CisKK3ByaXZhdGU6CisgICAgLy8gV2ViVmlkZW9GdWxsc2Ny
ZWVuSW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIHJlc2V0TWVkaWFTdGF0ZSgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihkb3VibGUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNo
b3JUaW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyZWRUaW1lKGRvdWJs
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZs
b2F0IHBsYXliYWNrUmF0ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRGlt
ZW5zaW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2ViQ29yZTo6VGlt
ZVJhbmdlcyYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVy
c2UoYm9vbCB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEF1ZGlvTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxl
TWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRF
eHRlcm5hbFBsYXliYWNrKGJvb2wgZW5hYmxlZCwgRXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUs
IFdURjo6U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpIG92ZXJyaWRlOworCisgICAgV2ViVmlk
ZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dChXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyJiwg
dWludDY0X3QgY29udGV4dElkKTsKKworICAgIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIqIG1f
bWFuYWdlcjsKKyAgICB1aW50NjRfdCBtX2NvbnRleHRJZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TGF5ZXJIb3N0aW5nQ29udGV4dD4gbV9sYXllckhvc3RpbmdDb250ZXh0OworICAgIGJvb2wgbV9p
c0FuaW1hdGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3RhcmdldElzRnVsbHNjcmVlbiB7IGZh
bHNlIH07CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9k
ZSBtX2Z1bGxzY3JlZW5Nb2RlIHsgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUgfTsKKyAgICBib29sIG1faXNGdWxsc2NyZWVuIHsgZmFsc2UgfTsKK307
CisKK2NsYXNzIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cj4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViUGFnZT4pOwogICAgIHZpcnR1YWwgfldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIoKTsKICAgICAKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKLSAgICAKKworICAg
IC8vIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQKICAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxs
c2NyZWVuKCkgY29uc3Q7CiAgICAgdm9pZCBlbnRlclZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxl
bWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiwgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CiAgICAgdm9pZCBleGl0VmlkZW9GdWxsc2NyZWVuRm9y
VmlkZW9FbGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQmKTsKICAgICAKIHByb3RlY3Rl
ZDoKKyAgICBmcmllbmQgY2xhc3MgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDsK
KwogICAgIGV4cGxpY2l0IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQ
YWdlPik7Ci0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYg
cmhzKSBvdmVycmlkZSB7IHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpFdmVudExpc3RlbmVy
Kj4odGhpcykgPT0gJnJoczsgfQotICAgIAotICAgIC8vIEZ1bGxzY3JlZW5JbnRlcmZhY2UKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRNZWRpYVN0YXRlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldER1cmF0aW9uKGRvdWJsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1
cnJlbnRUaW1lKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhdGUoYm9vbCBpc1BsYXlpbmcsIGZsb2F0
IHBsYXliYWNrUmF0ZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRGltZW5z
aW9ucyhib29sIGhhc1ZpZGVvLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vla2FibGVSYW5nZXMoY29uc3QgV2ViQ29yZTo6VGltZVJh
bmdlcyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDYW5QbGF5RmFzdFJldmVyc2Uo
Ym9vbCB2YWx1ZSkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNl
bGVjdGVkSW5kZXgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdpYmxlTWVkaWFT
ZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBz
ZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZXJuYWxQbGF5
YmFjayhib29sIGVuYWJsZWQsIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQ
bGF5YmFja1RhcmdldFR5cGUsIFN0cmluZyBsb2NhbGl6ZWREZXZpY2VOYW1lKSBvdmVycmlkZTsK
LQotICAgIC8vIGFkZGl0aW9uYWwgaW5jb21pbmcKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0dXBG
dWxsc2NyZWVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbigpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbHNjcmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRD
bGVhbnVwRnVsbHNjcmVlbigpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0xheWVyR3Jhdml0
eUVudW0odW5zaWduZWQpOwotICAgIHZpcnR1YWwgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9J
bmxpbmUoYm9vbCBpc1BhZ2VWaXNpYmxlKTsKLSAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZUZl
bmNlZChXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1lbnQgZmVuY2VQb3J0
KTsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8UmVmUHRyPFdlYkNvcmU6OldlYlZpZGVvRnVsbHNj
cmVlbk1vZGVsVmlkZW9FbGVtZW50PiwgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFj
ZUNvbnRleHQ+PiBNb2RlbEludGVyZmFjZVR1cGxlOworICAgIE1vZGVsSW50ZXJmYWNlVHVwbGUg
Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKTsKKyAgICBNb2RlbElu
dGVyZmFjZVR1cGxlJiBlbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQp
OworICAgIFdlYkNvcmU6OldlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50JiBlbnN1
cmVNb2RlbCh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQmIGVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpOworCisgICAg
Ly8gSW50ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQKKyAgICB2
b2lkIHJlc2V0TWVkaWFTdGF0ZSh1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgc2V0RHVy
YXRpb24odWludDY0X3QgY29udGV4dElkLCBkb3VibGUpOworICAgIHZvaWQgc2V0Q3VycmVudFRp
bWUodWludDY0X3QgY29udGV4dElkLCBkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JU
aW1lKTsKKyAgICB2b2lkIHNldEJ1ZmZlcmVkVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSBidWZmZXJlZFRpbWUpOworICAgIHZvaWQgc2V0UmF0ZSh1aW50NjRfdCBjb250ZXh0SWQsIGJv
b2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpOworICAgIHZvaWQgc2V0VmlkZW9EaW1l
bnNpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBoYXNWaWRlbywgZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCk7CisgICAgdm9pZCBzZXRTZWVrYWJsZVJhbmdlcyh1aW50NjRfdCBjb250ZXh0
SWQsIGNvbnN0IFdlYkNvcmU6OlRpbWVSYW5nZXMmKTsKKyAgICB2b2lkIHNldENhblBsYXlGYXN0
UmV2ZXJzZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0QXVk
aW9NZWRpYVNlbGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCk7CisgICAgdm9pZCBzZXRM
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKHVpbnQ2NF90IGNvbnRleHRJZCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpOworICAgIHZvaWQg
c2V0RXh0ZXJuYWxQbGF5YmFjayh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgZW5hYmxlZCwgV2Vi
Q29yZTo6V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0
VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpOworCisgICAgLy8gTWVzc2FnZXMgZnJv
bSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkKKyAgICB2b2lkIHBsYXkodWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIHBhdXNlKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9p
ZCB0b2dnbGVQbGF5U3RhdGUodWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGJlZ2luU2Ny
dWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCBlbmRTY3J1YmJpbmcodWludDY0
X3QgY29udGV4dElkKTsKKyAgICB2b2lkIHNlZWtUb1RpbWUodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSk7CisgICAgdm9pZCBmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJs
ZSB0aW1lKTsKKyAgICB2b2lkIGJlZ2luU2Nhbm5pbmdGb3J3YXJkKHVpbnQ2NF90IGNvbnRleHRJ
ZCk7CisgICAgdm9pZCBiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKTsK
KyAgICB2b2lkIGVuZFNjYW5uaW5nKHVpbnQ2NF90IGNvbnRleHRJZCk7CisgICAgdm9pZCByZXF1
ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZFNldHVw
RnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3Jl
ZW4odWludDY0X3QgY29udGV4dElkKTsKKyAgICB2b2lkIGRpZEVudGVyRnVsbHNjcmVlbih1aW50
NjRfdCBjb250ZXh0SWQpOworICAgIHZvaWQgZGlkQ2xlYW51cEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKTsKKyAgICB2b2lkIHNldFZpZGVvTGF5ZXJGcmFtZUZlbmNlZCh1aW50NjRfdCBj
b250ZXh0SWQsIFdlYkNvcmU6OkZsb2F0UmVjdCBib3VuZHMsIElQQzo6QXR0YWNobWVudCBmZW5j
ZVBvcnQpOworICAgIHZvaWQgc2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRl
eHRJZCwgdW5zaWduZWQgZ3Jhdml0eSk7CisgICAgdm9pZCBzZWxlY3RBdWRpb01lZGlhT3B0aW9u
KHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAgIHZvaWQgc2VsZWN0TGVn
aWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpOworICAg
IHZvaWQgZnVsbHNjcmVlbk1vZGVDaGFuZ2VkKHVpbnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7CisgICAgdm9pZCBmdWxsc2Ny
ZWVuTWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2li
bGUpOwogICAgIAogICAgIFdlYlBhZ2UqIG1fcGFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudD4gbV92aWRlb0VsZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExheWVy
SG9zdGluZ0NvbnRleHQ+IG1fbGF5ZXJIb3N0aW5nQ29udGV4dDsKLSAgICAKLSAgICBib29sIG1f
aXNBbmltYXRpbmc7Ci0gICAgYm9vbCBtX3RhcmdldElzRnVsbHNjcmVlbjsKLSAgICBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1fZnVsbHNjcmVlbk1vZGU7
Ci0gICAgYm9vbCBtX2lzRnVsbHNjcmVlbjsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQqLCB1aW50NjRfdD4gbV92aWRlb0VsZW1lbnRzOworICAgIEhhc2hNYXA8dWludDY0
X3QsIE1vZGVsSW50ZXJmYWNlVHVwbGU+IG1fY29udGV4dE1hcDsKIH07CiAgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9z
L1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCmluZGV4
IGQzYzY4YTM2NmNmODE1NGVkZGRiMTg2ZGQyZTZjOTM0N2ZkYTUyYWIuLjAxM2RhM2VlNjIyNDVk
MTQyNTJmY2IxNGEwYWI5ODMwYTA3NGVjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
ZXNzYWdlcy5pbgpAQCAtMjIsMjYgKzIyLDI2IEBACiAKICNpZiBQTEFURk9STShJT1MpCiBtZXNz
YWdlcyAtPiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyIHsKLSAgICBQbGF5KCkKLSAgICBQYXVz
ZSgpCi0gICAgVG9nZ2xlUGxheVN0YXRlKCkKLSAgICBCZWdpblNjcnViYmluZygpCi0gICAgRW5k
U2NydWJiaW5nKCkKLSAgICBTZWVrVG9UaW1lKGRvdWJsZSB0aW1lKQotICAgIEZhc3RTZWVrKGRv
dWJsZSB0aW1lKQotICAgIEJlZ2luU2Nhbm5pbmdGb3J3YXJkKCkKLSAgICBCZWdpblNjYW5uaW5n
QmFja3dhcmQoKQotICAgIEVuZFNjYW5uaW5nKCkKLSAgICBSZXF1ZXN0RXhpdEZ1bGxzY3JlZW4o
KQotICAgIERpZFNldHVwRnVsbHNjcmVlbigpCi0gICAgRGlkRXhpdEZ1bGxzY3JlZW4oKQotICAg
IERpZEVudGVyRnVsbHNjcmVlbigpCi0gICAgRGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQotICAgIFNl
dFZpZGVvTGF5ZXJGcmFtZUZlbmNlZChXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0
dGFjaG1lbnQgZmVuY2VQb3J0KQotICAgIFNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1bnNpZ25l
ZCBncmF2aXR5KQotICAgIFNlbGVjdEF1ZGlvTWVkaWFPcHRpb24odWludDY0X3QgaW5kZXgpCi0g
ICAgU2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKHVpbnQ2NF90IGluZGV4KQotICAgIGZ1bGxzY3Jl
ZW5Nb2RlQ2hhbmdlZChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpWaWRlb0Z1bGxzY3JlZW5N
b2RlIHZpZGVvRnVsbHNjcmVlbk1vZGUpCi0gICAgRnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
KGJvb2wgaXNQYWdlVmlzaWJsZSkKKyAgICBQbGF5KHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBQ
YXVzZSh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgVG9nZ2xlUGxheVN0YXRlKHVpbnQ2NF90IGNv
bnRleHRJZCkKKyAgICBCZWdpblNjcnViYmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgRW5k
U2NydWJiaW5nKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZWVrVG9UaW1lKHVpbnQ2NF90IGNv
bnRleHRJZCwgZG91YmxlIHRpbWUpCisgICAgRmFzdFNlZWsodWludDY0X3QgY29udGV4dElkLCBk
b3VibGUgdGltZSkKKyAgICBCZWdpblNjYW5uaW5nRm9yd2FyZCh1aW50NjRfdCBjb250ZXh0SWQp
CisgICAgQmVnaW5TY2FubmluZ0JhY2t3YXJkKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBFbmRT
Y2FubmluZyh1aW50NjRfdCBjb250ZXh0SWQpCisgICAgUmVxdWVzdEV4aXRGdWxsc2NyZWVuKHVp
bnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKQorICAgIERpZEV4aXRGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBEaWRF
bnRlckZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4dElkKQorICAgIERpZENsZWFudXBGdWxsc2Ny
ZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICBTZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQodWlu
dDY0X3QgY29udGV4dElkLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRzLCBJUEM6OkF0dGFjaG1l
bnQgZmVuY2VQb3J0KQorICAgIFNldFZpZGVvTGF5ZXJHcmF2aXR5RW51bSh1aW50NjRfdCBjb250
ZXh0SWQsIHVuc2lnbmVkIGdyYXZpdHkpCisgICAgU2VsZWN0QXVkaW9NZWRpYU9wdGlvbih1aW50
NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQorICAgIFNlbGVjdExlZ2libGVNZWRpYU9w
dGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQorICAgIEZ1bGxzY3JlZW5N
b2RlQ2hhbmdlZCh1aW50NjRfdCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OlZpZGVvRnVsbHNjcmVlbk1vZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKKyAgICBGdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUodWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUp
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCmluZGV4IDQ1YTNlMjk4MjBlYjJmYzI3NTUz
NzVkMmY0MTA5MjAyNmJiYTg3ZGEuLjc1MTM0M2Q1NDM0ZWE2ZWQ4NDYxMmFkYjYzMDgzMjhjM2Fk
OTcwMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3Mv
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQpAQCAtNjAsNiArNjAsOTcgQEAgc3RhdGljIElu
dFJlY3QgY2xpZW50UmVjdEZvckVsZW1lbnQoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0
dXJuIGVsZW1lbnQtPmNsaWVudFJlY3QoKTsKIH0KIAorc3RhdGljIHVpbnQ2NF90IG5leHRDb250
ZXh0SWQoKQoreworICAgIHN0YXRpYyB1aW50NjRfdCBjb250ZXh0SWQgPSAwOworICAgIHJldHVy
biArK2NvbnRleHRJZDsKK30KKworI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dAorCitXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpXZWJW
aWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0KFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIm
IG1hbmFnZXIsIHVpbnQ2NF90IGNvbnRleHRJZCkKKyAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikK
KyAgICAsIG1fY29udGV4dElkKGNvbnRleHRJZCkKK3sKK30KKworV2ViVmlkZW9GdWxsc2NyZWVu
SW50ZXJmYWNlQ29udGV4dDo6fldlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQoKQor
eworfQorCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldExheWVy
SG9zdGluZ0NvbnRleHQoc3RkOjp1bmlxdWVfcHRyPExheWVySG9zdGluZ0NvbnRleHQ+JiYgY29u
dGV4dCkKK3sKKyAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBXVEY6Om1vdmUoY29udGV4dCk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6cmVzZXRNZWRp
YVN0YXRlKCkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnJlc2V0
TWVkaWFTdGF0ZShtX2NvbnRleHRJZCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50
ZXJmYWNlQ29udGV4dDo6c2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIGlmICht
X21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0RHVyYXRpb24obV9jb250ZXh0SWQsIGR1
cmF0aW9uKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0Ojpz
ZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JUaW1lKQorewor
ICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1fbWFuYWdlci0+c2V0Q3VycmVudFRpbWUobV9j
b250ZXh0SWQsIGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVk
VGltZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldEJ1ZmZl
cmVkVGltZShtX2NvbnRleHRJZCwgYnVmZmVyZWRUaW1lKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBw
bGF5YmFja1JhdGUpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5z
ZXRSYXRlKG1fY29udGV4dElkLCBpc1BsYXlpbmcsIHBsYXliYWNrUmF0ZSk7Cit9CisKK3ZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0VmlkZW9EaW1lbnNpb25zKGJv
b2wgaGFzVmlkZW8sIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRWaWRlb0RpbWVuc2lvbnMobV9jb250ZXh0SWQs
IGhhc1ZpZGVvLCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5J
bnRlcmZhY2VDb250ZXh0OjpzZXRTZWVrYWJsZVJhbmdlcyhjb25zdCBXZWJDb3JlOjpUaW1lUmFu
Z2VzJiByYW5nZXMpCit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5z
ZXRTZWVrYWJsZVJhbmdlcyhtX2NvbnRleHRJZCwgcmFuZ2VzKTsKK30KKwordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0OjpzZXRDYW5QbGF5RmFzdFJldmVyc2UoYm9vbCB2
YWx1ZSkKK3sKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnNldENhblBs
YXlGYXN0UmV2ZXJzZShtX2NvbnRleHRJZCwgdmFsdWUpOworfQorCit2b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbkludGVyZmFjZUNvbnRleHQ6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNv
bnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgp
Cit7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRBdWRpb01lZGlh
U2VsZWN0aW9uT3B0aW9ucyhtX2NvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4dDo6c2V0TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBvcHRpb25zLCB1
aW50NjRfdCBzZWxlY3RlZEluZGV4KQoreworICAgIGlmIChtX21hbmFnZXIpCisgICAgICAgIG1f
bWFuYWdlci0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhtX2NvbnRleHRJZCwgb3B0
aW9ucywgc2VsZWN0ZWRJbmRleCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQ29udGV4dDo6c2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJsZWQsIEV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlIHR5cGUsIFdURjo6U3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit7
CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT5zZXRFeHRlcm5hbFBsYXli
YWNrKG1fY29udGV4dElkLCBlbmFibGVkLCB0eXBlLCBsb2NhbGl6ZWREZXZpY2VOYW1lKTsKK30K
KworI3ByYWdtYSBtYXJrIC0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcgorCiBQYXNzUmVmUHRy
PFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmNy
ZWF0ZShQYXNzUmVmUHRyPFdlYlBhZ2U+IHBhZ2UpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKHBhZ2UpKTsKQEAgLTY3LDIwICsxNTgsNTkgQEAg
UGFzc1JlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyPiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpjcmVhdGUoUGFzc1JlZlAKIAogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6V2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcihQYXNzUmVmUHRyPFdlYlBhZ2U+IHBhZ2UpCiAgICAgOiBt
X3BhZ2UocGFnZS5nZXQoKSkKLSAgICAsIG1faXNBbmltYXRpbmcoZmFsc2UpCi0gICAgLCBtX3Rh
cmdldElzRnVsbHNjcmVlbihmYWxzZSkKLSAgICAsIG1fZnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlh
RWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpCi0gICAgLCBtX2lzRnVsbHNjcmVlbihm
YWxzZSkKIHsKLSAgICBzZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UodGhpcyk7CiAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UtPnBhZ2VJ
RCgpLCAqdGhpcyk7CiB9CiAKIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyKCkKIHsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9jb250ZXh0TWFw
LnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbW9kZWwgPSBzdGQ6OmdldDwwPih0dXBsZSk7Cisg
ICAgICAgIGF1dG8gaW50ZXJmYWNlID0gc3RkOjpnZXQ8MT4odHVwbGUpOworCisgICAgICAgIG1v
ZGVsLT5zZXRXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2UobnVsbHB0cik7CisgICAgICAgIG1v
ZGVsLT5zZXRWaWRlb0VsZW1lbnQobnVsbHB0cik7CisKKyAgICAgICAgaW50ZXJmYWNlLT5pbnZh
bGlkYXRlKCk7CisgICAgfQorCisgICAgbV9jb250ZXh0TWFwLmNsZWFyKCk7CisgICAgbV92aWRl
b0VsZW1lbnRzLmNsZWFyKCk7CisKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKK1dlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6Ok1vZGVsSW50ZXJmYWNlVHVwbGUgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6Y3JlYXRlTW9kZWxBbmRJbnRlcmZhY2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIFJl
ZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWwgPSBXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFdlYlZp
ZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZSA9IFdlYlZpZGVvRnVsbHNj
cmVlbkludGVyZmFjZUNvbnRleHQ6OmNyZWF0ZSgqdGhpcywgY29udGV4dElkKTsKKworICAgIGlu
dGVyZmFjZS0+c2V0TGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhvc3RpbmdDb250ZXh0OjpjcmVh
dGVGb3JFeHRlcm5hbEhvc3RpbmdQcm9jZXNzKCkpOworICAgIG1vZGVsLT5zZXRXZWJWaWRlb0Z1
bGxzY3JlZW5JbnRlcmZhY2UoaW50ZXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6Om1h
a2VfdHVwbGUoV1RGOjptb3ZlKG1vZGVsKSwgV1RGOjptb3ZlKGludGVyZmFjZSkpOworfQorCitX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpNb2RlbEludGVyZmFjZVR1cGxlJiBXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjplbnN1cmVNb2RlbEFuZEludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0
SWQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NvbnRleHRNYXAuYWRkKGNvbnRleHRJZCwg
TW9kZWxJbnRlcmZhY2VUdXBsZSgpKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVhdGVNb2RlbEFuZEludGVyZmFj
ZShjb250ZXh0SWQpOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQor
CitXZWJDb3JlOjpXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudCYgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6ZW5zdXJlTW9kZWwodWludDY0X3QgY29udGV4dElkKQoreworICAg
IHJldHVybiAqc3RkOjpnZXQ8MD4oZW5zdXJlTW9kZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKSk7
Cit9CisKK1dlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQmIFdlYlZpZGVvRnVsbHNj
cmVlbk1hbmFnZXI6OmVuc3VyZUludGVyZmFjZSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAg
cmV0dXJuICpzdGQ6OmdldDwxPihlbnN1cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpKTsK
K30KKworI3ByYWdtYSBtYXJrIEludGVyZmFjZSB0byBDaHJvbWVDbGllbnQ6CisKIGJvb2wgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKSBjb25zdAog
ewogICAgIHJldHVybiBTZXR0aW5nczo6YXZLaXRFbmFibGVkKCk7CkBAIC05MCw2NiArMjIwLDc5
IEBAIHZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW50ZXJWaWRlb0Z1bGxzY3JlZW5G
b3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVvRWxlCiB7CiAgICAgQVNTRVJUKG1vZGUgIT0gSFRNTE1l
ZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwogCi0gICAgbV92aWRlb0VsZW1l
bnQgPSAmdmlkZW9FbGVtZW50OworICAgIHVpbnQ2NF90IGNvbnRleHRJZDsKIAotICAgIG1fdGFy
Z2V0SXNGdWxsc2NyZWVuID0gdHJ1ZTsKLSAgICBtX2Z1bGxzY3JlZW5Nb2RlID0gbW9kZTsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdmlkZW9FbGVtZW50cy5hZGQoJnZpZGVvRWxlbWVudCwgMCk7
CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlID0gbmV4dENvbnRleHRJZCgpOworICAgIGNvbnRleHRJZCA9IGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAKLSAgICBpZiAobV9pc0FuaW1hdGluZykKLSAgICAgICAgcmV0dXJu
OworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7
CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFj
ZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJm
YWNlKGNvbnRleHRJZCk7CiAKLSAgICBtX2lzQW5pbWF0aW5nID0gdHJ1ZTsKLSAgICBzZXRWaWRl
b0VsZW1lbnQoJnZpZGVvRWxlbWVudCk7CisgICAgaW50ZXJmYWNlLT5zZXRUYXJnZXRJc0Z1bGxz
Y3JlZW4odHJ1ZSk7CisgICAgaW50ZXJmYWNlLT5zZXRGdWxsc2NyZWVuTW9kZShtb2RlKTsKKyAg
ICBtb2RlbC0+c2V0VmlkZW9FbGVtZW50KCZ2aWRlb0VsZW1lbnQpOwogCi0gICAgbV9sYXllckhv
c3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yRXh0ZXJuYWxIb3N0
aW5nUHJvY2VzcygpOwotICAgIGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuID0gbV92aWRl
b0VsZW1lbnQtPm1lZGlhU2Vzc2lvbigpLmFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4oKm1fdmlk
ZW9FbGVtZW50LmdldCgpKTsKKyAgICBpZiAoaW50ZXJmYWNlLT5pc0FuaW1hdGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKKworICAg
IGJvb2wgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuID0gdmlkZW9FbGVtZW50Lm1lZGlhU2Vzc2lv
bigpLmFsbG93c0FsdGVybmF0ZUZ1bGxzY3JlZW4odmlkZW9FbGVtZW50KTsKICAgICAKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0
dXBGdWxsc2NyZWVuV2l0aElEKG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCksIGNs
aWVudFJlY3RGb3JFbGVtZW50KCZ2aWRlb0VsZW1lbnQpLCBtX3BhZ2UtPmRldmljZVNjYWxlRmFj
dG9yKCksIG1fZnVsbHNjcmVlbk1vZGUsIGFsbG93T3B0aW1pemVkRnVsbHNjcmVlbiksIG1fcGFn
ZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpTZXR1cEZ1bGxzY3JlZW5XaXRoSUQoY29udGV4dElkLCBpbnRlcmZh
Y2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+Y29udGV4dElEKCksIGNsaWVudFJlY3RGb3JFbGVt
ZW50KCZ2aWRlb0VsZW1lbnQpLCBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCksIGludGVyZmFj
ZS0+ZnVsbHNjcmVlbk1vZGUoKSwgYWxsb3dPcHRpbWl6ZWRGdWxsc2NyZWVuKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CiB9CiAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVv
RnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JikKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVv
RWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQpCiB7Ci0gICAg
UmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+IHZpZGVvRWxlbWVudCA9IG1fdmlkZW9FbGVtZW50LnJl
bGVhc2UoKTsKLSAgICBtX3RhcmdldElzRnVsbHNjcmVlbiA9IGZhbHNlOworICAgIEFTU0VSVCht
X3ZpZGVvRWxlbWVudHMuY29udGFpbnMoJnZpZGVvRWxlbWVudCkpOworCisgICAgdWludDY0X3Qg
Y29udGV4dElkID0gbV92aWRlb0VsZW1lbnRzLmdldCgmdmlkZW9FbGVtZW50KTsKKyAgICBhdXRv
JiBpbnRlcmZhY2UgPSBlbnN1cmVJbnRlcmZhY2UoY29udGV4dElkKTsKIAotICAgIGlmIChtX2lz
QW5pbWF0aW5nKQorICAgIGludGVyZmFjZS5zZXRUYXJnZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOwor
CisgICAgaWYgKGludGVyZmFjZS5pc0FuaW1hdGluZygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2lzQW5pbWF0aW5nID0gdHJ1ZTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY2xpZW50UmVjdEZvckVs
ZW1lbnQodmlkZW9FbGVtZW50LmdldCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIGludGVy
ZmFjZS5zZXRJc0FuaW1hdGluZyh0cnVlKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEZ1bGxzY3JlZW4oY29udGV4dElkLCBj
bGllbnRSZWN0Rm9yRWxlbWVudCgmdmlkZW9FbGVtZW50KSksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnJlc2V0TWVkaWFTdGF0ZSgpCisj
cHJhZ21hIG1hcmsgSW50ZXJmYWNlIHRvIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUNvbnRl
eHQ6CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cmVzZXRNZWRpYVN0YXRlKHVp
bnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6UmVzZXRNZWRpYVN0YXRlKCksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpSZXNldE1lZGlhU3RhdGUoY29udGV4dElkKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9
CiAgICAgCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldER1cmF0aW9uKGRvdWJs
ZSBkdXJhdGlvbikKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RHVyYXRpb24o
dWludDY0X3QgY29udGV4dElkLCBkb3VibGUgZHVyYXRpb24pCiB7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldER1cmF0aW9uKGR1
cmF0aW9uKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldER1cmF0aW9uKGNvbnRleHRJZCwgZHVy
YXRpb24pLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyOjpzZXRDdXJyZW50VGltZShkb3VibGUgY3VycmVudFRpbWUsIGRvdWJsZSBhbmNob3JU
aW1lKQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRDdXJyZW50VGltZSh1aW50
NjRfdCBjb250ZXh0SWQsIGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OlNldEN1cnJlbnRUaW1lKGN1cnJlbnRUaW1lLCBhbmNob3JUaW1lKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyUHJveHk6OlNldEN1cnJlbnRUaW1lKGNvbnRleHRJZCwgY3VycmVudFRpbWUsIGFuY2hvclRp
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRCdWZmZXJlZFRpbWUoZG91YmxlIGJ1ZmZlcmVkVGltZSkKK3ZvaWQgV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6c2V0QnVmZmVyZWRUaW1lKHVpbnQ2NF90IGNvbnRleHRJZCwgZG91
YmxlIGJ1ZmZlcmVkVGltZSkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0QnVmZmVyZWRUaW1lKGJ1ZmZlcmVkVGltZSksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpTZXRCdWZmZXJlZFRpbWUoY29udGV4dElkLCBidWZmZXJlZFRp
bWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRSYXRlKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCBwbGF5YmFja1JhdGUpCit2b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFJhdGUodWludDY0X3QgY29udGV4dElkLCBib29s
IGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRSYXRlKGlzUGxheWluZywg
cGxheWJhY2tSYXRlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldFJhdGUoY29udGV4dElkLCBp
c1BsYXlpbmcsIHBsYXliYWNrUmF0ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldFZpZGVvRGltZW5zaW9ucyhib29sIGhhc1ZpZGVv
LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpzZXRWaWRlb0RpbWVuc2lvbnModWludDY0X3QgY29udGV4dElkLCBib29sIGhhc1ZpZGVv
LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRWaWRlb0RpbWVuc2lvbnMoaGFz
VmlkZW8sIHdpZHRoLCBoZWlnaHQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0VmlkZW9EaW1l
bnNpb25zKGNvbnRleHRJZCwgaGFzVmlkZW8sIHdpZHRoLCBoZWlnaHQpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0U2Vla2Fi
bGVSYW5nZXMoY29uc3QgV2ViQ29yZTo6VGltZVJhbmdlcyYgdGltZVJhbmdlcykKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0U2Vla2FibGVSYW5nZXModWludDY0X3QgY29udGV4
dElkLCBjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW1lUmFuZ2VzKQogewogICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+PiByYW5nZXNWZWN0b3I7CiAgICAgCkBAIC0xNjAs
MzAgKzMwMywxMDQgQEAgdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRTZWVrYWJs
ZVJhbmdlcyhjb25zdCBXZWJDb3JlOjpUaW1lUmFuZ2VzJiB0aW0KICAgICAgICAgcmFuZ2VzVmVj
dG9yLmFwcGVuZChzdGQ6OnBhaXI8ZG91YmxlLGRvdWJsZT4oc3RhcnQsIGVuZCkpOwogICAgIH0K
IAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpTZXRTZWVrYWJsZVJhbmdlc1ZlY3RvcihXVEY6Om1vdmUocmFuZ2VzVmVjdG9yKSksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5OjpTZXRTZWVrYWJsZVJhbmdlc1ZlY3Rvcihjb250ZXh0SWQsIFdU
Rjo6bW92ZShyYW5nZXNWZWN0b3IpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0Q2FuUGxheUZhc3RSZXZlcnNlKGJvb2wgdmFsdWUp
Cit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldENhblBsYXlGYXN0UmV2ZXJzZSh1
aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgdmFsdWUpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldENhblBsYXlGYXN0UmV2ZXJz
ZSh2YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5OjpTZXRDYW5QbGF5RmFzdFJldmVyc2UoY29u
dGV4dElkLCB2YWx1ZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6OnNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQordm9pZCBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyh1aW50NjRf
dCBjb250ZXh0SWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxl
Y3RlZEluZGV4KQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpTZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBz
ZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlNldEF1ZGlvTWVkaWFTZWxlY3Rp
b25PcHRpb25zKGNvbnRleHRJZCwgb3B0aW9ucywgc2VsZWN0ZWRJbmRleCksIG1fcGFnZS0+cGFn
ZUlEKCkpOwogfQogCi12b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9wdGlvbnMsIHVpbnQ2
NF90IHNlbGVjdGVkSW5kZXgpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnNldExl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnModWludDY0X3QgY29udGV4dElkLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eTo6U2V0TGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHk6OlNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29udGV4dElk
LCBvcHRpb25zLCBzZWxlY3RlZEluZGV4KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQg
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0RXh0ZXJuYWxQbGF5YmFjayhib29sIGVuYWJs
ZWQsIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5
cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCit2b2lkIFdlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6OnNldEV4dGVybmFsUGxheWJhY2sodWludDY0X3QgY29udGV4dElk
LCBib29sIGVuYWJsZWQsIFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZTo6RXh0ZXJuYWxQbGF5
YmFja1RhcmdldFR5cGUgdGFyZ2V0VHlwZSwgU3RyaW5nIGxvY2FsaXplZERldmljZU5hbWUpCiB7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJv
eHk6OlNldEV4dGVybmFsUGxheWJhY2tQcm9wZXJ0aWVzKGVuYWJsZWQsIHN0YXRpY19jYXN0PHVp
bnQzMl90Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpTZXRFeHRlcm5hbFBsYXliYWNrUHJvcGVydGllcyhjb250ZXh0SWQsIGVuYWJsZWQs
IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0YXJnZXRUeXBlKSwgbG9jYWxpemVkRGV2aWNlTmFtZSks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQotICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4oKQorCisjcHJhZ21hIG1hcmsgTWVzc2FnZXMgZnJvbSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6cGxheSh1aW50NjRfdCBjb250ZXh0SWQpCit7CisgICAgZW5zdXJlTW9kZWwoY29u
dGV4dElkKS5wbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6cGF1
c2UodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucGF1
c2UoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjp0b2dnbGVQbGF5U3Rh
dGUodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkudG9n
Z2xlUGxheVN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVn
aW5TY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRl
eHRJZCkuYmVnaW5TY3J1YmJpbmcoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjplbmRTY3J1YmJpbmcodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVs
KGNvbnRleHRJZCkuZW5kU2NydWJiaW5nKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6c2Vla1RvVGltZSh1aW50NjRfdCBjb250ZXh0SWQsIGRvdWJsZSB0aW1lKQorewor
ICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2Vla1RvVGltZSh0aW1lKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmYXN0U2Vlayh1aW50NjRfdCBjb250ZXh0SWQsIGRv
dWJsZSB0aW1lKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZmFzdFNlZWsodGltZSk7
Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6YmVnaW5TY2FubmluZ0Zvcndh
cmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuYmVn
aW5TY2FubmluZ0ZvcndhcmQoKTsKK30KKwordm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
OjpiZWdpblNjYW5uaW5nQmFja3dhcmQodWludDY0X3QgY29udGV4dElkKQoreworICAgIGVuc3Vy
ZU1vZGVsKGNvbnRleHRJZCkuYmVnaW5TY2FubmluZ0JhY2t3YXJkKCk7Cit9CisKK3ZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZW5kU2Nhbm5pbmcodWludDY0X3QgY29udGV4dElkKQor
eworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuZW5kU2Nhbm5pbmcoKTsKK30KKwordm9pZCBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4odWludDY0X3Qg
Y29udGV4dElkKQoreworICAgIGVuc3VyZU1vZGVsKGNvbnRleHRJZCkucmVxdWVzdEV4aXRGdWxs
c2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2VsZWN0QXVk
aW9NZWRpYU9wdGlvbih1aW50NjRfdCBjb250ZXh0SWQsIHVpbnQ2NF90IGluZGV4KQoreworICAg
IGVuc3VyZU1vZGVsKGNvbnRleHRJZCkuc2VsZWN0QXVkaW9NZWRpYU9wdGlvbihpbmRleCk7Cit9
CisKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2VsZWN0TGVnaWJsZU1lZGlhT3B0
aW9uKHVpbnQ2NF90IGNvbnRleHRJZCwgdWludDY0X3QgaW5kZXgpCit7CisgICAgZW5zdXJlTW9k
ZWwoY29udGV4dElkKS5zZWxlY3RMZWdpYmxlTWVkaWFPcHRpb24oaW5kZXgpOworfQorCit2b2lk
IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZCh1aW50NjRf
dCBjb250ZXh0SWQsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUgdmlkZW9GdWxsc2NyZWVuTW9kZSkKK3sKKyAgICBlbnN1cmVNb2RlbChjb250ZXh0SWQpLmZ1
bGxzY3JlZW5Nb2RlQ2hhbmdlZCh2aWRlb0Z1bGxzY3JlZW5Nb2RlKTsKK30KKworI3ByYWdtYSBt
YXJrIE1lc3NhZ2VzIGZyb20gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjoKKwordm9pZCBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRTZXR1cEZ1bGxzY3JlZW4odWludDY0X3QgY29udGV4
dElkKQogewogICAgIFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXIgPSBbQ0FMYXllciBsYXllcl07
CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjAwLDgzICs0MTcsMTE4IEBAIHZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkU2V0dXBGdWxsc2NyZWVuKCkKICAgICAvLyBUaGlzIHNjYWxlIGZh
Y3RvciBpcyBpbnZlcnRlZCBpbiB0aGUgaG9zdGluZyBwcm9jZXNzLgogICAgIGZsb2F0IGhvc3Rp
bmdTY2FsZUZhY3RvciA9IG1fcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBbdmlkZW9M
YXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShob3N0aW5nU2NhbGVGYWN0
b3IsIGhvc3RpbmdTY2FsZUZhY3RvciwgMSldOwotICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+
c2V0Um9vdExheWVyKHZpZGVvTGF5ZXIpOwogCi0gICAgc2V0VmlkZW9GdWxsc2NyZWVuTGF5ZXIo
dmlkZW9MYXllcik7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVt
ZW50PiBtb2RlbDsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQ29udGV4
dD4gaW50ZXJmYWNlOworICAgIHN0ZDo6dGllKG1vZGVsLCBpbnRlcmZhY2UpID0gZW5zdXJlTW9k
ZWxBbmRJbnRlcmZhY2UoY29udGV4dElkKTsKKworICAgIGludGVyZmFjZS0+bGF5ZXJIb3N0aW5n
Q29udGV4dCgpLT5zZXRSb290TGF5ZXIodmlkZW9MYXllcik7CisgICAgbW9kZWwtPnNldFZpZGVv
RnVsbHNjcmVlbkxheWVyKHZpZGVvTGF5ZXIpOworCiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0
XTsKIAotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5OjpFbnRlckZ1bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OkVudGVyRnVs
bHNjcmVlbihjb250ZXh0SWQpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KICAgICAKLXZvaWQgV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKCkKK3ZvaWQgV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlcjo6ZGlkRW50ZXJGdWxsc2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJ
ZCkKIHsKLSAgICBtX2lzQW5pbWF0aW5nID0gZmFsc2U7Ci0gICAgbV9pc0Z1bGxzY3JlZW4gPSBm
YWxzZTsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRlb0VsZW1lbnQ+IG1v
ZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VDb250ZXh0PiBpbnRl
cmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1cmVNb2RlbEFuZElu
dGVyZmFjZShjb250ZXh0SWQpOworCisgICAgaW50ZXJmYWNlLT5zZXRJc0FuaW1hdGluZyhmYWxz
ZSk7CisgICAgaW50ZXJmYWNlLT5zZXRJc0Z1bGxzY3JlZW4oZmFsc2UpOworCisgICAgaWYgKGlu
dGVyZmFjZS0+dGFyZ2V0SXNGdWxsc2NyZWVuKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX3RhcmdldElzRnVsbHNjcmVlbikKKyAgICBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gdmlk
ZW9FbGVtZW50ID0gbW9kZWwtPnZpZGVvRWxlbWVudCgpOworICAgIGlmICghdmlkZW9FbGVtZW50
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdh
cyBwcmV2aW91c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgotICAgIF9fYmxvY2sg
UmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9FbGVtZW50PiBwcm90ZWN0KHRoaXMp
OwotICAgIFdlYlRocmVhZFJ1biheIHsKLSAgICAgICAgZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZp
ZGVvRWxlbWVudCgqbV92aWRlb0VsZW1lbnQpOwotICAgICAgICBwcm90ZWN0LmNsZWFyKCk7Cisg
ICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI+IHN0cm9uZ1RoaXModGhpcyk7Cisg
ICAgV2ViVGhyZWFkUnVuKFtzdHJvbmdUaGlzLCB2aWRlb0VsZW1lbnRdIHsKKyAgICAgICAgc3Ry
b25nVGhpcy0+ZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCgqdmlkZW9FbGVtZW50
KTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpkaWRFeGl0
RnVsbHNjcmVlbigpCit2b2lkIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OmRpZEV4aXRGdWxs
c2NyZWVuKHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKLSAgICBzZXRWaWRlb0Z1bGxzY3JlZW5MYXll
cihuaWwpOwotICAgIF9fYmxvY2sgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbk1vZGVsVmlkZW9F
bGVtZW50PiBwcm90ZWN0KHRoaXMpOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2Rl
bFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVvRnVsbHNjcmVlbkludGVy
ZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2RlbCwgaW50ZXJmYWNlKSA9
IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAgICBtb2RlbC0+c2V0Vmlk
ZW9GdWxsc2NyZWVuTGF5ZXIobmlsKTsKIAotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIGlmIChtX2xheWVySG9zdGluZ0NvbnRleHQpIHsK
LSAgICAgICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+c2V0Um9vdExheWVyKG51bGxwdHIp
OwotICAgICAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBSZWZQ
dHI8V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcj4gc3Ryb25nVGhpcyh0aGlzKTsKKyAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbc3Ryb25nVGhpcywgY29udGV4
dElkLCBpbnRlcmZhY2VdIHsKKyAgICAgICAgaWYgKGludGVyZmFjZS0+bGF5ZXJIb3N0aW5nQ29u
dGV4dCgpKSB7CisgICAgICAgICAgICBpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKS0+
c2V0Um9vdExheWVyKG51bGxwdHIpOworICAgICAgICAgICAgaW50ZXJmYWNlLT5zZXRMYXllckhv
c3RpbmdDb250ZXh0KG51bGxwdHIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX3BhZ2UpCi0g
ICAgICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJQcm94eTo6Q2xlYW51cEZ1bGxzY3JlZW4oKSwgbV9wYWdlLT5wYWdlSUQoKSk7Ci0gICAgICAg
IHByb3RlY3QuY2xlYXIoKTsKKyAgICAgICAgaWYgKHN0cm9uZ1RoaXMtPm1fcGFnZSkKKyAgICAg
ICAgICAgIHN0cm9uZ1RoaXMtPm1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlclByb3h5OjpDbGVhbnVwRnVsbHNjcmVlbihjb250ZXh0SWQpLCBzdHJvbmdUaGlz
LT5tX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICB9KTsKIH0KICAgICAKLXZvaWQgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKQordm9pZCBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjpkaWRDbGVhbnVwRnVsbHNjcmVlbih1aW50NjRfdCBjb250ZXh0SWQpCiB7
Ci0gICAgbV9pc0FuaW1hdGluZyA9IGZhbHNlOwotICAgIG1faXNGdWxsc2NyZWVuID0gZmFsc2U7
Ci0gICAgCi0gICAgc2V0VmlkZW9FbGVtZW50KG51bGxwdHIpOworICAgIFJlZlB0cjxXZWJWaWRl
b0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gbW9kZWw7CisgICAgUmVmUHRyPFdlYlZpZGVv
RnVsbHNjcmVlbkludGVyZmFjZUNvbnRleHQ+IGludGVyZmFjZTsKKyAgICBzdGQ6OnRpZShtb2Rl
bCwgaW50ZXJmYWNlKSA9IGVuc3VyZU1vZGVsQW5kSW50ZXJmYWNlKGNvbnRleHRJZCk7CisKKyAg
ICBpbnRlcmZhY2UtPnNldElzQW5pbWF0aW5nKGZhbHNlKTsKKyAgICBpbnRlcmZhY2UtPnNldElz
RnVsbHNjcmVlbihmYWxzZSk7CisgICAgSFRNTE1lZGlhRWxlbWVudDo6VmlkZW9GdWxsc2NyZWVu
TW9kZSBtb2RlID0gaW50ZXJmYWNlLT5mdWxsc2NyZWVuTW9kZSgpOworCisgICAgbW9kZWwtPnNl
dFZpZGVvRnVsbHNjcmVlbkxheWVyKG5pbCk7CisgICAgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+
IHZpZGVvRWxlbWVudCA9IG1vZGVsLT52aWRlb0VsZW1lbnQoKTsKKworICAgIGlmICghaW50ZXJm
YWNlLT50YXJnZXRJc0Z1bGxzY3JlZW4oKSkgeworICAgICAgICBtb2RlbC0+c2V0VmlkZW9FbGVt
ZW50KG51bGxwdHIpOworICAgICAgICBtb2RlbC0+c2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlKG51bGxwdHIpOworICAgICAgICBpbnRlcmZhY2UtPmludmFsaWRhdGUoKTsKKyAgICAgICAg
bV92aWRlb0VsZW1lbnRzLnJlbW92ZSh2aWRlb0VsZW1lbnQuZ2V0KCkpOworICAgICAgICBtX2Nv
bnRleHRNYXAucmVtb3ZlKGNvbnRleHRJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBpZiAoIW1fdGFyZ2V0SXNGdWxsc2NyZWVuKQorICAgIGlmICghdmlkZW9FbGVtZW50KQogICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBlbnRlciBmdWxsc2NyZWVuIG5vdyBpZiBpdCB3YXMgcHJl
dmlvdXNseSByZXF1ZXN0ZWQgZHVyaW5nIGFuIGFuaW1hdGlvbi4KLSAgICBfX2Jsb2NrIFJlZlB0
cjxXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbFZpZGVvRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsKLSAg
ICBXZWJUaHJlYWRSdW4oXiB7Ci0gICAgICAgIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9F
bGVtZW50KCptX3ZpZGVvRWxlbWVudCwgbV9mdWxsc2NyZWVuTW9kZSk7Ci0gICAgICAgIHByb3Rl
Y3QuY2xlYXIoKTsKKyAgICAvLyBleGl0IGZ1bGxzY3JlZW4gbm93IGlmIGl0IHdhcyBwcmV2aW91
c2x5IHJlcXVlc3RlZCBkdXJpbmcgYW4gYW5pbWF0aW9uLgorICAgIFJlZlB0cjxXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyPiBzdHJvbmdUaGlzKHRoaXMpOworICAgIFdlYlRocmVhZFJ1bihbc3Ry
b25nVGhpcywgdmlkZW9FbGVtZW50LCBtb2RlXSB7CisgICAgICAgIHN0cm9uZ1RoaXMtPmVudGVy
VmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KCp2aWRlb0VsZW1lbnQsIG1vZGUpOwogICAg
IH0pOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xh
eWVyR3Jhdml0eUVudW0odW5zaWduZWQgZ3Jhdml0eSkKK3ZvaWQgV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlcjo6c2V0VmlkZW9MYXllckdyYXZpdHlFbnVtKHVpbnQ2NF90IGNvbnRleHRJZCwgdW5z
aWduZWQgZ3Jhdml0eSkKIHsKLSAgICBzZXRWaWRlb0xheWVyR3Jhdml0eSgoV2ViVmlkZW9GdWxs
c2NyZWVuTW9kZWw6OlZpZGVvR3Jhdml0eSlncmF2aXR5KTsKKyAgICBlbnN1cmVNb2RlbChjb250
ZXh0SWQpLnNldFZpZGVvTGF5ZXJHcmF2aXR5KChXZWJWaWRlb0Z1bGxzY3JlZW5Nb2RlbDo6Vmlk
ZW9HcmF2aXR5KWdyYXZpdHkpOwogfQogICAgIAotdm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoYm9vbCBpc1BhZ2VWaXNpYmxlKQordm9p
ZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUo
dWludDY0X3QgY29udGV4dElkLCBib29sIGlzUGFnZVZpc2libGUpCiB7CisgICAgYXV0byYgbW9k
ZWwgPSBlbnN1cmVNb2RlbChjb250ZXh0SWQpOworCiAgICAgaWYgKCFpc1BhZ2VWaXNpYmxlKQot
ICAgICAgICBtX3ZpZGVvRWxlbWVudC0+c2Nyb2xsSW50b1ZpZXdJZk5vdFZpc2libGUoZmFsc2Up
OwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5OjpQcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUodHJ1ZSwgY2xpZW50UmVjdEZvckVsZW1lbnQo
bV92aWRlb0VsZW1lbnQuZ2V0KCkpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIG1vZGVs
LnZpZGVvRWxlbWVudCgpLT5zY3JvbGxJbnRvVmlld0lmTm90VmlzaWJsZShmYWxzZSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk6OlBy
ZXBhcmVkVG9SZXR1cm5Ub0lubGluZShjb250ZXh0SWQsIHRydWUsIGNsaWVudFJlY3RGb3JFbGVt
ZW50KG1vZGVsLnZpZGVvRWxlbWVudCgpKSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogICAgIAot
dm9pZCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpzZXRWaWRlb0xheWVyRnJhbWVGZW5jZWQo
V2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKK3Zv
aWQgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c2V0VmlkZW9MYXllckZyYW1lRmVuY2VkKHVp
bnQ2NF90IGNvbnRleHRJZCwgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kcywgSVBDOjpBdHRhY2ht
ZW50IGZlbmNlUG9ydCkKIHsKKyAgICBSZWZQdHI8V2ViVmlkZW9GdWxsc2NyZWVuTW9kZWxWaWRl
b0VsZW1lbnQ+IG1vZGVsOworICAgIFJlZlB0cjxXZWJWaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VD
b250ZXh0PiBpbnRlcmZhY2U7CisgICAgc3RkOjp0aWUobW9kZWwsIGludGVyZmFjZSkgPSBlbnN1
cmVNb2RlbEFuZEludGVyZmFjZShjb250ZXh0SWQpOworCiAgICAgW0NBVHJhbnNhY3Rpb24gYmVn
aW5dOwogICAgIFtDQVRyYW5zYWN0aW9uIHNldEFuaW1hdGlvbkR1cmF0aW9uOjBdOwotICAgIGlm
IChtX2xheWVySG9zdGluZ0NvbnRleHQpCi0gICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+
c2V0RmVuY2VQb3J0KGZlbmNlUG9ydC5wb3J0KCkpOwotICAgIHNldFZpZGVvTGF5ZXJGcmFtZShi
b3VuZHMpOworICAgIGlmIChpbnRlcmZhY2UtPmxheWVySG9zdGluZ0NvbnRleHQoKSkKKyAgICAg
ICAgaW50ZXJmYWNlLT5sYXllckhvc3RpbmdDb250ZXh0KCktPnNldEZlbmNlUG9ydChmZW5jZVBv
cnQucG9ydCgpKTsKKyAgICBtb2RlbC0+c2V0VmlkZW9MYXllckZyYW1lKGJvdW5kcyk7CiAgICAg
bWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgZmVuY2VQb3J0LnBvcnQoKSk7
CiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0K
</data>
<flag name="review"
          id="275667"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>