<?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>27541</bug_id>
          
          <creation_ts>2009-07-22 07:48:01 -0700</creation_ts>
          <short_desc>Web Inspector: Split InspectorController into InspectorController and InspectorBackend</short_desc>
          <delta_ts>2009-09-11 20:05:57 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>pmuellr</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133767</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-22 07:48:01 -0700</bug_when>
    <thetext>There are a lot of methods in InspectorController, some are called from within front-end (by means of bindings), other form InspectorController&apos;s WebCore API. It would be better to have explicit InspectorBackend object bound to the JS that front-end talks to. InspectorController.idl will transform into InspectorBackend.idl, InspectorController&apos;s API will become much more clean. Before I start with the implementation, I&apos;d like to hear your suggestions / thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133830</commentid>
    <comment_count>1</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-07-22 12:00:44 -0700</bug_when>
    <thetext>I think this makes sense. I don&apos;t have any real suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133842</commentid>
    <comment_count>2</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2009-07-22 12:30:57 -0700</bug_when>
    <thetext>Sounds good.  I haven&apos;t quite figured out where the C++ code calls into front-end JS (haven&apos;t really looked, actually); or maybe it really doesn&apos;t at all or not much.  But it would be nice to have this information as well.

I have this dream of being able to take the current js/html/css/images out of front-end, and running them in a actual browser, plugging the back-end with something else.  

In addition to, or as part of that dream, folks seem to be starting to ask about remote debugging, and having a clear contract between the UI and the backend would be very helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133891</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-22 14:04:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Sounds good.  I haven&apos;t quite figured out where the C++ code calls into
&gt; front-end JS (haven&apos;t really looked, actually); or maybe it really doesn&apos;t at
&gt; all or not much.  But it would be nice to have this information as well.
&gt; 

it is all going though the InspectorFrontend interface. See calls to m_frontend in InspectorController.

&gt; I have this dream of being able to take the current js/html/css/images out of
&gt; front-end, and running them in a actual browser, plugging the back-end with
&gt; something else.  
&gt; 

This is working with some limitations in Chromium. There is an InspectorController stub implementation written in JS code that handles most of the calls and makes front-end self-contained web app. Exceptions are calls to the host such as addSourceToFrame since they actually manipulate WebCore API. Here is a link: http://src.chromium.org/viewvc/chrome/trunk/src/webkit/glue/devtools/js/inspector_controller.js?revision=20751&amp;view=markup

&gt; In addition to, or as part of that dream, folks seem to be starting to ask
&gt; about remote debugging, and having a clear contract between the UI and the
&gt; backend would be very helpful.

Current plan is to serialize inspector controller frontend / backend interaction, so this should be possible. However, when talking about remote debugging, we should consider protocols such as http://my.opera.com/dragonfly/blog/scope-protocol-specification or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134109</commentid>
    <comment_count>4</comment_count>
      <attachid>33333</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-23 08:52:02 -0700</bug_when>
    <thetext>Created attachment 33333
Step 1

Step 1: 
- split classes, 
- move whatever is trivial to the InspectorBackend class
- hide private stuff in InspectorController
- delegate non-trivial calls such as highlighting-related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134144</commentid>
    <comment_count>5</comment_count>
      <attachid>33333</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-07-23 10:22:48 -0700</bug_when>
    <thetext>Comment on attachment 33333
Step 1

What cleans up the plain pointer reference the InspectorBackend has to the InspectorController? It looks like you want to make InspectorController not be RefCounted anymore, but I don&apos;t see a change in the class inheritence.

Basically what guarentees the InspectorBackend has a valid InspectorController reference still when InspectorBackend is RefCounted and can be wrapped to JavaScript objects that have a GC lifetime?

Maybe InspectorController needs to stay RefCounted and still have RefPtr on Page or when InspectorController goes away it disconnects from InspectorBackend.

Otherwise patch looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134153</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-23 10:45:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 33333 [details])
&gt; What cleans up the plain pointer reference the InspectorBackend has to the
&gt; InspectorController? It looks like you want to make InspectorController not be
&gt; RefCounted anymore, but I don&apos;t see a change in the class inheritence.
&gt; 
&gt; Basically what guarentees the InspectorBackend has a valid InspectorController
&gt; reference still when InspectorBackend is RefCounted and can be wrapped to
&gt; JavaScript objects that have a GC lifetime?
&gt; 
&gt; Maybe InspectorController needs to stay RefCounted and still have RefPtr on
&gt; Page or when InspectorController goes away it disconnects from
&gt; InspectorBackend.
&gt; 
&gt; Otherwise patch looks great!

InspectorController was meant to stop being ref-counted. I fixed Page&apos;s header, but missed InspectorController&apos;s inheritance somehow.

Let me clear InspectorBackend::m_inspectorController in the InspectorController&apos;s destructor to initiate &apos;disconnect&apos;. I will also add guards to the places in the code where controller is being accessed via the backend object. Sounds good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134157</commentid>
    <comment_count>7</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-07-23 10:56:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; InspectorController was meant to stop being ref-counted. I fixed Page&apos;s header,
&gt; but missed InspectorController&apos;s inheritance somehow.
&gt; 
&gt; Let me clear InspectorBackend::m_inspectorController in the
&gt; InspectorController&apos;s destructor to initiate &apos;disconnect&apos;. I will also add
&gt; guards to the places in the code where controller is being accessed via the
&gt; backend object. Sounds good?

Yep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134383</commentid>
    <comment_count>8</comment_count>
      <attachid>33408</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-23 23:14:02 -0700</bug_when>
    <thetext>Created attachment 33408
Step 1

Now disconnecting backend from the controller upon controller destruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134483</commentid>
    <comment_count>9</comment_count>
      <attachid>33417</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-24 02:59:46 -0700</bug_when>
    <thetext>Created attachment 33417
Step 1

Validated Chromium part (v8 bindings).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134484</commentid>
    <comment_count>10</comment_count>
      <attachid>33418</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-24 03:00:12 -0700</bug_when>
    <thetext>Created attachment 33418
Step 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134526</commentid>
    <comment_count>11</comment_count>
      <attachid>33418</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-07-24 06:16:28 -0700</bug_when>
    <thetext>Comment on attachment 33418
Step 1


&gt; +    if (m_inspectorController)
&gt; +        return m_inspectorController-&gt;resourceTrackingEnabled();
&gt; +    else
&gt; +        return false;

This (and a few othe places) should be written like:

&gt; +    if (m_inspectorController)
&gt; +        return m_inspectorController-&gt;resourceTrackingEnabled();
&gt; +    return false;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134543</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-24 07:18:57 -0700</bug_when>
    <thetext>Thanks for review.

Please do not land this - I want to fix it first and use svn rename for renamed files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134724</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-25 02:23:19 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/DerivedSources.make
Sending        WebCore/GNUmakefile.am
Sending        WebCore/WebCore.gypi
Sending        WebCore/WebCore.pro
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/WebCoreSources.bkl
Adding         WebCore/bindings/js/JSInspectorBackendCustom.cpp
Deleting       WebCore/bindings/js/JSInspectorControllerCustom.cpp
Sending        WebCore/bindings/js/ScriptObject.cpp
Sending        WebCore/bindings/js/ScriptObject.h
Sending        WebCore/bindings/v8/DOMObjectsInclude.h
Sending        WebCore/bindings/v8/DerivedSourcesAllInOne.cpp
Sending        WebCore/bindings/v8/ScriptObject.cpp
Sending        WebCore/bindings/v8/ScriptObject.h
Sending        WebCore/bindings/v8/V8Index.cpp
Sending        WebCore/bindings/v8/V8Index.h
Sending        WebCore/bindings/v8/custom/V8CustomBinding.h
Adding         WebCore/bindings/v8/custom/V8InspectorBackendCustom.cpp
Deleting       WebCore/bindings/v8/custom/V8InspectorControllerCustom.cpp
Adding         WebCore/inspector/InspectorBackend.cpp
Adding         WebCore/inspector/InspectorBackend.h
Adding         WebCore/inspector/InspectorBackend.idl
Sending        WebCore/inspector/InspectorController.cpp
Sending        WebCore/inspector/InspectorController.h
Deleting       WebCore/inspector/InspectorController.idl
Sending        WebCore/inspector/front-end/Resource.js
Sending        WebCore/inspector/front-end/ScriptsPanel.js
Sending        WebCore/page/Page.cpp
Sending        WebCore/page/Page.h
Transmitting file data ...........................
Committed revision 46390.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134725</commentid>
    <comment_count>14</comment_count>
      <attachid>33489</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-25 02:40:53 -0700</bug_when>
    <thetext>Created attachment 33489
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134730</commentid>
    <comment_count>15</comment_count>
      <attachid>33490</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-07-25 03:00:29 -0700</bug_when>
    <thetext>Created attachment 33490
(clearing review request)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134766</commentid>
    <comment_count>16</comment_count>
      <attachid>33418</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-25 14:31:54 -0700</bug_when>
    <thetext>Comment on attachment 33418
Step 1

Clearing review flag to remove from commit queue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33333</attachid>
            <date>2009-07-23 08:52:02 -0700</date>
            <delta_ts>2009-07-23 23:14:02 -0700</delta_ts>
            <desc>Step 1</desc>
            <filename>inspector_backend.txt</filename>
            <type>text/plain</type>
            <size>104284</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjMxMzA2Ni4uMDZiMzVkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wNy0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTcGxpdCBJbnNwZWN0b3JDb250cm9s
bGVyIGludG8gSW5zcGVjdG9yQ29udHJvbGxlcgorICAgICAgICBhbmQgSW5zcGVjdG9yQmFja2Vu
ZC4gRXZlcnl0aGluZyBmcm9udGVuZCBuZWVkcyBmcm9tIEluc3BlY3RvckNvbnRyb2xsZXIKKyAg
ICAgICAgd2lsbCBzbG93bHkgbWlncmF0ZSBpbnRvIHRoZSBJbnNwZWN0b3JCYWNrZW5kLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzU0MQorCisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVT
b3VyY2VzLmJrbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6aGln
aGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNl
YXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OmRhdGFiYXNlVGFi
bGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6Omluc3BlY3Rl
ZFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNldHRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjpzZXRTZXR0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnByb2ZpbGVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEds
b2JhbE9iamVjdDo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhJbmRleC5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRl
eC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckJh
Y2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFja2VuZDo6aW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZS5qczoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKIDIwMDktMDctMjMg
IFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAzZjUzY2FhLi44MmQ5ZmM5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCkBAIC0xNzEsNyArMTcxLDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgSFRNTFZpZGVv
RWxlbWVudCBcCiAgICAgSGlzdG9yeSBcCiAgICAgSW1hZ2VEYXRhIFwKLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyIFwKKyAgICBJbnNwZWN0b3JCYWNrZW5kIFwKICAgICBLZXlib2FyZEV2ZW50IFwK
ICAgICBMb2NhdGlvbiBcCiAgICAgTWVkaWFFcnJvciBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA2NDgyZGQyLi4xZjlj
YzA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTIzMSw3ICsyMzEsNyBAQCBJRExfQklORElOR1MgKz0gXAogCVdlYkNv
cmUvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBcCiAJV2ViQ29yZS9odG1sL1ZvaWRDYWxsYmFjay5p
ZGwgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsIFwKLQlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgXAogCVdlYkNvcmUvcGFnZS9CYXJJbmZvLmlkbCBcCiAJ
V2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaWRs
IFwKQEAgLTM2NCwxMSArMzY0LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmggXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmggXAotCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCBcCkBAIC0xMTE3LDYgKzExMTcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaWN1L3VuaWNvZGUvdXZlcnNpb24uaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjlkM2ViZS4uYjM5MjlkNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgJ2h0bWwvVGltZVJhbmdlcy5pZGwnLAogICAg
ICAgICAgICAgJ2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvVm9p
ZENhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaWRsJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsJywKICAgICAgICAg
ICAgICdwYWdlL0Fic3RyYWN0Vmlldy5pZGwnLApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaCcsCi0gICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCcsCkBAIC02MzAsNyArNjMw
LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVu
dENvbGxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgnLAotICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9y
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0
b20uY3BwJywKQEAgLTEzODAsNiArMTM4MCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckNsaWVudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCcsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwJywKKyAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCBjYTRhMzU1Li5jNmY2M2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQxNyw3ICs0MTcsNyBAQCBJRExf
QklORElOR1MgKz0gXAogICAgIGh0bWwvVGV4dE1ldHJpY3MuaWRsIFwKICAgICBodG1sL1ZhbGlk
aXR5U3RhdGUuaWRsIFwKICAgICBodG1sL1ZvaWRDYWxsYmFjay5pZGwgXAotICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsIFwKICAgICBwYWdlL0JhckluZm8uaWRsIFwKICAgICBwYWdlL0NvbnNvbGUuaWRsIFwK
ICAgICBwYWdlL0Nvb3JkaW5hdGVzLmlkbCBcCkBAIC01MDQsOCArNTA0LDggQEAgU09VUkNFUyAr
PSBcCiAgICAgYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXIuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRD
dXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgXAotICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0Nv
bGxlY3Rpb24uY3BwICBcCkBAIC04NDksNiArODQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRt
bC9QcmVsb2FkU2Nhbm5lci5jcHAgXAogICAgIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHAgXAogICAg
IGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKQEAgLTE1MDQsNiArMTUwNSw3IEBA
IEhFQURFUlMgKz0gXAogICAgIGh0bWwvVGltZVJhbmdlcy5oIFwKICAgICBodG1sL1ZhbGlkaXR5
U3RhdGUuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBcCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0MDg2YTEuLmMxNzdhNDUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODIsOSArNjgyLDggQEAK
IAkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFDRDBGRjU5ODY5MDA1
NzZCM0IgLyogU2hhcmVkV29ya2VyLmNwcCAqLzsgfTsKIAkJNDFFMUIxRDQwRkY1OTg2OTAwNTc2
QjNCIC8qIFNoYXJlZFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFFMUIxQ0UwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5oICov
OyB9OwogCQk0MUUxQjFENTBGRjU5ODY5MDA1NzZCM0IgLyogU2hhcmVkV29ya2VyLmlkbCBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0YwRkY1
OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5pZGwgKi87IH07Ci0JCTQxRjA2MENEMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8q
IEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi87IH07Ci0JCTQxRjA2MENFMEY1RUVCMkIwMEEw
N0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MENDMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCAqLzsgfTsKLQkJNDFGMDYxNkEwRjVFRkJERDAwQTA3RUFDIC8qIEpT
SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjE2OTBGNUVGQkREMDBBMDdFQUMgLyogSlNJbnNwZWN0
b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFD
IC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JC
YWNrZW5kLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0UwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVj
dG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFGMDYwQ0MwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5oICovOyB9
OwogCQk0MUYwNjE3NDBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYw
NjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggKi87
IH07CiAJCTQxRjA2MTc1MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFGMDYxNzMwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgKi87IH07CiAJCTQxRjA2MThFMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYxOEMw
RjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi87IH07CkBAIC0xMDE3LDYgKzEw
MTYsMTAgQEAKIAkJNzU3OTNFRDUwRDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3NhZ2VFdmVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VEMjBEMENFODVCMDA3RkMwQUMgLyogRE9NTWVzc2FnZUV2ZW50SW50ZXJuYWwuaCAqLzsg
fTsKIAkJN0E2NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLzsgfTsKIAkJ
N0E2NzRCREMwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCREEwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovOyB9OworCQk3QTc0RUNCNzEw
MTgzOTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I2MTAxODM5OUEwMEJGOTM5RSAv
KiBJbnNwZWN0b3JCYWNrZW5kLmlkbCAqLzsgfTsKKwkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlF
IC8qIEluc3BlY3RvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tl
bmQuY3BwICovOyB9OworCQk3QTc0RUNCQjEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3
NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQuaCAqLzsgfTsKKwkJN0E3
NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCQzEwMTgz
OURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLzsgfTsKIAkJN0FC
NkY4ODcwRkI5RDI3MTAwODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODUwRkI5RDI3MTAw
ODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwICovOyB9OwogCQk3QUI2Rjg4ODBGQjlE
MjcxMDA4MDVEMDIgLyogSW5zcGVjdG9ySlNPTk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODYwRkI5RDI3MTAwODA1RDAyIC8qIElu
c3BlY3RvckpTT05PYmplY3QuaCAqLzsgfTsKIAkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8q
IEluc3BlY3RvckZyb250ZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBRUQzRTAzMEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVu
ZC5jcHAgKi87IH07CkBAIC01NjQ0LDEwICs1NjQ3LDggQEAKIAkJNDFFMUIxQ0QwRkY1OTg2OTAw
NTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTaGFyZWRXb3JrZXIuY3BwOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUxQjFDRTBGRjU5ODY5MDA1NzZCM0Ig
LyogU2hhcmVkV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYXJl
ZFdvcmtlci5oOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFFMUIxQ0YwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU2hhcmVkV29ya2VyLmlkbDsgcGF0aCA9IHdvcmtl
cnMvU2hhcmVkV29ya2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFGMDYw
QUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxRjA2MENDMEY1
RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQxRjA2MTY5MEY1RUZCREQwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNv
bnRyb2xsZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0luc3BlY3RvckJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjBDQzBGNUVFQjJCMDBBMDdF
QUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSW5zcGVjdG9yQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MUYwNjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjE3MzBGNUYwMEFDMDBB
MDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MThDMEY1RjA2OTgwMEEwN0VBQyAvKiBD
b25zb2xlTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zb2xl
TWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjAzMyw2ICs2MDM0LDEw
IEBACiAJCTc1NzkzRUQyMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnRJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50SW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2NzRCRDkwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cExv
YWREZWZlcnJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCNjEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gSW5zcGVjdG9yQmFja2VuZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
NzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVj
dG9yQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNzRFQ0JDMTAxODM5REEw
MEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkY4ODUwRkI5RDI3MTAwODA1RDAyIC8qIEluc3Bl
Y3RvckpTT05PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9ySlNPTk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
QjZGODg2MEZCOUQyNzEwMDgwNUQwMiAvKiBJbnNwZWN0b3JKU09OT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckpTT05PYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3Rv
ckZyb250ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3Bl
Y3RvckZyb250ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MDAsOCAr
OTgwNSw4IEBACiAJCTFDNUZBRUNBMERDRkQ4QzkwMEQ1OEY3OCAvKiBJbnNwZWN0b3IgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQxRjA2MENCMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAotCQkJCTQxRjA2MEND
MEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKKwkJCQk0MUYw
NjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLywKKwkJCQk0
MUYwNjBDQzBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8sCiAJCQkJ
MUM1RkFFQ0YwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8s
CiAJCQkJMUM1RkFFRDAwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5o
ICovLAogCQkJKTsKQEAgLTk4MTEsMTMgKzk4MTYsMTUgQEAKIAkJMUM4MUI5NEQwRTk3MzJEOTAw
MjY2RTA3IC8qIGluc3BlY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
Y3BwICovLAorCQkJCTdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5k
LmggKi8sCisJCQkJN0E3NEVDQjYxMDE4Mzk5QTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
aWRsICovLAogCQkJCTFDODFCOTU5MEU5NzMzMDgwMDI2NkUwNyAvKiBmcm9udC1lbmQgKi8sCiAJ
CQkJNDFGMDYxOEQwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmNwcCAqLywKIAkJ
CQk0MUYwNjE4QzBGNUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuaCAqLywKIAkJCQkx
QzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8sCiAJCQkJMUM4
MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAogCQkJ
CTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCi0J
CQkJNDFGMDYwQUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICov
LAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCAqLywKIAkJCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5oICovLAogCQkJCTQxRjA2MTczMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwICovLApAQCAtMTM2MDQsNiArMTM2MTEsNyBAQAog
CQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyog
SlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzJFRDZCQjBDNkJEMkYwMDA5
MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQkxQTlFRjQ1NjBBMUI5NTdEMDAzMzJC
NjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovLAogCQkJCTkzQkE1
OUIxMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgKi8sCkBAIC0x
MzY1Nyw3ICsxMzY2NSw2IEBACiAJCQkJQkMxN0Y5NjUwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCUFCNENCNEVBMEI4QkRBM0QwMDlGNDBC
MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggKi8sCiAJCQkJQTdEMDMxOEQwRTkzNTQw
MzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLywKLQkJCQk0MUYwNjE2OTBGNUVG
QkREMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLywKIAkJCQkx
QzVGQUVFNjBEQ0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNw
cCAqLywKIAkJCQlCQ0UxQzQzRjBEOTgzMEY0MDAzQjAyRjIgLyogSlNMb2NhdGlvbkN1c3RvbS5j
cHAgKi8sCiAJCQkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwICovLApAQCAtMTYwODYsNyArMTYwOTMsNyBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlF
NjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzA5MTU4OEIw
REI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzA5MTU4OEQwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJhY2tX
cmFwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MUYwNjBDRTBGNUVFQjJCMDBBMDdFQUMgLyog
SlNJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUYwNjBDRTBGNUVF
QjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5
RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzAyOCw2ICsxNzAzNSw3IEBACiAJ
CQkJMkVDRjdBRTIxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RURCMDNEMTAxNjg0OTQwMEZFODExMyAvKiBET01PYmplY3RXaXRoU1ZHQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlw
dFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTc0RUNCQjEwMTgzOUE2MDBC
RjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzE0MCw2ICsx
NzE0OCw3IEBACiAJCQkJNDFFMUIxRDUwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgaW4gUmVzb3VyY2VzICovLAogCQkJCTE1Qzc3MDhDMTAwRDNDNkEwMDVCQTI2NyAvKiBWYWxp
ZGl0eVN0YXRlLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMkVDRjdBRTMxMDE2MkI1ODAwNDI3
REU3IC8qIEVycm9yRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk3QTc0RUNCNzEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTgxNjAsOCArMTgxNjksNyBAQAogCQkJCUE3RDAzMThFMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0lt
YWdlRGF0YUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDkxNTg4QTBEQjQyMDkyMDBF
NTVBRjQgLyogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMwOTE1ODhDMERCNDIwOTIwMEU1NUFGNCAvKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0MUYwNjBDRDBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxRjA2MTZBMEY1RUZCREQw
MEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1
OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg2NjI5RDQwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE5MDYzLDYgKzE5MDcxLDggQEAKIAkJCQkyRUNGN0FEQzEwMTYyQjM4MDA0
MjdERTcgLyogSlNFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFQ0Y3QUUxMTAx
NjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUVG
Q0FFMTAxNkNFNEEwMDQwRDM0RSAvKiBET01SR0JDb2xvci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tl
bmRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IGRlOGE3ZGMuLjRk
NzRhYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC0xMDUsOCArMTA1LDggQEAgVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBi
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
SW1hZ2VEYXRhQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVj
dFdyYXBwZXIuY3BwCisgICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3Rv
bS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3Bw
Ci0gICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKICAg
ICAgICAgYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9K
U01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCkBAIC0zNTMsNyArMzUzLDcgQEAgVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTFVMaXN0RWxlbWVudC5jcHAKICAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hpc3RvcnkuY3BwCiAgICAgICAgIERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSW5zcGVjdG9yQmFja2VuZC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNLZXlib2FyZEV2ZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTTG9jYXRpb24uY3BwCkBAIC02NjEsNiArNjYxLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogCiAgICAgPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lOU1BFQ1RPUiI+CiAgICAgICAgIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKyAgICAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuY3BwCiAgICAgICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAog
ICAgICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcAogICAgICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lOGNkYjlkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCkBAIC0wLDAgKzEsMjcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0luc3BlY3RvckJhY2tlbmQuaCIKKworI2lu
Y2x1ZGUgIkNvbnNvbGUuaCIKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCisjZW5kaWYKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIgorI2luY2x1ZGUg
IkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5j
bHVkZSAiSlNSYW5nZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlw
dERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlLmg+
CisjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNJbnNwZWN0b3JCYWNr
ZW5kOjpoaWdobGlnaHRET01Ob2RlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0
JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6YXNXcmFwcGVyKGFyZ3MuYXQoMCkpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBOb2RlKiBu
b2RlID0gdG9Ob2RlKHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgaW1wbCgpLT5oaWdobGlnaHQo
bm9kZSk7CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0luc3Bl
Y3RvckJhY2tlbmQ6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0g
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgcmVzdWx0OworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRz
KG5vZGUpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRvIHsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgp
LCB0YXJnZXQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFw
c2VkKGVjKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIEEgbm9uLWNvbGxhcHNl
ZCByZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGlsbCBu
b3QKKyAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUwOTMy
OCkuIEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIFZpc2libGVQb3NpdGlv
biBuZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNU
UkVBTSk7CisgICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFy
Y2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICByZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKKworICAgICAg
ICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAgIH0gd2hpbGUgKHRy
dWUpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisKKyNp
ZiBFTkFCTEUoREFUQUJBU0UpCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6ZGF0YWJhc2VU
YWJsZU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9E
YXRhYmFzZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAgaWYgKCFkYXRhYmFzZSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciByZXN1bHQ7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRh
YmxlTmFtZXMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdGFibGVOYW1lc1tpXSkpOworCisgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisjZW5kaWYKKworSlNWYWx1ZSBKU0luc3BlY3Rv
ckJhY2tlbmQ6Omluc3BlY3RlZFdpbmRvdyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikKK3sK
KyAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBsKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKSk7Cisg
ICAgcmV0dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChpbnNwZWN0ZWRXaW5kb3ct
Pmdsb2JhbEV4ZWMoKSwgaW5zcGVjdGVkV2luZG93KTsKK30KKworSlNWYWx1ZSBKU0luc3BlY3Rv
ckJhY2tlbmQ6OnNldHRpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
eworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworCisgICAgU3RyaW5nIGtleSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmIHNldHRpbmcgPSBpbXBsKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhrZXkpOworCisgICAgc3dpdGNoIChzZXR0
aW5nLnR5cGUoKSkgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEluc3BlY3RvckNv
bnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZToKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OlN0cmluZ1R5
cGU6CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc2V0dGluZy5zdHJpbmcoKSk7
CisgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6RG91YmxlVHlwZToK
KyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzZXR0aW5nLmRvdWJsZVZhbHVlKCkp
OworICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkludGVnZXJUeXBl
OgorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNldHRpbmcuaW50ZWdlclZhbHVl
KCkpOworICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkJvb2xlYW5U
eXBlOgorICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgp
KTsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0
b3JUeXBlOiB7CisgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBzdHJpbmdzQXJyYXk7
CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3Ry
aW5nVmVjdG9yKCk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdz
LnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXkuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHN0
cmluZ3NbaV0pKTsKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJp
bmdzQXJyYXkpOworICAgICAgICB9CisgICAgfQorfQorCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFj
a2VuZDo6c2V0U2V0dGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKKyAgICBTdHJpbmcga2V5ID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisg
ICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyBzZXR0aW5nOworCisgICAgSlNWYWx1ZSB2
YWx1ZSA9IGFyZ3MuYXQoMSk7CisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgdmFsdWUu
aXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRG8gbm90aGluZy4gVGhlIHNldHRpbmcgaXMgYWxyZWFk
eSBOb1R5cGUuCisgICAgICAgIEFTU0VSVChzZXR0aW5nLnR5cGUoKSA9PSBJbnNwZWN0b3JDb250
cm9sbGVyOjpTZXR0aW5nOjpOb1R5cGUpOworICAgIH0gZWxzZSBpZiAodmFsdWUuaXNTdHJpbmco
KSkKKyAgICAgICAgc2V0dGluZy5zZXQodmFsdWUudG9TdHJpbmcoZXhlYykpOworICAgIGVsc2Ug
aWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHNldHRpbmcuc2V0KHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgc2V0dGlu
Zy5zZXQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSlNBcnJh
eSoganNBcnJheSA9IGFzQXJyYXkodmFsdWUpOworICAgICAgICBpZiAoIWpzQXJyYXkpCisgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3Ry
aW5nczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpzQXJyYXktPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkp
LnRvU3RyaW5nKGV4ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgc3RyaW5n
cy5hcHBlbmQoaXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0dGluZy5zZXQoc3RyaW5ncyk7
CisgICAgfQorCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKworICAgIGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRT
ZXR0aW5nKGtleSwgc2V0dGluZyk7CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwor
SlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OndyYXBDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXI6OndyYXAoZXhlYywgYXJncy5hdCgwKSk7Cit9CisKKyNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKKworSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OmN1cnJlbnRDYWxs
RnJhbWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKK3sKKyAgICBKYXZhU2NyaXB0
Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBpbXBsKCktPmN1cnJlbnRDYWxsRnJhbWUoKTsKKyAgICBp
ZiAoIWNhbGxGcmFtZSB8fCAhY2FsbEZyYW1lLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworCisgICAgLy8gRklYTUU6IEkgYW0gbm90IHN1cmUgaWYgdGhpcyBpcyBh
Y3R1YWxseSBuZWVkZWQuIENhbiB3ZSBqdXN0IHVzZSBleGVjPworICAgIEV4ZWNTdGF0ZSogZ2xv
YmFsRXhlYyA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworCisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIHJldHVybiBKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoZ2xvYmFsRXhlYywgdG9KUyhleGVjLCBjYWxsRnJhbWUpKTsK
K30KKworSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OnByb2ZpbGVzKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmKQoreworICAgIEpTTG9jayBsb2NrKGZhbHNlKTsK
KyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXN1bHQ7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxQcm9maWxlPiA+JiBwcm9maWxlcyA9IGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5w
cm9maWxlcygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9maWxlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh0b0pTKGV4ZWMsIHByb2ZpbGVzW2ldLmdldCgp
KSk7CisKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgcmVzdWx0KTsKK30KKworI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjA2YzllOS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRs
aWxlay5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNJbnNwZWN0b3JDb250cm9sbGVy
LmgiCi0KLSNpbmNsdWRlICJDb25zb2xlLmgiCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1
ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSlNEYXRhYmFzZS5oIgotI2VuZGlmCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiSW5z
cGVjdG9yUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkpT
SW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIgotI2luY2x1ZGUgIkpTSW5zcGVjdG9yQ2FsbGJhY2tX
cmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCi0jaW5jbHVkZSAiSlNSYW5nZS5oIgotI2lu
Y2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCi0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0Fy
cmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSNpbmNsdWRlICJKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCi0jaW5j
bHVkZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIKLSNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJh
bWUuaCIKLSNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlLmg+Ci0jaW5jbHVkZSA8cHJvZmlsZXIv
UHJvZmlsZXIuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRET01O
b2RlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQotewotICAgIGlm
IChhcmdzLnNpemUoKSA8IDEpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAg
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBKU1F1YXJhbnRpbmVkT2JqZWN0
V3JhcHBlcjo6YXNXcmFwcGVyKGFyZ3MuYXQoMCkpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKHdyYXBw
ZXItPnVud3JhcHBlZE9iamVjdCgpKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgaW1wbCgpLT5oaWdobGlnaHQobm9kZSk7Ci0KLSAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6Omdl
dFJlc291cmNlRG9jdW1lbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLQotICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0g
YXJncy5hdCgwKS50b1VJbnQzMihleGVjLCBvayk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291
cmNlID0gaW1wbCgpLT5yZXNvdXJjZXMoKS5nZXQoaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKHJl
c291cmNlKTsKLSAgICBpZiAoIXJlc291cmNlKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IHJlc291cmNlLT5mcmFtZSgpOwotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAgaWYgKGRvY3VtZW50LT5pc1Bs
dWdpbkRvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpIHx8IGRvY3VtZW50
LT5pc01lZGlhRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICBFeGVjU3RhdGUqIHJlc291cmNlRXhlYyA9IHRvSlNET01XaW5kb3dTaGVsbChmcmFtZSktPndp
bmRvdygpLT5nbG9iYWxFeGVjKCk7Ci0KLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgcmV0
dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChyZXNvdXJjZUV4ZWMsIHRvSlMocmVz
b3VyY2VFeGVjLCBkb2N1bWVudCkpOwotfQotCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2VhcmNoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IE5vZGUqIG5vZGUgPSB0b05vZGUoYXJncy5hdCgwKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyB0YXJnZXQgPSBhcmdzLmF0KDEp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXN1bHQ7
Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobm9kZSkpOwot
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZG8gewotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwg
dHJ1ZSwgZmFsc2UpKTsKLSAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZWMpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQSBub24tY29sbGFwc2VkIHJlc3VsdCBy
YW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0aWxsIG5vdAotICAgICAg
ICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0NTA5MzI4KS4gQnJlYWsg
dG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0
ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKTsKLSAg
ICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNlYXJjaFJhbmdlLmdl
dCgpLCBET1dOU1RSRUFNKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQodG9KUyhleGVjLCByZXN1bHRSYW5nZS5nZXQoKSkpOwotCi0gICAgICAgIHNldFN0YXJ0
KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7Ci0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0KLSAg
ICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgcmVzdWx0KTsKLX0KLQotI2lmIEVOQUJMRShE
QVRBQkFTRSkKLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpkYXRhYmFzZVRhYmxlTmFt
ZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIGlmIChhcmdz
LnNpemUoKSA8IDEpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
cjo6YXNXcmFwcGVyKGFyZ3MuYXQoMCkpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0b0RhdGFiYXNl
KHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKLSAgICBpZiAoIWRhdGFiYXNlKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJlc3Vs
dDsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMgPSBkYXRhYmFzZS0+dGFibGVOYW1l
cygpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRhYmxlTmFtZXMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChq
c1N0cmluZyhleGVjLCB0YWJsZU5hbWVzW2ldKSk7Ci0KLSAgICByZXR1cm4gY29uc3RydWN0QXJy
YXkoZXhlYywgcmVzdWx0KTsKLX0KLSNlbmRpZgotCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJv
bGxlcjo6aW5zcGVjdGVkV2luZG93KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKQotewotICAg
IEpTRE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGltcGwoKS0+aW5z
cGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKSk7Ci0gICAgcmV0dXJuIEpTSW5zcGVjdGVkT2JqZWN0
V3JhcHBlcjo6d3JhcChpbnNwZWN0ZWRXaW5kb3ctPmdsb2JhbEV4ZWMoKSwgaW5zcGVjdGVkV2lu
ZG93KTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OnNldHRpbmcoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGtleSA9IGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGNvbnN0IEluc3BlY3RvckNvbnRy
b2xsZXI6OlNldHRpbmcmIHNldHRpbmcgPSBpbXBsKCktPnNldHRpbmcoa2V5KTsKLQotICAgIHN3
aXRjaCAoc2V0dGluZy50eXBlKCkpIHsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpOb1R5cGU6Ci0gICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5n
OjpTdHJpbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHNldHRpbmcu
c3RyaW5nKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkRv
dWJsZVR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2V0dGluZy5kb3Vi
bGVWYWx1ZSgpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpJ
bnRlZ2VyVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzZXR0aW5nLmlu
dGVnZXJWYWx1ZSgpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5n
OjpCb29sZWFuVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oc2V0dGluZy5ib29s
ZWFuVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6
U3RyaW5nVmVjdG9yVHlwZTogewotICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgc3Ry
aW5nc0FycmF5OwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MgPSBz
ZXR0aW5nLnN0cmluZ1ZlY3RvcigpOwotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RyaW5ncy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgc3RyaW5nc0FycmF5LmFwcGVuZChqc1N0cmlu
ZyhleGVjLCBzdHJpbmdzW2ldKSk7Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXko
ZXhlYywgc3RyaW5nc0FycmF5KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSlNWYWx1ZSBKU0lu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFNldHRpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQotewotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGtleSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcgc2V0dGluZzsKLQot
ICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDEpOwotICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZCgpIHx8IHZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuIFRoZSBzZXR0
aW5nIGlzIGFscmVhZHkgTm9UeXBlLgotICAgICAgICBBU1NFUlQoc2V0dGluZy50eXBlKCkgPT0g
SW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlKTsKLSAgICB9IGVsc2UgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHNldHRpbmcuc2V0KHZhbHVlLnRvU3RyaW5nKGV4ZWMp
KTsKLSAgICBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICBzZXR0aW5nLnNldCh2
YWx1ZS50b051bWJlcihleGVjKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0g
ICAgICAgIHNldHRpbmcuc2V0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKLSAgICAgICAgaWYgKCFq
c0FycmF5KQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHN0cmluZ3M7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqc0Fy
cmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaXRlbSA9IGpzQXJyYXkt
PmdldChleGVjLCBpKS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAg
ICAgICAgIHN0cmluZ3MuYXBwZW5kKGl0ZW0pOwotICAgICAgICB9Ci0gICAgICAgIHNldHRpbmcu
c2V0KHN0cmluZ3MpOwotICAgIH0KLQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBpbXBsKCktPnNldFNldHRpbmcoa2V5
LCBzZXR0aW5nKTsKLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlIEpT
SW5zcGVjdG9yQ29udHJvbGxlcjo6d3JhcENhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBl
cjo6d3JhcChleGVjLCBhcmdzLmF0KDApKTsKLX0KLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQotCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3VycmVudENhbGxGcmFt
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQotewotICAgIEphdmFTY3JpcHRDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IGltcGwoKS0+Y3VycmVudENhbGxGcmFtZSgpOwotICAgIGlmICgh
Y2FsbEZyYW1lIHx8ICFjYWxsRnJhbWUtPmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICAvLyBGSVhNRTogSSBhbSBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVh
bGx5IG5lZWRlZC4gQ2FuIHdlIGp1c3QgdXNlIGV4ZWM/Ci0gICAgRXhlY1N0YXRlKiBnbG9iYWxF
eGVjID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0KLSAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgcmV0dXJuIEpTSW5zcGVjdGVkT2Jq
ZWN0V3JhcHBlcjo6d3JhcChnbG9iYWxFeGVjLCB0b0pTKGV4ZWMsIGNhbGxGcmFtZSkpOwotfQot
Ci1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYpCi17Ci0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwot
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJlc3VsdDsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PFByb2ZpbGU+ID4mIHByb2ZpbGVzID0gaW1wbCgpLT5wcm9maWxlcygpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcm9maWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCh0b0pTKGV4ZWMsIHByb2ZpbGVzW2ldLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoZXhlYywgcmVzdWx0KTsKLX0KLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAppbmRleCA3ZjYzOTFkLi4wM2U2
ZDU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
LSNpbmNsdWRlICJKU0luc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJKU0luc3BlY3Rv
ckJhY2tlbmQuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKQEAgLTEyMyw3ICsx
MjMsNyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgUwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRp
b24oc2NyaXB0U3RhdGUpOwogfQogCi1ib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yQ29udHJvbGxl
ciogdmFsdWUpCitib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yQmFja2VuZCogdmFsdWUpCiB7CiAg
ICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnB1dERpcmVjdChJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3Jp
cHRTdGF0ZSwgdmFsdWUpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oCmluZGV4IGVkODY2
NTkuLjk3MDIyZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaApAQCAtMzgsNyArMzgs
NyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvUHJvdGVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBjbGFzcyBJbnNwZWN0b3JCYWNr
ZW5kOwogCiAgICAgY2xhc3MgU2NyaXB0T2JqZWN0IDogcHVibGljIFNjcmlwdFZhbHVlIHsKICAg
ICBwdWJsaWM6CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTY3JpcHRHbG9iYWxPYmplY3QgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGJvb2wg
c2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0Jik7
Ci0gICAgICAgIHN0YXRpYyBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUs
IEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2V0KFNjcmlwdFN0
YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yQmFja2VuZCopOwogICAgICAgICBzdGF0
aWMgYm9vbCBnZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBTY3JpcHRPYmplY3Qm
KTsKICAgICAgICAgc3RhdGljIGJvb2wgcmVtb3ZlKFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciog
bmFtZSk7CiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
T2JqZWN0c0luY2x1ZGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0luY2x1ZGUu
aAppbmRleCA4NmU1NzU0Li5kYjE2NDlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTU9iamVjdHNJbmNsdWRlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3Rz
SW5jbHVkZS5oCkBAIC04NCw3ICs4NCw3IEBACiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJJbWFnZURh
dGEuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2Nh
dGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwCmluZGV4IGMyOTQxYzMuLjM1ZTFkNWUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcApAQCAtMTUw
LDcgKzE1MCw3IEBACiAjaW5jbHVkZSAiYmluZGluZ3MvVjhIVE1MVUxpc3RFbGVtZW50LmNwcCIK
ICNpbmNsdWRlICJiaW5kaW5ncy9WOEhUTUxWaWRlb0VsZW1lbnQuY3BwIgogI2luY2x1ZGUgImJp
bmRpbmdzL1Y4SW1hZ2VEYXRhLmNwcCIKLSNpbmNsdWRlICJiaW5kaW5ncy9WOEluc3BlY3RvckNv
bnRyb2xsZXIuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4SW5zcGVjdG9yQmFja2VuZC5jcHAi
CiAjaW5jbHVkZSAiYmluZGluZ3MvVjhLZXlib2FyZEV2ZW50LmNwcCIKICNpbmNsdWRlICJiaW5k
aW5ncy9WOExvY2F0aW9uLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOE1lZGlhRXJyb3IuY3Bw
IgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwCmluZGV4IGMyMjQ2NTEuLjBmNTAwZmIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAKQEAgLTExNiwxMCArMTE2LDEwIEBA
IGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBTCiAgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3MoKTsKIH0K
IAotYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNvbnRyb2xsZXIqIHZhbHVlKQorYm9vbCBTY3Jp
cHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIq
IG5hbWUsIEluc3BlY3RvckJhY2tlbmQqIHZhbHVlKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3Bl
KHNjcmlwdFN0YXRlKTsKLSAgICBzY29wZS5nbG9iYWwoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhu
YW1lKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OklOU1BF
Q1RPUkNPTlRST0xMRVIsIHZhbHVlKSk7CisgICAgc2NvcGUuZ2xvYmFsKCktPlNldCh2ODo6U3Ry
aW5nOjpOZXcobmFtZSksIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCB2YWx1ZSkpOwogICAgIHJldHVybiBzY29wZS5zdWNjZXNz
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0Lmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5oCmluZGV4IGU1NjE4YWIuLjJkMGFk
YzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuaApAQCAtMzYsNyArMzYsNyBAQAogI2lu
Y2x1ZGUgPHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnNwZWN0b3JD
b250cm9sbGVyOworICAgIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CiAgICAgY2xhc3MgU2NyaXB0
U3RhdGU7CiAKICAgICBjbGFzcyBTY3JpcHRPYmplY3QgOiBwdWJsaWMgU2NyaXB0VmFsdWUgewpA
QCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0R2xv
YmFsT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBib29sIHNldChTY3JpcHRT
dGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYpOwotICAgICAgICBz
dGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JD
b250cm9sbGVyKik7CisgICAgICAgIHN0YXRpYyBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0
IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQqKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgU2NyaXB0T2JqZWN0Jik7CiAgICAgICAg
IHN0YXRpYyBib29sIHJlbW92ZShTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUpOwogICAg
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAppbmRleCBhZmE4MWNiLi44NjY2ZDQwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhJbmRleC5jcHAKQEAgLTEzOSw3ICsxMzksNyBAQAogI2luY2x1ZGUgIlY4
SFRNTFRpdGxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlY4SFRNTFVMaXN0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlY4SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiVjhJbnNwZWN0b3JDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiVjhJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiVjhNZWRpYUxpc3Qu
aCIKICNpbmNsdWRlICJWOE1lc3NhZ2VDaGFubmVsLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlRXZl
bnQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKaW5kZXggNTdmNDQ2MC4uZmY3YTVhZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEluZGV4LmgKQEAgLTMzMyw3ICszMzMsNyBAQCB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiAoKkZ1bmN0aW9uVGVtcGxhdGVGYWN0b3J5KSgpOwogICAgIFYo
SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBIVE1MT3B0aW9uc0NvbGxlY3Rpb24pICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIFYoSU1BR0VEQVRBLCBJbWFnZURhdGEpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoQ0FOVkFTUElYRUxBUlJBWSwgQ2Fu
dmFzUGl4ZWxBcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFYoSU5T
UEVDVE9SQ09OVFJPTExFUiwgSW5zcGVjdG9yQ29udHJvbGxlcikgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIFYoSU5TUEVDVE9SQkFDS0VORCwgSW5zcGVjdG9yQmFja2VuZCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoS0VZQk9BUkRFVkVOVCwgS2V5Ym9hcmRF
dmVudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFYoTE9DQVRJ
T04sIExvY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIFYoTUVESUFMSVNULCBNZWRpYUxpc3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCmluZGV4IGZkOGZmMTQuLmQxYjJmYTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCkBAIC0zODMsMjMgKzM4
MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soVHJl
ZVdhbGtlck5leHRTaWJsaW5nKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhUcmVlV2Fsa2Vy
UHJldmlvdXNTaWJsaW5nKTsKIAotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNv
bnRyb2xsZXJQcm9maWxlcyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29u
dHJvbGxlckhpZ2hsaWdodERPTU5vZGUpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3Bl
Y3RvckNvbnRyb2xsZXJBZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUpOwotICAgICAgICBERUNMQVJF
X0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJHZXRSZXNvdXJjZURvY3VtZW50Tm9kZSk7Ci0g
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxlckFkZFNvdXJjZVRvRnJh
bWUpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJTZWFyY2gp
OwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJTZXR0aW5nKTsK
LSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVySW5zcGVjdGVkV2lu
ZG93KTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVyU2V0U2V0
dGluZyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxlckN1cnJl
bnRDYWxsRnJhbWUpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xs
ZXJEZWJ1Z2dlckVuYWJsZWQpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNv
bnRyb2xsZXJQYXVzZU9uRXhjZXB0aW9ucyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5z
cGVjdG9yQ29udHJvbGxlclByb2ZpbGVyRW5hYmxlZCk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soSW5zcGVjdG9yQmFja2VuZFByb2ZpbGVzKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJ
bnNwZWN0b3JCYWNrZW5kSGlnaGxpZ2h0RE9NTm9kZSk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soSW5zcGVjdG9yQmFja2VuZEFkZFJlc291cmNlU291cmNlVG9GcmFtZSk7CisgICAgICAgIERF
Q0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZEFkZFNvdXJjZVRvRnJhbWUpOworICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRTZWFyY2gpOworICAgICAgICBERUNM
QVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRTZXR0aW5nKTsKKyAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kSW5zcGVjdGVkV2luZG93KTsKKyAgICAgICAgREVDTEFS
RV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kU2V0U2V0dGluZyk7CisgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZEN1cnJlbnRDYWxsRnJhbWUpOworICAgICAgICBERUNM
QVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmREZWJ1Z2dlckVuYWJsZWQpOworICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQYXVzZU9uRXhjZXB0aW9ucyk7CisgICAg
ICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZFByb2ZpbGVyRW5hYmxlZCk7CiAj
aWYgRU5BQkxFKERBVEFCQVNFKQotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNv
bnRyb2xsZXJEYXRhYmFzZVRhYmxlTmFtZXMpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKElu
c3BlY3RvckJhY2tlbmREYXRhYmFzZVRhYmxlTmFtZXMpOwogI2VuZGlmCi0gICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxlcldyYXBDYWxsYmFjayk7CisgICAgICAgIERF
Q0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZFdyYXBDYWxsYmFjayk7CiAKICAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhOb2RlSXRlcmF0b3JOZXh0Tm9kZSk7CiAgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soTm9kZUl0ZXJhdG9yUHJldmlvdXNOb2RlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzMyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCkBA
IC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yQmFja2VuZC5oIgorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVz
b3VyY2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk5vZGUuaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKworI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHku
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9y
QmFja2VuZEhpZ2hsaWdodERPTU5vZGUpCit7CisgICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNr
ZW5kLmhpZ2hsaWdodERPTU5vZGUoKSIpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgTm9kZSogbm9kZSA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4
Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgaW5zcGVj
dG9yQmFja2VuZC0+aGlnaGxpZ2h0KG5vZGUpOworCisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmRTZWFyY2gpCit7Cisg
ICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLnNlYXJjaCgpIik7CisKKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8IDIpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBO
b2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0gdG9X
ZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKTsKKyAgICBpZiAodGFyZ2V0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIHY4OjpMb2NhbDx2
ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6TmV3KCk7CisgICAgUmVmUHRyPFJhbmdlPiBz
ZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobm9kZSkpOworCisgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaW50IGluZGV4ID0gMDsKKyAgICBkbyB7CisgICAgICAgIFJlZlB0cjxSYW5n
ZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0
cnVlLCBmYWxzZSkpOworICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChlYykpCisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJh
bmdlIGNhbiBpbiBzb21lIGZ1bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90CisgICAgICAg
IC8vIGFkdmFuY2UgdGhlIHJhbmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0
byBhdm9pZCBpbmZpbml0ZSBsb29wLgorICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQg
PSBlbmRWaXNpYmxlUG9zaXRpb24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworICAg
ICAgICBpZiAobmV3U3RhcnQgPT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0
KCksIERPV05TVFJFQU0pKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmVzdWx0LT5T
ZXQodjg6Ok51bWJlcjo6TmV3KGluZGV4KyspLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0PFJhbmdlPihWOENsYXNzSW5kZXg6OlJBTkdFLCByZXN1bHRSYW5nZS5nZXQoKSkpOworCisg
ICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7CisgICAgfSB3aGls
ZSAodHJ1ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKERBVEFCQVNF
KQorQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmREYXRhYmFzZVRhYmxlTmFtZXMp
Cit7CisgICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLmRhdGFiYXNlVGFibGVOYW1lcygp
Iik7CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcoMCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitDQUxMQkFDS19GVU5DX0RFQ0woSW5z
cGVjdG9yQmFja2VuZEluc3BlY3RlZFdpbmRvdykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3Rv
ckJhY2tlbmQuaW5zcGVjdGVkV2luZG93KCkiKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGlu
c3BlY3RvckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNw
ZWN0b3JCYWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVy
KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0PERPTVdpbmRv
dz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluc3BlY3RvckJhY2tlbmQtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCkpOwor
fQorCitDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2VuZFNldHRpbmcpCit7CisgICAg
SU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLnNldHRpbmcoKSIpOworCisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3Ry
aW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7CisgICAgaWYg
KGtleS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBJ
bnNwZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JC
QUNLRU5ELCBhcmdzLkhvbGRlcigpKTsKKyAgICBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpT
ZXR0aW5nJiBzZXR0aW5nID0gaW5zcGVjdG9yQmFja2VuZC0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zZXR0aW5nKGtleSk7CisKKyAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9U
eXBlOgorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJ
bnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAgICAgICAgcmV0
dXJuIHY4U3RyaW5nKHNldHRpbmcuc3RyaW5nKCkpOworICAgICAgICBjYXNlIEluc3BlY3RvckNv
bnRyb2xsZXI6OlNldHRpbmc6OkRvdWJsZVR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6Ok51
bWJlcjo6TmV3KHNldHRpbmcuZG91YmxlVmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5zcGVjdG9y
Q29udHJvbGxlcjo6U2V0dGluZzo6SW50ZWdlclR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6
Ok51bWJlcjo6TmV3KHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgorICAgICAgICAgICAgcmV0dXJu
IHY4Qm9vbGVhbihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7CisgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3RyaW5nVmVjdG9yKCk7Cisg
ICAgICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBzdHJpbmdzQXJyYXkgPSB2ODo6QXJyYXk6
Ok5ldyhzdHJpbmdzLnNpemUoKSk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGgg
PSBzdHJpbmdzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXktPlNldCh2ODo6TnVtYmVy
OjpOZXcoaSksIHY4U3RyaW5nKHN0cmluZ3NbaV0pKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJp
bmdzQXJyYXk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNw
ZWN0b3JCYWNrZW5kU2V0U2V0dGluZykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2V0U2V0dGluZygpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7CisgICAgaWYgKGtleS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0
aW5nIHNldHRpbmc7CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3NbMV07
CisgICAgaWYgKHZhbHVlLT5Jc1VuZGVmaW5lZCgpIHx8IHZhbHVlLT5Jc051bGwoKSkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KKyAgICAg
ICAgQVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
Ok5vVHlwZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgc2V0
dGluZy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSkpOworICAgIGVsc2Ug
aWYgKHZhbHVlLT5Jc051bWJlcigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVy
VmFsdWUoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICBzZXR0
aW5nLnNldCh2YWx1ZS0+Qm9vbGVhblZhbHVlKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0Fy
cmF5KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2Nh
bDx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5n
czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpdGVtID0gdG9XZWJDb3JlU3RyaW5nKHY4QXJyYXkt
PkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKSk7CisgICAgICAgICAgICBpZiAoaXRlbS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IHN0cmluZ3MuYXBwZW5kKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIHNldHRpbmcuc2V0KHN0
cmluZ3MpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVD
VE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgaW5zcGVjdG9yQmFja2VuZC0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKGtleSwgc2V0dGluZyk7CisKKyAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2Vu
ZFdyYXBDYWxsYmFjaykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQud3JhcENh
bGxiYWNrKCkiKTsKKyAgICByZXR1cm4gYXJnc1swXTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JD
b250cm9sbGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVj
dG9yQ29udHJvbGxlckN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2
NTdjMmMuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0
b3JDb250cm9sbGVyQ3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgot
Ci0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JSZXNvdXJjZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
Tm9kZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgotCi0jaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCi0jaW5jbHVkZSAi
VjhQcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJ
bnNwZWN0b3JDb250cm9sbGVySGlnaGxpZ2h0RE9NTm9kZSkKLXsKLSAgICBJTkNfU1RBVFMoIklu
c3BlY3RvckNvbnRyb2xsZXIuaGlnaGxpZ2h0RE9NTm9kZSgpIik7Ci0KLSAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBOb2Rl
KiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKLSAgICBpZiAoIW5vZGUpCi0gICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JDT05UUk9MTEVSLCBh
cmdzLkhvbGRlcigpKTsKLSAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7
Ci0KLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi1DQUxMQkFDS19GVU5DX0RFQ0wo
SW5zcGVjdG9yQ29udHJvbGxlckdldFJlc291cmNlRG9jdW1lbnROb2RlKQotewotICAgIElOQ19T
VEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5nZXRSZXNvdXJjZURvY3VtZW50Tm9kZSgpIik7Ci0K
LSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci0KLSAgICBpZiAoIWFyZ3NbMV0tPklzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Ci0KLSAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gYXJnc1sxXS0+SW50MzJW
YWx1ZSgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+
KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0gICAg
UmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IGluc3BlY3RvckNvbnRyb2xsZXIt
PnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwotICAg
IGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBG
cmFtZSogZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUoKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgIGlmIChkb2N1bWVudC0+aXNQbHVnaW5Eb2N1bWVu
dCgpIHx8IGRvY3VtZW50LT5pc0ltYWdlRG9jdW1lbnQoKSB8fCBkb2N1bWVudC0+aXNNZWRpYURv
Y3VtZW50KCkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPQ1VNRU5ULCBk
b2N1bWVudCk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVyU2Vh
cmNoKQotewotICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5zZWFyY2goKSIpOwot
Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5n
IHRhcmdldCA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSk7Ci0gICAgaWYg
KHRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAg
ICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldygpOwotICAgIFJl
ZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG5vZGUpKTsKLQotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgZG8gewotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0
KCksIHRhcmdldCwgdHJ1ZSwgZmFsc2UpKTsKLSAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xs
YXBzZWQoZWMpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gQSBub24tY29sbGFw
c2VkIHJlc3VsdCByYW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0aWxs
IG5vdAotICAgICAgICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0NTA5
MzI4KS4gQnJlYWsgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG5ld1N0YXJ0ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dO
U1RSRUFNKTsKLSAgICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNl
YXJjaFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIHJlc3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdDxSYW5nZT4oVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVzdWx0UmFuZ2Uu
Z2V0KCkpKTsKLQotICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQp
OwotICAgIH0gd2hpbGUgKHRydWUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmIEVO
QUJMRShEQVRBQkFTRSkKLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVyRGF0
YWJhc2VUYWJsZU5hbWVzKQotewotICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5k
YXRhYmFzZVRhYmxlTmFtZXMoKSIpOwotICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9
IHY4OjpBcnJheTo6TmV3KDApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotQ0FM
TEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJJbnNwZWN0ZWRXaW5kb3cpCi17Ci0g
ICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpIik7Ci0K
LSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0lu
ZGV4OjpJTlNQRUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKLSAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBpbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgp
LT5kb21XaW5kb3coKSk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9s
bGVyU2V0dGluZykKLXsKLSAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNvbnRyb2xsZXIuc2V0dGlu
ZygpIik7Ci0KLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCi0gICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxD
aGVjayhhcmdzWzBdKTsKLSAgICBpZiAoa2V5LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JDb250
cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkp
OwotICAgIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmIHNldHRpbmcgPSBpbnNw
ZWN0b3JDb250cm9sbGVyIC0+c2V0dGluZyhrZXkpOwotCi0gICAgc3dpdGNoIChzZXR0aW5nLnR5
cGUoKSkgewotICAgICAgICBkZWZhdWx0OgotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xs
ZXI6OlNldHRpbmc6Ok5vVHlwZToKLSAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6U3RyaW5nVHlwZToK
LSAgICAgICAgICAgIHJldHVybiB2OFN0cmluZyhzZXR0aW5nLnN0cmluZygpKTsKLSAgICAgICAg
Y2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpEb3VibGVUeXBlOgotICAgICAgICAg
ICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhzZXR0aW5nLmRvdWJsZVZhbHVlKCkpOwotICAgICAg
ICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkludGVnZXJUeXBlOgotICAgICAg
ICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhzZXR0aW5nLmludGVnZXJWYWx1ZSgpKTsKLSAg
ICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpCb29sZWFuVHlwZToKLSAg
ICAgICAgICAgIHJldHVybiB2OEJvb2xlYW4oc2V0dGluZy5ib29sZWFuVmFsdWUoKSk7Ci0gICAg
ICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6U3RyaW5nVmVjdG9yVHlwZTog
ewotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MgPSBzZXR0aW5nLnN0
cmluZ1ZlY3RvcigpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gc3RyaW5nc0Fy
cmF5ID0gdjg6OkFycmF5OjpOZXcoc3RyaW5ncy5zaXplKCkpOwotICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgbGVuZ3RoID0gc3RyaW5ncy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgc3RyaW5nc0FycmF5
LT5TZXQodjg6Ok51bWJlcjo6TmV3KGkpLCB2OFN0cmluZyhzdHJpbmdzW2ldKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RyaW5nc0FycmF5OwotICAgICAgICB9Ci0gICAgfQotfQotCi1DQUxMQkFD
S19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlclNldFNldHRpbmcpCi17Ci0gICAgSU5DX1NU
QVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLnNldFNldHRpbmcoKSIpOwotICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMikKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFN0cmlu
ZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwotICAgIGlmIChr
ZXkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgSW5z
cGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyBzZXR0aW5nOwotCi0gICAgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gdmFsdWUgPSBhcmdzWzFdOwotICAgIGlmICh2YWx1ZS0+SXNVbmRlZmluZWQoKSB8fCB2
YWx1ZS0+SXNOdWxsKCkpIHsKLSAgICAgICAgLy8gRG8gbm90aGluZy4gVGhlIHNldHRpbmcgaXMg
YWxyZWFkeSBOb1R5cGUuCi0gICAgICAgIEFTU0VSVChzZXR0aW5nLnR5cGUoKSA9PSBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nOjpOb1R5cGUpOwotICAgIH0gZWxzZSBpZiAodmFsdWUtPklz
U3RyaW5nKCkpCi0gICAgICAgIHNldHRpbmcuc2V0KHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hl
Y2sodmFsdWUpKTsKLSAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdW1iZXIoKSkKLSAgICAgICAgc2V0
dGluZy5zZXQodmFsdWUtPk51bWJlclZhbHVlKCkpOwotICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0Jv
b2xlYW4oKSkKLSAgICAgICAgc2V0dGluZy5zZXQodmFsdWUtPkJvb2xlYW5WYWx1ZSgpKTsKLSAg
ICBlbHNlIGlmICh2YWx1ZS0+SXNBcnJheSgpKSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6QXJy
YXk+IHY4QXJyYXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdCh2YWx1ZSk7Ci0gICAgICAg
IFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2OEFycmF5LT5MZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaXRlbSA9IHRv
V2ViQ29yZVN0cmluZyh2OEFycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSkpOwotICAgICAg
ICAgICAgaWYgKGl0ZW0uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Ci0gICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChpdGVtKTsKLSAgICAgICAgfQot
ICAgICAgICBzZXR0aW5nLnNldChzdHJpbmdzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JD
b250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVy
KCkpOwotICAgIGluc3BlY3RvckNvbnRyb2xsZXItPnNldFNldHRpbmcoa2V5LCBzZXR0aW5nKTsK
LQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJ
bnNwZWN0b3JDb250cm9sbGVyV3JhcENhbGxiYWNrKQotewotICAgIElOQ19TVEFUUygiSW5zcGVj
dG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2soKSIpOwotICAgIHJldHVybiBhcmdzWzBdOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTgxMzYKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Vi
a2l0QG1hdHRsaWxlay5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCisKKyNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCisj
aW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
I2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQmFja2VuZDo6SW5zcGVjdG9yQmFj
a2VuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JD
bGllbnQqIGNsaWVudCkKKyAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250
cm9sbGVyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitJbnNwZWN0b3JCYWNrZW5k
Ojp+SW5zcGVjdG9yQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6aGlk
ZURPTU5vZGVIaWdobGlnaHQoKQoreworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGlkZUhp
Z2hsaWdodCgpOworfQorCitTdHJpbmcgSW5zcGVjdG9yQmFja2VuZDo6bG9jYWxpemVkU3RyaW5n
c1VSTCgpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5sb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9
CisKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kOjpoaWRkZW5QYW5lbHMoKQoreworICAgIHJldHVy
biBtX2NsaWVudC0+aGlkZGVuUGFuZWxzKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
d2luZG93VW5sb2FkaW5nKCkKK3sKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlKCk7
Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6aXNXaW5kb3dWaXNpYmxlKCkKK3sKKyAgICBy
ZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQmFja2VuZDo6YWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmll
ciwgTm9kZSogZnJhbWUpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJj
ZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOwor
ICAgIGlmIChyZXNvdXJjZSkgeworICAgICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gcmVzb3Vy
Y2UtPnNvdXJjZVN0cmluZygpOworICAgICAgICBpZiAoIXNvdXJjZVN0cmluZy5pc0VtcHR5KCkp
CisgICAgICAgICAgICBhZGRTb3VyY2VUb0ZyYW1lKHJlc291cmNlLT5taW1lVHlwZSgpLCBzb3Vy
Y2VTdHJpbmcsIGZyYW1lKTsKKyAgICB9Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6YWRk
U291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgTm9kZSogZnJhbWVOb2RlKQoreworICAgIEFTU0VSVF9BUkcoZnJhbWVOb2RlLCBmcmFtZU5v
ZGUpOworCisgICAgaWYgKCFmcmFtZU5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZnJhbWVOb2RlLT5hdHRhY2hlZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKGZyYW1lTm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICBpZiAoIWZyYW1lTm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KGZyYW1lTm9kZSk7CisgICAgQVNTRVJUKGVsZW1lbnQtPmlzRnJhbWVP
d25lckVsZW1lbnQoKSk7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJh
bWVPd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOwor
ICAgIEFTU0VSVChmcmFtZU93bmVyLT5jb250ZW50RnJhbWUoKSk7CisgICAgaWYgKCFmcmFtZU93
bmVyLT5jb250ZW50RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRnJhbWVM
b2FkZXIqIGxvYWRlciA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpLT5sb2FkZXIoKTsKKwor
ICAgIGxvYWRlci0+c2V0UmVzcG9uc2VNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgbG9hZGVyLT5i
ZWdpbigpOworICAgIGxvYWRlci0+d3JpdGUoc291cmNlKTsKKyAgICBsb2FkZXItPmVuZCgpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Y2xlYXJNZXNz
YWdlcygpCit7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jbGVhckNvbnNvbGVNZXNzYWdl
cygpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnRvZ2dsZU5vZGVTZWFyY2goKQorewor
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+dG9nZ2xlU2VhcmNoRm9yTm9kZUluUGFnZSgpOwor
fQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmF0dGFjaCgpCit7CisgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5hdHRhY2hXaW5kb3coKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpk
ZXRhY2goKQoreworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGV0YWNoV2luZG93KCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQgaGVpZ2h0KQoreworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQoaGVpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdG9yZUxhc3RB
Y3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSkKK3sKKyAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnN0b3JlTGFzdEFjdGl2ZVBhbmVsKHBhbmVsTmFtZSk7Cit9CisKK2Jvb2wgSW5z
cGVjdG9yQmFja2VuZDo6c2VhcmNoaW5nRm9yTm9kZSgpCit7CisgICAgcmV0dXJuIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpOworfQorCit2b2lkIEluc3Bl
Y3RvckJhY2tlbmQ6OmxvYWRlZCgpCit7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zY3Jp
cHRPYmplY3RSZWFkeSgpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZVJlc291
cmNlVHJhY2tpbmcoYm9vbCBhbHdheXMpCit7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5l
bmFibGVSZXNvdXJjZVRyYWNraW5nKGFsd2F5cyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoYm9vbCBhbHdheXMpCit7CisgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kaXNhYmxlUmVzb3VyY2VUcmFja2luZyhhbHdheXMpOworfQorCitib29s
IEluc3BlY3RvckJhY2tlbmQ6OnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgp
OworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9h
dCB5KSBjb25zdAoreworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bW92ZVdpbmRvd0J5KHgs
IHkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNsb3NlV2luZG93KCkKK3sKKyAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlV2luZG93KCk7Cit9CisKK2NvbnN0IFN0cmluZyYg
SW5zcGVjdG9yQmFja2VuZDo6cGxhdGZvcm0oKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykK
KyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RyaW5nLCBwbGF0Zm9ybSwgKCJtYWMtdGlnZXIiKSk7CisjZWxzZQorICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJtYWMtbGVvcGFyZCIpKTsKKyNlbmRp
ZgorI2VsaWYgUExBVEZPUk0oV0lOX09TKQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RyaW5nLCBwbGF0Zm9ybSwgKCJ3aW5kb3dzIikpOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInF0IikpOworI2Vs
aWYgUExBVEZPUk0oR1RLKQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBw
bGF0Zm9ybSwgKCJndGsiKSk7CisjZWxpZiBQTEFURk9STShXWCkKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgid3giKSk7CisjZWxzZQorICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJ1bmtub3duIikpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gcGxhdGZvcm07Cit9CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKK2NvbnN0IFByb2ZpbGVzQXJyYXkmIEluc3BlY3RvckJhY2tlbmQ6OnByb2ZpbGVz
KCkgY29uc3QKK3sgICAgCisgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cHJvZmls
ZXMoKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGFydFByb2ZpbGluZygpCit7Cisg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsK
K30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdG9wUHJvZmlsaW5nKCkKK3sKKyAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQmFja2VuZDo6ZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCit7CisgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVQcm9maWxlcihhbHdheXMpOworfQorCit2b2lk
IEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cykKK3sKKyAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVQcm9maWxlcihhbHdheXMpOworfQorCitib29s
IEluc3BlY3RvckJhY2tlbmQ6OnByb2ZpbGVyRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+cHJvZmlsZXJFbmFibGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCit7CisgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5lbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChhbHdheXMpOworfQorCit2b2lk
IEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cykKK3sKKyAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVEZWJ1Z2dlcihhbHdheXMpOworfQorCitib29s
IEluc3BlY3RvckJhY2tlbmQ6OmRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJFbmFibGVkKCk7Cit9CisKK0phdmFTY3Jp
cHRDYWxsRnJhbWUqIEluc3BlY3RvckJhY2tlbmQ6OmN1cnJlbnRDYWxsRnJhbWUoKSBjb25zdAor
eworICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxs
RnJhbWUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjphZGRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCit7CisgICAgaW50cHRyX3Qg
c291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7CisgICAgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5hZGRCcmVha3BvaW50KHNvdXJjZUlEVmFsdWUsIGxpbmVOdW1iZXIp
OworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKK3sKKyAgICBpbnRwdHJfdCBzb3Vy
Y2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKKyAgICBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwgbGluZU51bWJlcik7
Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6cGF1c2VPbkV4Y2VwdGlvbnMoKQoreworICAg
IHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnBhdXNlT25FeGNlcHRpb25z
KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnMoYm9v
bCBwYXVzZSkKK3sKKyAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldFBhdXNl
T25FeGNlcHRpb25zKHBhdXNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpwYXVzZUlu
RGVidWdnZXIoKQoreworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VQ
cm9ncmFtKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cmVzdW1lRGVidWdnZXIoKQor
eworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVzdW1lRGVidWdnZXIoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKQoreworICAg
IEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE92ZXJTdGF0ZW1lbnQoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIoKQor
eworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcEludG9TdGF0ZW1lbnQo
KTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdn
ZXIoKQoreworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE91dE9mRnVu
Y3Rpb24oKTsKK30KKworI2VuZGlmCisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6aGlnaGxpZ2h0
KE5vZGUqIG5vZGUpCit7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9k
ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzljYTc4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0w
LDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckJhY2tlbmRfaAorI2RlZmluZSBJbnNw
ZWN0b3JCYWNrZW5kX2gKKworI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVk
UmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBKYXZhU2NyaXB0Q2FsbEZy
YW1lOworY2xhc3MgTm9kZTsKKworY2xhc3MgSW5zcGVjdG9yQmFja2VuZCA6IHB1YmxpYyBSZWZD
b3VudGVkPEluc3BlY3RvckJhY2tlbmQ+Cit7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYWNrZW5kKGluc3BlY3RvckNvbnRyb2xsZXIsIGNs
aWVudCkpOworICAgIH0KKworICAgIH5JbnNwZWN0b3JCYWNrZW5kKCk7CisKKyAgICBJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JD
b250cm9sbGVyOyB9CisKKyAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CisKKyAgICBT
dHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOworICAgIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsK
KworICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7CisKKyAgICBib29sIGlzV2luZG93VmlzaWJs
ZSgpOworCisgICAgdm9pZCBhZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUobG9uZyBpZGVudGlmaWVy
LCBOb2RlKiBmcmFtZSk7CisgICAgYm9vbCBhZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZSk7CisKKyAgICB2b2lk
IGNsZWFyTWVzc2FnZXMoKTsKKworICAgIHZvaWQgdG9nZ2xlTm9kZVNlYXJjaCgpOworCisgICAg
dm9pZCBhdHRhY2goKTsKKyAgICB2b2lkIGRldGFjaCgpOworCisgICAgdm9pZCBzZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworCisgICAgdm9pZCBzdG9yZUxhc3RBY3Rp
dmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSk7CisKKyAgICBib29sIHNlYXJjaGluZ0Zv
ck5vZGUoKTsKKworICAgIHZvaWQgbG9hZGVkKCk7CisKKyAgICB2b2lkIGVuYWJsZVJlc291cmNl
VHJhY2tpbmcoYm9vbCBhbHdheXMpOworICAgIHZvaWQgZGlzYWJsZVJlc291cmNlVHJhY2tpbmco
Ym9vbCBhbHdheXMpOworICAgIGJvb2wgcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKSBjb25zdDsK
KworICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0OworICAgIHZv
aWQgY2xvc2VXaW5kb3coKTsKKworICAgIGNvbnN0IFN0cmluZyYgcGxhdGZvcm0oKSBjb25zdDsK
KworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGNvbnN0IFByb2ZpbGVzQXJy
YXkmIHByb2ZpbGVzKCkgY29uc3Q7CisKKyAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCk7CisgICAg
dm9pZCBzdG9wUHJvZmlsaW5nKCk7CisKKyAgICB2b2lkIGVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3
YXlzKTsKKyAgICB2b2lkIGRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cyk7CisgICAgYm9vbCBw
cm9maWxlckVuYWJsZWQoKTsKKworICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMp
OworICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKTsKKyAgICBib29sIGRlYnVn
Z2VyRW5hYmxlZCgpIGNvbnN0OworCisgICAgSmF2YVNjcmlwdENhbGxGcmFtZSogY3VycmVudENh
bGxGcmFtZSgpIGNvbnN0OworCisgICAgdm9pZCBhZGRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOworICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKworICAgIGJv
b2wgcGF1c2VPbkV4Y2VwdGlvbnMoKTsKKyAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zKGJv
b2wgcGF1c2UpOworCisgICAgdm9pZCBwYXVzZUluRGVidWdnZXIoKTsKKyAgICB2b2lkIHJlc3Vt
ZURlYnVnZ2VyKCk7CisKKyAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwor
ICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7CisgICAgdm9pZCBzdGVwT3V0
T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKKyNlbmRpZgorCisgICAgLy8gR2VuZXJpYyBjb2RlIGNh
bGxlZCBmcm9tIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMuCisgICAgdm9pZCBoaWdobGlnaHQoTm9k
ZSogbm9kZSk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCk7CisK
KyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgSW5z
cGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmRfaCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFl
NmQ5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBN
YXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBjb3JlIHsKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yCisgICAgXSBJbnNwZWN0b3JCYWNrZW5kIHsK
KyAgICAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworICAgICAgICBbQ3VzdG9tXSB2
b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4gTm9kZSBub2RlKTsKKyAgICAgICAgdm9pZCBsb2FkZWQo
KTsKKyAgICAgICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBhdHRhY2go
KTsKKyAgICAgICAgdm9pZCBkZXRhY2goKTsKKworICAgICAgICB2b2lkIGNsb3NlV2luZG93KCk7
CisgICAgICAgIHZvaWQgY2xlYXJNZXNzYWdlcygpOworICAgICAgICB2b2lkIHRvZ2dsZU5vZGVT
ZWFyY2goKTsKKworICAgICAgICBib29sZWFuIGlzV2luZG93VmlzaWJsZSgpOworICAgICAgICBi
b29sZWFuIHNlYXJjaGluZ0Zvck5vZGUoKTsKKworICAgICAgICB2b2lkIGFkZFJlc291cmNlU291
cmNlVG9GcmFtZShpbiBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBi
b29sZWFuIGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJp
bmcgc291cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHNl
YXJjaChpbiBOb2RlIG5vZGUsIGluIERPTVN0cmluZyBxdWVyeSk7CisjaWYgZGVmaW5lZChFTkFC
TEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBbQ3VzdG9tXSBET01PYmpl
Y3QgZGF0YWJhc2VUYWJsZU5hbWVzKGluIERhdGFiYXNlIGRhdGFiYXNlKTsKKyNlbmRpZgorICAg
ICAgICBbQ3VzdG9tXSBET01PYmplY3Qgc2V0dGluZyhpbiBET01TdHJpbmcga2V5KTsKKyAgICAg
ICAgW0N1c3RvbV0gdm9pZCBzZXRTZXR0aW5nKGluIERPTVN0cmluZyBrZXksIGluIERPTU9iamVj
dCAgdmFsdWUpOworICAgICAgICBbQ3VzdG9tXSBET01XaW5kb3cgaW5zcGVjdGVkV2luZG93KCk7
CisgICAgICAgIERPTVN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CisgICAgICAgIERPTVN0
cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAgICAgRE9NU3RyaW5nIHBsYXRmb3JtKCk7CisgICAg
ICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPW1vdmVXaW5kb3dCeV0gdm9pZCBtb3ZlQnlVbnJl
c3RyaWN0ZWQoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAgICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQoaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICBbQ3VzdG9t
XSBET01PYmplY3Qgd3JhcENhbGxiYWNrKGluIERPTU9iamVjdCBjYWxsYmFjayk7CisgICAgICAg
IGJvb2xlYW4gcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBlbmFibGVS
ZXNvdXJjZVRyYWNraW5nKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAgICAgdm9pZCBkaXNhYmxl
UmVzb3VyY2VUcmFja2luZyhpbiBib29sZWFuIGFsd2F5cyk7CisgICAgICAgIHZvaWQgc3RvcmVM
YXN0QWN0aXZlUGFuZWwoaW4gRE9NU3RyaW5nIHBhbmVsTmFtZSk7CisKKyNpZiBkZWZpbmVkKEVO
QUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgor
ICAgICAgICBib29sZWFuIGRlYnVnZ2VyRW5hYmxlZCgpOworICAgICAgICB2b2lkIGVuYWJsZURl
YnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIo
aW4gYm9vbGVhbiBhbHdheXMpOworCisgICAgICAgIHZvaWQgYWRkQnJlYWtwb2ludChpbiBET01T
dHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7CisgICAgICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxv
bmcgbGluZU51bWJlcik7CisKKyAgICAgICAgdm9pZCBwYXVzZUluRGVidWdnZXIoKTsKKyAgICAg
ICAgdm9pZCByZXN1bWVEZWJ1Z2dlcigpOworCisgICAgICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1l
bnRJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2Vy
KCk7CisgICAgICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyKCk7CisKKyAgICAg
ICAgW0N1c3RvbV0gRE9NT2JqZWN0IGN1cnJlbnRDYWxsRnJhbWUoKTsKKworICAgICAgICBib29s
ZWFuIHBhdXNlT25FeGNlcHRpb25zKCk7CisgICAgICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlv
bnMoaW4gYm9vbGVhbiBwYXVzZU9uRXhjZXB0aW9ucyk7CisKKyAgICAgICAgYm9vbGVhbiBwcm9m
aWxlckVuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBlbmFibGVQcm9maWxlcihpbiBib29sZWFuIGFs
d2F5cyk7CisgICAgICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGluIGJvb2xlYW4gYWx3YXlzKTsK
KworICAgICAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAgIHZvaWQgc3RvcFByb2Zp
bGluZygpOworCisgICAgICAgIFtDdXN0b21dIEFycmF5IHByb2ZpbGVzKCk7CisjZW5kaWYKKyAg
ICAgfTsKKyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4
IGM1MzFlZDYuLjY1Y2VjMzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKQEAgLTEwNiw2NSArMTA3LDYgQEAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIHN0YXRpYyBjb25zdCBmbG9h
dCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKIAotYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCi17Ci0gICAgQVNTRVJUX0FSRyhmcmFtZU5vZGUs
IGZyYW1lTm9kZSk7Ci0KLSAgICBpZiAoIWZyYW1lTm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFmcmFtZU5vZGUtPmF0dGFjaGVkKCkpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
ZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIGlmICghZnJhbWVOb2RlLT5pc0VsZW1l
bnROb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWVOb2RlKTsKLSAgICBBU1NFUlQoZWxlbWVudC0+
aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVs
ZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxl
bWVudCk7Ci0gICAgQVNTRVJUKGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKTsKLSAgICBpZiAo
IWZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCktPmxvYWRl
cigpOwotCi0gICAgbG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBs
b2FkZXItPmJlZ2luKCk7Ci0gICAgbG9hZGVyLT53cml0ZShzb3VyY2UpOwotICAgIGxvYWRlci0+
ZW5kKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgU3RyaW5nJiBJbnNwZWN0b3JD
b250cm9sbGVyOjpwbGF0Zm9ybSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oTUFDKQotI2lmZGVm
IEJVSUxESU5HX09OX1RJR0VSCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHBsYXRmb3JtLCAoIm1hYy10aWdlciIpKTsKLSNlbHNlCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy1sZW9wYXJkIikpOwotI2VuZGlmCi0jZWxp
ZiBQTEFURk9STShXSU5fT1MpCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHBsYXRmb3JtLCAoIndpbmRvd3MiKSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgicXQiKSk7Ci0jZWxpZiBQTEFU
Rk9STShHVEspCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3Jt
LCAoImd0ayIpKTsKLSNlbGlmIFBMQVRGT1JNKFdYKQotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJ3eCIpKTsKLSNlbHNlCi0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInVua25vd24iKSk7Ci0jZW5kaWYKLQot
ICAgIHJldHVybiBwbGF0Zm9ybTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIHNfaW5zcGVjdG9yQ29u
dHJvbGxlckNvdW50Owogc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3JDb250cm9sbGVy
OjpTZXR0aW5nKj4qIHNfc2V0dGluZ0NhY2hlOwogCkBAIC0xODEsNiArMTIzLDcgQEAgSW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JD
bGllbnQqIGNsaWVudCkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCiAgICAgLCBtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5nU2V0dGlu
Z3NMb2FkZWQoZmFsc2UpCisgICAgLCBtX2luc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQmFja2Vu
ZDo6Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKICAgICAsIG1fYXR0YWNoRGVidWdnZXJX
aGVuU2hvd24oZmFsc2UpCkBAIC0yODUsMjAgKzIyOCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0U2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU2V0dGluZyYgc2V0dGlu
ZykKICAgICBtX2NsaWVudC0+c3RvcmVTZXR0aW5nKGtleSwgc2V0dGluZyk7CiB9CiAKLVN0cmlu
ZyBJbnNwZWN0b3JDb250cm9sbGVyOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBpZiAo
IWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX2NsaWVu
dC0+bG9jYWxpemVkU3RyaW5nc1VSTCgpOwotfQotCi1TdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIHJldHVybiBtX2NsaWVudC0+aGlkZGVuUGFuZWxzKCk7Ci19Ci0KIC8v
IFRyeWluZyB0byBpbnNwZWN0IHNvbWV0aGluZyBpbiBhIGZyYW1lIHdpdGggSmF2YVNjcmlwdCBk
aXNhYmxlZCB3b3VsZCBsYXRlciBsZWFkIHRvCiAvLyBjcmFzaGVzIHRyeWluZyB0byBjcmVhdGUg
SmF2YVNjcmlwdCB3cmFwcGVycy4gU29tZSBkYXkgd2UgY291bGQgZml4IHRoaXMgaXNzdWUsIGJ1
dAogLy8gZm9yIG5vdyBwcmV2ZW50IGNyYXNoZXMgaGVyZSBieSBuZXZlciB0YXJnZXRpbmcgYSBu
b2RlIGluIHN1Y2ggYSBmcmFtZS4KQEAgLTUzNiwxOSArNDY1LDYgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjp0b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlKCkKICAgICAgICAgaGlkZUhpZ2hs
aWdodCgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFJlc291cmNlU291cmNl
VG9GcmFtZShsb25nIGlkZW50aWZpZXIsIE5vZGUqIGZyYW1lKQotewotICAgIGlmICghZW5hYmxl
ZCgpIHx8ICFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW5zcGVj
dG9yUmVzb3VyY2U+IHJlc291cmNlID0gcmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOwotICAg
IGlmIChyZXNvdXJjZSkgewotICAgICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gcmVzb3VyY2Ut
PnNvdXJjZVN0cmluZygpOwotICAgICAgICBpZiAoIXNvdXJjZVN0cmluZy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBhZGRTb3VyY2VUb0ZyYW1lKHJlc291cmNlLT5taW1lVHlwZSgpLCBzb3VyY2VT
dHJpbmcsIGZyYW1lKTsKLSAgICB9Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25l
ZCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zZWFyY2hpbmdGb3JOb2RlKQpAQCAtNTkw
LDcgKzUwNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0
QXZhaWxhYmxlKCkKICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5ncmFudFVuaXZlcnNhbEFjY2VzcygpOwogCiAgICAgbV9zY3JpcHRTdGF0ZSA9
IHNjcmlwdFN0YXRlRnJvbVBhZ2UobV9wYWdlKTsKLSAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChtX3NjcmlwdFN0YXRlLCAiSW5zcGVjdG9yQ29udHJvbGxlciIsIHRoaXMpOworICAgIFNjcmlw
dEdsb2JhbE9iamVjdDo6c2V0KG1fc2NyaXB0U3RhdGUsICJJbnNwZWN0b3JDb250cm9sbGVyIiwg
bV9pbnNwZWN0b3JCYWNrZW5kLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzY3JpcHRPYmplY3RSZWFkeSgpCkBAIC0xMzIwLDI4ICsxMjM2LDYgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgICAgIG1fZnJv
bnRlbmQtPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKIH0KIAotSmF2YVNjcmlwdENhbGxGcmFtZSog
SW5zcGVjdG9yQ29udHJvbGxlcjo6Y3VycmVudENhbGxGcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuY3VycmVudENhbGxGcmFtZSgpOwot
fQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnBhdXNlT25FeGNlcHRpb25zKCkKLXsKLSAg
ICByZXR1cm4gSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYXVzZU9uRXhjZXB0aW9u
cygpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFBhdXNlT25FeGNlcHRpb25z
KGJvb2wgcGF1c2UpCi17Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRQ
YXVzZU9uRXhjZXB0aW9ucyhwYXVzZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cGF1c2VJbkRlYnVnZ2VyKCkKLXsKLSAgICBpZiAoIW1fZGVidWdnZXJFbmFibGVkKQotICAgICAg
ICByZXR1cm47Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYXVzZVByb2dy
YW0oKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWVEZWJ1Z2dlcigpCiB7
CiAgICAgaWYgKCFtX2RlYnVnZ2VyRW5hYmxlZCkKQEAgLTEzNDksMzkgKzEyNDMsNiBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3VtZURlYnVnZ2VyKCkKICAgICBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLmNvbnRpbnVlUHJvZ3JhbSgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigpCi17Ci0gICAgaWYgKCFt
X2RlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEphdmFTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkuc3RlcE92ZXJTdGF0ZW1lbnQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIoKQotewotICAgIGlmICghbV9k
ZWJ1Z2dlckVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLnN0ZXBJbnRvU3RhdGVtZW50KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyKCkKLXsKLSAgICBpZiAoIW1fZGVi
dWdnZXJFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5zdGVwT3V0T2ZGdW5jdGlvbigpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGlu
ZU51bWJlcikKLXsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQ
dHIoKTsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmFkZEJyZWFrcG9pbnQo
c291cmNlSURWYWx1ZSwgbGluZU51bWJlcik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKQotewotICAgIGludHB0cl90IHNvdXJjZUlEVmFsdWUgPSBzb3VyY2VJRC50b0ludFB0
cigpOwotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2lu
dChzb3VyY2VJRFZhbHVlLCBsaW5lTnVtYmVyKTsKLX0KLQogLy8gSmF2YVNjcmlwdERlYnVnTGlz
dGVuZXIgZnVuY3Rpb25zCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUGFyc2VTb3Vy
Y2UoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDE5YjFiN2QuLmMxMWFjZDYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTU2LDYgKzU2LDcgQEAgY2xhc3MgRGF0
YWJhc2U7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogY2xhc3MgSW5zcGVj
dG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBKYXZhU2NyaXB0Q2Fs
bEZyYW1lOwpAQCAtMTUxLDE0ICsxNTIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgYm9vbCBt
X2Jvb2xlYW47CiAgICAgICAgIH0gbV9zaW1wbGVDb250ZW50OwogICAgIH07Ci0KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JDb250cm9sbGVyPiBjcmVhdGUoUGFnZSogcGFnZSwgSW5z
cGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvckNvbnRyb2xsZXIocGFnZSwgaW5zcGVjdG9yQ2xpZW50KSk7Ci0g
ICAgfQotCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7
CiAgICAgfkluc3BlY3RvckNvbnRyb2xsZXIoKTsKIAorICAgIEluc3BlY3RvckJhY2tlbmQqIGlu
c3BlY3RvckJhY2tlbmQoKSB7IHJldHVybiBtX2luc3BlY3RvckJhY2tlbmQuZ2V0KCk7IH0KKwog
ICAgIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwogICAgIHZvaWQgcGFnZURlc3Ryb3ll
ZCgpIHsgbV9wYWdlID0gMDsgfQogCkBAIC0xNjksOSArMTY3LDYgQEAgcHVibGljOgogICAgIGNv
bnN0IFNldHRpbmcmIHNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwogICAgIHZvaWQg
c2V0U2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU2V0dGluZyYpOwogCi0gICAgU3Ry
aW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLSAgICBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0K
ICAgICB2b2lkIGluc3BlY3QoTm9kZSopOwogICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKICAg
ICB2b2lkIGhpZGVIaWdobGlnaHQoKTsKQEAgLTE4Myw4ICsxNzgsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCB3aW5kb3dWaXNpYmxlKCk7CiAgICAgdm9pZCBzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlz
aWJsZSA9IHRydWUsIGJvb2wgYXR0YWNoZWQgPSBmYWxzZSk7CiAKLSAgICB2b2lkIGFkZFJlc291
cmNlU291cmNlVG9GcmFtZShsb25nIGlkZW50aWZpZXIsIE5vZGUqIGZyYW1lKTsKLSAgICBib29s
IGFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBz
b3VyY2UsIE5vZGUqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdl
TGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCk7CiAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwpAQCAt
MTkyLDExICsxODUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhdHRhY2hXaW5kb3coKTsKICAgICB2
b2lkIGRldGFjaFdpbmRvdygpOwogCi0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsK
LSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7Ci0KLSAg
ICB2b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKLQog
ICAgIHZvaWQgdG9nZ2xlU2VhcmNoRm9yTm9kZUluUGFnZSgpOwogICAgIGJvb2wgc2VhcmNoaW5n
Rm9yTm9kZUluUGFnZSgpIHsgcmV0dXJuIG1fc2VhcmNoaW5nRm9yTm9kZTsgfTsKICAgICB2b2lk
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBt
b2RpZmllckZsYWdzKTsKQEAgLTIwNSw3ICsxOTMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNw
ZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKik7CiAgICAgdm9pZCB3aW5kb3dT
Y3JpcHRPYmplY3RBdmFpbGFibGUoKTsKIAotICAgIHZvaWQgc2NyaXB0T2JqZWN0UmVhZHkoKTsK
ICAgICB2b2lkIHNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3Jp
cHRPYmplY3Qgb2JqZWN0KTsKIAogICAgIHZvaWQgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7CkBA
IC0yMzksOSArMjI2LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgUmVzb3VyY2VzTWFwJiByZXNv
dXJjZXMoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlczsgfQogCi0gICAgdm9pZCBtb3ZlV2lu
ZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29uc3Q7Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygpOwot
CiAgICAgdm9pZCBkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAog
ICAgIHZvaWQgY291bnQoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CkBAIC0yNTIsOCArMjM2LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc3RhcnRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgU2NyaXB0Q2FsbFN0YWNrKiBj
YWxsRnJhbWUpOwogICAgIHZvaWQgZW5kR3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIAotICAgIGNvbnN0IFN0
cmluZyYgcGxhdGZvcm0oKSBjb25zdDsKLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgIHZvaWQgYWRkUHJvZmlsZShQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4sIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlVVJMKTsKICAgICB2b2lkIGFk
ZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVVSTCk7CkBA
IC0yNjQsMzUgKzI0NiwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0
aWF0ZWRQcm9maWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJv
ZmlsZTsgfQogCiAgICAgSlNDOjpVU3RyaW5nIGdldEN1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmls
ZU5hbWUoYm9vbCBpbmNyZW1lbnRQcm9maWxlTnVtYmVyKTsKLSAgICB2b2lkIHN0YXJ0VXNlcklu
aXRpYXRlZFByb2ZpbGluZ1Nvb24oKTsKICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2Zp
bGluZyhUaW1lcjxJbnNwZWN0b3JDb250cm9sbGVyPiogPSAwKTsKICAgICB2b2lkIHN0b3BVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0gICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7
CiAKICAgICB2b2lkIGVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UsIGJvb2wgc2tp
cFJlY29tcGlsZSA9IGZhbHNlKTsKICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihib29sIGFsd2F5
cyA9IGZhbHNlKTsKICAgICBib29sIHByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGVu
YWJsZWQoKSAmJiBtX3Byb2ZpbGVyRW5hYmxlZDsgfQogCi0gICAgdm9pZCBlbmFibGVEZWJ1Z2dl
ckZyb21Gcm9udGVuZChib29sIGFsd2F5cyk7CiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcigpOwog
ICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwogICAgIGJvb2wg
ZGVidWdnZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckVuYWJsZWQ7IH0KIAot
ICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGN1cnJlbnRDYWxsRnJhbWUoKSBjb25zdDsKLQotICAg
IHZvaWQgYWRkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKTsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlcik7Ci0KLSAgICBib29sIHBhdXNlT25FeGNlcHRpb25zKCk7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9ucyhib29sIHBhdXNlKTsKLQotICAgIHZvaWQg
cGF1c2VJbkRlYnVnZ2VyKCk7CiAgICAgdm9pZCByZXN1bWVEZWJ1Z2dlcigpOwogCi0gICAgdm9p
ZCBzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKTsKLSAgICB2b2lkIHN0ZXBJbnRvU3RhdGVt
ZW50SW5EZWJ1Z2dlcigpOwotICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyKCk7
Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUGFyc2VTb3VyY2UoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBKU0M6OlNvdXJjZUNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJj
ZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYsIGludCBlcnJvckxpbmUs
IGNvbnN0IEpTQzo6VVN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
UGF1c2UoKTsKQEAgLTMwMCw3ICsyNjYsMjAgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6
Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAg
ZnJpZW5kIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CisgCisgICAgLy8gRm9sbG93aW5nIGFyZSB1
c2VkIGZyb20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJuYWxseS4KKyAgICB2b2lkIHNjcmlw
dE9iamVjdFJlYWR5KCk7CisgICAgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkg
Y29uc3Q7CisgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKKyAgICB2b2lkIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdm9pZCBzdG9yZUxhc3RB
Y3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSk7CisgICAgdm9pZCBjbG9zZVdpbmRv
dygpOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIHZvaWQgc3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nU29vbigpOworICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJv
b2wpOworICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpOwor
I2VuZGlmCiAKICAgICB2b2lkIGZvY3VzTm9kZSgpOwogCkBAIC0zNDcsNiArMzI2LDcgQEAgcHJp
dmF0ZToKICAgICBDb25zb2xlTWVzc2FnZSogbV9wcmV2aW91c01lc3NhZ2U7CiAgICAgYm9vbCBt
X3Jlc291cmNlVHJhY2tpbmdFbmFibGVkOwogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nU2V0
dGluZ3NMb2FkZWQ7CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmQ+IG1faW5zcGVjdG9yQmFj
a2VuZDsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBib29sIG1fZGVidWdn
ZXJFbmFibGVkOwogICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaWRsIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY5N2U4ZTcuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5pZGwKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBj
b3JlIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yCi0gICAg
XSBJbnNwZWN0b3JDb250cm9sbGVyIHsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249
aGlkZUhpZ2hsaWdodF0gdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOwotICAgICAgICBbQ3Vz
dG9tXSB2b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4gTm9kZSBub2RlKTsKLSAgICAgICAgW0ltcGxl
bWVudGF0aW9uRnVuY3Rpb249c2NyaXB0T2JqZWN0UmVhZHldIHZvaWQgbG9hZGVkKCk7Ci0gICAg
ICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWNsb3NlXSB2b2lkIHdpbmRvd1VubG9hZGluZygp
OwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1hdHRhY2hXaW5kb3ddIHZvaWQgYXR0
YWNoKCk7Ci0gICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWRldGFjaFdpbmRvd10gdm9p
ZCBkZXRhY2goKTsKLQotICAgICAgICB2b2lkIGNsb3NlV2luZG93KCk7Ci0gICAgICAgIFtJbXBs
ZW1lbnRhdGlvbkZ1bmN0aW9uPWNsZWFyQ29uc29sZU1lc3NhZ2VzXSB2b2lkIGNsZWFyTWVzc2Fn
ZXMoKTsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249dG9nZ2xlU2VhcmNoRm9yTm9k
ZUluUGFnZV0gdm9pZCB0b2dnbGVOb2RlU2VhcmNoKCk7Ci0KLSAgICAgICAgW0ltcGxlbWVudGF0
aW9uRnVuY3Rpb249d2luZG93VmlzaWJsZV0gYm9vbGVhbiBpc1dpbmRvd1Zpc2libGUoKTsKLSAg
ICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249c2VhcmNoaW5nRm9yTm9kZUluUGFnZV0gYm9v
bGVhbiBzZWFyY2hpbmdGb3JOb2RlKCk7Ci0KLSAgICAgICAgdm9pZCBhZGRSZXNvdXJjZVNvdXJj
ZVRvRnJhbWUoaW4gbG9uZyBpZGVudGlmaWVyLCBpbiBOb2RlIGZyYW1lKTsKLSAgICAgICAgYm9v
bGVhbiBhZGRTb3VyY2VUb0ZyYW1lKGluIERPTVN0cmluZyBtaW1lVHlwZSwgaW4gRE9NU3RyaW5n
IHNvdXJjZVZhbHVlLCBpbiBOb2RlIGZyYW1lKTsKLSAgICAgICAgW0N1c3RvbV0gTm9kZSBnZXRS
ZXNvdXJjZURvY3VtZW50Tm9kZShpbiBsb25nIGxvbmcgaWRlbnRpZmllcik7Ci0gICAgICAgIFtD
dXN0b21dIHZvaWQgc2VhcmNoKGluIE5vZGUgbm9kZSwgaW4gRE9NU3RyaW5nIHF1ZXJ5KTsKLSNp
ZiBkZWZpbmVkKEVOQUJMRV9EQVRBQkFTRSkgJiYgRU5BQkxFX0RBVEFCQVNFCi0gICAgICAgIFtD
dXN0b21dIERPTU9iamVjdCBkYXRhYmFzZVRhYmxlTmFtZXMoaW4gRGF0YWJhc2UgZGF0YWJhc2Up
OwotI2VuZGlmCi0gICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBzZXR0aW5nKGluIERPTVN0cmlu
ZyBrZXkpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHNldFNldHRpbmcoaW4gRE9NU3RyaW5nIGtl
eSwgaW4gRE9NT2JqZWN0ICB2YWx1ZSk7Ci0gICAgICAgIFtDdXN0b21dIERPTVdpbmRvdyBpbnNw
ZWN0ZWRXaW5kb3coKTsKLSAgICAgICAgRE9NU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsK
LSAgICAgICAgRE9NU3RyaW5nIGhpZGRlblBhbmVscygpOwotICAgICAgICBET01TdHJpbmcgcGxh
dGZvcm0oKTsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249bW92ZVdpbmRvd0J5XSB2
b2lkIG1vdmVCeVVucmVzdHJpY3RlZChpbiBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKLSAgICAgICAg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7Ci0g
ICAgICAgIFtDdXN0b21dIERPTU9iamVjdCB3cmFwQ2FsbGJhY2soaW4gRE9NT2JqZWN0IGNhbGxi
YWNrKTsKLSAgICAgICAgYm9vbGVhbiByZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpOwotICAgICAg
ICB2b2lkIGVuYWJsZVJlc291cmNlVHJhY2tpbmcoaW4gYm9vbGVhbiBhbHdheXMpOwotICAgICAg
ICB2b2lkIGRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGluIGJvb2xlYW4gYWx3YXlzKTsKLSAgICAg
ICAgdm9pZCBzdG9yZUxhc3RBY3RpdmVQYW5lbChpbiBET01TdHJpbmcgcGFuZWxOYW1lKTsKLQot
I2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NS
SVBUX0RFQlVHR0VSCi0gICAgICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoaW4g
Ym9vbGVhbiBhbHdheXMpOwotICAgICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcihpbiBib29sZWFu
IGFsd2F5cyk7Ci0gICAgICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7Ci0gICAgICAgIHZvaWQg
cmVzdW1lRGVidWdnZXIoKTsKLSAgICAgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudEluRGVidWdn
ZXIoKTsKLSAgICAgICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIoKTsKLSAgICAg
ICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKLSAgICAgICAgYm9vbGVhbiBk
ZWJ1Z2dlckVuYWJsZWQoKTsKLSAgICAgICAgYm9vbGVhbiBwYXVzZU9uRXhjZXB0aW9ucygpOwot
ICAgICAgICBib29sZWFuIHByb2ZpbGVyRW5hYmxlZCgpOwotICAgICAgICBbSW1wbGVtZW50YXRp
b25GdW5jdGlvbj1zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmddIHZvaWQgc3RhcnRQcm9maWxp
bmcoKTsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249c3RvcFVzZXJJbml0aWF0ZWRQ
cm9maWxpbmddIHZvaWQgc3RvcFByb2ZpbGluZygpOwotICAgICAgICB2b2lkIGVuYWJsZVByb2Zp
bGVyKGluIGJvb2xlYW4gYWx3YXlzKTsKLSAgICAgICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoaW4g
Ym9vbGVhbiBhbHdheXMpOwotICAgICAgICBbQ3VzdG9tXSBET01PYmplY3QgY3VycmVudENhbGxG
cmFtZSgpOwotICAgICAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zKGluIGJvb2xlYW4gcGF1
c2VPbkV4Y2VwdGlvbnMpOwotICAgICAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW4gRE9NU3RyaW5n
IHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxpbmVOdW1iZXIpOwotICAgICAgICB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQoaW4gRE9NU3RyaW5nIHNvdXJjZUlELCBpbiB1bnNpZ25lZCBsb25nIGxp
bmVOdW1iZXIpOwotCi0gICAgICAgIFtDdXN0b21dIEFycmF5IHByb2ZpbGVzKCk7Ci0jZW5kaWYK
LSAgICAgfTsKLSB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2UuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2UuanMKaW5kZXgg
ODVkNWNkMi4uYmNiN2IyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1Jlc291cmNlLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5q
cwpAQCAtMzQxLDEyICszNDEsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0g
ewogICAgICAgICB9CiAgICAgfSwKIAotICAgIGdldCBkb2N1bWVudE5vZGUoKSB7Ci0gICAgICAg
IGlmICgiaWRlbnRpZmllciIgaW4gdGhpcykKLSAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3JD
b250cm9sbGVyLmdldFJlc291cmNlRG9jdW1lbnROb2RlKHRoaXMuaWRlbnRpZmllcik7Ci0gICAg
ICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KICAgICBnZXQgcmVxdWVzdEhlYWRlcnMoKQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RIZWFkZXJzID09PSB1bmRlZmluZWQpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5k
ZXggNjQ5NDcwNy4uMzJjNjBjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisr
KyBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIFBhZ2U6OlBhZ2Uo
Q2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIENvbnRleHRNZW51Q2xpZW50KiBjb250ZXh0TWVu
dUNsaWVudCwgRWRpCiAgICAgLCBtX2RyYWdDb250cm9sbGVyKG5ldyBEcmFnQ29udHJvbGxlcih0
aGlzLCBkcmFnQ2xpZW50KSkKICAgICAsIG1fZm9jdXNDb250cm9sbGVyKG5ldyBGb2N1c0NvbnRy
b2xsZXIodGhpcykpCiAgICAgLCBtX2NvbnRleHRNZW51Q29udHJvbGxlcihuZXcgQ29udGV4dE1l
bnVDb250cm9sbGVyKHRoaXMsIGNvbnRleHRNZW51Q2xpZW50KSkKLSAgICAsIG1faW5zcGVjdG9y
Q29udHJvbGxlcihJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGUodGhpcywgaW5zcGVjdG9yQ2xp
ZW50KSkKKyAgICAsIG1faW5zcGVjdG9yQ29udHJvbGxlcihuZXcgSW5zcGVjdG9yQ29udHJvbGxl
cih0aGlzLCBpbnNwZWN0b3JDbGllbnQpKQogICAgICwgbV9zZXR0aW5ncyhuZXcgU2V0dGluZ3Mo
dGhpcykpCiAgICAgLCBtX3Byb2dyZXNzKG5ldyBQcm9ncmVzc1RyYWNrZXIpCiAgICAgLCBtX2Jh
Y2tGb3J3YXJkTGlzdChCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0aGlzKSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9QYWdlLmggYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IGNjYzFkNGMu
LmNjM2QyNWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvV2ViQ29yZS9w
YWdlL1BhZ2UuaApAQCAtMjA5LDcgKzIwOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgT3duUHRyPERyYWdDb250cm9sbGVyPiBtX2RyYWdDb250cm9sbGVyOwogICAgICAgICBPd25Q
dHI8Rm9jdXNDb250cm9sbGVyPiBtX2ZvY3VzQ29udHJvbGxlcjsKICAgICAgICAgT3duUHRyPENv
bnRleHRNZW51Q29udHJvbGxlcj4gbV9jb250ZXh0TWVudUNvbnRyb2xsZXI7Ci0gICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JDb250cm9sbGVyPiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgICAg
IE93blB0cjxJbnNwZWN0b3JDb250cm9sbGVyPiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CiAgICAg
ICAgIE93blB0cjxTZXR0aW5ncz4gbV9zZXR0aW5nczsKICAgICAgICAgT3duUHRyPFByb2dyZXNz
VHJhY2tlcj4gbV9wcm9ncmVzczsKICAgICAgICAgCg==
</data>
<flag name="review"
          id="17630"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33408</attachid>
            <date>2009-07-23 23:14:02 -0700</date>
            <delta_ts>2009-07-24 02:59:46 -0700</delta_ts>
            <desc>Step 1</desc>
            <filename>inspector_backend.txt</filename>
            <type>text/plain</type>
            <size>108144</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjMxMzA2Ni4uMDZiMzVkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wNy0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTcGxpdCBJbnNwZWN0b3JDb250cm9s
bGVyIGludG8gSW5zcGVjdG9yQ29udHJvbGxlcgorICAgICAgICBhbmQgSW5zcGVjdG9yQmFja2Vu
ZC4gRXZlcnl0aGluZyBmcm9udGVuZCBuZWVkcyBmcm9tIEluc3BlY3RvckNvbnRyb2xsZXIKKyAg
ICAgICAgd2lsbCBzbG93bHkgbWlncmF0ZSBpbnRvIHRoZSBJbnNwZWN0b3JCYWNrZW5kLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzU0MQorCisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVT
b3VyY2VzLmJrbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6aGln
aGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNl
YXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OmRhdGFiYXNlVGFi
bGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6Omluc3BlY3Rl
ZFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNldHRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjpzZXRTZXR0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnByb2ZpbGVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEds
b2JhbE9iamVjdDo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhJbmRleC5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRl
eC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckJh
Y2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFja2VuZDo6aW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZS5qczoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKIDIwMDktMDctMjMg
IFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAzZjUzY2FhLi44MmQ5ZmM5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCkBAIC0xNzEsNyArMTcxLDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgSFRNTFZpZGVv
RWxlbWVudCBcCiAgICAgSGlzdG9yeSBcCiAgICAgSW1hZ2VEYXRhIFwKLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyIFwKKyAgICBJbnNwZWN0b3JCYWNrZW5kIFwKICAgICBLZXlib2FyZEV2ZW50IFwK
ICAgICBMb2NhdGlvbiBcCiAgICAgTWVkaWFFcnJvciBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA2NDgyZGQyLi4xZjlj
YzA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTIzMSw3ICsyMzEsNyBAQCBJRExfQklORElOR1MgKz0gXAogCVdlYkNv
cmUvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBcCiAJV2ViQ29yZS9odG1sL1ZvaWRDYWxsYmFjay5p
ZGwgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsIFwKLQlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgXAogCVdlYkNvcmUvcGFnZS9CYXJJbmZvLmlkbCBcCiAJ
V2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaWRs
IFwKQEAgLTM2NCwxMSArMzY0LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmggXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmggXAotCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCBcCkBAIC0xMTE3LDYgKzExMTcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaWN1L3VuaWNvZGUvdXZlcnNpb24uaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjlkM2ViZS4uYjM5MjlkNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgJ2h0bWwvVGltZVJhbmdlcy5pZGwnLAogICAg
ICAgICAgICAgJ2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvVm9p
ZENhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaWRsJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsJywKICAgICAgICAg
ICAgICdwYWdlL0Fic3RyYWN0Vmlldy5pZGwnLApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaCcsCi0gICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCcsCkBAIC02MzAsNyArNjMw
LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVu
dENvbGxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgnLAotICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9y
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0
b20uY3BwJywKQEAgLTEzODAsNiArMTM4MCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckNsaWVudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCcsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwJywKKyAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCBjYTRhMzU1Li5jNmY2M2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQxNyw3ICs0MTcsNyBAQCBJRExf
QklORElOR1MgKz0gXAogICAgIGh0bWwvVGV4dE1ldHJpY3MuaWRsIFwKICAgICBodG1sL1ZhbGlk
aXR5U3RhdGUuaWRsIFwKICAgICBodG1sL1ZvaWRDYWxsYmFjay5pZGwgXAotICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsIFwKICAgICBwYWdlL0JhckluZm8uaWRsIFwKICAgICBwYWdlL0NvbnNvbGUuaWRsIFwK
ICAgICBwYWdlL0Nvb3JkaW5hdGVzLmlkbCBcCkBAIC01MDQsOCArNTA0LDggQEAgU09VUkNFUyAr
PSBcCiAgICAgYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXIuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRD
dXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgXAotICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0Nv
bGxlY3Rpb24uY3BwICBcCkBAIC04NDksNiArODQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRt
bC9QcmVsb2FkU2Nhbm5lci5jcHAgXAogICAgIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHAgXAogICAg
IGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKQEAgLTE1MDQsNiArMTUwNSw3IEBA
IEhFQURFUlMgKz0gXAogICAgIGh0bWwvVGltZVJhbmdlcy5oIFwKICAgICBodG1sL1ZhbGlkaXR5
U3RhdGUuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBcCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0MDg2YTEuLmMxNzdhNDUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODIsOSArNjgyLDggQEAK
IAkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFDRDBGRjU5ODY5MDA1
NzZCM0IgLyogU2hhcmVkV29ya2VyLmNwcCAqLzsgfTsKIAkJNDFFMUIxRDQwRkY1OTg2OTAwNTc2
QjNCIC8qIFNoYXJlZFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFFMUIxQ0UwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5oICov
OyB9OwogCQk0MUUxQjFENTBGRjU5ODY5MDA1NzZCM0IgLyogU2hhcmVkV29ya2VyLmlkbCBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0YwRkY1
OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5pZGwgKi87IH07Ci0JCTQxRjA2MENEMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8q
IEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi87IH07Ci0JCTQxRjA2MENFMEY1RUVCMkIwMEEw
N0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MENDMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCAqLzsgfTsKLQkJNDFGMDYxNkEwRjVFRkJERDAwQTA3RUFDIC8qIEpT
SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjE2OTBGNUVGQkREMDBBMDdFQUMgLyogSlNJbnNwZWN0
b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFD
IC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JC
YWNrZW5kLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0UwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVj
dG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFGMDYwQ0MwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5oICovOyB9
OwogCQk0MUYwNjE3NDBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYw
NjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggKi87
IH07CiAJCTQxRjA2MTc1MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFGMDYxNzMwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgKi87IH07CiAJCTQxRjA2MThFMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYxOEMw
RjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi87IH07CkBAIC0xMDE3LDYgKzEw
MTYsMTAgQEAKIAkJNzU3OTNFRDUwRDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3NhZ2VFdmVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VEMjBEMENFODVCMDA3RkMwQUMgLyogRE9NTWVzc2FnZUV2ZW50SW50ZXJuYWwuaCAqLzsg
fTsKIAkJN0E2NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLzsgfTsKIAkJ
N0E2NzRCREMwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCREEwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovOyB9OworCQk3QTc0RUNCNzEw
MTgzOTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I2MTAxODM5OUEwMEJGOTM5RSAv
KiBJbnNwZWN0b3JCYWNrZW5kLmlkbCAqLzsgfTsKKwkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlF
IC8qIEluc3BlY3RvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tl
bmQuY3BwICovOyB9OworCQk3QTc0RUNCQjEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3
NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQuaCAqLzsgfTsKKwkJN0E3
NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCQzEwMTgz
OURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLzsgfTsKIAkJN0FC
NkY4ODcwRkI5RDI3MTAwODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODUwRkI5RDI3MTAw
ODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwICovOyB9OwogCQk3QUI2Rjg4ODBGQjlE
MjcxMDA4MDVEMDIgLyogSW5zcGVjdG9ySlNPTk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODYwRkI5RDI3MTAwODA1RDAyIC8qIElu
c3BlY3RvckpTT05PYmplY3QuaCAqLzsgfTsKIAkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8q
IEluc3BlY3RvckZyb250ZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBRUQzRTAzMEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVu
ZC5jcHAgKi87IH07CkBAIC01NjQ0LDEwICs1NjQ3LDggQEAKIAkJNDFFMUIxQ0QwRkY1OTg2OTAw
NTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTaGFyZWRXb3JrZXIuY3BwOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUxQjFDRTBGRjU5ODY5MDA1NzZCM0Ig
LyogU2hhcmVkV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYXJl
ZFdvcmtlci5oOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFFMUIxQ0YwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU2hhcmVkV29ya2VyLmlkbDsgcGF0aCA9IHdvcmtl
cnMvU2hhcmVkV29ya2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFGMDYw
QUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxRjA2MENDMEY1
RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQxRjA2MTY5MEY1RUZCREQwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNv
bnRyb2xsZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0luc3BlY3RvckJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjBDQzBGNUVFQjJCMDBBMDdF
QUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSW5zcGVjdG9yQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MUYwNjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjE3MzBGNUYwMEFDMDBB
MDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MThDMEY1RjA2OTgwMEEwN0VBQyAvKiBD
b25zb2xlTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zb2xl
TWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjAzMyw2ICs2MDM0LDEw
IEBACiAJCTc1NzkzRUQyMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnRJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50SW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2NzRCRDkwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cExv
YWREZWZlcnJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCNjEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gSW5zcGVjdG9yQmFja2VuZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
NzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVj
dG9yQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNzRFQ0JDMTAxODM5REEw
MEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkY4ODUwRkI5RDI3MTAwODA1RDAyIC8qIEluc3Bl
Y3RvckpTT05PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9ySlNPTk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
QjZGODg2MEZCOUQyNzEwMDgwNUQwMiAvKiBJbnNwZWN0b3JKU09OT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckpTT05PYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3Rv
ckZyb250ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3Bl
Y3RvckZyb250ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MDAsOCAr
OTgwNSw4IEBACiAJCTFDNUZBRUNBMERDRkQ4QzkwMEQ1OEY3OCAvKiBJbnNwZWN0b3IgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQxRjA2MENCMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAotCQkJCTQxRjA2MEND
MEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKKwkJCQk0MUYw
NjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLywKKwkJCQk0
MUYwNjBDQzBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8sCiAJCQkJ
MUM1RkFFQ0YwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8s
CiAJCQkJMUM1RkFFRDAwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5o
ICovLAogCQkJKTsKQEAgLTk4MTEsMTMgKzk4MTYsMTUgQEAKIAkJMUM4MUI5NEQwRTk3MzJEOTAw
MjY2RTA3IC8qIGluc3BlY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
Y3BwICovLAorCQkJCTdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5k
LmggKi8sCisJCQkJN0E3NEVDQjYxMDE4Mzk5QTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
aWRsICovLAogCQkJCTFDODFCOTU5MEU5NzMzMDgwMDI2NkUwNyAvKiBmcm9udC1lbmQgKi8sCiAJ
CQkJNDFGMDYxOEQwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmNwcCAqLywKIAkJ
CQk0MUYwNjE4QzBGNUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuaCAqLywKIAkJCQkx
QzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8sCiAJCQkJMUM4
MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAogCQkJ
CTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCi0J
CQkJNDFGMDYwQUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICov
LAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCAqLywKIAkJCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5oICovLAogCQkJCTQxRjA2MTczMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwICovLApAQCAtMTM2MDQsNiArMTM2MTEsNyBAQAog
CQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyog
SlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzJFRDZCQjBDNkJEMkYwMDA5
MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQkxQTlFRjQ1NjBBMUI5NTdEMDAzMzJC
NjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovLAogCQkJCTkzQkE1
OUIxMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgKi8sCkBAIC0x
MzY1Nyw3ICsxMzY2NSw2IEBACiAJCQkJQkMxN0Y5NjUwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCUFCNENCNEVBMEI4QkRBM0QwMDlGNDBC
MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggKi8sCiAJCQkJQTdEMDMxOEQwRTkzNTQw
MzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLywKLQkJCQk0MUYwNjE2OTBGNUVG
QkREMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLywKIAkJCQkx
QzVGQUVFNjBEQ0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNw
cCAqLywKIAkJCQlCQ0UxQzQzRjBEOTgzMEY0MDAzQjAyRjIgLyogSlNMb2NhdGlvbkN1c3RvbS5j
cHAgKi8sCiAJCQkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwICovLApAQCAtMTYwODYsNyArMTYwOTMsNyBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlF
NjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzA5MTU4OEIw
REI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzA5MTU4OEQwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJhY2tX
cmFwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MUYwNjBDRTBGNUVFQjJCMDBBMDdFQUMgLyog
SlNJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUYwNjBDRTBGNUVF
QjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5
RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzAyOCw2ICsxNzAzNSw3IEBACiAJ
CQkJMkVDRjdBRTIxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RURCMDNEMTAxNjg0OTQwMEZFODExMyAvKiBET01PYmplY3RXaXRoU1ZHQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlw
dFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTc0RUNCQjEwMTgzOUE2MDBC
RjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzE0MCw2ICsx
NzE0OCw3IEBACiAJCQkJNDFFMUIxRDUwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgaW4gUmVzb3VyY2VzICovLAogCQkJCTE1Qzc3MDhDMTAwRDNDNkEwMDVCQTI2NyAvKiBWYWxp
ZGl0eVN0YXRlLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMkVDRjdBRTMxMDE2MkI1ODAwNDI3
REU3IC8qIEVycm9yRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk3QTc0RUNCNzEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTgxNjAsOCArMTgxNjksNyBAQAogCQkJCUE3RDAzMThFMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0lt
YWdlRGF0YUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDkxNTg4QTBEQjQyMDkyMDBF
NTVBRjQgLyogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMwOTE1ODhDMERCNDIwOTIwMEU1NUFGNCAvKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0MUYwNjBDRDBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxRjA2MTZBMEY1RUZCREQw
MEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1
OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg2NjI5RDQwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE5MDYzLDYgKzE5MDcxLDggQEAKIAkJCQkyRUNGN0FEQzEwMTYyQjM4MDA0
MjdERTcgLyogSlNFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFQ0Y3QUUxMTAx
NjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUVG
Q0FFMTAxNkNFNEEwMDQwRDM0RSAvKiBET01SR0JDb2xvci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tl
bmRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IGRlOGE3ZGMuLjRk
NzRhYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC0xMDUsOCArMTA1LDggQEAgVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBi
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
SW1hZ2VEYXRhQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVj
dFdyYXBwZXIuY3BwCisgICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3Rv
bS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3Bw
Ci0gICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKICAg
ICAgICAgYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9K
U01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCkBAIC0zNTMsNyArMzUzLDcgQEAgVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTFVMaXN0RWxlbWVudC5jcHAKICAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hpc3RvcnkuY3BwCiAgICAgICAgIERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSW5zcGVjdG9yQmFja2VuZC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNLZXlib2FyZEV2ZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTTG9jYXRpb24uY3BwCkBAIC02NjEsNiArNjYxLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogCiAgICAgPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lOU1BFQ1RPUiI+CiAgICAgICAgIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKyAgICAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuY3BwCiAgICAgICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAog
ICAgICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcAogICAgICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zY2NiMDZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCkBAIC0wLDAgKzEsMjgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0luc3BlY3RvckJhY2tlbmQuaCIKKworI2lu
Y2x1ZGUgIkNvbnNvbGUuaCIKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCisjZW5kaWYKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIgorI2luY2x1ZGUg
IkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5j
bHVkZSAiSlNSYW5nZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlw
dERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlLmg+
CisjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNJbnNwZWN0b3JCYWNr
ZW5kOjpoaWdobGlnaHRET01Ob2RlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0
JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6YXNXcmFwcGVyKGFyZ3MuYXQoMCkpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBOb2RlKiBu
b2RlID0gdG9Ob2RlKHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgaW1wbCgpLT5oaWdobGlnaHQo
bm9kZSk7CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0luc3Bl
Y3RvckJhY2tlbmQ6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0g
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgcmVzdWx0OworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRz
KG5vZGUpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRvIHsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgp
LCB0YXJnZXQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFw
c2VkKGVjKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIEEgbm9uLWNvbGxhcHNl
ZCByZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGlsbCBu
b3QKKyAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUwOTMy
OCkuIEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIFZpc2libGVQb3NpdGlv
biBuZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNU
UkVBTSk7CisgICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFy
Y2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICByZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKKworICAgICAg
ICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAgIH0gd2hpbGUgKHRy
dWUpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisKKyNp
ZiBFTkFCTEUoREFUQUJBU0UpCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6ZGF0YWJhc2VU
YWJsZU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9E
YXRhYmFzZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAgaWYgKCFkYXRhYmFzZSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciByZXN1bHQ7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRh
YmxlTmFtZXMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdGFibGVOYW1lc1tpXSkpOworCisgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisjZW5kaWYKKworSlNWYWx1ZSBKU0luc3BlY3Rv
ckJhY2tlbmQ6Omluc3BlY3RlZFdpbmRvdyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikKK3sK
KyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEpT
RE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGljLT5pbnNwZWN0ZWRQ
YWdlKCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
Ojp3cmFwKGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpLCBpbnNwZWN0ZWRXaW5kb3cpOwor
fQorCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6c2V0dGluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcga2V5ID0gYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBs
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJiBz
ZXR0aW5nID0gaWMtPnNldHRpbmcoa2V5KTsKKworICAgIHN3aXRjaCAoc2V0dGluZy50eXBlKCkp
IHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpT
ZXR0aW5nOjpOb1R5cGU6CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHNldHRpbmcuc3RyaW5nKCkpOworICAgICAgICBj
YXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkRvdWJsZVR5cGU6CisgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2V0dGluZy5kb3VibGVWYWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpJbnRlZ2VyVHlwZToKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBzZXR0aW5nLmludGVnZXJWYWx1ZSgpKTsKKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpCb29sZWFuVHlwZToKKyAgICAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4oc2V0dGluZy5ib29sZWFuVmFsdWUoKSk7CisgICAgICAg
IGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6U3RyaW5nVmVjdG9yVHlwZTogewor
ICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgc3RyaW5nc0FycmF5OworICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MgPSBzZXR0aW5nLnN0cmluZ1ZlY3Rvcigp
OworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5ncy5zaXplKCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICAgICAgc3RyaW5nc0FycmF5LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdzW2ldKSk7
CisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgc3RyaW5nc0FycmF5KTsK
KyAgICAgICAgfQorICAgIH0KK30KKworSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OnNldFNl
dHRpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChh
cmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgU3Ry
aW5nIGtleSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OlNldHRpbmcgc2V0dGluZzsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdz
LmF0KDEpOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpIHx8IHZhbHVlLmlzTnVsbCgpKSB7
CisgICAgICAgIC8vIERvIG5vdGhpbmcuIFRoZSBzZXR0aW5nIGlzIGFscmVhZHkgTm9UeXBlLgor
ICAgICAgICBBU1NFUlQoc2V0dGluZy50eXBlKCkgPT0gSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0
dGluZzo6Tm9UeXBlKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAg
IHNldHRpbmcuc2V0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS5p
c051bWJlcigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b051bWJlcihleGVjKSk7Cisg
ICAgZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHNldHRpbmcuc2V0KHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7CisgICAgZWxzZSB7CisgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkg
PSBhc0FycmF5KHZhbHVlKTsKKyAgICAgICAgaWYgKCFqc0FycmF5KQorICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKS50b1N0cmluZyhl
eGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKGl0
ZW0pOworICAgICAgICB9CisgICAgICAgIHNldHRpbmcuc2V0KHN0cmluZ3MpOworICAgIH0KKwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpOworICAgIGlmIChpYykKKyAgICAgICAgaWMtPnNldFNldHRpbmcoa2V5LCBzZXR0
aW5nKTsKKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTSW5zcGVj
dG9yQmFja2VuZDo6d3JhcENhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIHJldHVybiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcChl
eGVjLCBhcmdzLmF0KDApKTsKK30KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
CitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQoreworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IGltcGwoKS0+Y3VycmVudENhbGxGcmFtZSgpOworICAgIGlmICghY2FsbEZyYW1lIHx8
ICFjYWxsRnJhbWUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICAvLyBGSVhNRTogSSBhbSBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZC4g
Q2FuIHdlIGp1c3QgdXNlIGV4ZWM/CisgICAgRXhlY1N0YXRlKiBnbG9iYWxFeGVjID0gY2FsbEZy
YW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisKKyAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CisgICAgcmV0dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6
d3JhcChnbG9iYWxFeGVjLCB0b0pTKGV4ZWMsIGNhbGxGcmFtZSkpOworfQorCitKU1ZhbHVlIEpT
SW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
Qzo6QXJnTGlzdCYpCit7CisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIHJlc3VsdDsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UHJvZmlsZT4gPiYgcHJvZmlsZXMg
PSBpYy0+cHJvZmlsZXMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodG9KUyhleGVjLCBwcm9maWxlc1tp
XS5nZXQoKSkpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9
CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIwNmM5ZTkuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtp
dEBtYXR0bGlsZWsuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2lmIEVOQUJMRShEQVRBQkFTRSkK
LSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKLSNlbmRpZgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNs
dWRlICJKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU0luc3BlY3RvckNh
bGxiYWNrV3JhcHBlci5oIgotI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIkpTUmFuZ2Uu
aCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgotI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0jaW5jbHVkZSAi
SmF2YVNjcmlwdENhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5o
IgotI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCi0jaW5jbHVkZSAiSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZS5oPgotI2luY2x1ZGUgPHBy
b2ZpbGVyL1Byb2ZpbGVyLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxp
Z2h0RE9NTm9kZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLXsK
LSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LQotICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IHRvTm9k
ZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGltcGwoKS0+aGlnaGxpZ2h0KG5vZGUpOwotCi0g
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9s
bGVyOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaWRlbnRp
ZmllciA9IGFyZ3MuYXQoMCkudG9VSW50MzIoZXhlYywgb2spOwotICAgIGlmICghb2spCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNl
PiByZXNvdXJjZSA9IGltcGwoKS0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOwotICAgIEFT
U0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUoKTsKLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgIGlmIChkb2N1bWVu
dC0+aXNQbHVnaW5Eb2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc0ltYWdlRG9jdW1lbnQoKSB8fCBk
b2N1bWVudC0+aXNNZWRpYURvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgRXhlY1N0YXRlKiByZXNvdXJjZUV4ZWMgPSB0b0pTRE9NV2luZG93U2hlbGwoZnJh
bWUpLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwot
ICAgIHJldHVybiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAocmVzb3VyY2VFeGVjLCB0
b0pTKHJlc291cmNlRXhlYywgZG9jdW1lbnQpKTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNv
bnRyb2xsZXI6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0KLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkpOwotICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0ID0gYXJn
cy5hdCgxKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
cmVzdWx0OwotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG5v
ZGUpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRvIHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0
YXJnZXQsIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2Vk
KGVjKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEEgbm9uLWNvbGxhcHNlZCBy
ZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGlsbCBub3QK
LSAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUwOTMyOCku
IEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiBu
ZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVB
TSk7Ci0gICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFyY2hS
YW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKLQotICAgICAgICBz
ZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOwotICAgIH0gd2hpbGUgKHRydWUp
OwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0KLSNpZiBF
TkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGF0YWJhc2VU
YWJsZU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9E
YXRhYmFzZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciByZXN1bHQ7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRh
YmxlTmFtZXMoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdGFibGVOYW1lc1tpXSkpOwotCi0gICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0jZW5kaWYKLQotSlNWYWx1ZSBKU0luc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvdyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikK
LXsKLSAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBs
KCktPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotICAgIHJldHVybiBKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoaW5zcGVjdGVkV2luZG93LT5nbG9iYWxFeGVjKCksIGluc3Bl
Y3RlZFdpbmRvdyk7Ci19Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXR0aW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5z
aXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBr
ZXkgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBjb25zdCBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nJiBzZXR0aW5nID0gaW1wbCgpLT5zZXR0aW5nKGtleSk7Ci0K
LSAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlOgotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZzo6U3RyaW5nVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBz
ZXR0aW5nLnN0cmluZygpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0
aW5nOjpEb3VibGVUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNldHRp
bmcuZG91YmxlVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0
dGluZzo6SW50ZWdlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2V0
dGluZy5pbnRlZ2VyVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZzo6Qm9vbGVhblR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHNldHRp
bmcuYm9vbGVhblZhbHVlKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNl
dHRpbmc6OlN0cmluZ1ZlY3RvclR5cGU6IHsKLSAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIHN0cmluZ3NBcnJheTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJp
bmdzID0gc2V0dGluZy5zdHJpbmdWZWN0b3IoKTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZ3Muc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHN0cmluZ3NBcnJheS5hcHBlbmQo
anNTdHJpbmcoZXhlYywgc3RyaW5nc1tpXSkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0cmluZ3NBcnJheSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUpTVmFs
dWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAyKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBrZXkgPSBhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nIHNldHRp
bmc7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgxKTsKLSAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWQoKSB8fCB2YWx1ZS5pc051bGwoKSkgewotICAgICAgICAvLyBEbyBub3RoaW5nLiBU
aGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KLSAgICAgICAgQVNTRVJUKHNldHRpbmcudHlw
ZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZSk7Ci0gICAgfSBlbHNl
IGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b1N0cmlu
ZyhleGVjKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgc2V0dGlu
Zy5zZXQodmFsdWUudG9OdW1iZXIoZXhlYykpOwotICAgIGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVh
bigpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIGVs
c2UgewotICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheSh2YWx1ZSk7Ci0gICAgICAg
IGlmICghanNBcnJheSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwganNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChpdGVtKTsKLSAgICAgICAgfQotICAgICAgICBz
ZXR0aW5nLnNldChzdHJpbmdzKTsKLSAgICB9Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgaW1wbCgpLT5zZXRTZXR0
aW5nKGtleSwgc2V0dGluZyk7Ci0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNW
YWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OndyYXBDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXI6OndyYXAoZXhlYywgYXJncy5hdCgwKSk7Ci19Ci0KLSNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJlbnRD
YWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKLXsKLSAgICBKYXZhU2Ny
aXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBpbXBsKCktPmN1cnJlbnRDYWxsRnJhbWUoKTsKLSAg
ICBpZiAoIWNhbGxGcmFtZSB8fCAhY2FsbEZyYW1lLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEkgYW0gbm90IHN1cmUgaWYgdGhpcyBp
cyBhY3R1YWxseSBuZWVkZWQuIENhbiB3ZSBqdXN0IHVzZSBleGVjPwotICAgIEV4ZWNTdGF0ZSog
Z2xvYmFsRXhlYyA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIHJldHVybiBKU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXI6OndyYXAoZ2xvYmFsRXhlYywgdG9KUyhleGVjLCBjYWxsRnJhbWUp
KTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVzKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmKQotewotICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXN1bHQ7Ci0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxQcm9maWxlPiA+JiBwcm9maWxlcyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQodG9KUyhleGVjLCBwcm9maWxlc1tpXS5nZXQoKSkpOwotCi0gICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVj
dC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKaW5kZXggN2Y2Mzkx
ZC4uMDNlNmQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3Qu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcApAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCi0jaW5jbHVkZSAiSlNJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSlNJ
bnNwZWN0b3JCYWNrZW5kLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC0x
MjMsNyArMTIzLDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFMKICAgICByZXR1cm4gaGFuZGxl
RXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAotYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNv
bnRyb2xsZXIqIHZhbHVlKQorYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQqIHZhbHVl
KQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5wdXREaXJlY3QoSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIHRv
SlMoc2NyaXB0U3RhdGUsIHZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaAppbmRl
eCBlZDg2NjU5Li45NzAyMmRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dE9iamVjdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKQEAgLTM4
LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL1Byb3RlY3QuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CisgICAgY2xhc3MgSW5zcGVj
dG9yQmFja2VuZDsKIAogICAgIGNsYXNzIFNjcmlwdE9iamVjdCA6IHB1YmxpYyBTY3JpcHRWYWx1
ZSB7CiAgICAgcHVibGljOgpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgU2NyaXB0R2xvYmFsT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9i
amVjdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFy
KiBuYW1lLCBJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgICAgIHN0YXRpYyBib29sIHNldChT
Y3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQqKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgU2NyaXB0
T2JqZWN0Jik7CiAgICAgICAgIHN0YXRpYyBib29sIHJlbW92ZShTY3JpcHRTdGF0ZSosIGNvbnN0
IGNoYXIqIG5hbWUpOwogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTU9iamVjdHNJbmNsdWRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJ
bmNsdWRlLmgKaW5kZXggODZlNTc1NC4uZGIxNjQ5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
T2JqZWN0c0luY2x1ZGUuaApAQCAtODQsNyArODQsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiTG9jYXRpb24uaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAppbmRleCBjMjk0MWMzLi4zNWUxZDVl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAK
QEAgLTE1MCw3ICsxNTAsNyBAQAogI2luY2x1ZGUgImJpbmRpbmdzL1Y4SFRNTFVMaXN0RWxlbWVu
dC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhIVE1MVmlkZW9FbGVtZW50LmNwcCIKICNpbmNs
dWRlICJiaW5kaW5ncy9WOEltYWdlRGF0YS5jcHAiCi0jaW5jbHVkZSAiYmluZGluZ3MvVjhJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOEluc3BlY3RvckJhY2tl
bmQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4S2V5Ym9hcmRFdmVudC5jcHAiCiAjaW5jbHVk
ZSAiYmluZGluZ3MvVjhMb2NhdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhNZWRpYUVy
cm9yLmNwcCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcAppbmRleCBjMjI0NjUxLi4w
ZjUwMGZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwCkBAIC0xMTYsMTAgKzEx
NiwxMCBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgUwogICAgIHJldHVybiBzY29wZS5zdWNjZXNz
KCk7CiB9CiAKLWJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JDb250cm9sbGVyKiB2YWx1ZSkKK2Jv
b2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25z
dCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JCYWNrZW5kKiB2YWx1ZSkKIHsKICAgICBTY3JpcHRTY29w
ZSBzY29wZShzY3JpcHRTdGF0ZSk7Ci0gICAgc2NvcGUuZ2xvYmFsKCktPlNldCh2ODo6U3RyaW5n
OjpOZXcobmFtZSksIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpJTlNQRUNUT1JDT05UUk9MTEVSLCB2YWx1ZSkpOworICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQo
djg6OlN0cmluZzo6TmV3KG5hbWUpLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VORCwgdmFsdWUpKTsKICAgICByZXR1cm4gc2NvcGUu
c3VjY2VzcygpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9i
amVjdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuaAppbmRleCBlNTYxOGFi
Li4yZDBhZGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmgKQEAgLTM2LDcgKzM2LDcg
QEAKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKKyAgICBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogICAgIGNsYXNz
IFNjcmlwdFN0YXRlOwogCiAgICAgY2xhc3MgU2NyaXB0T2JqZWN0IDogcHVibGljIFNjcmlwdFZh
bHVlIHsKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNj
cmlwdEdsb2JhbE9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgYm9vbCBzZXQo
U2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmKTsKLSAg
ICAgICAgc3RhdGljIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5z
cGVjdG9yQ29udHJvbGxlciopOworICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUq
LCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JCYWNrZW5kKik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYpOwog
ICAgICAgICBzdGF0aWMgYm9vbCByZW1vdmUoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
KTsKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAKaW5kZXggYWZhODFjYi4uODY2
NmQ0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCkBAIC0xMzksNyArMTM5LDcgQEAKICNpbmNs
dWRlICJWOEhUTUxUaXRsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOEhUTUxVTGlzdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJWOEltYWdlRGF0YS5oIgotI2luY2x1ZGUgIlY4SW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlY4SW5zcGVjdG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIlY4TWVk
aWFMaXN0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUgIlY4TWVz
c2FnZUV2ZW50LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCmluZGV4IDU3ZjQ0NjAuLmZmN2E1YWYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5oCkBAIC0zMzMsNyArMzMzLDcgQEAgdHlwZWRlZiB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpGdW5jdGlvblRlbXBsYXRlRmFjdG9yeSkoKTsK
ICAgICBWKEhUTUxPUFRJT05TQ09MTEVDVElPTiwgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKSAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBWKElNQUdFREFUQSwgSW1hZ2VEYXRhKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKENBTlZBU1BJWEVMQVJS
QVksIENhbnZhc1BpeGVsQXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBWKElOU1BFQ1RPUkNPTlRST0xMRVIsIEluc3BlY3RvckNvbnRyb2xsZXIpICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBWKElOU1BFQ1RPUkJBQ0tFTkQsIEluc3BlY3RvckJhY2tlbmQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKEtFWUJPQVJERVZFTlQsIEtl
eWJvYXJkRXZlbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBW
KExPQ0FUSU9OLCBMb2NhdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBWKE1FRElBTElTVCwgTWVkaWFMaXN0KQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAppbmRleCBmZDhmZjE0Li5kMWIyZmExIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtMzgz
LDIzICszODMsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBERUNMQVJFX0NBTExC
QUNLKFRyZWVXYWxrZXJOZXh0U2libGluZyk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soVHJl
ZVdhbGtlclByZXZpb3VzU2libGluZyk7CiAKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyUHJvZmlsZXMpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3Bl
Y3RvckNvbnRyb2xsZXJIaWdobGlnaHRET01Ob2RlKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhJbnNwZWN0b3JDb250cm9sbGVyQWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKTsKLSAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVyR2V0UmVzb3VyY2VEb2N1bWVudE5v
ZGUpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJBZGRTb3Vy
Y2VUb0ZyYW1lKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVy
U2VhcmNoKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVyU2V0
dGluZyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxlckluc3Bl
Y3RlZFdpbmRvdyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxl
clNldFNldHRpbmcpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xs
ZXJDdXJyZW50Q2FsbEZyYW1lKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JD
b250cm9sbGVyRGVidWdnZXJFbmFibGVkKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyUGF1c2VPbkV4Y2VwdGlvbnMpOwotICAgICAgICBERUNMQVJFX0NBTExC
QUNLKEluc3BlY3RvckNvbnRyb2xsZXJQcm9maWxlckVuYWJsZWQpOworICAgICAgICBERUNMQVJF
X0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQcm9maWxlcyk7CisgICAgICAgIERFQ0xBUkVfQ0FM
TEJBQ0soSW5zcGVjdG9yQmFja2VuZEhpZ2hsaWdodERPTU5vZGUpOworICAgICAgICBERUNMQVJF
X0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRBZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUpOworICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRBZGRTb3VyY2VUb0ZyYW1lKTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kU2VhcmNoKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kU2V0dGluZyk7CisgICAgICAgIERF
Q0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZEluc3BlY3RlZFdpbmRvdyk7CisgICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZFNldFNldHRpbmcpOworICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRDdXJyZW50Q2FsbEZyYW1lKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kRGVidWdnZXJFbmFibGVkKTsKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kUGF1c2VPbkV4Y2VwdGlvbnMp
OworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQcm9maWxlckVuYWJs
ZWQpOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyRGF0YWJhc2VUYWJsZU5hbWVzKTsKKyAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhJbnNwZWN0b3JCYWNrZW5kRGF0YWJhc2VUYWJsZU5hbWVzKTsKICNlbmRpZgotICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJXcmFwQ2FsbGJhY2spOworICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRXcmFwQ2FsbGJhY2spOwogCiAg
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soTm9kZUl0ZXJhdG9yTmV4dE5vZGUpOwogICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKE5vZGVJdGVyYXRvclByZXZpb3VzTm9kZSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDczZDdlCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9t
LmNwcApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
VGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisKKyNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNMKElu
c3BlY3RvckJhY2tlbmRIaWdobGlnaHRET01Ob2RlKQoreworICAgIElOQ19TVEFUUygiSW5zcGVj
dG9yQmFja2VuZC5oaWdobGlnaHRET01Ob2RlKCkiKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIE5vZGUqIG5vZGUg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJh
Y2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNr
ZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAg
IGluc3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodChub2RlKTsKKworICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kU2VhcmNo
KQoreworICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC5zZWFyY2goKSIpOworCisgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIHRhcmdl
dCA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSk7CisgICAgaWYgKHRhcmdl
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICB2ODo6
TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldygpOworICAgIFJlZlB0cjxS
YW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG5vZGUpKTsKKworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGludCBpbmRleCA9IDA7CisgICAgZG8geworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRh
cmdldCwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQo
ZWMpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQSBub24tY29sbGFwc2VkIHJl
c3VsdCByYW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0aWxsIG5vdAor
ICAgICAgICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0NTA5MzI4KS4g
QnJlYWsgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5l
d1N0YXJ0ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFN
KTsKKyAgICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNlYXJjaFJh
bmdlLmdldCgpLCBET1dOU1RSRUFNKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJl
c3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdDxSYW5nZT4oVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVzdWx0UmFuZ2UuZ2V0KCkp
KTsKKworICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAg
IH0gd2hpbGUgKHRydWUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShE
QVRBQkFTRSkKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kRGF0YWJhc2VUYWJs
ZU5hbWVzKQoreworICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC5kYXRhYmFzZVRhYmxl
TmFtZXMoKSIpOworICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6
TmV3KDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworQ0FMTEJBQ0tfRlVOQ19E
RUNMKEluc3BlY3RvckJhY2tlbmRJbnNwZWN0ZWRXaW5kb3cpCit7CisgICAgSU5DX1NUQVRTKCJJ
bnNwZWN0b3JCYWNrZW5kLmluc3BlY3RlZFdpbmRvdygpIik7CisKKyAgICBJbnNwZWN0b3JCYWNr
ZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCBhcmdz
LkhvbGRlcigpKTsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckJhY2tl
bmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGljLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpLT5kb21XaW5kb3coKSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJ
bnNwZWN0b3JCYWNrZW5kU2V0dGluZykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2V0dGluZygpIik7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzBdKTsKKyAgICBpZiAoa2V5LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3Rv
ckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JC
YWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQmFja2VuZC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGlj
LT5zZXR0aW5nKGtleSk7CisKKyAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9U
eXBlOgorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJ
bnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAgICAgICAgcmV0
dXJuIHY4U3RyaW5nKHNldHRpbmcuc3RyaW5nKCkpOworICAgICAgICBjYXNlIEluc3BlY3RvckNv
bnRyb2xsZXI6OlNldHRpbmc6OkRvdWJsZVR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6Ok51
bWJlcjo6TmV3KHNldHRpbmcuZG91YmxlVmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5zcGVjdG9y
Q29udHJvbGxlcjo6U2V0dGluZzo6SW50ZWdlclR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6
Ok51bWJlcjo6TmV3KHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgorICAgICAgICAgICAgcmV0dXJu
IHY4Qm9vbGVhbihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7CisgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3RyaW5nVmVjdG9yKCk7Cisg
ICAgICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBzdHJpbmdzQXJyYXkgPSB2ODo6QXJyYXk6
Ok5ldyhzdHJpbmdzLnNpemUoKSk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGgg
PSBzdHJpbmdzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXktPlNldCh2ODo6TnVtYmVy
OjpOZXcoaSksIHY4U3RyaW5nKHN0cmluZ3NbaV0pKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJp
bmdzQXJyYXk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNw
ZWN0b3JCYWNrZW5kU2V0U2V0dGluZykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2V0U2V0dGluZygpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7CisgICAgaWYgKGtleS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0
aW5nIHNldHRpbmc7CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3NbMV07
CisgICAgaWYgKHZhbHVlLT5Jc1VuZGVmaW5lZCgpIHx8IHZhbHVlLT5Jc051bGwoKSkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KKyAgICAg
ICAgQVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
Ok5vVHlwZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgc2V0
dGluZy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSkpOworICAgIGVsc2Ug
aWYgKHZhbHVlLT5Jc051bWJlcigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVy
VmFsdWUoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICBzZXR0
aW5nLnNldCh2YWx1ZS0+Qm9vbGVhblZhbHVlKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0Fy
cmF5KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2Nh
bDx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5n
czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpdGVtID0gdG9XZWJDb3JlU3RyaW5nKHY4QXJyYXkt
PkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKSk7CisgICAgICAgICAgICBpZiAoaXRlbS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IHN0cmluZ3MuYXBwZW5kKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIHNldHRpbmcuc2V0KHN0
cmluZ3MpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVD
VE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMg
PSBpbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgaWYgKGljKQor
ICAgICAgICBpbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRp
bmcoa2V5LCBzZXR0aW5nKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0NB
TExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kV3JhcENhbGxiYWNrKQoreworICAgIElO
Q19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC53cmFwQ2FsbGJhY2soKSIpOworICAgIHJldHVybiBh
cmdzWzBdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1N2MyYy4uMDAwMDAwMAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJET01XaW5kb3cuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUmFuZ2Uu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJIaWdobGln
aHRET01Ob2RlKQotewotICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5oaWdobGln
aHRET01Ob2RlKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKLSAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
YXJnc1swXSkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENs
YXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkpOwotICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmhpZ2hsaWdodChub2RlKTsKLQotICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVyR2V0UmVz
b3VyY2VEb2N1bWVudE5vZGUpCi17Ci0gICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVy
LmdldFJlc291cmNlRG9jdW1lbnROb2RlKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIGlmICghYXJnc1sxXS0+
SXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHVuc2ln
bmVkIGlkZW50aWZpZXIgPSBhcmdzWzFdLT5JbnQzMlZhbHVlKCk7Ci0KLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JD
T05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+
IHJlc291cmNlID0gaW5zcGVjdG9yQ29udHJvbGxlci0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZp
ZXIpOwotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IHJlc291cmNlLT5m
cmFtZSgpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotCi0g
ICAgaWYgKGRvY3VtZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzSW1hZ2VE
b2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9DVU1FTlQsIGRvY3VtZW50KTsKLX0KLQotQ0FMTEJBQ0tf
RlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZWFyY2gpCi17Ci0gICAgSU5DX1NUQVRTKCJJ
bnNwZWN0b3JDb250cm9sbGVyLnNlYXJjaCgpIik7Ci0KLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8
IDIpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBOb2RlKiBub2RlID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0ID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzFdKTsKLSAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJl
c3VsdCA9IHY4OjpBcnJheTo6TmV3KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShy
YW5nZU9mQ29udGVudHMobm9kZSkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
aW50IGluZGV4ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFu
Z2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBmYWxzZSkp
OwotICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChlYykpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBz
b21lIGZ1bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90Ci0gICAgICAgIC8vIGFkdmFuY2Ug
dGhlIHJhbmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0byBhdm9pZCBpbmZp
bml0ZSBsb29wLgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxl
UG9zaXRpb24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3
U3RhcnQgPT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJF
QU0pKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcmVzdWx0LT5TZXQodjg6Ok51bWJl
cjo6TmV3KGluZGV4KyspLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0PFJhbmdlPihW
OENsYXNzSW5kZXg6OlJBTkdFLCByZXN1bHRSYW5nZS5nZXQoKSkpOwotCi0gICAgICAgIHNldFN0
YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7Ci0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotQ0FMTEJBQ0tf
RlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJEYXRhYmFzZVRhYmxlTmFtZXMpCi17Ci0gICAg
SU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLmRhdGFiYXNlVGFibGVOYW1lcygpIik7Ci0g
ICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcoMCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1DQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9y
Q29udHJvbGxlckluc3BlY3RlZFdpbmRvdykKLXsKLSAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNv
bnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkiKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIs
IGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvbVdpbmRvdygpKTsKLX0KLQotQ0FM
TEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZXR0aW5nKQotewotICAgIElOQ19T
VEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5zZXR0aW5nKCkiKTsKLQotICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFN0cmlu
ZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwotICAgIGlmIChr
ZXkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6SU5T
UEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgY29uc3QgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGluc3BlY3RvckNvbnRyb2xsZXIgLT5zZXR0aW5n
KGtleSk7Ci0KLSAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlOgotICAg
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JD
b250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIHY4U3Ry
aW5nKHNldHRpbmcuc3RyaW5nKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6
OlNldHRpbmc6OkRvdWJsZVR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3
KHNldHRpbmcuZG91YmxlVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxl
cjo6U2V0dGluZzo6SW50ZWdlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6
TmV3KHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRy
b2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgotICAgICAgICAgICAgcmV0dXJuIHY4Qm9vbGVh
bihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9s
bGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3RyaW5nVmVjdG9yKCk7Ci0gICAgICAgICAg
ICB2ODo6TG9jYWw8djg6OkFycmF5PiBzdHJpbmdzQXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhzdHJp
bmdzLnNpemUoKSk7Ci0gICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdz
LnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXktPlNldCh2ODo6TnVtYmVyOjpOZXcoaSks
IHY4U3RyaW5nKHN0cmluZ3NbaV0pKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdzQXJyYXk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250
cm9sbGVyU2V0U2V0dGluZykKLXsKLSAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNvbnRyb2xsZXIu
c2V0U2V0dGluZygpIik7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgaWYgKGtleS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5n
IHNldHRpbmc7Ci0KLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3NbMV07Ci0g
ICAgaWYgKHZhbHVlLT5Jc1VuZGVmaW5lZCgpIHx8IHZhbHVlLT5Jc051bGwoKSkgewotICAgICAg
ICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KLSAgICAgICAg
QVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5v
VHlwZSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKLSAgICAgICAgc2V0dGlu
Zy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSkpOwotICAgIGVsc2UgaWYg
KHZhbHVlLT5Jc051bWJlcigpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVyVmFs
dWUoKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbigpKQotICAgICAgICBzZXR0aW5n
LnNldCh2YWx1ZS0+Qm9vbGVhblZhbHVlKCkpOwotICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0FycmF5
KCkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2NhbDx2
ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5nczsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgIFN0cmluZyBpdGVtID0gdG9XZWJDb3JlU3RyaW5nKHY4QXJyYXktPkdl
dCh2ODo6SW50ZWdlcjo6TmV3KGkpKSk7Ci0gICAgICAgICAgICBpZiAoaXRlbS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIHN0
cmluZ3MuYXBwZW5kKGl0ZW0pOwotICAgICAgICB9Ci0gICAgICAgIHNldHRpbmcuc2V0KHN0cmlu
Z3MpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAg
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6
SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW5zcGVjdG9yQ29udHJv
bGxlci0+c2V0U2V0dGluZyhrZXksIHNldHRpbmcpOwotCi0gICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJXcmFwQ2Fs
bGJhY2spCi17Ci0gICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFj
aygpIik7Ci0gICAgcmV0dXJuIGFyZ3NbMF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzA4NWJlOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgorCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yUmVzb3VyY2UuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorI2lu
Y2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIuaCIKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitJbnNwZWN0b3JCYWNrZW5kOjpJbnNwZWN0b3JCYWNrZW5kKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIDogbV9p
bnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgLCBtX2NsaWVudChj
bGllbnQpCit7Cit9CisKK0luc3BlY3RvckJhY2tlbmQ6On5JbnNwZWN0b3JCYWNrZW5kKCkKK3sK
K30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpoaWRlRE9NTm9kZUhpZ2hsaWdodCgpCit7Cisg
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5oaWRlSGlnaGxpZ2h0KCk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kOjpsb2Nh
bGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmxvY2FsaXplZFN0cmlu
Z3NVUkwoKTsKK30KKworU3RyaW5nIEluc3BlY3RvckJhY2tlbmQ6OmhpZGRlblBhbmVscygpCit7
CisgICAgcmV0dXJuIG1fY2xpZW50LT5oaWRkZW5QYW5lbHMoKTsKK30KKwordm9pZCBJbnNwZWN0
b3JCYWNrZW5kOjp3aW5kb3dVbmxvYWRpbmcoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRy
b2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xvc2UoKTsKK30KKworYm9v
bCBJbnNwZWN0b3JCYWNrZW5kOjppc1dpbmRvd1Zpc2libGUoKQoreworICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPndp
bmRvd1Zpc2libGUoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjphZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUobG9uZyBpZGVudGlm
aWVyLCBOb2RlKiBmcmFtZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBt
X2luc3BlY3RvckNvbnRyb2xsZXItPnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKKyAgICBp
ZiAocmVzb3VyY2UpIHsKKyAgICAgICAgU3RyaW5nIHNvdXJjZVN0cmluZyA9IHJlc291cmNlLT5z
b3VyY2VTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFzb3VyY2VTdHJpbmcuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgYWRkU291cmNlVG9GcmFtZShyZXNvdXJjZS0+bWltZVR5cGUoKSwgc291cmNlU3Ry
aW5nLCBmcmFtZSk7CisgICAgfQorfQorCitib29sIEluc3BlY3RvckJhY2tlbmQ6OmFkZFNvdXJj
ZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIE5v
ZGUqIGZyYW1lTm9kZSkKK3sKKyAgICBBU1NFUlRfQVJHKGZyYW1lTm9kZSwgZnJhbWVOb2RlKTsK
KworICAgIGlmICghZnJhbWVOb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWZyYW1lTm9kZS0+YXR0YWNoZWQoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVChmcmFtZU5vZGUtPmlz
RWxlbWVudE5vZGUoKSk7CisgICAgaWYgKCFmcmFtZU5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihmcmFtZU5vZGUpOworICAgIEFTU0VSVChlbGVtZW50LT5pc0ZyYW1lT3duZXJF
bGVtZW50KCkpOworICAgIGlmICghZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3du
ZXIgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KTsKKyAgICBB
U1NFUlQoZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCkpOworICAgIGlmICghZnJhbWVPd25lci0+
Y29udGVudEZyYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZyYW1lTG9hZGVy
KiBsb2FkZXIgPSBmcmFtZU93bmVyLT5jb250ZW50RnJhbWUoKS0+bG9hZGVyKCk7CisKKyAgICBs
b2FkZXItPnNldFJlc3BvbnNlTUlNRVR5cGUobWltZVR5cGUpOworICAgIGxvYWRlci0+YmVnaW4o
KTsKKyAgICBsb2FkZXItPndyaXRlKHNvdXJjZSk7CisgICAgbG9hZGVyLT5lbmQoKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNsZWFyTWVzc2FnZXMo
KQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKK30KKwordm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjp0b2dnbGVOb2RlU2VhcmNoKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9s
bGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnRvZ2dsZVNlYXJjaEZvck5vZGVJ
blBhZ2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjphdHRhY2goKQoreworICAgIGlm
IChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
YXR0YWNoV2luZG93KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZGV0YWNoKCkKK3sK
KyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRldGFjaFdpbmRvdygpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KGhlaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c3RvcmVM
YXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCit7CisgICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdG9yZUxh
c3RBY3RpdmVQYW5lbChwYW5lbE5hbWUpOworfQorCitib29sIEluc3BlY3RvckJhY2tlbmQ6OnNl
YXJjaGluZ0Zvck5vZGUoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNlYXJjaGluZ0Zvck5vZGVJblBhZ2Uo
KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpsb2FkZWQoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAg
ICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2NyaXB0T2JqZWN0UmVhZHkoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjplbmFibGVSZXNvdXJjZVRyYWNraW5nKGJvb2wgYWx3YXlzKQor
eworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZW5hYmxlUmVzb3VyY2VUcmFja2luZyhhbHdheXMpOworfQorCit2b2lkIEluc3Bl
Y3RvckJhY2tlbmQ6OmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGJvb2wgYWx3YXlzKQoreworICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoYWx3YXlzKTsKK30KKworYm9vbCBJbnNwZWN0b3JC
YWNrZW5kOjpyZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxv
YXQgeSkgY29uc3QKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPm1vdmVXaW5kb3dCeSh4LCB5KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JCYWNrZW5kOjpjbG9zZVdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jbG9zZVdpbmRvdygpOworfQor
Citjb25zdCBTdHJpbmcmIEluc3BlY3RvckJhY2tlbmQ6OnBsYXRmb3JtKCkgY29uc3QKK3sKKyNp
ZiBQTEFURk9STShNQUMpCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgibWFjLXRpZ2VyIikpOworI2Vsc2UK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgibWFjLWxl
b3BhcmQiKSk7CisjZW5kaWYKKyNlbGlmIFBMQVRGT1JNKFdJTl9PUykKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgid2luZG93cyIpKTsKKyNlbGlmIFBM
QVRGT1JNKFFUKQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwbGF0Zm9y
bSwgKCJxdCIpKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgiZ3RrIikpOworI2VsaWYgUExBVEZPUk0oV1gpCisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInd4IikpOwor
I2Vsc2UKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgi
dW5rbm93biIpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHBsYXRmb3JtOworfQorCisjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCitjb25zdCBQcm9maWxlc0FycmF5JiBJbnNwZWN0b3JC
YWNrZW5kOjpwcm9maWxlcygpIGNvbnN0Cit7ICAgIAorICAgIGlmIChtX2luc3BlY3RvckNvbnRy
b2xsZXIpCisgICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPnByb2ZpbGVzKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbV9lbXB0eVByb2ZpbGVzOworfQorCit2b2lkIElu
c3BlY3RvckJhY2tlbmQ6OnN0YXJ0UHJvZmlsaW5nKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0YXJ0VXNlckluaXRp
YXRlZFByb2ZpbGluZygpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0b3BQcm9maWxp
bmcoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjplbmFibGVQcm9maWxlcihib29sIGFsd2F5cykKK3sKKyAgICBpZiAo
bV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVu
YWJsZVByb2ZpbGVyKGFsd2F5cyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzYWJs
ZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGlzYWJsZVByb2ZpbGVyKGFsd2F5cyk7
Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXJFbmFibGVkKCkKK3sKKyAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5wcm9maWxlckVuYWJsZWQoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjplbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5
cykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGFsd2F5cyk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQoreworICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZGlzYWJsZURlYnVnZ2VyKGFsd2F5cyk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6
ZGVidWdnZXJFbmFibGVkKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckVuYWJsZWQo
KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKK30KKworSmF2YVNjcmlwdENhbGxG
cmFtZSogSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuY3VycmVudENhbGxGcmFtZSgp
OworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmFkZEJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKK3sKKyAgICBpbnRwdHJfdCBzb3VyY2VJ
RFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKKyAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLmFkZEJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwgbGluZU51bWJlcik7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNv
dXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKQoreworICAgIGludHB0cl90IHNvdXJjZUlEVmFs
dWUgPSBzb3VyY2VJRC50b0ludFB0cigpOworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkucmVtb3ZlQnJlYWtwb2ludChzb3VyY2VJRFZhbHVlLCBsaW5lTnVtYmVyKTsKK30KKwor
Ym9vbCBJbnNwZWN0b3JCYWNrZW5kOjpwYXVzZU9uRXhjZXB0aW9ucygpCit7CisgICAgcmV0dXJu
IEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VPbkV4Y2VwdGlvbnMoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhib29sIHBhdXNl
KQoreworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbkV4Y2Vw
dGlvbnMocGF1c2UpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnBhdXNlSW5EZWJ1Z2dl
cigpCit7CisgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5wYXVzZVByb2dyYW0o
KTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpyZXN1bWVEZWJ1Z2dlcigpCit7CisgICAg
aWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5yZXN1bWVEZWJ1Z2dlcigpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0ZXBPdmVy
U3RhdGVtZW50SW5EZWJ1Z2dlcigpCit7CisgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5zdGVwT3ZlclN0YXRlbWVudCgpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0
ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpCit7CisgICAgSmF2YVNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5zdGVwSW50b1N0YXRlbWVudCgpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tl
bmQ6OnN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcigpCit7CisgICAgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5zdGVwT3V0T2ZGdW5jdGlvbigpOworfQorCisjZW5kaWYKKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpoaWdobGlnaHQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhpZ2hs
aWdodChub2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDdl
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZF9oCisjZGVm
aW5lIEluc3BlY3RvckJhY2tlbmRfaAorCisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDYWNoZWRSZXNvdXJjZTsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEphdmFTY3Jp
cHRDYWxsRnJhbWU7CitjbGFzcyBOb2RlOworCitjbGFzcyBJbnNwZWN0b3JCYWNrZW5kIDogcHVi
bGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZD4KK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhY2tlbmQoaW5zcGVjdG9yQ29udHJv
bGxlciwgY2xpZW50KSk7CisgICAgfQorCisgICAgfkluc3BlY3RvckJhY2tlbmQoKTsKKworICAg
IEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2lu
c3BlY3RvckNvbnRyb2xsZXI7IH0KKyAgICAKKyAgICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVy
KCkgeyBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSAwOyB9CisKKyAgICB2b2lkIGhpZGVET01Ob2Rl
SGlnaGxpZ2h0KCk7CisKKyAgICBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOworICAgIFN0
cmluZyBoaWRkZW5QYW5lbHMoKTsKKworICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7CisKKyAg
ICBib29sIGlzV2luZG93VmlzaWJsZSgpOworCisgICAgdm9pZCBhZGRSZXNvdXJjZVNvdXJjZVRv
RnJhbWUobG9uZyBpZGVudGlmaWVyLCBOb2RlKiBmcmFtZSk7CisgICAgYm9vbCBhZGRTb3VyY2VU
b0ZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2Rl
KiBmcmFtZSk7CisKKyAgICB2b2lkIGNsZWFyTWVzc2FnZXMoKTsKKworICAgIHZvaWQgdG9nZ2xl
Tm9kZVNlYXJjaCgpOworCisgICAgdm9pZCBhdHRhY2goKTsKKyAgICB2b2lkIGRldGFjaCgpOwor
CisgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworCisg
ICAgdm9pZCBzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSk7CisK
KyAgICBib29sIHNlYXJjaGluZ0Zvck5vZGUoKTsKKworICAgIHZvaWQgbG9hZGVkKCk7CisKKyAg
ICB2b2lkIGVuYWJsZVJlc291cmNlVHJhY2tpbmcoYm9vbCBhbHdheXMpOworICAgIHZvaWQgZGlz
YWJsZVJlc291cmNlVHJhY2tpbmcoYm9vbCBhbHdheXMpOworICAgIGJvb2wgcmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZs
b2F0IHkpIGNvbnN0OworICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKKworICAgIGNvbnN0IFN0cmlu
ZyYgcGxhdGZvcm0oKSBjb25zdDsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
ICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzKCkgY29uc3Q7CisKKyAgICB2b2lkIHN0
YXJ0UHJvZmlsaW5nKCk7CisgICAgdm9pZCBzdG9wUHJvZmlsaW5nKCk7CisKKyAgICB2b2lkIGVu
YWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKTsKKyAgICB2b2lkIGRpc2FibGVQcm9maWxlcihib29s
IGFsd2F5cyk7CisgICAgYm9vbCBwcm9maWxlckVuYWJsZWQoKTsKKworICAgIHZvaWQgZW5hYmxl
RGVidWdnZXIoYm9vbCBhbHdheXMpOworICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3
YXlzKTsKKyAgICBib29sIGRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0OworCisgICAgSmF2YVNjcmlw
dENhbGxGcmFtZSogY3VycmVudENhbGxGcmFtZSgpIGNvbnN0OworCisgICAgdm9pZCBhZGRCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOworICAg
IHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyKTsKKworICAgIGJvb2wgcGF1c2VPbkV4Y2VwdGlvbnMoKTsKKyAgICB2b2lkIHNl
dFBhdXNlT25FeGNlcHRpb25zKGJvb2wgcGF1c2UpOworCisgICAgdm9pZCBwYXVzZUluRGVidWdn
ZXIoKTsKKyAgICB2b2lkIHJlc3VtZURlYnVnZ2VyKCk7CisKKyAgICB2b2lkIHN0ZXBPdmVyU3Rh
dGVtZW50SW5EZWJ1Z2dlcigpOworICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2Vy
KCk7CisgICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKKyNlbmRpZgorCisg
ICAgLy8gR2VuZXJpYyBjb2RlIGNhbGxlZCBmcm9tIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMuCisg
ICAgdm9pZCBoaWdobGlnaHQoTm9kZSogbm9kZSk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9y
QmFja2VuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXI7CisgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBQcm9maWxl
c0FycmF5IG1fZW1wdHlQcm9maWxlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmRfaCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFl
NmQ5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBN
YXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBjb3JlIHsKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yCisgICAgXSBJbnNwZWN0b3JCYWNrZW5kIHsK
KyAgICAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworICAgICAgICBbQ3VzdG9tXSB2
b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4gTm9kZSBub2RlKTsKKyAgICAgICAgdm9pZCBsb2FkZWQo
KTsKKyAgICAgICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBhdHRhY2go
KTsKKyAgICAgICAgdm9pZCBkZXRhY2goKTsKKworICAgICAgICB2b2lkIGNsb3NlV2luZG93KCk7
CisgICAgICAgIHZvaWQgY2xlYXJNZXNzYWdlcygpOworICAgICAgICB2b2lkIHRvZ2dsZU5vZGVT
ZWFyY2goKTsKKworICAgICAgICBib29sZWFuIGlzV2luZG93VmlzaWJsZSgpOworICAgICAgICBi
b29sZWFuIHNlYXJjaGluZ0Zvck5vZGUoKTsKKworICAgICAgICB2b2lkIGFkZFJlc291cmNlU291
cmNlVG9GcmFtZShpbiBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBi
b29sZWFuIGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJp
bmcgc291cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHNl
YXJjaChpbiBOb2RlIG5vZGUsIGluIERPTVN0cmluZyBxdWVyeSk7CisjaWYgZGVmaW5lZChFTkFC
TEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBbQ3VzdG9tXSBET01PYmpl
Y3QgZGF0YWJhc2VUYWJsZU5hbWVzKGluIERhdGFiYXNlIGRhdGFiYXNlKTsKKyNlbmRpZgorICAg
ICAgICBbQ3VzdG9tXSBET01PYmplY3Qgc2V0dGluZyhpbiBET01TdHJpbmcga2V5KTsKKyAgICAg
ICAgW0N1c3RvbV0gdm9pZCBzZXRTZXR0aW5nKGluIERPTVN0cmluZyBrZXksIGluIERPTU9iamVj
dCAgdmFsdWUpOworICAgICAgICBbQ3VzdG9tXSBET01XaW5kb3cgaW5zcGVjdGVkV2luZG93KCk7
CisgICAgICAgIERPTVN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CisgICAgICAgIERPTVN0
cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAgICAgRE9NU3RyaW5nIHBsYXRmb3JtKCk7CisgICAg
ICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPW1vdmVXaW5kb3dCeV0gdm9pZCBtb3ZlQnlVbnJl
c3RyaWN0ZWQoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAgICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQoaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICBbQ3VzdG9t
XSBET01PYmplY3Qgd3JhcENhbGxiYWNrKGluIERPTU9iamVjdCBjYWxsYmFjayk7CisgICAgICAg
IGJvb2xlYW4gcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBlbmFibGVS
ZXNvdXJjZVRyYWNraW5nKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAgICAgdm9pZCBkaXNhYmxl
UmVzb3VyY2VUcmFja2luZyhpbiBib29sZWFuIGFsd2F5cyk7CisgICAgICAgIHZvaWQgc3RvcmVM
YXN0QWN0aXZlUGFuZWwoaW4gRE9NU3RyaW5nIHBhbmVsTmFtZSk7CisKKyNpZiBkZWZpbmVkKEVO
QUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgor
ICAgICAgICBib29sZWFuIGRlYnVnZ2VyRW5hYmxlZCgpOworICAgICAgICB2b2lkIGVuYWJsZURl
YnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIo
aW4gYm9vbGVhbiBhbHdheXMpOworCisgICAgICAgIHZvaWQgYWRkQnJlYWtwb2ludChpbiBET01T
dHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7CisgICAgICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxv
bmcgbGluZU51bWJlcik7CisKKyAgICAgICAgdm9pZCBwYXVzZUluRGVidWdnZXIoKTsKKyAgICAg
ICAgdm9pZCByZXN1bWVEZWJ1Z2dlcigpOworCisgICAgICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1l
bnRJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2Vy
KCk7CisgICAgICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb25JbkRlYnVnZ2VyKCk7CisKKyAgICAg
ICAgW0N1c3RvbV0gRE9NT2JqZWN0IGN1cnJlbnRDYWxsRnJhbWUoKTsKKworICAgICAgICBib29s
ZWFuIHBhdXNlT25FeGNlcHRpb25zKCk7CisgICAgICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlv
bnMoaW4gYm9vbGVhbiBwYXVzZU9uRXhjZXB0aW9ucyk7CisKKyAgICAgICAgYm9vbGVhbiBwcm9m
aWxlckVuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBlbmFibGVQcm9maWxlcihpbiBib29sZWFuIGFs
d2F5cyk7CisgICAgICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGluIGJvb2xlYW4gYWx3YXlzKTsK
KworICAgICAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAgIHZvaWQgc3RvcFByb2Zp
bGluZygpOworCisgICAgICAgIFtDdXN0b21dIEFycmF5IHByb2ZpbGVzKCk7CisjZW5kaWYKKyAg
ICAgfTsKKyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4
IGM1MzFlZDYuLmYzYzJiOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKQEAgLTEwNiw2NSArMTA3LDYgQEAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIHN0YXRpYyBjb25zdCBmbG9h
dCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKIAotYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCi17Ci0gICAgQVNTRVJUX0FSRyhmcmFtZU5vZGUs
IGZyYW1lTm9kZSk7Ci0KLSAgICBpZiAoIWZyYW1lTm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFmcmFtZU5vZGUtPmF0dGFjaGVkKCkpIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
ZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIGlmICghZnJhbWVOb2RlLT5pc0VsZW1l
bnROb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWVOb2RlKTsKLSAgICBBU1NFUlQoZWxlbWVudC0+
aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVs
ZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxl
bWVudCk7Ci0gICAgQVNTRVJUKGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKTsKLSAgICBpZiAo
IWZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCktPmxvYWRl
cigpOwotCi0gICAgbG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBs
b2FkZXItPmJlZ2luKCk7Ci0gICAgbG9hZGVyLT53cml0ZShzb3VyY2UpOwotICAgIGxvYWRlci0+
ZW5kKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgU3RyaW5nJiBJbnNwZWN0b3JD
b250cm9sbGVyOjpwbGF0Zm9ybSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oTUFDKQotI2lmZGVm
IEJVSUxESU5HX09OX1RJR0VSCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHBsYXRmb3JtLCAoIm1hYy10aWdlciIpKTsKLSNlbHNlCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy1sZW9wYXJkIikpOwotI2VuZGlmCi0jZWxp
ZiBQTEFURk9STShXSU5fT1MpCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcs
IHBsYXRmb3JtLCAoIndpbmRvd3MiKSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgicXQiKSk7Ci0jZWxpZiBQTEFU
Rk9STShHVEspCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3Jt
LCAoImd0ayIpKTsKLSNlbGlmIFBMQVRGT1JNKFdYKQotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJ3eCIpKTsKLSNlbHNlCi0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInVua25vd24iKSk7Ci0jZW5kaWYKLQot
ICAgIHJldHVybiBwbGF0Zm9ybTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIHNfaW5zcGVjdG9yQ29u
dHJvbGxlckNvdW50Owogc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3JDb250cm9sbGVy
OjpTZXR0aW5nKj4qIHNfc2V0dGluZ0NhY2hlOwogCkBAIC0xODEsNiArMTIzLDcgQEAgSW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JD
bGllbnQqIGNsaWVudCkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCiAgICAgLCBtX3Jlc291
cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5nU2V0dGlu
Z3NMb2FkZWQoZmFsc2UpCisgICAgLCBtX2luc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQmFja2Vu
ZDo6Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKICAgICAsIG1fYXR0YWNoRGVidWdnZXJX
aGVuU2hvd24oZmFsc2UpCkBAIC0yMTUsNiArMTU4LDggQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
fkluc3BlY3RvckNvbnRyb2xsZXIoKQogICAgICAgICBkZWxldGUgc19zZXR0aW5nQ2FjaGU7CiAg
ICAgICAgIHNfc2V0dGluZ0NhY2hlID0gMDsKICAgICB9CisgICAgCisgICAgbV9pbnNwZWN0b3JC
YWNrZW5kLT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQpAQCAtMjg1LDIwICsyMzAsNiBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFNldHRpbmcmIHNldHRpbmcpCiAgICAgbV9jbGllbnQtPnN0b3JlU2V0dGluZyhrZXksIHNldHRp
bmcpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9jYWxpemVkU3RyaW5nc1VS
TCgpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gbV9jbGllbnQtPmxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLX0KLQotU3RyaW5nIElu
c3BlY3RvckNvbnRyb2xsZXI6OmhpZGRlblBhbmVscygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9jbGllbnQtPmhpZGRlblBh
bmVscygpOwotfQotCiAvLyBUcnlpbmcgdG8gaW5zcGVjdCBzb21ldGhpbmcgaW4gYSBmcmFtZSB3
aXRoIEphdmFTY3JpcHQgZGlzYWJsZWQgd291bGQgbGF0ZXIgbGVhZCB0bwogLy8gY3Jhc2hlcyB0
cnlpbmcgdG8gY3JlYXRlIEphdmFTY3JpcHQgd3JhcHBlcnMuIFNvbWUgZGF5IHdlIGNvdWxkIGZp
eCB0aGlzIGlzc3VlLCBidXQKIC8vIGZvciBub3cgcHJldmVudCBjcmFzaGVzIGhlcmUgYnkgbmV2
ZXIgdGFyZ2V0aW5nIGEgbm9kZSBpbiBzdWNoIGEgZnJhbWUuCkBAIC01MzYsMTkgKzQ2Nyw2IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dG9nZ2xlU2VhcmNoRm9yTm9kZUluUGFnZSgpCiAg
ICAgICAgIGhpZGVIaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjph
ZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUobG9uZyBpZGVudGlmaWVyLCBOb2RlKiBmcmFtZSkKLXsK
LSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IHJlc291cmNlcygpLmdldChp
ZGVudGlmaWVyKTsKLSAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgU3RyaW5nIHNvdXJjZVN0
cmluZyA9IHJlc291cmNlLT5zb3VyY2VTdHJpbmcoKTsKLSAgICAgICAgaWYgKCFzb3VyY2VTdHJp
bmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRkU291cmNlVG9GcmFtZShyZXNvdXJjZS0+bWlt
ZVR5cGUoKSwgc291cmNlU3RyaW5nLCBmcmFtZSk7Ci0gICAgfQotfQotCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgdW5zaWduZWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fc2VhcmNoaW5n
Rm9yTm9kZSkKQEAgLTU5MCw3ICs1MDgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Ondp
bmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpCiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxBY2Nlc3MoKTsKIAogICAg
IG1fc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1fcGFnZSk7Ci0gICAgU2NyaXB0
R2xvYmFsT2JqZWN0OjpzZXQobV9zY3JpcHRTdGF0ZSwgIkluc3BlY3RvckNvbnRyb2xsZXIiLCB0
aGlzKTsKKyAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX3NjcmlwdFN0YXRlLCAiSW5zcGVj
dG9yQ29udHJvbGxlciIsIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQpAQCAtMTMyMCwyOCArMTIzOCw2
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlz
KQogICAgICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiB9CiAKLUphdmFT
Y3JpcHRDYWxsRnJhbWUqIEluc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJlbnRDYWxsRnJhbWUoKSBj
b25zdAotewotICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmN1cnJl
bnRDYWxsRnJhbWUoKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpwYXVzZU9uRXhj
ZXB0aW9ucygpCi17Ci0gICAgcmV0dXJuIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
cGF1c2VPbkV4Y2VwdGlvbnMoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRQ
YXVzZU9uRXhjZXB0aW9ucyhib29sIHBhdXNlKQotewotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6c2hhcmVkKCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnMocGF1c2UpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnBhdXNlSW5EZWJ1Z2dlcigpCi17Ci0gICAgaWYgKCFtX2RlYnVnZ2Vy
RW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkucGF1c2VQcm9ncmFtKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVz
dW1lRGVidWdnZXIoKQogewogICAgIGlmICghbV9kZWJ1Z2dlckVuYWJsZWQpCkBAIC0xMzQ5LDM5
ICsxMjQ1LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWVEZWJ1Z2dlcigpCiAg
ICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jb250aW51ZVByb2dyYW0oKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIo
KQotewotICAgIGlmICghbV9kZWJ1Z2dlckVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdmVyU3RhdGVtZW50KCk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyKCkK
LXsKLSAgICBpZiAoIW1fZGVidWdnZXJFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgSmF2
YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zdGVwSW50b1N0YXRlbWVudCgpOwotfQotCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcigpCi17
Ci0gICAgaWYgKCFtX2RlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE91dE9mRnVuY3Rpb24oKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCi17Ci0gICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9
IHNvdXJjZUlELnRvSW50UHRyKCk7Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5hZGRCcmVha3BvaW50KHNvdXJjZUlEVmFsdWUsIGxpbmVOdW1iZXIpOwotfQotCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlcikKLXsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRFZhbHVlID0g
c291cmNlSUQudG9JbnRQdHIoKTsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgp
LnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwgbGluZU51bWJlcik7Ci19Ci0KIC8vIEph
dmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAxOWIxYjdkLi43NzFm
NzQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC01Niw2ICs1
Niw3IEBAIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3MgSW5zcGVjdG9yQmFja2Vu
ZDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xh
c3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKQEAgLTc2LDkgKzc3LDkgQEAgY2xhc3MgSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTsKIGNs
YXNzIEluc3BlY3RvclJlc291cmNlOwogCi1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ29udHJvbGxlcj4KK2NsYXNzIEluc3BlY3RvckNvbnRy
b2xsZXIKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyCiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiBwdWJsaWM6CkBAIC0xNTEsMTQg
KzE1MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBib29sIG1fYm9vbGVhbjsKICAgICAgICAg
fSBtX3NpbXBsZUNvbnRlbnQ7CiAgICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckNvbnRyb2xsZXI+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGluc3Bl
Y3RvckNsaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
Q29udHJvbGxlcihwYWdlLCBpbnNwZWN0b3JDbGllbnQpKTsKLSAgICB9Ci0KKyAgICBJbnNwZWN0
b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICB+SW5zcGVjdG9yQ29u
dHJvbGxlcigpOwogCisgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKTsgfQorCiAgICAgdm9pZCBpbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKCk7CiAgICAgdm9pZCBwYWdlRGVzdHJveWVkKCkgeyBtX3BhZ2UgPSAwOyB9
CiAKQEAgLTE2OSw5ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgU2V0dGluZyYgc2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZXR0aW5nKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTZXR0aW5nJik7CiAKLSAgICBTdHJpbmcgbG9jYWxpemVkU3RyaW5n
c1VSTCgpOwotICAgIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQogICAgIHZvaWQgaW5zcGVjdChO
b2RlKik7CiAgICAgdm9pZCBoaWdobGlnaHQoTm9kZSopOwogICAgIHZvaWQgaGlkZUhpZ2hsaWdo
dCgpOwpAQCAtMTgzLDggKzE3OCw2IEBAIHB1YmxpYzoKICAgICBib29sIHdpbmRvd1Zpc2libGUo
KTsKICAgICB2b2lkIHNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlID0gdHJ1ZSwgYm9vbCBh
dHRhY2hlZCA9IGZhbHNlKTsKIAotICAgIHZvaWQgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxv
bmcgaWRlbnRpZmllciwgTm9kZSogZnJhbWUpOwotICAgIGJvb2wgYWRkU291cmNlVG9GcmFtZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgTm9kZSopOwogICAg
IHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVz
c2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNv
bGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsK
ICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CkBAIC0xOTIsMTEgKzE4NSw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGF0dGFjaFdpbmRvdygpOwogICAgIHZvaWQgZGV0YWNoV2luZG93KCk7
CiAKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwotICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKLQotICAgIHZvaWQgc3RvcmVMYXN0QWN0
aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOwotCiAgICAgdm9pZCB0b2dnbGVTZWFy
Y2hGb3JOb2RlSW5QYWdlKCk7CiAgICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgeyBy
ZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9OwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwpAQCAt
MjA1LDcgKzE5Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3BlY3RlZFdpbmRvd1NjcmlwdE9i
amVjdENsZWFyZWQoRnJhbWUqKTsKICAgICB2b2lkIHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJs
ZSgpOwogCi0gICAgdm9pZCBzY3JpcHRPYmplY3RSZWFkeSgpOwogICAgIHZvaWQgc2V0RnJvbnRl
bmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc3RhdGUsIFNjcmlwdE9iamVjdCBvYmplY3QpOwog
CiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKQEAgLTIzOSw5ICsyMjYsNiBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCBSZXNvdXJjZXNNYXAmIHJlc291cmNlcygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2VzOyB9CiAKLSAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9h
dCB5KSBjb25zdDsKLSAgICB2b2lkIGNsb3NlV2luZG93KCk7Ci0KICAgICB2b2lkIGRyYXdOb2Rl
SGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgdm9pZCBjb3VudChjb25z
dCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlEKTsKQEAgLTI1Miw4ICsyMzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydEdyb3VwKE1l
c3NhZ2VTb3VyY2Ugc291cmNlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxGcmFtZSk7CiAgICAgdm9p
ZCBlbmRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCi0gICAgY29uc3QgU3RyaW5nJiBwbGF0Zm9ybSgpIGNv
bnN0OwotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgdm9pZCBhZGRQcm9m
aWxlKFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3Qg
SlNDOjpVU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgYWRkUHJvZmlsZUZpbmlzaGVkTWVz
c2FnZVRvQ29uc29sZShQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4sIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlVVJMKTsKQEAgLTI2NCwzNSArMjQ2LDE5IEBA
IHB1YmxpYzoKICAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSBjb25z
dCB7IHJldHVybiBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOyB9CiAKICAgICBKU0M6
OlVTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVu
dFByb2ZpbGVOdW1iZXIpOwotICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nU29v
bigpOwogICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3Rv
ckNvbnRyb2xsZXI+KiA9IDApOwogICAgIHZvaWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmco
KTsKLSAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKIAogICAgIHZvaWQgZW5hYmxl
UHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVjb21waWxlID0gZmFsc2Up
OwogICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwogICAgIGJv
b2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmls
ZXJFbmFibGVkOyB9CiAKLSAgICB2b2lkIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wg
YWx3YXlzKTsKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKCk7CiAgICAgdm9pZCBkaXNhYmxlRGVi
dWdnZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7CiAgICAgYm9vbCBkZWJ1Z2dlckVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnZ2VyRW5hYmxlZDsgfQogCi0gICAgSmF2YVNjcmlwdENhbGxG
cmFtZSogY3VycmVudENhbGxGcmFtZSgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpOwotICAgIHZvaWQg
cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyKTsKLQotICAgIGJvb2wgcGF1c2VPbkV4Y2VwdGlvbnMoKTsKLSAgICB2b2lkIHNldFBhdXNl
T25FeGNlcHRpb25zKGJvb2wgcGF1c2UpOwotCi0gICAgdm9pZCBwYXVzZUluRGVidWdnZXIoKTsK
ICAgICB2b2lkIHJlc3VtZURlYnVnZ2VyKCk7CiAKLSAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50
SW5EZWJ1Z2dlcigpOwotICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7Ci0g
ICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKLQogICAgIHZpcnR1YWwgdm9p
ZCBkaWRQYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6U291cmNlQ29kZSYp
OwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgaW50IGVycm9yTGluZSwgY29uc3QgSlNDOjpVU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVzZSgpOwpAQCAtMzAwLDcg
KzI2NiwyMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JDb250
cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBmcmllbmQgY2xhc3MgSW5zcGVj
dG9yQmFja2VuZDsKKyAKKyAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JC
YWNrZW5kIGFuZCBpbnRlcm5hbGx5LgorICAgIHZvaWQgc2NyaXB0T2JqZWN0UmVhZHkoKTsKKyAg
ICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKKyAgICB2b2lkIHNl
dEF0dGFjaGVkV2luZG93KGJvb2wpOworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0
cmluZyYgcGFuZWxOYW1lKTsKKyAgICB2b2lkIGNsb3NlV2luZG93KCk7CisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCisgICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdT
b29uKCk7CisgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7CisgICAgdm9pZCBlbmFi
bGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFsd2F5cyk7CisjZW5kaWYKIAogICAgIHZvaWQg
Zm9jdXNOb2RlKCk7CiAKQEAgLTM0Nyw2ICszMjYsNyBAQCBwcml2YXRlOgogICAgIENvbnNvbGVN
ZXNzYWdlKiBtX3ByZXZpb3VzTWVzc2FnZTsKICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQ7CiAgICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZDsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9pbnNwZWN0b3JCYWNrZW5kOwogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGJvb2wgbV9kZWJ1Z2dlckVuYWJsZWQ7CiAgICAgYm9v
bCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmlkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3ZThlNy4uMDAw
MDAwMAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbAorKysg
L2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4
IE1hdHQgTGlsZWsgPHdlYmtpdEBtYXR0bGlsZWsuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGNvcmUgewotICAgIGludGVyZmFj
ZSBbCi0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IKLSAgICBdIEluc3BlY3RvckNvbnRyb2xs
ZXIgewotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1oaWRlSGlnaGxpZ2h0XSB2b2lk
IGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgaGlnaGxpZ2h0
RE9NTm9kZShpbiBOb2RlIG5vZGUpOwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1z
Y3JpcHRPYmplY3RSZWFkeV0gdm9pZCBsb2FkZWQoKTsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9u
RnVuY3Rpb249Y2xvc2VdIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7Ci0gICAgICAgIFtJbXBsZW1l
bnRhdGlvbkZ1bmN0aW9uPWF0dGFjaFdpbmRvd10gdm9pZCBhdHRhY2goKTsKLSAgICAgICAgW0lt
cGxlbWVudGF0aW9uRnVuY3Rpb249ZGV0YWNoV2luZG93XSB2b2lkIGRldGFjaCgpOwotCi0gICAg
ICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249
Y2xlYXJDb25zb2xlTWVzc2FnZXNdIHZvaWQgY2xlYXJNZXNzYWdlcygpOwotICAgICAgICBbSW1w
bGVtZW50YXRpb25GdW5jdGlvbj10b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlXSB2b2lkIHRvZ2ds
ZU5vZGVTZWFyY2goKTsKLQotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj13aW5kb3dW
aXNpYmxlXSBib29sZWFuIGlzV2luZG93VmlzaWJsZSgpOwotICAgICAgICBbSW1wbGVtZW50YXRp
b25GdW5jdGlvbj1zZWFyY2hpbmdGb3JOb2RlSW5QYWdlXSBib29sZWFuIHNlYXJjaGluZ0Zvck5v
ZGUoKTsKLQotICAgICAgICB2b2lkIGFkZFJlc291cmNlU291cmNlVG9GcmFtZShpbiBsb25nIGlk
ZW50aWZpZXIsIGluIE5vZGUgZnJhbWUpOwotICAgICAgICBib29sZWFuIGFkZFNvdXJjZVRvRnJh
bWUoaW4gRE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJpbmcgc291cmNlVmFsdWUsIGluIE5v
ZGUgZnJhbWUpOwotICAgICAgICBbQ3VzdG9tXSBOb2RlIGdldFJlc291cmNlRG9jdW1lbnROb2Rl
KGluIGxvbmcgbG9uZyBpZGVudGlmaWVyKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBzZWFyY2go
aW4gTm9kZSBub2RlLCBpbiBET01TdHJpbmcgcXVlcnkpOwotI2lmIGRlZmluZWQoRU5BQkxFX0RB
VEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKLSAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGRh
dGFiYXNlVGFibGVOYW1lcyhpbiBEYXRhYmFzZSBkYXRhYmFzZSk7Ci0jZW5kaWYKLSAgICAgICAg
W0N1c3RvbV0gRE9NT2JqZWN0IHNldHRpbmcoaW4gRE9NU3RyaW5nIGtleSk7Ci0gICAgICAgIFtD
dXN0b21dIHZvaWQgc2V0U2V0dGluZyhpbiBET01TdHJpbmcga2V5LCBpbiBET01PYmplY3QgIHZh
bHVlKTsKLSAgICAgICAgW0N1c3RvbV0gRE9NV2luZG93IGluc3BlY3RlZFdpbmRvdygpOwotICAg
ICAgICBET01TdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwotICAgICAgICBET01TdHJpbmcg
aGlkZGVuUGFuZWxzKCk7Ci0gICAgICAgIERPTVN0cmluZyBwbGF0Zm9ybSgpOwotICAgICAgICBb
SW1wbGVtZW50YXRpb25GdW5jdGlvbj1tb3ZlV2luZG93QnldIHZvaWQgbW92ZUJ5VW5yZXN0cmlj
dGVkKGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOwotICAgICAgICB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLSAgICAgICAgW0N1c3RvbV0gRE9N
T2JqZWN0IHdyYXBDYWxsYmFjayhpbiBET01PYmplY3QgY2FsbGJhY2spOwotICAgICAgICBib29s
ZWFuIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIHZvaWQgZW5hYmxlUmVzb3Vy
Y2VUcmFja2luZyhpbiBib29sZWFuIGFsd2F5cyk7Ci0gICAgICAgIHZvaWQgZGlzYWJsZVJlc291
cmNlVHJhY2tpbmcoaW4gYm9vbGVhbiBhbHdheXMpOwotICAgICAgICB2b2lkIHN0b3JlTGFzdEFj
dGl2ZVBhbmVsKGluIERPTVN0cmluZyBwYW5lbE5hbWUpOwotCi0jaWYgZGVmaW5lZChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIKLSAgICAg
ICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChpbiBib29sZWFuIGFsd2F5cyk7Ci0g
ICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKLSAgICAgICAg
dm9pZCBwYXVzZUluRGVidWdnZXIoKTsKLSAgICAgICAgdm9pZCByZXN1bWVEZWJ1Z2dlcigpOwot
ICAgICAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwotICAgICAgICB2b2lk
IHN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwotICAgICAgICB2b2lkIHN0ZXBPdXRPZkZ1
bmN0aW9uSW5EZWJ1Z2dlcigpOwotICAgICAgICBib29sZWFuIGRlYnVnZ2VyRW5hYmxlZCgpOwot
ICAgICAgICBib29sZWFuIHBhdXNlT25FeGNlcHRpb25zKCk7Ci0gICAgICAgIGJvb2xlYW4gcHJv
ZmlsZXJFbmFibGVkKCk7Ci0gICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXN0YXJ0VXNl
ckluaXRpYXRlZFByb2ZpbGluZ10gdm9pZCBzdGFydFByb2ZpbGluZygpOwotICAgICAgICBbSW1w
bGVtZW50YXRpb25GdW5jdGlvbj1zdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZ10gdm9pZCBzdG9w
UHJvZmlsaW5nKCk7Ci0gICAgICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIoaW4gYm9vbGVhbiBhbHdh
eXMpOwotICAgICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29sZWFuIGFsd2F5cyk7Ci0g
ICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBjdXJyZW50Q2FsbEZyYW1lKCk7Ci0gICAgICAgIHZv
aWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoaW4gYm9vbGVhbiBwYXVzZU9uRXhjZXB0aW9ucyk7Ci0g
ICAgICAgIHZvaWQgYWRkQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2ln
bmVkIGxvbmcgbGluZU51bWJlcik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBE
T01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7Ci0KLSAgICAg
ICAgW0N1c3RvbV0gQXJyYXkgcHJvZmlsZXMoKTsKLSNlbmRpZgotICAgICB9OwotIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcwppbmRleCA4NWQ1Y2QyLi5iY2I3YjJhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2UuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlLmpzCkBAIC0zNDEsMTIgKzM0MSw2
IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9
LAogCi0gICAgZ2V0IGRvY3VtZW50Tm9kZSgpIHsKLSAgICAgICAgaWYgKCJpZGVudGlmaWVyIiBp
biB0aGlzKQotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3RvckNvbnRyb2xsZXIuZ2V0UmVzb3Vy
Y2VEb2N1bWVudE5vZGUodGhpcy5pZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfSwKLQogICAgIGdldCByZXF1ZXN0SGVhZGVycygpCiAgICAgewogICAgICAgICBpZiAodGhp
cy5fcmVxdWVzdEhlYWRlcnMgPT09IHVuZGVmaW5lZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDY3MTY4NzIuLjgyZjBlYmQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMjQwLDcgKzI0MCw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgdmll
dy52aXNpYmxlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRoaXMuX2F0dGFjaERl
YnVnZ2VyV2hlblNob3duKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmVuYWJs
ZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKKyAgICAgICAgICAgIEluc3BlY3RvckNvbnRy
b2xsZXIuZW5hYmxlRGVidWdnZXIoZmFsc2UpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2F0
dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgICAgICB9CiAgICAgfSwKQEAgLTQyOSw3ICs0Mjks
NyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBhdHRhY2hE
ZWJ1Z2dlcldoZW5TaG93bjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuZWxl
bWVudC5wYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmVu
YWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKKyAgICAgICAgICAgIEluc3BlY3RvckNv
bnRyb2xsZXIuZW5hYmxlRGVidWdnZXIoZmFsc2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgdGhpcy5fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOwogICAgICAgICB9CkBA
IC04NjMsNyArODYzLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyLmRlYnVnZ2VyRW5hYmxlZCgpKQogICAg
ICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5kaXNhYmxlRGVidWdnZXIodHJ1ZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZW5hYmxlRGVidWdnZXJG
cm9tRnJvbnRlbmQoISFvcHRpb25hbEFsd2F5cyk7CisgICAgICAgICAgICBJbnNwZWN0b3JDb250
cm9sbGVyLmVuYWJsZURlYnVnZ2VyKCEhb3B0aW9uYWxBbHdheXMpOwogICAgIH0sCiAKICAgICBf
dG9nZ2xlUGF1c2VPbkV4Y2VwdGlvbnM6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA2NDk0NzA3Li4zMmM2
MGM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCwgQ29udGV4dE1lbnVDbGllbnQqIGNvbnRleHRNZW51Q2xpZW50LCBFZGkKICAg
ICAsIG1fZHJhZ0NvbnRyb2xsZXIobmV3IERyYWdDb250cm9sbGVyKHRoaXMsIGRyYWdDbGllbnQp
KQogICAgICwgbV9mb2N1c0NvbnRyb2xsZXIobmV3IEZvY3VzQ29udHJvbGxlcih0aGlzKSkKICAg
ICAsIG1fY29udGV4dE1lbnVDb250cm9sbGVyKG5ldyBDb250ZXh0TWVudUNvbnRyb2xsZXIodGhp
cywgY29udGV4dE1lbnVDbGllbnQpKQotICAgICwgbV9pbnNwZWN0b3JDb250cm9sbGVyKEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzLCBpbnNwZWN0b3JDbGllbnQpKQorICAgICwgbV9p
bnNwZWN0b3JDb250cm9sbGVyKG5ldyBJbnNwZWN0b3JDb250cm9sbGVyKHRoaXMsIGluc3BlY3Rv
ckNsaWVudCkpCiAgICAgLCBtX3NldHRpbmdzKG5ldyBTZXR0aW5ncyh0aGlzKSkKICAgICAsIG1f
cHJvZ3Jlc3MobmV3IFByb2dyZXNzVHJhY2tlcikKICAgICAsIG1fYmFja0ZvcndhcmRMaXN0KEJh
Y2tGb3J3YXJkTGlzdDo6Y3JlYXRlKHRoaXMpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1Bh
Z2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggY2NjMWQ0Yy4uY2MzZDI1ZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0y
MDksNyArMjA5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8RHJhZ0Nv
bnRyb2xsZXI+IG1fZHJhZ0NvbnRyb2xsZXI7CiAgICAgICAgIE93blB0cjxGb2N1c0NvbnRyb2xs
ZXI+IG1fZm9jdXNDb250cm9sbGVyOwogICAgICAgICBPd25QdHI8Q29udGV4dE1lbnVDb250cm9s
bGVyPiBtX2NvbnRleHRNZW51Q29udHJvbGxlcjsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckNv
bnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICAgICAgT3duUHRyPEluc3BlY3Rv
ckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICAgICAgT3duUHRyPFNldHRp
bmdzPiBtX3NldHRpbmdzOwogICAgICAgICBPd25QdHI8UHJvZ3Jlc3NUcmFja2VyPiBtX3Byb2dy
ZXNzOwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33417</attachid>
            <date>2009-07-24 02:59:46 -0700</date>
            <delta_ts>2009-07-24 03:00:12 -0700</delta_ts>
            <desc>Step 1</desc>
            <filename>inspector_backend.txt</filename>
            <type>text/plain</type>
            <size>108216</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjMxMzA2Ni4uMDZiMzVkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wNy0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTcGxpdCBJbnNwZWN0b3JDb250cm9s
bGVyIGludG8gSW5zcGVjdG9yQ29udHJvbGxlcgorICAgICAgICBhbmQgSW5zcGVjdG9yQmFja2Vu
ZC4gRXZlcnl0aGluZyBmcm9udGVuZCBuZWVkcyBmcm9tIEluc3BlY3RvckNvbnRyb2xsZXIKKyAg
ICAgICAgd2lsbCBzbG93bHkgbWlncmF0ZSBpbnRvIHRoZSBJbnNwZWN0b3JCYWNrZW5kLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzU0MQorCisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVT
b3VyY2VzLmJrbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6aGln
aGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNl
YXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OmRhdGFiYXNlVGFi
bGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6Omluc3BlY3Rl
ZFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNldHRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjpzZXRTZXR0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnByb2ZpbGVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEds
b2JhbE9iamVjdDo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhJbmRleC5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRl
eC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckJh
Y2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFja2VuZDo6aW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZS5qczoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKIDIwMDktMDctMjMg
IFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAzZjUzY2FhLi44MmQ5ZmM5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCkBAIC0xNzEsNyArMTcxLDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgSFRNTFZpZGVv
RWxlbWVudCBcCiAgICAgSGlzdG9yeSBcCiAgICAgSW1hZ2VEYXRhIFwKLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyIFwKKyAgICBJbnNwZWN0b3JCYWNrZW5kIFwKICAgICBLZXlib2FyZEV2ZW50IFwK
ICAgICBMb2NhdGlvbiBcCiAgICAgTWVkaWFFcnJvciBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA2NDgyZGQyLi4xZjlj
YzA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTIzMSw3ICsyMzEsNyBAQCBJRExfQklORElOR1MgKz0gXAogCVdlYkNv
cmUvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBcCiAJV2ViQ29yZS9odG1sL1ZvaWRDYWxsYmFjay5p
ZGwgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsIFwKLQlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgXAogCVdlYkNvcmUvcGFnZS9CYXJJbmZvLmlkbCBcCiAJ
V2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaWRs
IFwKQEAgLTM2NCwxMSArMzY0LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmggXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmggXAotCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCBcCkBAIC0xMTE3LDYgKzExMTcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaWN1L3VuaWNvZGUvdXZlcnNpb24uaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjlkM2ViZS4uYjM5MjlkNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgJ2h0bWwvVGltZVJhbmdlcy5pZGwnLAogICAg
ICAgICAgICAgJ2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvVm9p
ZENhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaWRsJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsJywKICAgICAgICAg
ICAgICdwYWdlL0Fic3RyYWN0Vmlldy5pZGwnLApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaCcsCi0gICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCcsCkBAIC02MzAsNyArNjMw
LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVu
dENvbGxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgnLAotICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9y
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0
b20uY3BwJywKQEAgLTEzODAsNiArMTM4MCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckNsaWVudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCcsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwJywKKyAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCBjYTRhMzU1Li5jNmY2M2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQxNyw3ICs0MTcsNyBAQCBJRExf
QklORElOR1MgKz0gXAogICAgIGh0bWwvVGV4dE1ldHJpY3MuaWRsIFwKICAgICBodG1sL1ZhbGlk
aXR5U3RhdGUuaWRsIFwKICAgICBodG1sL1ZvaWRDYWxsYmFjay5pZGwgXAotICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsIFwKICAgICBwYWdlL0JhckluZm8uaWRsIFwKICAgICBwYWdlL0NvbnNvbGUuaWRsIFwK
ICAgICBwYWdlL0Nvb3JkaW5hdGVzLmlkbCBcCkBAIC01MDQsOCArNTA0LDggQEAgU09VUkNFUyAr
PSBcCiAgICAgYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXIuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRD
dXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgXAotICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0Nv
bGxlY3Rpb24uY3BwICBcCkBAIC04NDksNiArODQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRt
bC9QcmVsb2FkU2Nhbm5lci5jcHAgXAogICAgIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHAgXAogICAg
IGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKQEAgLTE1MDQsNiArMTUwNSw3IEBA
IEhFQURFUlMgKz0gXAogICAgIGh0bWwvVGltZVJhbmdlcy5oIFwKICAgICBodG1sL1ZhbGlkaXR5
U3RhdGUuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBcCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0MDg2YTEuLmMxNzdhNDUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODIsOSArNjgyLDggQEAK
IAkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFDRDBGRjU5ODY5MDA1
NzZCM0IgLyogU2hhcmVkV29ya2VyLmNwcCAqLzsgfTsKIAkJNDFFMUIxRDQwRkY1OTg2OTAwNTc2
QjNCIC8qIFNoYXJlZFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFFMUIxQ0UwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5oICov
OyB9OwogCQk0MUUxQjFENTBGRjU5ODY5MDA1NzZCM0IgLyogU2hhcmVkV29ya2VyLmlkbCBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0YwRkY1
OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5pZGwgKi87IH07Ci0JCTQxRjA2MENEMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8q
IEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi87IH07Ci0JCTQxRjA2MENFMEY1RUVCMkIwMEEw
N0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MENDMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCAqLzsgfTsKLQkJNDFGMDYxNkEwRjVFRkJERDAwQTA3RUFDIC8qIEpT
SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjE2OTBGNUVGQkREMDBBMDdFQUMgLyogSlNJbnNwZWN0
b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFD
IC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JC
YWNrZW5kLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0UwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVj
dG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFGMDYwQ0MwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5oICovOyB9
OwogCQk0MUYwNjE3NDBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYw
NjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggKi87
IH07CiAJCTQxRjA2MTc1MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFGMDYxNzMwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgKi87IH07CiAJCTQxRjA2MThFMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYxOEMw
RjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi87IH07CkBAIC0xMDE3LDYgKzEw
MTYsMTAgQEAKIAkJNzU3OTNFRDUwRDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3NhZ2VFdmVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VEMjBEMENFODVCMDA3RkMwQUMgLyogRE9NTWVzc2FnZUV2ZW50SW50ZXJuYWwuaCAqLzsg
fTsKIAkJN0E2NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLzsgfTsKIAkJ
N0E2NzRCREMwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCREEwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovOyB9OworCQk3QTc0RUNCNzEw
MTgzOTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I2MTAxODM5OUEwMEJGOTM5RSAv
KiBJbnNwZWN0b3JCYWNrZW5kLmlkbCAqLzsgfTsKKwkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlF
IC8qIEluc3BlY3RvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tl
bmQuY3BwICovOyB9OworCQk3QTc0RUNCQjEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3
NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQuaCAqLzsgfTsKKwkJN0E3
NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCQzEwMTgz
OURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLzsgfTsKIAkJN0FC
NkY4ODcwRkI5RDI3MTAwODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODUwRkI5RDI3MTAw
ODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwICovOyB9OwogCQk3QUI2Rjg4ODBGQjlE
MjcxMDA4MDVEMDIgLyogSW5zcGVjdG9ySlNPTk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODYwRkI5RDI3MTAwODA1RDAyIC8qIElu
c3BlY3RvckpTT05PYmplY3QuaCAqLzsgfTsKIAkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8q
IEluc3BlY3RvckZyb250ZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBRUQzRTAzMEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVu
ZC5jcHAgKi87IH07CkBAIC01NjQ0LDEwICs1NjQ3LDggQEAKIAkJNDFFMUIxQ0QwRkY1OTg2OTAw
NTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTaGFyZWRXb3JrZXIuY3BwOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUxQjFDRTBGRjU5ODY5MDA1NzZCM0Ig
LyogU2hhcmVkV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYXJl
ZFdvcmtlci5oOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFFMUIxQ0YwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU2hhcmVkV29ya2VyLmlkbDsgcGF0aCA9IHdvcmtl
cnMvU2hhcmVkV29ya2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFGMDYw
QUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxRjA2MENDMEY1
RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQxRjA2MTY5MEY1RUZCREQwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNv
bnRyb2xsZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0luc3BlY3RvckJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjBDQzBGNUVFQjJCMDBBMDdF
QUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSW5zcGVjdG9yQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MUYwNjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjE3MzBGNUYwMEFDMDBB
MDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MThDMEY1RjA2OTgwMEEwN0VBQyAvKiBD
b25zb2xlTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zb2xl
TWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjAzMyw2ICs2MDM0LDEw
IEBACiAJCTc1NzkzRUQyMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnRJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50SW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2NzRCRDkwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cExv
YWREZWZlcnJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCNjEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gSW5zcGVjdG9yQmFja2VuZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
NzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVj
dG9yQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNzRFQ0JDMTAxODM5REEw
MEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkY4ODUwRkI5RDI3MTAwODA1RDAyIC8qIEluc3Bl
Y3RvckpTT05PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9ySlNPTk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
QjZGODg2MEZCOUQyNzEwMDgwNUQwMiAvKiBJbnNwZWN0b3JKU09OT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckpTT05PYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3Rv
ckZyb250ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3Bl
Y3RvckZyb250ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MDAsOCAr
OTgwNSw4IEBACiAJCTFDNUZBRUNBMERDRkQ4QzkwMEQ1OEY3OCAvKiBJbnNwZWN0b3IgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQxRjA2MENCMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAotCQkJCTQxRjA2MEND
MEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKKwkJCQk0MUYw
NjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLywKKwkJCQk0
MUYwNjBDQzBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8sCiAJCQkJ
MUM1RkFFQ0YwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8s
CiAJCQkJMUM1RkFFRDAwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5o
ICovLAogCQkJKTsKQEAgLTk4MTEsMTMgKzk4MTYsMTUgQEAKIAkJMUM4MUI5NEQwRTk3MzJEOTAw
MjY2RTA3IC8qIGluc3BlY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
Y3BwICovLAorCQkJCTdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5k
LmggKi8sCisJCQkJN0E3NEVDQjYxMDE4Mzk5QTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
aWRsICovLAogCQkJCTFDODFCOTU5MEU5NzMzMDgwMDI2NkUwNyAvKiBmcm9udC1lbmQgKi8sCiAJ
CQkJNDFGMDYxOEQwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmNwcCAqLywKIAkJ
CQk0MUYwNjE4QzBGNUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuaCAqLywKIAkJCQkx
QzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8sCiAJCQkJMUM4
MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAogCQkJ
CTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCi0J
CQkJNDFGMDYwQUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICov
LAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCAqLywKIAkJCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5oICovLAogCQkJCTQxRjA2MTczMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwICovLApAQCAtMTM2MDQsNiArMTM2MTEsNyBAQAog
CQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyog
SlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzJFRDZCQjBDNkJEMkYwMDA5
MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQkxQTlFRjQ1NjBBMUI5NTdEMDAzMzJC
NjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovLAogCQkJCTkzQkE1
OUIxMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgKi8sCkBAIC0x
MzY1Nyw3ICsxMzY2NSw2IEBACiAJCQkJQkMxN0Y5NjUwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCUFCNENCNEVBMEI4QkRBM0QwMDlGNDBC
MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggKi8sCiAJCQkJQTdEMDMxOEQwRTkzNTQw
MzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLywKLQkJCQk0MUYwNjE2OTBGNUVG
QkREMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLywKIAkJCQkx
QzVGQUVFNjBEQ0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNw
cCAqLywKIAkJCQlCQ0UxQzQzRjBEOTgzMEY0MDAzQjAyRjIgLyogSlNMb2NhdGlvbkN1c3RvbS5j
cHAgKi8sCiAJCQkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwICovLApAQCAtMTYwODYsNyArMTYwOTMsNyBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlF
NjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzA5MTU4OEIw
REI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzA5MTU4OEQwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJhY2tX
cmFwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MUYwNjBDRTBGNUVFQjJCMDBBMDdFQUMgLyog
SlNJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUYwNjBDRTBGNUVF
QjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5
RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzAyOCw2ICsxNzAzNSw3IEBACiAJ
CQkJMkVDRjdBRTIxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RURCMDNEMTAxNjg0OTQwMEZFODExMyAvKiBET01PYmplY3RXaXRoU1ZHQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlw
dFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTc0RUNCQjEwMTgzOUE2MDBC
RjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzE0MCw2ICsx
NzE0OCw3IEBACiAJCQkJNDFFMUIxRDUwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgaW4gUmVzb3VyY2VzICovLAogCQkJCTE1Qzc3MDhDMTAwRDNDNkEwMDVCQTI2NyAvKiBWYWxp
ZGl0eVN0YXRlLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMkVDRjdBRTMxMDE2MkI1ODAwNDI3
REU3IC8qIEVycm9yRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk3QTc0RUNCNzEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTgxNjAsOCArMTgxNjksNyBAQAogCQkJCUE3RDAzMThFMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0lt
YWdlRGF0YUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDkxNTg4QTBEQjQyMDkyMDBF
NTVBRjQgLyogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMwOTE1ODhDMERCNDIwOTIwMEU1NUFGNCAvKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0MUYwNjBDRDBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxRjA2MTZBMEY1RUZCREQw
MEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1
OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg2NjI5RDQwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE5MDYzLDYgKzE5MDcxLDggQEAKIAkJCQkyRUNGN0FEQzEwMTYyQjM4MDA0
MjdERTcgLyogSlNFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFQ0Y3QUUxMTAx
NjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUVG
Q0FFMTAxNkNFNEEwMDQwRDM0RSAvKiBET01SR0JDb2xvci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tl
bmRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IGRlOGE3ZGMuLjRk
NzRhYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC0xMDUsOCArMTA1LDggQEAgVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBi
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
SW1hZ2VEYXRhQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVj
dFdyYXBwZXIuY3BwCisgICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3Rv
bS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3Bw
Ci0gICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKICAg
ICAgICAgYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9K
U01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCkBAIC0zNTMsNyArMzUzLDcgQEAgVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTFVMaXN0RWxlbWVudC5jcHAKICAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hpc3RvcnkuY3BwCiAgICAgICAgIERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSW5zcGVjdG9yQmFja2VuZC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNLZXlib2FyZEV2ZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTTG9jYXRpb24uY3BwCkBAIC02NjEsNiArNjYxLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogCiAgICAgPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lOU1BFQ1RPUiI+CiAgICAgICAgIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKyAgICAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuY3BwCiAgICAgICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAog
ICAgICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcAogICAgICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zY2NiMDZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCkBAIC0wLDAgKzEsMjgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0luc3BlY3RvckJhY2tlbmQuaCIKKworI2lu
Y2x1ZGUgIkNvbnNvbGUuaCIKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCisjZW5kaWYKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIgorI2luY2x1ZGUg
IkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5j
bHVkZSAiSlNSYW5nZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlw
dERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlLmg+
CisjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNJbnNwZWN0b3JCYWNr
ZW5kOjpoaWdobGlnaHRET01Ob2RlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0
JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6YXNXcmFwcGVyKGFyZ3MuYXQoMCkpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBOb2RlKiBu
b2RlID0gdG9Ob2RlKHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgaW1wbCgpLT5oaWdobGlnaHQo
bm9kZSk7CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0luc3Bl
Y3RvckJhY2tlbmQ6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0g
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgcmVzdWx0OworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRz
KG5vZGUpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRvIHsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgp
LCB0YXJnZXQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFw
c2VkKGVjKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIEEgbm9uLWNvbGxhcHNl
ZCByZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGlsbCBu
b3QKKyAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUwOTMy
OCkuIEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIFZpc2libGVQb3NpdGlv
biBuZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNU
UkVBTSk7CisgICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFy
Y2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICByZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKKworICAgICAg
ICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAgIH0gd2hpbGUgKHRy
dWUpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisKKyNp
ZiBFTkFCTEUoREFUQUJBU0UpCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6ZGF0YWJhc2VU
YWJsZU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9E
YXRhYmFzZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAgaWYgKCFkYXRhYmFzZSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciByZXN1bHQ7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRh
YmxlTmFtZXMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdGFibGVOYW1lc1tpXSkpOworCisgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisjZW5kaWYKKworSlNWYWx1ZSBKU0luc3BlY3Rv
ckJhY2tlbmQ6Omluc3BlY3RlZFdpbmRvdyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikKK3sK
KyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEpT
RE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGljLT5pbnNwZWN0ZWRQ
YWdlKCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
Ojp3cmFwKGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpLCBpbnNwZWN0ZWRXaW5kb3cpOwor
fQorCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6c2V0dGluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcga2V5ID0gYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBs
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJiBz
ZXR0aW5nID0gaWMtPnNldHRpbmcoa2V5KTsKKworICAgIHN3aXRjaCAoc2V0dGluZy50eXBlKCkp
IHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpT
ZXR0aW5nOjpOb1R5cGU6CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHNldHRpbmcuc3RyaW5nKCkpOworICAgICAgICBj
YXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkRvdWJsZVR5cGU6CisgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2V0dGluZy5kb3VibGVWYWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpJbnRlZ2VyVHlwZToKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBzZXR0aW5nLmludGVnZXJWYWx1ZSgpKTsKKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpCb29sZWFuVHlwZToKKyAgICAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4oc2V0dGluZy5ib29sZWFuVmFsdWUoKSk7CisgICAgICAg
IGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6U3RyaW5nVmVjdG9yVHlwZTogewor
ICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgc3RyaW5nc0FycmF5OworICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MgPSBzZXR0aW5nLnN0cmluZ1ZlY3Rvcigp
OworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5ncy5zaXplKCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICAgICAgc3RyaW5nc0FycmF5LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdzW2ldKSk7
CisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgc3RyaW5nc0FycmF5KTsK
KyAgICAgICAgfQorICAgIH0KK30KKworSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OnNldFNl
dHRpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChh
cmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgU3Ry
aW5nIGtleSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OlNldHRpbmcgc2V0dGluZzsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdz
LmF0KDEpOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpIHx8IHZhbHVlLmlzTnVsbCgpKSB7
CisgICAgICAgIC8vIERvIG5vdGhpbmcuIFRoZSBzZXR0aW5nIGlzIGFscmVhZHkgTm9UeXBlLgor
ICAgICAgICBBU1NFUlQoc2V0dGluZy50eXBlKCkgPT0gSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0
dGluZzo6Tm9UeXBlKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAg
IHNldHRpbmcuc2V0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS5p
c051bWJlcigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b051bWJlcihleGVjKSk7Cisg
ICAgZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHNldHRpbmcuc2V0KHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7CisgICAgZWxzZSB7CisgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkg
PSBhc0FycmF5KHZhbHVlKTsKKyAgICAgICAgaWYgKCFqc0FycmF5KQorICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKS50b1N0cmluZyhl
eGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKGl0
ZW0pOworICAgICAgICB9CisgICAgICAgIHNldHRpbmcuc2V0KHN0cmluZ3MpOworICAgIH0KKwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpOworICAgIGlmIChpYykKKyAgICAgICAgaWMtPnNldFNldHRpbmcoa2V5LCBzZXR0
aW5nKTsKKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTSW5zcGVj
dG9yQmFja2VuZDo6d3JhcENhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIHJldHVybiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcChl
eGVjLCBhcmdzLmF0KDApKTsKK30KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
CitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQoreworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IGltcGwoKS0+Y3VycmVudENhbGxGcmFtZSgpOworICAgIGlmICghY2FsbEZyYW1lIHx8
ICFjYWxsRnJhbWUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICAvLyBGSVhNRTogSSBhbSBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZC4g
Q2FuIHdlIGp1c3QgdXNlIGV4ZWM/CisgICAgRXhlY1N0YXRlKiBnbG9iYWxFeGVjID0gY2FsbEZy
YW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisKKyAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CisgICAgcmV0dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6
d3JhcChnbG9iYWxFeGVjLCB0b0pTKGV4ZWMsIGNhbGxGcmFtZSkpOworfQorCitKU1ZhbHVlIEpT
SW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
Qzo6QXJnTGlzdCYpCit7CisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIHJlc3VsdDsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UHJvZmlsZT4gPiYgcHJvZmlsZXMg
PSBpYy0+cHJvZmlsZXMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodG9KUyhleGVjLCBwcm9maWxlc1tp
XS5nZXQoKSkpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9
CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIwNmM5ZTkuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtp
dEBtYXR0bGlsZWsuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2lmIEVOQUJMRShEQVRBQkFTRSkK
LSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKLSNlbmRpZgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNs
dWRlICJKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU0luc3BlY3RvckNh
bGxiYWNrV3JhcHBlci5oIgotI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIkpTUmFuZ2Uu
aCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgotI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0jaW5jbHVkZSAi
SmF2YVNjcmlwdENhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5o
IgotI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCi0jaW5jbHVkZSAiSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZS5oPgotI2luY2x1ZGUgPHBy
b2ZpbGVyL1Byb2ZpbGVyLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxp
Z2h0RE9NTm9kZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLXsK
LSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LQotICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IHRvTm9k
ZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGltcGwoKS0+aGlnaGxpZ2h0KG5vZGUpOwotCi0g
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9s
bGVyOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaWRlbnRp
ZmllciA9IGFyZ3MuYXQoMCkudG9VSW50MzIoZXhlYywgb2spOwotICAgIGlmICghb2spCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNl
PiByZXNvdXJjZSA9IGltcGwoKS0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOwotICAgIEFT
U0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUoKTsKLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgIGlmIChkb2N1bWVu
dC0+aXNQbHVnaW5Eb2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc0ltYWdlRG9jdW1lbnQoKSB8fCBk
b2N1bWVudC0+aXNNZWRpYURvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgRXhlY1N0YXRlKiByZXNvdXJjZUV4ZWMgPSB0b0pTRE9NV2luZG93U2hlbGwoZnJh
bWUpLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwot
ICAgIHJldHVybiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAocmVzb3VyY2VFeGVjLCB0
b0pTKHJlc291cmNlRXhlYywgZG9jdW1lbnQpKTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNv
bnRyb2xsZXI6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0KLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkpOwotICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0ID0gYXJn
cy5hdCgxKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
cmVzdWx0OwotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG5v
ZGUpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRvIHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0
YXJnZXQsIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2Vk
KGVjKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEEgbm9uLWNvbGxhcHNlZCBy
ZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGlsbCBub3QK
LSAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUwOTMyOCku
IEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiBu
ZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVB
TSk7Ci0gICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFyY2hS
YW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKLQotICAgICAgICBz
ZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOwotICAgIH0gd2hpbGUgKHRydWUp
OwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0KLSNpZiBF
TkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGF0YWJhc2VU
YWJsZU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9E
YXRhYmFzZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciByZXN1bHQ7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRh
YmxlTmFtZXMoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdGFibGVOYW1lc1tpXSkpOwotCi0gICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0jZW5kaWYKLQotSlNWYWx1ZSBKU0luc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvdyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikK
LXsKLSAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBs
KCktPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotICAgIHJldHVybiBKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoaW5zcGVjdGVkV2luZG93LT5nbG9iYWxFeGVjKCksIGluc3Bl
Y3RlZFdpbmRvdyk7Ci19Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXR0aW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5z
aXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBr
ZXkgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBjb25zdCBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nJiBzZXR0aW5nID0gaW1wbCgpLT5zZXR0aW5nKGtleSk7Ci0K
LSAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlOgotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZzo6U3RyaW5nVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBz
ZXR0aW5nLnN0cmluZygpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0
aW5nOjpEb3VibGVUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNldHRp
bmcuZG91YmxlVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0
dGluZzo6SW50ZWdlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2V0
dGluZy5pbnRlZ2VyVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZzo6Qm9vbGVhblR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHNldHRp
bmcuYm9vbGVhblZhbHVlKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNl
dHRpbmc6OlN0cmluZ1ZlY3RvclR5cGU6IHsKLSAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIHN0cmluZ3NBcnJheTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJp
bmdzID0gc2V0dGluZy5zdHJpbmdWZWN0b3IoKTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZ3Muc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHN0cmluZ3NBcnJheS5hcHBlbmQo
anNTdHJpbmcoZXhlYywgc3RyaW5nc1tpXSkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0cmluZ3NBcnJheSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUpTVmFs
dWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAyKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBrZXkgPSBhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nIHNldHRp
bmc7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgxKTsKLSAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWQoKSB8fCB2YWx1ZS5pc051bGwoKSkgewotICAgICAgICAvLyBEbyBub3RoaW5nLiBU
aGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KLSAgICAgICAgQVNTRVJUKHNldHRpbmcudHlw
ZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZSk7Ci0gICAgfSBlbHNl
IGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b1N0cmlu
ZyhleGVjKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgc2V0dGlu
Zy5zZXQodmFsdWUudG9OdW1iZXIoZXhlYykpOwotICAgIGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVh
bigpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIGVs
c2UgewotICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheSh2YWx1ZSk7Ci0gICAgICAg
IGlmICghanNBcnJheSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwganNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChpdGVtKTsKLSAgICAgICAgfQotICAgICAgICBz
ZXR0aW5nLnNldChzdHJpbmdzKTsKLSAgICB9Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgaW1wbCgpLT5zZXRTZXR0
aW5nKGtleSwgc2V0dGluZyk7Ci0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNW
YWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OndyYXBDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXI6OndyYXAoZXhlYywgYXJncy5hdCgwKSk7Ci19Ci0KLSNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJlbnRD
YWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKLXsKLSAgICBKYXZhU2Ny
aXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBpbXBsKCktPmN1cnJlbnRDYWxsRnJhbWUoKTsKLSAg
ICBpZiAoIWNhbGxGcmFtZSB8fCAhY2FsbEZyYW1lLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEkgYW0gbm90IHN1cmUgaWYgdGhpcyBp
cyBhY3R1YWxseSBuZWVkZWQuIENhbiB3ZSBqdXN0IHVzZSBleGVjPwotICAgIEV4ZWNTdGF0ZSog
Z2xvYmFsRXhlYyA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIHJldHVybiBKU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXI6OndyYXAoZ2xvYmFsRXhlYywgdG9KUyhleGVjLCBjYWxsRnJhbWUp
KTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVzKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmKQotewotICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXN1bHQ7Ci0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxQcm9maWxlPiA+JiBwcm9maWxlcyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQodG9KUyhleGVjLCBwcm9maWxlc1tpXS5nZXQoKSkpOwotCi0gICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVj
dC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKaW5kZXggN2Y2Mzkx
ZC4uMDNlNmQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3Qu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcApAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCi0jaW5jbHVkZSAiSlNJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSlNJ
bnNwZWN0b3JCYWNrZW5kLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC0x
MjMsNyArMTIzLDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFMKICAgICByZXR1cm4gaGFuZGxl
RXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAotYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNv
bnRyb2xsZXIqIHZhbHVlKQorYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQqIHZhbHVl
KQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5wdXREaXJlY3QoSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIHRv
SlMoc2NyaXB0U3RhdGUsIHZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaAppbmRl
eCBlZDg2NjU5Li45NzAyMmRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dE9iamVjdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKQEAgLTM4
LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL1Byb3RlY3QuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CisgICAgY2xhc3MgSW5zcGVj
dG9yQmFja2VuZDsKIAogICAgIGNsYXNzIFNjcmlwdE9iamVjdCA6IHB1YmxpYyBTY3JpcHRWYWx1
ZSB7CiAgICAgcHVibGljOgpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgU2NyaXB0R2xvYmFsT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9i
amVjdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFy
KiBuYW1lLCBJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgICAgIHN0YXRpYyBib29sIHNldChT
Y3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQqKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgU2NyaXB0
T2JqZWN0Jik7CiAgICAgICAgIHN0YXRpYyBib29sIHJlbW92ZShTY3JpcHRTdGF0ZSosIGNvbnN0
IGNoYXIqIG5hbWUpOwogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTU9iamVjdHNJbmNsdWRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJ
bmNsdWRlLmgKaW5kZXggODZlNTc1NC4uZGIxNjQ5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
T2JqZWN0c0luY2x1ZGUuaApAQCAtODQsNyArODQsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiTG9jYXRpb24uaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAppbmRleCBjMjk0MWMzLi4zNWUxZDVl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAK
QEAgLTE1MCw3ICsxNTAsNyBAQAogI2luY2x1ZGUgImJpbmRpbmdzL1Y4SFRNTFVMaXN0RWxlbWVu
dC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhIVE1MVmlkZW9FbGVtZW50LmNwcCIKICNpbmNs
dWRlICJiaW5kaW5ncy9WOEltYWdlRGF0YS5jcHAiCi0jaW5jbHVkZSAiYmluZGluZ3MvVjhJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOEluc3BlY3RvckJhY2tl
bmQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4S2V5Ym9hcmRFdmVudC5jcHAiCiAjaW5jbHVk
ZSAiYmluZGluZ3MvVjhMb2NhdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhNZWRpYUVy
cm9yLmNwcCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcAppbmRleCBjMjI0NjUxLi4w
ZjUwMGZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwCkBAIC0xMTYsMTAgKzEx
NiwxMCBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgUwogICAgIHJldHVybiBzY29wZS5zdWNjZXNz
KCk7CiB9CiAKLWJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JDb250cm9sbGVyKiB2YWx1ZSkKK2Jv
b2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25z
dCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JCYWNrZW5kKiB2YWx1ZSkKIHsKICAgICBTY3JpcHRTY29w
ZSBzY29wZShzY3JpcHRTdGF0ZSk7Ci0gICAgc2NvcGUuZ2xvYmFsKCktPlNldCh2ODo6U3RyaW5n
OjpOZXcobmFtZSksIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpJTlNQRUNUT1JDT05UUk9MTEVSLCB2YWx1ZSkpOworICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQo
djg6OlN0cmluZzo6TmV3KG5hbWUpLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VORCwgdmFsdWUpKTsKICAgICByZXR1cm4gc2NvcGUu
c3VjY2VzcygpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9i
amVjdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuaAppbmRleCBlNTYxOGFi
Li4yZDBhZGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmgKQEAgLTM2LDcgKzM2LDcg
QEAKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKKyAgICBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogICAgIGNsYXNz
IFNjcmlwdFN0YXRlOwogCiAgICAgY2xhc3MgU2NyaXB0T2JqZWN0IDogcHVibGljIFNjcmlwdFZh
bHVlIHsKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNj
cmlwdEdsb2JhbE9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgYm9vbCBzZXQo
U2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmKTsKLSAg
ICAgICAgc3RhdGljIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5z
cGVjdG9yQ29udHJvbGxlciopOworICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUq
LCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JCYWNrZW5kKik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYpOwog
ICAgICAgICBzdGF0aWMgYm9vbCByZW1vdmUoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
KTsKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAKaW5kZXggYWZhODFjYi4uODY2
NmQ0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCkBAIC0xMzksNyArMTM5LDcgQEAKICNpbmNs
dWRlICJWOEhUTUxUaXRsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOEhUTUxVTGlzdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJWOEltYWdlRGF0YS5oIgotI2luY2x1ZGUgIlY4SW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlY4SW5zcGVjdG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIlY4TWVk
aWFMaXN0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUgIlY4TWVz
c2FnZUV2ZW50LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCmluZGV4IDU3ZjQ0NjAuLmZmN2E1YWYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5oCkBAIC0zMzMsNyArMzMzLDcgQEAgdHlwZWRlZiB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpGdW5jdGlvblRlbXBsYXRlRmFjdG9yeSkoKTsK
ICAgICBWKEhUTUxPUFRJT05TQ09MTEVDVElPTiwgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKSAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBWKElNQUdFREFUQSwgSW1hZ2VEYXRhKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKENBTlZBU1BJWEVMQVJS
QVksIENhbnZhc1BpeGVsQXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBWKElOU1BFQ1RPUkNPTlRST0xMRVIsIEluc3BlY3RvckNvbnRyb2xsZXIpICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBWKElOU1BFQ1RPUkJBQ0tFTkQsIEluc3BlY3RvckJhY2tlbmQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKEtFWUJPQVJERVZFTlQsIEtl
eWJvYXJkRXZlbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBW
KExPQ0FUSU9OLCBMb2NhdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBWKE1FRElBTElTVCwgTWVkaWFMaXN0KQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAppbmRleCBmZDhmZjE0Li5kMWIyZmExIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtMzgz
LDIzICszODMsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBERUNMQVJFX0NBTExC
QUNLKFRyZWVXYWxrZXJOZXh0U2libGluZyk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soVHJl
ZVdhbGtlclByZXZpb3VzU2libGluZyk7CiAKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyUHJvZmlsZXMpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3Bl
Y3RvckNvbnRyb2xsZXJIaWdobGlnaHRET01Ob2RlKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhJbnNwZWN0b3JDb250cm9sbGVyQWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKTsKLSAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVyR2V0UmVzb3VyY2VEb2N1bWVudE5v
ZGUpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJBZGRTb3Vy
Y2VUb0ZyYW1lKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVy
U2VhcmNoKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVyU2V0
dGluZyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxlckluc3Bl
Y3RlZFdpbmRvdyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxl
clNldFNldHRpbmcpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xs
ZXJDdXJyZW50Q2FsbEZyYW1lKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JD
b250cm9sbGVyRGVidWdnZXJFbmFibGVkKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyUGF1c2VPbkV4Y2VwdGlvbnMpOwotICAgICAgICBERUNMQVJFX0NBTExC
QUNLKEluc3BlY3RvckNvbnRyb2xsZXJQcm9maWxlckVuYWJsZWQpOworICAgICAgICBERUNMQVJF
X0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQcm9maWxlcyk7CisgICAgICAgIERFQ0xBUkVfQ0FM
TEJBQ0soSW5zcGVjdG9yQmFja2VuZEhpZ2hsaWdodERPTU5vZGUpOworICAgICAgICBERUNMQVJF
X0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRBZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUpOworICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRBZGRTb3VyY2VUb0ZyYW1lKTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kU2VhcmNoKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kU2V0dGluZyk7CisgICAgICAgIERF
Q0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZEluc3BlY3RlZFdpbmRvdyk7CisgICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZFNldFNldHRpbmcpOworICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRDdXJyZW50Q2FsbEZyYW1lKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kRGVidWdnZXJFbmFibGVkKTsKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kUGF1c2VPbkV4Y2VwdGlvbnMp
OworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQcm9maWxlckVuYWJs
ZWQpOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyRGF0YWJhc2VUYWJsZU5hbWVzKTsKKyAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhJbnNwZWN0b3JCYWNrZW5kRGF0YWJhc2VUYWJsZU5hbWVzKTsKICNlbmRpZgotICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJXcmFwQ2FsbGJhY2spOworICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRXcmFwQ2FsbGJhY2spOwogCiAg
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soTm9kZUl0ZXJhdG9yTmV4dE5vZGUpOwogICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKE5vZGVJdGVyYXRvclByZXZpb3VzTm9kZSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDczZDdlCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9t
LmNwcApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
VGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisKKyNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNMKElu
c3BlY3RvckJhY2tlbmRIaWdobGlnaHRET01Ob2RlKQoreworICAgIElOQ19TVEFUUygiSW5zcGVj
dG9yQmFja2VuZC5oaWdobGlnaHRET01Ob2RlKCkiKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIE5vZGUqIG5vZGUg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJh
Y2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNr
ZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAg
IGluc3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodChub2RlKTsKKworICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kU2VhcmNo
KQoreworICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC5zZWFyY2goKSIpOworCisgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIHRhcmdl
dCA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSk7CisgICAgaWYgKHRhcmdl
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICB2ODo6
TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldygpOworICAgIFJlZlB0cjxS
YW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG5vZGUpKTsKKworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGludCBpbmRleCA9IDA7CisgICAgZG8geworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRh
cmdldCwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQo
ZWMpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQSBub24tY29sbGFwc2VkIHJl
c3VsdCByYW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0aWxsIG5vdAor
ICAgICAgICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0NTA5MzI4KS4g
QnJlYWsgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5l
d1N0YXJ0ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFN
KTsKKyAgICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNlYXJjaFJh
bmdlLmdldCgpLCBET1dOU1RSRUFNKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJl
c3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdDxSYW5nZT4oVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVzdWx0UmFuZ2UuZ2V0KCkp
KTsKKworICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAg
IH0gd2hpbGUgKHRydWUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShE
QVRBQkFTRSkKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kRGF0YWJhc2VUYWJs
ZU5hbWVzKQoreworICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC5kYXRhYmFzZVRhYmxl
TmFtZXMoKSIpOworICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6
TmV3KDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworQ0FMTEJBQ0tfRlVOQ19E
RUNMKEluc3BlY3RvckJhY2tlbmRJbnNwZWN0ZWRXaW5kb3cpCit7CisgICAgSU5DX1NUQVRTKCJJ
bnNwZWN0b3JCYWNrZW5kLmluc3BlY3RlZFdpbmRvdygpIik7CisKKyAgICBJbnNwZWN0b3JCYWNr
ZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCBhcmdz
LkhvbGRlcigpKTsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckJhY2tl
bmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGljLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpLT5kb21XaW5kb3coKSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJ
bnNwZWN0b3JCYWNrZW5kU2V0dGluZykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2V0dGluZygpIik7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzBdKTsKKyAgICBpZiAoa2V5LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3Rv
ckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JC
YWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQmFja2VuZC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGlj
LT5zZXR0aW5nKGtleSk7CisKKyAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9U
eXBlOgorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJ
bnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAgICAgICAgcmV0
dXJuIHY4U3RyaW5nKHNldHRpbmcuc3RyaW5nKCkpOworICAgICAgICBjYXNlIEluc3BlY3RvckNv
bnRyb2xsZXI6OlNldHRpbmc6OkRvdWJsZVR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6Ok51
bWJlcjo6TmV3KHNldHRpbmcuZG91YmxlVmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5zcGVjdG9y
Q29udHJvbGxlcjo6U2V0dGluZzo6SW50ZWdlclR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6
Ok51bWJlcjo6TmV3KHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgorICAgICAgICAgICAgcmV0dXJu
IHY4Qm9vbGVhbihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7CisgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3RyaW5nVmVjdG9yKCk7Cisg
ICAgICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBzdHJpbmdzQXJyYXkgPSB2ODo6QXJyYXk6
Ok5ldyhzdHJpbmdzLnNpemUoKSk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGgg
PSBzdHJpbmdzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXktPlNldCh2ODo6TnVtYmVy
OjpOZXcoaSksIHY4U3RyaW5nKHN0cmluZ3NbaV0pKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJp
bmdzQXJyYXk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNw
ZWN0b3JCYWNrZW5kU2V0U2V0dGluZykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2V0U2V0dGluZygpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7CisgICAgaWYgKGtleS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0
aW5nIHNldHRpbmc7CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3NbMV07
CisgICAgaWYgKHZhbHVlLT5Jc1VuZGVmaW5lZCgpIHx8IHZhbHVlLT5Jc051bGwoKSkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KKyAgICAg
ICAgQVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
Ok5vVHlwZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgc2V0
dGluZy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSkpOworICAgIGVsc2Ug
aWYgKHZhbHVlLT5Jc051bWJlcigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVy
VmFsdWUoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICBzZXR0
aW5nLnNldCh2YWx1ZS0+Qm9vbGVhblZhbHVlKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0Fy
cmF5KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2Nh
bDx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5n
czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpdGVtID0gdG9XZWJDb3JlU3RyaW5nKHY4QXJyYXkt
PkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKSk7CisgICAgICAgICAgICBpZiAoaXRlbS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IHN0cmluZ3MuYXBwZW5kKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIHNldHRpbmcuc2V0KHN0
cmluZ3MpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVD
VE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMg
PSBpbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgaWYgKGljKQor
ICAgICAgICBpbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRp
bmcoa2V5LCBzZXR0aW5nKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0NB
TExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kV3JhcENhbGxiYWNrKQoreworICAgIElO
Q19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC53cmFwQ2FsbGJhY2soKSIpOworICAgIHJldHVybiBh
cmdzWzBdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1N2MyYy4uMDAwMDAwMAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJET01XaW5kb3cuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUmFuZ2Uu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJIaWdobGln
aHRET01Ob2RlKQotewotICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5oaWdobGln
aHRET01Ob2RlKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKLSAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
YXJnc1swXSkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENs
YXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkpOwotICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmhpZ2hsaWdodChub2RlKTsKLQotICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVyR2V0UmVz
b3VyY2VEb2N1bWVudE5vZGUpCi17Ci0gICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVy
LmdldFJlc291cmNlRG9jdW1lbnROb2RlKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIGlmICghYXJnc1sxXS0+
SXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHVuc2ln
bmVkIGlkZW50aWZpZXIgPSBhcmdzWzFdLT5JbnQzMlZhbHVlKCk7Ci0KLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JD
T05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+
IHJlc291cmNlID0gaW5zcGVjdG9yQ29udHJvbGxlci0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZp
ZXIpOwotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IHJlc291cmNlLT5m
cmFtZSgpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotCi0g
ICAgaWYgKGRvY3VtZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzSW1hZ2VE
b2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9DVU1FTlQsIGRvY3VtZW50KTsKLX0KLQotQ0FMTEJBQ0tf
RlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZWFyY2gpCi17Ci0gICAgSU5DX1NUQVRTKCJJ
bnNwZWN0b3JDb250cm9sbGVyLnNlYXJjaCgpIik7Ci0KLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8
IDIpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBOb2RlKiBub2RlID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0ID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzFdKTsKLSAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJl
c3VsdCA9IHY4OjpBcnJheTo6TmV3KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShy
YW5nZU9mQ29udGVudHMobm9kZSkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
aW50IGluZGV4ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFu
Z2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBmYWxzZSkp
OwotICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChlYykpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBz
b21lIGZ1bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90Ci0gICAgICAgIC8vIGFkdmFuY2Ug
dGhlIHJhbmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0byBhdm9pZCBpbmZp
bml0ZSBsb29wLgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxl
UG9zaXRpb24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3
U3RhcnQgPT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJF
QU0pKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcmVzdWx0LT5TZXQodjg6Ok51bWJl
cjo6TmV3KGluZGV4KyspLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0PFJhbmdlPihW
OENsYXNzSW5kZXg6OlJBTkdFLCByZXN1bHRSYW5nZS5nZXQoKSkpOwotCi0gICAgICAgIHNldFN0
YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7Ci0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotQ0FMTEJBQ0tf
RlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJEYXRhYmFzZVRhYmxlTmFtZXMpCi17Ci0gICAg
SU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLmRhdGFiYXNlVGFibGVOYW1lcygpIik7Ci0g
ICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcoMCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1DQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9y
Q29udHJvbGxlckluc3BlY3RlZFdpbmRvdykKLXsKLSAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNv
bnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkiKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIs
IGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvbVdpbmRvdygpKTsKLX0KLQotQ0FM
TEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZXR0aW5nKQotewotICAgIElOQ19T
VEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5zZXR0aW5nKCkiKTsKLQotICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFN0cmlu
ZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwotICAgIGlmIChr
ZXkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6SU5T
UEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgY29uc3QgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGluc3BlY3RvckNvbnRyb2xsZXIgLT5zZXR0aW5n
KGtleSk7Ci0KLSAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlOgotICAg
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JD
b250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIHY4U3Ry
aW5nKHNldHRpbmcuc3RyaW5nKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6
OlNldHRpbmc6OkRvdWJsZVR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3
KHNldHRpbmcuZG91YmxlVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxl
cjo6U2V0dGluZzo6SW50ZWdlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6
TmV3KHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRy
b2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgotICAgICAgICAgICAgcmV0dXJuIHY4Qm9vbGVh
bihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9s
bGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3RyaW5nVmVjdG9yKCk7Ci0gICAgICAgICAg
ICB2ODo6TG9jYWw8djg6OkFycmF5PiBzdHJpbmdzQXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhzdHJp
bmdzLnNpemUoKSk7Ci0gICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdz
LnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXktPlNldCh2ODo6TnVtYmVyOjpOZXcoaSks
IHY4U3RyaW5nKHN0cmluZ3NbaV0pKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdzQXJyYXk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250
cm9sbGVyU2V0U2V0dGluZykKLXsKLSAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNvbnRyb2xsZXIu
c2V0U2V0dGluZygpIik7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgaWYgKGtleS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5n
IHNldHRpbmc7Ci0KLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3NbMV07Ci0g
ICAgaWYgKHZhbHVlLT5Jc1VuZGVmaW5lZCgpIHx8IHZhbHVlLT5Jc051bGwoKSkgewotICAgICAg
ICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KLSAgICAgICAg
QVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5v
VHlwZSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKLSAgICAgICAgc2V0dGlu
Zy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSkpOwotICAgIGVsc2UgaWYg
KHZhbHVlLT5Jc051bWJlcigpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVyVmFs
dWUoKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbigpKQotICAgICAgICBzZXR0aW5n
LnNldCh2YWx1ZS0+Qm9vbGVhblZhbHVlKCkpOwotICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0FycmF5
KCkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2NhbDx2
ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5nczsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgIFN0cmluZyBpdGVtID0gdG9XZWJDb3JlU3RyaW5nKHY4QXJyYXktPkdl
dCh2ODo6SW50ZWdlcjo6TmV3KGkpKSk7Ci0gICAgICAgICAgICBpZiAoaXRlbS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIHN0
cmluZ3MuYXBwZW5kKGl0ZW0pOwotICAgICAgICB9Ci0gICAgICAgIHNldHRpbmcuc2V0KHN0cmlu
Z3MpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAg
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6
SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW5zcGVjdG9yQ29udHJv
bGxlci0+c2V0U2V0dGluZyhrZXksIHNldHRpbmcpOwotCi0gICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJXcmFwQ2Fs
bGJhY2spCi17Ci0gICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFj
aygpIik7Ci0gICAgcmV0dXJuIGFyZ3NbMF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNWYzYjliNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgorCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yUmVzb3VyY2UuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorI2lu
Y2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIuaCIKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQmFja2VuZDo6SW5zcGVj
dG9yQmFja2VuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0
b3JDb250cm9sbGVyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitJbnNwZWN0b3JC
YWNrZW5kOjp+SW5zcGVjdG9yQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6aGlkZURPTU5vZGVIaWdobGlnaHQoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGlkZUhpZ2hsaWdodCgpOworfQor
CitTdHJpbmcgSW5zcGVjdG9yQmFja2VuZDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCit7CisgICAg
cmV0dXJuIG1fY2xpZW50LT5sb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9CisKK1N0cmluZyBJbnNw
ZWN0b3JCYWNrZW5kOjpoaWRkZW5QYW5lbHMoKQoreworICAgIHJldHVybiBtX2NsaWVudC0+aGlk
ZGVuUGFuZWxzKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6d2luZG93VW5sb2FkaW5n
KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmNsb3NlKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6aXNXaW5k
b3dWaXNpYmxlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBy
ZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6YWRkUmVz
b3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9kZSogZnJhbWUpCit7CisgICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZXNv
dXJjZXMoKS5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgIFN0
cmluZyBzb3VyY2VTdHJpbmcgPSByZXNvdXJjZS0+c291cmNlU3RyaW5nKCk7CisgICAgICAgIGlm
ICghc291cmNlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFkZFNvdXJjZVRvRnJhbWUo
cmVzb3VyY2UtPm1pbWVUeXBlKCksIHNvdXJjZVN0cmluZywgZnJhbWUpOworICAgIH0KK30KKwor
Ym9vbCBJbnNwZWN0b3JCYWNrZW5kOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCit7CisgICAgQVNT
RVJUX0FSRyhmcmFtZU5vZGUsIGZyYW1lTm9kZSk7CisKKyAgICBpZiAoIWZyYW1lTm9kZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZU5vZGUtPmF0dGFjaGVkKCkpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBBU1NFUlQoZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpOworICAgIGlmICgh
ZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWVOb2RlKTsKKyAg
ICBBU1NFUlQoZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICBpZiAoIWVsZW1l
bnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1l
T3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgQVNTRVJUKGZyYW1lT3duZXItPmNvbnRlbnRG
cmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVPd25lci0+Y29u
dGVudEZyYW1lKCktPmxvYWRlcigpOworCisgICAgbG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBl
KG1pbWVUeXBlKTsKKyAgICBsb2FkZXItPmJlZ2luKCk7CisgICAgbG9hZGVyLT53cml0ZShzb3Vy
Y2UpOworICAgIGxvYWRlci0+ZW5kKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpjbGVhck1lc3NhZ2VzKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsZWFyQ29uc29sZU1l
c3NhZ2VzKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6dG9nZ2xlTm9kZVNlYXJjaCgp
Cit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT50b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6YXR0YWNoKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQor
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmF0dGFjaFdpbmRvdygpOworfQorCit2b2lk
IEluc3BlY3RvckJhY2tlbmQ6OmRldGFjaCgpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZXRhY2hXaW5kb3coKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworfQor
Cit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmlu
ZyYgcGFuZWxOYW1lKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RvcmVMYXN0QWN0aXZlUGFuZWwocGFuZWxOYW1lKTsK
K30KKworYm9vbCBJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hpbmdGb3JOb2RlKCkKK3sKKyAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5zZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6bG9hZGVkKCkKK3sKKyAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PnNjcmlwdE9iamVjdFJlYWR5KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZW5hYmxl
UmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZVJlc291cmNlVHJh
Y2tpbmcoYWx3YXlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpkaXNhYmxlUmVzb3Vy
Y2VUcmFja2luZyhib29sIGFsd2F5cykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVSZXNvdXJjZVRyYWNraW5n
KGFsd2F5cyk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6cmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQoKSBjb25zdAoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0Cit7CisgICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tb3Zl
V2luZG93QnkoeCwgeSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Y2xvc2VXaW5kb3co
KQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+Y2xvc2VXaW5kb3coKTsKK30KKworY29uc3QgU3RyaW5nJiBJbnNwZWN0b3JC
YWNrZW5kOjpwbGF0Zm9ybSgpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorI2lmZGVmIEJV
SUxESU5HX09OX1RJR0VSCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBs
YXRmb3JtLCAoIm1hYy10aWdlciIpKTsKKyNlbHNlCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy1sZW9wYXJkIikpOworI2VuZGlmCisjZWxpZiBQ
TEFURk9STShXSU5fT1MpCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBs
YXRmb3JtLCAoIndpbmRvd3MiKSk7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgicXQiKSk7CisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAo
Imd0ayIpKTsKKyNlbGlmIFBMQVRGT1JNKFdYKQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJ3eCIpKTsKKyNlbHNlCisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInVua25vd24iKSk7CisjZW5kaWYKKworICAg
IHJldHVybiBwbGF0Zm9ybTsKK30KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
Y29uc3QgUHJvZmlsZXNBcnJheSYgSW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXMoKSBjb25zdAor
eyAgICAKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5wcm9maWxlcygpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IG1fZW1wdHlQcm9maWxlczsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGFydFByb2Zp
bGluZygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpzdG9wUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0b3BVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZW5hYmxlUHJv
ZmlsZXIoYm9vbCBhbHdheXMpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVQcm9maWxlcihhbHdheXMpOworfQor
Cit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cykKK3sK
KyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRpc2FibGVQcm9maWxlcihhbHdheXMpOworfQorCitib29sIEluc3BlY3RvckJhY2tl
bmQ6OnByb2ZpbGVyRW5hYmxlZCgpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cHJvZmlsZXJFbmFibGVkKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCit7CisgICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVEZWJ1Z2dl
ckZyb21Gcm9udGVuZChhbHdheXMpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2Fi
bGVEZWJ1Z2dlcihib29sIGFsd2F5cykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVEZWJ1Z2dlcihhbHdheXMp
OworfQorCitib29sIEluc3BlY3RvckJhY2tlbmQ6OmRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0Cit7
CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGVidWdnZXJFbmFibGVkKCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gZmFsc2U7Cit9CisKK0phdmFTY3JpcHRDYWxsRnJhbWUqIEluc3BlY3RvckJhY2tlbmQ6OmN1
cnJlbnRDYWxsRnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjphZGRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVO
dW1iZXIpCit7CisgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRy
KCk7CisgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5hZGRCcmVha3BvaW50KHNv
dXJjZUlEVmFsdWUsIGxpbmVOdW1iZXIpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3sKKyAgICBpbnRwdHJfdCBzb3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsK
KyAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291
cmNlSURWYWx1ZSwgbGluZU51bWJlcik7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6cGF1
c2VPbkV4Y2VwdGlvbnMoKQoreworICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNo
YXJlZCgpLnBhdXNlT25FeGNlcHRpb25zKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
c2V0UGF1c2VPbkV4Y2VwdGlvbnMoYm9vbCBwYXVzZSkKK3sKKyAgICBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLnNldFBhdXNlT25FeGNlcHRpb25zKHBhdXNlKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpwYXVzZUluRGVidWdnZXIoKQoreworICAgIEphdmFTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VQcm9ncmFtKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6cmVzdW1lRGVidWdnZXIoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVzdW1lRGVidWdnZXIoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKQorewor
ICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE92ZXJTdGF0ZW1lbnQoKTsK
K30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIo
KQoreworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcEludG9TdGF0ZW1l
bnQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3V0T2ZGdW5jdGlvbkluRGVi
dWdnZXIoKQoreworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE91dE9m
RnVuY3Rpb24oKTsKK30KKworI2VuZGlmCisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6aGlnaGxp
Z2h0KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjg5MWMyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEluc3BlY3RvckJhY2tlbmRfaAorI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kX2gKKwor
I2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBJ
bnNwZWN0b3JDbGllbnQ7CitjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lOworY2xhc3MgTm9kZTsK
KworY2xhc3MgSW5zcGVjdG9yQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJh
Y2tlbmQ+Cit7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2Vu
ZD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3Bl
Y3RvckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bnNwZWN0b3JCYWNrZW5kKGluc3BlY3RvckNvbnRyb2xsZXIsIGNsaWVudCkpOworICAgIH0KKwor
ICAgIH5JbnNwZWN0b3JCYWNrZW5kKCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9CisgICAg
CisgICAgdm9pZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVy
ID0gMDsgfQorCisgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworCisgICAgU3RyaW5n
IGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKKyAgICBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CisKKyAg
ICB2b2lkIHdpbmRvd1VubG9hZGluZygpOworCisgICAgYm9vbCBpc1dpbmRvd1Zpc2libGUoKTsK
KworICAgIHZvaWQgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9k
ZSogZnJhbWUpOworICAgIGJvb2wgYWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgTm9kZSogZnJhbWUpOworCisgICAgdm9pZCBjbGVh
ck1lc3NhZ2VzKCk7CisKKyAgICB2b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKKworICAgIHZvaWQg
YXR0YWNoKCk7CisgICAgdm9pZCBkZXRhY2goKTsKKworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKworICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFu
ZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOworCisgICAgYm9vbCBzZWFyY2hpbmdGb3JOb2Rl
KCk7CisKKyAgICB2b2lkIGxvYWRlZCgpOworCisgICAgdm9pZCBlbmFibGVSZXNvdXJjZVRyYWNr
aW5nKGJvb2wgYWx3YXlzKTsKKyAgICB2b2lkIGRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGJvb2wg
YWx3YXlzKTsKKyAgICBib29sIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkgY29uc3Q7CisKKyAg
ICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKKyAgICB2b2lkIGNs
b3NlV2luZG93KCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHBsYXRmb3JtKCkgY29uc3Q7CisKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBjb25zdCBQcm9maWxlc0FycmF5JiBw
cm9maWxlcygpIGNvbnN0OworCisgICAgdm9pZCBzdGFydFByb2ZpbGluZygpOworICAgIHZvaWQg
c3RvcFByb2ZpbGluZygpOworCisgICAgdm9pZCBlbmFibGVQcm9maWxlcihib29sIGFsd2F5cyk7
CisgICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpOworICAgIGJvb2wgcHJvZmls
ZXJFbmFibGVkKCk7CisKKyAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKTsKKyAg
ICB2b2lkIGRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CisgICAgYm9vbCBkZWJ1Z2dlckVu
YWJsZWQoKSBjb25zdDsKKworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGN1cnJlbnRDYWxsRnJh
bWUoKSBjb25zdDsKKworICAgIHZvaWQgYWRkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisKKyAgICBib29sIHBh
dXNlT25FeGNlcHRpb25zKCk7CisgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9ucyhib29sIHBh
dXNlKTsKKworICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7CisgICAgdm9pZCByZXN1bWVEZWJ1
Z2dlcigpOworCisgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKTsKKyAgICB2
b2lkIHN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpOworICAgIHZvaWQgc3RlcE91dE9mRnVu
Y3Rpb25JbkRlYnVnZ2VyKCk7CisjZW5kaWYKKworICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQg
ZnJvbSBjdXN0b20gaW1wbGVtZW50YXRpb25zLgorICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqIG5v
ZGUpOworCitwcml2YXRlOgorICAgIEluc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpOworCisgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIEluc3BlY3Rv
ckNsaWVudCogbV9jbGllbnQ7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAg
UHJvZmlsZXNBcnJheSBtX2VtcHR5UHJvZmlsZXM7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmRfaCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjFlNmQ5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuaWRsCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBjb3JlIHsK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yCisgICAgXSBJbnNw
ZWN0b3JCYWNrZW5kIHsKKyAgICAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworICAg
ICAgICBbQ3VzdG9tXSB2b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4gTm9kZSBub2RlKTsKKyAgICAg
ICAgdm9pZCBsb2FkZWQoKTsKKyAgICAgICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICAg
ICAgdm9pZCBhdHRhY2goKTsKKyAgICAgICAgdm9pZCBkZXRhY2goKTsKKworICAgICAgICB2b2lk
IGNsb3NlV2luZG93KCk7CisgICAgICAgIHZvaWQgY2xlYXJNZXNzYWdlcygpOworICAgICAgICB2
b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKKworICAgICAgICBib29sZWFuIGlzV2luZG93VmlzaWJs
ZSgpOworICAgICAgICBib29sZWFuIHNlYXJjaGluZ0Zvck5vZGUoKTsKKworICAgICAgICB2b2lk
IGFkZFJlc291cmNlU291cmNlVG9GcmFtZShpbiBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJh
bWUpOworICAgICAgICBib29sZWFuIGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVU
eXBlLCBpbiBET01TdHJpbmcgc291cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIHNlYXJjaChpbiBOb2RlIG5vZGUsIGluIERPTVN0cmluZyBxdWVyeSk7Cisj
aWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBb
Q3VzdG9tXSBET01PYmplY3QgZGF0YWJhc2VUYWJsZU5hbWVzKGluIERhdGFiYXNlIGRhdGFiYXNl
KTsKKyNlbmRpZgorICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgc2V0dGluZyhpbiBET01TdHJp
bmcga2V5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXRTZXR0aW5nKGluIERPTVN0cmluZyBr
ZXksIGluIERPTU9iamVjdCAgdmFsdWUpOworICAgICAgICBbQ3VzdG9tXSBET01XaW5kb3cgaW5z
cGVjdGVkV2luZG93KCk7CisgICAgICAgIERPTVN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7
CisgICAgICAgIERPTVN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAgICAgRE9NU3RyaW5nIHBs
YXRmb3JtKCk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPW1vdmVXaW5kb3dCeV0g
dm9pZCBtb3ZlQnlVbnJlc3RyaWN0ZWQoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAgICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOwor
ICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgd3JhcENhbGxiYWNrKGluIERPTU9iamVjdCBjYWxs
YmFjayk7CisgICAgICAgIGJvb2xlYW4gcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKKyAgICAg
ICAgdm9pZCBlbmFibGVSZXNvdXJjZVRyYWNraW5nKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAg
ICAgdm9pZCBkaXNhYmxlUmVzb3VyY2VUcmFja2luZyhpbiBib29sZWFuIGFsd2F5cyk7CisgICAg
ICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoaW4gRE9NU3RyaW5nIHBhbmVsTmFtZSk7CisK
KyNpZiBkZWZpbmVkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVND
UklQVF9ERUJVR0dFUgorICAgICAgICBib29sZWFuIGRlYnVnZ2VyRW5hYmxlZCgpOworICAgICAg
ICB2b2lkIGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAgICAgdm9pZCBk
aXNhYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOworCisgICAgICAgIHZvaWQgYWRkQnJl
YWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJl
cik7CisgICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQs
IGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7CisKKyAgICAgICAgdm9pZCBwYXVzZUluRGVi
dWdnZXIoKTsKKyAgICAgICAgdm9pZCByZXN1bWVEZWJ1Z2dlcigpOworCisgICAgICAgIHZvaWQg
c3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcEludG9TdGF0
ZW1lbnRJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb25JbkRlYnVn
Z2VyKCk7CisKKyAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGN1cnJlbnRDYWxsRnJhbWUoKTsK
KworICAgICAgICBib29sZWFuIHBhdXNlT25FeGNlcHRpb25zKCk7CisgICAgICAgIHZvaWQgc2V0
UGF1c2VPbkV4Y2VwdGlvbnMoaW4gYm9vbGVhbiBwYXVzZU9uRXhjZXB0aW9ucyk7CisKKyAgICAg
ICAgYm9vbGVhbiBwcm9maWxlckVuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBlbmFibGVQcm9maWxl
cihpbiBib29sZWFuIGFsd2F5cyk7CisgICAgICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGluIGJv
b2xlYW4gYWx3YXlzKTsKKworICAgICAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAg
IHZvaWQgc3RvcFByb2ZpbGluZygpOworCisgICAgICAgIFtDdXN0b21dIEFycmF5IHByb2ZpbGVz
KCk7CisjZW5kaWYKKyAgICAgfTsKKyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCmluZGV4IGM1MzFlZDYuLmYzYzJiOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKQEAgLTEwNiw2NSArMTA3LDYg
QEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIHN0
YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CiBzdGF0aWMg
Y29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKIAotYm9vbCBJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCi17Ci0gICAgQVNTRVJU
X0FSRyhmcmFtZU5vZGUsIGZyYW1lTm9kZSk7Ci0KLSAgICBpZiAoIWZyYW1lTm9kZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFmcmFtZU5vZGUtPmF0dGFjaGVkKCkpIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIGlmICghZnJh
bWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWVOb2RlKTsKLSAgICBB
U1NFUlQoZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQt
PmlzRnJhbWVPd25lckVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3du
ZXJFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgQVNTRVJUKGZyYW1lT3duZXItPmNvbnRlbnRGcmFt
ZSgpKTsKLSAgICBpZiAoIWZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVPd25lci0+Y29udGVu
dEZyYW1lKCktPmxvYWRlcigpOwotCi0gICAgbG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBlKG1p
bWVUeXBlKTsKLSAgICBsb2FkZXItPmJlZ2luKCk7Ci0gICAgbG9hZGVyLT53cml0ZShzb3VyY2Up
OwotICAgIGxvYWRlci0+ZW5kKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgU3Ry
aW5nJiBJbnNwZWN0b3JDb250cm9sbGVyOjpwbGF0Zm9ybSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZP
Uk0oTUFDKQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy10aWdlciIpKTsKLSNlbHNlCi0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy1sZW9wYXJkIikp
OwotI2VuZGlmCi0jZWxpZiBQTEFURk9STShXSU5fT1MpCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIndpbmRvd3MiKSk7Ci0jZWxpZiBQTEFURk9STShR
VCkKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgicXQi
KSk7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBT
dHJpbmcsIHBsYXRmb3JtLCAoImd0ayIpKTsKLSNlbGlmIFBMQVRGT1JNKFdYKQotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJ3eCIpKTsKLSNlbHNlCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInVua25vd24i
KSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBwbGF0Zm9ybTsKLX0KLQogc3RhdGljIHVuc2lnbmVk
IHNfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50Owogc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nKj4qIHNfc2V0dGluZ0NhY2hlOwogCkBAIC0xODEsNiAr
MTIzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDAp
CiAgICAgLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9yZXNvdXJj
ZVRyYWNraW5nU2V0dGluZ3NMb2FkZWQoZmFsc2UpCisgICAgLCBtX2luc3BlY3RvckJhY2tlbmQo
SW5zcGVjdG9yQmFja2VuZDo6Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKICAgICAsIG1f
YXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCkBAIC0yMTUsNiArMTU4LDggQEAgSW5zcGVj
dG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQogICAgICAgICBkZWxldGUgc19z
ZXR0aW5nQ2FjaGU7CiAgICAgICAgIHNfc2V0dGluZ0NhY2hlID0gMDsKICAgICB9CisgICAgCisg
ICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogfQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQpAQCAtMjg1LDIw
ICsyMzAsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNldHRpbmcoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFNldHRpbmcmIHNldHRpbmcpCiAgICAgbV9jbGllbnQtPnN0b3JlU2V0
dGluZyhrZXksIHNldHRpbmcpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9j
YWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9jbGllbnQtPmxvY2FsaXplZFN0cmluZ3NVUkwoKTsK
LX0KLQotU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGRlblBhbmVscygpCi17Ci0gICAg
aWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9j
bGllbnQtPmhpZGRlblBhbmVscygpOwotfQotCiAvLyBUcnlpbmcgdG8gaW5zcGVjdCBzb21ldGhp
bmcgaW4gYSBmcmFtZSB3aXRoIEphdmFTY3JpcHQgZGlzYWJsZWQgd291bGQgbGF0ZXIgbGVhZCB0
bwogLy8gY3Jhc2hlcyB0cnlpbmcgdG8gY3JlYXRlIEphdmFTY3JpcHQgd3JhcHBlcnMuIFNvbWUg
ZGF5IHdlIGNvdWxkIGZpeCB0aGlzIGlzc3VlLCBidXQKIC8vIGZvciBub3cgcHJldmVudCBjcmFz
aGVzIGhlcmUgYnkgbmV2ZXIgdGFyZ2V0aW5nIGEgbm9kZSBpbiBzdWNoIGEgZnJhbWUuCkBAIC01
MzYsMTkgKzQ2Nyw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dG9nZ2xlU2VhcmNoRm9y
Tm9kZUluUGFnZSgpCiAgICAgICAgIGhpZGVIaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUobG9uZyBpZGVudGlmaWVyLCBO
b2RlKiBmcmFtZSkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IHJl
c291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAg
U3RyaW5nIHNvdXJjZVN0cmluZyA9IHJlc291cmNlLT5zb3VyY2VTdHJpbmcoKTsKLSAgICAgICAg
aWYgKCFzb3VyY2VTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRkU291cmNlVG9GcmFt
ZShyZXNvdXJjZS0+bWltZVR5cGUoKSwgc291cmNlU3RyaW5nLCBmcmFtZSk7Ci0gICAgfQotfQot
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkg
fHwgIW1fc2VhcmNoaW5nRm9yTm9kZSkKQEAgLTU5MCw3ICs1MDgsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpCiAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxB
Y2Nlc3MoKTsKIAogICAgIG1fc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1fcGFn
ZSk7Ci0gICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9zY3JpcHRTdGF0ZSwgIkluc3BlY3Rv
ckNvbnRyb2xsZXIiLCB0aGlzKTsKKyAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX3Njcmlw
dFN0YXRlLCAiSW5zcGVjdG9yQ29udHJvbGxlciIsIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQpAQCAt
MTMyMCwyOCArMTIzOCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVn
Z2VyKGJvb2wgYWx3YXlzKQogICAgICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0Rpc2FibGVk
KCk7CiB9CiAKLUphdmFTY3JpcHRDYWxsRnJhbWUqIEluc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJl
bnRDYWxsRnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWUoKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjpwYXVzZU9uRXhjZXB0aW9ucygpCi17Ci0gICAgcmV0dXJuIEphdmFTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkucGF1c2VPbkV4Y2VwdGlvbnMoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhib29sIHBhdXNlKQotewotICAgIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnMocGF1c2UpOwot
fQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBhdXNlSW5EZWJ1Z2dlcigpCi17Ci0gICAg
aWYgKCFtX2RlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VQcm9ncmFtKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVzdW1lRGVidWdnZXIoKQogewogICAgIGlmICghbV9kZWJ1Z2dlckVuYWJs
ZWQpCkBAIC0xMzQ5LDM5ICsxMjQ1LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1
bWVEZWJ1Z2dlcigpCiAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jb250aW51
ZVByb2dyYW0oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGVwT3ZlclN0YXRl
bWVudEluRGVidWdnZXIoKQotewotICAgIGlmICghbV9kZWJ1Z2dlckVuYWJsZWQpCi0gICAgICAg
IHJldHVybjsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdmVyU3Rh
dGVtZW50KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RlcEludG9TdGF0ZW1l
bnRJbkRlYnVnZ2VyKCkKLXsKLSAgICBpZiAoIW1fZGVidWdnZXJFbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zdGVwSW50b1N0YXRl
bWVudCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0ZXBPdXRPZkZ1bmN0aW9u
SW5EZWJ1Z2dlcigpCi17Ci0gICAgaWYgKCFtX2RlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuOwotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE91dE9mRnVuY3Rp
b24oKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCi17Ci0gICAgaW50cHRyX3Qg
c291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7Ci0gICAgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5hZGRCcmVha3BvaW50KHNvdXJjZUlEVmFsdWUsIGxpbmVOdW1iZXIp
OwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKLXsKLSAgICBpbnRwdHJfdCBz
b3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKLSAgICBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwgbGluZU51bWJl
cik7Ci19Ci0KIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRl
eCAxOWIxYjdkLi43NzFmNzQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCkBAIC01Niw2ICs1Niw3IEBAIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgRG9jdW1lbnRMb2Fk
ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3Mg
SW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3Rv
ckZyb250ZW5kOwogY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKQEAgLTc2LDkgKzc3LDkgQEAg
Y2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwogCi1jbGFzcyBJbnNwZWN0b3JD
b250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ29udHJvbGxlcj4KK2NsYXNz
IEluc3BlY3RvckNvbnRyb2xsZXIKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyCiAjZW5kaWYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiBwdWJs
aWM6CkBAIC0xNTEsMTQgKzE1MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBib29sIG1fYm9v
bGVhbjsKICAgICAgICAgfSBtX3NpbXBsZUNvbnRlbnQ7CiAgICAgfTsKLQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckNvbnRyb2xsZXI+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yQ29udHJvbGxlcihwYWdlLCBpbnNwZWN0b3JDbGllbnQpKTsKLSAgICB9
Ci0KKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAg
ICB+SW5zcGVjdG9yQ29udHJvbGxlcigpOwogCisgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVj
dG9yQmFja2VuZCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKTsgfQorCiAgICAg
dm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAgICAgdm9pZCBwYWdlRGVzdHJveWVkKCkg
eyBtX3BhZ2UgPSAwOyB9CiAKQEAgLTE2OSw5ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
U2V0dGluZyYgc2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAgICAgdm9pZCBzZXRT
ZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTZXR0aW5nJik7CiAKLSAgICBTdHJpbmcg
bG9jYWxpemVkU3RyaW5nc1VSTCgpOwotICAgIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQogICAg
IHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9pZCBoaWdobGlnaHQoTm9kZSopOwogICAgIHZv
aWQgaGlkZUhpZ2hsaWdodCgpOwpAQCAtMTgzLDggKzE3OCw2IEBAIHB1YmxpYzoKICAgICBib29s
IHdpbmRvd1Zpc2libGUoKTsKICAgICB2b2lkIHNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxl
ID0gdHJ1ZSwgYm9vbCBhdHRhY2hlZCA9IGZhbHNlKTsKIAotICAgIHZvaWQgYWRkUmVzb3VyY2VT
b3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9kZSogZnJhbWUpOwotICAgIGJvb2wgYWRk
U291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgTm9kZSopOwogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlEKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CkBAIC0xOTIs
MTEgKzE4NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGF0dGFjaFdpbmRvdygpOwogICAgIHZvaWQg
ZGV0YWNoV2luZG93KCk7CiAKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwotICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKLQotICAgIHZv
aWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOwotCiAgICAg
dm9pZCB0b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlKCk7CiAgICAgYm9vbCBzZWFyY2hpbmdGb3JO
b2RlSW5QYWdlKCkgeyByZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9OwogICAgIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlm
aWVyRmxhZ3MpOwpAQCAtMjA1LDcgKzE5Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3BlY3Rl
ZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqKTsKICAgICB2b2lkIHdpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZSgpOwogCi0gICAgdm9pZCBzY3JpcHRPYmplY3RSZWFkeSgpOwogICAg
IHZvaWQgc2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc3RhdGUsIFNjcmlwdE9i
amVjdCBvYmplY3QpOwogCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKQEAgLTIz
OSw5ICsyMjYsNiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBSZXNvdXJjZXNNYXAmIHJlc291cmNl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VzOyB9CiAKLSAgICB2b2lkIG1vdmVXaW5kb3dC
eShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKLSAgICB2b2lkIGNsb3NlV2luZG93KCk7Ci0KICAg
ICB2b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAg
dm9pZCBjb3VudChjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUlEKTsKQEAgLTI1Miw4ICsyMzYsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxG
cmFtZSk7CiAgICAgdm9pZCBlbmRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCi0gICAgY29uc3QgU3RyaW5n
JiBwbGF0Zm9ybSgpIGNvbnN0OwotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgYWRkUHJv
ZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4sIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlVVJMKTsKQEAgLTI2
NCwzNSArMjQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGUoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
OyB9CiAKICAgICBKU0M6OlVTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOwotICAgIHZvaWQgc3RhcnRVc2VySW5pdGlh
dGVkUHJvZmlsaW5nU29vbigpOwogICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+KiA9IDApOwogICAgIHZvaWQgc3RvcFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsKLSAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKIAog
ICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVj
b21waWxlID0gZmFsc2UpOwogICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0g
ZmFsc2UpOwogICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxl
ZCgpICYmIG1fcHJvZmlsZXJFbmFibGVkOyB9CiAKLSAgICB2b2lkIGVuYWJsZURlYnVnZ2VyRnJv
bUZyb250ZW5kKGJvb2wgYWx3YXlzKTsKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKCk7CiAgICAg
dm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7CiAgICAgYm9vbCBkZWJ1
Z2dlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyRW5hYmxlZDsgfQogCi0gICAg
SmF2YVNjcmlwdENhbGxGcmFtZSogY3VycmVudENhbGxGcmFtZSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBhZGRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1
bnNpZ25lZCBsaW5lTnVtYmVyKTsKLQotICAgIGJvb2wgcGF1c2VPbkV4Y2VwdGlvbnMoKTsKLSAg
ICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zKGJvb2wgcGF1c2UpOwotCi0gICAgdm9pZCBwYXVz
ZUluRGVidWdnZXIoKTsKICAgICB2b2lkIHJlc3VtZURlYnVnZ2VyKCk7CiAKLSAgICB2b2lkIHN0
ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwotICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJ
bkRlYnVnZ2VyKCk7Ci0gICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKLQog
ICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6U291cmNlQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgaW50IGVycm9yTGluZSwgY29u
c3QgSlNDOjpVU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVz
ZSgpOwpAQCAtMzAwLDcgKzI2NiwyMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAg
ICBJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBmcmll
bmQgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKKyAKKyAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQg
ZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5LgorICAgIHZvaWQgc2NyaXB0T2Jq
ZWN0UmVhZHkoKTsKKyAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25z
dDsKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOworICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2b2lkIHN0b3JlTGFzdEFjdGl2
ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKKyAgICB2b2lkIGNsb3NlV2luZG93KCk7
CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgdm9pZCBzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmdTb29uKCk7CisgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7
CisgICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFsd2F5cyk7CisjZW5k
aWYKIAogICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKQEAgLTM0Nyw2ICszMjYsNyBAQCBwcml2YXRl
OgogICAgIENvbnNvbGVNZXNzYWdlKiBtX3ByZXZpb3VzTWVzc2FnZTsKICAgICBib29sIG1fcmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5n
c0xvYWRlZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9pbnNwZWN0b3JCYWNrZW5k
OwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGJvb2wgbV9kZWJ1Z2dlckVu
YWJsZWQ7CiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjk3ZThlNy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmlkbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtpdEBtYXR0bGlsZWsuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGNvcmUg
ewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IKLSAgICBdIElu
c3BlY3RvckNvbnRyb2xsZXIgewotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1oaWRl
SGlnaGxpZ2h0XSB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShpbiBOb2RlIG5vZGUpOwotICAgICAgICBbSW1wbGVtZW50
YXRpb25GdW5jdGlvbj1zY3JpcHRPYmplY3RSZWFkeV0gdm9pZCBsb2FkZWQoKTsKLSAgICAgICAg
W0ltcGxlbWVudGF0aW9uRnVuY3Rpb249Y2xvc2VdIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7Ci0g
ICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWF0dGFjaFdpbmRvd10gdm9pZCBhdHRhY2go
KTsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249ZGV0YWNoV2luZG93XSB2b2lkIGRl
dGFjaCgpOwotCi0gICAgICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICAgICAgW0ltcGxlbWVu
dGF0aW9uRnVuY3Rpb249Y2xlYXJDb25zb2xlTWVzc2FnZXNdIHZvaWQgY2xlYXJNZXNzYWdlcygp
OwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj10b2dnbGVTZWFyY2hGb3JOb2RlSW5Q
YWdlXSB2b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKLQotICAgICAgICBbSW1wbGVtZW50YXRpb25G
dW5jdGlvbj13aW5kb3dWaXNpYmxlXSBib29sZWFuIGlzV2luZG93VmlzaWJsZSgpOwotICAgICAg
ICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zZWFyY2hpbmdGb3JOb2RlSW5QYWdlXSBib29sZWFu
IHNlYXJjaGluZ0Zvck5vZGUoKTsKLQotICAgICAgICB2b2lkIGFkZFJlc291cmNlU291cmNlVG9G
cmFtZShpbiBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJhbWUpOwotICAgICAgICBib29sZWFu
IGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJpbmcgc291
cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOwotICAgICAgICBbQ3VzdG9tXSBOb2RlIGdldFJlc291
cmNlRG9jdW1lbnROb2RlKGluIGxvbmcgbG9uZyBpZGVudGlmaWVyKTsKLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCBzZWFyY2goaW4gTm9kZSBub2RlLCBpbiBET01TdHJpbmcgcXVlcnkpOwotI2lmIGRl
ZmluZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKLSAgICAgICAgW0N1c3Rv
bV0gRE9NT2JqZWN0IGRhdGFiYXNlVGFibGVOYW1lcyhpbiBEYXRhYmFzZSBkYXRhYmFzZSk7Ci0j
ZW5kaWYKLSAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IHNldHRpbmcoaW4gRE9NU3RyaW5nIGtl
eSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgc2V0U2V0dGluZyhpbiBET01TdHJpbmcga2V5LCBp
biBET01PYmplY3QgIHZhbHVlKTsKLSAgICAgICAgW0N1c3RvbV0gRE9NV2luZG93IGluc3BlY3Rl
ZFdpbmRvdygpOwotICAgICAgICBET01TdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwotICAg
ICAgICBET01TdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0gICAgICAgIERPTVN0cmluZyBwbGF0Zm9y
bSgpOwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1tb3ZlV2luZG93QnldIHZvaWQg
bW92ZUJ5VW5yZXN0cmljdGVkKGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOwotICAgICAgICB2b2lk
IHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLSAgICAg
ICAgW0N1c3RvbV0gRE9NT2JqZWN0IHdyYXBDYWxsYmFjayhpbiBET01PYmplY3QgY2FsbGJhY2sp
OwotICAgICAgICBib29sZWFuIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIHZv
aWQgZW5hYmxlUmVzb3VyY2VUcmFja2luZyhpbiBib29sZWFuIGFsd2F5cyk7Ci0gICAgICAgIHZv
aWQgZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoaW4gYm9vbGVhbiBhbHdheXMpOwotICAgICAgICB2
b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGluIERPTVN0cmluZyBwYW5lbE5hbWUpOwotCi0jaWYg
ZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIKLSAgICAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChpbiBib29s
ZWFuIGFsd2F5cyk7Ci0gICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3
YXlzKTsKLSAgICAgICAgdm9pZCBwYXVzZUluRGVidWdnZXIoKTsKLSAgICAgICAgdm9pZCByZXN1
bWVEZWJ1Z2dlcigpOwotICAgICAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigp
OwotICAgICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwotICAgICAgICB2
b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcigpOwotICAgICAgICBib29sZWFuIGRlYnVn
Z2VyRW5hYmxlZCgpOwotICAgICAgICBib29sZWFuIHBhdXNlT25FeGNlcHRpb25zKCk7Ci0gICAg
ICAgIGJvb2xlYW4gcHJvZmlsZXJFbmFibGVkKCk7Ci0gICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1
bmN0aW9uPXN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ10gdm9pZCBzdGFydFByb2ZpbGluZygp
OwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zdG9wVXNlckluaXRpYXRlZFByb2Zp
bGluZ10gdm9pZCBzdG9wUHJvZmlsaW5nKCk7Ci0gICAgICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIo
aW4gYm9vbGVhbiBhbHdheXMpOwotICAgICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29s
ZWFuIGFsd2F5cyk7Ci0gICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBjdXJyZW50Q2FsbEZyYW1l
KCk7Ci0gICAgICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoaW4gYm9vbGVhbiBwYXVzZU9u
RXhjZXB0aW9ucyk7Ci0gICAgICAgIHZvaWQgYWRkQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291
cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7Ci0gICAgICAgIHZvaWQgcmVtb3Zl
QnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51
bWJlcik7Ci0KLSAgICAgICAgW0N1c3RvbV0gQXJyYXkgcHJvZmlsZXMoKTsKLSNlbmRpZgotICAg
ICB9OwotIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcwppbmRleCA4NWQ1
Y2QyLi5iY2I3YjJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2UuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlLmpzCkBA
IC0zNDEsMTIgKzM0MSw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KICAgICB9LAogCi0gICAgZ2V0IGRvY3VtZW50Tm9kZSgpIHsKLSAgICAgICAgaWYg
KCJpZGVudGlmaWVyIiBpbiB0aGlzKQotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3RvckNvbnRy
b2xsZXIuZ2V0UmVzb3VyY2VEb2N1bWVudE5vZGUodGhpcy5pZGVudGlmaWVyKTsKLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgfSwKLQogICAgIGdldCByZXF1ZXN0SGVhZGVycygpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5fcmVxdWVzdEhlYWRlcnMgPT09IHVuZGVmaW5lZCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDY3MTY4NzIuLjgyZjBl
YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAt
MjQwLDcgKzI0MCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgdmlldy52aXNpYmxlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyLmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKKyAgICAgICAgICAg
IEluc3BlY3RvckNvbnRyb2xsZXIuZW5hYmxlRGVidWdnZXIoZmFsc2UpOwogICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgICAgICB9CiAgICAgfSwK
QEAgLTQyOSw3ICs0MjksNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICBhdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKKyAgICAgICAg
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZW5hYmxlRGVidWdnZXIoZmFsc2UpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgdGhpcy5fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVl
OwogICAgICAgICB9CkBAIC04NjMsNyArODYzLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyLmRlYnVnZ2Vy
RW5hYmxlZCgpKQogICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5kaXNhYmxlRGVidWdn
ZXIodHJ1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIu
ZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoISFvcHRpb25hbEFsd2F5cyk7CisgICAgICAgICAg
ICBJbnNwZWN0b3JDb250cm9sbGVyLmVuYWJsZURlYnVnZ2VyKCEhb3B0aW9uYWxBbHdheXMpOwog
ICAgIH0sCiAKICAgICBfdG9nZ2xlUGF1c2VPbkV4Y2VwdGlvbnM6IGZ1bmN0aW9uKCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRl
eCA2NDk0NzA3Li4zMmM2MGM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUGFnZTo6UGFnZShD
aHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQ29udGV4dE1lbnVDbGllbnQqIGNvbnRleHRNZW51
Q2xpZW50LCBFZGkKICAgICAsIG1fZHJhZ0NvbnRyb2xsZXIobmV3IERyYWdDb250cm9sbGVyKHRo
aXMsIGRyYWdDbGllbnQpKQogICAgICwgbV9mb2N1c0NvbnRyb2xsZXIobmV3IEZvY3VzQ29udHJv
bGxlcih0aGlzKSkKICAgICAsIG1fY29udGV4dE1lbnVDb250cm9sbGVyKG5ldyBDb250ZXh0TWVu
dUNvbnRyb2xsZXIodGhpcywgY29udGV4dE1lbnVDbGllbnQpKQotICAgICwgbV9pbnNwZWN0b3JD
b250cm9sbGVyKEluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzLCBpbnNwZWN0b3JDbGll
bnQpKQorICAgICwgbV9pbnNwZWN0b3JDb250cm9sbGVyKG5ldyBJbnNwZWN0b3JDb250cm9sbGVy
KHRoaXMsIGluc3BlY3RvckNsaWVudCkpCiAgICAgLCBtX3NldHRpbmdzKG5ldyBTZXR0aW5ncyh0
aGlzKSkKICAgICAsIG1fcHJvZ3Jlc3MobmV3IFByb2dyZXNzVHJhY2tlcikKICAgICAsIG1fYmFj
a0ZvcndhcmRMaXN0KEJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlKHRoaXMpKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggY2NjMWQ0Yy4u
Y2MzZDI1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3Bh
Z2UvUGFnZS5oCkBAIC0yMDksNyArMjA5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBPd25QdHI8RHJhZ0NvbnRyb2xsZXI+IG1fZHJhZ0NvbnRyb2xsZXI7CiAgICAgICAgIE93blB0
cjxGb2N1c0NvbnRyb2xsZXI+IG1fZm9jdXNDb250cm9sbGVyOwogICAgICAgICBPd25QdHI8Q29u
dGV4dE1lbnVDb250cm9sbGVyPiBtX2NvbnRleHRNZW51Q29udHJvbGxlcjsKLSAgICAgICAgUmVm
UHRyPEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICAgICAg
T3duUHRyPEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICAg
ICAgT3duUHRyPFNldHRpbmdzPiBtX3NldHRpbmdzOwogICAgICAgICBPd25QdHI8UHJvZ3Jlc3NU
cmFja2VyPiBtX3Byb2dyZXNzOwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33418</attachid>
            <date>2009-07-24 03:00:12 -0700</date>
            <delta_ts>2009-07-25 14:31:54 -0700</delta_ts>
            <desc>Step 1</desc>
            <filename>inspector_backend.txt</filename>
            <type>text/plain</type>
            <size>108216</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjMxMzA2Ni4uMDZiMzVkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0wNy0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTcGxpdCBJbnNwZWN0b3JDb250cm9s
bGVyIGludG8gSW5zcGVjdG9yQ29udHJvbGxlcgorICAgICAgICBhbmQgSW5zcGVjdG9yQmFja2Vu
ZC4gRXZlcnl0aGluZyBmcm9udGVuZCBuZWVkcyBmcm9tIEluc3BlY3RvckNvbnRyb2xsZXIKKyAg
ICAgICAgd2lsbCBzbG93bHkgbWlncmF0ZSBpbnRvIHRoZSBJbnNwZWN0b3JCYWNrZW5kLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzU0MQorCisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVT
b3VyY2VzLmJrbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6aGln
aGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNl
YXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OmRhdGFiYXNlVGFi
bGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6Omluc3BlY3Rl
ZFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNldHRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjpzZXRTZXR0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnByb2ZpbGVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEds
b2JhbE9iamVjdDo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhJbmRleC5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRl
eC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckJh
Y2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFja2VuZDo6aW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZS5qczoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKIDIwMDktMDctMjMg
IFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cmsgUm93ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAzZjUzY2FhLi44MmQ5ZmM5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCkBAIC0xNzEsNyArMTcxLDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgSFRNTFZpZGVv
RWxlbWVudCBcCiAgICAgSGlzdG9yeSBcCiAgICAgSW1hZ2VEYXRhIFwKLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyIFwKKyAgICBJbnNwZWN0b3JCYWNrZW5kIFwKICAgICBLZXlib2FyZEV2ZW50IFwK
ICAgICBMb2NhdGlvbiBcCiAgICAgTWVkaWFFcnJvciBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA2NDgyZGQyLi4xZjlj
YzA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KQEAgLTIzMSw3ICsyMzEsNyBAQCBJRExfQklORElOR1MgKz0gXAogCVdlYkNv
cmUvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBcCiAJV2ViQ29yZS9odG1sL1ZvaWRDYWxsYmFjay5p
ZGwgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaWRsIFwKLQlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgXAogCVdlYkNvcmUvcGFnZS9CYXJJbmZvLmlkbCBcCiAJ
V2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaWRs
IFwKQEAgLTM2NCwxMSArMzY0LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0
b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmggXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmggXAotCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCBcCkBAIC0xMTE3LDYgKzExMTcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaWN1L3VuaWNvZGUvdXZlcnNpb24uaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjlkM2ViZS4uYjM5MjlkNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgJ2h0bWwvVGltZVJhbmdlcy5pZGwnLAogICAg
ICAgICAgICAgJ2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvVm9p
ZENhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaWRsJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmlkbCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsJywKICAgICAgICAg
ICAgICdwYWdlL0Fic3RyYWN0Vmlldy5pZGwnLApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmgnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaCcsCi0gICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaCcsCkBAIC02MzAsNyArNjMw
LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVu
dENvbGxlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgnLAotICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9y
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0
b20uY3BwJywKQEAgLTEzODAsNiArMTM4MCw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckNsaWVudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCcsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwJywKKyAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCBjYTRhMzU1Li5jNmY2M2U4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQxNyw3ICs0MTcsNyBAQCBJRExf
QklORElOR1MgKz0gXAogICAgIGh0bWwvVGV4dE1ldHJpY3MuaWRsIFwKICAgICBodG1sL1ZhbGlk
aXR5U3RhdGUuaWRsIFwKICAgICBodG1sL1ZvaWRDYWxsYmFjay5pZGwgXAotICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaWRsIFwKICAgICBwYWdlL0JhckluZm8uaWRsIFwKICAgICBwYWdlL0NvbnNvbGUuaWRsIFwK
ICAgICBwYWdlL0Nvb3JkaW5hdGVzLmlkbCBcCkBAIC01MDQsOCArNTA0LDggQEAgU09VUkNFUyAr
PSBcCiAgICAgYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXIuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRD
dXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgXAotICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0Nv
bGxlY3Rpb24uY3BwICBcCkBAIC04NDksNiArODQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRt
bC9QcmVsb2FkU2Nhbm5lci5jcHAgXAogICAgIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHAgXAogICAg
IGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKQEAgLTE1MDQsNiArMTUwNSw3IEBA
IEhFQURFUlMgKz0gXAogICAgIGh0bWwvVGltZVJhbmdlcy5oIFwKICAgICBodG1sL1ZhbGlkaXR5
U3RhdGUuaCBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBcCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE0MDg2YTEuLmMxNzdhNDUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODIsOSArNjgyLDggQEAK
IAkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFDRDBGRjU5ODY5MDA1
NzZCM0IgLyogU2hhcmVkV29ya2VyLmNwcCAqLzsgfTsKIAkJNDFFMUIxRDQwRkY1OTg2OTAwNTc2
QjNCIC8qIFNoYXJlZFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFFMUIxQ0UwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5oICov
OyB9OwogCQk0MUUxQjFENTBGRjU5ODY5MDA1NzZCM0IgLyogU2hhcmVkV29ya2VyLmlkbCBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0YwRkY1
OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5pZGwgKi87IH07Ci0JCTQxRjA2MENEMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8q
IEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi87IH07Ci0JCTQxRjA2MENFMEY1RUVCMkIwMEEw
N0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2MENDMEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCAqLzsgfTsKLQkJNDFGMDYxNkEwRjVFRkJERDAwQTA3RUFDIC8qIEpT
SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjE2OTBGNUVGQkREMDBBMDdFQUMgLyogSlNJbnNwZWN0
b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFD
IC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JC
YWNrZW5kLmNwcCAqLzsgfTsKKwkJNDFGMDYwQ0UwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVj
dG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFGMDYwQ0MwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5oICovOyB9
OwogCQk0MUYwNjE3NDBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYw
NjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggKi87
IH07CiAJCTQxRjA2MTc1MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFGMDYxNzMwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgKi87IH07CiAJCTQxRjA2MThFMEY1RjA2OTgwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYxOEMw
RjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi87IH07CkBAIC0xMDE3LDYgKzEw
MTYsMTAgQEAKIAkJNzU3OTNFRDUwRDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3NhZ2VFdmVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VEMjBEMENFODVCMDA3RkMwQUMgLyogRE9NTWVzc2FnZUV2ZW50SW50ZXJuYWwuaCAqLzsg
fTsKIAkJN0E2NzRCREIwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTY3NEJE
OTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLzsgfTsKIAkJ
N0E2NzRCREMwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E2NzRCREEwRjlFQkY0
RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovOyB9OworCQk3QTc0RUNCNzEw
MTgzOTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNzRFQ0I2MTAxODM5OUEwMEJGOTM5RSAv
KiBJbnNwZWN0b3JCYWNrZW5kLmlkbCAqLzsgfTsKKwkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlF
IC8qIEluc3BlY3RvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tl
bmQuY3BwICovOyB9OworCQk3QTc0RUNCQjEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E3
NEVDQjkxMDE4MzlBNjAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQuaCAqLzsgfTsKKwkJN0E3
NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTc0RUNCQzEwMTgz
OURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLzsgfTsKIAkJN0FC
NkY4ODcwRkI5RDI3MTAwODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODUwRkI5RDI3MTAw
ODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwICovOyB9OwogCQk3QUI2Rjg4ODBGQjlE
MjcxMDA4MDVEMDIgLyogSW5zcGVjdG9ySlNPTk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkY4ODYwRkI5RDI3MTAwODA1RDAyIC8qIElu
c3BlY3RvckpTT05PYmplY3QuaCAqLzsgfTsKIAkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8q
IEluc3BlY3RvckZyb250ZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBRUQzRTAzMEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVu
ZC5jcHAgKi87IH07CkBAIC01NjQ0LDEwICs1NjQ3LDggQEAKIAkJNDFFMUIxQ0QwRkY1OTg2OTAw
NTc2QjNCIC8qIFNoYXJlZFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBTaGFyZWRXb3JrZXIuY3BwOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUUxQjFDRTBGRjU5ODY5MDA1NzZCM0Ig
LyogU2hhcmVkV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYXJl
ZFdvcmtlci5oOyBwYXRoID0gd29ya2Vycy9TaGFyZWRXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFFMUIxQ0YwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU2hhcmVkV29ya2VyLmlkbDsgcGF0aCA9IHdvcmtl
cnMvU2hhcmVkV29ya2VyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFGMDYw
QUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0MUYwNjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxRjA2MENDMEY1
RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQxRjA2MTY5MEY1RUZCREQwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNv
bnRyb2xsZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFGMDYwQ0IwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0luc3BlY3RvckJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjBDQzBGNUVFQjJCMDBBMDdF
QUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSW5zcGVjdG9yQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MUYwNjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUYwNjE3MzBGNUYwMEFDMDBB
MDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjA2MThDMEY1RjA2OTgwMEEwN0VBQyAvKiBD
b25zb2xlTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zb2xl
TWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjAzMyw2ICs2MDM0LDEw
IEBACiAJCTc1NzkzRUQyMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnRJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50SW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0E2NzRCRDkwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cExv
YWREZWZlcnJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCNjEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gSW5zcGVjdG9yQmFja2VuZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdB
NzRFQ0I4MTAxODM5QTUwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTc0RUNCOTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVj
dG9yQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBNzRFQ0JDMTAxODM5REEw
MEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkY4ODUwRkI5RDI3MTAwODA1RDAyIC8qIEluc3Bl
Y3RvckpTT05PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9ySlNPTk9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
QjZGODg2MEZCOUQyNzEwMDgwNUQwMiAvKiBJbnNwZWN0b3JKU09OT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckpTT05PYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3Rv
ckZyb250ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3Bl
Y3RvckZyb250ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MDAsOCAr
OTgwNSw4IEBACiAJCTFDNUZBRUNBMERDRkQ4QzkwMEQ1OEY3OCAvKiBJbnNwZWN0b3IgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQxRjA2MENCMEY1RUVC
MkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAotCQkJCTQxRjA2MEND
MEY1RUVCMkIwMEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKKwkJCQk0MUYw
NjBDQjBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmNwcCAqLywKKwkJCQk0
MUYwNjBDQzBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggKi8sCiAJCQkJ
MUM1RkFFQ0YwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8s
CiAJCQkJMUM1RkFFRDAwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5o
ICovLAogCQkJKTsKQEAgLTk4MTEsMTMgKzk4MTYsMTUgQEAKIAkJMUM4MUI5NEQwRTk3MzJEOTAw
MjY2RTA3IC8qIGluc3BlY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJN0E3NEVDQjgxMDE4MzlBNTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
Y3BwICovLAorCQkJCTdBNzRFQ0I5MTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5k
LmggKi8sCisJCQkJN0E3NEVDQjYxMDE4Mzk5QTAwQkY5MzlFIC8qIEluc3BlY3RvckJhY2tlbmQu
aWRsICovLAogCQkJCTFDODFCOTU5MEU5NzMzMDgwMDI2NkUwNyAvKiBmcm9udC1lbmQgKi8sCiAJ
CQkJNDFGMDYxOEQwRjVGMDY5ODAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmNwcCAqLywKIAkJ
CQk0MUYwNjE4QzBGNUYwNjk4MDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuaCAqLywKIAkJCQkx
QzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8sCiAJCQkJMUM4
MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAogCQkJ
CTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCi0J
CQkJNDFGMDYwQUEwRjVFRThCQjAwQTA3RUFDIC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaWRsICov
LAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCAqLywKIAkJCQk0MUYwNjIxMjBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5oICovLAogCQkJCTQxRjA2MTczMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwICovLApAQCAtMTM2MDQsNiArMTM2MTEsNyBAQAog
CQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyog
SlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzJFRDZCQjBDNkJEMkYwMDA5
MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQkxQTlFRjQ1NjBBMUI5NTdEMDAzMzJC
NjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovLAogCQkJCTkzQkE1
OUIxMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NEQVRBU2VjdGlvbkN1c3RvbS5jcHAgKi8sCkBAIC0x
MzY1Nyw3ICsxMzY2NSw2IEBACiAJCQkJQkMxN0Y5NjUwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCUFCNENCNEVBMEI4QkRBM0QwMDlGNDBC
MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggKi8sCiAJCQkJQTdEMDMxOEQwRTkzNTQw
MzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLywKLQkJCQk0MUYwNjE2OTBGNUVG
QkREMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcCAqLywKIAkJCQkx
QzVGQUVFNjBEQ0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNw
cCAqLywKIAkJCQlCQ0UxQzQzRjBEOTgzMEY0MDAzQjAyRjIgLyogSlNMb2NhdGlvbkN1c3RvbS5j
cHAgKi8sCiAJCQkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxD
dXN0b20uY3BwICovLApAQCAtMTYwODYsNyArMTYwOTMsNyBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlF
NjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzA5MTU4OEIw
REI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzA5MTU4OEQwREI0MjA5MjAwRTU1QUY0IC8qIEpTSW5zcGVjdG9yQ2FsbGJhY2tX
cmFwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MUYwNjBDRTBGNUVFQjJCMDBBMDdFQUMgLyog
SlNJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MUYwNjBDRTBGNUVF
QjJCMDBBMDdFQUMgLyogSlNJbnNwZWN0b3JCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5
RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNzAyOCw2ICsxNzAzNSw3IEBACiAJ
CQkJMkVDRjdBRTIxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RURCMDNEMTAxNjg0OTQwMEZFODExMyAvKiBET01PYmplY3RXaXRoU1ZHQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlw
dFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QTc0RUNCQjEwMTgzOUE2MDBC
RjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzE0MCw2ICsx
NzE0OCw3IEBACiAJCQkJNDFFMUIxRDUwRkY1OTg2OTAwNTc2QjNCIC8qIFNoYXJlZFdvcmtlci5p
ZGwgaW4gUmVzb3VyY2VzICovLAogCQkJCTE1Qzc3MDhDMTAwRDNDNkEwMDVCQTI2NyAvKiBWYWxp
ZGl0eVN0YXRlLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMkVDRjdBRTMxMDE2MkI1ODAwNDI3
REU3IC8qIEVycm9yRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk3QTc0RUNCNzEwMTgz
OTlBMDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTgxNjAsOCArMTgxNjksNyBAQAogCQkJCUE3RDAzMThFMEU5MzU0MDMwMEUyNEFDRCAvKiBKU0lt
YWdlRGF0YUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDkxNTg4QTBEQjQyMDkyMDBF
NTVBRjQgLyogSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMwOTE1ODhDMERCNDIwOTIwMEU1NUFGNCAvKiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0MUYwNjBDRDBGNUVFQjJCMDBBMDdFQUMgLyogSlNJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQxRjA2MTZBMEY1RUZCREQw
MEEwN0VBQyAvKiBKU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDFGMDYwQ0QwRjVFRUIyQjAwQTA3RUFDIC8qIEpTSW5zcGVjdG9yQmFja2VuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1
OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg2NjI5RDQwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE5MDYzLDYgKzE5MDcxLDggQEAKIAkJCQkyRUNGN0FEQzEwMTYyQjM4MDA0
MjdERTcgLyogSlNFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFQ0Y3QUUxMTAx
NjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUVG
Q0FFMTAxNkNFNEEwMDQwRDM0RSAvKiBET01SR0JDb2xvci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTdBNzRFQ0JBMTAxODM5QTYwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckJhY2tl
bmRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVT
b3VyY2VzLmJrbCBiL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IGRlOGE3ZGMuLjRk
NzRhYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNv
cmUvV2ViQ29yZVNvdXJjZXMuYmtsCkBAIC0xMDUsOCArMTA1LDggQEAgVGhpcyBmaWxlIGNvbnRh
aW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgICAgICBi
aW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
SW1hZ2VEYXRhQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVj
dFdyYXBwZXIuY3BwCisgICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3Rv
bS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuY3Bw
Ci0gICAgICAgIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKICAg
ICAgICAgYmluZGluZ3MvanMvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcAogICAgICAg
ICBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9K
U01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCkBAIC0zNTMsNyArMzUzLDcgQEAgVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTFVMaXN0RWxlbWVudC5jcHAKICAg
ICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hpc3RvcnkuY3BwCiAgICAgICAgIERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEuY3BwCi0gICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorICAgICAgICBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSW5zcGVjdG9yQmFja2VuZC5jcHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNLZXlib2FyZEV2ZW50LmNwcAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTTG9jYXRpb24uY3BwCkBAIC02NjEsNiArNjYxLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogCiAgICAgPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lOU1BFQ1RPUiI+CiAgICAgICAgIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKyAgICAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuY3BwCiAgICAgICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcAog
ICAgICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcAogICAgICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zY2NiMDZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCkBAIC0wLDAgKzEsMjgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0luc3BlY3RvckJhY2tlbmQuaCIKKworI2lu
Y2x1ZGUgIkNvbnNvbGUuaCIKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCisjZW5kaWYKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIgorI2luY2x1ZGUg
IkpTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5j
bHVkZSAiSlNSYW5nZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlw
dERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlLmg+
CisjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNJbnNwZWN0b3JCYWNr
ZW5kOjpoaWdobGlnaHRET01Ob2RlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0
JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBK
U1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcjo6YXNXcmFwcGVyKGFyZ3MuYXQoMCkpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBOb2RlKiBu
b2RlID0gdG9Ob2RlKHdyYXBwZXItPnVud3JhcHBlZE9iamVjdCgpKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgaW1wbCgpLT5oaWdobGlnaHQo
bm9kZSk7CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0luc3Bl
Y3RvckJhY2tlbmQ6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0g
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgcmVzdWx0OworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRz
KG5vZGUpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRvIHsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgp
LCB0YXJnZXQsIHRydWUsIGZhbHNlKSk7CisgICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFw
c2VkKGVjKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIEEgbm9uLWNvbGxhcHNl
ZCByZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGlsbCBu
b3QKKyAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUwOTMy
OCkuIEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIFZpc2libGVQb3NpdGlv
biBuZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNU
UkVBTSk7CisgICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFy
Y2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICByZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKKworICAgICAg
ICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAgIH0gd2hpbGUgKHRy
dWUpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisKKyNp
ZiBFTkFCTEUoREFUQUJBU0UpCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6ZGF0YWJhc2VU
YWJsZU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9E
YXRhYmFzZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAgaWYgKCFkYXRhYmFzZSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciByZXN1bHQ7CisKKyAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRh
YmxlTmFtZXMoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdGFibGVOYW1lc1tpXSkpOworCisgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9CisjZW5kaWYKKworSlNWYWx1ZSBKU0luc3BlY3Rv
ckJhY2tlbmQ6Omluc3BlY3RlZFdpbmRvdyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikKK3sK
KyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEpT
RE9NV2luZG93KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KGljLT5pbnNwZWN0ZWRQ
YWdlKCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
Ojp3cmFwKGluc3BlY3RlZFdpbmRvdy0+Z2xvYmFsRXhlYygpLCBpbnNwZWN0ZWRXaW5kb3cpOwor
fQorCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6c2V0dGluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcga2V5ID0gYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBs
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJiBz
ZXR0aW5nID0gaWMtPnNldHRpbmcoa2V5KTsKKworICAgIHN3aXRjaCAoc2V0dGluZy50eXBlKCkp
IHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpT
ZXR0aW5nOjpOb1R5cGU6CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHNldHRpbmcuc3RyaW5nKCkpOworICAgICAgICBj
YXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkRvdWJsZVR5cGU6CisgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2V0dGluZy5kb3VibGVWYWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpJbnRlZ2VyVHlwZToKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBzZXR0aW5nLmludGVnZXJWYWx1ZSgpKTsKKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpCb29sZWFuVHlwZToKKyAgICAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4oc2V0dGluZy5ib29sZWFuVmFsdWUoKSk7CisgICAgICAg
IGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6U3RyaW5nVmVjdG9yVHlwZTogewor
ICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgc3RyaW5nc0FycmF5OworICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MgPSBzZXR0aW5nLnN0cmluZ1ZlY3Rvcigp
OworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5ncy5zaXplKCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICAgICAgc3RyaW5nc0FycmF5LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdzW2ldKSk7
CisgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgc3RyaW5nc0FycmF5KTsK
KyAgICAgICAgfQorICAgIH0KK30KKworSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OnNldFNl
dHRpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChh
cmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgU3Ry
aW5nIGtleSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OlNldHRpbmcgc2V0dGluZzsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdz
LmF0KDEpOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpIHx8IHZhbHVlLmlzTnVsbCgpKSB7
CisgICAgICAgIC8vIERvIG5vdGhpbmcuIFRoZSBzZXR0aW5nIGlzIGFscmVhZHkgTm9UeXBlLgor
ICAgICAgICBBU1NFUlQoc2V0dGluZy50eXBlKCkgPT0gSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0
dGluZzo6Tm9UeXBlKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAg
IHNldHRpbmcuc2V0KHZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS5p
c051bWJlcigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b051bWJlcihleGVjKSk7Cisg
ICAgZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHNldHRpbmcuc2V0KHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7CisgICAgZWxzZSB7CisgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkg
PSBhc0FycmF5KHZhbHVlKTsKKyAgICAgICAgaWYgKCFqc0FycmF5KQorICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKS50b1N0cmluZyhl
eGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHN0cmluZ3MuYXBwZW5kKGl0
ZW0pOworICAgICAgICB9CisgICAgICAgIHNldHRpbmcuc2V0KHN0cmluZ3MpOworICAgIH0KKwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpOworICAgIGlmIChpYykKKyAgICAgICAgaWMtPnNldFNldHRpbmcoa2V5LCBzZXR0
aW5nKTsKKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTSW5zcGVj
dG9yQmFja2VuZDo6d3JhcENhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIHJldHVybiBKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6d3JhcChl
eGVjLCBhcmdzLmF0KDApKTsKK30KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
CitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6Y3VycmVudENhbGxGcmFtZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmKQoreworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IGltcGwoKS0+Y3VycmVudENhbGxGcmFtZSgpOworICAgIGlmICghY2FsbEZyYW1lIHx8
ICFjYWxsRnJhbWUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICAvLyBGSVhNRTogSSBhbSBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZC4g
Q2FuIHdlIGp1c3QgdXNlIGV4ZWM/CisgICAgRXhlY1N0YXRlKiBnbG9iYWxFeGVjID0gY2FsbEZy
YW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisKKyAgICBK
U0xvY2sgbG9jayhmYWxzZSk7CisgICAgcmV0dXJuIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6
d3JhcChnbG9iYWxFeGVjLCB0b0pTKGV4ZWMsIGNhbGxGcmFtZSkpOworfQorCitKU1ZhbHVlIEpT
SW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
Qzo6QXJnTGlzdCYpCit7CisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIHJlc3VsdDsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UHJvZmlsZT4gPiYgcHJvZmlsZXMg
PSBpYy0+cHJvZmlsZXMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodG9KUyhleGVjLCBwcm9maWxlc1tp
XS5nZXQoKSkpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Cit9
CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIwNmM5ZTkuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtp
dEBtYXR0bGlsZWsuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2lmIEVOQUJMRShEQVRBQkFTRSkK
LSNpbmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKLSNlbmRpZgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNs
dWRlICJKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU0luc3BlY3RvckNh
bGxiYWNrV3JhcHBlci5oIgotI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIkpTUmFuZ2Uu
aCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgotI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0jaW5jbHVkZSAi
SmF2YVNjcmlwdENhbGxGcmFtZS5oIgotI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5o
IgotI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCi0jaW5jbHVkZSAiSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZS5oPgotI2luY2x1ZGUgPHBy
b2ZpbGVyL1Byb2ZpbGVyLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxp
Z2h0RE9NTm9kZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLXsK
LSAgICBpZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LQotICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5l
ZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IHRvTm9k
ZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGltcGwoKS0+aGlnaGxpZ2h0KG5vZGUpOwotCi0g
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9s
bGVyOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgaWRlbnRp
ZmllciA9IGFyZ3MuYXQoMCkudG9VSW50MzIoZXhlYywgb2spOwotICAgIGlmICghb2spCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNl
PiByZXNvdXJjZSA9IGltcGwoKS0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOwotICAgIEFT
U0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSByZXNvdXJjZS0+ZnJhbWUoKTsKLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgIGlmIChkb2N1bWVu
dC0+aXNQbHVnaW5Eb2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc0ltYWdlRG9jdW1lbnQoKSB8fCBk
b2N1bWVudC0+aXNNZWRpYURvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgRXhlY1N0YXRlKiByZXNvdXJjZUV4ZWMgPSB0b0pTRE9NV2luZG93U2hlbGwoZnJh
bWUpLT53aW5kb3coKS0+Z2xvYmFsRXhlYygpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwot
ICAgIHJldHVybiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAocmVzb3VyY2VFeGVjLCB0
b0pTKHJlc291cmNlRXhlYywgZG9jdW1lbnQpKTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNv
bnRyb2xsZXI6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17
Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0KLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkpOwotICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0ID0gYXJn
cy5hdCgxKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
cmVzdWx0OwotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG5v
ZGUpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGRvIHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0
YXJnZXQsIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2Vk
KGVjKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEEgbm9uLWNvbGxhcHNlZCBy
ZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGlsbCBub3QK
LSAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUwOTMyOCku
IEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiBu
ZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVB
TSk7Ci0gICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihzZWFyY2hS
YW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0KCkpKTsKLQotICAgICAgICBz
ZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOwotICAgIH0gd2hpbGUgKHRydWUp
OwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0KLSNpZiBF
TkFCTEUoREFUQUJBU0UpCi1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGF0YWJhc2VU
YWJsZU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBp
ZiAoYXJncy5zaXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdG9E
YXRhYmFzZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFkYXRhYmFzZSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciByZXN1bHQ7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzID0gZGF0YWJhc2UtPnRh
YmxlTmFtZXMoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0YWJsZU5hbWVzLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoanNTdHJpbmcoZXhlYywgdGFibGVOYW1lc1tpXSkpOwotCi0gICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0jZW5kaWYKLQotSlNWYWx1ZSBKU0luc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvdyhFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikK
LXsKLSAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhpbXBs
KCktPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotICAgIHJldHVybiBKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoaW5zcGVjdGVkV2luZG93LT5nbG9iYWxFeGVjKCksIGluc3Bl
Y3RlZFdpbmRvdyk7Ci19Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXR0aW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5z
aXplKCkgPCAxKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBr
ZXkgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBjb25zdCBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nJiBzZXR0aW5nID0gaW1wbCgpLT5zZXR0aW5nKGtleSk7Ci0K
LSAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlOgotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZzo6U3RyaW5nVHlwZToKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBz
ZXR0aW5nLnN0cmluZygpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0
aW5nOjpEb3VibGVUeXBlOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHNldHRp
bmcuZG91YmxlVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0
dGluZzo6SW50ZWdlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc2V0
dGluZy5pbnRlZ2VyVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6
U2V0dGluZzo6Qm9vbGVhblR5cGU6Ci0gICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHNldHRp
bmcuYm9vbGVhblZhbHVlKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OlNl
dHRpbmc6OlN0cmluZ1ZlY3RvclR5cGU6IHsKLSAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIHN0cmluZ3NBcnJheTsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJp
bmdzID0gc2V0dGluZy5zdHJpbmdWZWN0b3IoKTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGxlbmd0aCA9IHN0cmluZ3Muc2l6ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIHN0cmluZ3NBcnJheS5hcHBlbmQo
anNTdHJpbmcoZXhlYywgc3RyaW5nc1tpXSkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0cmluZ3NBcnJheSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUpTVmFs
dWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZXR0aW5nKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAyKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBrZXkgPSBhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nIHNldHRp
bmc7Ci0KLSAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgxKTsKLSAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWQoKSB8fCB2YWx1ZS5pc051bGwoKSkgewotICAgICAgICAvLyBEbyBub3RoaW5nLiBU
aGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KLSAgICAgICAgQVNTRVJUKHNldHRpbmcudHlw
ZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZSk7Ci0gICAgfSBlbHNl
IGlmICh2YWx1ZS5pc1N0cmluZygpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b1N0cmlu
ZyhleGVjKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgc2V0dGlu
Zy5zZXQodmFsdWUudG9OdW1iZXIoZXhlYykpOwotICAgIGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVh
bigpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIGVs
c2UgewotICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheSh2YWx1ZSk7Ci0gICAgICAg
IGlmICghanNBcnJheSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBzdHJpbmdzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwganNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChpdGVtKTsKLSAgICAgICAgfQotICAgICAgICBz
ZXR0aW5nLnNldChzdHJpbmdzKTsKLSAgICB9Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgaW1wbCgpLT5zZXRTZXR0
aW5nKGtleSwgc2V0dGluZyk7Ci0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNW
YWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OndyYXBDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gSlNJbnNwZWN0b3JDYWxsYmFj
a1dyYXBwZXI6OndyYXAoZXhlYywgYXJncy5hdCgwKSk7Ci19Ci0KLSNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJlbnRD
YWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKLXsKLSAgICBKYXZhU2Ny
aXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBpbXBsKCktPmN1cnJlbnRDYWxsRnJhbWUoKTsKLSAg
ICBpZiAoIWNhbGxGcmFtZSB8fCAhY2FsbEZyYW1lLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEkgYW0gbm90IHN1cmUgaWYgdGhpcyBp
cyBhY3R1YWxseSBuZWVkZWQuIENhbiB3ZSBqdXN0IHVzZSBleGVjPwotICAgIEV4ZWNTdGF0ZSog
Z2xvYmFsRXhlYyA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotCi0gICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIHJldHVybiBKU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXI6OndyYXAoZ2xvYmFsRXhlYywgdG9KUyhleGVjLCBjYWxsRnJhbWUp
KTsKLX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVzKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmKQotewotICAgIEpTTG9jayBsb2NrKGZh
bHNlKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXN1bHQ7Ci0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxQcm9maWxlPiA+JiBwcm9maWxlcyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQodG9KUyhleGVjLCBwcm9maWxlc1tpXS5nZXQoKSkpOwotCi0gICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJlc3VsdCk7Ci19Ci0KLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVj
dC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKaW5kZXggN2Y2Mzkx
ZC4uMDNlNmQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3Qu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcApAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCi0jaW5jbHVkZSAiSlNJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSlNJ
bnNwZWN0b3JCYWNrZW5kLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC0x
MjMsNyArMTIzLDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFMKICAgICByZXR1cm4gaGFuZGxl
RXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAotYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNv
bnRyb2xsZXIqIHZhbHVlKQorYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQqIHZhbHVl
KQogewogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5wdXREaXJlY3QoSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIHRv
SlMoc2NyaXB0U3RhdGUsIHZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaAppbmRl
eCBlZDg2NjU5Li45NzAyMmRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dE9iamVjdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKQEAgLTM4
LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL1Byb3RlY3QuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CisgICAgY2xhc3MgSW5zcGVj
dG9yQmFja2VuZDsKIAogICAgIGNsYXNzIFNjcmlwdE9iamVjdCA6IHB1YmxpYyBTY3JpcHRWYWx1
ZSB7CiAgICAgcHVibGljOgpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgU2NyaXB0R2xvYmFsT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9i
amVjdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFy
KiBuYW1lLCBJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgICAgIHN0YXRpYyBib29sIHNldChT
Y3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckJhY2tlbmQqKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgU2NyaXB0
T2JqZWN0Jik7CiAgICAgICAgIHN0YXRpYyBib29sIHJlbW92ZShTY3JpcHRTdGF0ZSosIGNvbnN0
IGNoYXIqIG5hbWUpOwogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTU9iamVjdHNJbmNsdWRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVjdHNJ
bmNsdWRlLmgKaW5kZXggODZlNTc1NC4uZGIxNjQ5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01PYmplY3RzSW5jbHVkZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
T2JqZWN0c0luY2x1ZGUuaApAQCAtODQsNyArODQsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVk
ZSAiTG9jYXRpb24uaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25lLmNwcAppbmRleCBjMjk0MWMzLi4zNWUxZDVl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3VyY2VzQWxsSW5PbmUu
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAK
QEAgLTE1MCw3ICsxNTAsNyBAQAogI2luY2x1ZGUgImJpbmRpbmdzL1Y4SFRNTFVMaXN0RWxlbWVu
dC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhIVE1MVmlkZW9FbGVtZW50LmNwcCIKICNpbmNs
dWRlICJiaW5kaW5ncy9WOEltYWdlRGF0YS5jcHAiCi0jaW5jbHVkZSAiYmluZGluZ3MvVjhJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOEluc3BlY3RvckJhY2tl
bmQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4S2V5Ym9hcmRFdmVudC5jcHAiCiAjaW5jbHVk
ZSAiYmluZGluZ3MvVjhMb2NhdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhNZWRpYUVy
cm9yLmNwcCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcAppbmRleCBjMjI0NjUxLi4w
ZjUwMGZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwCkBAIC0xMTYsMTAgKzEx
NiwxMCBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgUwogICAgIHJldHVybiBzY29wZS5zdWNjZXNz
KCk7CiB9CiAKLWJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JDb250cm9sbGVyKiB2YWx1ZSkKK2Jv
b2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25z
dCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JCYWNrZW5kKiB2YWx1ZSkKIHsKICAgICBTY3JpcHRTY29w
ZSBzY29wZShzY3JpcHRTdGF0ZSk7Ci0gICAgc2NvcGUuZ2xvYmFsKCktPlNldCh2ODo6U3RyaW5n
OjpOZXcobmFtZSksIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpJTlNQRUNUT1JDT05UUk9MTEVSLCB2YWx1ZSkpOworICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQo
djg6OlN0cmluZzo6TmV3KG5hbWUpLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VORCwgdmFsdWUpKTsKICAgICByZXR1cm4gc2NvcGUu
c3VjY2VzcygpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9i
amVjdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuaAppbmRleCBlNTYxOGFi
Li4yZDBhZGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmgKQEAgLTM2LDcgKzM2LDcg
QEAKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKKyAgICBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogICAgIGNsYXNz
IFNjcmlwdFN0YXRlOwogCiAgICAgY2xhc3MgU2NyaXB0T2JqZWN0IDogcHVibGljIFNjcmlwdFZh
bHVlIHsKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNj
cmlwdEdsb2JhbE9iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgYm9vbCBzZXQo
U2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmKTsKLSAg
ICAgICAgc3RhdGljIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5z
cGVjdG9yQ29udHJvbGxlciopOworICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUq
LCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JCYWNrZW5kKik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYpOwog
ICAgICAgICBzdGF0aWMgYm9vbCByZW1vdmUoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
KTsKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAKaW5kZXggYWZhODFjYi4uODY2
NmQ0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCkBAIC0xMzksNyArMTM5LDcgQEAKICNpbmNs
dWRlICJWOEhUTUxUaXRsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJWOEhUTUxVTGlzdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJWOEltYWdlRGF0YS5oIgotI2luY2x1ZGUgIlY4SW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlY4SW5zcGVjdG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIlY4TWVk
aWFMaXN0LmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgogI2luY2x1ZGUgIlY4TWVz
c2FnZUV2ZW50LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCmluZGV4IDU3ZjQ0NjAuLmZmN2E1YWYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5oCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhJbmRleC5oCkBAIC0zMzMsNyArMzMzLDcgQEAgdHlwZWRlZiB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpGdW5jdGlvblRlbXBsYXRlRmFjdG9yeSkoKTsK
ICAgICBWKEhUTUxPUFRJT05TQ09MTEVDVElPTiwgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKSAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICBWKElNQUdFREFUQSwgSW1hZ2VEYXRhKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKENBTlZBU1BJWEVMQVJS
QVksIENhbnZhc1BpeGVsQXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBWKElOU1BFQ1RPUkNPTlRST0xMRVIsIEluc3BlY3RvckNvbnRyb2xsZXIpICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBWKElOU1BFQ1RPUkJBQ0tFTkQsIEluc3BlY3RvckJhY2tlbmQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWKEtFWUJPQVJERVZFTlQsIEtl
eWJvYXJkRXZlbnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBW
KExPQ0FUSU9OLCBMb2NhdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBWKE1FRElBTElTVCwgTWVkaWFMaXN0KQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAppbmRleCBmZDhmZjE0Li5kMWIyZmExIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtMzgz
LDIzICszODMsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBERUNMQVJFX0NBTExC
QUNLKFRyZWVXYWxrZXJOZXh0U2libGluZyk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soVHJl
ZVdhbGtlclByZXZpb3VzU2libGluZyk7CiAKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyUHJvZmlsZXMpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3Bl
Y3RvckNvbnRyb2xsZXJIaWdobGlnaHRET01Ob2RlKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhJbnNwZWN0b3JDb250cm9sbGVyQWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKTsKLSAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVyR2V0UmVzb3VyY2VEb2N1bWVudE5v
ZGUpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJBZGRTb3Vy
Y2VUb0ZyYW1lKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVy
U2VhcmNoKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JDb250cm9sbGVyU2V0
dGluZyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxlckluc3Bl
Y3RlZFdpbmRvdyk7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQ29udHJvbGxl
clNldFNldHRpbmcpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xs
ZXJDdXJyZW50Q2FsbEZyYW1lKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JD
b250cm9sbGVyRGVidWdnZXJFbmFibGVkKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyUGF1c2VPbkV4Y2VwdGlvbnMpOwotICAgICAgICBERUNMQVJFX0NBTExC
QUNLKEluc3BlY3RvckNvbnRyb2xsZXJQcm9maWxlckVuYWJsZWQpOworICAgICAgICBERUNMQVJF
X0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQcm9maWxlcyk7CisgICAgICAgIERFQ0xBUkVfQ0FM
TEJBQ0soSW5zcGVjdG9yQmFja2VuZEhpZ2hsaWdodERPTU5vZGUpOworICAgICAgICBERUNMQVJF
X0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRBZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUpOworICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRBZGRTb3VyY2VUb0ZyYW1lKTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kU2VhcmNoKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kU2V0dGluZyk7CisgICAgICAgIERF
Q0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZEluc3BlY3RlZFdpbmRvdyk7CisgICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZFNldFNldHRpbmcpOworICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRDdXJyZW50Q2FsbEZyYW1lKTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kRGVidWdnZXJFbmFibGVkKTsKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kUGF1c2VPbkV4Y2VwdGlvbnMp
OworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQcm9maWxlckVuYWJs
ZWQpOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNw
ZWN0b3JDb250cm9sbGVyRGF0YWJhc2VUYWJsZU5hbWVzKTsKKyAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhJbnNwZWN0b3JCYWNrZW5kRGF0YWJhc2VUYWJsZU5hbWVzKTsKICNlbmRpZgotICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckNvbnRyb2xsZXJXcmFwQ2FsbGJhY2spOworICAg
ICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRXcmFwQ2FsbGJhY2spOwogCiAg
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soTm9kZUl0ZXJhdG9yTmV4dE5vZGUpOwogICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKE5vZGVJdGVyYXRvclByZXZpb3VzTm9kZSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDczZDdlCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9t
LmNwcApAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
VGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisKKyNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNMKElu
c3BlY3RvckJhY2tlbmRIaWdobGlnaHRET01Ob2RlKQoreworICAgIElOQ19TVEFUUygiSW5zcGVj
dG9yQmFja2VuZC5oaWdobGlnaHRET01Ob2RlKCkiKTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIE5vZGUqIG5vZGUg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJh
Y2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNr
ZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAg
IGluc3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodChub2RlKTsKKworICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kU2VhcmNo
KQoreworICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC5zZWFyY2goKSIpOworCisgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIHRhcmdl
dCA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSk7CisgICAgaWYgKHRhcmdl
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICB2ODo6
TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldygpOworICAgIFJlZlB0cjxS
YW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG5vZGUpKTsKKworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGludCBpbmRleCA9IDA7CisgICAgZG8geworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRh
cmdldCwgdHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQo
ZWMpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQSBub24tY29sbGFwc2VkIHJl
c3VsdCByYW5nZSBjYW4gaW4gc29tZSBmdW5reSB3aGl0ZXNwYWNlIGNhc2VzIHN0aWxsIG5vdAor
ICAgICAgICAvLyBhZHZhbmNlIHRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uICg0NTA5MzI4KS4g
QnJlYWsgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5l
d1N0YXJ0ID0gZW5kVmlzaWJsZVBvc2l0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFN
KTsKKyAgICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNlYXJjaFJh
bmdlLmdldCgpLCBET1dOU1RSRUFNKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJl
c3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdDxSYW5nZT4oVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVzdWx0UmFuZ2UuZ2V0KCkp
KTsKKworICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOworICAg
IH0gd2hpbGUgKHRydWUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmIEVOQUJMRShE
QVRBQkFTRSkKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kRGF0YWJhc2VUYWJs
ZU5hbWVzKQoreworICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC5kYXRhYmFzZVRhYmxl
TmFtZXMoKSIpOworICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6
TmV3KDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworQ0FMTEJBQ0tfRlVOQ19E
RUNMKEluc3BlY3RvckJhY2tlbmRJbnNwZWN0ZWRXaW5kb3cpCit7CisgICAgSU5DX1NUQVRTKCJJ
bnNwZWN0b3JCYWNrZW5kLmluc3BlY3RlZFdpbmRvdygpIik7CisKKyAgICBJbnNwZWN0b3JCYWNr
ZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCBhcmdz
LkhvbGRlcigpKTsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckJhY2tl
bmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGljLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpLT5kb21XaW5kb3coKSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJ
bnNwZWN0b3JCYWNrZW5kU2V0dGluZykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2V0dGluZygpIik7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzBdKTsKKyAgICBpZiAoa2V5LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3Rv
ckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JC
YWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQmFja2VuZC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGlj
LT5zZXR0aW5nKGtleSk7CisKKyAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9U
eXBlOgorICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJ
bnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgorICAgICAgICAgICAgcmV0
dXJuIHY4U3RyaW5nKHNldHRpbmcuc3RyaW5nKCkpOworICAgICAgICBjYXNlIEluc3BlY3RvckNv
bnRyb2xsZXI6OlNldHRpbmc6OkRvdWJsZVR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6Ok51
bWJlcjo6TmV3KHNldHRpbmcuZG91YmxlVmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5zcGVjdG9y
Q29udHJvbGxlcjo6U2V0dGluZzo6SW50ZWdlclR5cGU6CisgICAgICAgICAgICByZXR1cm4gdjg6
Ok51bWJlcjo6TmV3KHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOworICAgICAgICBjYXNlIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgorICAgICAgICAgICAgcmV0dXJu
IHY4Qm9vbGVhbihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnNwZWN0
b3JDb250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7CisgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3RyaW5nVmVjdG9yKCk7Cisg
ICAgICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBzdHJpbmdzQXJyYXkgPSB2ODo6QXJyYXk6
Ok5ldyhzdHJpbmdzLnNpemUoKSk7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGgg
PSBzdHJpbmdzLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXktPlNldCh2ODo6TnVtYmVy
OjpOZXcoaSksIHY4U3RyaW5nKHN0cmluZ3NbaV0pKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJp
bmdzQXJyYXk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNw
ZWN0b3JCYWNrZW5kU2V0U2V0dGluZykKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2V0U2V0dGluZygpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7CisgICAgaWYgKGtleS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0
aW5nIHNldHRpbmc7CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3NbMV07
CisgICAgaWYgKHZhbHVlLT5Jc1VuZGVmaW5lZCgpIHx8IHZhbHVlLT5Jc051bGwoKSkgeworICAg
ICAgICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KKyAgICAg
ICAgQVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6
Ok5vVHlwZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgc2V0
dGluZy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSkpOworICAgIGVsc2Ug
aWYgKHZhbHVlLT5Jc051bWJlcigpKQorICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVy
VmFsdWUoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICBzZXR0
aW5nLnNldCh2YWx1ZS0+Qm9vbGVhblZhbHVlKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0Fy
cmF5KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2Nh
bDx2ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5n
czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpdGVtID0gdG9XZWJDb3JlU3RyaW5nKHY4QXJyYXkt
PkdldCh2ODo6SW50ZWdlcjo6TmV3KGkpKSk7CisgICAgICAgICAgICBpZiAoaXRlbS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IHN0cmluZ3MuYXBwZW5kKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIHNldHRpbmcuc2V0KHN0
cmluZ3MpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVD
VE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMg
PSBpbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgaWYgKGljKQor
ICAgICAgICBpbnNwZWN0b3JCYWNrZW5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRp
bmcoa2V5LCBzZXR0aW5nKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0NB
TExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kV3JhcENhbGxiYWNrKQoreworICAgIElO
Q19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC53cmFwQ2FsbGJhY2soKSIpOworICAgIHJldHVybiBh
cmdzWzBdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY1N2MyYy4uMDAwMDAwMAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJET01XaW5kb3cuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUmFuZ2Uu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJIaWdobGln
aHRET01Ob2RlKQotewotICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5oaWdobGln
aHRET01Ob2RlKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKLSAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
YXJnc1swXSkpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENs
YXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkpOwotICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmhpZ2hsaWdodChub2RlKTsKLQotICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVyR2V0UmVz
b3VyY2VEb2N1bWVudE5vZGUpCi17Ci0gICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVy
LmdldFJlc291cmNlRG9jdW1lbnROb2RlKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIGlmICghYXJnc1sxXS0+
SXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHVuc2ln
bmVkIGlkZW50aWZpZXIgPSBhcmdzWzFdLT5JbnQzMlZhbHVlKCk7Ci0KLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JD
T05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+
IHJlc291cmNlID0gaW5zcGVjdG9yQ29udHJvbGxlci0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZp
ZXIpOwotICAgIEFTU0VSVChyZXNvdXJjZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IHJlc291cmNlLT5m
cmFtZSgpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotCi0g
ICAgaWYgKGRvY3VtZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzSW1hZ2VE
b2N1bWVudCgpIHx8IGRvY3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9DVU1FTlQsIGRvY3VtZW50KTsKLX0KLQotQ0FMTEJBQ0tf
RlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZWFyY2gpCi17Ci0gICAgSU5DX1NUQVRTKCJJ
bnNwZWN0b3JDb250cm9sbGVyLnNlYXJjaCgpIik7Ci0KLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8
IDIpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBOb2RlKiBub2RlID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgdGFyZ2V0ID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxDaGVjayhhcmdzWzFdKTsKLSAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJl
c3VsdCA9IHY4OjpBcnJheTo6TmV3KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShy
YW5nZU9mQ29udGVudHMobm9kZSkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
aW50IGluZGV4ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFu
Z2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBmYWxzZSkp
OwotICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChlYykpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBz
b21lIGZ1bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90Ci0gICAgICAgIC8vIGFkdmFuY2Ug
dGhlIHJhbmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0byBhdm9pZCBpbmZp
bml0ZSBsb29wLgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxl
UG9zaXRpb24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3
U3RhcnQgPT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJF
QU0pKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcmVzdWx0LT5TZXQodjg6Ok51bWJl
cjo6TmV3KGluZGV4KyspLCBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0PFJhbmdlPihW
OENsYXNzSW5kZXg6OlJBTkdFLCByZXN1bHRSYW5nZS5nZXQoKSkpOwotCi0gICAgICAgIHNldFN0
YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBuZXdTdGFydCk7Ci0gICAgfSB3aGlsZSAodHJ1ZSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotQ0FMTEJBQ0tf
RlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJEYXRhYmFzZVRhYmxlTmFtZXMpCi17Ci0gICAg
SU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLmRhdGFiYXNlVGFibGVOYW1lcygpIik7Ci0g
ICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcoMCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1DQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9y
Q29udHJvbGxlckluc3BlY3RlZFdpbmRvdykKLXsKLSAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNv
bnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkiKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIs
IGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluc3BlY3RvckNvbnRyb2xs
ZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvbVdpbmRvdygpKTsKLX0KLQotQ0FM
TEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZXR0aW5nKQotewotICAgIElOQ19T
VEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5zZXR0aW5nKCkiKTsKLQotICAgIGlmIChhcmdzLkxl
bmd0aCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFN0cmlu
ZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwotICAgIGlmIChr
ZXkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6SU5T
UEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgY29uc3QgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6U2V0dGluZyYgc2V0dGluZyA9IGluc3BlY3RvckNvbnRyb2xsZXIgLT5zZXR0aW5n
KGtleSk7Ci0KLSAgICBzd2l0Y2ggKHNldHRpbmcudHlwZSgpKSB7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2V0dGluZzo6Tm9UeXBlOgotICAg
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JD
b250cm9sbGVyOjpTZXR0aW5nOjpTdHJpbmdUeXBlOgotICAgICAgICAgICAgcmV0dXJuIHY4U3Ry
aW5nKHNldHRpbmcuc3RyaW5nKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6
OlNldHRpbmc6OkRvdWJsZVR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3
KHNldHRpbmcuZG91YmxlVmFsdWUoKSk7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxl
cjo6U2V0dGluZzo6SW50ZWdlclR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6
TmV3KHNldHRpbmcuaW50ZWdlclZhbHVlKCkpOwotICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRy
b2xsZXI6OlNldHRpbmc6OkJvb2xlYW5UeXBlOgotICAgICAgICAgICAgcmV0dXJuIHY4Qm9vbGVh
bihzZXR0aW5nLmJvb2xlYW5WYWx1ZSgpKTsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9s
bGVyOjpTZXR0aW5nOjpTdHJpbmdWZWN0b3JUeXBlOiB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc3RyaW5ncyA9IHNldHRpbmcuc3RyaW5nVmVjdG9yKCk7Ci0gICAgICAgICAg
ICB2ODo6TG9jYWw8djg6OkFycmF5PiBzdHJpbmdzQXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhzdHJp
bmdzLnNpemUoKSk7Ci0gICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdz
LnNpemUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgICAgICBzdHJpbmdzQXJyYXktPlNldCh2ODo6TnVtYmVyOjpOZXcoaSks
IHY4U3RyaW5nKHN0cmluZ3NbaV0pKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdzQXJyYXk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250
cm9sbGVyU2V0U2V0dGluZykKLXsKLSAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNvbnRyb2xsZXIu
c2V0U2V0dGluZygpIik7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgaWYgKGtleS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5n
IHNldHRpbmc7Ci0KLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3NbMV07Ci0g
ICAgaWYgKHZhbHVlLT5Jc1VuZGVmaW5lZCgpIHx8IHZhbHVlLT5Jc051bGwoKSkgewotICAgICAg
ICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBpcyBhbHJlYWR5IE5vVHlwZS4KLSAgICAgICAg
QVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5v
VHlwZSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKLSAgICAgICAgc2V0dGlu
Zy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSkpOwotICAgIGVsc2UgaWYg
KHZhbHVlLT5Jc051bWJlcigpKQotICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVyVmFs
dWUoKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbigpKQotICAgICAgICBzZXR0aW5n
LnNldCh2YWx1ZS0+Qm9vbGVhblZhbHVlKCkpOwotICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0FycmF5
KCkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2NhbDx2
ODo6QXJyYXk+OjpDYXN0KHZhbHVlKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gc3RyaW5nczsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHY4QXJyYXktPkxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgIFN0cmluZyBpdGVtID0gdG9XZWJDb3JlU3RyaW5nKHY4QXJyYXktPkdl
dCh2ODo6SW50ZWdlcjo6TmV3KGkpKSk7Ci0gICAgICAgICAgICBpZiAoaXRlbS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIHN0
cmluZ3MuYXBwZW5kKGl0ZW0pOwotICAgICAgICB9Ci0gICAgICAgIHNldHRpbmcuc2V0KHN0cmlu
Z3MpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAg
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6
SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0gICAgaW5zcGVjdG9yQ29udHJv
bGxlci0+c2V0U2V0dGluZyhrZXksIHNldHRpbmcpOwotCi0gICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJXcmFwQ2Fs
bGJhY2spCi17Ci0gICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFj
aygpIik7Ci0gICAgcmV0dXJuIGFyZ3NbMF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNWYzYjliNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgorCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yUmVzb3VyY2UuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorI2lu
Y2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIuaCIKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQmFja2VuZDo6SW5zcGVj
dG9yQmFja2VuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0
b3JDb250cm9sbGVyKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitJbnNwZWN0b3JC
YWNrZW5kOjp+SW5zcGVjdG9yQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6aGlkZURPTU5vZGVIaWdobGlnaHQoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aGlkZUhpZ2hsaWdodCgpOworfQor
CitTdHJpbmcgSW5zcGVjdG9yQmFja2VuZDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCit7CisgICAg
cmV0dXJuIG1fY2xpZW50LT5sb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9CisKK1N0cmluZyBJbnNw
ZWN0b3JCYWNrZW5kOjpoaWRkZW5QYW5lbHMoKQoreworICAgIHJldHVybiBtX2NsaWVudC0+aGlk
ZGVuUGFuZWxzKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6d2luZG93VW5sb2FkaW5n
KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmNsb3NlKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6aXNXaW5k
b3dWaXNpYmxlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBy
ZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCk7CisgICAgZWxzZQor
ICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6YWRkUmVz
b3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9kZSogZnJhbWUpCit7CisgICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yUmVzb3VyY2U+IHJlc291cmNlID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5yZXNv
dXJjZXMoKS5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgIFN0
cmluZyBzb3VyY2VTdHJpbmcgPSByZXNvdXJjZS0+c291cmNlU3RyaW5nKCk7CisgICAgICAgIGlm
ICghc291cmNlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFkZFNvdXJjZVRvRnJhbWUo
cmVzb3VyY2UtPm1pbWVUeXBlKCksIHNvdXJjZVN0cmluZywgZnJhbWUpOworICAgIH0KK30KKwor
Ym9vbCBJbnNwZWN0b3JCYWNrZW5kOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCit7CisgICAgQVNT
RVJUX0FSRyhmcmFtZU5vZGUsIGZyYW1lTm9kZSk7CisKKyAgICBpZiAoIWZyYW1lTm9kZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZU5vZGUtPmF0dGFjaGVkKCkpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBBU1NFUlQoZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpOworICAgIGlmICgh
ZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWVOb2RlKTsKKyAg
ICBBU1NFUlQoZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICBpZiAoIWVsZW1l
bnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1l
T3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgQVNTRVJUKGZyYW1lT3duZXItPmNvbnRlbnRG
cmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVPd25lci0+Y29u
dGVudEZyYW1lKCktPmxvYWRlcigpOworCisgICAgbG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBl
KG1pbWVUeXBlKTsKKyAgICBsb2FkZXItPmJlZ2luKCk7CisgICAgbG9hZGVyLT53cml0ZShzb3Vy
Y2UpOworICAgIGxvYWRlci0+ZW5kKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpjbGVhck1lc3NhZ2VzKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsZWFyQ29uc29sZU1l
c3NhZ2VzKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6dG9nZ2xlTm9kZVNlYXJjaCgp
Cit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT50b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6YXR0YWNoKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQor
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmF0dGFjaFdpbmRvdygpOworfQorCit2b2lk
IEluc3BlY3RvckJhY2tlbmQ6OmRldGFjaCgpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZXRhY2hXaW5kb3coKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworfQor
Cit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmlu
ZyYgcGFuZWxOYW1lKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RvcmVMYXN0QWN0aXZlUGFuZWwocGFuZWxOYW1lKTsK
K30KKworYm9vbCBJbnNwZWN0b3JCYWNrZW5kOjpzZWFyY2hpbmdGb3JOb2RlKCkKK3sKKyAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5zZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6bG9hZGVkKCkKK3sKKyAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PnNjcmlwdE9iamVjdFJlYWR5KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZW5hYmxl
UmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZVJlc291cmNlVHJh
Y2tpbmcoYWx3YXlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpkaXNhYmxlUmVzb3Vy
Y2VUcmFja2luZyhib29sIGFsd2F5cykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVSZXNvdXJjZVRyYWNraW5n
KGFsd2F5cyk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6cmVzb3VyY2VUcmFja2luZ0Vu
YWJsZWQoKSBjb25zdAoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0Cit7CisgICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tb3Zl
V2luZG93QnkoeCwgeSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Y2xvc2VXaW5kb3co
KQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+Y2xvc2VXaW5kb3coKTsKK30KKworY29uc3QgU3RyaW5nJiBJbnNwZWN0b3JC
YWNrZW5kOjpwbGF0Zm9ybSgpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorI2lmZGVmIEJV
SUxESU5HX09OX1RJR0VSCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBs
YXRmb3JtLCAoIm1hYy10aWdlciIpKTsKKyNlbHNlCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy1sZW9wYXJkIikpOworI2VuZGlmCisjZWxpZiBQ
TEFURk9STShXSU5fT1MpCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBs
YXRmb3JtLCAoIndpbmRvd3MiKSk7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgicXQiKSk7CisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAo
Imd0ayIpKTsKKyNlbGlmIFBMQVRGT1JNKFdYKQorICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJ3eCIpKTsKKyNlbHNlCisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInVua25vd24iKSk7CisjZW5kaWYKKworICAg
IHJldHVybiBwbGF0Zm9ybTsKK30KKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
Y29uc3QgUHJvZmlsZXNBcnJheSYgSW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXMoKSBjb25zdAor
eyAgICAKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5wcm9maWxlcygpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IG1fZW1wdHlQcm9maWxlczsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGFydFByb2Zp
bGluZygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpzdG9wUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0b3BVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZW5hYmxlUHJv
ZmlsZXIoYm9vbCBhbHdheXMpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVQcm9maWxlcihhbHdheXMpOworfQor
Cit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2FibGVQcm9maWxlcihib29sIGFsd2F5cykKK3sK
KyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmRpc2FibGVQcm9maWxlcihhbHdheXMpOworfQorCitib29sIEluc3BlY3RvckJhY2tl
bmQ6OnByb2ZpbGVyRW5hYmxlZCgpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikK
KyAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cHJvZmlsZXJFbmFibGVkKCk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCit7CisgICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVEZWJ1Z2dl
ckZyb21Gcm9udGVuZChhbHdheXMpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmRpc2Fi
bGVEZWJ1Z2dlcihib29sIGFsd2F5cykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpc2FibGVEZWJ1Z2dlcihhbHdheXMp
OworfQorCitib29sIEluc3BlY3RvckJhY2tlbmQ6OmRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0Cit7
CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGVidWdnZXJFbmFibGVkKCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gZmFsc2U7Cit9CisKK0phdmFTY3JpcHRDYWxsRnJhbWUqIEluc3BlY3RvckJhY2tlbmQ6OmN1
cnJlbnRDYWxsRnJhbWUoKSBjb25zdAoreworICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjphZGRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVO
dW1iZXIpCit7CisgICAgaW50cHRyX3Qgc291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRy
KCk7CisgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5hZGRCcmVha3BvaW50KHNv
dXJjZUlEVmFsdWUsIGxpbmVOdW1iZXIpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3sKKyAgICBpbnRwdHJfdCBzb3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsK
KyAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291
cmNlSURWYWx1ZSwgbGluZU51bWJlcik7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZDo6cGF1
c2VPbkV4Y2VwdGlvbnMoKQoreworICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNo
YXJlZCgpLnBhdXNlT25FeGNlcHRpb25zKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
c2V0UGF1c2VPbkV4Y2VwdGlvbnMoYm9vbCBwYXVzZSkKK3sKKyAgICBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLnNldFBhdXNlT25FeGNlcHRpb25zKHBhdXNlKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JCYWNrZW5kOjpwYXVzZUluRGVidWdnZXIoKQoreworICAgIEphdmFTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VQcm9ncmFtKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6cmVzdW1lRGVidWdnZXIoKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVzdW1lRGVidWdnZXIoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKQorewor
ICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE92ZXJTdGF0ZW1lbnQoKTsK
K30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwSW50b1N0YXRlbWVudEluRGVidWdnZXIo
KQoreworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcEludG9TdGF0ZW1l
bnQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzdGVwT3V0T2ZGdW5jdGlvbkluRGVi
dWdnZXIoKQoreworICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE91dE9m
RnVuY3Rpb24oKTsKK30KKworI2VuZGlmCisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6aGlnaGxp
Z2h0KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjg5MWMyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEluc3BlY3RvckJhY2tlbmRfaAorI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kX2gKKwor
I2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBJ
bnNwZWN0b3JDbGllbnQ7CitjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lOworY2xhc3MgTm9kZTsK
KworY2xhc3MgSW5zcGVjdG9yQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJh
Y2tlbmQ+Cit7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2Vu
ZD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3Bl
Y3RvckNsaWVudCogY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bnNwZWN0b3JCYWNrZW5kKGluc3BlY3RvckNvbnRyb2xsZXIsIGNsaWVudCkpOworICAgIH0KKwor
ICAgIH5JbnNwZWN0b3JCYWNrZW5kKCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9CisgICAg
CisgICAgdm9pZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVy
ID0gMDsgfQorCisgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworCisgICAgU3RyaW5n
IGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKKyAgICBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CisKKyAg
ICB2b2lkIHdpbmRvd1VubG9hZGluZygpOworCisgICAgYm9vbCBpc1dpbmRvd1Zpc2libGUoKTsK
KworICAgIHZvaWQgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9k
ZSogZnJhbWUpOworICAgIGJvb2wgYWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgTm9kZSogZnJhbWUpOworCisgICAgdm9pZCBjbGVh
ck1lc3NhZ2VzKCk7CisKKyAgICB2b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKKworICAgIHZvaWQg
YXR0YWNoKCk7CisgICAgdm9pZCBkZXRhY2goKTsKKworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKworICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFu
ZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOworCisgICAgYm9vbCBzZWFyY2hpbmdGb3JOb2Rl
KCk7CisKKyAgICB2b2lkIGxvYWRlZCgpOworCisgICAgdm9pZCBlbmFibGVSZXNvdXJjZVRyYWNr
aW5nKGJvb2wgYWx3YXlzKTsKKyAgICB2b2lkIGRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGJvb2wg
YWx3YXlzKTsKKyAgICBib29sIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkgY29uc3Q7CisKKyAg
ICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKKyAgICB2b2lkIGNs
b3NlV2luZG93KCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHBsYXRmb3JtKCkgY29uc3Q7CisKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBjb25zdCBQcm9maWxlc0FycmF5JiBw
cm9maWxlcygpIGNvbnN0OworCisgICAgdm9pZCBzdGFydFByb2ZpbGluZygpOworICAgIHZvaWQg
c3RvcFByb2ZpbGluZygpOworCisgICAgdm9pZCBlbmFibGVQcm9maWxlcihib29sIGFsd2F5cyk7
CisgICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpOworICAgIGJvb2wgcHJvZmls
ZXJFbmFibGVkKCk7CisKKyAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKTsKKyAg
ICB2b2lkIGRpc2FibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CisgICAgYm9vbCBkZWJ1Z2dlckVu
YWJsZWQoKSBjb25zdDsKKworICAgIEphdmFTY3JpcHRDYWxsRnJhbWUqIGN1cnJlbnRDYWxsRnJh
bWUoKSBjb25zdDsKKworICAgIHZvaWQgYWRkQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKTsKKyAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcik7CisKKyAgICBib29sIHBh
dXNlT25FeGNlcHRpb25zKCk7CisgICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9ucyhib29sIHBh
dXNlKTsKKworICAgIHZvaWQgcGF1c2VJbkRlYnVnZ2VyKCk7CisgICAgdm9pZCByZXN1bWVEZWJ1
Z2dlcigpOworCisgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIoKTsKKyAgICB2
b2lkIHN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpOworICAgIHZvaWQgc3RlcE91dE9mRnVu
Y3Rpb25JbkRlYnVnZ2VyKCk7CisjZW5kaWYKKworICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQg
ZnJvbSBjdXN0b20gaW1wbGVtZW50YXRpb25zLgorICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqIG5v
ZGUpOworCitwcml2YXRlOgorICAgIEluc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpOworCisgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIEluc3BlY3Rv
ckNsaWVudCogbV9jbGllbnQ7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAg
UHJvZmlsZXNBcnJheSBtX2VtcHR5UHJvZmlsZXM7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmRfaCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjFlNmQ5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuaWRsCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBjb3JlIHsK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yCisgICAgXSBJbnNw
ZWN0b3JCYWNrZW5kIHsKKyAgICAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworICAg
ICAgICBbQ3VzdG9tXSB2b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4gTm9kZSBub2RlKTsKKyAgICAg
ICAgdm9pZCBsb2FkZWQoKTsKKyAgICAgICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICAg
ICAgdm9pZCBhdHRhY2goKTsKKyAgICAgICAgdm9pZCBkZXRhY2goKTsKKworICAgICAgICB2b2lk
IGNsb3NlV2luZG93KCk7CisgICAgICAgIHZvaWQgY2xlYXJNZXNzYWdlcygpOworICAgICAgICB2
b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKKworICAgICAgICBib29sZWFuIGlzV2luZG93VmlzaWJs
ZSgpOworICAgICAgICBib29sZWFuIHNlYXJjaGluZ0Zvck5vZGUoKTsKKworICAgICAgICB2b2lk
IGFkZFJlc291cmNlU291cmNlVG9GcmFtZShpbiBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJh
bWUpOworICAgICAgICBib29sZWFuIGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVU
eXBlLCBpbiBET01TdHJpbmcgc291cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIHNlYXJjaChpbiBOb2RlIG5vZGUsIGluIERPTVN0cmluZyBxdWVyeSk7Cisj
aWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBb
Q3VzdG9tXSBET01PYmplY3QgZGF0YWJhc2VUYWJsZU5hbWVzKGluIERhdGFiYXNlIGRhdGFiYXNl
KTsKKyNlbmRpZgorICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgc2V0dGluZyhpbiBET01TdHJp
bmcga2V5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXRTZXR0aW5nKGluIERPTVN0cmluZyBr
ZXksIGluIERPTU9iamVjdCAgdmFsdWUpOworICAgICAgICBbQ3VzdG9tXSBET01XaW5kb3cgaW5z
cGVjdGVkV2luZG93KCk7CisgICAgICAgIERPTVN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7
CisgICAgICAgIERPTVN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAgICAgRE9NU3RyaW5nIHBs
YXRmb3JtKCk7CisgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPW1vdmVXaW5kb3dCeV0g
dm9pZCBtb3ZlQnlVbnJlc3RyaWN0ZWQoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAgICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOwor
ICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qgd3JhcENhbGxiYWNrKGluIERPTU9iamVjdCBjYWxs
YmFjayk7CisgICAgICAgIGJvb2xlYW4gcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKKyAgICAg
ICAgdm9pZCBlbmFibGVSZXNvdXJjZVRyYWNraW5nKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAg
ICAgdm9pZCBkaXNhYmxlUmVzb3VyY2VUcmFja2luZyhpbiBib29sZWFuIGFsd2F5cyk7CisgICAg
ICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoaW4gRE9NU3RyaW5nIHBhbmVsTmFtZSk7CisK
KyNpZiBkZWZpbmVkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVND
UklQVF9ERUJVR0dFUgorICAgICAgICBib29sZWFuIGRlYnVnZ2VyRW5hYmxlZCgpOworICAgICAg
ICB2b2lkIGVuYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3YXlzKTsKKyAgICAgICAgdm9pZCBk
aXNhYmxlRGVidWdnZXIoaW4gYm9vbGVhbiBhbHdheXMpOworCisgICAgICAgIHZvaWQgYWRkQnJl
YWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJl
cik7CisgICAgICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQs
IGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7CisKKyAgICAgICAgdm9pZCBwYXVzZUluRGVi
dWdnZXIoKTsKKyAgICAgICAgdm9pZCByZXN1bWVEZWJ1Z2dlcigpOworCisgICAgICAgIHZvaWQg
c3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcEludG9TdGF0
ZW1lbnRJbkRlYnVnZ2VyKCk7CisgICAgICAgIHZvaWQgc3RlcE91dE9mRnVuY3Rpb25JbkRlYnVn
Z2VyKCk7CisKKyAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGN1cnJlbnRDYWxsRnJhbWUoKTsK
KworICAgICAgICBib29sZWFuIHBhdXNlT25FeGNlcHRpb25zKCk7CisgICAgICAgIHZvaWQgc2V0
UGF1c2VPbkV4Y2VwdGlvbnMoaW4gYm9vbGVhbiBwYXVzZU9uRXhjZXB0aW9ucyk7CisKKyAgICAg
ICAgYm9vbGVhbiBwcm9maWxlckVuYWJsZWQoKTsKKyAgICAgICAgdm9pZCBlbmFibGVQcm9maWxl
cihpbiBib29sZWFuIGFsd2F5cyk7CisgICAgICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGluIGJv
b2xlYW4gYWx3YXlzKTsKKworICAgICAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCk7CisgICAgICAg
IHZvaWQgc3RvcFByb2ZpbGluZygpOworCisgICAgICAgIFtDdXN0b21dIEFycmF5IHByb2ZpbGVz
KCk7CisjZW5kaWYKKyAgICAgfTsKKyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCmluZGV4IGM1MzFlZDYuLmYzYzJiOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKQEAgLTEwNiw2NSArMTA3LDYg
QEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKIHN0
YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CiBzdGF0aWMg
Y29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKIAotYm9vbCBJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZU5vZGUpCi17Ci0gICAgQVNTRVJU
X0FSRyhmcmFtZU5vZGUsIGZyYW1lTm9kZSk7Ci0KLSAgICBpZiAoIWZyYW1lTm9kZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFmcmFtZU5vZGUtPmF0dGFjaGVkKCkpIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIGlmICghZnJh
bWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWVOb2RlKTsKLSAgICBB
U1NFUlQoZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQt
PmlzRnJhbWVPd25lckVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3du
ZXJFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgQVNTRVJUKGZyYW1lT3duZXItPmNvbnRlbnRGcmFt
ZSgpKTsKLSAgICBpZiAoIWZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVPd25lci0+Y29udGVu
dEZyYW1lKCktPmxvYWRlcigpOwotCi0gICAgbG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBlKG1p
bWVUeXBlKTsKLSAgICBsb2FkZXItPmJlZ2luKCk7Ci0gICAgbG9hZGVyLT53cml0ZShzb3VyY2Up
OwotICAgIGxvYWRlci0+ZW5kKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgU3Ry
aW5nJiBJbnNwZWN0b3JDb250cm9sbGVyOjpwbGF0Zm9ybSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZP
Uk0oTUFDKQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy10aWdlciIpKTsKLSNlbHNlCi0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIm1hYy1sZW9wYXJkIikp
OwotI2VuZGlmCi0jZWxpZiBQTEFURk9STShXSU5fT1MpCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoIndpbmRvd3MiKSk7Ci0jZWxpZiBQTEFURk9STShR
VCkKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcGxhdGZvcm0sICgicXQi
KSk7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBT
dHJpbmcsIHBsYXRmb3JtLCAoImd0ayIpKTsKLSNlbGlmIFBMQVRGT1JNKFdYKQotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwbGF0Zm9ybSwgKCJ3eCIpKTsKLSNlbHNlCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHBsYXRmb3JtLCAoInVua25vd24i
KSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBwbGF0Zm9ybTsKLX0KLQogc3RhdGljIHVuc2lnbmVk
IHNfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50Owogc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nKj4qIHNfc2V0dGluZ0NhY2hlOwogCkBAIC0xODEsNiAr
MTIzLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDAp
CiAgICAgLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9yZXNvdXJj
ZVRyYWNraW5nU2V0dGluZ3NMb2FkZWQoZmFsc2UpCisgICAgLCBtX2luc3BlY3RvckJhY2tlbmQo
SW5zcGVjdG9yQmFja2VuZDo6Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKICAgICAsIG1f
YXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCkBAIC0yMTUsNiArMTU4LDggQEAgSW5zcGVj
dG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQogICAgICAgICBkZWxldGUgc19z
ZXR0aW5nQ2FjaGU7CiAgICAgICAgIHNfc2V0dGluZ0NhY2hlID0gMDsKICAgICB9CisgICAgCisg
ICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogfQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQpAQCAtMjg1LDIw
ICsyMzAsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNldHRpbmcoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFNldHRpbmcmIHNldHRpbmcpCiAgICAgbV9jbGllbnQtPnN0b3JlU2V0
dGluZyhrZXksIHNldHRpbmcpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6bG9j
YWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9jbGllbnQtPmxvY2FsaXplZFN0cmluZ3NVUkwoKTsK
LX0KLQotU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGRlblBhbmVscygpCi17Ci0gICAg
aWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9j
bGllbnQtPmhpZGRlblBhbmVscygpOwotfQotCiAvLyBUcnlpbmcgdG8gaW5zcGVjdCBzb21ldGhp
bmcgaW4gYSBmcmFtZSB3aXRoIEphdmFTY3JpcHQgZGlzYWJsZWQgd291bGQgbGF0ZXIgbGVhZCB0
bwogLy8gY3Jhc2hlcyB0cnlpbmcgdG8gY3JlYXRlIEphdmFTY3JpcHQgd3JhcHBlcnMuIFNvbWUg
ZGF5IHdlIGNvdWxkIGZpeCB0aGlzIGlzc3VlLCBidXQKIC8vIGZvciBub3cgcHJldmVudCBjcmFz
aGVzIGhlcmUgYnkgbmV2ZXIgdGFyZ2V0aW5nIGEgbm9kZSBpbiBzdWNoIGEgZnJhbWUuCkBAIC01
MzYsMTkgKzQ2Nyw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dG9nZ2xlU2VhcmNoRm9y
Tm9kZUluUGFnZSgpCiAgICAgICAgIGhpZGVIaWdobGlnaHQoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUobG9uZyBpZGVudGlmaWVyLCBO
b2RlKiBmcmFtZSkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IHJl
c291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAg
U3RyaW5nIHNvdXJjZVN0cmluZyA9IHJlc291cmNlLT5zb3VyY2VTdHJpbmcoKTsKLSAgICAgICAg
aWYgKCFzb3VyY2VTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgYWRkU291cmNlVG9GcmFt
ZShyZXNvdXJjZS0+bWltZVR5cGUoKSwgc291cmNlU3RyaW5nLCBmcmFtZSk7Ci0gICAgfQotfQot
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkg
fHwgIW1fc2VhcmNoaW5nRm9yTm9kZSkKQEAgLTU5MCw3ICs1MDgsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpCiAgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxB
Y2Nlc3MoKTsKIAogICAgIG1fc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1fcGFn
ZSk7Ci0gICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9zY3JpcHRTdGF0ZSwgIkluc3BlY3Rv
ckNvbnRyb2xsZXIiLCB0aGlzKTsKKyAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX3Njcmlw
dFN0YXRlLCAiSW5zcGVjdG9yQ29udHJvbGxlciIsIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQpAQCAt
MTMyMCwyOCArMTIzOCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVn
Z2VyKGJvb2wgYWx3YXlzKQogICAgICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0Rpc2FibGVk
KCk7CiB9CiAKLUphdmFTY3JpcHRDYWxsRnJhbWUqIEluc3BlY3RvckNvbnRyb2xsZXI6OmN1cnJl
bnRDYWxsRnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLmN1cnJlbnRDYWxsRnJhbWUoKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjpwYXVzZU9uRXhjZXB0aW9ucygpCi17Ci0gICAgcmV0dXJuIEphdmFTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkucGF1c2VPbkV4Y2VwdGlvbnMoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhib29sIHBhdXNlKQotewotICAgIEphdmFT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnMocGF1c2UpOwot
fQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBhdXNlSW5EZWJ1Z2dlcigpCi17Ci0gICAg
aWYgKCFtX2RlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucGF1c2VQcm9ncmFtKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVzdW1lRGVidWdnZXIoKQogewogICAgIGlmICghbV9kZWJ1Z2dlckVuYWJs
ZWQpCkBAIC0xMzQ5LDM5ICsxMjQ1LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1
bWVEZWJ1Z2dlcigpCiAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5jb250aW51
ZVByb2dyYW0oKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGVwT3ZlclN0YXRl
bWVudEluRGVidWdnZXIoKQotewotICAgIGlmICghbV9kZWJ1Z2dlckVuYWJsZWQpCi0gICAgICAg
IHJldHVybjsKLSAgICBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnN0ZXBPdmVyU3Rh
dGVtZW50KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RlcEludG9TdGF0ZW1l
bnRJbkRlYnVnZ2VyKCkKLXsKLSAgICBpZiAoIW1fZGVidWdnZXJFbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0gICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zdGVwSW50b1N0YXRl
bWVudCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0ZXBPdXRPZkZ1bmN0aW9u
SW5EZWJ1Z2dlcigpCi17Ci0gICAgaWYgKCFtX2RlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuOwotICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc3RlcE91dE9mRnVuY3Rp
b24oKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRCcmVha3BvaW50KGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCi17Ci0gICAgaW50cHRyX3Qg
c291cmNlSURWYWx1ZSA9IHNvdXJjZUlELnRvSW50UHRyKCk7Ci0gICAgSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpzaGFyZWQoKS5hZGRCcmVha3BvaW50KHNvdXJjZUlEVmFsdWUsIGxpbmVOdW1iZXIp
OwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKLXsKLSAgICBpbnRwdHJfdCBz
b3VyY2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKLSAgICBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSURWYWx1ZSwgbGluZU51bWJl
cik7Ci19Ci0KIC8vIEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRl
eCAxOWIxYjdkLi43NzFmNzQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCkBAIC01Niw2ICs1Niw3IEBAIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgRG9jdW1lbnRMb2Fk
ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3Mg
SW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3Rv
ckZyb250ZW5kOwogY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKQEAgLTc2LDkgKzc3LDkgQEAg
Y2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwogCi1jbGFzcyBJbnNwZWN0b3JD
b250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ29udHJvbGxlcj4KK2NsYXNz
IEluc3BlY3RvckNvbnRyb2xsZXIKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IEphdmFTY3JpcHREZWJ1Z0xpc3RlbmVyCiAjZW5kaWYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiBwdWJs
aWM6CkBAIC0xNTEsMTQgKzE1MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBib29sIG1fYm9v
bGVhbjsKICAgICAgICAgfSBtX3NpbXBsZUNvbnRlbnQ7CiAgICAgfTsKLQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckNvbnRyb2xsZXI+IGNyZWF0ZShQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yQ29udHJvbGxlcihwYWdlLCBpbnNwZWN0b3JDbGllbnQpKTsKLSAgICB9
Ci0KKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAg
ICB+SW5zcGVjdG9yQ29udHJvbGxlcigpOwogCisgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVj
dG9yQmFja2VuZCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKTsgfQorCiAgICAg
dm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAgICAgdm9pZCBwYWdlRGVzdHJveWVkKCkg
eyBtX3BhZ2UgPSAwOyB9CiAKQEAgLTE2OSw5ICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
U2V0dGluZyYgc2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAgICAgdm9pZCBzZXRT
ZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTZXR0aW5nJik7CiAKLSAgICBTdHJpbmcg
bG9jYWxpemVkU3RyaW5nc1VSTCgpOwotICAgIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQogICAg
IHZvaWQgaW5zcGVjdChOb2RlKik7CiAgICAgdm9pZCBoaWdobGlnaHQoTm9kZSopOwogICAgIHZv
aWQgaGlkZUhpZ2hsaWdodCgpOwpAQCAtMTgzLDggKzE3OCw2IEBAIHB1YmxpYzoKICAgICBib29s
IHdpbmRvd1Zpc2libGUoKTsKICAgICB2b2lkIHNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxl
ID0gdHJ1ZSwgYm9vbCBhdHRhY2hlZCA9IGZhbHNlKTsKIAotICAgIHZvaWQgYWRkUmVzb3VyY2VT
b3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9kZSogZnJhbWUpOwotICAgIGJvb2wgYWRk
U291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgTm9kZSopOwogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlEKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CkBAIC0xOTIs
MTEgKzE4NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGF0dGFjaFdpbmRvdygpOwogICAgIHZvaWQg
ZGV0YWNoV2luZG93KCk7CiAKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwotICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKLQotICAgIHZv
aWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOwotCiAgICAg
dm9pZCB0b2dnbGVTZWFyY2hGb3JOb2RlSW5QYWdlKCk7CiAgICAgYm9vbCBzZWFyY2hpbmdGb3JO
b2RlSW5QYWdlKCkgeyByZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9OwogICAgIHZvaWQgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlm
aWVyRmxhZ3MpOwpAQCAtMjA1LDcgKzE5Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc3BlY3Rl
ZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqKTsKICAgICB2b2lkIHdpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZSgpOwogCi0gICAgdm9pZCBzY3JpcHRPYmplY3RSZWFkeSgpOwogICAg
IHZvaWQgc2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc3RhdGUsIFNjcmlwdE9i
amVjdCBvYmplY3QpOwogCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKQEAgLTIz
OSw5ICsyMjYsNiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBSZXNvdXJjZXNNYXAmIHJlc291cmNl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VzOyB9CiAKLSAgICB2b2lkIG1vdmVXaW5kb3dC
eShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKLSAgICB2b2lkIGNsb3NlV2luZG93KCk7Ci0KICAg
ICB2b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAg
dm9pZCBjb3VudChjb25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUlEKTsKQEAgLTI1Miw4ICsyMzYsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxG
cmFtZSk7CiAgICAgdm9pZCBlbmRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCi0gICAgY29uc3QgU3RyaW5n
JiBwbGF0Zm9ybSgpIGNvbnN0OwotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8SlNDOjpQcm9maWxlPiwgdW5zaWduZWQgbGlu
ZU51bWJlciwgY29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VVUkwpOwogICAgIHZvaWQgYWRkUHJv
ZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZShQYXNzUmVmUHRyPEpTQzo6UHJvZmlsZT4sIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlVVJMKTsKQEAgLTI2
NCwzNSArMjQ2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGUoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
OyB9CiAKICAgICBKU0M6OlVTdHJpbmcgZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIpOwotICAgIHZvaWQgc3RhcnRVc2VySW5pdGlh
dGVkUHJvZmlsaW5nU29vbigpOwogICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+KiA9IDApOwogICAgIHZvaWQgc3RvcFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsKLSAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKIAog
ICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVj
b21waWxlID0gZmFsc2UpOwogICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0g
ZmFsc2UpOwogICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxl
ZCgpICYmIG1fcHJvZmlsZXJFbmFibGVkOyB9CiAKLSAgICB2b2lkIGVuYWJsZURlYnVnZ2VyRnJv
bUZyb250ZW5kKGJvb2wgYWx3YXlzKTsKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyKCk7CiAgICAg
dm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7CiAgICAgYm9vbCBkZWJ1
Z2dlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyRW5hYmxlZDsgfQogCi0gICAg
SmF2YVNjcmlwdENhbGxGcmFtZSogY3VycmVudENhbGxGcmFtZSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBhZGRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1
bnNpZ25lZCBsaW5lTnVtYmVyKTsKLQotICAgIGJvb2wgcGF1c2VPbkV4Y2VwdGlvbnMoKTsKLSAg
ICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25zKGJvb2wgcGF1c2UpOwotCi0gICAgdm9pZCBwYXVz
ZUluRGVidWdnZXIoKTsKICAgICB2b2lkIHJlc3VtZURlYnVnZ2VyKCk7CiAKLSAgICB2b2lkIHN0
ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwotICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnRJ
bkRlYnVnZ2VyKCk7Ci0gICAgdm9pZCBzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIoKTsKLQog
ICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6U291cmNlQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBmYWlsZWRUb1BhcnNlU291cmNlKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiwgaW50IGVycm9yTGluZSwgY29u
c3QgSlNDOjpVU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXVz
ZSgpOwpAQCAtMzAwLDcgKzI2NiwyMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAg
ICBJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBmcmll
bmQgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKKyAKKyAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQg
ZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5LgorICAgIHZvaWQgc2NyaXB0T2Jq
ZWN0UmVhZHkoKTsKKyAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25z
dDsKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOworICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2b2lkIHN0b3JlTGFzdEFjdGl2
ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKKyAgICB2b2lkIGNsb3NlV2luZG93KCk7
CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgdm9pZCBzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmdTb29uKCk7CisgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7
CisgICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChib29sIGFsd2F5cyk7CisjZW5k
aWYKIAogICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKQEAgLTM0Nyw2ICszMjYsNyBAQCBwcml2YXRl
OgogICAgIENvbnNvbGVNZXNzYWdlKiBtX3ByZXZpb3VzTWVzc2FnZTsKICAgICBib29sIG1fcmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5n
c0xvYWRlZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9pbnNwZWN0b3JCYWNrZW5k
OwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGJvb2wgbV9kZWJ1Z2dlckVu
YWJsZWQ7CiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjk3ZThlNy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmlkbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtpdEBtYXR0bGlsZWsuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGNvcmUg
ewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IKLSAgICBdIElu
c3BlY3RvckNvbnRyb2xsZXIgewotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1oaWRl
SGlnaGxpZ2h0XSB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7Ci0gICAgICAgIFtDdXN0b21d
IHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShpbiBOb2RlIG5vZGUpOwotICAgICAgICBbSW1wbGVtZW50
YXRpb25GdW5jdGlvbj1zY3JpcHRPYmplY3RSZWFkeV0gdm9pZCBsb2FkZWQoKTsKLSAgICAgICAg
W0ltcGxlbWVudGF0aW9uRnVuY3Rpb249Y2xvc2VdIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7Ci0g
ICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWF0dGFjaFdpbmRvd10gdm9pZCBhdHRhY2go
KTsKLSAgICAgICAgW0ltcGxlbWVudGF0aW9uRnVuY3Rpb249ZGV0YWNoV2luZG93XSB2b2lkIGRl
dGFjaCgpOwotCi0gICAgICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICAgICAgW0ltcGxlbWVu
dGF0aW9uRnVuY3Rpb249Y2xlYXJDb25zb2xlTWVzc2FnZXNdIHZvaWQgY2xlYXJNZXNzYWdlcygp
OwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj10b2dnbGVTZWFyY2hGb3JOb2RlSW5Q
YWdlXSB2b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKLQotICAgICAgICBbSW1wbGVtZW50YXRpb25G
dW5jdGlvbj13aW5kb3dWaXNpYmxlXSBib29sZWFuIGlzV2luZG93VmlzaWJsZSgpOwotICAgICAg
ICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zZWFyY2hpbmdGb3JOb2RlSW5QYWdlXSBib29sZWFu
IHNlYXJjaGluZ0Zvck5vZGUoKTsKLQotICAgICAgICB2b2lkIGFkZFJlc291cmNlU291cmNlVG9G
cmFtZShpbiBsb25nIGlkZW50aWZpZXIsIGluIE5vZGUgZnJhbWUpOwotICAgICAgICBib29sZWFu
IGFkZFNvdXJjZVRvRnJhbWUoaW4gRE9NU3RyaW5nIG1pbWVUeXBlLCBpbiBET01TdHJpbmcgc291
cmNlVmFsdWUsIGluIE5vZGUgZnJhbWUpOwotICAgICAgICBbQ3VzdG9tXSBOb2RlIGdldFJlc291
cmNlRG9jdW1lbnROb2RlKGluIGxvbmcgbG9uZyBpZGVudGlmaWVyKTsKLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCBzZWFyY2goaW4gTm9kZSBub2RlLCBpbiBET01TdHJpbmcgcXVlcnkpOwotI2lmIGRl
ZmluZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKLSAgICAgICAgW0N1c3Rv
bV0gRE9NT2JqZWN0IGRhdGFiYXNlVGFibGVOYW1lcyhpbiBEYXRhYmFzZSBkYXRhYmFzZSk7Ci0j
ZW5kaWYKLSAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IHNldHRpbmcoaW4gRE9NU3RyaW5nIGtl
eSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgc2V0U2V0dGluZyhpbiBET01TdHJpbmcga2V5LCBp
biBET01PYmplY3QgIHZhbHVlKTsKLSAgICAgICAgW0N1c3RvbV0gRE9NV2luZG93IGluc3BlY3Rl
ZFdpbmRvdygpOwotICAgICAgICBET01TdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwotICAg
ICAgICBET01TdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0gICAgICAgIERPTVN0cmluZyBwbGF0Zm9y
bSgpOwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1tb3ZlV2luZG93QnldIHZvaWQg
bW92ZUJ5VW5yZXN0cmljdGVkKGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOwotICAgICAgICB2b2lk
IHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLSAgICAg
ICAgW0N1c3RvbV0gRE9NT2JqZWN0IHdyYXBDYWxsYmFjayhpbiBET01PYmplY3QgY2FsbGJhY2sp
OwotICAgICAgICBib29sZWFuIHJlc291cmNlVHJhY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIHZv
aWQgZW5hYmxlUmVzb3VyY2VUcmFja2luZyhpbiBib29sZWFuIGFsd2F5cyk7Ci0gICAgICAgIHZv
aWQgZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoaW4gYm9vbGVhbiBhbHdheXMpOwotICAgICAgICB2
b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGluIERPTVN0cmluZyBwYW5lbE5hbWUpOwotCi0jaWYg
ZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIKLSAgICAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlckZyb21Gcm9udGVuZChpbiBib29s
ZWFuIGFsd2F5cyk7Ci0gICAgICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGluIGJvb2xlYW4gYWx3
YXlzKTsKLSAgICAgICAgdm9pZCBwYXVzZUluRGVidWdnZXIoKTsKLSAgICAgICAgdm9pZCByZXN1
bWVEZWJ1Z2dlcigpOwotICAgICAgICB2b2lkIHN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlcigp
OwotICAgICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlcigpOwotICAgICAgICB2
b2lkIHN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcigpOwotICAgICAgICBib29sZWFuIGRlYnVn
Z2VyRW5hYmxlZCgpOwotICAgICAgICBib29sZWFuIHBhdXNlT25FeGNlcHRpb25zKCk7Ci0gICAg
ICAgIGJvb2xlYW4gcHJvZmlsZXJFbmFibGVkKCk7Ci0gICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1
bmN0aW9uPXN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ10gdm9pZCBzdGFydFByb2ZpbGluZygp
OwotICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zdG9wVXNlckluaXRpYXRlZFByb2Zp
bGluZ10gdm9pZCBzdG9wUHJvZmlsaW5nKCk7Ci0gICAgICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIo
aW4gYm9vbGVhbiBhbHdheXMpOwotICAgICAgICB2b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29s
ZWFuIGFsd2F5cyk7Ci0gICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBjdXJyZW50Q2FsbEZyYW1l
KCk7Ci0gICAgICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoaW4gYm9vbGVhbiBwYXVzZU9u
RXhjZXB0aW9ucyk7Ci0gICAgICAgIHZvaWQgYWRkQnJlYWtwb2ludChpbiBET01TdHJpbmcgc291
cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51bWJlcik7Ci0gICAgICAgIHZvaWQgcmVtb3Zl
QnJlYWtwb2ludChpbiBET01TdHJpbmcgc291cmNlSUQsIGluIHVuc2lnbmVkIGxvbmcgbGluZU51
bWJlcik7Ci0KLSAgICAgICAgW0N1c3RvbV0gQXJyYXkgcHJvZmlsZXMoKTsKLSNlbmRpZgotICAg
ICB9OwotIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZS5qcwppbmRleCA4NWQ1
Y2QyLi5iY2I3YjJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2UuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlLmpzCkBA
IC0zNDEsMTIgKzM0MSw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KICAgICB9LAogCi0gICAgZ2V0IGRvY3VtZW50Tm9kZSgpIHsKLSAgICAgICAgaWYg
KCJpZGVudGlmaWVyIiBpbiB0aGlzKQotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3RvckNvbnRy
b2xsZXIuZ2V0UmVzb3VyY2VEb2N1bWVudE5vZGUodGhpcy5pZGVudGlmaWVyKTsKLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgfSwKLQogICAgIGdldCByZXF1ZXN0SGVhZGVycygpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5fcmVxdWVzdEhlYWRlcnMgPT09IHVuZGVmaW5lZCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDY3MTY4NzIuLjgyZjBl
YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAt
MjQwLDcgKzI0MCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgdmlldy52aXNpYmxlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyLmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKKyAgICAgICAgICAg
IEluc3BlY3RvckNvbnRyb2xsZXIuZW5hYmxlRGVidWdnZXIoZmFsc2UpOwogICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgICAgICB9CiAgICAgfSwK
QEAgLTQyOSw3ICs0MjksNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICBhdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGZhbHNlKTsKKyAgICAgICAg
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZW5hYmxlRGVidWdnZXIoZmFsc2UpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgdGhpcy5fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVl
OwogICAgICAgICB9CkBAIC04NjMsNyArODYzLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyLmRlYnVnZ2Vy
RW5hYmxlZCgpKQogICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5kaXNhYmxlRGVidWdn
ZXIodHJ1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIu
ZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoISFvcHRpb25hbEFsd2F5cyk7CisgICAgICAgICAg
ICBJbnNwZWN0b3JDb250cm9sbGVyLmVuYWJsZURlYnVnZ2VyKCEhb3B0aW9uYWxBbHdheXMpOwog
ICAgIH0sCiAKICAgICBfdG9nZ2xlUGF1c2VPbkV4Y2VwdGlvbnM6IGZ1bmN0aW9uKCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRl
eCA2NDk0NzA3Li4zMmM2MGM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUGFnZTo6UGFnZShD
aHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQ29udGV4dE1lbnVDbGllbnQqIGNvbnRleHRNZW51
Q2xpZW50LCBFZGkKICAgICAsIG1fZHJhZ0NvbnRyb2xsZXIobmV3IERyYWdDb250cm9sbGVyKHRo
aXMsIGRyYWdDbGllbnQpKQogICAgICwgbV9mb2N1c0NvbnRyb2xsZXIobmV3IEZvY3VzQ29udHJv
bGxlcih0aGlzKSkKICAgICAsIG1fY29udGV4dE1lbnVDb250cm9sbGVyKG5ldyBDb250ZXh0TWVu
dUNvbnRyb2xsZXIodGhpcywgY29udGV4dE1lbnVDbGllbnQpKQotICAgICwgbV9pbnNwZWN0b3JD
b250cm9sbGVyKEluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzLCBpbnNwZWN0b3JDbGll
bnQpKQorICAgICwgbV9pbnNwZWN0b3JDb250cm9sbGVyKG5ldyBJbnNwZWN0b3JDb250cm9sbGVy
KHRoaXMsIGluc3BlY3RvckNsaWVudCkpCiAgICAgLCBtX3NldHRpbmdzKG5ldyBTZXR0aW5ncyh0
aGlzKSkKICAgICAsIG1fcHJvZ3Jlc3MobmV3IFByb2dyZXNzVHJhY2tlcikKICAgICAsIG1fYmFj
a0ZvcndhcmRMaXN0KEJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlKHRoaXMpKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggY2NjMWQ0Yy4u
Y2MzZDI1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3Bh
Z2UvUGFnZS5oCkBAIC0yMDksNyArMjA5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBPd25QdHI8RHJhZ0NvbnRyb2xsZXI+IG1fZHJhZ0NvbnRyb2xsZXI7CiAgICAgICAgIE93blB0
cjxGb2N1c0NvbnRyb2xsZXI+IG1fZm9jdXNDb250cm9sbGVyOwogICAgICAgICBPd25QdHI8Q29u
dGV4dE1lbnVDb250cm9sbGVyPiBtX2NvbnRleHRNZW51Q29udHJvbGxlcjsKLSAgICAgICAgUmVm
UHRyPEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICAgICAg
T3duUHRyPEluc3BlY3RvckNvbnRyb2xsZXI+IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICAg
ICAgT3duUHRyPFNldHRpbmdzPiBtX3NldHRpbmdzOwogICAgICAgICBPd25QdHI8UHJvZ3Jlc3NU
cmFja2VyPiBtX3Byb2dyZXNzOwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33489</attachid>
            <date>2009-07-25 02:40:53 -0700</date>
            <delta_ts>2009-07-25 03:00:29 -0700</delta_ts>
            <desc>patch</desc>
            <filename>breakage.txt</filename>
            <type>text/plain</type>
            <size>2406</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjM5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEgQEAKKzIwMDktMDctMjUgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IFdpbmRvd3MgYnVpbGQgYnJlYWthZ2UgaW50cm9kdWNlZCBpbiA0NjM5MC4KKworICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorCiAyMDA5LTA3LTI0ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gNDYzODkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MzI2LDcgKzYzMjYsNyBAQAogCQkJCT4NCiAJCQk8L0Zp
bGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2Jq
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcGNw
cCINCisJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEpTSW5zcGVjdG9yQmFja2VuZC5jcGNwcCINCiAJCQkJPg0KIAkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCiAJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KQEAgLTYzNzAs
MTEgKzYzNzAsMTEgQEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9q
ZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNJbnNwZWN0b3JDb250cm9sbGVyLmNwcCINCisJCQkJ
UmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEpTSW5zcGVjdG9yQmFja2VuZC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQog
CQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTSW5zcGVjdG9yQ29udHJvbGxlci5jcHAiDQorCQkJ
CVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJp
dmVkU291cmNlc1xKU0luc3BlY3RvckJhY2tlbmQuY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbg0KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQpAQCAtNjQxOCw3ICs2NDE4LDcg
QEAKIAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJ
CQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSlNJbnNwZWN0b3JDb250cm9sbGVyLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0i
JChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0lu
c3BlY3RvckJhY2tlbmQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTI4
NTk4LDcgKzI4NTk4LDcgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTSW5zcGVjdG9yQ29udHJvbGxlckN1c3Rv
bS5jcHAiDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTSW5zcGVjdG9yQmFj
a2VuZEN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCkBAIC0z
MDYyNyw2ICszMDYyNywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQmFja2VuZC5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yQmFja2VuZC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNsaWVudC5oIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33490</attachid>
            <date>2009-07-25 03:00:29 -0700</date>
            <delta_ts>2009-07-25 03:00:29 -0700</delta_ts>
            <desc>(clearing review request)</desc>
            <filename>report.txt</filename>
            <type>text/plain</type>
            <size>138</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U2VuZGluZyAgICAgICAgV2ViQ29yZS9DaGFuZ2VMb2cKU2VuZGluZyAgICAgICAgV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpUcmFuc21pdHRpbmcgZmlsZSBkYXRhIC4uCkNv
bW1pdHRlZCByZXZpc2lvbiA0NjM5Mi4K
</data>

          </attachment>
      

    </bug>

</bugzilla>