<?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>16445</bug_id>
          
          <creation_ts>2007-12-14 17:45:17 -0800</creation_ts>
          <short_desc>Refactor EventTargetNode &amp; JSEventTargetNode for an upcoming SVG patch</short_desc>
          <delta_ts>2007-12-15 14:50:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>ap</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>64229</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-14 17:45:17 -0800</bug_when>
    <thetext>To fix bug 15413 (SVGElementInstance does not implement EventTarget) we need to introduce a new class called EventTargetSVGElementInstance inheriting from EventTarget &amp; SVGElementInstance - just like EventTargetNode works.

Some information regarding SVGElementInstance &amp; EventTarget:
SVG spec defines how event handling works for &lt;use&gt; elements and their corresponding SVGElementInstance objects - in particular it says that SVGElementInstance and the element it references share an event listener list. In our SVG implementation SVGElementInstance contains a pointer to the original referenced element as well as it&apos;s corresponding shadow tree element. The goal is that SVGUseElement now creates EventTargetSVGElementInstance objects instead of pure SVGElementInstance objects and installs any event listeners added through markup and/or JS on the shadow tree element! This way we can share code using EventTargetNode, as the only difference for EventTargetSVGElementInstance is the origin where it stores it&apos;s event listeners.

Example: &lt;defs&gt;&lt;rect id=&quot;rect&quot;../&gt; &lt;use xlink:href=&quot;url(#rect)&quot; id=&quot;test&quot;/&gt;
useElement = document.getElementById(&quot;test&quot;);
rectElement = document.getElementById(&quot;rect&quot;);

Case #1: someUseElement.instanceRoot.addEventListener(...)
calls &apos;addEventListener&apos; on the &apos;EventTargetSVGElementInstance&apos; object - which in turn install an event listener on the shadow tree element.

Case #2:  rectElement.addEventListener(...)
calls &apos;addEventListener &apos; on the &apos;EventTargetNode&apos; object. Altering the event listeners will result in an update of the SVGElementInstances which belong to the &apos;rectElement&apos; - this will reclone the shadow tree elements -&gt; this way everything stays synchronized.

As it&apos;s possible to share a lot of code with the new (JS)EventTargetSVGElementInstance classes - I refactored the EventTargetNode &amp; JSEventTargetNode class into base classes. JSEventTargetNode now forwards most calls to EventTargetNode - same for JSEventTargetSVGElementInstance.

This patch only contains the refactorization of the EventTargetNode classes - no SVG stuff contained here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64230</commentid>
    <comment_count>1</comment_count>
      <attachid>17900</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-14 18:12:18 -0800</bug_when>
    <thetext>Created attachment 17900
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64231</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-12-14 18:26:53 -0800</bug_when>
    <thetext>Okay, so far this looks sane, although i&apos;d like maciej and possibly hyatt to look at it as well.

My only real concern atm is that a number of the new files use large quantities of code from other files, so the appropriate copyrights should be moved across as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64234</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-14 18:32:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Okay, so far this looks sane, although i&apos;d like maciej and possibly hyatt to
&gt; look at it as well.
&gt; 
&gt; My only real concern atm is that a number of the new files use large quantities
&gt; of code from other files, so the appropriate copyrights should be moved across
&gt; as well.
&gt; 
I started of with fresh header templates and forgot about them - readded all existing copyrights in the approriate files (all files in bindings/js for instance).

Niko
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64235</commentid>
    <comment_count>4</comment_count>
      <attachid>17901</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-14 19:13:23 -0800</bug_when>
    <thetext>Created attachment 17901
Updated patch

New patch after discussion with Maciej - remove the two callbacks and the JSEventTarget* owner pointer from JSEventTargetBase to save size. We can now store JSEventTargetBase by value in JSEventTargetNode (&amp; JSEventTargetSVGElementInstance).

Fixed copyright as noticed by Oliver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64255</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-12-15 01:56:06 -0800</bug_when>
    <thetext>When reading the spec, I thought that a more natural approach would be to tweak event dispatching, not the elements themselves. It seems unfortunate that listener lists have to be kept in sync - as a general rule, everything that needs to be kept in sync will get out of sync sooner or later.

I.e. when dispatching an event to SVGElementInstance, dispatchGenericEvent() would take listener list from  the original, and so would addEventListener/removeEventListener.

Does this make any sense? Or did I just misunderstand the desired behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64279</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-15 04:48:55 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; When reading the spec, I thought that a more natural approach would be to tweak
&gt; event dispatching, not the elements themselves. It seems unfortunate that
&gt; listener lists have to be kept in sync - as a general rule, everything that
&gt; needs to be kept in sync will get out of sync sooner or later.
&gt; 
&gt; I.e. when dispatching an event to SVGElementInstance, dispatchGenericEvent()
&gt; would take listener list from  the original, and so would
&gt; addEventListener/removeEventListener.
&gt; 
&gt; Does this make any sense? Or did I just misunderstand the desired behavior?

Hi Alexey, thanks for taking time to check this approach.

It will be easier to discuss once this patch is in, and I actually uploaded the follow-up SVG patch.
The idea is that EventTargetSVGElementInstance, addEventListener/removeEventListener/dispatchEvent etc.. call EventTarget::addEventListener(correspondingElement(), ...) which means that any events dispatched to an element, which gets directly or indirectly referenced by &lt;use&gt; will be intercepted in dispatchGenericEvent() and their &apos;target&apos; &amp; &apos;currentTarget&apos; property will be modified, to point to the SVGElementInstance objects. So what you are describing above, seems perfectly fine.

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64282</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-15 05:10:01 -0800</bug_when>
    <thetext>Rereading my patch, I have some fears regarding s_prototypeName initialization.
Anyone has a suggestion for a nicer way  not involving a static const char*?

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64315</commentid>
    <comment_count>8</comment_count>
      <attachid>17915</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-15 12:22:16 -0800</bug_when>
    <thetext>Created attachment 17915
Updated patch v2

Incorporated Erics suggestions:
- create helper method to convert from JSEventTargetProperties tokens to AtomicString to simplify getListener/setListener implementation
- Better way to handle s_prototypeName (better, as in actually working reliable!)

No regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64318</commentid>
    <comment_count>9</comment_count>
      <attachid>17915</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-15 12:39:06 -0800</bug_when>
    <thetext>Comment on attachment 17915
Updated patch v2

I think this needs at least one more round for code clarity:


WildFox: your indenting is kinda strange in JSEventTargetPrototypeInformation

WildFox: IMO the big +    if (eventType == DOMSubtreeModifiedEvent) if-chain should be abstracted into a static inline funtion
type = listenerTypeForEventType(eventType)
WildFox: actually, better would probably be shouldEnableSpecialListenerTypeOnDocument(eventType, type)
then you can combine it with the next if
something like that

WildFox: you also seem to have done a search replace of /listen//
WildFox: +        // We do want capturing event ers to be invoked here, even though
WildFox: you should probably search for &quot; ers&quot;

WildFox: if you&apos;re moving the code anyway, you shoudl clean up the &quot;why don&apos;t we recalc the node chain here&quot; comment
which is about 15 lines long and only needs to be 2 :)
&quot;We don&apos;t recalc the node chain here because she spec says so:&quot;
[spec quote]

WildFox: all of your:
+#if ENABLE(SVG)
+        evt-&gt;setCurrentTarget(applySVGEventTargetRules(eventTargetNode, evt.get()));
blocks shoudl just change to a single static iline
setCurrentTargetRespectingSVGTargetRules(evt, eventTargetNode)
WildFox: and then you can have the special logic all in one plac,e instead of lots of copy/paste #if ENABLE code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64326</commentid>
    <comment_count>10</comment_count>
      <attachid>17917</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-15 14:43:27 -0800</bug_when>
    <thetext>Created attachment 17917
Updated patch v3

Updated, fixing Erics comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64327</commentid>
    <comment_count>11</comment_count>
      <attachid>17917</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-15 14:48:11 -0800</bug_when>
    <thetext>Comment on attachment 17917
Updated patch v3

Looks good.

+    // Remove existing identical er set with identical arguments.

Still need to do a search for &quot; er&quot; and fix those to &quot; listener&quot;. :)

dispatchGenericEvent is horribly long, we&apos;ll eventually need to break it up into more static inlines.

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64329</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-12-15 14:50:54 -0800</bug_when>
    <thetext>Landed in r28756 with Erics last comment fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17900</attachid>
            <date>2007-12-14 18:12:18 -0800</date>
            <delta_ts>2007-12-14 19:13:23 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>Refactor.diff</filename>
            <type>text/plain</type>
            <size>95194</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzYgQEAKKzIwMDctMTIt
MTQgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlczogaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDUgKFJlZmFjdG9yIEV2ZW50VGFyZ2V0Tm9k
ZSAmIEpTRXZlbnRUYXJnZXROb2RlIGZvciBhbiB1cGNvbWluZyBTVkcgcGF0Y2gpCisKKyAgICAg
ICAgU3BsaXQgdXAgSlNFdmVudFRhcmdldE5vZGUgaW4gSlNFdmVudFRhcmdldE5vZGUgJiBKU0V2
ZW50VGFyZ2V0QmFzZSAtIHdoZXJlIG1vc3QgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBtb3ZlZCBk
b3duCisgICAgICAgIGluIHRoZSBiYXNlIGNsYXNzLiBBcHBsaWVkIHRoZSBzYW1lIHJlZmFjdG9y
aXphdGlvbiB0byBFdmVudFRhcmdldE5vZGUuCisKKyAgICAgICAgVGhpcyBtYWtlcyBpdCBwb3Nz
aWJsZSBmb3IgdGhlIHVwY29taW5nIHBhdGNoIGltcGxlbWVudGluZyB0aGUgRXZlbnRUYXJnZXQg
aW50ZXJmYWNlIGZvciBTVkdFbGVtZW50SW5zdGFuY2UKKyAgICAgICAgdG8gc2hhcmUgYXMgbXVj
aCBjb2RlIGFzIHBvc3NpYmxlIHdpdGggdGhlIEV2ZW50VGFyZ2V0Tm9kZSBjbGFzc2VzLgorCisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlRXZlbnRUYXJnZXRBbmRD
b3JyZXNwb25kaW5nTm9kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJh
c2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U6
OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpKU0V2ZW50VGFyZ2V0QmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6fkpTRXZlbnRUYXJnZXRC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpnZXRWYWx1ZVByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpwdXRWYWx1ZVByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldEJhc2U6OnB1dCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlOjpKU0V2ZW50VGFyZ2V0UHJvdG90
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGU6OnNlbGYpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGU6OmNsYXNzSW5m
byk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OkpTRXZlbnRUYXJnZXROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjp+SlNFdmVudFRhcmdldE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6cHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXROb2RlOjpwdXRWYWx1ZVByb3BlcnR5KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFRhcmdldDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6aGFuZGxlTG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRUYXJnZXQ6OmFwcGx5U1ZHRXZlbnRUYXJnZXRSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpmb3JiaWRFdmVudERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmFsbG93RXZlbnRE
aXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpldmVudERpc3BhdGNoRm9yYmlkZGVuKToKKyAg
ICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
OjpwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcmJpZEV2
ZW50RGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6YWxsb3dFdmVudERpc3BhdGNoKToKKyAg
ICAgICAgKiBkb20vRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0Tm9kZTo6fkV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRh
cmdldE5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0Tm9kZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFRhcmdldE5vZGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXROb2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0Tm9kZTo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRUYXJnZXROb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXROb2RlOjpkaXNwYXRjaFdpbmRvd0V2ZW50KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJn
ZXROb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmxvY2FsRXZlbnRM
aXN0ZW5lcnMpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VsZW1lbnQ6OnNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0VsZW1lbnQ6OmRpc3BhdGNoRXZlbnQpOgorCiAyMDA3LTEyLTE0ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCkluZGV4
OiBEZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIERlcml2ZWRTb3VyY2VzLm1ha2UJ
KHJldmlzaW9uIDI4NzI4KQorKysgRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzQxLDcgKzM0MSw3IEBAIGFsbCA6IFwKICAgICBKU0VudGl0eS5oIFwKICAgICBKU0VudGl0
eVJlZmVyZW5jZS5oIFwKICAgICBKU0V2ZW50LmggXAotICAgIEpTRXZlbnRUYXJnZXROb2RlLmx1
dC5oIFwKKyAgICBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCBcCiAgICAgSlNIVE1MQXBwbGV0RWxl
bWVudC5oIFwKICAgICBKU0hUTUxBbmNob3JFbGVtZW50LmggXAogICAgIEpTSFRNTEFyZWFFbGVt
ZW50LmggXApJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3Mjgp
CisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMwOTMsNiArMzA5Myw4IEBACiAJCUIyNTU5OUJBMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNv
dXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI1NTk5MjIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFya2VyLmggKi87IH07
CiAJCUIyNTU5OUJCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTkyMzBEMDBE
OEI5MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovOyB9OwogCQlCMjU1OTlCQzBE
MDBEOEJBMDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OTI0MEQwMEQ4QjkwMEJCODI1QyAvKiBT
VkdSZXNvdXJjZU1hc2tlci5oICovOyB9OworCQlCMjVCRTUxMDBEMDZCNzA4MDBCNTI0QzYgLyog
SlNFdmVudFRhcmdldEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjI1QkU1MEUwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRUYXJnZXRCYXNl
LmNwcCAqLzsgfTsKKwkJQjI1QkU1MTEwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRUYXJnZXRC
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjVC
RTUwRjBEMDZCNzA4MDBCNTI0QzYgLyogSlNFdmVudFRhcmdldEJhc2UuaCAqLzsgfTsKIAkJQjI1
REZBQUYwQjJFMjkyOTAwMEU2NTEwIC8qIEpTU1ZHTWF0cml4Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNURGQUFFMEIyRTI5MjkwMDBF
NjUxMCAvKiBKU1NWR01hdHJpeEN1c3RvbS5jcHAgKi87IH07CiAJCUIyNjU1NEVBMEI4MEQ3NDkw
MEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjY1NTRFODBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVy
U1ZHVGV4dFBhdGguY3BwICovOyB9OwogCQlCMjY1NTRFQjBCODBENzQ5MDBBNTBFQzMgLyogUmVu
ZGVyU1ZHVGV4dFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNjU1NEU5MEI4MEQ3NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oICov
OyB9OwpAQCAtMzE0NCw2ICszMTQ2LDcgQEAKIAkJQjI3NTM1ODIwQjA1MzgxNDAwMkNFNjRGIC8q
IFBlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3
NTM1NTUwQjA1MzgxNDAwMkNFNjRGIC8qIFBlbi5oICovOyB9OwogCQlCMjc1MzU4RTBCMDUzQTY2
MDAyQ0U2NEYgLyogSWNvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tICovOyB9
OwogCQlCMjc3QjQwNDBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3N0I0MDMwQjIy
RjM3QzAwMDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4dE1hYy5tbSAqLzsgfTsKKwkJQjI4QkMzMUEw
RDEzNUU1NDAwQ0RCQTI3IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QkMzMTkwRDEzNUU1NDAwQ0RCQTI3
IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oICovOyB9OwogCQlCMjhDNkEyNzBEMDBDNDQ4MDAz
MzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTFFMEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdE
b2N1bWVudEV4dGVuc2lvbnMuY3BwICovOyB9OwogCQlCMjhDNkEyODBEMDBDNDQ4MDAzMzRBQTQg
LyogU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjhDNkExRjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmggKi87IH07CiAJCUIyOEM2QTI5MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFn
ZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjhDNkEyMDBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuY3BwICovOyB9OwpA
QCAtMzY5Myw3ICszNjk2LDYgQEAKIAkJQkNEOUMyQzIwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9k
ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNEOUMyQkUwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxpc3QuY3BwICovOyB9OwogCQlCQ0Q5
QzJDMzBDMTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMyQkYwQzE3QjY5RTAwNUM5MEEyIC8qIEpT
Tm9kZUxpc3QuaCAqLzsgfTsKIAkJQkNEOUMyQzYwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRE9NRXhj
ZXB0aW9uQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0Q5QzJDNDBDMTdCNkVDMDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25D
b25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKLQkJQkNEOUMyQzcwQzE3QjZFQzAwNUM5MEEyIC8qIEpT
RXZlbnRUYXJnZXROb2RlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNEOUMyQzUwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXROb2Rl
Lmx1dC5oICovOyB9OwogCQlCQ0UwMTM5QTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTAx
Mzk4MEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuY3BwICovOyB9OwogCQlCQ0UwMTM5
QjBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNT
dHlsZVNoZWV0LmggKi87IH07CiAJCUJDRUE0NzhGMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFQTQ3N0MwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAgKi87IH07CkBAIC03MDkxLDYgKzcwOTMsOCBAQAogCQlCMjU1OTky
MjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXJrZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlTWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyNTU5OTIzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTkyNDBEMDBEOEI5
MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR1Jlc291cmNlTWFza2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUIyNUJFNTBFMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFdmVudFRhcmdldEJhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjVCRTUwRjBEMDZCNzA4MDBCNTI0QzYg
LyogSlNFdmVudFRhcmdldEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRXZlbnRUYXJnZXRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNURG
QUFFMEIyRTI5MjkwMDBFNjUxMCAvKiBKU1NWR01hdHJpeEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdNYXRyaXhDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjY1NTRFODBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVy
U1ZHVGV4dFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclNWR1RleHRQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NTU0
RTkwQjgwRDc0OTAwQTUwRUMzIC8qIFJlbmRlclNWR1RleHRQYXRoLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdUZXh0UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzE0Miw2ICs3MTQ2LDcgQEAKIAkJQjI3NTM1NTUwQjA1MzgxNDAwMkNF
NjRGIC8qIFBlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJ
Y29uTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEljb25N
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzdCNDAzMEIyMkYzN0MwMDA0
QkVDNiAvKiBHcmFwaGljc0NvbnRleHRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCMjhCQzMxOTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2Uu
bHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V2ZW50VGFyZ2V0QmFz
ZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI4QzZBMUUwRDAwQzQ0ODAw
MzM0QUE0IC8qIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI4QzZBMUYwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyOEM2QTIwMEQw
MEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW1hZ2VMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzcwMSw3ICs3NzA2LDYgQEAKIAkJQkNEOUMyQkUwQzE3QjY5RTAwNUM5MEEy
IC8qIEpTTm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Q5QzJCRjBD
MTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Q5
QzJDNDBDMTdCNkVDMDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0
b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDRDlDMkM1MEMxN0I2RUMw
MDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRXZlbnRUYXJnZXROb2RlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0UwMTM5ODBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyog
SlNTdHlsZVNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0eWxl
U2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0MwOTdDQUFDODAw
OTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgyMDgsNyArODIxMiw2IEBACiAJCQkJQThE
MDZCMzgwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgKi8sCiAJCQkJQThEMDZCMzcw
QTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5oICovLAogCQkJCUJDRDlDMkM0MEMxN0I2RUMw
MDVDOTBBMiAvKiBKU0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oICovLAotCQkJCUJDRDlD
MkM1MEMxN0I2RUMwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCAqLywKIAkJCQk2
NTY1ODFEQTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX2Nzcy5sdXQuaCAqLywKIAkJCQk2NTY1ODFE
QzA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX2V2ZW50cy5sdXQuaCAqLywKIAkJCQk2NTY1ODFERTA5
RDE1MDhEMDAwRTYxRDcgLyoga2pzX25hdmlnYXRvci5sdXQuaCAqLywKQEAgLTEwNTQxLDYgKzEw
NTQ0LDcgQEAKIAkJCQkxQUNFNTNERDBBOEQxODgxMDAyMjk0N0QgLyogSlNET01QYXJzZXIuY3Bw
ICovLAogCQkJCTFBQ0U1M0RFMEE4RDE4ODEwMDIyOTQ3RCAvKiBKU0RPTVBhcnNlci5oICovLAog
CQkJCTY1NjU4MUQ3MDlEMTUwOEQwMDBFNjFENyAvKiBKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oICov
LAorCQkJCUIyOEJDMzE5MEQxMzVFNTQwMENEQkEyNyAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQu
aCAqLywKIAkJCQkxQUNFNTNGNDBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmNw
cCAqLywKIAkJCQkxQUNFNTNGNTBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmgg
Ki8sCiAJCQkJNjU2NTgxRDkwOUQxNTA4RDAwMEU2MUQ3IC8qIEpTWFNMVFByb2Nlc3Nvci5sdXQu
aCAqLywKQEAgLTExMzU5LDYgKzExMzYzLDggQEAKIAkJCQlFMTBCOTM3QjBCNzNDMDBBMDAzRUQ4
OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCAqLywKIAkJCQlCQ0Q5QzI2ODBDMTdBQTgx
MDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEOUMy
NjkwQzE3QUE4MTAwNUM5MEEyIC8qIEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IuaCAqLywKKwkJ
CQlCMjVCRTUwRTBEMDZCNzA4MDBCNTI0QzYgLyogSlNFdmVudFRhcmdldEJhc2UuY3BwICovLAor
CQkJCUIyNUJFNTBGMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5oICovLAog
CQkJCUJDRDlDMjZBMEMxN0FBODEwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5jcHAgKi8s
CiAJCQkJQkNEOUMyNkIwQzE3QUE4MTAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXROb2RlLmggKi8s
CiAJCQkJQkM2REM3QTAwQzFBNEJGQTAwNEUyMDE3IC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCAq
LywKQEAgLTEzMzM1LDcgKzEzMzQxLDYgQEAKIAkJCQk5M0Y5Qjc3NTBCQTVGREREMDA4NTQwNjQg
LyogSlNFbnRpdHlSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTgzNzhFMDlGODVE
NEYwMEI4NUFFNCAvKiBKU0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Q5QzI3MTBDMTdB
QTgxMDA1QzkwQTIgLyogSlNFdmVudFRhcmdldE5vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJD
RDlDMkM3MEMxN0I2RUMwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNkRDN0ExMEMxQTRCRkEwMDRFMjAxNyAvKiBKU0hUTUxBbGxDb2xsZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNI
VE1MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTJERjIwQTFCODUyQTAw
QzgwN0Y4IC8qIEpTSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTQwOTAs
OSArMTQwOTUsMTEgQEAKIAkJCQlCQ0IxNkMyRDA5NzlDM0JEMDA0Njc3NDEgLyogbG9hZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGODA5OUU2NDkyMDA1NkU1ODEgLyogbWFya3VwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91
bml0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjI1QkU1MTEwRDA2QjcwODAwQjUyNEM2IC8qIEpT
RXZlbnRUYXJnZXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUNCRkM5OTBEMTBFNDgzMDAy
REJGNTEgLyogQ2FjaGVkUGFnZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5
MDRCNzcwRDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNEJGOUU1MEQxMUUxMzMwMDdEMjQ3RiAvKiBDbGFzc05hbWVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCMjhCQzMxQTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2UubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE0MTMxLDcgKzE0MTM4LDYgQEAKIAkJMDg2N0Q2OTBGRTg0
MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVj
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsK
LQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9y
RW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTU4
MDEsNiArMTU4MDcsNyBAQAogCQkJCUJDQjE2QzJDMDk3OUMzQkQwMDQ2Nzc0MSAvKiBsb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlz
aWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjVCRTUxMDBEMDZCNzA4MDBCNTI0
QzYgLyogSlNFdmVudFRhcmdldEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNBMzhCNEIw
RDBFNTgwODAwNjg3MkMyIC8qIEVkaXRvckNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM5MDRCNzYwRDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM0QkY5RTQwRDExRTEzMzAwN0QyNDdGIC8qIENsYXNzTmFtZXMuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJKU0V2ZW50VGFyZ2V0Tm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qIFNv
dXJjZSBmb3IgSlNFdmVudFRhcmdldFByb3BlcnRpZXNUYWJsZQorQGJlZ2luIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzVGFibGUgNTAKK29uYWJvcnQgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdl
dFByb3BlcnRpZXM6Ok9uQWJvcnQgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25ibHVyICAg
ICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CbHVyICAgICAgICAgICAg
ICAgICBEb250RGVsZXRlCitvbmNoYW5nZSAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPbkNoYW5nZSAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uY2xpY2sgICAgICAg
V2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQ2xpY2sgICAgICAgICAgICAgICAg
RG9udERlbGV0ZQorb25jb250ZXh0bWVudSBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25Db250ZXh0TWVudSAgICAgICAgICBEb250RGVsZXRlCitvbmRibGNsaWNrICAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRibENsaWNrICAgICAgICAgICAgIERvbnRE
ZWxldGUKK29uYmVmb3JlY3V0ICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
QmVmb3JlQ3V0ICAgICAgICAgICAgRG9udERlbGV0ZQorb25jdXQgICAgICAgICBXZWJDb3JlOjpK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25DdXQgICAgICAgICAgICAgICAgICBEb250RGVsZXRl
CitvbmJlZm9yZWNvcHkgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkJlZm9y
ZUNvcHkgICAgICAgICAgIERvbnREZWxldGUKK29uY29weSAgICAgICAgV2ViQ29yZTo6SlNFdmVu
dFRhcmdldFByb3BlcnRpZXM6Ok9uQ29weSAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25i
ZWZvcmVwYXN0ZSBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CZWZvcmVQYXN0
ZSAgICAgICAgICBEb250RGVsZXRlCitvbnBhc3RlICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPblBhc3RlICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uZHJhZyAg
ICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZyAgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZQorb25kcmFnZW5kICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJv
cGVydGllczo6T25EcmFnRW5kICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmRyYWdlbnRlciAg
IFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdFbnRlciAgICAgICAgICAg
IERvbnREZWxldGUKK29uZHJhZ2xlYXZlICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRp
ZXM6Ok9uRHJhZ0xlYXZlICAgICAgICAgICAgRG9udERlbGV0ZQorb25kcmFnb3ZlciAgICBXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnT3ZlciAgICAgICAgICAgICBEb250
RGVsZXRlCitvbmRyYWdzdGFydCAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpP
bkRyYWdTdGFydCAgICAgICAgICAgIERvbnREZWxldGUKK29uZHJvcCAgICAgICAgV2ViQ29yZTo6
SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJvcCAgICAgICAgICAgICAgICAgRG9udERlbGV0
ZQorb25lcnJvciAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25FcnJv
ciAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmZvY3VzICAgICAgIFdlYkNvcmU6OkpTRXZl
bnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkZvY3VzICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29u
aW5wdXQgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uSW5wdXQgICAg
ICAgICAgICAgICAgRG9udERlbGV0ZQorb25rZXlkb3duICAgICBXZWJDb3JlOjpKU0V2ZW50VGFy
Z2V0UHJvcGVydGllczo6T25LZXlEb3duICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmtleXBy
ZXNzICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbktleVByZXNzICAgICAg
ICAgICAgIERvbnREZWxldGUKK29ua2V5dXAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6Ok9uS2V5VXAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25sb2FkICAgICAg
ICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Mb2FkICAgICAgICAgICAgICAg
ICBEb250RGVsZXRlCitvbm1vdXNlZG93biAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbk1vdXNlRG93biAgICAgICAgICAgIERvbnREZWxldGUKK29ubW91c2Vtb3ZlICAgV2Vi
Q29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VNb3ZlICAgICAgICAgICAgRG9u
dERlbGV0ZQorb25tb3VzZW91dCAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
T25Nb3VzZU91dCAgICAgICAgICAgICBEb250RGVsZXRlCitvbm1vdXNlb3ZlciAgIFdlYkNvcmU6
OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlT3ZlciAgICAgICAgICAgIERvbnREZWxl
dGUKK29ubW91c2V1cCAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91
c2VVcCAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25tb3VzZXdoZWVsICBXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZVdoZWVsICAgICAgICAgICBEb250RGVsZXRlCitv
bnJlc2V0ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblJlc2V0ICAg
ICAgICAgICAgICAgIERvbnREZWxldGUKK29ucmVzaXplICAgICAgV2ViQ29yZTo6SlNFdmVudFRh
cmdldFByb3BlcnRpZXM6Ok9uUmVzaXplICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25zY3Jv
bGwgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TY3JvbGwgICAgICAg
ICAgICAgICBEb250RGVsZXRlCitvbnNlYXJjaCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPblNlYXJjaCAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uc2VsZWN0ICAg
ICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uU2VsZWN0ICAgICAgICAgICAg
ICAgRG9udERlbGV0ZQorb25zZWxlY3RzdGFydCBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25TZWxlY3RTdGFydCAgICAgICAgICBEb250RGVsZXRlCitvbnN1Ym1pdCAgICAgIFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblN1Ym1pdCAgICAgICAgICAgICAgIERv
bnREZWxldGUKK29udW5sb2FkICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uVW5sb2FkICAgICAgICAgICAgICAgRG9udERlbGV0ZQorQGVuZAorKi8KKworLyoKK0BiZWdp
biBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGUgNQorYWRkRXZlbnRMaXN0ZW5lciAgICAgICAg
JldlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbjxXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0UHJvcGVydGllczo6QWRkRXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSAgICBEb250RGVsZXRl
fEZ1bmN0aW9uIDMKK3JlbW92ZUV2ZW50TGlzdGVuZXIgICAgICZXZWJDb3JlOjpKU0V2ZW50VGFy
Z2V0UHJvdG90eXBlRnVuY3Rpb248V2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6OlJl
bW92ZUV2ZW50TGlzdGVuZXI+OjpjcmVhdGUgRG9udERlbGV0ZXxGdW5jdGlvbiAzCitkaXNwYXRj
aEV2ZW50ICAgICAgICAgICAmV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
PFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpEaXNwYXRjaEV2ZW50Pjo6Y3JlYXRl
ICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQorQGVuZAorKi8KKworYm9vbCByZXRyaWV2ZUV2
ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2Jq
ZWN0KiB0aGlzT2JqLCBOb2RlKiYgZXZlbnROb2RlLCBFdmVudFRhcmdldComIGV2ZW50VGFyZ2V0
KQoreworICAgIGlmICh0aGlzT2JqLT5pbmhlcml0cygmSlNOb2RlOjppbmZvKSkgeworICAgICAg
ICBKU0V2ZW50VGFyZ2V0Tm9kZSoganNOb2RlID0gc3RhdGljX2Nhc3Q8SlNFdmVudFRhcmdldE5v
ZGUqPih0aGlzT2JqKTsKKyAgICAgICAgQVNTRVJUKGpzTm9kZSk7CisKKyAgICAgICAgRXZlbnRU
YXJnZXROb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4oanNOb2RlLT5p
bXBsKCkpOworICAgICAgICBBU1NFUlQobm9kZSk7CisKKyAgICAgICAgZXZlbnROb2RlID0gbm9k
ZTsKKyAgICAgICAgZXZlbnRUYXJnZXQgPSBub2RlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldEJhc2UuaAkocmV2aXNpb24gMCkKKysrIGJpbmRpbmdzL2pzL0pT
RXZlbnRUYXJnZXRCYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTRXZlbnRUYXJnZXRCYXNlX2gKKyNkZWZpbmUgSlNFdmVudFRh
cmdldEJhc2VfaAorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAi
SlNFdmVudC5oIgorI2luY2x1ZGUgImtqc19ldmVudHMuaCIKKyNpbmNsdWRlICJranNfd2luZG93
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5h
bWVzOworCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworCisgICAgLy8gRXZlbnQgdGFyZ2V0IHBy
b3BlcnRpZXMgKHNoYXJlZCBhY3Jvc3MgYWxsIEpTRXZlbnRUYXJnZXQqIGNsYXNzZXMpCisgICAg
c3RydWN0IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzIHsKKyAgICAgICAgZW51bSB7CisgICAgICAg
ICAgICBBZGRFdmVudExpc3RlbmVyLCBSZW1vdmVFdmVudExpc3RlbmVyLCBEaXNwYXRjaEV2ZW50
LAorICAgICAgICAgICAgT25BYm9ydCwgT25CbHVyLCBPbkNoYW5nZSwgT25DbGljaywgT25Db250
ZXh0TWVudSwgT25EYmxDbGljaywgT25FcnJvciwKKyAgICAgICAgICAgIE9uRHJhZ0VudGVyLCBP
bkRyYWdPdmVyLCBPbkRyYWdMZWF2ZSwgT25Ecm9wLCBPbkRyYWdTdGFydCwgT25EcmFnLCBPbkRy
YWdFbmQsCisgICAgICAgICAgICBPbkJlZm9yZUN1dCwgT25DdXQsIE9uQmVmb3JlQ29weSwgT25D
b3B5LCBPbkJlZm9yZVBhc3RlLCBPblBhc3RlLCBPblNlbGVjdFN0YXJ0LAorICAgICAgICAgICAg
T25Gb2N1cywgT25JbnB1dCwgT25LZXlEb3duLCBPbktleVByZXNzLCBPbktleVVwLCBPbkxvYWQs
IE9uTW91c2VEb3duLAorICAgICAgICAgICAgT25Nb3VzZU1vdmUsIE9uTW91c2VPdXQsIE9uTW91
c2VPdmVyLCBPbk1vdXNlVXAsIE9uTW91c2VXaGVlbCwgT25SZXNldCwKKyAgICAgICAgICAgIE9u
UmVzaXplLCBPblNjcm9sbCwgT25TZWFyY2gsIE9uU2VsZWN0LCBPblN1Ym1pdCwgT25VbmxvYWQK
KyAgICAgICAgfTsKKyAgICB9OworCisgICAgLy8gRXZlbnQgdGFyZ2V0IHByb3RvdHlwZSBzaGFy
aW5nIGZ1bmN0aW9uYWxpdHkKKyAgICB0ZW1wbGF0ZTxpbnQgSlNFdmVudFRhcmdldFByb3RvdHlw
ZUZ1bmN0aW9uSWRlbnRpZmllcj4KKyAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVu
Y3Rpb25CYXNlIDogcHVibGljIEtKUzo6SW50ZXJuYWxGdW5jdGlvbkltcCB7CisgICAgcHVibGlj
OgorICAgICAgICBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25CYXNlKEtKUzo6RXhlY1N0
YXRlKiBleGVjLCBpbnQgbGVuLCBjb25zdCBLSlM6OklkZW50aWZpZXImIG5hbWUpIAorICAgICAg
ICAgICAgOiBLSlM6OkludGVybmFsRnVuY3Rpb25JbXAoc3RhdGljX2Nhc3Q8S0pTOjpGdW5jdGlv
blByb3RvdHlwZSo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUoKSksIG5hbWUpIAorICAgICAgICB7IAorICAgICAgICAgICAgcHV0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgsIEtKUzo6anNOdW1iZXIobGVuKSwgS0pTOjpEb250RGVsZXRl
IHwgS0pTOjpSZWFkT25seSB8IEtKUzo6RG9udEVudW0pOyAKKyAgICAgICAgfQorCisgICAgICAg
IHN0YXRpYyBLSlM6OkludGVybmFsRnVuY3Rpb25JbXAqIGNyZWF0ZShLSlM6OkV4ZWNTdGF0ZSos
IGludCBsZW4sIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgbmFtZSk7CisgICAgICAgIHZpcnR1YWwg
S0pTOjpKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmpl
Y3QqLCBjb25zdCBLSlM6Okxpc3QmKSA9IDA7CisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBK
U0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVyPgorICAgIGNsYXNzIEpTRXZl
bnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbiA6IHB1YmxpYyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBl
RnVuY3Rpb25CYXNlPEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXI+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbihLSlM6
OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1lKSAK
KyAgICAgICAgICAgIDogSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50
VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVyPihleGVjLCBsZW4sIG5hbWUpCisgICAg
ICAgIHsgCisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0
aGUgcGFydGlhbCBzcGVjaWFsaXphdGVkIHRlbXBsYXRlIGZ1bmN0aW9ucyBiZWxvdyAKKyAgICBi
b29sIHJldHJpZXZlRXZlbnRUYXJnZXRBbmRDb3JyZXNwb25kaW5nTm9kZShLSlM6OkV4ZWNTdGF0
ZSosIEtKUzo6SlNPYmplY3QqIHRoaXNPYmosIE5vZGUqJiwgRXZlbnRUYXJnZXQqJik7CisKKyAg
ICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRFdmVudExpc3RlbmVyPiA6IHB1YmxpYyBKU0V2ZW50
VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25CYXNlPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRF
dmVudExpc3RlbmVyPiB7CisgICAgcHVibGljOgorICAgICAgICBKU0V2ZW50VGFyZ2V0UHJvdG90
eXBlRnVuY3Rpb248SlNFdmVudFRhcmdldFByb3BlcnRpZXM6OkFkZEV2ZW50TGlzdGVuZXI+KEtK
Uzo6RXhlY1N0YXRlKiBleGVjLCBpbnQgbGVuLCBjb25zdCBLSlM6OklkZW50aWZpZXImIG5hbWUp
IAorICAgICAgICAgICAgOiBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25CYXNlPEpTRXZl
bnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRFdmVudExpc3RlbmVyPihleGVjLCBsZW4sIG5hbWUpCisg
ICAgICAgIHsgCisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogY2Fs
bEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIEtKUzo6SlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IEtKUzo6TGlzdCYgYXJncykKKyAgICAgICAgeworICAgICAgICAgICAgS0pTOjpET01F
eGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKworICAgICAgICAgICAgTm9kZSog
ZXZlbnROb2RlID0gMDsKKyAgICAgICAgICAgIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IDA7
CisgICAgICAgICAgICBpZiAoIXJldHJpZXZlRXZlbnRUYXJnZXRBbmRDb3JyZXNwb25kaW5nTm9k
ZShleGVjLCB0aGlzT2JqLCBldmVudE5vZGUsIGV2ZW50VGFyZ2V0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4ZWMsIEtKUzo6VHlwZUVycm9yKTsKKworICAgICAg
ICAgICAgRnJhbWUqIGZyYW1lID0gZXZlbnROb2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAg
ICAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gS0pTOjpqc1VuZGVm
aW5lZCgpOworCisgICAgICAgICAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IEtK
Uzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0
ZW5lcihhcmdzWzFdKSkKKyAgICAgICAgICAgICAgICBldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0
ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3NbMl0tPnRvQm9vbGVh
bihleGVjKSk7CisKKyAgICAgICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRQ
cm90b3R5cGVGdW5jdGlvbjxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZlbnRMaXN0
ZW5lcj4gOiBwdWJsaWMgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50
VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZlbnRMaXN0ZW5lcj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpSZW1vdmVFdmVudExpc3RlbmVyPihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1lKSAKKyAgICAgICAgICAgIDogSlNFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZl
bnRMaXN0ZW5lcj4oZXhlYywgbGVuLCBuYW1lKQorICAgICAgICB7IAorICAgICAgICB9CisKKyAg
ICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRl
KiBleGVjLCBLSlM6OkpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEtKUzo6RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRp
b24oZXhlYyk7CisKKyAgICAgICAgICAgIE5vZGUqIGV2ZW50Tm9kZSA9IDA7CisgICAgICAgICAg
ICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQgPSAwOworICAgICAgICAgICAgaWYgKCFyZXRyaWV2
ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnROb2Rl
LCBldmVudFRhcmdldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihl
eGVjLCBLSlM6OlR5cGVFcnJvcik7CisKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGV2ZW50
Tm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAgICAgICAgIGlmICghZnJhbWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgaWYg
KEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3co
ZnJhbWUpLT5maW5kSlNFdmVudExpc3RlbmVyKGFyZ3NbMV0pKQorICAgICAgICAgICAgICAgIGV2
ZW50VGFyZ2V0LT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBs
aXN0ZW5lciwgYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKKworICAgICAgICAgICAgcmV0dXJu
IEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH07CisgCisgICAgdGVtcGxhdGU8
PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbjxKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4gOiBwdWJsaWMgSlNFdmVudFRhcmdldFByb3RvdHlw
ZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpTRXZl
bnRUYXJnZXRQcm9wZXJ0aWVzOjpEaXNwYXRjaEV2ZW50PihLSlM6OkV4ZWNTdGF0ZSogZXhlYywg
aW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1lKSAKKyAgICAgICAgICAgIDogSlNF
dmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
RGlzcGF0Y2hFdmVudD4oZXhlYywgbGVuLCBuYW1lKQorICAgICAgICB7IAorICAgICAgICB9CisK
KyAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0
YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3Mp
CisgICAgICAgIHsKKyAgICAgICAgICAgIE5vZGUqIGV2ZW50Tm9kZSA9IDA7CisgICAgICAgICAg
ICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQgPSAwOworICAgICAgICAgICAgaWYgKCFyZXRyaWV2
ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnROb2Rl
LCBldmVudFRhcmdldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihl
eGVjLCBLSlM6OlR5cGVFcnJvcik7CisKKyAgICAgICAgICAgIEtKUzo6RE9NRXhjZXB0aW9uVHJh
bnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gS0pTOjpqc0Jvb2xl
YW4oZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQodG9FdmVudChhcmdzWzBdKSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gVGhpcyBjcmVhdGlvbiBmdW5jdGlvbiBy
ZWxpZXMgdXBvbiBhYm92ZSBzcGVjaWFsaXphdGlvbnMKKyAgICB0ZW1wbGF0ZTxpbnQgSlNFdmVu
dFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4KKyAgICBLSlM6OkludGVybmFsRnVu
Y3Rpb25JbXAqIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj46OmNyZWF0ZShLSlM6OkV4ZWNTdGF0ZSogZXhl
YywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb248SlNFdmVudFRhcmdldFBy
b3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4oZXhlYywgbGVuLCBuYW1lKTsgCisgICAgfQorfTsK
KworLy8gTmVlZHMgdG8gYmUgaW5jbHVkZWQgYWZ0ZXIgYWJvdmUgZGVjbGFyYXRpb24KKyNpbmNs
dWRlICJKU0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgSlNFdmVudFRhcmdldD4KKyAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0
QmFzZSB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEtKUzo6SlNWYWx1ZSogKEpTRXZl
bnRUYXJnZXQ6OipHZXRMaXN0ZW5lck1ldGhvZCkoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpIGNvbnN0OworICAgICAgICB0eXBlZGVmIHZvaWQgKEpTRXZlbnRUYXJnZXQ6OipTZXRMaXN0
ZW5lck1ldGhvZCkoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgS0pTOjpKU1ZhbHVlKiBmdW5jKSBjb25zdDsKKworICAgICAgICBKU0V2ZW50VGFyZ2V0QmFz
ZShKU0V2ZW50VGFyZ2V0KiBvd25lciwgR2V0TGlzdGVuZXJNZXRob2QgZ2V0TGlzdGVuZXIsIFNl
dExpc3RlbmVyTWV0aG9kIHNldExpc3RlbmVyKQorICAgICAgICAgICAgOiBtX293bmVyKG93bmVy
KQorICAgICAgICAgICAgLCBtX2dldExpc3RlbmVyKGdldExpc3RlbmVyKQorICAgICAgICAgICAg
LCBtX3NldExpc3RlbmVyKHNldExpc3RlbmVyKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQobV9nZXRMaXN0ZW5lcik7CisgICAgICAgICAgICBBU1NFUlQobV9zZXRMaXN0ZW5lcik7Cisg
ICAgICAgIH0KKworICAgICAgICB+SlNFdmVudFRhcmdldEJhc2UoKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBJbXBsZW1lbnRlZCBsb2NhbGx5IC0gbmVlZHMgZ2V0TGlzdGVu
ZXIvc2V0TGlzdGVuZXIKKyAgICAgICAgS0pTOjpKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3Bl
cnRpZXM6Ok9uQWJvcnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRM
aXN0ZW5lcikoYWJvcnRFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPbkJsdXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRM
aXN0ZW5lcikoYmx1ckV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3Bl
cnRpZXM6Ok9uQ2hhbmdlOgorICAgICAgICAgICAgICAgIHJldHVybiAobV9vd25lci0+Km1fZ2V0
TGlzdGVuZXIpKGNoYW5nZUV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6Ok9uQ2xpY2s6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9n
ZXRMaXN0ZW5lcikoY2xpY2tFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkNvbnRleHRNZW51OgorICAgICAgICAgICAgICAgIHJldHVybiAobV9vd25l
ci0+Km1fZ2V0TGlzdGVuZXIpKGNvbnRleHRtZW51RXZlbnQpOworICAgICAgICAgICAgY2FzZSBK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EYmxDbGljazoKKyAgICAgICAgICAgICAgICByZXR1
cm4gKG1fb3duZXItPiptX2dldExpc3RlbmVyKShkYmxjbGlja0V2ZW50KTsKKyAgICAgICAgICAg
IGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRXJyb3I6CisgICAgICAgICAgICAgICAg
cmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikoZXJyb3JFdmVudCk7CisgICAgICAgICAg
ICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkZvY3VzOgorICAgICAgICAgICAgICAg
IHJldHVybiAobV9vd25lci0+Km1fZ2V0TGlzdGVuZXIpKGZvY3VzRXZlbnQpOworICAgICAgICAg
ICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25JbnB1dDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKG1fb3duZXItPiptX2dldExpc3RlbmVyKShpbnB1dEV2ZW50KTsKKyAgICAgICAg
ICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uS2V5RG93bjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKG1fb3duZXItPiptX2dldExpc3RlbmVyKShrZXlkb3duRXZlbnQpOworICAg
ICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlQcmVzczoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKG1fb3duZXItPiptX2dldExpc3RlbmVyKShrZXlwcmVzc0V2ZW50
KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uS2V5VXA6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikoa2V5dXBFdmVu
dCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkxvYWQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikobG9hZEV2ZW50
KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VEb3du
OgorICAgICAgICAgICAgICAgIHJldHVybiAobV9vd25lci0+Km1fZ2V0TGlzdGVuZXIpKG1vdXNl
ZG93bkV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
TW91c2VNb3ZlOgorICAgICAgICAgICAgICAgIHJldHVybiAobV9vd25lci0+Km1fZ2V0TGlzdGVu
ZXIpKG1vdXNlbW92ZUV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3Bl
cnRpZXM6Ok9uTW91c2VPdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9n
ZXRMaXN0ZW5lcikobW91c2VvdXRFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbk1vdXNlT3ZlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gKG1fb3du
ZXItPiptX2dldExpc3RlbmVyKShtb3VzZW92ZXJFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlVXA6CisgICAgICAgICAgICAgICAgcmV0dXJu
IChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikobW91c2V1cEV2ZW50KTsgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VXaGVlbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKG1fb3duZXItPiptX2dldExpc3RlbmVyKShtb3VzZXdoZWVsRXZlbnQp
OyAgICAgIAorICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CZWZv
cmVDdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lciko
YmVmb3JlY3V0RXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25DdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5l
cikoY3V0RXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
T25CZWZvcmVDb3B5OgorICAgICAgICAgICAgICAgIHJldHVybiAobV9vd25lci0+Km1fZ2V0TGlz
dGVuZXIpKGJlZm9yZWNvcHlFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkNvcHk6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9n
ZXRMaXN0ZW5lcikoY29weUV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6Ok9uQmVmb3JlUGFzdGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVy
LT4qbV9nZXRMaXN0ZW5lcikoYmVmb3JlcGFzdGVFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblBhc3RlOgorICAgICAgICAgICAgICAgIHJldHVybiAo
bV9vd25lci0+Km1fZ2V0TGlzdGVuZXIpKHBhc3RlRXZlbnQpOworICAgICAgICAgICAgY2FzZSBK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnRW50ZXI6CisgICAgICAgICAgICAgICAgcmV0
dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikoZHJhZ2VudGVyRXZlbnQpOworICAgICAgICAg
ICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnT3ZlcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKG1fb3duZXItPiptX2dldExpc3RlbmVyKShkcmFnb3ZlckV2ZW50KTsKKyAg
ICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZ0xlYXZlOgorICAg
ICAgICAgICAgICAgIHJldHVybiAobV9vd25lci0+Km1fZ2V0TGlzdGVuZXIpKGRyYWdsZWF2ZUV2
ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJvcDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gKG1fb3duZXItPiptX2dldExpc3RlbmVyKShkcm9wRXZl
bnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnU3Rh
cnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikoZHJh
Z3N0YXJ0RXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
T25EcmFnOgorICAgICAgICAgICAgICAgIHJldHVybiAobV9vd25lci0+Km1fZ2V0TGlzdGVuZXIp
KGRyYWdFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpP
bkRyYWdFbmQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5l
cikoZHJhZ2VuZEV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRp
ZXM6Ok9uUmVzZXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0
ZW5lcikocmVzZXRFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPblJlc2l6ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKG1fb3duZXItPiptX2dldExp
c3RlbmVyKShyZXNpemVFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPblNjcm9sbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKG1fb3duZXItPiptX2dl
dExpc3RlbmVyKShzY3JvbGxFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPblNlYXJjaDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKG1fb3duZXItPipt
X2dldExpc3RlbmVyKShzZWFyY2hFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPblNlbGVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKG1fb3duZXIt
PiptX2dldExpc3RlbmVyKShzZWxlY3RFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPblNlbGVjdFN0YXJ0OgorICAgICAgICAgICAgICAgIHJldHVybiAo
bV9vd25lci0+Km1fZ2V0TGlzdGVuZXIpKHNlbGVjdHN0YXJ0RXZlbnQpOworICAgICAgICAgICAg
Y2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TdWJtaXQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikoc3VibWl0RXZlbnQpOworICAgICAgICAg
ICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25VbmxvYWQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIChtX293bmVyLT4qbV9nZXRMaXN0ZW5lcikodW5sb2FkRXZlbnQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gS0pTOjpqc1VuZGVmaW5lZCgpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4sIEtKUzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkFib3J0OgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRM
aXN0ZW5lcikoZXhlYywgYWJvcnRFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CbHVyOgorICAg
ICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgYmx1ckV2ZW50LCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkNoYW5nZToKKyAgICAgICAgICAgICAgICAobV9vd25lci0+Km1f
c2V0TGlzdGVuZXIpKGV4ZWMsIGNoYW5nZUV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNsaWNr
OgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgY2xpY2tF
dmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Db250ZXh0TWVudToKKyAgICAgICAgICAgICAgICAo
bV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIGNvbnRleHRtZW51RXZlbnQsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6Ok9uRGJsQ2xpY2s6CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExp
c3RlbmVyKShleGVjLCBkYmxjbGlja0V2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkVycm9yOgor
ICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgZXJyb3JFdmVu
dCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25Gb2N1czoKKyAgICAgICAgICAgICAgICAobV9vd25lci0+
Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIGZvY3VzRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uSW5w
dXQ6CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExpc3RlbmVyKShleGVjLCBpbnB1
dEV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbktleURvd246CisgICAgICAgICAgICAgICAgKG1f
b3duZXItPiptX3NldExpc3RlbmVyKShleGVjLCBrZXlkb3duRXZlbnQsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRp
ZXM6Ok9uS2V5UHJlc3M6CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExpc3RlbmVy
KShleGVjLCBrZXlwcmVzc0V2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbktleVVwOgorICAgICAg
ICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywga2V5dXBFdmVudCwgdmFs
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFy
Z2V0UHJvcGVydGllczo6T25Mb2FkOgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRM
aXN0ZW5lcikoZXhlYywgbG9hZEV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlRG93bjoK
KyAgICAgICAgICAgICAgICAobV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIG1vdXNlZG93
bkV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlTW92ZToKKyAgICAgICAgICAgICAgICAo
bV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIG1vdXNlbW92ZUV2ZW50LCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPbk1vdXNlT3V0OgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0
ZW5lcikoZXhlYywgbW91c2VvdXRFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU92ZXI6
CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExpc3RlbmVyKShleGVjLCBtb3VzZW92
ZXJFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZVVwOgorICAgICAgICAgICAgICAgICht
X293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgbW91c2V1cEV2ZW50LCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbk1vdXNlV2hlZWw6CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExpc3Rl
bmVyKShleGVjLCBtb3VzZXdoZWVsRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlQ3V0
OgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgYmVmb3Jl
Y3V0RXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQ3V0OgorICAgICAgICAgICAgICAgIChtX293
bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgY3V0RXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
QmVmb3JlQ29weToKKyAgICAgICAgICAgICAgICAobV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4
ZWMsIGJlZm9yZWNvcHlFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Db3B5OgorICAgICAgICAg
ICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgY29weUV2ZW50LCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkJlZm9yZVBhc3RlOgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9z
ZXRMaXN0ZW5lcikoZXhlYywgYmVmb3JlcGFzdGVFdmVudCwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Q
YXN0ZToKKyAgICAgICAgICAgICAgICAobV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIHBh
c3RlRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZ0VudGVyOgorICAgICAgICAgICAgICAg
IChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgZHJhZ2VudGVyRXZlbnQsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6Ok9uRHJhZ092ZXI6CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExp
c3RlbmVyKShleGVjLCBkcmFnb3ZlckV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdMZWF2
ZToKKyAgICAgICAgICAgICAgICAobV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIGRyYWds
ZWF2ZUV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyb3A6CisgICAgICAgICAgICAgICAgKG1f
b3duZXItPiptX3NldExpc3RlbmVyKShleGVjLCBkcm9wRXZlbnQsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uRHJhZ1N0YXJ0OgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lciko
ZXhlYywgZHJhZ3N0YXJ0RXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZzoKKyAgICAgICAg
ICAgICAgICAobV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIGRyYWdFdmVudCwgdmFsdWUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6T25EcmFnRW5kOgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRM
aXN0ZW5lcikoZXhlYywgZHJhZ2VuZEV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblJlc2V0Ogor
ICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgcmVzZXRFdmVu
dCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25SZXNpemU6CisgICAgICAgICAgICAgICAgKG1fb3duZXIt
PiptX3NldExpc3RlbmVyKShleGVjLCByZXNpemVFdmVudCwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25T
Y3JvbGw6CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExpc3RlbmVyKShleGVjLCBz
Y3JvbGxFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TZWFyY2g6CisgICAgICAgICAgICAgICAg
KG1fb3duZXItPiptX3NldExpc3RlbmVyKShleGVjLCBzZWFyY2hFdmVudCwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25TZWxlY3Q6CisgICAgICAgICAgICAgICAgKG1fb3duZXItPiptX3NldExpc3RlbmVy
KShleGVjLCBzZWxlY3RFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TZWxlY3RTdGFydDoKKyAg
ICAgICAgICAgICAgICAobV9vd25lci0+Km1fc2V0TGlzdGVuZXIpKGV4ZWMsIHNlbGVjdHN0YXJ0
RXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uU3VibWl0OgorICAgICAgICAgICAgICAgIChtX293
bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhlYywgc3VibWl0RXZlbnQsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uVW5sb2FkOgorICAgICAgICAgICAgICAgIChtX293bmVyLT4qbV9zZXRMaXN0ZW5lcikoZXhl
YywgdW5sb2FkRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpT
RXZlbnRUYXJnZXROb2RlOworICAgICAgICBmcmllbmQgY2xhc3MgSlNFdmVudFRhcmdldFNWR0Vs
ZW1lbnRJbnN0YW5jZTsKKworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBKU1BhcmVudD4KKyAgICAg
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtK
Uzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBLSlM6OlByb3BlcnR5U2xvdCYgc2xvdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEtKUzo6Z2V0U3RhdGljVmFsdWVTbG90PEpTRXZl
bnRUYXJnZXQsIEpTUGFyZW50PihleGVjLCAmS0pTOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllc1Rh
YmxlLCBtX293bmVyLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICB9CisKKyAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgSlNQYXJlbnQ+CisgICAgICAgIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgS0pTOjpKU1ZhbHVl
KiB2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEtKUzo6bG9va3VwUHV0
PEpTRXZlbnRUYXJnZXQsIEpTUGFyZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
LCAmS0pTOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllc1RhYmxlLCBtX293bmVyKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNFdmVudFRhcmdldCogbV9vd25lcjsKKyAgICAg
ICAgR2V0TGlzdGVuZXJNZXRob2QgbV9nZXRMaXN0ZW5lcjsKKyAgICAgICAgU2V0TGlzdGVuZXJN
ZXRob2QgbV9zZXRMaXN0ZW5lcjsKKyAgICB9OworCisgICAgLy8gVGhpcyBjbGFzcyBpcyBhIG1v
ZGlmaWVkIHZlcnNpb24gb2YgdGhlIGNvZGUgdGhlIEtKU19ERUZJTkVfUFJPVE9UWVBFX1dJVEhf
UFJPVE9UWVBFCisgICAgLy8gYW5kIEtKU19JTVBMRU1FTlRfUFJPVE9UWVBFIG1hY3JvcyBwcm9k
dWNlIC0gdGhlIGlkZWEgaXMgdGhhdCBjbGFzc2VzIGxpa2UgSlNFdmVudFRhcmdldE5vZGUKKyAg
ICAvLyBhbmQgSlNFdmVudFRhcmdldFNWR0VsZW1lbnRJbnN0YW5jZSBjYW4gc2hhcmUgYSBzaW5n
bGUgcHJvdG90eXBlIGp1c3QgZGlmZmVyaW5nIGluIHRoZQorICAgIC8vIG5hbWluZyAiRXZlbnRU
YXJnZXROb2RlUHJvdG90eXBlIiB2cyAiRXZlbnRUYXJnZXRTVkdFbGVtZW50SW5zdGFuY2VQcm90
b3R5cGUiLiBBYm92ZSBtZW50aW9uZWQKKyAgICAvLyBtYWNyb3MgZm9yY2UgdGhlIGV4aXN0YW5j
ZSBvZiBzZXZlcmFsIHByb3RvdHlwZSB0YWJsZXMgZm9yIGVhY2ggb2YgdGhlIGNsYXNzZXMgLSBh
dm9pZCB0aGF0LgorICAgIHRlbXBsYXRlPGNsYXNzIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVQYXJl
bnQ+CisgICAgY2xhc3MgSlNFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBLSlM6OkpTT2Jq
ZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRUYXJnZXRQcm90b3R5cGUoS0pTOjpF
eGVjU3RhdGUqIGV4ZWMpCisgICAgICAgICAgICA6IEtKUzo6SlNPYmplY3QoSlNFdmVudFRhcmdl
dFByb3RvdHlwZVBhcmVudDo6c2VsZihleGVjKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIEtKUzo6SlNPYmplY3QqIHNlbGYoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBLSlM6OklkZW50aWZpZXIqIHByb3RvdHlwZU5h
bWUgPSBuZXcgS0pTOjpJZGVudGlmaWVyKFN0cmluZzo6Zm9ybWF0KCJbWyVzLnByb3RvdHlwZV1d
Iiwgc19wcm90b3R5cGVOYW1lKS5sYXRpbjEoKS5kYXRhKCkpOworCisgICAgICAgICAgICBLSlM6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CisgICAgICAgICAgICBpZiAoS0pTOjpKU1ZhbHVlKiBvYmplY3RWYWx1ZSA9IGdsb2JhbE9i
amVjdC0+Z2V0RGlyZWN0KCpwcm90b3R5cGVOYW1lKSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VChvYmplY3RWYWx1ZS0+aXNPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEtKUzo6SlNPYmplY3QqPihvYmplY3RWYWx1ZSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEtKUzo6SlNPYmplY3QqIG5ld09iamVjdCA9IG5ldyBKU0V2ZW50VGFyZ2V0UHJv
dG90eXBlPEpTRXZlbnRUYXJnZXRQcm90b3R5cGVQYXJlbnQ+KGV4ZWMpOworICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LT5wdXQoZXhlYywgKnByb3RvdHlwZU5hbWUsIG5ld09iamVjdCwgS0pTOjpJ
bnRlcm5hbCB8IEtKUzo6RG9udEVudW0pOworICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0
YXRlKiBleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgS0pTOjpQcm9w
ZXJ0eVNsb3QmIHNsb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBLSlM6OmdldFN0
YXRpY0Z1bmN0aW9uU2xvdDxLSlM6OkpTT2JqZWN0PihleGVjLCAmS0pTOjpKU0V2ZW50VGFyZ2V0
UHJvdG90eXBlVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIH0KKwor
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gc19jbGFz
c0luZm8gPSB7IFN0cmluZzo6Zm9ybWF0KCIlc1Byb3RvdHlwZSIsIHNfcHJvdG90eXBlTmFtZSku
bGF0aW4xKCkuZGF0YSgpLCAwLCAmS0pTOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGUgfTsK
KyAgICAgICAgICAgIHJldHVybiAmc19jbGFzc0luZm87CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzX3Byb3RvdHlwZU5hbWU7CisgICAgfTsK
KworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEpTRXZlbnRUYXJnZXRCYXNl
X2gKSW5kZXg6IGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDI4NzI4KQorKysg
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcg
KzMwLDYgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5j
bHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRl
ICJFdmVudFRhcmdldE5vZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkpTRXZl
bnQuaCIKQEAgLTM4LDI4NiArMzcsNDUgQEAKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAjaW5j
bHVkZSAia2pzX3dpbmRvdy5oIgogCi0jaW5jbHVkZSAiSlNFdmVudFRhcmdldE5vZGUubHV0Lmgi
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKLXVzaW5nIG5h
bWVzcGFjZSBFdmVudE5hbWVzOwogCi0vKiBTb3VyY2UgZm9yIEpTRXZlbnRUYXJnZXROb2RlVGFi
bGUKLUBiZWdpbiBKU0V2ZW50VGFyZ2V0Tm9kZVRhYmxlIDUwCi1vbmFib3J0ICAgICAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkFib3J0ICAgICAgICAgICAgICAgIERvbnREZWxldGUK
LW9uYmx1ciAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQmx1ciAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQotb25jaGFuZ2UgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
Tm9kZTo6T25DaGFuZ2UgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmNsaWNrICAgICAgIFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkNsaWNrICAgICAgICAgICAgICAgIERvbnREZWxl
dGUKLW9uY29udGV4dG1lbnUgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQ29udGV4dE1l
bnUgICAgICAgICAgRG9udERlbGV0ZQotb25kYmxjbGljayAgICBXZWJDb3JlOjpKU0V2ZW50VGFy
Z2V0Tm9kZTo6T25EYmxDbGljayAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmJlZm9yZWN1dCAg
IFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkJlZm9yZUN1dCAgICAgICAgICAgIERvbnRE
ZWxldGUKLW9uY3V0ICAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQ3V0ICAg
ICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25iZWZvcmVjb3B5ICBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0Tm9kZTo6T25CZWZvcmVDb3B5ICAgICAgICAgICBEb250RGVsZXRlCi1vbmNvcHkgICAg
ICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkNvcHkgICAgICAgICAgICAgICAgIERv
bnREZWxldGUKLW9uYmVmb3JlcGFzdGUgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQmVm
b3JlUGFzdGUgICAgICAgICAgRG9udERlbGV0ZQotb25wYXN0ZSAgICAgICBXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0Tm9kZTo6T25QYXN0ZSAgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmRyYWcg
ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkRyYWcgICAgICAgICAgICAgICAg
IERvbnREZWxldGUKLW9uZHJhZ2VuZCAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9u
RHJhZ0VuZCAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25kcmFnZW50ZXIgICBXZWJDb3JlOjpK
U0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFnRW50ZXIgICAgICAgICAgICBEb250RGVsZXRlCi1vbmRy
YWdsZWF2ZSAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkRyYWdMZWF2ZSAgICAgICAg
ICAgIERvbnREZWxldGUKLW9uZHJhZ292ZXIgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6
Ok9uRHJhZ092ZXIgICAgICAgICAgICAgRG9udERlbGV0ZQotb25kcmFnc3RhcnQgICBXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFnU3RhcnQgICAgICAgICAgICBEb250RGVsZXRlCi1v
bmRyb3AgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkRyb3AgICAgICAgICAg
ICAgICAgIERvbnREZWxldGUKLW9uZXJyb3IgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5v
ZGU6Ok9uRXJyb3IgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25mb2N1cyAgICAgICBXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25Gb2N1cyAgICAgICAgICAgICAgICBEb250RGVsZXRl
Ci1vbmlucHV0ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbklucHV0ICAgICAg
ICAgICAgICAgIERvbnREZWxldGUKLW9ua2V5ZG93biAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdl
dE5vZGU6Ok9uS2V5RG93biAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25rZXlwcmVzcyAgICBX
ZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25LZXlQcmVzcyAgICAgICAgICAgICBEb250RGVs
ZXRlCi1vbmtleXVwICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbktleVVwICAg
ICAgICAgICAgICAgIERvbnREZWxldGUKLW9ubG9hZCAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRh
cmdldE5vZGU6Ok9uTG9hZCAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25tb3VzZWRvd24g
ICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25Nb3VzZURvd24gICAgICAgICAgICBEb250
RGVsZXRlCi1vbm1vdXNlbW92ZSAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbk1vdXNl
TW92ZSAgICAgICAgICAgIERvbnREZWxldGUKLW9ubW91c2VvdXQgICAgV2ViQ29yZTo6SlNFdmVu
dFRhcmdldE5vZGU6Ok9uTW91c2VPdXQgICAgICAgICAgICAgRG9udERlbGV0ZQotb25tb3VzZW92
ZXIgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25Nb3VzZU92ZXIgICAgICAgICAgICBE
b250RGVsZXRlCi1vbm1vdXNldXAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbk1v
dXNlVXAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9ubW91c2V3aGVlbCAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldE5vZGU6Ok9uTW91c2VXaGVlbCAgICAgICAgICAgRG9udERlbGV0ZQotb25yZXNl
dCAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25SZXNldCAgICAgICAgICAgICAg
ICBEb250RGVsZXRlCi1vbnJlc2l6ZSAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpP
blJlc2l6ZSAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uc2Nyb2xsICAgICAgV2ViQ29yZTo6
SlNFdmVudFRhcmdldE5vZGU6Ok9uU2Nyb2xsICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25z
ZWFyY2ggICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25TZWFyY2ggICAgICAgICAg
ICAgICBEb250RGVsZXRlCi1vbnNlbGVjdCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2Rl
OjpPblNlbGVjdCAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uc2VsZWN0c3RhcnQgV2ViQ29y
ZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uU2VsZWN0U3RhcnQgICAgICAgICAgRG9udERlbGV0ZQot
b25zdWJtaXQgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25TdWJtaXQgICAgICAg
ICAgICAgICBEb250RGVsZXRlCi1vbnVubG9hZCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRO
b2RlOjpPblVubG9hZCAgICAgICAgICAgICAgIERvbnREZWxldGUKLUBlbmQKLSovCisvLyBBc3Np
Z24gbmFtZSB0byBzaGFyZWQgcHJvdG90eXBlIG9iamVjdAordGVtcGxhdGU8PgorY29uc3QgY2hh
ciogSlNFdmVudFRhcmdldFByb3RvdHlwZTxKU05vZGVQcm90b3R5cGU+OjpzX3Byb3RvdHlwZU5h
bWUgPSAiRXZlbnRUYXJnZXROb2RlIjsKIAogSlNFdmVudFRhcmdldE5vZGU6OkpTRXZlbnRUYXJn
ZXROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbikKICAgICA6IEpTTm9kZShleGVjLCBuKQor
ICAgICwgbV9iYXNlKG5ldyBKU0V2ZW50VGFyZ2V0QmFzZTxKU0V2ZW50VGFyZ2V0Tm9kZT4odGhp
cywgJkpTRXZlbnRUYXJnZXROb2RlOjpnZXRMaXN0ZW5lciwgJkpTRXZlbnRUYXJnZXROb2RlOjpz
ZXRMaXN0ZW5lcikpCiB7CiAgICAgc2V0UHJvdG90eXBlKEpTRXZlbnRUYXJnZXROb2RlUHJvdG90
eXBlOjpzZWxmKGV4ZWMpKTsKIH0KIAorSlNFdmVudFRhcmdldE5vZGU6On5KU0V2ZW50VGFyZ2V0
Tm9kZSgpCit7CisgICAgZGVsZXRlIG1fYmFzZTsKKyAgICBtX2Jhc2UgPSAwOworfQorCiBib29s
IEpTRXZlbnRUYXJnZXROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAg
ICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTRXZlbnRUYXJnZXROb2RlLCBKU05vZGU+KGV4
ZWMsICZKU0V2ZW50VGFyZ2V0Tm9kZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
ICAgIHJldHVybiBtX2Jhc2UtPmdldE93blByb3BlcnR5U2xvdDxKU05vZGU+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKIEpTVmFsdWUqIEpTRXZlbnRUYXJnZXROb2RlOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBPbkFib3J0OgotICAgICAgICAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGFib3J0RXZlbnQpOwotICAgICAgICBjYXNlIE9uQmx1cjoKLSAgICAgICAgICAg
IHJldHVybiBnZXRMaXN0ZW5lcihibHVyRXZlbnQpOwotICAgICAgICBjYXNlIE9uQ2hhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGNoYW5nZUV2ZW50KTsKLSAgICAgICAgY2Fz
ZSBPbkNsaWNrOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGNsaWNrRXZlbnQpOwot
ICAgICAgICBjYXNlIE9uQ29udGV4dE1lbnU6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoY29udGV4dG1lbnVFdmVudCk7Ci0gICAgICAgIGNhc2UgT25EYmxDbGljazoKLSAgICAgICAg
ICAgIHJldHVybiBnZXRMaXN0ZW5lcihkYmxjbGlja0V2ZW50KTsKLSAgICAgICAgY2FzZSBPbkVy
cm9yOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGVycm9yRXZlbnQpOwotICAgICAg
ICBjYXNlIE9uRm9jdXM6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZm9jdXNFdmVu
dCk7Ci0gICAgICAgIGNhc2UgT25JbnB1dDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5l
cihpbnB1dEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbktleURvd246Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0TGlzdGVuZXIoa2V5ZG93bkV2ZW50KTsKLSAgICAgICAgY2FzZSBPbktleVByZXNzOgot
ICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGtleXByZXNzRXZlbnQpOwotICAgICAgICBj
YXNlIE9uS2V5VXA6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoa2V5dXBFdmVudCk7
Ci0gICAgICAgIGNhc2UgT25Mb2FkOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGxv
YWRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Nb3VzZURvd246Ci0gICAgICAgICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIobW91c2Vkb3duRXZlbnQpOwotICAgICAgICBjYXNlIE9uTW91c2VNb3ZlOgot
ICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKG1vdXNlbW92ZUV2ZW50KTsKLSAgICAgICAg
Y2FzZSBPbk1vdXNlT3V0OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKG1vdXNlb3V0
RXZlbnQpOwotICAgICAgICBjYXNlIE9uTW91c2VPdmVyOgotICAgICAgICAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKG1vdXNlb3ZlckV2ZW50KTsKLSAgICAgICAgY2FzZSBPbk1vdXNlVXA6Ci0gICAg
ICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIobW91c2V1cEV2ZW50KTsgICAgICAKLSAgICAgICAg
Y2FzZSBPbk1vdXNlV2hlZWw6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIobW91c2V3
aGVlbEV2ZW50KTsgICAgICAKLSAgICAgICAgY2FzZSBPbkJlZm9yZUN1dDoKLSAgICAgICAgICAg
IHJldHVybiBnZXRMaXN0ZW5lcihiZWZvcmVjdXRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25DdXQ6
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoY3V0RXZlbnQpOwotICAgICAgICBjYXNl
IE9uQmVmb3JlQ29weToKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihiZWZvcmVjb3B5
RXZlbnQpOwotICAgICAgICBjYXNlIE9uQ29weToKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0
ZW5lcihjb3B5RXZlbnQpOwotICAgICAgICBjYXNlIE9uQmVmb3JlUGFzdGU6Ci0gICAgICAgICAg
ICByZXR1cm4gZ2V0TGlzdGVuZXIoYmVmb3JlcGFzdGVFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Q
YXN0ZToKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihwYXN0ZUV2ZW50KTsKLSAgICAg
ICAgY2FzZSBPbkRyYWdFbnRlcjoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihkcmFn
ZW50ZXJFdmVudCk7Ci0gICAgICAgIGNhc2UgT25EcmFnT3ZlcjoKLSAgICAgICAgICAgIHJldHVy
biBnZXRMaXN0ZW5lcihkcmFnb3ZlckV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyYWdMZWF2ZToK
LSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihkcmFnbGVhdmVFdmVudCk7Ci0gICAgICAg
IGNhc2UgT25Ecm9wOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyb3BFdmVudCk7
Ci0gICAgICAgIGNhc2UgT25EcmFnU3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoZHJhZ3N0YXJ0RXZlbnQpOwotICAgICAgICBjYXNlIE9uRHJhZzoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihkcmFnRXZlbnQpOwotICAgICAgICBjYXNlIE9uRHJhZ0VuZDoKLSAg
ICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihkcmFnZW5kRXZlbnQpOwotICAgICAgICBjYXNl
IE9uUmVzZXQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIocmVzZXRFdmVudCk7Ci0g
ICAgICAgIGNhc2UgT25SZXNpemU6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIocmVz
aXplRXZlbnQpOwotICAgICAgICBjYXNlIE9uU2Nyb2xsOgotICAgICAgICAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKHNjcm9sbEV2ZW50KTsKLSAgICAgICAgY2FzZSBPblNlYXJjaDoKLSAgICAgICAg
ICAgIHJldHVybiBnZXRMaXN0ZW5lcihzZWFyY2hFdmVudCk7Ci0gICAgICAgIGNhc2UgT25TZWxl
Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoc2VsZWN0RXZlbnQpOwotICAgICAg
ICBjYXNlIE9uU2VsZWN0U3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoc2Vs
ZWN0c3RhcnRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25TdWJtaXQ6Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0TGlzdGVuZXIoc3VibWl0RXZlbnQpOwotICAgICAgICBjYXNlIE9uVW5sb2FkOgotICAg
ICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKHVubG9hZEV2ZW50KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gbV9iYXNlLT5nZXRWYWx1ZVByb3BlcnR5
KGV4ZWMsIHRva2VuKTsKIH0KIAogdm9pZCBKU0V2ZW50VGFyZ2V0Tm9kZTo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwg
aW50IGF0dHIpCiB7Ci0gICAgbG9va3VwUHV0PEpTRXZlbnRUYXJnZXROb2RlLCBKU05vZGU+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU0V2ZW50VGFyZ2V0Tm9kZVRhYmxlLCB0
aGlzKTsKKyAgICBtX2Jhc2UtPnB1dDxKU05vZGU+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IGF0dHIpOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IC8qYXR0ciovKQor
dm9pZCBKU0V2ZW50VGFyZ2V0Tm9kZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbiwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQogewotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgICAgY2FzZSBPbkFib3J0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhl
YywgYWJvcnRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25CbHVyOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmx1ckV2ZW50LCB2YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkNoYW5nZToKLSAgICAgICAgICAg
IHNldExpc3RlbmVyKGV4ZWMsIGNoYW5nZUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBPbkNsaWNrOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywg
Y2xpY2tFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25D
b250ZXh0TWVudToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGNvbnRleHRtZW51RXZl
bnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRGJsQ2xpY2s6
Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBkYmxjbGlja0V2ZW50LCB2YWx1ZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkVycm9yOgotICAgICAgICAgICAgc2V0
TGlzdGVuZXIoZXhlYywgZXJyb3JFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT25Gb2N1czoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGZvY3Vz
RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uSW5wdXQ6
Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBpbnB1dEV2ZW50LCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbktleURvd246Ci0gICAgICAgICAgICBzZXRM
aXN0ZW5lcihleGVjLCBrZXlkb3duRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE9uS2V5UHJlc3M6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBr
ZXlwcmVzc0V2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
bktleVVwOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywga2V5dXBFdmVudCwgdmFsdWUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Mb2FkOgotICAgICAgICAgICAg
c2V0TGlzdGVuZXIoZXhlYywgbG9hZEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBPbk1vdXNlRG93bjoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMs
IG1vdXNlZG93bkV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBPbk1vdXNlTW92ZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIG1vdXNlbW92ZUV2
ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlT3V0
OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgbW91c2VvdXRFdmVudCwgdmFsdWUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Nb3VzZU92ZXI6Ci0gICAgICAgICAg
ICBzZXRMaXN0ZW5lcihleGVjLCBtb3VzZW92ZXJFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgT25Nb3VzZVVwOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywgbW91c2V1cEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBPbk1vdXNlV2hlZWw6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBtb3VzZXdo
ZWVsRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uQmVm
b3JlQ3V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmVmb3JlY3V0RXZlbnQsIHZh
bHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uQ3V0OgotICAgICAgICAg
ICAgc2V0TGlzdGVuZXIoZXhlYywgY3V0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE9uQmVmb3JlQ29weToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4
ZWMsIGJlZm9yZWNvcHlFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgT25Db3B5OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgY29weUV2ZW50LCB2
YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkJlZm9yZVBhc3RlOgot
ICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmVmb3JlcGFzdGVFdmVudCwgdmFsdWUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25QYXN0ZToKLSAgICAgICAgICAgIHNl
dExpc3RlbmVyKGV4ZWMsIHBhc3RlRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE9uRHJhZ0VudGVyOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywg
ZHJhZ2VudGVyRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE9uRHJhZ092ZXI6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBkcmFnb3ZlckV2ZW50
LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkRyYWdMZWF2ZToK
LSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGRyYWdsZWF2ZUV2ZW50LCB2YWx1ZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkRyb3A6Ci0gICAgICAgICAgICBzZXRM
aXN0ZW5lcihleGVjLCBkcm9wRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE9uRHJhZ1N0YXJ0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZHJh
Z3N0YXJ0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9u
RHJhZzoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGRyYWdFdmVudCwgdmFsdWUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25EcmFnRW5kOgotICAgICAgICAgICAg
c2V0TGlzdGVuZXIoZXhlYywgZHJhZ2VuZEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBPblJlc2V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywg
cmVzZXRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25S
ZXNpemU6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCByZXNpemVFdmVudCwgdmFsdWUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25TY3JvbGw6Ci0gICAgICAgICAg
ICBzZXRMaXN0ZW5lcihleGVjLCBzY3JvbGxFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgT25TZWFyY2g6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVj
LCBzZWFyY2hFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25TZWxlY3Q6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBzZWxlY3RFdmVudCwgdmFs
dWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25TZWxlY3RTdGFydDoKLSAg
ICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHNlbGVjdHN0YXJ0RXZlbnQsIHZhbHVlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uU3VibWl0OgotICAgICAgICAgICAgc2V0
TGlzdGVuZXIoZXhlYywgc3VibWl0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE9uVW5sb2FkOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgdW5s
b2FkRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBtX2Jhc2Ut
PnB1dFZhbHVlUHJvcGVydHkoZXhlYywgdG9rZW4sIHZhbHVlLCBhdHRyKTsKIH0KIAogdm9pZCBK
U0V2ZW50VGFyZ2V0Tm9kZTo6c2V0TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBdG9t
aWNTdHJpbmcgJmV2ZW50VHlwZSwgSlNWYWx1ZSogZnVuYykgY29uc3QKQEAgLTM0MSw2MiArOTks
NiBAQCB2b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpwdXNoRXZlbnRIYW5kbGVyCiB7CiB9CiAKLS8q
Ci1AYmVnaW4gSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVUYWJsZSA1Ci0jIGZyb20gdGhlIEV2
ZW50VGFyZ2V0IGludGVyZmFjZQotYWRkRXZlbnRMaXN0ZW5lciAgICAgICAgJldlYkNvcmU6OkpT
RXZlbnRUYXJnZXROb2RlUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyOjpjcmVhdGUg
ICAgRG9udERlbGV0ZXxGdW5jdGlvbiAzCi1yZW1vdmVFdmVudExpc3RlbmVyICAgICAmV2ViQ29y
ZTo6SlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXI6
OmNyZWF0ZSBEb250RGVsZXRlfEZ1bmN0aW9uIDMKLWRpc3BhdGNoRXZlbnQgICAgICAgICAgICZX
ZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudDo6
Y3JlYXRlICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotQGVuZAotKi8KLQotS0pTX0lNUExF
TUVOVF9QUk9UT1RZUEUoIkV2ZW50VGFyZ2V0Tm9kZSIsIEpTRXZlbnRUYXJnZXROb2RlUHJvdG90
eXBlKQotCi1KU1ZhbHVlKiBKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uQWRkRXZl
bnRMaXN0ZW5lcjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZK
U0V2ZW50VGFyZ2V0Tm9kZTo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7Ci0gICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7
Ci0gICAgSlNFdmVudFRhcmdldE5vZGUqIGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTRXZlbnRUYXJn
ZXROb2RlKj4odGhpc09iaik7Ci0gICAgRXZlbnRUYXJnZXROb2RlKiBub2RlID0gc3RhdGljX2Nh
c3Q8RXZlbnRUYXJnZXROb2RlKj4oanNOb2RlLT5pbXBsKCkpOwotCi0gICAgRnJhbWUqIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gS0pT
OjpXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3Rl
bmVyKGFyZ3NbMV0pOwotICAgIGlmIChsaXN0ZW5lcikKLSAgICAgICAgbm9kZS0+YWRkRXZlbnRM
aXN0ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsYXJnc1syXS0+dG9Cb29s
ZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNF
dmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXI6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
IGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNFdmVudFRhcmdldE5vZGU6
OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAg
IERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICAgIEpTRXZlbnRUYXJn
ZXROb2RlKiBqc05vZGUgPSBzdGF0aWNfY2FzdDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KHRoaXNPYmop
OwotICAgIEV2ZW50VGFyZ2V0Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9k
ZSo+KGpzTm9kZS0+aW1wbCgpKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IEtKUzo6V2luZG93OjpyZXRyaWV2
ZVdpbmRvdyhmcmFtZSktPmZpbmRKU0V2ZW50TGlzdGVuZXIoYXJnc1sxXSk7Ci0gICAgaWYgKGxp
c3RlbmVyKSAKLSAgICAgICAgbm9kZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0
cmluZyhleGVjKSwgbGlzdGVuZXIsYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGVQcm90b3R5
cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQ6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2Jq
LT5pbmhlcml0cygmSlNFdmVudFRhcmdldE5vZGU6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhj
ZXB0aW9uKGV4ZWMpOwotICAgIEpTRXZlbnRUYXJnZXROb2RlKiBqc05vZGUgPSBzdGF0aWNfY2Fz
dDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KHRoaXNPYmopOwotICAgIEV2ZW50VGFyZ2V0Tm9kZSogbm9k
ZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGpzTm9kZS0+aW1wbCgpKTsKLSAgICAK
LSAgICByZXR1cm4ganNCb29sZWFuKG5vZGUtPmRpc3BhdGNoRXZlbnQodG9FdmVudChhcmdzWzBd
KSwgZXhjZXB0aW9uKSk7Ci19Ci0KIEV2ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUo
SlNWYWx1ZSogdmFsKQogewogICAgIGlmICghdmFsIHx8ICF2YWwtPmlzT2JqZWN0KCZKU0V2ZW50
VGFyZ2V0Tm9kZTo6aW5mbykpCkluZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmgJKHJldmlzaW9u
IDI4NzI4KQorKysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEpTRXZlbnRUYXJnZXROb2RlX2gKIAogI2luY2x1
ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXRCYXNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMzUsNyArMzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBKU0V2ZW50VGFyZ2V0Tm9kZSA6IHB1YmxpYyBKU05vZGUgewogICAgIHB1YmxpYzoK
LSAgICAgICAgSlNFdmVudFRhcmdldE5vZGUoS0pTOjpFeGVjU3RhdGUqLCBOb2RlKiBuKTsKKyAg
ICAgICAgSlNFdmVudFRhcmdldE5vZGUoS0pTOjpFeGVjU3RhdGUqLCBOb2RlKik7CisgICAgICAg
IHZpcnR1YWwgfkpTRXZlbnRUYXJnZXROb2RlKCk7CiAKICAgICAgICAgdm9pZCBzZXRMaXN0ZW5l
cihLSlM6OkV4ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBLSlM6OkpT
VmFsdWUqIGZ1bmMpIGNvbnN0OwogICAgICAgICBLSlM6OkpTVmFsdWUqIGdldExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKQEAgLTQ2LDI5ICs0OCwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3Rh
dGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OkpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0
cik7CiAgICAgICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0
b2tlbiwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpOwogCi0gICAgICAgIGVudW0geyAg
Ci0gICAgICAgICAgICBBZGRFdmVudExpc3RlbmVyLCBSZW1vdmVFdmVudExpc3RlbmVyLCBEaXNw
YXRjaEV2ZW50LAotICAgICAgICAgICAgT25BYm9ydCwgT25CbHVyLCBPbkNoYW5nZSwgT25DbGlj
aywgT25Db250ZXh0TWVudSwgT25EYmxDbGljaywgT25FcnJvciwKLSAgICAgICAgICAgIE9uRHJh
Z0VudGVyLCBPbkRyYWdPdmVyLCBPbkRyYWdMZWF2ZSwgT25Ecm9wLCBPbkRyYWdTdGFydCwgT25E
cmFnLCBPbkRyYWdFbmQsCi0gICAgICAgICAgICBPbkJlZm9yZUN1dCwgT25DdXQsIE9uQmVmb3Jl
Q29weSwgT25Db3B5LCBPbkJlZm9yZVBhc3RlLCBPblBhc3RlLCBPblNlbGVjdFN0YXJ0LAotICAg
ICAgICAgICAgT25Gb2N1cywgT25JbnB1dCwgT25LZXlEb3duLCBPbktleVByZXNzLCBPbktleVVw
LCBPbkxvYWQsIE9uTW91c2VEb3duLAotICAgICAgICAgICAgT25Nb3VzZU1vdmUsIE9uTW91c2VP
dXQsIE9uTW91c2VPdmVyLCBPbk1vdXNlVXAsIE9uTW91c2VXaGVlbCwgT25SZXNldCwKLSAgICAg
ICAgICAgIE9uUmVzaXplLCBPblNjcm9sbCwgT25TZWFyY2gsIE9uU2VsZWN0LCBPblN1Ym1pdCwg
T25VbmxvYWQKLSAgICAgICAgfTsKKyAgICBwcml2YXRlOgorICAgICAgICBKU0V2ZW50VGFyZ2V0
QmFzZTxKU0V2ZW50VGFyZ2V0Tm9kZT4qIG1fYmFzZTsKICAgICB9OwogCisgICAgdHlwZWRlZiBK
U0V2ZW50VGFyZ2V0UHJvdG90eXBlPEpTTm9kZVByb3RvdHlwZT4gSlNFdmVudFRhcmdldE5vZGVQ
cm90b3R5cGU7CiAgICAgRXZlbnRUYXJnZXROb2RlKiB0b0V2ZW50VGFyZ2V0Tm9kZShLSlM6OkpT
VmFsdWUqKTsKIAotICAgIEtKU19ERUZJTkVfUFJPVE9UWVBFX1dJVEhfUFJPVE9UWVBFKEpTRXZl
bnRUYXJnZXROb2RlUHJvdG90eXBlLCBKU05vZGVQcm90b3R5cGUpCi0KLSNkZWZpbmUgRk9SX0VB
Q0hfQ0xBU1MobWFjcm8pIFwKLSAgICBtYWNybyhKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcikgXAotICAgIG1hY3JvKEpTRXZlbnRUYXJnZXROb2RlUHJv
dG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKSBcCi0gICAgbWFjcm8oSlNFdmVudFRh
cmdldE5vZGVQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQpIFwKLQotRk9SX0VBQ0hfQ0xB
U1MoS0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT05fV0lUSF9DUkVBVEUpCi0jdW5kZWYg
Rk9SX0VBQ0hfQ0xBU1MKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gSlNF
dmVudFRhcmdldE5vZGVfaApJbmRleDogZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyODcyOCkKKysrIGRvbS9FdmVudFRhcmdl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCiAgKgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzMwLDI1IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKIAorI2luY2x1ZGUgIk5vZGUuaCIKKyNp
bmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZl
bnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
a2pzX3Byb3h5LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKKworI2lmbmRl
ZiBOREVCVUcKK3N0YXRpYyBpbnQgZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPSAwOworI2VuZGlm
CisKIEV2ZW50VGFyZ2V0Ojp+RXZlbnRUYXJnZXQoKQogewogfQpAQCAtNTIsNCArNzAsMjY5IEBA
IFNWR0VsZW1lbnRJbnN0YW5jZSogRXZlbnRUYXJnZXQ6OnRvU1ZHRWwKIH0KICNlbmRpZgogCit2
b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJl
bmNlTm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZiAoIXJlZmVyZW5j
ZU5vZGUgfHwgIXJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPmF0dGFjaGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIERvY3VtZW50OjpMaXN0ZW5lclR5cGUgdHlwZSA9IHN0YXRpY19jYXN0
PERvY3VtZW50OjpMaXN0ZW5lclR5cGU+KDApOworICAgIGlmIChldmVudFR5cGUgPT0gRE9NU3Vi
dHJlZU1vZGlmaWVkRXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NU1VCVFJFRU1P
RElGSUVEX0xJU1RFTkVSOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01Ob2RlSW5zZXJ0
ZWRFdmVudCkKKyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01OT0RFSU5TRVJURURfTElTVEVO
RVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVSZW1vdmVkRXZlbnQpCisgICAg
ICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVI7CisgICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50RXZlbnQpCisgICAgICAg
IHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURGUk9NRE9DVU1FTlRfTElTVEVORVI7Cisg
ICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50
KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9M
SVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NQXR0ck1vZGlmaWVkRXZlbnQp
CisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NQVRUUk1PRElGSUVEX0xJU1RFTkVSOworICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCkKKyAg
ICAgICAgdHlwZSA9IERvY3VtZW50OjpET01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElTVEVORVI7
CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IG92ZXJmbG93Y2hhbmdlZEV2ZW50KQorICAgICAg
ICB0eXBlID0gRG9jdW1lbnQ6Ok9WRVJGTE9XQ0hBTkdFRF9MSVNURU5FUjsKKworICAgIGlmICh0
eXBlKQorICAgICAgICByZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT5hZGRMaXN0ZW5lclR5cGUo
dHlwZSk7CisKKyAgICBpZiAoIXJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycykKKyAgICAg
ICAgcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzID0gbmV3IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyTGlzdDsKKworICAgIC8vIFJlbW92ZSBleGlzdGluZyBpZGVudGljYWwgZXIgc2V0IHdp
dGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KKyAgICAvLyBUaGUgRE9NMiBzcGVjIHNheXMgdGhhdCAi
ZHVwbGljYXRlIGluc3RhbmNlcyBhcmUgZGlzY2FyZGVkIiBpbiB0aGlzIGNhc2UuCisgICAgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihyZWZlcmVuY2VOb2RlLCBldmVudFR5cGUsIGxpc3RlbmVyLmdldCgp
LCB1c2VDYXB0dXJlKTsKKworICAgIC8vIGFkZGluZyB0aGUgZmlyc3Qgb25lCisgICAgaWYgKHJl
ZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpICYmICFyZWZlcmVuY2VOb2Rl
LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPnJlZ2lz
dGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyhyZWZlcmVuY2VOb2RlKTsKKwor
ICAgIHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+YXBwZW5kKG5ldyBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKSk7Cit9
CisKK3ZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXROb2Rl
KiByZWZlcmVuY2VOb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZiAoIXJlZmVyZW5jZU5v
ZGUgfHwgIXJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmwoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSk7CisKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGVu
ZCA9IHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+ZW5kKCk7CisgICAgZm9yIChSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGl0ID0gcmVmZXJlbmNlTm9kZS0+bV9y
ZWdkTGlzdGVuZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgIGlmICgq
KCppdCkuZ2V0KCkgPT0gcmwpIHsKKyAgICAgICAgICAgICgqaXQpLT5zZXRSZW1vdmVkKHRydWUp
OworICAgICAgICAgICAgaXQgPSByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPnJlbW92
ZShpdCk7CisKKyAgICAgICAgICAgIC8vIHJlbW92ZWQgbGFzdAorICAgICAgICAgICAgaWYgKHJl
ZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpICYmICFyZWZlcmVuY2VOb2Rl
LT5pbkRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS0+ZG9jdW1lbnQo
KS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNl
Tm9kZSk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoRXZlbnRUYXJnZXROb2RlKiByZWZl
cmVuY2VOb2RlLCBQYXNzUmVmUHRyPEV2ZW50PiBlLCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1w
RXZlbnQpCit7CisgICAgUmVmUHRyPEV2ZW50PiBldnQoZSk7CisKKyAgICBBU1NFUlQoIWV2ZW50
RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisgICAgQVNTRVJUKGV2dC0+dGFyZ2V0KCkpOworICAgIEFT
U0VSVCghZXZ0LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNvZGUgY291bGQgY3Jl
YXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZQorCisgICAgLy8gd29yayBvdXQgd2hhdCBu
b2RlcyB0byBzZW5kIGV2ZW50IHRvCisgICAgRGVwcmVjYXRlZFB0ckxpc3Q8Tm9kZT4gbm9kZUNo
YWluOworCisgICAgaWYgKHJlZmVyZW5jZU5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBm
b3IgKE5vZGUqIG4gPSByZWZlcmVuY2VOb2RlOyBuOyBuID0gbi0+ZXZlbnRQYXJlbnROb2RlKCkp
IHsKKyAgICAgICAgICAgIG4tPnJlZigpOworICAgICAgICAgICAgbm9kZUNoYWluLnByZXBlbmQo
bik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBpZiBub2RlIGlzIG5vdCBp
biB0aGUgZG9jdW1lbnQganVzdCBzZW5kIGV2ZW50IHRvIGl0c2VsZiAKKyAgICAgICAgcmVmZXJl
bmNlTm9kZS0+cmVmKCk7CisgICAgICAgIG5vZGVDaGFpbi5wcmVwZW5kKHJlZmVyZW5jZU5vZGUp
OworICAgIH0KKworICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Tm9kZT4gaXQobm9kZUNo
YWluKTsKKworICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBkaXNwYXRjaGluZyBldmVudHMsIGdpdmUg
dGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlvcgorICAgIC8vIHRv
IHRoZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0dGluZyBhIGNyYWNrLgorICAgIHZvaWQqIGRhdGEg
PSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOworCisgICAgLy8gdHJpZ2dlciBh
bnkgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzIG9uIG91ciB3YXkgZG93bgorICAgIGV2dC0+c2V0
RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICBpdC50b0ZpcnN0KCk7CisK
KyAgICAvLyBIYW5kbGUgd2luZG93IGV2ZW50cyBmb3IgY2FwdHVyZSBwaGFzZSwgZXhjZXB0IGxv
YWQgZXZlbnRzLCB0aGlzIHF1aXJrIGlzIG5lZWRlZAorICAgIC8vIGJlY2F1c2UgTW96aWxsYSB1
c2VkIHRvIG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyB0byB0aGUgd2luZG93IG9iamVjdAor
ICAgIGlmIChldnQtPnR5cGUoKSAhPSBsb2FkRXZlbnQgJiYgaXQuY3VycmVudCgpLT5pc0RvY3Vt
ZW50Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAgICAgICBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KGl0LmN1cnJlbnQoKSktPmhhbmRsZVdpbmRvd0V2ZW50KGV2dC5nZXQo
KSwgdHJ1ZSk7CisKKyAgICBFdmVudFRhcmdldE5vZGUqIGV2ZW50VGFyZ2V0Tm9kZSA9IDA7Cisg
ICAgZm9yICg7IGl0LmN1cnJlbnQoKSAmJiBpdC5jdXJyZW50KCkgIT0gcmVmZXJlbmNlTm9kZSAm
JiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKTsgKytpdCkgeworICAgICAgICBldmVudFRhcmdl
dE5vZGUgPSBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSk7CisKKyNpZiBFTkFCTEUo
U1ZHKQorICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoYXBwbHlTVkdFdmVudFRhcmdldFJ1
bGVzKGV2ZW50VGFyZ2V0Tm9kZSwgZXZ0LmdldCgpKSk7CisjZWxzZQorICAgICAgICBldnQtPnNl
dEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXROb2RlKTsKKyNlbmRpZgorCisgICAgICAgIGV2ZW50
VGFyZ2V0Tm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCB0cnVlKTsKKyAgICB9CisK
KyAgICAvLyBkaXNwYXRjaCB0byB0aGUgYWN0dWFsIHRhcmdldCBub2RlCisgICAgaXQudG9MYXN0
KCk7CisKKyAgICBpZiAoIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpIHsKKyAgICAgICAgZXZ0
LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgICAgICBldmVudFRhcmdldE5v
ZGUgPSBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSk7CisKKyNpZiBFTkFCTEUoU1ZH
KQorICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoYXBwbHlTVkdFdmVudFRhcmdldFJ1bGVz
KGV2ZW50VGFyZ2V0Tm9kZSwgZXZ0LmdldCgpKSk7CisjZWxzZQorICAgICAgICBldnQtPnNldEN1
cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXROb2RlKTsKKyNlbmRpZgorCisgICAgICAgIC8vIFdlIGRv
IHdhbnQgY2FwdHVyaW5nIGV2ZW50IGVycyB0byBiZSBpbnZva2VkIGhlcmUsIGV2ZW4gdGhvdWdo
CisgICAgICAgIC8vIHRoYXQgdmlvbGF0ZXMgdGhlIHNwZWNpZmljYXRpb24gc2luY2UgTW96aWxs
YSBkb2VzIGl0LgorICAgICAgICBldmVudFRhcmdldE5vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2
dC5nZXQoKSwgdHJ1ZSk7CisKKyAgICAgICAgZXZlbnRUYXJnZXROb2RlLT5oYW5kbGVMb2NhbEV2
ZW50cyhldnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9CisKKyAgICAtLWl0OworCisgICAgLy8gb2ss
IG5vdyBidWJibGUgdXAgYWdhaW4gKG9ubHkgbm9uLWNhcHR1cmluZyBldmVudCBoYW5kbGVycyB3
aWxsIGJlIGNhbGxlZCkKKyAgICAvLyAjIyMgcmVjYWxjdWxhdGUgdGhlIG5vZGUgY2hhaW4gaGVy
ZT8gKGUuZy4gaWYgdGFyZ2V0IG5vZGUgbW92ZWQgaW4gZG9jdW1lbnQgYnkgcHJldmlvdXMgZXZl
bnQgaGFuZGxlcnMpCisgICAgLy8gbm8uIHRoZSBET00gc3BlY3Mgc2F5czoKKyAgICAvLyBUaGUg
Y2hhaW4gb2YgRXZlbnRUYXJnZXRzIGZyb20gdGhlIGV2ZW50IHRhcmdldCB0byB0aGUgdG9wIG9m
IHRoZSB0cmVlCisgICAgLy8gaXMgZGV0ZXJtaW5lZCBiZWZvcmUgdGhlIGluaXRpYWwgZGlzcGF0
Y2ggb2YgdGhlIGV2ZW50LgorICAgIC8vIElmIG1vZGlmaWNhdGlvbnMgb2NjdXIgdG8gdGhlIHRy
ZWUgZHVyaW5nIGV2ZW50IHByb2Nlc3NpbmcsCisgICAgLy8gZXZlbnQgZmxvdyB3aWxsIHByb2Nl
ZWQgYmFzZWQgb24gdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRyZWUuCisgICAgLy8KKyAgICAv
LyBzaW5jZSB0aGUgaW5pdGlhbCBkaXNwYXRjaCBpcyBiZWZvcmUgdGhlIGNhcHR1cmluZyBwaGFz
ZSwKKyAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIG5vZGUgY2hhaW4u
CisgICAgLy8gKHRvYmlhcykKKworICAgIGlmIChldnQtPmJ1YmJsZXMoKSkgeworICAgICAgICBl
dnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKworICAgICAgICBmb3Ig
KDsgaXQuY3VycmVudCgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldnQtPmNh
bmNlbEJ1YmJsZSgpOyAtLWl0KSB7CisgICAgICAgICAgICBldmVudFRhcmdldE5vZGUgPSBFdmVu
dFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSk7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAg
ICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGFwcGx5U1ZHRXZlbnRUYXJnZXRSdWxlcyhldmVu
dFRhcmdldE5vZGUsIGV2dC5nZXQoKSkpOworI2Vsc2UKKyAgICAgICAgICAgIGV2dC0+c2V0Q3Vy
cmVudFRhcmdldChldmVudFRhcmdldE5vZGUpOworI2VuZGlmCisKKyAgICAgICAgICAgIGV2ZW50
VGFyZ2V0Tm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgICBpdC50b0ZpcnN0KCk7CisKKyAgICAgICAgLy8gSGFuZGxlIHdpbmRvdyBl
dmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNlLCBleGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsg
aXMgbmVlZGVkCisgICAgICAgIC8vIGJlY2F1c2UgTW96aWxsYSB1c2VkIHRvIG5ldmVyIHByb3Bh
Z2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwKKyAgICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGxvYWRF
dmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9jdW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRp
b25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2VsQnViYmxlKCkpIHsKKyAgICAgICAgICAgIGV2dC0+
c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkpOworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVXaW5k
b3dFdmVudChldnQuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICBldnQt
PnNldEN1cnJlbnRUYXJnZXQoMCk7CisgICAgZXZ0LT5zZXRFdmVudFBoYXNlKDApOyAvLyBJIGd1
ZXNzIHRoaXMgaXMgY29ycmVjdCwgdGhlIHNwZWMgZG9lcyBub3Qgc2VlbSB0byBzYXkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFueXRoaW5nIGFib3V0IHRoZSBkZWZhdWx0IGV2ZW50
IGhhbmRsZXIgcGhhc2UuCisKKworICAgIC8vIE5vdyBjYWxsIHRoZSBwb3N0IGRpc3BhdGNoLgor
ICAgIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCksIGRhdGEpOworCisgICAgLy8g
bm93IHdlIGNhbGwgYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgKHRoaXMgaXMgbm90IHBhcnQg
b2YgRE9NIC0gaXQgaXMgaW50ZXJuYWwgdG8ga2h0bWwpCisgICAgaXQudG9MYXN0KCk7CisKKyAg
ICBpZiAoZXZ0LT5idWJibGVzKCkpCisgICAgICAgIGZvciAoOyBpdC5jdXJyZW50KCkgJiYgIWV2
dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldnQtPmRlZmF1bHRIYW5kbGVkKCk7IC0taXQpCisg
ICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSktPmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZ0LmdldCgpKTsKKyAgICBlbHNlIGlmICghZXZ0LT5kZWZhdWx0UHJldmVudGVk
KCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2Fz
dChpdC5jdXJyZW50KCkpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dC5nZXQoKSk7CisKKyAgICAv
LyBkZXJlZiBhbGwgbm9kZXMgaW4gY2hhaW4KKyAgICBpdC50b0ZpcnN0KCk7CisgICAgZm9yICg7
IGl0LmN1cnJlbnQoKTsgKytpdCkKKyAgICAgICAgaXQuY3VycmVudCgpLT5kZXJlZigpOyAvLyB0
aGlzIG1heSBkZWxldGUgdXMKKworICAgIERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJp
bmcoKTsKKworICAgIC8vIElmIHRlbXBFdmVudCBpcyB0cnVlLCB0aGlzIG1lYW5zIHRoYXQgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbgorICAgIC8vIHdpbGwgbm90IGJlIHN0b3JpbmcgYSByZWZlcmVu
Y2UgdG8gdGhlIGV2ZW50LCBpLmUuICB0aGVyZSBpcyBubworICAgIC8vIHdheSB0byByZXRyaWV2
ZSBpdCBmcm9tIGphdmFzY3JpcHQgaWYgYSBzY3JpcHQgZG9lcyBub3QgYWxyZWFkeQorICAgIC8v
IGhhdmUgYSByZWZlcmVuY2UgdG8gaXQgaW4gYSB2YXJpYWJsZS4gIFNvIHRoZXJlIGlzIG5vIG5l
ZWQgZm9yCisgICAgLy8gdGhlIGludGVycHJldGVyIHRvIGtlZXAgdGhlIGV2ZW50IGluIGl0J3Mg
Y2FjaGUKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgIGlmICh0ZW1wRXZlbnQgJiYgZnJhbWUgJiYgZnJhbWUtPnNjcmlwdFByb3h5KCkp
CisgICAgICAgIGZyYW1lLT5zY3JpcHRQcm94eSgpLT5maW5pc2hlZFdpdGhFdmVudChldnQuZ2V0
KCkpOworCisgICAgcmV0dXJuICFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsgLy8gIyMjIHdoYXQg
aWYgZGVmYXVsdFByZXZlbnRlZCB3YXMgY2FsbGVkIGJlZm9yZSBkaXNwYXRjaEV2ZW50PworfQor
Cit2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyhFdmVudFRhcmdldE5v
ZGUqIHJlZmVyZW5jZU5vZGUpCit7CisgICAgZGVsZXRlIHJlZmVyZW5jZU5vZGUtPm1fcmVnZExp
c3RlbmVyczsKKyAgICByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMgPSAwOworfQorCit2
b2lkIEV2ZW50VGFyZ2V0OjppbnNlcnRlZEludG9Eb2N1bWVudChFdmVudFRhcmdldE5vZGUqIHJl
ZmVyZW5jZU5vZGUpCit7CisgICAgaWYgKHJlZmVyZW5jZU5vZGUgJiYgcmVmZXJlbmNlTm9kZS0+
bV9yZWdkTGlzdGVuZXJzICYmICFyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPmlzRW1w
dHkoKSkKKyAgICAgICAgcmVmZXJlbmNlTm9kZS0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nv
bm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlTm9kZSk7Cit9CisKK3ZvaWQg
RXZlbnRUYXJnZXQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVu
Y2VOb2RlKQoreworICAgIGlmIChyZWZlcmVuY2VOb2RlICYmIHJlZmVyZW5jZU5vZGUtPm1fcmVn
ZExpc3RlbmVycyAmJiAhcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkp
CisgICAgICAgIHJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPnJlZ2lzdGVyRGlzY29ubmVjdGVk
Tm9kZVdpdGhFdmVudExpc3RlbmVycyhyZWZlcmVuY2VOb2RlKTsKK30KKwordm9pZCBFdmVudFRh
cmdldDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBF
dmVudCogZXZ0LCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFyZWZlcmVuY2VOb2RlIHx8
ICFyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMgfHwgcmVmZXJlbmNlTm9kZS0+bV9yZWdk
TGlzdGVuZXJzLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyTGlzdCBsaXN0ZW5lcnNDb3B5ID0gKnJlZmVyZW5jZU5vZGUtPm1fcmVnZExp
c3RlbmVyczsKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGVuZCA9
IGxpc3RlbmVyc0NvcHkuZW5kKCk7CisKKyAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
TGlzdDo6SXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2dC0+dHlwZSgpICYmICgq
aXQpLT51c2VDYXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSAmJiAhKCppdCktPnJlbW92ZWQoKSkKKyAg
ICAgICAgICAgICgqaXQpLT5saXN0ZW5lcigpLT5oYW5kbGVFdmVudChldnQsIGZhbHNlKTsKKyAg
ICB9Cit9CisKKyNpZiBFTkFCTEUoU1ZHKQorRXZlbnRUYXJnZXQqIEV2ZW50VGFyZ2V0OjphcHBs
eVNWR0V2ZW50VGFyZ2V0UnVsZXMoRXZlbnRUYXJnZXROb2RlKiYgcmVmZXJlbmNlTm9kZSwgRXZl
bnQqKSBjb25zdAoreworICAgIC8vIFRPRE86IEEgZm9sbG93LXVwIHBhdGNoIHdpbGwgbmVlZCB0
aGlzIGZ1bmN0aW9uLgorICAgIHJldHVybiByZWZlcmVuY2VOb2RlOworfQorI2VuZGlmCisKKyNp
Zm5kZWYgTkRFQlVHCit2b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKQoreworICAgICsrZ0V2ZW50
RGlzcGF0Y2hGb3JiaWRkZW47Cit9CisKK3ZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCkKK3sKKyAg
ICBpZiAoZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPiAwKQorICAgICAgICAtLWdFdmVudERpc3Bh
dGNoRm9yYmlkZGVuOworfQorCitib29sIGV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKQoreworICAg
IHJldHVybiBnRXZlbnREaXNwYXRjaEZvcmJpZGRlbiA+IDA7Cit9CisjZW5kaWYgLy8gTkRFQlVH
CisKIH0gLy8gZW5kIG5hbWVzcGFjZQpJbmRleDogZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI4NzI4KQorKysgZG9tL0V2ZW50VGFy
Z2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCiAgKgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDExICszOCwxNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgICBj
bGFzcyBFdmVudFRhcmdldE5vZGU7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7CiAgICAgY2xh
c3MgWE1MSHR0cFJlcXVlc3Q7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdDsKKyAgICB0
eXBlZGVmIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8UmVmUHRyPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
PiA+IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDsKKwogICAgIGNsYXNzIEV2ZW50VGFyZ2V0
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXROb2RlKiB0b05vZGUo
KTsKQEAgLTU0LDE3ICs2MCw1MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpID0gMDsKICAgICAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpID0gMDsKICAgICAgICAgdmly
dHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUm
LCBib29sIHRlbXBFdmVudCA9IGZhbHNlKSA9IDA7Ci0gICAgCisKICAgICAgICAgdm9pZCByZWYo
KSB7IHJlZkV2ZW50VGFyZ2V0KCk7IH0KICAgICAgICAgdm9pZCBkZXJlZigpIHsgZGVyZWZFdmVu
dFRhcmdldCgpOyB9CiAKKyAgICAgICAgLy8gSGFuZGxlcnMgdG8gZG8vdW5kbyBhY3Rpb25zIG9u
IHRoZSB0YXJnZXQgbm9kZSBiZWZvcmUgYW4gZXZlbnQgaXMgZGlzcGF0Y2hlZCB0byBpdCBhbmQg
YWZ0ZXIgdGhlIGV2ZW50CisgICAgICAgIC8vIGhhcyBiZWVuIGRpc3BhdGNoZWQuICBUaGUgZGF0
YSBwb2ludGVyIGlzIGhhbmRlZCBiYWNrIGJ5IHRoZSBwcmVEaXNwYXRjaCBhbmQgcGFzc2VkIHRv
IHBvc3REaXNwYXRjaC4KKyAgICAgICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFu
ZGxlcihFdmVudCopIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3REaXNw
YXRjaEV2ZW50SGFuZGxlcihFdmVudCosIHZvaWQqIGRhdGFGcm9tUHJlRGlzcGF0Y2gpIHsgfQor
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIH5FdmVudFRhcmdldCgpOwogCisgICAg
ICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
LCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoRXZl
bnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CisKKyAgICAgICAgYm9vbCBkaXNw
YXRjaEdlbmVyaWNFdmVudChFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUsIFBhc3NSZWZQ
dHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCk7CisgICAgICAgIHZv
aWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2Rl
KTsKKworICAgICAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KEV2ZW50VGFyZ2V0Tm9kZSog
cmVmZXJlbmNlTm9kZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudChFdmVudFRh
cmdldE5vZGUqIHJlZmVyZW5jZU5vZGUpOworCisgICAgICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBFdmVudCogZXZ0LCBib29sIHVzZUNh
cHR1cmUpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgRXZlbnRUYXJnZXQqIGFwcGx5U1ZH
RXZlbnRUYXJnZXRSdWxlcyhFdmVudFRhcmdldE5vZGUqJiByZWZlcmVuY2VOb2RlLCBFdmVudCop
IGNvbnN0OworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVm
RXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgPSAwOwogICAgIH07Ci19CiAKKyNpZm5kZWYgTkRFQlVHCisKK3ZvaWQgZm9yYmlkRXZlbnRE
aXNwYXRjaCgpOwordm9pZCBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKK2Jvb2wgZXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpOworCisjZWxzZQorCitpbmxpbmUgdm9pZCBmb3JiaWRFdmVudERpc3BhdGNo
KCkgeyB9CitpbmxpbmUgdm9pZCBhbGxvd0V2ZW50RGlzcGF0Y2goKSB7IH0KKworI2VuZGlmIC8v
IE5ERUJVRyAKKworfQogI2VuZGlmCkluZGV4OiBkb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBkb20vRXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNpb24gMjg3MjgpCisrKyBk
b20vRXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsyNSwxMyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Tm9kZS5oIgogCi0jaW5j
bHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEhh
bmRsZXIuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgpAQCAtNDUsMTggKzQxLDEyIEBA
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCi0jaW5jbHVkZSAiVUlFdmVudC5oIgor
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCi0jaW5jbHVk
ZSAia2pzX3Byb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEV2ZW50TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi0jaWZuZGVmIE5ERUJV
Rwotc3RhdGljIGludCBnRXZlbnREaXNwYXRjaEZvcmJpZGRlbiA9IDA7Ci0jZW5kaWYKIAogRXZl
bnRUYXJnZXROb2RlOjpFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQgKmRvYykKICAgICA6IE5vZGUo
ZG9jKQpAQCAtNjgsMjMzICs1OCw0OCBAQCBFdmVudFRhcmdldE5vZGU6On5FdmVudFRhcmdldE5v
ZGUoKQogewogICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMgJiYgIW1fcmVnZExpc3RlbmVycy0+aXNF
bXB0eSgpICYmICFpbkRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJE
aXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKHRoaXMpOworCiAgICAgZGVsZXRlIG1f
cmVnZExpc3RlbmVyczsKKyAgICBtX3JlZ2RMaXN0ZW5lcnMgPSAwOwogfQogCiB2b2lkIEV2ZW50
VGFyZ2V0Tm9kZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewotICAgIGlmIChtX3JlZ2RMaXN0
ZW5lcnMgJiYgIW1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudCgp
LT51bnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyh0aGlzKTsKLSAg
ICAKKyAgICBFdmVudFRhcmdldDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQodGhpcyk7CiAgICAgTm9k
ZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBFdmVudFRhcmdldE5vZGU6OnJl
bW92ZWRGcm9tRG9jdW1lbnQoKQogewotICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMgJiYgIW1fcmVn
ZExpc3RlbmVycy0+aXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckRpc2Nv
bm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7Ci0KKyAgICBFdmVudFRhcmdldDo6
cmVtb3ZlZEZyb21Eb2N1bWVudCh0aGlzKTsKICAgICBOb2RlOjpyZW1vdmVkRnJvbURvY3VtZW50
KCk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyAmZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
LCBjb25zdCBib29sIHVzZUNhcHR1cmUpCit2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6YWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewotICAgIGlmICghZG9jdW1lbnQo
KS0+YXR0YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIERvY3VtZW50OjpMaXN0
ZW5lclR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PERvY3VtZW50OjpMaXN0ZW5lclR5cGU+KDApOwot
ICAgIGlmIChldmVudFR5cGUgPT0gRE9NU3VidHJlZU1vZGlmaWVkRXZlbnQpCi0gICAgICAgIHR5
cGUgPSBEb2N1bWVudDo6RE9NU1VCVFJFRU1PRElGSUVEX0xJU1RFTkVSOwotICAgIGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBET01Ob2RlSW5zZXJ0ZWRFdmVudCkKLSAgICAgICAgdHlwZSA9IERvY3Vt
ZW50OjpET01OT0RFSU5TRVJURURfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09
IERPTU5vZGVSZW1vdmVkRXZlbnQpCi0gICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERVJF
TU9WRURfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVSZW1vdmVk
RnJvbURvY3VtZW50RXZlbnQpCi0gICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERVJFTU9W
RURGUk9NRE9DVU1FTlRfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5v
ZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50KQotICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRP
TU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9MSVNURU5FUjsKLSAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gRE9NQXR0ck1vZGlmaWVkRXZlbnQpCi0gICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9N
QVRUUk1PRElGSUVEX0xJU1RFTkVSOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01DaGFy
YWN0ZXJEYXRhTW9kaWZpZWRFdmVudCkKLSAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01DSEFS
QUNURVJEQVRBTU9ESUZJRURfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IG92
ZXJmbG93Y2hhbmdlZEV2ZW50KQotICAgICAgICB0eXBlID0gRG9jdW1lbnQ6Ok9WRVJGTE9XQ0hB
TkdFRF9MSVNURU5FUjsKLSAgICAgICAgCi0gICAgaWYgKHR5cGUpCi0gICAgICAgIGRvY3VtZW50
KCktPmFkZExpc3RlbmVyVHlwZSh0eXBlKTsKLSAgICAKLSAgICBpZiAoIW1fcmVnZExpc3RlbmVy
cykKLSAgICAgICAgbV9yZWdkTGlzdGVuZXJzID0gbmV3IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
TGlzdDsKLSAgICAKLSAgICAvLyBSZW1vdmUgZXhpc3RpbmcgaWRlbnRpY2FsIGxpc3RlbmVyIHNl
dCB3aXRoIGlkZW50aWNhbCBhcmd1bWVudHMuCi0gICAgLy8gVGhlIERPTTIgc3BlYyBzYXlzIHRo
YXQgImR1cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhpcyBjYXNlLgotICAg
IHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVy
ZSk7Ci0gICAgCi0gICAgLy8gYWRkaW5nIHRoZSBmaXJzdCBvbmUKLSAgICBpZiAobV9yZWdkTGlz
dGVuZXJzLT5pc0VtcHR5KCkgJiYgIWluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+
cmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKHRoaXMpOwotICAgIAot
ICAgIG1fcmVnZExpc3RlbmVycy0+YXBwZW5kKG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihl
dmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKSk7CisgICAgRXZlbnRUYXJnZXQ6
OmFkZEV2ZW50TGlzdGVuZXIodGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7
CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VD
YXB0dXJlKQordm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpCiB7Ci0gICAgaWYgKCFtX3JlZ2RMaXN0ZW5lcnMpIC8vIG5vdGhpbmcgdG8gcmVt
b3ZlCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciBy
bChldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLSAgICAKLSAgICBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGVuZCA9IG1fcmVnZExpc3RlbmVycy0+ZW5kKCk7
Ci0gICAgZm9yIChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGl0ID0gbV9y
ZWdkTGlzdGVuZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmICgqKCpp
dCkuZ2V0KCkgPT0gcmwpIHsKLSAgICAgICAgICAgICgqaXQpLT5zZXRSZW1vdmVkKHRydWUpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpdCA9IG1fcmVnZExpc3RlbmVycy0+cmVtb3ZlKGl0
KTsKLSAgICAgICAgICAgIC8vIHJlbW92ZWQgbGFzdAotICAgICAgICAgICAgaWYgKG1fcmVnZExp
c3RlbmVycy0+aXNFbXB0eSgpICYmICFpbkRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9j
dW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhp
cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBFdmVudFRhcmdldDo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsK
IH0KIAogdm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKIHsK
LSAgICBkZWxldGUgbV9yZWdkTGlzdGVuZXJzOwotICAgIG1fcmVnZExpc3RlbmVycyA9IDA7Cisg
ICAgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKHRoaXMpOwogfQogCiB2b2lk
IEV2ZW50VGFyZ2V0Tm9kZTo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQgKmV2dCwgYm9vbCB1c2VD
YXB0dXJlKQogewotICAgIGlmICghbV9yZWdkTGlzdGVuZXJzKQotICAgICAgICByZXR1cm47Ci0g
ICAgCiAgICAgaWYgKGRpc2FibGVkKCkgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdCBsaXN0ZW5lcnND
b3B5ID0gKm1fcmVnZExpc3RlbmVyczsKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6
Okl0ZXJhdG9yIGVuZCA9IGxpc3RlbmVyc0NvcHkuZW5kKCk7CiAKLSAgICBmb3IgKFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKCgqaXQpLT5ldmVudFR5cGUoKSA9PSBldnQt
PnR5cGUoKSAmJiAoKml0KS0+dXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUgJiYgISgqaXQpLT5y
ZW1vdmVkKCkpCi0gICAgICAgICAgICAoKml0KS0+bGlzdGVuZXIoKS0+aGFuZGxlRXZlbnQoZXZ0
LCBmYWxzZSk7Ci19Ci0KLWJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBlLCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1wRXZlbnQpCi17
Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQoZSk7Ci0gICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9y
YmlkZGVuKCkpOwotICAgIEFTU0VSVChldnQtPnRhcmdldCgpKTsKLSAgICBBU1NFUlQoIWV2dC0+
dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNvdWxkIGNyZWF0ZSBhbiBldmVu
dCB3aXRoIGFuIGVtcHR5IG5hbWUKLSAgICAKLSAgICAvLyB3b3JrIG91dCB3aGF0IG5vZGVzIHRv
IHNlbmQgZXZlbnQgdG8KLSAgICBEZXByZWNhdGVkUHRyTGlzdDxOb2RlPiBub2RlQ2hhaW47Ci0g
ICAgCi0gICAgaWYgKGluRG9jdW1lbnQoKSkgewotICAgICAgICBmb3IgKE5vZGUqIG4gPSB0aGlz
OyBuOyBuID0gbi0+ZXZlbnRQYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIG4tPnJlZigpOwot
ICAgICAgICAgICAgbm9kZUNoYWluLnByZXBlbmQobik7Ci0gICAgICAgIH0gCi0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gaWYgbm9kZSBpcyBub3QgaW4gdGhlIGRvY3VtZW50IGp1c3Qgc2VuZCBl
dmVudCB0byBpdHNlbGYgCi0gICAgICAgIHJlZigpOwotICAgICAgICBub2RlQ2hhaW4ucHJlcGVu
ZCh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxOb2Rl
PiBpdChub2RlQ2hhaW4pOwotICAgIAotICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBkaXNwYXRjaGlu
ZyBldmVudHMsIGdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBw
cmlvcgotICAgIC8vIHRvIHRoZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0dGluZyBhIGNyYWNrLgot
ICAgIHZvaWQqIGRhdGEgPSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOwotICAg
IAotICAgIC8vIHRyaWdnZXIgYW55IGNhcHR1cmluZyBldmVudCBoYW5kbGVycyBvbiBvdXIgd2F5
IGRvd24KLSAgICBldnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7Ci0g
ICAgCi0gICAgaXQudG9GaXJzdCgpOwotICAgIC8vIEhhbmRsZSB3aW5kb3cgZXZlbnRzIGZvciBj
YXB0dXJlIHBoYXNlLCBleGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsgaXMgbmVlZGVkCi0g
ICAgLy8gYmVjYXVzZSBNb3ppbGxhIHVzZWQgdG8gbmV2ZXIgcHJvcGFnYXRlIGxvYWQgZXZlbnRz
IHRvIHRoZSB3aW5kb3cgb2JqZWN0Ci0gICAgaWYgKGV2dC0+dHlwZSgpICE9IGxvYWRFdmVudCAm
JiBpdC5jdXJyZW50KCktPmlzRG9jdW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9w
cGVkKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFu
ZGxlV2luZG93RXZlbnQoZXZ0LmdldCgpLCB0cnVlKTsKLSAgICAKLSAgICBmb3IgKDsgaXQuY3Vy
cmVudCgpICYmIGl0LmN1cnJlbnQoKSAhPSB0aGlzICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBl
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdldE5v
ZGVDYXN0KGl0LmN1cnJlbnQoKSkpOwotICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1
cnJlbnQoKSktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgdHJ1ZSk7Ci0gICAgfQotICAg
IAotICAgIC8vIGRpc3BhdGNoIHRvIHRoZSBhY3R1YWwgdGFyZ2V0IG5vZGUKLSAgICBpdC50b0xh
c3QoKTsKLSAgICBpZiAoIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpIHsKLSAgICAgICAgZXZ0
LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwotICAgICAgICBldnQtPnNldEN1cnJl
bnRUYXJnZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFdlIGRvIHdhbnQgY2FwdHVyaW5nIGV2ZW50IGxpc3RlbmVycyB0byBiZSBpbnZv
a2VkIGhlcmUsIGV2ZW4gdGhvdWdoCi0gICAgICAgIC8vIHRoYXQgdmlvbGF0ZXMgdGhlIHNwZWNp
ZmljYXRpb24gc2luY2UgTW96aWxsYSBkb2VzIGl0LgotICAgICAgICBFdmVudFRhcmdldE5vZGVD
YXN0KGl0LmN1cnJlbnQoKSktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgdHJ1ZSk7Ci0g
ICAgICAgIAotICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSktPmhhbmRs
ZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLSAgICAtLWl0OwotICAgIAot
ICAgIC8vIG9rLCBub3cgYnViYmxlIHVwIGFnYWluIChvbmx5IG5vbi1jYXB0dXJpbmcgZXZlbnQg
aGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQpCi0gICAgLy8gIyMjIHJlY2FsY3VsYXRlIHRoZSBub2Rl
IGNoYWluIGhlcmU/IChlLmcuIGlmIHRhcmdldCBub2RlIG1vdmVkIGluIGRvY3VtZW50IGJ5IHBy
ZXZpb3VzIGV2ZW50IGhhbmRsZXJzKQotICAgIC8vIG5vLiB0aGUgRE9NIHNwZWNzIHNheXM6Ci0g
ICAgLy8gVGhlIGNoYWluIG9mIEV2ZW50VGFyZ2V0cyBmcm9tIHRoZSBldmVudCB0YXJnZXQgdG8g
dGhlIHRvcCBvZiB0aGUgdHJlZQotICAgIC8vIGlzIGRldGVybWluZWQgYmVmb3JlIHRoZSBpbml0
aWFsIGRpc3BhdGNoIG9mIHRoZSBldmVudC4KLSAgICAvLyBJZiBtb2RpZmljYXRpb25zIG9jY3Vy
IHRvIHRoZSB0cmVlIGR1cmluZyBldmVudCBwcm9jZXNzaW5nLAotICAgIC8vIGV2ZW50IGZsb3cg
d2lsbCBwcm9jZWVkIGJhc2VkIG9uIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSB0cmVlLgotICAg
IC8vCi0gICAgLy8gc2luY2UgdGhlIGluaXRpYWwgZGlzcGF0Y2ggaXMgYmVmb3JlIHRoZSBjYXB0
dXJpbmcgcGhhc2UsCi0gICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBu
b2RlIGNoYWluLgotICAgIC8vICh0b2JpYXMpCi0gICAgCi0gICAgaWYgKGV2dC0+YnViYmxlcygp
KSB7Ci0gICAgICAgIGV2dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdfUEhBU0UpOwot
ICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
ICYmICFldnQtPmNhbmNlbEJ1YmJsZSgpOyAtLWl0KSB7Ci0gICAgICAgICAgICBldnQtPnNldEN1
cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKLSAgICAgICAg
ICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+aGFuZGxlTG9jYWxFdmVudHMo
ZXZ0LmdldCgpLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSGFuZGxlIHdpbmRvdyBl
dmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNlLCBleGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsg
aXMgbmVlZGVkCi0gICAgICAgIC8vIGJlY2F1c2UgTW96aWxsYSB1c2VkIHRvIG5ldmVyIHByb3Bh
Z2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwKLQotICAgICAgICBpdC50b0ZpcnN0KCk7Ci0gICAgICAg
IGlmIChldnQtPnR5cGUoKSAhPSBsb2FkRXZlbnQgJiYgaXQuY3VycmVudCgpLT5pc0RvY3VtZW50
Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldnQtPmNhbmNlbEJ1YmJs
ZSgpKSB7Ci0gICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXROb2Rl
Q2FzdChpdC5jdXJyZW50KCkpKTsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
aXQuY3VycmVudCgpKS0+aGFuZGxlV2luZG93RXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7Ci0gICAg
ICAgIH0gCi0gICAgfSAKLSAgICAKLSAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Ci0gICAg
ZXZ0LT5zZXRFdmVudFBoYXNlKDApOyAvLyBJIGd1ZXNzIHRoaXMgaXMgY29ycmVjdCwgdGhlIHNw
ZWMgZG9lcyBub3Qgc2VlbSB0byBzYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
eXRoaW5nIGFib3V0IHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgcGhhc2UuCi0gICAgCi0gICAg
Ci0gICAgLy8gTm93IGNhbGwgdGhlIHBvc3QgZGlzcGF0Y2guCi0gICAgcG9zdERpc3BhdGNoRXZl
bnRIYW5kbGVyKGV2dC5nZXQoKSwgZGF0YSk7Ci0gICAgCi0gICAgLy8gbm93IHdlIGNhbGwgYWxs
IGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgKHRoaXMgaXMgbm90IHBhcnQgb2YgRE9NIC0gaXQgaXMg
aW50ZXJuYWwgdG8ga2h0bWwpCi0gICAgCi0gICAgaXQudG9MYXN0KCk7Ci0gICAgaWYgKGV2dC0+
YnViYmxlcygpKQotICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKSAmJiAhZXZ0LT5kZWZhdWx0SGFuZGxlZCgpOyAtLWl0KQotICAgICAgICAgICAg
RXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2
dC5nZXQoKSk7Ci0gICAgZWxzZSBpZiAoIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldnQt
PmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVu
dCgpKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOwotICAgIAotICAgIC8vIGRlcmVm
IGFsbCBub2RlcyBpbiBjaGFpbgotICAgIGl0LnRvRmlyc3QoKTsKLSAgICBmb3IgKDsgaXQuY3Vy
cmVudCgpOyArK2l0KQotICAgICAgICBpdC5jdXJyZW50KCktPmRlcmVmKCk7IC8vIHRoaXMgbWF5
IGRlbGV0ZSB1cwotICAgIAotICAgIERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmco
KTsKLSAgICAKLSAgICAvLyBJZiB0ZW1wRXZlbnQgaXMgdHJ1ZSwgdGhpcyBtZWFucyB0aGF0IHRo
ZSBET00gaW1wbGVtZW50YXRpb24KLSAgICAvLyB3aWxsIG5vdCBiZSBzdG9yaW5nIGEgcmVmZXJl
bmNlIHRvIHRoZSBldmVudCwgaS5lLiAgdGhlcmUgaXMgbm8KLSAgICAvLyB3YXkgdG8gcmV0cmll
dmUgaXQgZnJvbSBqYXZhc2NyaXB0IGlmIGEgc2NyaXB0IGRvZXMgbm90IGFscmVhZHkKLSAgICAv
LyBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0IGluIGEgdmFyaWFibGUuICBTbyB0aGVyZSBpcyBubyBu
ZWVkIGZvcgotICAgIC8vIHRoZSBpbnRlcnByZXRlciB0byBrZWVwIHRoZSBldmVudCBpbiBpdCdz
IGNhY2hlCi0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAo
dGVtcEV2ZW50ICYmIGZyYW1lICYmIGZyYW1lLT5zY3JpcHRQcm94eSgpKQotICAgICAgICBmcmFt
ZS0+c2NyaXB0UHJveHkoKS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZ0LmdldCgpKTsKLSAgICAKLSAg
ICByZXR1cm4gIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpOyAvLyAjIyMgd2hhdCBpZiBkZWZhdWx0
UHJldmVudGVkIHdhcyBjYWxsZWQgYmVmb3JlIGRpc3BhdGNoRXZlbnQ/CisgICAgRXZlbnRUYXJn
ZXQ6OmhhbmRsZUxvY2FsRXZlbnRzKHRoaXMsIGV2dCwgdXNlQ2FwdHVyZSk7ICAgIAogfQogCiBi
b29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBlLCBF
eGNlcHRpb25Db2RlJiBlYywgYm9vbCB0ZW1wRXZlbnQpCiB7Ci0gICAgcmV0dXJuIGRpc3BhdGNo
RXZlbnQoZSwgZWMsIHRlbXBFdmVudCwgdGhpcyk7Ci19Ci0KLWJvb2wgRXZlbnRUYXJnZXROb2Rl
OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBi
b29sIHRlbXBFdmVudCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKLXsKICAgICBSZWZQdHI8RXZlbnQ+
IGV2dChlKTsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAgICAgaWYg
KCFldnQgfHwgZXZ0LT50eXBlKCkuaXNFbXB0eSgpKSB7IApAQCAtMzAyLDExICsxMDcsMTYgQEAg
Ym9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzcwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgZXZ0LT5zZXRUYXJnZXQodGFyZ2V0KTsKLSAgICAKKyAgICBF
dmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUgPSB0aGlzOworCisjaWYgRU5BQkxFKFNWRykK
KyAgICBldnQtPnNldFRhcmdldChhcHBseVNWR0V2ZW50VGFyZ2V0UnVsZXMocmVmZXJlbmNlTm9k
ZSwgZXZ0LmdldCgpKSk7CisjZWxzZQorICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOworI2VuZGlm
CisKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOwotICAg
IAotICAgIHJldHVybiBkaXNwYXRjaEdlbmVyaWNFdmVudChldnQucmVsZWFzZSgpLCBlYywgdGVt
cEV2ZW50KTsKKyAgICByZXR1cm4gZGlzcGF0Y2hHZW5lcmljRXZlbnQocmVmZXJlbmNlTm9kZSwg
ZXZ0LnJlbGVhc2UoKSwgZWMsIHRlbXBFdmVudCk7CiB9CiAKIGJvb2wgRXZlbnRUYXJnZXROb2Rl
OjpkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KGJvb2wgc2VuZENoaWxkcmVuQ2hhbmdlZCkK
QEAgLTM0NSw3ICsxNTUsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hXaW5kb3dF
dmVuCiAgICAgICAgIGlmIChvd25lckVsZW1lbnQpIHsKICAgICAgICAgICAgIFJlZlB0cjxFdmVu
dD4gb3duZXJFdmVudCA9IG5ldyBFdmVudChldmVudFR5cGUsIGZhbHNlLCBjYW5jZWxhYmxlQXJn
KTsKICAgICAgICAgICAgIG93bmVyRXZlbnQtPnNldFRhcmdldChvd25lckVsZW1lbnQpOwotICAg
ICAgICAgICAgb3duZXJFbGVtZW50LT5kaXNwYXRjaEdlbmVyaWNFdmVudChvd25lckV2ZW50LnJl
bGVhc2UoKSwgZWMsIHRydWUpOworICAgICAgICAgICAgb3duZXJFbGVtZW50LT5kaXNwYXRjaEdl
bmVyaWNFdmVudChvd25lckVsZW1lbnQsIG93bmVyRXZlbnQucmVsZWFzZSgpLCBlYywgdHJ1ZSk7
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MjMsMjIgKzQzMyw2IEBAIHZvaWQgRXZlbnRUYXJn
ZXROb2RlOjpkdW1wKFRleHRTdHJlYW0qIHMKICAgICBOb2RlOjpkdW1wKHN0cmVhbSxpbmQpOwog
fQogCi12b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKQotewotICAgICsrZ0V2ZW50RGlzcGF0Y2hG
b3JiaWRkZW47Ci19Ci0KLXZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCkKLXsKLSAgICBpZiAoZ0V2
ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPiAwKQotICAgICAgICAtLWdFdmVudERpc3BhdGNoRm9yYmlk
ZGVuOwotfQotCi1ib29sIGV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKQotewotICAgIHJldHVybiBn
RXZlbnREaXNwYXRjaEZvcmJpZGRlbiA+IDA7Ci19Ci0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBkb20vRXZlbnRUYXJnZXROb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9t
L0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAyODcyOCkKKysrIGRvbS9FdmVudFRhcmdldE5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDkgKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdDsKLQot
Y2xhc3MgRXZlbnRUYXJnZXROb2RlIDogcHVibGljIE5vZGUsIHB1YmxpYyBFdmVudFRhcmdldCB7
CitjbGFzcyBFdmVudFRhcmdldE5vZGUgOiBwdWJsaWMgTm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBFdmVudFRhcmdldCB7CiBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXROb2Rl
KERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+RXZlbnRUYXJnZXROb2RlKCk7CkBAIC00OSw3ICs0
OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGRpc3BhdGNoSFRNTEV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKICAgICBF
dmVudExpc3RlbmVyKiBnZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSk7CiAKLSAgICBib29sIGRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+LCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1wRXZlbnQgPSBmYWxzZSk7CiAgICAgYm9vbCBk
aXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZSk7
CiAgICAgdm9pZCBkaXNwYXRjaFdpbmRvd0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKICAgICBib29sIGRpc3BhdGNo
VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGRldGFpbCA9IDAsIFBh
c3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCA9IDApOwpAQCAtNzMsMTEgKzcyLDYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKLSAgICAvLyBIYW5kbGVycyB0byBk
by91bmRvIGFjdGlvbnMgb24gdGhlIHRhcmdldCBub2RlIGJlZm9yZSBhbiBldmVudCBpcyBkaXNw
YXRjaGVkIHRvIGl0IGFuZCBhZnRlciB0aGUgZXZlbnQKLSAgICAvLyBoYXMgYmVlbiBkaXNwYXRj
aGVkLiAgVGhlIGRhdGEgcG9pbnRlciBpcyBoYW5kZWQgYmFjayBieSB0aGUgcHJlRGlzcGF0Y2gg
YW5kIHBhc3NlZCB0byBwb3N0RGlzcGF0Y2guCi0gICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlcihFdmVudCopIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcG9z
dERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50Kiwgdm9pZCogZGF0YUZyb21QcmVEaXNwYXRjaCkg
eyB9Ci0KICAgICAvKioKICAgICAgKiBQZXJmb3JtIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYW4g
ZXZlbnQgZS5nLiBzdWJtaXR0aW5nIGEgZm9ybQogICAgICAqLwpAQCAtOTMsMTUgKzg3LDEzIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtKiwgRGVwcmVjYXRlZFN0
cmluZyBpbmRlbnQgPSAiIikgY29uc3Q7CiAjZW5kaWYKIAorICAgIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyTGlzdCogbG9jYWxFdmVudExpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnZExp
c3RlbmVyczsgfQorCiAgICAgdXNpbmcgTm9kZTo6cmVmOwogICAgIHVzaW5nIE5vZGU6OmRlcmVm
OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTVkdFbGVtZW50OwotICAgIGJvb2wgZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVtcEV2
ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0KTsKICAKIHByb3RlY3RlZDoKLSAgICB0eXBlZGVmIERl
cHJlY2F0ZWRWYWx1ZUxpc3Q8UmVmUHRyPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiA+IFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyTGlzdDsKKyAgICBmcmllbmQgY2xhc3MgRXZlbnRUYXJnZXQ7CiAg
ICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0KiBtX3JlZ2RMaXN0ZW5lcnM7CiAKIHByaXZh
dGU6CkBAIC0xMjEsMTkgKzExMyw2IEBAIGlubGluZSBjb25zdCBFdmVudFRhcmdldE5vZGUqIEV2
ZW50VGFyZ2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRXZlbnRUYXJnZXROb2RlKj4o
bik7IAogfQogCi0jaWZuZGVmIE5ERUJVRwotCi12b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKTsK
LXZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCk7Ci1ib29sIGV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4o
KTsKLQotI2Vsc2UKLQotaW5saW5lIHZvaWQgZm9yYmlkRXZlbnREaXNwYXRjaCgpIHsgfQotaW5s
aW5lIHZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCkgeyB9Ci0KLSNlbmRpZiAvLyBOREVCVUcgCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEV2ZW50VGFyZ2V0Tm9kZV9oCklu
ZGV4OiBzdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyODcyOCkKKysrIHN2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQgU1ZHRWxlbWVu
dDo6c2VuZFNWR0xvYWRFdmVudElmUG9zc2kKICAgICAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9
IG5ldyBFdmVudChsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGV2ZW50LT5zZXRU
YXJnZXQoY3VycmVudFRhcmdldCk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZCA9IDA7
Ci0gICAgICAgIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2ZW50LnJlbGVhc2UoKSwgaWdub3JlZCwg
ZmFsc2UpOworICAgICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudCh0aGlzLCBldmVudC5yZWxlYXNl
KCksIGlnbm9yZWQsIGZhbHNlKTsKICAgICAgICAgY3VycmVudFRhcmdldCA9IChwYXJlbnQgJiYg
cGFyZW50LT5pc1NWR0VsZW1lbnQoKSkgPyBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0VsZW1lbnQ+
KHBhcmVudCkgOiAwOwogICAgIH0KIH0KQEAgLTIyMCw2ICsyMjEsOCBAQCBzdGF0aWMgTm9kZSog
c2hhZG93VHJlZVBhcmVudEVsZW1lbnRGb3JTCiAKIGJvb2wgU1ZHRWxlbWVudDo6ZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBlLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCB0ZW1wRXZl
bnQpCiB7CisgICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gYSBm
b2xsb3ctdXAgcGF0Y2ghCisKICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gdGhpczsKICAgICBO
b2RlKiB1c2VOb2RlID0gc2hhZG93VHJlZVBhcmVudEVsZW1lbnRGb3JTaGFkb3dUcmVlRWxlbWVu
dCh0aGlzKTsKIApAQCAtMjM1LDcgKzIzOCwxMCBAQCBib29sIFNWR0VsZW1lbnQ6OmRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0CiAgICAgICAgICAgICB0YXJnZXQgPSBpbnN0YW5jZTsKICAgICB9CiAK
LSAgICByZXR1cm4gRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEV2ZW50KGUsIGVjLCB0ZW1wRXZl
bnQsIHRhcmdldCk7CisgICAgZS0+c2V0VGFyZ2V0KHRhcmdldCk7CisKKyAgICBSZWZQdHI8RnJh
bWVWaWV3PiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOworICAgIHJldHVybiBFdmVudFRhcmdl
dE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KHRoaXMsIGUsIGVjLCB0ZW1wRXZlbnQpOwogfQog
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17901</attachid>
            <date>2007-12-14 19:13:23 -0800</date>
            <delta_ts>2007-12-15 12:22:16 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>Refactor2.diff</filename>
            <type>text/plain</type>
            <size>94747</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzM4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzYgQEAKKzIwMDctMTIt
MTQgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgRml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDQ1IChSZWZhY3RvciBFdmVudFRhcmdldE5vZGUgJiBKU0V2
ZW50VGFyZ2V0Tm9kZSBmb3IgYW4gdXBjb21pbmcgU1ZHIHBhdGNoKQorCisgICAgICAgIFNwbGl0
IHVwIEpTRXZlbnRUYXJnZXROb2RlIGluIEpTRXZlbnRUYXJnZXROb2RlICYgSlNFdmVudFRhcmdl
dEJhc2UgLSB3aGVyZSBtb3N0IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW92ZWQgZG93bgorICAg
ICAgICBpbiB0aGUgYmFzZSBjbGFzcy4gQXBwbGllZCB0aGUgc2FtZSByZWZhY3Rvcml6YXRpb24g
dG8gRXZlbnRUYXJnZXROb2RlLgorCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9y
IHRoZSB1cGNvbWluZyBwYXRjaCBpbXBsZW1lbnRpbmcgdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFj
ZSBmb3IgU1ZHRWxlbWVudEluc3RhbmNlCisgICAgICAgIHRvIHNoYXJlIGFzIG11Y2ggY29kZSBh
cyBwb3NzaWJsZSB3aXRoIHRoZSBFdmVudFRhcmdldE5vZGUgY2xhc3Nlcy4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9u
ZGluZ05vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25CYXNlOjpKU0V2ZW50
VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXRQcm90b3R5cGVGdW5jdGlvbjo6SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjo6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6SlNFdmVudFRhcmdldEJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldEJhc2U6On5KU0V2ZW50VGFyZ2V0QmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6cHV0VmFsdWVQcm9wZXJ0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFdmVudFRhcmdldFByb3RvdHlwZTo6SlNFdmVudFRhcmdldFByb3RvdHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlOjpzZWxmKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlOjpjbGFzc0luZm8pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXROb2RlOjpKU0V2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6fkpTRXZlbnRUYXJnZXROb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
V2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAo
V2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0Tm9kZTo6cHV0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNFdmVudFRhcmdldE5vZGUuaDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRUYXJnZXQ6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFRhcmdldDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRUYXJnZXQ6OmhhbmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0OjphcHBseVNWR0V2ZW50VGFyZ2V0UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Zm9y
YmlkRXZlbnREaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjphbGxvd0V2ZW50RGlzcGF0Y2gp
OgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnREaXNwYXRjaEZvcmJpZGRlbik6CisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6cHJlRGlz
cGF0Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnBvc3RE
aXNwYXRjaEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpmb3JiaWRFdmVudERpc3Bh
dGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmFsbG93RXZlbnREaXNwYXRjaCk6CisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5v
ZGU6On5FdmVudFRhcmdldE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2Rl
OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5v
ZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXRO
b2RlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5v
ZGU6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFy
Z2V0Tm9kZTo6aGFuZGxlTG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXROb2RlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6ZGlzcGF0Y2hXaW5kb3dFdmVudCk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Tm9kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpsb2NhbEV2ZW50TGlzdGVuZXJz
KToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50OjpzZW5kU1ZHTG9hZEV2ZW50SWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50OjpkaXNwYXRjaEV2ZW50KToKKwogMjAwNy0xMi0xNCAgQWxwIFRva2VyICA8YWxw
QGF0b2tlci5jb20+CiAKICAgICAgICAgR1RLKy9RdCBidWlsZCBmaXguIFRyYWNrIGFkZGVkIGZp
bGVzIGluIHIyODcyMi4KSW5kZXg6IERlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
RGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMjg3MzgpCisrKyBEZXJpdmVkU291cmNlcy5t
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyArMzQxLDcgQEAgYWxsIDogXAogICAgIEpTRW50
aXR5LmggXAogICAgIEpTRW50aXR5UmVmZXJlbmNlLmggXAogICAgIEpTRXZlbnQuaCBcCi0gICAg
SlNFdmVudFRhcmdldE5vZGUubHV0LmggXAorICAgIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oIFwK
ICAgICBKU0hUTUxBcHBsZXRFbGVtZW50LmggXAogICAgIEpTSFRNTEFuY2hvckVsZW1lbnQuaCBc
CiAgICAgSlNIVE1MQXJlYUVsZW1lbnQuaCBcCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyODczOCkKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzA5Myw2ICszMDkzLDggQEAKIAkJQjI1NTk5QkEwRDAwRDhC
QTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTkyMjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHUmVz
b3VyY2VNYXJrZXIuaCAqLzsgfTsKIAkJQjI1NTk5QkIwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Jl
c291cmNlTWFza2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNTU5OTIzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5jcHAg
Ki87IH07CiAJCUIyNTU5OUJDMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MjQw
RDAwRDhCOTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFza2VyLmggKi87IH07CisJCUIyNUJFNTEw
MEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjVCRTUwRTBEMDZCNzA4MDBCNTI0QzYg
LyogSlNFdmVudFRhcmdldEJhc2UuY3BwICovOyB9OworCQlCMjVCRTUxMTBEMDZCNzA4MDBCNTI0
QzYgLyogSlNFdmVudFRhcmdldEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNUJFNTBGMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0
QmFzZS5oICovOyB9OwogCQlCMjVERkFBRjBCMkUyOTI5MDAwRTY1MTAgLyogSlNTVkdNYXRyaXhD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI1REZBQUUwQjJFMjkyOTAwMEU2NTEwIC8qIEpTU1ZHTWF0cml4Q3VzdG9tLmNwcCAqLzsgfTsK
IAkJQjI2NTU0RUEwQjgwRDc0OTAwQTUwRUMzIC8qIFJlbmRlclNWR1RleHRQYXRoLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNjU1NEU4MEI4MEQ3
NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5jcHAgKi87IH07CiAJCUIyNjU1NEVCMEI4
MEQ3NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NTU0RTkwQjgwRDc0OTAwQTUwRUMzIC8qIFJl
bmRlclNWR1RleHRQYXRoLmggKi87IH07CkBAIC0zMTQ0LDYgKzMxNDYsNyBAQAogCQlCMjc1MzU4
MjBCMDUzODE0MDAyQ0U2NEYgLyogUGVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU1NTBCMDUzODE0MDAyQ0U2NEYgLyogUGVuLmggKi87IH07
CiAJCUIyNzUzNThFMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1OEQwQjA1M0E2NjAwMkNFNjRG
IC8qIEljb25NYWMubW0gKi87IH07CiAJCUIyNzdCNDA0MEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFw
aGljc0NvbnRleHRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1t
ICovOyB9OworCQlCMjhCQzMxQTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2Uu
bHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhC
QzMxOTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2UubHV0LmggKi87IH07CiAJ
CUIyOEM2QTI3MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QzZBMUUwRDAw
QzQ0ODAwMzM0QUE0IC8qIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgKi87IH07CiAJCUIyOEM2
QTI4MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTFGMEQwMEM0NDgwMDMz
NEFBNCAvKiBTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCAqLzsgfTsKIAkJQjI4QzZBMjkwRDAwQzQ0
ODAwMzM0QUE0IC8qIFNWR0ltYWdlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTIwMEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFn
ZUxvYWRlci5jcHAgKi87IH07CkBAIC0zNjkzLDcgKzM2OTYsNiBAQAogCQlCQ0Q5QzJDMjBDMTdC
NjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Q5QzJCRTBDMTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlz
dC5jcHAgKi87IH07CiAJCUJDRDlDMkMzMEMxN0I2OUUwMDVDOTBBMiAvKiBKU05vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Q5QzJCRjBD
MTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5oICovOyB9OwogCQlCQ0Q5QzJDNjBDMTdCNkVD
MDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDlDMkM0MEMxN0I2RUMwMDVDOTBB
MiAvKiBKU0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oICovOyB9OwotCQlCQ0Q5QzJDNzBD
MTdCNkVDMDA1QzkwQTIgLyogSlNFdmVudFRhcmdldE5vZGUubHV0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Q5QzJDNTBDMTdCNkVDMDA1QzkwQTIg
LyogSlNFdmVudFRhcmdldE5vZGUubHV0LmggKi87IH07CiAJCUJDRTAxMzlBMEMwQkVGMTgwMDQz
ODYwQSAvKiBKU1N0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFMDEzOTgwQzBCRUYxODAwNDM4NjBBIC8qIEpTU3R5bGVTaGVldC5j
cHAgKi87IH07CiAJCUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTAxMzk5MEMw
QkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuaCAqLzsgfTsKIAkJQkNFQTQ3OEYwOTdDQUFD
ODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDc3QzA5N0NBQUM4MDA5NEM5
RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCAqLzsgfTsKQEAgLTcwOTEsNiAr
NzA5Myw4IEBACiAJCUIyNTU5OTIyMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hcmtl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVzb3VyY2VNYXJrZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk5MjMwRDAwRDhCOTAwQkI4MjVD
IC8qIFNWR1Jlc291cmNlTWFza2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdSZXNvdXJjZU1hc2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyNTU5OTI0MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNrZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI1QkU1MEUwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZl
bnRUYXJnZXRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0V2ZW50VGFyZ2V0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNUJF
NTBGMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFdmVudFRhcmdldEJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI1REZBQUUwQjJFMjkyOTAwMEU2NTEwIC8qIEpTU1ZHTWF0cml4Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR01hdHJp
eEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNjU1NEU4MEI4MEQ3
NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHVGV4dFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjY1NTRFOTBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4dFBh
dGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RleHRQYXRo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTQyLDYgKzcxNDYsNyBAQAogCQlC
Mjc1MzU1NTBCMDUzODE0MDAyQ0U2NEYgLyogUGVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1OEQw
QjA1M0E2NjAwMkNFNjRGIC8qIEljb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gSWNvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjI3N0I0MDMwQjIyRjM3QzAwMDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4dE1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyOEJDMzE5MEQxMzVFNTQwMENEQkEyNyAv
KiBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjhDNkExRTBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdEb2N1bWVudEV4dGVuc2lv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjhDNkExRjBEMDBDNDQ4MDAz
MzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdEb2N1bWVudEV4dGVuc2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI4QzZBMjAwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0ltYWdlTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbWFnZUxvYWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzAxLDcgKzc3MDYsNiBAQAogCQlCQ0Q5
QzJCRTBDMTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRDlDMkJGMEMxN0I2OUUwMDVDOTBBMiAvKiBKU05vZGVMaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU05vZGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDRDlDMkM0MEMxN0I2RUMwMDVDOTBBMiAvKiBKU0RPTUV4Y2VwdGlv
bkNvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNE
T01FeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkNEOUMyQzUwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXROb2RlLmx1dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFdmVudFRhcmdldE5vZGUubHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTAxMzk4MEMwQkVGMTgwMDQzODYwQSAv
KiBKU1N0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTAxMzk5
MEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0VBNDc3QzA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIwOCw3
ICs4MjEyLDYgQEAKIAkJCQlBOEQwNkIzODBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmNw
cCAqLywKIAkJCQlBOEQwNkIzNzBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmggKi8sCiAJ
CQkJQkNEOUMyQzQwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3Iu
bHV0LmggKi8sCi0JCQkJQkNEOUMyQzUwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXRO
b2RlLmx1dC5oICovLAogCQkJCTY1NjU4MURBMDlEMTUwOEQwMDBFNjFENyAvKiBranNfY3NzLmx1
dC5oICovLAogCQkJCTY1NjU4MURDMDlEMTUwOEQwMDBFNjFENyAvKiBranNfZXZlbnRzLmx1dC5o
ICovLAogCQkJCTY1NjU4MURFMDlEMTUwOEQwMDBFNjFENyAvKiBranNfbmF2aWdhdG9yLmx1dC5o
ICovLApAQCAtMTA1NDEsNiArMTA1NDQsNyBAQAogCQkJCTFBQ0U1M0REMEE4RDE4ODEwMDIyOTQ3
RCAvKiBKU0RPTVBhcnNlci5jcHAgKi8sCiAJCQkJMUFDRTUzREUwQThEMTg4MTAwMjI5NDdEIC8q
IEpTRE9NUGFyc2VyLmggKi8sCiAJCQkJNjU2NTgxRDcwOUQxNTA4RDAwMEU2MUQ3IC8qIEpTWE1M
SHR0cFJlcXVlc3QubHV0LmggKi8sCisJCQkJQjI4QkMzMTkwRDEzNUU1NDAwQ0RCQTI3IC8qIEpT
RXZlbnRUYXJnZXRCYXNlLmx1dC5oICovLAogCQkJCTFBQ0U1M0Y0MEE4RDE5NDcwMDIyOTQ3RCAv
KiBKU1hNTFNlcmlhbGl6ZXIuY3BwICovLAogCQkJCTFBQ0U1M0Y1MEE4RDE5NDcwMDIyOTQ3RCAv
KiBKU1hNTFNlcmlhbGl6ZXIuaCAqLywKIAkJCQk2NTY1ODFEOTA5RDE1MDhEMDAwRTYxRDcgLyog
SlNYU0xUUHJvY2Vzc29yLmx1dC5oICovLApAQCAtMTEzNTksNiArMTEzNjMsOCBAQAogCQkJCUUx
MEI5MzdCMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovLAog
CQkJCUJDRDlDMjY4MEMxN0FBODEwMDVDOTBBMiAvKiBKU0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9y
LmNwcCAqLywKIAkJCQlCQ0Q5QzI2OTBDMTdBQTgxMDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25D
b25zdHJ1Y3Rvci5oICovLAorCQkJCUIyNUJFNTBFMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50
VGFyZ2V0QmFzZS5jcHAgKi8sCisJCQkJQjI1QkU1MEYwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZl
bnRUYXJnZXRCYXNlLmggKi8sCiAJCQkJQkNEOUMyNkEwQzE3QUE4MTAwNUM5MEEyIC8qIEpTRXZl
bnRUYXJnZXROb2RlLmNwcCAqLywKIAkJCQlCQ0Q5QzI2QjBDMTdBQTgxMDA1QzkwQTIgLyogSlNF
dmVudFRhcmdldE5vZGUuaCAqLywKIAkJCQlCQzZEQzdBMDBDMUE0QkZBMDA0RTIwMTcgLyogSlNI
VE1MQWxsQ29sbGVjdGlvbi5oICovLApAQCAtMTMzMzUsNyArMTMzNDEsNiBAQAogCQkJCTkzRjlC
Nzc1MEJBNUZEREQwMDg1NDA2NCAvKiBKU0VudGl0eVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRFODM3OEUwOUY4NUQ0RjAwQjg1QUU0IC8qIEpTRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRDlDMjcxMEMxN0FBODEwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQkNEOUMyQzcwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRUYXJn
ZXROb2RlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2REM3QTEwQzFBNEJGQTAwNEUyMDE3
IC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEEyREYwMEEx
Qjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTRBMkRGMjBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQXBwbGV0RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xNDA5MCw5ICsxNDA5NSwxMSBAQAogCQkJCUJDQjE2QzJEMDk3OUMzQkQw
MDQ2Nzc0MSAvKiBsb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REY4MDk5RTY0OTIw
MDU2RTU4MSAvKiBtYXJrdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIw
MDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjVCRTUxMTBE
MDZCNzA4MDBCNTI0QzYgLyogSlNFdmVudFRhcmdldEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxQ0JGQzk5MEQxMEU0ODMwMDJEQkY1MSAvKiBDYWNoZWRQYWdlUGxhdGZvcm1EYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzkwNEI3NzBEMTA5OThGMDA2ODBEMzIgLyogQ2xhc3NOb2RlTGlz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0QkY5RTUwRDExRTEzMzAwN0QyNDdGIC8qIENsYXNz
TmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyOEJDMzFBMEQxMzVFNTQwMENEQkEyNyAvKiBK
U0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTQxMzEsNyArMTQxMzgs
NiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7
CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMy
ODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFBy
b2plY3QgIldlYkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40
IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAog
CQkJCUVuZ2xpc2gsCkBAIC0xNTgwMSw2ICsxNTgwNyw3IEBACiAJCQkJQkNCMTZDMkMwOTc5QzNC
RDAwNDY3NzQxIC8qIGxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURGNzA5OUU2
NDkyMDA1NkU1ODEgLyogbWFya3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFEMDk5
RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIy
NUJFNTEwMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5M0EzOEI0QjBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzkwNEI3NjBEMTA5OThGMDA2ODBEMzIgLyogQ2xhc3NOb2Rl
TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzRCRjlFNDBEMTFFMTMzMDA3RDI0N0YgLyog
Q2xhc3NOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IGJpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFz
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJKU0V2ZW50VGFyZ2V0Tm9kZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8qIFNvdXJjZSBmb3IgSlNFdmVudFRhcmdldFByb3BlcnRpZXNUYWJsZQor
QGJlZ2luIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzVGFibGUgNTAKK29uYWJvcnQgICAgICAgV2Vi
Q29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQWJvcnQgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZQorb25ibHVyICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
T25CbHVyICAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmNoYW5nZSAgICAgIFdlYkNvcmU6
OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNoYW5nZSAgICAgICAgICAgICAgIERvbnREZWxl
dGUKK29uY2xpY2sgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQ2xp
Y2sgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25jb250ZXh0bWVudSBXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25Db250ZXh0TWVudSAgICAgICAgICBEb250RGVsZXRlCitv
bmRibGNsaWNrICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRibENsaWNr
ICAgICAgICAgICAgIERvbnREZWxldGUKK29uYmVmb3JlY3V0ICAgV2ViQ29yZTo6SlNFdmVudFRh
cmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlQ3V0ICAgICAgICAgICAgRG9udERlbGV0ZQorb25jdXQg
ICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25DdXQgICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlCitvbmJlZm9yZWNvcHkgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkJlZm9yZUNvcHkgICAgICAgICAgIERvbnREZWxldGUKK29uY29weSAgICAg
ICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQ29weSAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZQorb25iZWZvcmVwYXN0ZSBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25CZWZvcmVQYXN0ZSAgICAgICAgICBEb250RGVsZXRlCitvbnBhc3RlICAgICAgIFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblBhc3RlICAgICAgICAgICAgICAgIERv
bnREZWxldGUKK29uZHJhZyAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uRHJhZyAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25kcmFnZW5kICAgICBXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnRW5kICAgICAgICAgICAgICBEb250RGVs
ZXRlCitvbmRyYWdlbnRlciAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRy
YWdFbnRlciAgICAgICAgICAgIERvbnREZWxldGUKK29uZHJhZ2xlYXZlICAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZ0xlYXZlICAgICAgICAgICAgRG9udERlbGV0ZQor
b25kcmFnb3ZlciAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnT3Zl
ciAgICAgICAgICAgICBEb250RGVsZXRlCitvbmRyYWdzdGFydCAgIFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdTdGFydCAgICAgICAgICAgIERvbnREZWxldGUKK29uZHJv
cCAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJvcCAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQorb25lcnJvciAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6T25FcnJvciAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmZvY3VzICAg
ICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkZvY3VzICAgICAgICAgICAg
ICAgIERvbnREZWxldGUKK29uaW5wdXQgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3Bl
cnRpZXM6Ok9uSW5wdXQgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25rZXlkb3duICAgICBX
ZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlEb3duICAgICAgICAgICAgICBE
b250RGVsZXRlCitvbmtleXByZXNzICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVz
OjpPbktleVByZXNzICAgICAgICAgICAgIERvbnREZWxldGUKK29ua2V5dXAgICAgICAgV2ViQ29y
ZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uS2V5VXAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZQorb25sb2FkICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25M
b2FkICAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbm1vdXNlZG93biAgIFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlRG93biAgICAgICAgICAgIERvbnREZWxldGUK
K29ubW91c2Vtb3ZlICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VN
b3ZlICAgICAgICAgICAgRG9udERlbGV0ZQorb25tb3VzZW91dCAgICBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU91dCAgICAgICAgICAgICBEb250RGVsZXRlCitvbm1v
dXNlb3ZlciAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlT3ZlciAg
ICAgICAgICAgIERvbnREZWxldGUKK29ubW91c2V1cCAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdl
dFByb3BlcnRpZXM6Ok9uTW91c2VVcCAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25tb3VzZXdo
ZWVsICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZVdoZWVsICAgICAg
ICAgICBEb250RGVsZXRlCitvbnJlc2V0ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPblJlc2V0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29ucmVzaXplICAgICAg
V2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uUmVzaXplICAgICAgICAgICAgICAg
RG9udERlbGV0ZQorb25zY3JvbGwgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25TY3JvbGwgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbnNlYXJjaCAgICAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNlYXJjaCAgICAgICAgICAgICAgIERvbnRE
ZWxldGUKK29uc2VsZWN0ICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
U2VsZWN0ICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25zZWxlY3RzdGFydCBXZWJDb3JlOjpK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TZWxlY3RTdGFydCAgICAgICAgICBEb250RGVsZXRl
CitvbnN1Ym1pdCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblN1Ym1p
dCAgICAgICAgICAgICAgIERvbnREZWxldGUKK29udW5sb2FkICAgICAgV2ViQ29yZTo6SlNFdmVu
dFRhcmdldFByb3BlcnRpZXM6Ok9uVW5sb2FkICAgICAgICAgICAgICAgRG9udERlbGV0ZQorQGVu
ZAorKi8KKworLyoKK0BiZWdpbiBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGUgNQorYWRkRXZl
bnRMaXN0ZW5lciAgICAgICAgJldlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlv
bjxXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6QWRkRXZlbnRMaXN0ZW5lcj46OmNy
ZWF0ZSAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDMKK3JlbW92ZUV2ZW50TGlzdGVuZXIgICAgICZX
ZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb248V2ViQ29yZTo6SlNFdmVudFRh
cmdldFByb3BlcnRpZXM6OlJlbW92ZUV2ZW50TGlzdGVuZXI+OjpjcmVhdGUgRG9udERlbGV0ZXxG
dW5jdGlvbiAzCitkaXNwYXRjaEV2ZW50ICAgICAgICAgICAmV2ViQ29yZTo6SlNFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uPFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpEaXNw
YXRjaEV2ZW50Pjo6Y3JlYXRlICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQorQGVuZAorKi8K
KworYm9vbCByZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05vZGUoS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTT2JqZWN0KiB0aGlzT2JqLCBOb2RlKiYgZXZlbnROb2RlLCBFdmVudFRh
cmdldComIGV2ZW50VGFyZ2V0KQoreworICAgIGlmICh0aGlzT2JqLT5pbmhlcml0cygmSlNOb2Rl
OjppbmZvKSkgeworICAgICAgICBKU0V2ZW50VGFyZ2V0Tm9kZSoganNOb2RlID0gc3RhdGljX2Nh
c3Q8SlNFdmVudFRhcmdldE5vZGUqPih0aGlzT2JqKTsKKyAgICAgICAgQVNTRVJUKGpzTm9kZSk7
CisKKyAgICAgICAgRXZlbnRUYXJnZXROb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8RXZlbnRUYXJn
ZXROb2RlKj4oanNOb2RlLT5pbXBsKCkpOworICAgICAgICBBU1NFUlQobm9kZSk7CisKKyAgICAg
ICAgZXZlbnROb2RlID0gbm9kZTsKKyAgICAgICAgZXZlbnRUYXJnZXQgPSBub2RlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaAkocmV2aXNpb24gMCkK
KysrIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0V2ZW50VGFyZ2V0QmFzZV9oCisj
ZGVmaW5lIEpTRXZlbnRUYXJnZXRCYXNlX2gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkpTRXZlbnQuaCIKKyNpbmNsdWRlICJranNfZXZlbnRzLmgiCisjaW5j
bHVkZSAia2pzX3dpbmRvdy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICB1c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKKworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKworICAgIC8v
IEV2ZW50IHRhcmdldCBwcm9wZXJ0aWVzIChzaGFyZWQgYWNyb3NzIGFsbCBKU0V2ZW50VGFyZ2V0
KiBjbGFzc2VzKQorICAgIHN0cnVjdCBKU0V2ZW50VGFyZ2V0UHJvcGVydGllcyB7CisgICAgICAg
IGVudW0geworICAgICAgICAgICAgQWRkRXZlbnRMaXN0ZW5lciwgUmVtb3ZlRXZlbnRMaXN0ZW5l
ciwgRGlzcGF0Y2hFdmVudCwKKyAgICAgICAgICAgIE9uQWJvcnQsIE9uQmx1ciwgT25DaGFuZ2Us
IE9uQ2xpY2ssIE9uQ29udGV4dE1lbnUsIE9uRGJsQ2xpY2ssIE9uRXJyb3IsCisgICAgICAgICAg
ICBPbkRyYWdFbnRlciwgT25EcmFnT3ZlciwgT25EcmFnTGVhdmUsIE9uRHJvcCwgT25EcmFnU3Rh
cnQsIE9uRHJhZywgT25EcmFnRW5kLAorICAgICAgICAgICAgT25CZWZvcmVDdXQsIE9uQ3V0LCBP
bkJlZm9yZUNvcHksIE9uQ29weSwgT25CZWZvcmVQYXN0ZSwgT25QYXN0ZSwgT25TZWxlY3RTdGFy
dCwKKyAgICAgICAgICAgIE9uRm9jdXMsIE9uSW5wdXQsIE9uS2V5RG93biwgT25LZXlQcmVzcywg
T25LZXlVcCwgT25Mb2FkLCBPbk1vdXNlRG93biwKKyAgICAgICAgICAgIE9uTW91c2VNb3ZlLCBP
bk1vdXNlT3V0LCBPbk1vdXNlT3ZlciwgT25Nb3VzZVVwLCBPbk1vdXNlV2hlZWwsIE9uUmVzZXQs
CisgICAgICAgICAgICBPblJlc2l6ZSwgT25TY3JvbGwsIE9uU2VhcmNoLCBPblNlbGVjdCwgT25T
dWJtaXQsIE9uVW5sb2FkCisgICAgICAgIH07CisgICAgfTsKKworICAgIC8vIEV2ZW50IHRhcmdl
dCBwcm90b3R5cGUgc2hhcmluZyBmdW5jdGlvbmFsaXR5CisgICAgdGVtcGxhdGU8aW50IEpTRXZl
bnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXI+CisgICAgY2xhc3MgSlNFdmVudFRh
cmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZSA6IHB1YmxpYyBLSlM6OkludGVybmFsRnVuY3Rpb25J
bXAgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
QmFzZShLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVy
JiBuYW1lKSAKKyAgICAgICAgICAgIDogS0pTOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKHN0YXRpY19j
YXN0PEtKUzo6RnVuY3Rpb25Qcm90b3R5cGUqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uUHJvdG90eXBlKCkpLCBuYW1lKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHB1
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBLSlM6OmpzTnVtYmVyKGxlbiks
IEtKUzo6RG9udERlbGV0ZSB8IEtKUzo6UmVhZE9ubHkgfCBLSlM6OkRvbnRFbnVtKTsgCisgICAg
ICAgIH0KKworICAgICAgICBzdGF0aWMgS0pTOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKiBjcmVhdGUo
S0pTOjpFeGVjU3RhdGUqLCBpbnQgbGVuLCBjb25zdCBLSlM6OklkZW50aWZpZXImIG5hbWUpOwor
ICAgICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3Rh
dGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0JikgPSAwOworICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTxpbnQgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4K
KyAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb24gOiBwdWJsaWMgSlNFdmVu
dFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rp
b25JZGVudGlmaWVyPiB7CisgICAgcHVibGljOgorICAgICAgICBKU0V2ZW50VGFyZ2V0UHJvdG90
eXBlRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGludCBsZW4sIGNvbnN0IEtKUzo6SWRl
bnRpZmllciYgbmFtZSkgCisgICAgICAgICAgICA6IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5j
dGlvbkJhc2U8SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4oZXhlYywg
bGVuLCBuYW1lKQorICAgICAgICB7IAorICAgICAgICB9CisgICAgfTsKKworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgdGhlIHBhcnRpYWwgc3BlY2lhbGl6YXRlZCB0ZW1wbGF0ZSBmdW5jdGlv
bnMgYmVsb3cgCisgICAgYm9vbCByZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGluZ05v
ZGUoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiB0aGlzT2JqLCBOb2RlKiYsIEV2ZW50
VGFyZ2V0KiYpOworCisgICAgdGVtcGxhdGU8PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbjxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6QWRkRXZlbnRMaXN0ZW5lcj4g
OiBwdWJsaWMgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6QWRkRXZlbnRMaXN0ZW5lcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgSlNF
dmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRF
dmVudExpc3RlbmVyPihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJ
ZGVudGlmaWVyJiBuYW1lKSAKKyAgICAgICAgICAgIDogSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1
bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6QWRkRXZlbnRMaXN0ZW5lcj4oZXhl
YywgbGVuLCBuYW1lKQorICAgICAgICB7IAorICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBL
SlM6OkpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEtKUzo6RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisKKyAg
ICAgICAgICAgIE5vZGUqIGV2ZW50Tm9kZSA9IDA7CisgICAgICAgICAgICBFdmVudFRhcmdldCog
ZXZlbnRUYXJnZXQgPSAwOworICAgICAgICAgICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5k
Q29ycmVzcG9uZGluZ05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnROb2RlLCBldmVudFRhcmdldCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBLSlM6OlR5cGVF
cnJvcik7CisKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGV2ZW50Tm9kZS0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKKyAgICAgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgaWYgKEpTRXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpLT5maW5kT3JD
cmVhdGVKU0V2ZW50TGlzdGVuZXIoYXJnc1sxXSkpCisgICAgICAgICAgICAgICAgZXZlbnRUYXJn
ZXQtPmFkZEV2ZW50TGlzdGVuZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLCBh
cmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOworCisgICAgICAgICAgICByZXR1cm4gS0pTOjpqc1Vu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBjbGFz
cyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb248SlNFdmVudFRhcmdldFByb3BlcnRpZXM6
OlJlbW92ZUV2ZW50TGlzdGVuZXI+IDogcHVibGljIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5j
dGlvbkJhc2U8SlNFdmVudFRhcmdldFByb3BlcnRpZXM6OlJlbW92ZUV2ZW50TGlzdGVuZXI+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbjxKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZlbnRMaXN0ZW5lcj4oS0pTOjpFeGVjU3RhdGUq
IGV4ZWMsIGludCBsZW4sIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgbmFtZSkgCisgICAgICAgICAg
ICA6IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRhcmdldFByb3Bl
cnRpZXM6OlJlbW92ZUV2ZW50TGlzdGVuZXI+KGV4ZWMsIGxlbiwgbmFtZSkKKyAgICAgICAgeyAK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgS0pTOjpKU1ZhbHVlKiBjYWxsQXNGdW5jdGlv
bihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU09iamVjdCogdGhpc09iaiwgY29uc3QgS0pT
OjpMaXN0JiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBLSlM6OkRPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworCisgICAgICAgICAgICBOb2RlKiBldmVudE5vZGUg
PSAwOworICAgICAgICAgICAgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0ID0gMDsKKyAgICAgICAg
ICAgIGlmICghcmV0cmlldmVFdmVudFRhcmdldEFuZENvcnJlc3BvbmRpbmdOb2RlKGV4ZWMsIHRo
aXNPYmosIGV2ZW50Tm9kZSwgZXZlbnRUYXJnZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBL
SlM6OnRocm93RXJyb3IoZXhlYywgS0pTOjpUeXBlRXJyb3IpOworCisgICAgICAgICAgICBGcmFt
ZSogZnJhbWUgPSBldmVudE5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgICAgICAgICBp
ZiAoIWZyYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisK
KyAgICAgICAgICAgIGlmIChKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gS0pTOjpXaW5kb3c6
OnJldHJpZXZlV2luZG93KGZyYW1lKS0+ZmluZEpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKSkKKyAg
ICAgICAgICAgICAgICBldmVudFRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50
b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CisKKyAg
ICAgICAgICAgIHJldHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICB9Owor
IAorICAgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rp
b248SlNFdmVudFRhcmdldFByb3BlcnRpZXM6OkRpc3BhdGNoRXZlbnQ+IDogcHVibGljIEpTRXZl
bnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRhcmdldFByb3BlcnRpZXM6OkRp
c3BhdGNoRXZlbnQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRUYXJnZXRQcm90b3R5
cGVGdW5jdGlvbjxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4oS0pTOjpF
eGVjU3RhdGUqIGV4ZWMsIGludCBsZW4sIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgbmFtZSkgCisg
ICAgICAgICAgICA6IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRh
cmdldFByb3BlcnRpZXM6OkRpc3BhdGNoRXZlbnQ+KGV4ZWMsIGxlbiwgbmFtZSkKKyAgICAgICAg
eyAKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgS0pTOjpKU1ZhbHVlKiBjYWxsQXNGdW5j
dGlvbihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
S0pTOjpMaXN0JiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBOb2RlKiBldmVudE5vZGUg
PSAwOworICAgICAgICAgICAgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0ID0gMDsKKyAgICAgICAg
ICAgIGlmICghcmV0cmlldmVFdmVudFRhcmdldEFuZENvcnJlc3BvbmRpbmdOb2RlKGV4ZWMsIHRo
aXNPYmosIGV2ZW50Tm9kZSwgZXZlbnRUYXJnZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBL
SlM6OnRocm93RXJyb3IoZXhlYywgS0pTOjpUeXBlRXJyb3IpOworCisgICAgICAgICAgICBLSlM6
OkRPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgICAgICAgICAgcmV0
dXJuIEtKUzo6anNCb29sZWFuKGV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KHRvRXZlbnQoYXJn
c1swXSksIGV4Y2VwdGlvbikpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFRoaXMgY3Jl
YXRpb24gZnVuY3Rpb24gcmVsaWVzIHVwb24gYWJvdmUgc3BlY2lhbGl6YXRpb25zCisgICAgdGVt
cGxhdGU8aW50IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXI+CisgICAg
S0pTOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKiBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25C
YXNlPEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXI+OjpjcmVhdGUoS0pT
OjpFeGVjU3RhdGUqIGV4ZWMsIGludCBsZW4sIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgbmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
PEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbklkZW50aWZpZXI+KGV4ZWMsIGxlbiwgbmFt
ZSk7IAorICAgIH0KK307CisKKy8vIE5lZWRzIHRvIGJlIGluY2x1ZGVkIGFmdGVyIGFib3ZlIGRl
Y2xhcmF0aW9uCisjaW5jbHVkZSAiSlNFdmVudFRhcmdldEJhc2UubHV0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgIHRlbXBsYXRlPGNsYXNzIEpTRXZlbnRUYXJnZXQ+CisgICAgY2xh
c3MgSlNFdmVudFRhcmdldEJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVudFRhcmdl
dEJhc2UoKSB7IH0KKworICAgICAgICAvLyBJbXBsZW1lbnRlZCBsb2NhbGx5IC0gbmVlZHMgZ2V0
TGlzdGVuZXIvc2V0TGlzdGVuZXIKKyAgICAgICAgS0pTOjpKU1ZhbHVlKiBnZXRWYWx1ZVByb3Bl
cnR5KGNvbnN0IEpTRXZlbnRUYXJnZXQqIG93bmVyLCBLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkFib3J0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBvd25lci0+Z2V0TGlzdGVuZXIoYWJvcnRFdmVudCk7CisgICAgICAg
ICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkJsdXI6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5lcihibHVyRXZlbnQpOworICAgICAgICAgICAgY2Fz
ZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25DaGFuZ2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG93bmVyLT5nZXRMaXN0ZW5lcihjaGFuZ2VFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNsaWNrOgorICAgICAgICAgICAgICAgIHJldHVybiBv
d25lci0+Z2V0TGlzdGVuZXIoY2xpY2tFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkNvbnRleHRNZW51OgorICAgICAgICAgICAgICAgIHJldHVybiBv
d25lci0+Z2V0TGlzdGVuZXIoY29udGV4dG1lbnVFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRibENsaWNrOgorICAgICAgICAgICAgICAgIHJldHVy
biBvd25lci0+Z2V0TGlzdGVuZXIoZGJsY2xpY2tFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBv
d25lci0+Z2V0TGlzdGVuZXIoZXJyb3JFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkZvY3VzOgorICAgICAgICAgICAgICAgIHJldHVybiBvd25lci0+
Z2V0TGlzdGVuZXIoZm9jdXNFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbklucHV0OgorICAgICAgICAgICAgICAgIHJldHVybiBvd25lci0+Z2V0TGlz
dGVuZXIoaW5wdXRFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbktleURvd246CisgICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5l
cihrZXlkb3duRXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25LZXlQcmVzczoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVy
KGtleXByZXNzRXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25LZXlVcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKGtl
eXVwRXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25M
b2FkOgorICAgICAgICAgICAgICAgIHJldHVybiBvd25lci0+Z2V0TGlzdGVuZXIobG9hZEV2ZW50
KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VEb3du
OgorICAgICAgICAgICAgICAgIHJldHVybiBvd25lci0+Z2V0TGlzdGVuZXIobW91c2Vkb3duRXZl
bnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU1v
dmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5lcihtb3VzZW1vdmVF
dmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNl
T3V0OgorICAgICAgICAgICAgICAgIHJldHVybiBvd25lci0+Z2V0TGlzdGVuZXIobW91c2VvdXRF
dmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNl
T3ZlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKG1vdXNlb3Zl
ckV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91
c2VVcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKG1vdXNldXBF
dmVudCk7ICAgICAgCisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpP
bk1vdXNlV2hlZWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5lciht
b3VzZXdoZWVsRXZlbnQpOyAgICAgIAorICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJv
cGVydGllczo6T25CZWZvcmVDdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyLT5nZXRM
aXN0ZW5lcihiZWZvcmVjdXRFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkN1dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3Rl
bmVyKGN1dEV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uQmVmb3JlQ29weToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVy
KGJlZm9yZWNvcHlFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbkNvcHk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5lcihj
b3B5RXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25C
ZWZvcmVQYXN0ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKGJl
Zm9yZXBhc3RlRXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25QYXN0ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKHBh
c3RlRXZlbnQpOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25E
cmFnRW50ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5lcihkcmFn
ZW50ZXJFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpP
bkRyYWdPdmVyOgorICAgICAgICAgICAgICAgIHJldHVybiBvd25lci0+Z2V0TGlzdGVuZXIoZHJh
Z292ZXJFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpP
bkRyYWdMZWF2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKGRy
YWdsZWF2ZUV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uRHJvcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKGRyb3BF
dmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdT
dGFydDoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKGRyYWdzdGFy
dEV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJh
ZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKGRyYWdFdmVudCk7
CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdFbmQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5lcihkcmFnZW5kRXZlbnQpOwor
ICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25SZXNldDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKHJlc2V0RXZlbnQpOworICAgICAg
ICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25SZXNpemU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG93bmVyLT5nZXRMaXN0ZW5lcihyZXNpemVFdmVudCk7CisgICAgICAgICAg
ICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNjcm9sbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gb3duZXItPmdldExpc3RlbmVyKHNjcm9sbEV2ZW50KTsKKyAgICAgICAgICAgIGNh
c2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uU2VhcmNoOgorICAgICAgICAgICAgICAgIHJl
dHVybiBvd25lci0+Z2V0TGlzdGVuZXIoc2VhcmNoRXZlbnQpOworICAgICAgICAgICAgY2FzZSBK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TZWxlY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG93bmVyLT5nZXRMaXN0ZW5lcihzZWxlY3RFdmVudCk7CisgICAgICAgICAgICBjYXNlIEpTRXZl
bnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNlbGVjdFN0YXJ0OgorICAgICAgICAgICAgICAgIHJldHVy
biBvd25lci0+Z2V0TGlzdGVuZXIoc2VsZWN0c3RhcnRFdmVudCk7CisgICAgICAgICAgICBjYXNl
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblN1Ym1pdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3duZXItPmdldExpc3RlbmVyKHN1Ym1pdEV2ZW50KTsKKyAgICAgICAgICAgIGNhc2UgSlNF
dmVudFRhcmdldFByb3BlcnRpZXM6Ok9uVW5sb2FkOgorICAgICAgICAgICAgICAgIHJldHVybiBv
d25lci0+Z2V0TGlzdGVuZXIodW5sb2FkRXZlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gS0pTOjpqc1VuZGVmaW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBwdXRWYWx1ZVByb3BlcnR5KGNvbnN0IEpTRXZlbnRUYXJnZXQqIG93bmVyLCBLSlM6OkV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuLCBLSlM6OkpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cikKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAgICAgY2FzZSBK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25BYm9ydDoKKyAgICAgICAgICAgICAgICBvd25lci0+
c2V0TGlzdGVuZXIoZXhlYywgYWJvcnRFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CbHVyOgor
ICAgICAgICAgICAgICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVjLCBibHVyRXZlbnQsIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdl
dFByb3BlcnRpZXM6Ok9uQ2hhbmdlOgorICAgICAgICAgICAgICAgIG93bmVyLT5zZXRMaXN0ZW5l
cihleGVjLCBjaGFuZ2VFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25DbGljazoKKyAgICAgICAg
ICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIoZXhlYywgY2xpY2tFdmVudCwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25Db250ZXh0TWVudToKKyAgICAgICAgICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIo
ZXhlYywgY29udGV4dG1lbnVFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EYmxDbGljazoKKyAg
ICAgICAgICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIoZXhlYywgZGJsY2xpY2tFdmVudCwgdmFs
dWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFy
Z2V0UHJvcGVydGllczo6T25FcnJvcjoKKyAgICAgICAgICAgICAgICBvd25lci0+c2V0TGlzdGVu
ZXIoZXhlYywgZXJyb3JFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Gb2N1czoKKyAgICAgICAg
ICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIoZXhlYywgZm9jdXNFdmVudCwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25JbnB1dDoKKyAgICAgICAgICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIoZXhlYywg
aW5wdXRFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlEb3duOgorICAgICAgICAgICAgICAg
IG93bmVyLT5zZXRMaXN0ZW5lcihleGVjLCBrZXlkb3duRXZlbnQsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uS2V5UHJlc3M6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIGtl
eXByZXNzRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uS2V5VXA6CisgICAgICAgICAgICAgICAg
b3duZXItPnNldExpc3RlbmVyKGV4ZWMsIGtleXVwRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
TG9hZDoKKyAgICAgICAgICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIoZXhlYywgbG9hZEV2ZW50
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZl
bnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlRG93bjoKKyAgICAgICAgICAgICAgICBvd25lci0+
c2V0TGlzdGVuZXIoZXhlYywgbW91c2Vkb3duRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91
c2VNb3ZlOgorICAgICAgICAgICAgICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVjLCBtb3VzZW1v
dmVFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU91dDoKKyAgICAgICAgICAgICAgICBv
d25lci0+c2V0TGlzdGVuZXIoZXhlYywgbW91c2VvdXRFdmVudCwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
T25Nb3VzZU92ZXI6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIG1v
dXNlb3ZlckV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlVXA6CisgICAgICAgICAgICAg
ICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIG1vdXNldXBFdmVudCwgdmFsdWUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25Nb3VzZVdoZWVsOgorICAgICAgICAgICAgICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVj
LCBtb3VzZXdoZWVsRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlQ3V0OgorICAgICAg
ICAgICAgICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVjLCBiZWZvcmVjdXRFdmVudCwgdmFsdWUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6T25DdXQ6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4
ZWMsIGN1dEV2ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkJlZm9yZUNvcHk6CisgICAgICAgICAg
ICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIGJlZm9yZWNvcHlFdmVudCwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJv
cGVydGllczo6T25Db3B5OgorICAgICAgICAgICAgICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVj
LCBjb3B5RXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlUGFzdGU6CisgICAgICAgICAg
ICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIGJlZm9yZXBhc3RlRXZlbnQsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6Ok9uUGFzdGU6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4
ZWMsIHBhc3RlRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZ0VudGVyOgorICAgICAgICAg
ICAgICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVjLCBkcmFnZW50ZXJFdmVudCwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJv
cGVydGllczo6T25EcmFnT3ZlcjoKKyAgICAgICAgICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIo
ZXhlYywgZHJhZ292ZXJFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnTGVhdmU6CisgICAg
ICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIGRyYWdsZWF2ZUV2ZW50LCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkRyb3A6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVy
KGV4ZWMsIGRyb3BFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnU3RhcnQ6CisgICAgICAg
ICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIGRyYWdzdGFydEV2ZW50LCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkRyYWc6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4
ZWMsIGRyYWdFdmVudCwgdmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnRW5kOgorICAgICAgICAgICAg
ICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVjLCBkcmFnZW5kRXZlbnQsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRp
ZXM6Ok9uUmVzZXQ6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIHJl
c2V0RXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uUmVzaXplOgorICAgICAgICAgICAgICAgIG93
bmVyLT5zZXRMaXN0ZW5lcihleGVjLCByZXNpemVFdmVudCwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25T
Y3JvbGw6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIHNjcm9sbEV2
ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNlYXJjaDoKKyAgICAgICAgICAgICAgICBvd25lci0+
c2V0TGlzdGVuZXIoZXhlYywgc2VhcmNoRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uU2VsZWN0
OgorICAgICAgICAgICAgICAgIG93bmVyLT5zZXRMaXN0ZW5lcihleGVjLCBzZWxlY3RFdmVudCwg
dmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50
VGFyZ2V0UHJvcGVydGllczo6T25TZWxlY3RTdGFydDoKKyAgICAgICAgICAgICAgICBvd25lci0+
c2V0TGlzdGVuZXIoZXhlYywgc2VsZWN0c3RhcnRFdmVudCwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25T
dWJtaXQ6CisgICAgICAgICAgICAgICAgb3duZXItPnNldExpc3RlbmVyKGV4ZWMsIHN1Ym1pdEV2
ZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblVubG9hZDoKKyAgICAgICAgICAgICAgICBvd25lci0+
c2V0TGlzdGVuZXIoZXhlYywgdW5sb2FkRXZlbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTRXZlbnRUYXJnZXROb2RlOworICAgICAgICBmcmllbmQgY2xhc3MgSlNF
dmVudFRhcmdldFNWR0VsZW1lbnRJbnN0YW5jZTsKKworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBK
U1BhcmVudD4KKyAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNFdmVudFRhcmdldCog
b3duZXIsIEtKUzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgS0pTOjpQcm9wZXJ0eVNsb3QmIHNsb3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBLSlM6OmdldFN0YXRpY1ZhbHVlU2xvdDxKU0V2ZW50VGFyZ2V0LCBKU1BhcmVudD4o
ZXhlYywgJktKUzo6SlNFdmVudFRhcmdldFByb3BlcnRpZXNUYWJsZSwgb3duZXIsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBKU1BhcmVu
dD4KKyAgICAgICAgdm9pZCBwdXQoSlNFdmVudFRhcmdldCogb3duZXIsIEtKUzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgS0pTOjpKU1ZhbHVl
KiB2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEtKUzo6bG9va3VwUHV0
PEpTRXZlbnRUYXJnZXQsIEpTUGFyZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
LCAmS0pTOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllc1RhYmxlLCBvd25lcik7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLy8gVGhpcyBjbGFzcyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhl
IGNvZGUgdGhlIEtKU19ERUZJTkVfUFJPVE9UWVBFX1dJVEhfUFJPVE9UWVBFCisgICAgLy8gYW5k
IEtKU19JTVBMRU1FTlRfUFJPVE9UWVBFIG1hY3JvcyBwcm9kdWNlIC0gdGhlIGlkZWEgaXMgdGhh
dCBjbGFzc2VzIGxpa2UgSlNFdmVudFRhcmdldE5vZGUKKyAgICAvLyBhbmQgSlNFdmVudFRhcmdl
dFNWR0VsZW1lbnRJbnN0YW5jZSBjYW4gc2hhcmUgYSBzaW5nbGUgcHJvdG90eXBlIGp1c3QgZGlm
ZmVyaW5nIGluIHRoZQorICAgIC8vIG5hbWluZyAiRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlIiB2
cyAiRXZlbnRUYXJnZXRTVkdFbGVtZW50SW5zdGFuY2VQcm90b3R5cGUiLiBBYm92ZSBtZW50aW9u
ZWQKKyAgICAvLyBtYWNyb3MgZm9yY2UgdGhlIGV4aXN0YW5jZSBvZiBzZXZlcmFsIHByb3RvdHlw
ZSB0YWJsZXMgZm9yIGVhY2ggb2YgdGhlIGNsYXNzZXMgLSBhdm9pZCB0aGF0LgorICAgIHRlbXBs
YXRlPGNsYXNzIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVQYXJlbnQ+CisgICAgY2xhc3MgSlNFdmVu
dFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBLSlM6OkpTT2JqZWN0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEpTRXZlbnRUYXJnZXRQcm90b3R5cGUoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpCisgICAg
ICAgICAgICA6IEtKUzo6SlNPYmplY3QoSlNFdmVudFRhcmdldFByb3RvdHlwZVBhcmVudDo6c2Vs
ZihleGVjKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEtKUzo6SlNP
YmplY3QqIHNlbGYoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN0YXRpYyBLSlM6OklkZW50aWZpZXIqIHByb3RvdHlwZU5hbWUgPSBuZXcgS0pTOjpJZGVudGlm
aWVyKFN0cmluZzo6Zm9ybWF0KCJbWyVzLnByb3RvdHlwZV1dIiwgc19wcm90b3R5cGVOYW1lKS5s
YXRpbjEoKS5kYXRhKCkpOworCisgICAgICAgICAgICBLSlM6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAo
S0pTOjpKU1ZhbHVlKiBvYmplY3RWYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0KCpwcm90
b3R5cGVOYW1lKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChvYmplY3RWYWx1ZS0+aXNPYmpl
Y3QoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6SlNPYmplY3Qq
PihvYmplY3RWYWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEtKUzo6SlNPYmpl
Y3QqIG5ld09iamVjdCA9IG5ldyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlPEpTRXZlbnRUYXJnZXRQ
cm90b3R5cGVQYXJlbnQ+KGV4ZWMpOworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXQoZXhl
YywgKnByb3RvdHlwZU5hbWUsIG5ld09iamVjdCwgS0pTOjpJbnRlcm5hbCB8IEtKUzo6RG9udEVu
dW0pOworICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBLSlM6
OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgS0pTOjpQcm9wZXJ0eVNsb3QmIHNsb3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBLSlM6OmdldFN0YXRpY0Z1bmN0aW9uU2xvdDxLSlM6
OkpTT2JqZWN0PihleGVjLCAmS0pTOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGUsIHRoaXMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIGNvbnN0
IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gc19jbGFzc0luZm8gPSB7IFN0cmluZzo6Zm9y
bWF0KCIlc1Byb3RvdHlwZSIsIHNfcHJvdG90eXBlTmFtZSkubGF0aW4xKCkuZGF0YSgpLCAwLCAm
S0pTOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGUgfTsKKyAgICAgICAgICAgIHJldHVybiAm
c19jbGFzc0luZm87CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzX3Byb3RvdHlwZU5hbWU7CisgICAgfTsKKworfTsgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEpTRXZlbnRUYXJnZXRCYXNlX2gKSW5kZXg6IGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDI4NzM4KQorKysgYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDY5ICsyNywxMyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXROb2RlLmgiCiAKLSNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50Lmgi
Ci0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJFdmVudFRhcmdldE5vZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkpTRXZlbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAia2pzX2V2ZW50cy5oIgot
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKLQotI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXROb2RlLmx1
dC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIAotLyogU291cmNlIGZvciBKU0V2ZW50VGFyZ2V0Tm9k
ZVRhYmxlCi1AYmVnaW4gSlNFdmVudFRhcmdldE5vZGVUYWJsZSA1MAotb25hYm9ydCAgICAgICBX
ZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25BYm9ydCAgICAgICAgICAgICAgICBEb250RGVs
ZXRlCi1vbmJsdXIgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkJsdXIgICAg
ICAgICAgICAgICAgIERvbnREZWxldGUKLW9uY2hhbmdlICAgICAgV2ViQ29yZTo6SlNFdmVudFRh
cmdldE5vZGU6Ok9uQ2hhbmdlICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25jbGljayAgICAg
ICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25DbGljayAgICAgICAgICAgICAgICBEb250
RGVsZXRlCi1vbmNvbnRleHRtZW51IFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkNvbnRl
eHRNZW51ICAgICAgICAgIERvbnREZWxldGUKLW9uZGJsY2xpY2sgICAgV2ViQ29yZTo6SlNFdmVu
dFRhcmdldE5vZGU6Ok9uRGJsQ2xpY2sgICAgICAgICAgICAgRG9udERlbGV0ZQotb25iZWZvcmVj
dXQgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25CZWZvcmVDdXQgICAgICAgICAgICBE
b250RGVsZXRlCi1vbmN1dCAgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkN1
dCAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uYmVmb3JlY29weSAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldE5vZGU6Ok9uQmVmb3JlQ29weSAgICAgICAgICAgRG9udERlbGV0ZQotb25jb3B5
ICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25Db3B5ICAgICAgICAgICAgICAg
ICBEb250RGVsZXRlCi1vbmJlZm9yZXBhc3RlIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpP
bkJlZm9yZVBhc3RlICAgICAgICAgIERvbnREZWxldGUKLW9ucGFzdGUgICAgICAgV2ViQ29yZTo6
SlNFdmVudFRhcmdldE5vZGU6Ok9uUGFzdGUgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25k
cmFnICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFnICAgICAgICAgICAg
ICAgICBEb250RGVsZXRlCi1vbmRyYWdlbmQgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2Rl
OjpPbkRyYWdFbmQgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uZHJhZ2VudGVyICAgV2ViQ29y
ZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRHJhZ0VudGVyICAgICAgICAgICAgRG9udERlbGV0ZQot
b25kcmFnbGVhdmUgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFnTGVhdmUgICAg
ICAgICAgICBEb250RGVsZXRlCi1vbmRyYWdvdmVyICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRO
b2RlOjpPbkRyYWdPdmVyICAgICAgICAgICAgIERvbnREZWxldGUKLW9uZHJhZ3N0YXJ0ICAgV2Vi
Q29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRHJhZ1N0YXJ0ICAgICAgICAgICAgRG9udERlbGV0
ZQotb25kcm9wICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25Ecm9wICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlCi1vbmVycm9yICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJn
ZXROb2RlOjpPbkVycm9yICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uZm9jdXMgICAgICAg
V2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRm9jdXMgICAgICAgICAgICAgICAgRG9udERl
bGV0ZQotb25pbnB1dCAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25JbnB1dCAg
ICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmtleWRvd24gICAgIFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXROb2RlOjpPbktleURvd24gICAgICAgICAgICAgIERvbnREZWxldGUKLW9ua2V5cHJlc3Mg
ICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uS2V5UHJlc3MgICAgICAgICAgICAgRG9u
dERlbGV0ZQotb25rZXl1cCAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25LZXlV
cCAgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmxvYWQgICAgICAgIFdlYkNvcmU6OkpTRXZl
bnRUYXJnZXROb2RlOjpPbkxvYWQgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9ubW91c2Vk
b3duICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTW91c2VEb3duICAgICAgICAgICAg
RG9udERlbGV0ZQotb25tb3VzZW1vdmUgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25N
b3VzZU1vdmUgICAgICAgICAgICBEb250RGVsZXRlCi1vbm1vdXNlb3V0ICAgIFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXROb2RlOjpPbk1vdXNlT3V0ICAgICAgICAgICAgIERvbnREZWxldGUKLW9ubW91
c2VvdmVyICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTW91c2VPdmVyICAgICAgICAg
ICAgRG9udERlbGV0ZQotb25tb3VzZXVwICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
T25Nb3VzZVVwICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbm1vdXNld2hlZWwgIFdlYkNvcmU6
OkpTRXZlbnRUYXJnZXROb2RlOjpPbk1vdXNlV2hlZWwgICAgICAgICAgIERvbnREZWxldGUKLW9u
cmVzZXQgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uUmVzZXQgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZQotb25yZXNpemUgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9k
ZTo6T25SZXNpemUgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnNjcm9sbCAgICAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblNjcm9sbCAgICAgICAgICAgICAgIERvbnREZWxldGUK
LW9uc2VhcmNoICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uU2VhcmNoICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQotb25zZWxlY3QgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
Tm9kZTo6T25TZWxlY3QgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnNlbGVjdHN0YXJ0IFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblNlbGVjdFN0YXJ0ICAgICAgICAgIERvbnREZWxl
dGUKLW9uc3VibWl0ICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uU3VibWl0ICAg
ICAgICAgICAgICAgRG9udERlbGV0ZQotb251bmxvYWQgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFy
Z2V0Tm9kZTo6T25VbmxvYWQgICAgICAgICAgICAgICBEb250RGVsZXRlCi1AZW5kCi0qLworLy8g
QXNzaWduIG5hbWUgdG8gc2hhcmVkIHByb3RvdHlwZSBvYmplY3QKK3RlbXBsYXRlPD4KK2NvbnN0
IGNoYXIqIEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlOjpzX3Byb3RvdHlwZU5hbWUgPSAiRXZl
bnRUYXJnZXROb2RlIjsKIAogSlNFdmVudFRhcmdldE5vZGU6OkpTRXZlbnRUYXJnZXROb2RlKEV4
ZWNTdGF0ZSogZXhlYywgTm9kZSogbikKICAgICA6IEpTTm9kZShleGVjLCBuKQpAQCAtOTgsMjI5
ICs0MywyNSBAQCBKU0V2ZW50VGFyZ2V0Tm9kZTo6SlNFdmVudFRhcmdldE5vZGUoRXhlCiAKIGJv
b2wgSlNFdmVudFRhcmdldE5vZGU6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNFdmVudFRhcmdldE5vZGUsIEpTTm9kZT4o
ZXhlYywgJkpTRXZlbnRUYXJnZXROb2RlVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CisgICAgcmV0dXJuIG1fYmFzZS5nZXRPd25Qcm9wZXJ0eVNsb3Q8SlNOb2RlPih0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiBKU1ZhbHVlKiBKU0V2ZW50VGFyZ2V0Tm9kZTo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2UgT25BYm9ydDoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihhYm9ydEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkJsdXI6Ci0gICAg
ICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoYmx1ckV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkNo
YW5nZToKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihjaGFuZ2VFdmVudCk7Ci0gICAg
ICAgIGNhc2UgT25DbGljazoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihjbGlja0V2
ZW50KTsKLSAgICAgICAgY2FzZSBPbkNvbnRleHRNZW51OgotICAgICAgICAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGNvbnRleHRtZW51RXZlbnQpOwotICAgICAgICBjYXNlIE9uRGJsQ2xpY2s6Ci0g
ICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZGJsY2xpY2tFdmVudCk7Ci0gICAgICAgIGNh
c2UgT25FcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihlcnJvckV2ZW50KTsK
LSAgICAgICAgY2FzZSBPbkZvY3VzOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGZv
Y3VzRXZlbnQpOwotICAgICAgICBjYXNlIE9uSW5wdXQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0
TGlzdGVuZXIoaW5wdXRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25LZXlEb3duOgotICAgICAgICAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGtleWRvd25FdmVudCk7Ci0gICAgICAgIGNhc2UgT25LZXlQ
cmVzczoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihrZXlwcmVzc0V2ZW50KTsKLSAg
ICAgICAgY2FzZSBPbktleVVwOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGtleXVw
RXZlbnQpOwotICAgICAgICBjYXNlIE9uTG9hZDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0
ZW5lcihsb2FkRXZlbnQpOwotICAgICAgICBjYXNlIE9uTW91c2VEb3duOgotICAgICAgICAgICAg
cmV0dXJuIGdldExpc3RlbmVyKG1vdXNlZG93bkV2ZW50KTsKLSAgICAgICAgY2FzZSBPbk1vdXNl
TW92ZToKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihtb3VzZW1vdmVFdmVudCk7Ci0g
ICAgICAgIGNhc2UgT25Nb3VzZU91dDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lciht
b3VzZW91dEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbk1vdXNlT3ZlcjoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihtb3VzZW92ZXJFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Nb3VzZVVw
OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKG1vdXNldXBFdmVudCk7ICAgICAgCi0g
ICAgICAgIGNhc2UgT25Nb3VzZVdoZWVsOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVy
KG1vdXNld2hlZWxFdmVudCk7ICAgICAgCi0gICAgICAgIGNhc2UgT25CZWZvcmVDdXQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoYmVmb3JlY3V0RXZlbnQpOwotICAgICAgICBjYXNl
IE9uQ3V0OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGN1dEV2ZW50KTsKLSAgICAg
ICAgY2FzZSBPbkJlZm9yZUNvcHk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoYmVm
b3JlY29weUV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkNvcHk6Ci0gICAgICAgICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIoY29weUV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkJlZm9yZVBhc3RlOgotICAg
ICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGJlZm9yZXBhc3RlRXZlbnQpOwotICAgICAgICBj
YXNlIE9uUGFzdGU6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIocGFzdGVFdmVudCk7
Ci0gICAgICAgIGNhc2UgT25EcmFnRW50ZXI6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoZHJhZ2VudGVyRXZlbnQpOwotICAgICAgICBjYXNlIE9uRHJhZ092ZXI6Ci0gICAgICAgICAg
ICByZXR1cm4gZ2V0TGlzdGVuZXIoZHJhZ292ZXJFdmVudCk7Ci0gICAgICAgIGNhc2UgT25EcmFn
TGVhdmU6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZHJhZ2xlYXZlRXZlbnQpOwot
ICAgICAgICBjYXNlIE9uRHJvcDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihkcm9w
RXZlbnQpOwotICAgICAgICBjYXNlIE9uRHJhZ1N0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGRyYWdzdGFydEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyYWc6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZHJhZ0V2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyYWdF
bmQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZHJhZ2VuZEV2ZW50KTsKLSAgICAg
ICAgY2FzZSBPblJlc2V0OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKHJlc2V0RXZl
bnQpOwotICAgICAgICBjYXNlIE9uUmVzaXplOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKHJlc2l6ZUV2ZW50KTsKLSAgICAgICAgY2FzZSBPblNjcm9sbDoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihzY3JvbGxFdmVudCk7Ci0gICAgICAgIGNhc2UgT25TZWFyY2g6Ci0g
ICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoc2VhcmNoRXZlbnQpOwotICAgICAgICBjYXNl
IE9uU2VsZWN0OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKHNlbGVjdEV2ZW50KTsK
LSAgICAgICAgY2FzZSBPblNlbGVjdFN0YXJ0OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKHNlbGVjdHN0YXJ0RXZlbnQpOwotICAgICAgICBjYXNlIE9uU3VibWl0OgotICAgICAgICAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKHN1Ym1pdEV2ZW50KTsKLSAgICAgICAgY2FzZSBPblVubG9h
ZDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcih1bmxvYWRFdmVudCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIG1fYmFzZS5nZXRWYWx1ZVBy
b3BlcnR5KHRoaXMsIGV4ZWMsIHRva2VuKTsKIH0KIAogdm9pZCBKU0V2ZW50VGFyZ2V0Tm9kZTo6
cHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlKiB2YWx1ZSwgaW50IGF0dHIpCiB7Ci0gICAgbG9va3VwUHV0PEpTRXZlbnRUYXJnZXROb2Rl
LCBKU05vZGU+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU0V2ZW50VGFyZ2V0
Tm9kZVRhYmxlLCB0aGlzKTsKKyAgICBtX2Jhc2UucHV0PEpTTm9kZT4odGhpcywgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CiB9CiAKLXZvaWQgSlNFdmVudFRhcmdldE5vZGU6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUqIHZhbHVl
LCBpbnQgLyphdHRyKi8pCit2b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpCiB7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIE9uQWJvcnQ6Ci0gICAgICAgICAg
ICBzZXRMaXN0ZW5lcihleGVjLCBhYm9ydEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBPbkJsdXI6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBi
bHVyRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uQ2hh
bmdlOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgY2hhbmdlRXZlbnQsIHZhbHVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uQ2xpY2s6Ci0gICAgICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLCBjbGlja0V2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBPbkNvbnRleHRNZW51OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhl
YywgY29udGV4dG1lbnVFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgT25EYmxDbGljazoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGRibGNsaWNr
RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRXJyb3I6
Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBlcnJvckV2ZW50LCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkZvY3VzOgotICAgICAgICAgICAgc2V0TGlz
dGVuZXIoZXhlYywgZm9jdXNFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgT25JbnB1dDoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGlucHV0RXZl
bnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uS2V5RG93bjoK
LSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGtleWRvd25FdmVudCwgdmFsdWUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25LZXlQcmVzczoKLSAgICAgICAgICAgIHNl
dExpc3RlbmVyKGV4ZWMsIGtleXByZXNzRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE9uS2V5VXA6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBr
ZXl1cEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkxv
YWQ6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBsb2FkRXZlbnQsIHZhbHVlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uTW91c2VEb3duOgotICAgICAgICAgICAg
c2V0TGlzdGVuZXIoZXhlYywgbW91c2Vkb3duRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE9uTW91c2VNb3ZlOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywgbW91c2Vtb3ZlRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE9uTW91c2VPdXQ6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBtb3VzZW91
dEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNl
T3ZlcjoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIG1vdXNlb3ZlckV2ZW50LCB2YWx1
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlVXA6Ci0gICAgICAg
ICAgICBzZXRMaXN0ZW5lcihleGVjLCBtb3VzZXVwRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE9uTW91c2VXaGVlbDoKLSAgICAgICAgICAgIHNldExpc3Rl
bmVyKGV4ZWMsIG1vdXNld2hlZWxFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT25CZWZvcmVDdXQ6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBi
ZWZvcmVjdXRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25DdXQ6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBjdXRFdmVudCwgdmFsdWUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25CZWZvcmVDb3B5OgotICAgICAgICAg
ICAgc2V0TGlzdGVuZXIoZXhlYywgYmVmb3JlY29weUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBPbkNvcHk6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihl
eGVjLCBjb3B5RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE9uQmVmb3JlUGFzdGU6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBiZWZvcmVwYXN0
ZUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPblBhc3Rl
OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgcGFzdGVFdmVudCwgdmFsdWUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25EcmFnRW50ZXI6Ci0gICAgICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLCBkcmFnZW50ZXJFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgT25EcmFnT3ZlcjoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4
ZWMsIGRyYWdvdmVyRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE9uRHJhZ0xlYXZlOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZHJhZ2xlYXZl
RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJvcDoK
LSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGRyb3BFdmVudCwgdmFsdWUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25EcmFnU3RhcnQ6Ci0gICAgICAgICAgICBzZXRM
aXN0ZW5lcihleGVjLCBkcmFnc3RhcnRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgT25EcmFnOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZHJh
Z0V2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkRyYWdF
bmQ6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBkcmFnZW5kRXZlbnQsIHZhbHVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uUmVzZXQ6Ci0gICAgICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLCByZXNldEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBPblJlc2l6ZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHJl
c2l6ZUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPblNj
cm9sbDoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHNjcm9sbEV2ZW50LCB2YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPblNlYXJjaDoKLSAgICAgICAgICAg
IHNldExpc3RlbmVyKGV4ZWMsIHNlYXJjaEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBPblNlbGVjdDoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMs
IHNlbGVjdEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
blNlbGVjdFN0YXJ0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgc2VsZWN0c3RhcnRF
dmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25TdWJtaXQ6
Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBzdWJtaXRFdmVudCwgdmFsdWUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25VbmxvYWQ6Ci0gICAgICAgICAgICBzZXRM
aXN0ZW5lcihleGVjLCB1bmxvYWRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgfQorICAgIG1fYmFzZS5wdXRWYWx1ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHRva2VuLCB2YWx1
ZSwgYXR0cik7CiB9CiAKLXZvaWQgSlNFdmVudFRhcmdldE5vZGU6OnNldExpc3RlbmVyKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIEpTVmFsdWUqIGZ1bmMp
IGNvbnN0Cit2b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpzZXRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBKU1ZhbHVlKiBmdW5jKSBjb25zdAog
ewogICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBp
ZiAoZnJhbWUpCkBAIC0zNDEsNjYgKzgyLDExIEBAIHZvaWQgSlNFdmVudFRhcmdldE5vZGU6OnB1
c2hFdmVudEhhbmRsZXIKIHsKIH0KIAotLyoKLUBiZWdpbiBKU0V2ZW50VGFyZ2V0Tm9kZVByb3Rv
dHlwZVRhYmxlIDUKLSMgZnJvbSB0aGUgRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi1hZGRFdmVudExp
c3RlbmVyICAgICAgICAmV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlv
bkFkZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDMKLXJlbW92
ZUV2ZW50TGlzdGVuZXIgICAgICZXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlIERvbnREZWxldGV8RnVuY3Rpb24gMwot
ZGlzcGF0Y2hFdmVudCAgICAgICAgICAgJldlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlUHJvdG90
eXBlRnVuY3Rpb25EaXNwYXRjaEV2ZW50OjpjcmVhdGUgICAgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAxCi1AZW5kCi0qLwotCi1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRSgiRXZlbnRUYXJnZXROb2Rl
IiwgSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGUpCi0KLUpTVmFsdWUqIEpTRXZlbnRUYXJnZXRO
b2RlUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyOjpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpTRXZlbnRUYXJnZXROb2RlOjppbmZvKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBET01FeGNlcHRpb25U
cmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgICBKU0V2ZW50VGFyZ2V0Tm9kZSoganNOb2Rl
ID0gc3RhdGljX2Nhc3Q8SlNFdmVudFRhcmdldE5vZGUqPih0aGlzT2JqKTsKLSAgICBFdmVudFRh
cmdldE5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxFdmVudFRhcmdldE5vZGUqPihqc05vZGUtPmlt
cGwoKSk7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEpTRXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUp
LT5maW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoYXJnc1sxXSk7Ci0gICAgaWYgKGxpc3RlbmVy
KQotICAgICAgICBub2RlLT5hZGRFdmVudExpc3RlbmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
LCBsaXN0ZW5lcixhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYykpOwotICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotfQotCi1KU1ZhbHVlKiBKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
UmVtb3ZlRXZlbnRMaXN0ZW5lcjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmlu
aGVyaXRzKCZKU0V2ZW50VGFyZ2V0Tm9kZTo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRp
b24oZXhlYyk7Ci0gICAgSlNFdmVudFRhcmdldE5vZGUqIGpzTm9kZSA9IHN0YXRpY19jYXN0PEpT
RXZlbnRUYXJnZXROb2RlKj4odGhpc09iaik7Ci0gICAgRXZlbnRUYXJnZXROb2RlKiBub2RlID0g
c3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4oanNOb2RlLT5pbXBsKCkpOwotCi0gICAgRnJh
bWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBKU0V2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gS0pTOjpXaW5kb3c6OnJldHJpZXZlV2luZG93KGZyYW1lKS0+ZmluZEpTRXZlbnRMaXN0
ZW5lcihhcmdzWzFdKTsKLSAgICBpZiAobGlzdGVuZXIpIAotICAgICAgICBub2RlLT5yZW1vdmVF
dmVudExpc3RlbmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lcixhcmdzWzJdLT50
b0Jvb2xlYW4oZXhlYykpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVl
KiBKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudDo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYg
YXJncykKLXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0V2ZW50VGFyZ2V0Tm9kZTo6
aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAg
RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gICAgSlNFdmVudFRhcmdl
dE5vZGUqIGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTRXZlbnRUYXJnZXROb2RlKj4odGhpc09iaik7
Ci0gICAgRXZlbnRUYXJnZXROb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2Rl
Kj4oanNOb2RlLT5pbXBsKCkpOwotICAgIAotICAgIHJldHVybiBqc0Jvb2xlYW4obm9kZS0+ZGlz
cGF0Y2hFdmVudCh0b0V2ZW50KGFyZ3NbMF0pLCBleGNlcHRpb24pKTsKLX0KLQogRXZlbnRUYXJn
ZXROb2RlKiB0b0V2ZW50VGFyZ2V0Tm9kZShKU1ZhbHVlKiB2YWwpCiB7CiAgICAgaWYgKCF2YWwg
fHwgIXZhbC0+aXNPYmplY3QoJkpTRXZlbnRUYXJnZXROb2RlOjppbmZvKSkKICAgICAgICAgcmV0
dXJuIDA7CisKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4oc3RhdGlj
X2Nhc3Q8SlNFdmVudFRhcmdldE5vZGUqPih2YWwpLT5pbXBsKCkpOwogfQogCkluZGV4OiBiaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pT
RXZlbnRUYXJnZXROb2RlLmgJKHJldmlzaW9uIDI4NzM4KQorKysgYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyOCw3IEBACiAjZGVmaW5lIEpT
RXZlbnRUYXJnZXROb2RlX2gKIAogI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIkpTRXZl
bnRUYXJnZXRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzUsNyArMzcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0Tm9kZSA6IHB1
YmxpYyBKU05vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNFdmVudFRhcmdldE5vZGUoS0pT
OjpFeGVjU3RhdGUqLCBOb2RlKiBuKTsKKyAgICAgICAgSlNFdmVudFRhcmdldE5vZGUoS0pTOjpF
eGVjU3RhdGUqLCBOb2RlKik7CiAKICAgICAgICAgdm9pZCBzZXRMaXN0ZW5lcihLSlM6OkV4ZWNT
dGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBLSlM6OkpTVmFsdWUqIGZ1bmMp
IGNvbnN0OwogICAgICAgICBLSlM6OkpTVmFsdWUqIGdldExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKQEAgLTQ2LDI5ICs0OCwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBL
SlM6OklkZW50aWZpZXImLCBLSlM6OkpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0cik7CiAgICAgICAg
IHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSosIGludCB0b2tlbiwgS0pTOjpK
U1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpOwogCi0gICAgICAgIGVudW0geyAgCi0gICAgICAgICAg
ICBBZGRFdmVudExpc3RlbmVyLCBSZW1vdmVFdmVudExpc3RlbmVyLCBEaXNwYXRjaEV2ZW50LAot
ICAgICAgICAgICAgT25BYm9ydCwgT25CbHVyLCBPbkNoYW5nZSwgT25DbGljaywgT25Db250ZXh0
TWVudSwgT25EYmxDbGljaywgT25FcnJvciwKLSAgICAgICAgICAgIE9uRHJhZ0VudGVyLCBPbkRy
YWdPdmVyLCBPbkRyYWdMZWF2ZSwgT25Ecm9wLCBPbkRyYWdTdGFydCwgT25EcmFnLCBPbkRyYWdF
bmQsCi0gICAgICAgICAgICBPbkJlZm9yZUN1dCwgT25DdXQsIE9uQmVmb3JlQ29weSwgT25Db3B5
LCBPbkJlZm9yZVBhc3RlLCBPblBhc3RlLCBPblNlbGVjdFN0YXJ0LAotICAgICAgICAgICAgT25G
b2N1cywgT25JbnB1dCwgT25LZXlEb3duLCBPbktleVByZXNzLCBPbktleVVwLCBPbkxvYWQsIE9u
TW91c2VEb3duLAotICAgICAgICAgICAgT25Nb3VzZU1vdmUsIE9uTW91c2VPdXQsIE9uTW91c2VP
dmVyLCBPbk1vdXNlVXAsIE9uTW91c2VXaGVlbCwgT25SZXNldCwKLSAgICAgICAgICAgIE9uUmVz
aXplLCBPblNjcm9sbCwgT25TZWFyY2gsIE9uU2VsZWN0LCBPblN1Ym1pdCwgT25VbmxvYWQKLSAg
ICAgICAgfTsKKyAgICBwcml2YXRlOgorICAgICAgICBKU0V2ZW50VGFyZ2V0QmFzZTxKU0V2ZW50
VGFyZ2V0Tm9kZT4gbV9iYXNlOwogICAgIH07CiAKKyAgICB0eXBlZGVmIEpTRXZlbnRUYXJnZXRQ
cm90b3R5cGU8SlNOb2RlUHJvdG90eXBlPiBKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZTsKICAg
ICBFdmVudFRhcmdldE5vZGUqIHRvRXZlbnRUYXJnZXROb2RlKEtKUzo6SlNWYWx1ZSopOwogCi0g
ICAgS0pTX0RFRklORV9QUk9UT1RZUEVfV0lUSF9QUk9UT1RZUEUoSlNFdmVudFRhcmdldE5vZGVQ
cm90b3R5cGUsIEpTTm9kZVByb3RvdHlwZSkKLQotI2RlZmluZSBGT1JfRUFDSF9DTEFTUyhtYWNy
bykgXAotICAgIG1hY3JvKEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVu
dExpc3RlbmVyKSBcCi0gICAgbWFjcm8oSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlv
blJlbW92ZUV2ZW50TGlzdGVuZXIpIFwKLSAgICBtYWNybyhKU0V2ZW50VGFyZ2V0Tm9kZVByb3Rv
dHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudCkgXAotCi1GT1JfRUFDSF9DTEFTUyhLSlNfSU1QTEVN
RU5UX1BST1RPVFlQRV9GVU5DVElPTl9XSVRIX0NSRUFURSkKLSN1bmRlZiBGT1JfRUFDSF9DTEFT
UwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBKU0V2ZW50VGFyZ2V0Tm9k
ZV9oCkluZGV4OiBkb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRh
cmdldC5jcHAJKHJldmlzaW9uIDI4NzM4KQorKysgZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDEyIEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgogICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogICAgICAgICAgIChD
KSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4ICszNCwyNSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgImtq
c19wcm94eS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgiCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKKyNpZm5kZWYg
TkRFQlVHCitzdGF0aWMgaW50IGdFdmVudERpc3BhdGNoRm9yYmlkZGVuID0gMDsKKyNlbmRpZgor
CiBFdmVudFRhcmdldDo6fkV2ZW50VGFyZ2V0KCkKIHsKIH0KQEAgLTUyLDQgKzc0LDI2OSBAQCBT
VkdFbGVtZW50SW5zdGFuY2UqIEV2ZW50VGFyZ2V0Ojp0b1NWR0VsCiB9CiAjZW5kaWYKIAordm9p
ZCBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5j
ZU5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFyZWZlcmVuY2VO
b2RlIHx8ICFyZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT5hdHRhY2hlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudDo6TGlzdGVuZXJUeXBlPigwKTsKKyAgICBpZiAoZXZlbnRUeXBlID09IERPTVN1YnRy
ZWVNb2RpZmllZEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTVNVQlRSRUVNT0RJ
RklFRF9MSVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZUluc2VydGVk
RXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVEX0xJU1RFTkVS
OworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01Ob2RlUmVtb3ZlZEV2ZW50KQorICAgICAg
ICB0eXBlID0gRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVEX0xJU1RFTkVSOworICAgIGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudEV2ZW50KQorICAgICAgICB0
eXBlID0gRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVERlJPTURPQ1VNRU5UX0xJU1RFTkVSOworICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnRFdmVudCkK
KyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01OT0RFSU5TRVJURURJTlRPRE9DVU1FTlRfTElT
VEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTUF0dHJNb2RpZmllZEV2ZW50KQor
ICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTUFUVFJNT0RJRklFRF9MSVNURU5FUjsKKyAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQpCisgICAg
ICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NQ0hBUkFDVEVSREFUQU1PRElGSUVEX0xJU1RFTkVSOwor
ICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBvdmVyZmxvd2NoYW5nZWRFdmVudCkKKyAgICAgICAg
dHlwZSA9IERvY3VtZW50OjpPVkVSRkxPV0NIQU5HRURfTElTVEVORVI7CisKKyAgICBpZiAodHlw
ZSkKKyAgICAgICAgcmVmZXJlbmNlTm9kZS0+ZG9jdW1lbnQoKS0+YWRkTGlzdGVuZXJUeXBlKHR5
cGUpOworCisgICAgaWYgKCFyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMpCisgICAgICAg
IHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycyA9IG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lckxpc3Q7CisKKyAgICAvLyBSZW1vdmUgZXhpc3RpbmcgaWRlbnRpY2FsIGVyIHNldCB3aXRo
IGlkZW50aWNhbCBhcmd1bWVudHMuCisgICAgLy8gVGhlIERPTTIgc3BlYyBzYXlzIHRoYXQgImR1
cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhpcyBjYXNlLgorICAgIHJlbW92
ZUV2ZW50TGlzdGVuZXIocmVmZXJlbmNlTm9kZSwgZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwg
dXNlQ2FwdHVyZSk7CisKKyAgICAvLyBhZGRpbmcgdGhlIGZpcnN0IG9uZQorICAgIGlmIChyZWZl
cmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAmJiAhcmVmZXJlbmNlTm9kZS0+
aW5Eb2N1bWVudCgpKQorICAgICAgICByZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT5yZWdpc3Rl
ckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlTm9kZSk7CisKKyAg
ICByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPmFwcGVuZChuZXcgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSkpOworfQor
Cit2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSog
cmVmZXJlbmNlTm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFyZWZlcmVuY2VOb2Rl
IHx8ICFyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIHJsKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNh
cHR1cmUpOworCisgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBlbmQg
PSByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPmVuZCgpOworICAgIGZvciAoUmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBpdCA9IHJlZmVyZW5jZU5vZGUtPm1fcmVn
ZExpc3RlbmVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICBpZiAoKigq
aXQpLmdldCgpID09IHJsKSB7CisgICAgICAgICAgICAoKml0KS0+c2V0UmVtb3ZlZCh0cnVlKTsK
KyAgICAgICAgICAgIGl0ID0gcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5yZW1vdmUo
aXQpOworCisgICAgICAgICAgICAvLyByZW1vdmVkIGxhc3QKKyAgICAgICAgICAgIGlmIChyZWZl
cmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAmJiAhcmVmZXJlbmNlTm9kZS0+
aW5Eb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCkt
PnVucmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZU5v
ZGUpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
RXZlbnRUYXJnZXQ6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJl
bmNlTm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZSwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVtcEV2
ZW50KQoreworICAgIFJlZlB0cjxFdmVudD4gZXZ0KGUpOworCisgICAgQVNTRVJUKCFldmVudERp
c3BhdGNoRm9yYmlkZGVuKCkpOworICAgIEFTU0VSVChldnQtPnRhcmdldCgpKTsKKyAgICBBU1NF
UlQoIWV2dC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNvdWxkIGNyZWF0
ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUKKworICAgIC8vIHdvcmsgb3V0IHdoYXQgbm9k
ZXMgdG8gc2VuZCBldmVudCB0bworICAgIERlcHJlY2F0ZWRQdHJMaXN0PE5vZGU+IG5vZGVDaGFp
bjsKKworICAgIGlmIChyZWZlcmVuY2VOb2RlLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgZm9y
IChOb2RlKiBuID0gcmVmZXJlbmNlTm9kZTsgbjsgbiA9IG4tPmV2ZW50UGFyZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICBuLT5yZWYoKTsKKyAgICAgICAgICAgIG5vZGVDaGFpbi5wcmVwZW5kKG4p
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gaWYgbm9kZSBpcyBub3QgaW4g
dGhlIGRvY3VtZW50IGp1c3Qgc2VuZCBldmVudCB0byBpdHNlbGYgCisgICAgICAgIHJlZmVyZW5j
ZU5vZGUtPnJlZigpOworICAgICAgICBub2RlQ2hhaW4ucHJlcGVuZChyZWZlcmVuY2VOb2RlKTsK
KyAgICB9CisKKyAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPE5vZGU+IGl0KG5vZGVDaGFp
bik7CisKKyAgICAvLyBCZWZvcmUgd2UgYmVnaW4gZGlzcGF0Y2hpbmcgZXZlbnRzLCBnaXZlIHRo
ZSB0YXJnZXQgbm9kZSBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgcHJpb3IKKyAgICAvLyB0byB0
aGUgRE9NIGV2ZW50IGhhbmRsZXJzIGdldHRpbmcgYSBjcmFjay4KKyAgICB2b2lkKiBkYXRhID0g
cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZ0LmdldCgpKTsKKworICAgIC8vIHRyaWdnZXIgYW55
IGNhcHR1cmluZyBldmVudCBoYW5kbGVycyBvbiBvdXIgd2F5IGRvd24KKyAgICBldnQtPnNldEV2
ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19QSEFTRSk7CisgICAgaXQudG9GaXJzdCgpOworCisg
ICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGNhcHR1cmUgcGhhc2UsIGV4Y2VwdCBsb2Fk
IGV2ZW50cywgdGhpcyBxdWlyayBpcyBuZWVkZWQKKyAgICAvLyBiZWNhdXNlIE1vemlsbGEgdXNl
ZCB0byBuZXZlciBwcm9wYWdhdGUgbG9hZCBldmVudHMgdG8gdGhlIHdpbmRvdyBvYmplY3QKKyAg
ICBpZiAoZXZ0LT50eXBlKCkgIT0gbG9hZEV2ZW50ICYmIGl0LmN1cnJlbnQoKS0+aXNEb2N1bWVu
dE5vZGUoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKKyAgICAgICAgc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVXaW5kb3dFdmVudChldnQuZ2V0KCks
IHRydWUpOworCisgICAgRXZlbnRUYXJnZXROb2RlKiBldmVudFRhcmdldE5vZGUgPSAwOworICAg
IGZvciAoOyBpdC5jdXJyZW50KCkgJiYgaXQuY3VycmVudCgpICE9IHJlZmVyZW5jZU5vZGUgJiYg
IWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCk7ICsraXQpIHsKKyAgICAgICAgZXZlbnRUYXJnZXRO
b2RlID0gRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpOworCisjaWYgRU5BQkxFKFNW
RykKKyAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGFwcGx5U1ZHRXZlbnRUYXJnZXRSdWxl
cyhldmVudFRhcmdldE5vZGUsIGV2dC5nZXQoKSkpOworI2Vsc2UKKyAgICAgICAgZXZ0LT5zZXRD
dXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0Tm9kZSk7CisjZW5kaWYKKworICAgICAgICBldmVudFRh
cmdldE5vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgdHJ1ZSk7CisgICAgfQorCisg
ICAgLy8gZGlzcGF0Y2ggdG8gdGhlIGFjdHVhbCB0YXJnZXQgbm9kZQorICAgIGl0LnRvTGFzdCgp
OworCisgICAgaWYgKCFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKSB7CisgICAgICAgIGV2dC0+
c2V0RXZlbnRQaGFzZShFdmVudDo6QVRfVEFSR0VUKTsKKyAgICAgICAgZXZlbnRUYXJnZXROb2Rl
ID0gRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpOworCisjaWYgRU5BQkxFKFNWRykK
KyAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGFwcGx5U1ZHRXZlbnRUYXJnZXRSdWxlcyhl
dmVudFRhcmdldE5vZGUsIGV2dC5nZXQoKSkpOworI2Vsc2UKKyAgICAgICAgZXZ0LT5zZXRDdXJy
ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0Tm9kZSk7CisjZW5kaWYKKworICAgICAgICAvLyBXZSBkbyB3
YW50IGNhcHR1cmluZyBldmVudCBlcnMgdG8gYmUgaW52b2tlZCBoZXJlLCBldmVuIHRob3VnaAor
ICAgICAgICAvLyB0aGF0IHZpb2xhdGVzIHRoZSBzcGVjaWZpY2F0aW9uIHNpbmNlIE1vemlsbGEg
ZG9lcyBpdC4KKyAgICAgICAgZXZlbnRUYXJnZXROb2RlLT5oYW5kbGVMb2NhbEV2ZW50cyhldnQu
Z2V0KCksIHRydWUpOworCisgICAgICAgIGV2ZW50VGFyZ2V0Tm9kZS0+aGFuZGxlTG9jYWxFdmVu
dHMoZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgfQorCisgICAgLS1pdDsKKworICAgIC8vIG9rLCBu
b3cgYnViYmxlIHVwIGFnYWluIChvbmx5IG5vbi1jYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMgd2ls
bCBiZSBjYWxsZWQpCisgICAgLy8gIyMjIHJlY2FsY3VsYXRlIHRoZSBub2RlIGNoYWluIGhlcmU/
IChlLmcuIGlmIHRhcmdldCBub2RlIG1vdmVkIGluIGRvY3VtZW50IGJ5IHByZXZpb3VzIGV2ZW50
IGhhbmRsZXJzKQorICAgIC8vIG5vLiB0aGUgRE9NIHNwZWNzIHNheXM6CisgICAgLy8gVGhlIGNo
YWluIG9mIEV2ZW50VGFyZ2V0cyBmcm9tIHRoZSBldmVudCB0YXJnZXQgdG8gdGhlIHRvcCBvZiB0
aGUgdHJlZQorICAgIC8vIGlzIGRldGVybWluZWQgYmVmb3JlIHRoZSBpbml0aWFsIGRpc3BhdGNo
IG9mIHRoZSBldmVudC4KKyAgICAvLyBJZiBtb2RpZmljYXRpb25zIG9jY3VyIHRvIHRoZSB0cmVl
IGR1cmluZyBldmVudCBwcm9jZXNzaW5nLAorICAgIC8vIGV2ZW50IGZsb3cgd2lsbCBwcm9jZWVk
IGJhc2VkIG9uIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSB0cmVlLgorICAgIC8vCisgICAgLy8g
c2luY2UgdGhlIGluaXRpYWwgZGlzcGF0Y2ggaXMgYmVmb3JlIHRoZSBjYXB0dXJpbmcgcGhhc2Us
CisgICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBub2RlIGNoYWluLgor
ICAgIC8vICh0b2JpYXMpCisKKyAgICBpZiAoZXZ0LT5idWJibGVzKCkpIHsKKyAgICAgICAgZXZ0
LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7CisKKyAgICAgICAgZm9yICg7
IGl0LmN1cnJlbnQoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSAmJiAhZXZ0LT5jYW5j
ZWxCdWJibGUoKTsgLS1pdCkgeworICAgICAgICAgICAgZXZlbnRUYXJnZXROb2RlID0gRXZlbnRU
YXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAg
ICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChhcHBseVNWR0V2ZW50VGFyZ2V0UnVsZXMoZXZlbnRU
YXJnZXROb2RlLCBldnQuZ2V0KCkpKTsKKyNlbHNlCisgICAgICAgICAgICBldnQtPnNldEN1cnJl
bnRUYXJnZXQoZXZlbnRUYXJnZXROb2RlKTsKKyNlbmRpZgorCisgICAgICAgICAgICBldmVudFRh
cmdldE5vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgZmFsc2UpOworICAgICAgICB9
CisKKyAgICAgICAgaXQudG9GaXJzdCgpOworCisgICAgICAgIC8vIEhhbmRsZSB3aW5kb3cgZXZl
bnRzIGZvciBidWJibGluZyBwaGFzZSwgZXhjZXB0IGxvYWQgZXZlbnRzLCB0aGlzIHF1aXJrIGlz
IG5lZWRlZAorICAgICAgICAvLyBiZWNhdXNlIE1vemlsbGEgdXNlZCB0byBuZXZlciBwcm9wYWdh
dGUgbG9hZCBldmVudHMgYXQgYWxsCisgICAgICAgIGlmIChldnQtPnR5cGUoKSAhPSBsb2FkRXZl
bnQgJiYgaXQuY3VycmVudCgpLT5pc0RvY3VtZW50Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0aW9u
U3RvcHBlZCgpICYmICFldnQtPmNhbmNlbEJ1YmJsZSgpKSB7CisgICAgICAgICAgICBldnQtPnNl
dEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2luZG93
RXZlbnQoZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgICAgIH0gCisgICAgfQorCisgICAgZXZ0LT5z
ZXRDdXJyZW50VGFyZ2V0KDApOworICAgIGV2dC0+c2V0RXZlbnRQaGFzZSgwKTsgLy8gSSBndWVz
cyB0aGlzIGlzIGNvcnJlY3QsIHRoZSBzcGVjIGRvZXMgbm90IHNlZW0gdG8gc2F5CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbnl0aGluZyBhYm91dCB0aGUgZGVmYXVsdCBldmVudCBo
YW5kbGVyIHBoYXNlLgorCisKKyAgICAvLyBOb3cgY2FsbCB0aGUgcG9zdCBkaXNwYXRjaC4KKyAg
ICBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZ0LmdldCgpLCBkYXRhKTsKKworICAgIC8vIG5v
dyB3ZSBjYWxsIGFsbCBkZWZhdWx0IGV2ZW50IGhhbmRsZXJzICh0aGlzIGlzIG5vdCBwYXJ0IG9m
IERPTSAtIGl0IGlzIGludGVybmFsIHRvIGtodG1sKQorICAgIGl0LnRvTGFzdCgpOworCisgICAg
aWYgKGV2dC0+YnViYmxlcygpKQorICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZ0LT5kZWZhdWx0SGFuZGxlZCgpOyAtLWl0KQorICAg
ICAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpLT5kZWZhdWx0RXZlbnRI
YW5kbGVyKGV2dC5nZXQoKSk7CisgICAgZWxzZSBpZiAoIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgp
ICYmICFldnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qo
aXQuY3VycmVudCgpKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOworCisgICAgLy8g
ZGVyZWYgYWxsIG5vZGVzIGluIGNoYWluCisgICAgaXQudG9GaXJzdCgpOworICAgIGZvciAoOyBp
dC5jdXJyZW50KCk7ICsraXQpCisgICAgICAgIGl0LmN1cnJlbnQoKS0+ZGVyZWYoKTsgLy8gdGhp
cyBtYXkgZGVsZXRlIHVzCisKKyAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5n
KCk7CisKKyAgICAvLyBJZiB0ZW1wRXZlbnQgaXMgdHJ1ZSwgdGhpcyBtZWFucyB0aGF0IHRoZSBE
T00gaW1wbGVtZW50YXRpb24KKyAgICAvLyB3aWxsIG5vdCBiZSBzdG9yaW5nIGEgcmVmZXJlbmNl
IHRvIHRoZSBldmVudCwgaS5lLiAgdGhlcmUgaXMgbm8KKyAgICAvLyB3YXkgdG8gcmV0cmlldmUg
aXQgZnJvbSBqYXZhc2NyaXB0IGlmIGEgc2NyaXB0IGRvZXMgbm90IGFscmVhZHkKKyAgICAvLyBo
YXZlIGEgcmVmZXJlbmNlIHRvIGl0IGluIGEgdmFyaWFibGUuICBTbyB0aGVyZSBpcyBubyBuZWVk
IGZvcgorICAgIC8vIHRoZSBpbnRlcnByZXRlciB0byBrZWVwIHRoZSBldmVudCBpbiBpdCdzIGNh
Y2hlCisgICAgRnJhbWUqIGZyYW1lID0gcmVmZXJlbmNlTm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KTsKKyAgICBpZiAodGVtcEV2ZW50ICYmIGZyYW1lICYmIGZyYW1lLT5zY3JpcHRQcm94eSgpKQor
ICAgICAgICBmcmFtZS0+c2NyaXB0UHJveHkoKS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZ0LmdldCgp
KTsKKworICAgIHJldHVybiAhZXZ0LT5kZWZhdWx0UHJldmVudGVkKCk7IC8vICMjIyB3aGF0IGlm
IGRlZmF1bHRQcmV2ZW50ZWQgd2FzIGNhbGxlZCBiZWZvcmUgZGlzcGF0Y2hFdmVudD8KK30KKwor
dm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoRXZlbnRUYXJnZXROb2Rl
KiByZWZlcmVuY2VOb2RlKQoreworICAgIGRlbGV0ZSByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0
ZW5lcnM7CisgICAgcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzID0gMDsKK30KKwordm9p
ZCBFdmVudFRhcmdldDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRXZlbnRUYXJnZXROb2RlKiByZWZl
cmVuY2VOb2RlKQoreworICAgIGlmIChyZWZlcmVuY2VOb2RlICYmIHJlZmVyZW5jZU5vZGUtPm1f
cmVnZExpc3RlbmVycyAmJiAhcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5
KCkpCisgICAgICAgIHJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPnVucmVnaXN0ZXJEaXNjb25u
ZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKHJlZmVyZW5jZU5vZGUpOworfQorCit2b2lkIEV2
ZW50VGFyZ2V0OjpyZW1vdmVkRnJvbURvY3VtZW50KEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJlbmNl
Tm9kZSkKK3sKKyAgICBpZiAocmVmZXJlbmNlTm9kZSAmJiByZWZlcmVuY2VOb2RlLT5tX3JlZ2RM
aXN0ZW5lcnMgJiYgIXJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpKQor
ICAgICAgICByZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT5yZWdpc3RlckRpc2Nvbm5lY3RlZE5v
ZGVXaXRoRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlTm9kZSk7Cit9CisKK3ZvaWQgRXZlbnRUYXJn
ZXQ6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJlbmNlTm9kZSwgRXZl
bnQqIGV2dCwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIGlmICghcmVmZXJlbmNlTm9kZSB8fCAh
cmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzIHx8IHJlZmVyZW5jZU5vZGUtPm1fcmVnZExp
c3RlbmVycy0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lckxpc3QgbGlzdGVuZXJzQ29weSA9ICpyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0
ZW5lcnM7CisgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBlbmQgPSBs
aXN0ZW5lcnNDb3B5LmVuZCgpOworCisgICAgZm9yIChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxp
c3Q6Okl0ZXJhdG9yIGl0ID0gbGlzdGVuZXJzQ29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKCgqaXQpLT5ldmVudFR5cGUoKSA9PSBldnQtPnR5cGUoKSAmJiAoKml0
KS0+dXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUgJiYgISgqaXQpLT5yZW1vdmVkKCkpCisgICAg
ICAgICAgICAoKml0KS0+bGlzdGVuZXIoKS0+aGFuZGxlRXZlbnQoZXZ0LCBmYWxzZSk7CisgICAg
fQorfQorCisjaWYgRU5BQkxFKFNWRykKK0V2ZW50VGFyZ2V0KiBFdmVudFRhcmdldDo6YXBwbHlT
VkdFdmVudFRhcmdldFJ1bGVzKEV2ZW50VGFyZ2V0Tm9kZSomIHJlZmVyZW5jZU5vZGUsIEV2ZW50
KikgY29uc3QKK3sKKyAgICAvLyBUT0RPOiBBIGZvbGxvdy11cCBwYXRjaCB3aWxsIG5lZWQgdGhp
cyBmdW5jdGlvbi4KKyAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKK30KKyNlbmRpZgorCisjaWZu
ZGVmIE5ERUJVRwordm9pZCBmb3JiaWRFdmVudERpc3BhdGNoKCkKK3sKKyAgICArK2dFdmVudERp
c3BhdGNoRm9yYmlkZGVuOworfQorCit2b2lkIGFsbG93RXZlbnREaXNwYXRjaCgpCit7CisgICAg
aWYgKGdFdmVudERpc3BhdGNoRm9yYmlkZGVuID4gMCkKKyAgICAgICAgLS1nRXZlbnREaXNwYXRj
aEZvcmJpZGRlbjsKK30KKworYm9vbCBldmVudERpc3BhdGNoRm9yYmlkZGVuKCkKK3sKKyAgICBy
ZXR1cm4gZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPiAwOworfQorI2VuZGlmIC8vIE5ERUJVRwor
CiB9IC8vIGVuZCBuYW1lc3BhY2UKSW5kZXg6IGRvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyODczOCkKKysrIGRvbS9FdmVudFRhcmdl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsMTIgQEAKIC8qCiAgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCiAgKgorICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiAg
ICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDExICs0MiwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5l
cjsKICAgICBjbGFzcyBFdmVudFRhcmdldE5vZGU7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFz
cyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7
CiAgICAgY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlz
dDsKKyAgICB0eXBlZGVmIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8UmVmUHRyPFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyPiA+IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDsKKwogICAgIGNsYXNzIEV2
ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXROb2Rl
KiB0b05vZGUoKTsKQEAgLTU0LDE3ICs2NCw1MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpID0gMDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpID0gMDsKICAg
ICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2Vw
dGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCA9IGZhbHNlKSA9IDA7Ci0gICAgCisKICAgICAgICAg
dm9pZCByZWYoKSB7IHJlZkV2ZW50VGFyZ2V0KCk7IH0KICAgICAgICAgdm9pZCBkZXJlZigpIHsg
ZGVyZWZFdmVudFRhcmdldCgpOyB9CiAKKyAgICAgICAgLy8gSGFuZGxlcnMgdG8gZG8vdW5kbyBh
Y3Rpb25zIG9uIHRoZSB0YXJnZXQgbm9kZSBiZWZvcmUgYW4gZXZlbnQgaXMgZGlzcGF0Y2hlZCB0
byBpdCBhbmQgYWZ0ZXIgdGhlIGV2ZW50CisgICAgICAgIC8vIGhhcyBiZWVuIGRpc3BhdGNoZWQu
ICBUaGUgZGF0YSBwb2ludGVyIGlzIGhhbmRlZCBiYWNrIGJ5IHRoZSBwcmVEaXNwYXRjaCBhbmQg
cGFzc2VkIHRvIHBvc3REaXNwYXRjaC4KKyAgICAgICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRj
aEV2ZW50SGFuZGxlcihFdmVudCopIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCosIHZvaWQqIGRhdGFGcm9tUHJlRGlzcGF0
Y2gpIHsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIH5FdmVudFRhcmdldCgp
OwogCisgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldE5vZGUqIHJlZmVy
ZW5jZU5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlz
dGVuZXIoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CisKKyAgICAgICAg
Ym9vbCBkaXNwYXRjaEdlbmVyaWNFdmVudChFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUs
IFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCk7Cisg
ICAgICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoRXZlbnRUYXJnZXROb2RlKiByZWZl
cmVuY2VOb2RlKTsKKworICAgICAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KEV2ZW50VGFy
Z2V0Tm9kZSogcmVmZXJlbmNlTm9kZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dChFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUpOworCisgICAgICAgIHZvaWQgaGFuZGxl
TG9jYWxFdmVudHMoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBFdmVudCogZXZ0LCBi
b29sIHVzZUNhcHR1cmUpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgRXZlbnRUYXJnZXQq
IGFwcGx5U1ZHRXZlbnRUYXJnZXRSdWxlcyhFdmVudFRhcmdldE5vZGUqJiByZWZlcmVuY2VOb2Rl
LCBFdmVudCopIGNvbnN0OworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2
ZW50VGFyZ2V0KCkgPSAwOwogICAgIH07Ci19CiAKKyNpZm5kZWYgTkRFQlVHCisKK3ZvaWQgZm9y
YmlkRXZlbnREaXNwYXRjaCgpOwordm9pZCBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKK2Jvb2wgZXZl
bnREaXNwYXRjaEZvcmJpZGRlbigpOworCisjZWxzZQorCitpbmxpbmUgdm9pZCBmb3JiaWRFdmVu
dERpc3BhdGNoKCkgeyB9CitpbmxpbmUgdm9pZCBhbGxvd0V2ZW50RGlzcGF0Y2goKSB7IH0KKwor
I2VuZGlmIC8vIE5ERUJVRyAKKworfQogI2VuZGlmCkluZGV4OiBkb20vRXZlbnRUYXJnZXROb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vRXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNpb24gMjg3
MzgpCisrKyBkb20vRXZlbnRUYXJnZXROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICsz
LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE4ICsy
NSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Tm9kZS5o
IgogCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0j
aW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgpAQCAtNDUsMTgg
KzQxLDEyIEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCi0jaW5jbHVkZSAiVUlF
dmVudC5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50Lmgi
Ci0jaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi0jaWZu
ZGVmIE5ERUJVRwotc3RhdGljIGludCBnRXZlbnREaXNwYXRjaEZvcmJpZGRlbiA9IDA7Ci0jZW5k
aWYKIAogRXZlbnRUYXJnZXROb2RlOjpFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQgKmRvYykKICAg
ICA6IE5vZGUoZG9jKQpAQCAtNjgsMjMzICs1OCw0OCBAQCBFdmVudFRhcmdldE5vZGU6On5FdmVu
dFRhcmdldE5vZGUoKQogewogICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMgJiYgIW1fcmVnZExpc3Rl
bmVycy0+aXNFbXB0eSgpICYmICFpbkRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50KCktPnVu
cmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKHRoaXMpOworCiAgICAg
ZGVsZXRlIG1fcmVnZExpc3RlbmVyczsKKyAgICBtX3JlZ2RMaXN0ZW5lcnMgPSAwOwogfQogCiB2
b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewotICAgIGlmICht
X3JlZ2RMaXN0ZW5lcnMgJiYgIW1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpKQotICAgICAgICBk
b2N1bWVudCgpLT51bnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyh0
aGlzKTsKLSAgICAKKyAgICBFdmVudFRhcmdldDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQodGhpcyk7
CiAgICAgTm9kZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBFdmVudFRhcmdl
dE5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewotICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMg
JiYgIW1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudCgpLT5yZWdp
c3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7Ci0KKyAgICBFdmVu
dFRhcmdldDo6cmVtb3ZlZEZyb21Eb2N1bWVudCh0aGlzKTsKICAgICBOb2RlOjpyZW1vdmVkRnJv
bURvY3VtZW50KCk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyLCBjb25zdCBib29sIHVzZUNhcHR1cmUpCit2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewotICAgIGlmICgh
ZG9jdW1lbnQoKS0+YXR0YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIERvY3Vt
ZW50OjpMaXN0ZW5lclR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PERvY3VtZW50OjpMaXN0ZW5lclR5
cGU+KDApOwotICAgIGlmIChldmVudFR5cGUgPT0gRE9NU3VidHJlZU1vZGlmaWVkRXZlbnQpCi0g
ICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NU1VCVFJFRU1PRElGSUVEX0xJU1RFTkVSOwotICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01Ob2RlSW5zZXJ0ZWRFdmVudCkKLSAgICAgICAgdHlw
ZSA9IERvY3VtZW50OjpET01OT0RFSU5TRVJURURfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09IERPTU5vZGVSZW1vdmVkRXZlbnQpCi0gICAgICAgIHR5cGUgPSBEb2N1bWVudDo6
RE9NTk9ERVJFTU9WRURfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5v
ZGVSZW1vdmVkRnJvbURvY3VtZW50RXZlbnQpCi0gICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9N
Tk9ERVJFTU9WRURGUk9NRE9DVU1FTlRfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBl
ID09IERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50KQotICAgICAgICB0eXBlID0gRG9j
dW1lbnQ6OkRPTU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9MSVNURU5FUjsKLSAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gRE9NQXR0ck1vZGlmaWVkRXZlbnQpCi0gICAgICAgIHR5cGUgPSBEb2N1
bWVudDo6RE9NQVRUUk1PRElGSUVEX0xJU1RFTkVSOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9
PSBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCkKLSAgICAgICAgdHlwZSA9IERvY3VtZW50
OjpET01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRU
eXBlID09IG92ZXJmbG93Y2hhbmdlZEV2ZW50KQotICAgICAgICB0eXBlID0gRG9jdW1lbnQ6Ok9W
RVJGTE9XQ0hBTkdFRF9MSVNURU5FUjsKLSAgICAgICAgCi0gICAgaWYgKHR5cGUpCi0gICAgICAg
IGRvY3VtZW50KCktPmFkZExpc3RlbmVyVHlwZSh0eXBlKTsKLSAgICAKLSAgICBpZiAoIW1fcmVn
ZExpc3RlbmVycykKLSAgICAgICAgbV9yZWdkTGlzdGVuZXJzID0gbmV3IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyTGlzdDsKLSAgICAKLSAgICAvLyBSZW1vdmUgZXhpc3RpbmcgaWRlbnRpY2FsIGxp
c3RlbmVyIHNldCB3aXRoIGlkZW50aWNhbCBhcmd1bWVudHMuCi0gICAgLy8gVGhlIERPTTIgc3Bl
YyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhpcyBj
YXNlLgotICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwg
dXNlQ2FwdHVyZSk7Ci0gICAgCi0gICAgLy8gYWRkaW5nIHRoZSBmaXJzdCBvbmUKLSAgICBpZiAo
bV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYgIWluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9j
dW1lbnQoKS0+cmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKHRoaXMp
OwotICAgIAotICAgIG1fcmVnZExpc3RlbmVycy0+YXBwZW5kKG5ldyBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKSk7CisgICAgRXZl
bnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIodGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSk7CiB9CiAKLXZvaWQgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwg
Ym9vbCB1c2VDYXB0dXJlKQordm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
LCBib29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgaWYgKCFtX3JlZ2RMaXN0ZW5lcnMpIC8vIG5vdGhp
bmcgdG8gcmVtb3ZlCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciBybChldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLSAgICAKLSAgICBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGVuZCA9IG1fcmVnZExpc3RlbmVy
cy0+ZW5kKCk7Ci0gICAgZm9yIChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9y
IGl0ID0gbV9yZWdkTGlzdGVuZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGlmICgqKCppdCkuZ2V0KCkgPT0gcmwpIHsKLSAgICAgICAgICAgICgqaXQpLT5zZXRSZW1vdmVk
KHRydWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpdCA9IG1fcmVnZExpc3RlbmVycy0+
cmVtb3ZlKGl0KTsKLSAgICAgICAgICAgIC8vIHJlbW92ZWQgbGFzdAotICAgICAgICAgICAgaWYg
KG1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpICYmICFpbkRvY3VtZW50KCkpCi0gICAgICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0
ZW5lcnModGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBFdmVudFRh
cmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VD
YXB0dXJlKTsKIH0KIAogdm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92ZUFsbEV2ZW50TGlzdGVu
ZXJzKCkKIHsKLSAgICBkZWxldGUgbV9yZWdkTGlzdGVuZXJzOwotICAgIG1fcmVnZExpc3RlbmVy
cyA9IDA7CisgICAgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKHRoaXMpOwog
fQogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQgKmV2dCwg
Ym9vbCB1c2VDYXB0dXJlKQogewotICAgIGlmICghbV9yZWdkTGlzdGVuZXJzKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCiAgICAgaWYgKGRpc2FibGVkKCkgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdCBs
aXN0ZW5lcnNDb3B5ID0gKm1fcmVnZExpc3RlbmVyczsKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lckxpc3Q6Okl0ZXJhdG9yIGVuZCA9IGxpc3RlbmVyc0NvcHkuZW5kKCk7CiAKLSAgICBmb3Ig
KFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnNDb3B5
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKCgqaXQpLT5ldmVudFR5cGUo
KSA9PSBldnQtPnR5cGUoKSAmJiAoKml0KS0+dXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUgJiYg
ISgqaXQpLT5yZW1vdmVkKCkpCi0gICAgICAgICAgICAoKml0KS0+bGlzdGVuZXIoKS0+aGFuZGxl
RXZlbnQoZXZ0LCBmYWxzZSk7Ci19Ci0KLWJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEdl
bmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBlLCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1w
RXZlbnQpCi17Ci0gICAgUmVmUHRyPEV2ZW50PiBldnQoZSk7Ci0gICAgQVNTRVJUKCFldmVudERp
c3BhdGNoRm9yYmlkZGVuKCkpOwotICAgIEFTU0VSVChldnQtPnRhcmdldCgpKTsKLSAgICBBU1NF
UlQoIWV2dC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBjb2RlIGNvdWxkIGNyZWF0
ZSBhbiBldmVudCB3aXRoIGFuIGVtcHR5IG5hbWUKLSAgICAKLSAgICAvLyB3b3JrIG91dCB3aGF0
IG5vZGVzIHRvIHNlbmQgZXZlbnQgdG8KLSAgICBEZXByZWNhdGVkUHRyTGlzdDxOb2RlPiBub2Rl
Q2hhaW47Ci0gICAgCi0gICAgaWYgKGluRG9jdW1lbnQoKSkgewotICAgICAgICBmb3IgKE5vZGUq
IG4gPSB0aGlzOyBuOyBuID0gbi0+ZXZlbnRQYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIG4t
PnJlZigpOwotICAgICAgICAgICAgbm9kZUNoYWluLnByZXBlbmQobik7Ci0gICAgICAgIH0gCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gaWYgbm9kZSBpcyBub3QgaW4gdGhlIGRvY3VtZW50IGp1
c3Qgc2VuZCBldmVudCB0byBpdHNlbGYgCi0gICAgICAgIHJlZigpOwotICAgICAgICBub2RlQ2hh
aW4ucHJlcGVuZCh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVy
YXRvcjxOb2RlPiBpdChub2RlQ2hhaW4pOwotICAgIAotICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBk
aXNwYXRjaGluZyBldmVudHMsIGdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNv
bWUgd29yayBwcmlvcgotICAgIC8vIHRvIHRoZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0dGluZyBh
IGNyYWNrLgotICAgIHZvaWQqIGRhdGEgPSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0
KCkpOwotICAgIAotICAgIC8vIHRyaWdnZXIgYW55IGNhcHR1cmluZyBldmVudCBoYW5kbGVycyBv
biBvdXIgd2F5IGRvd24KLSAgICBldnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkNBUFRVUklOR19Q
SEFTRSk7Ci0gICAgCi0gICAgaXQudG9GaXJzdCgpOwotICAgIC8vIEhhbmRsZSB3aW5kb3cgZXZl
bnRzIGZvciBjYXB0dXJlIHBoYXNlLCBleGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsgaXMg
bmVlZGVkCi0gICAgLy8gYmVjYXVzZSBNb3ppbGxhIHVzZWQgdG8gbmV2ZXIgcHJvcGFnYXRlIGxv
YWQgZXZlbnRzIHRvIHRoZSB3aW5kb3cgb2JqZWN0Ci0gICAgaWYgKGV2dC0+dHlwZSgpICE9IGxv
YWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9jdW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oaXQuY3VycmVu
dCgpKS0+aGFuZGxlV2luZG93RXZlbnQoZXZ0LmdldCgpLCB0cnVlKTsKLSAgICAKLSAgICBmb3Ig
KDsgaXQuY3VycmVudCgpICYmIGl0LmN1cnJlbnQoKSAhPSB0aGlzICYmICFldnQtPnByb3BhZ2F0
aW9uU3RvcHBlZCgpOyArK2l0KSB7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVu
dFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkpOwotICAgICAgICBFdmVudFRhcmdldE5vZGVD
YXN0KGl0LmN1cnJlbnQoKSktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgdHJ1ZSk7Ci0g
ICAgfQotICAgIAotICAgIC8vIGRpc3BhdGNoIHRvIHRoZSBhY3R1YWwgdGFyZ2V0IG5vZGUKLSAg
ICBpdC50b0xhc3QoKTsKLSAgICBpZiAoIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpIHsKLSAg
ICAgICAgZXZ0LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOwotICAgICAgICBldnQt
PnNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFdlIGRvIHdhbnQgY2FwdHVyaW5nIGV2ZW50IGxpc3RlbmVycyB0
byBiZSBpbnZva2VkIGhlcmUsIGV2ZW4gdGhvdWdoCi0gICAgICAgIC8vIHRoYXQgdmlvbGF0ZXMg
dGhlIHNwZWNpZmljYXRpb24gc2luY2UgTW96aWxsYSBkb2VzIGl0LgotICAgICAgICBFdmVudFRh
cmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwg
dHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQo
KSktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgZmFsc2UpOwotICAgIH0KLSAgICAtLWl0
OwotICAgIAotICAgIC8vIG9rLCBub3cgYnViYmxlIHVwIGFnYWluIChvbmx5IG5vbi1jYXB0dXJp
bmcgZXZlbnQgaGFuZGxlcnMgd2lsbCBiZSBjYWxsZWQpCi0gICAgLy8gIyMjIHJlY2FsY3VsYXRl
IHRoZSBub2RlIGNoYWluIGhlcmU/IChlLmcuIGlmIHRhcmdldCBub2RlIG1vdmVkIGluIGRvY3Vt
ZW50IGJ5IHByZXZpb3VzIGV2ZW50IGhhbmRsZXJzKQotICAgIC8vIG5vLiB0aGUgRE9NIHNwZWNz
IHNheXM6Ci0gICAgLy8gVGhlIGNoYWluIG9mIEV2ZW50VGFyZ2V0cyBmcm9tIHRoZSBldmVudCB0
YXJnZXQgdG8gdGhlIHRvcCBvZiB0aGUgdHJlZQotICAgIC8vIGlzIGRldGVybWluZWQgYmVmb3Jl
IHRoZSBpbml0aWFsIGRpc3BhdGNoIG9mIHRoZSBldmVudC4KLSAgICAvLyBJZiBtb2RpZmljYXRp
b25zIG9jY3VyIHRvIHRoZSB0cmVlIGR1cmluZyBldmVudCBwcm9jZXNzaW5nLAotICAgIC8vIGV2
ZW50IGZsb3cgd2lsbCBwcm9jZWVkIGJhc2VkIG9uIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSB0
cmVlLgotICAgIC8vCi0gICAgLy8gc2luY2UgdGhlIGluaXRpYWwgZGlzcGF0Y2ggaXMgYmVmb3Jl
IHRoZSBjYXB0dXJpbmcgcGhhc2UsCi0gICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIHJlY2FsY3Vs
YXRlIHRoZSBub2RlIGNoYWluLgotICAgIC8vICh0b2JpYXMpCi0gICAgCi0gICAgaWYgKGV2dC0+
YnViYmxlcygpKSB7Ci0gICAgICAgIGV2dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6QlVCQkxJTkdf
UEhBU0UpOwotICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQtPnByb3BhZ2F0aW9u
U3RvcHBlZCgpICYmICFldnQtPmNhbmNlbEJ1YmJsZSgpOyAtLWl0KSB7Ci0gICAgICAgICAgICBl
dnQtPnNldEN1cnJlbnRUYXJnZXQoRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsK
LSAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+aGFuZGxlTG9j
YWxFdmVudHMoZXZ0LmdldCgpLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSGFuZGxl
IHdpbmRvdyBldmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNlLCBleGNlcHQgbG9hZCBldmVudHMsIHRo
aXMgcXVpcmsgaXMgbmVlZGVkCi0gICAgICAgIC8vIGJlY2F1c2UgTW96aWxsYSB1c2VkIHRvIG5l
dmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwKLQotICAgICAgICBpdC50b0ZpcnN0KCk7
Ci0gICAgICAgIGlmIChldnQtPnR5cGUoKSAhPSBsb2FkRXZlbnQgJiYgaXQuY3VycmVudCgpLT5p
c0RvY3VtZW50Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldnQtPmNh
bmNlbEJ1YmJsZSgpKSB7Ci0gICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoRXZlbnRU
YXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpKTsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2luZG93RXZlbnQoZXZ0LmdldCgpLCBmYWxz
ZSk7Ci0gICAgICAgIH0gCi0gICAgfSAKLSAgICAKLSAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQo
MCk7Ci0gICAgZXZ0LT5zZXRFdmVudFBoYXNlKDApOyAvLyBJIGd1ZXNzIHRoaXMgaXMgY29ycmVj
dCwgdGhlIHNwZWMgZG9lcyBub3Qgc2VlbSB0byBzYXkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFueXRoaW5nIGFib3V0IHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgcGhhc2UuCi0g
ICAgCi0gICAgCi0gICAgLy8gTm93IGNhbGwgdGhlIHBvc3QgZGlzcGF0Y2guCi0gICAgcG9zdERp
c3BhdGNoRXZlbnRIYW5kbGVyKGV2dC5nZXQoKSwgZGF0YSk7Ci0gICAgCi0gICAgLy8gbm93IHdl
IGNhbGwgYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgKHRoaXMgaXMgbm90IHBhcnQgb2YgRE9N
IC0gaXQgaXMgaW50ZXJuYWwgdG8ga2h0bWwpCi0gICAgCi0gICAgaXQudG9MYXN0KCk7Ci0gICAg
aWYgKGV2dC0+YnViYmxlcygpKQotICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZ0LT5kZWZhdWx0SGFuZGxlZCgpOyAtLWl0KQotICAg
ICAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpLT5kZWZhdWx0RXZlbnRI
YW5kbGVyKGV2dC5nZXQoKSk7Ci0gICAgZWxzZSBpZiAoIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgp
ICYmICFldnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qo
aXQuY3VycmVudCgpKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOwotICAgIAotICAg
IC8vIGRlcmVmIGFsbCBub2RlcyBpbiBjaGFpbgotICAgIGl0LnRvRmlyc3QoKTsKLSAgICBmb3Ig
KDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAgICBpdC5jdXJyZW50KCktPmRlcmVmKCk7IC8v
IHRoaXMgbWF5IGRlbGV0ZSB1cwotICAgIAotICAgIERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNS
ZW5kZXJpbmcoKTsKLSAgICAKLSAgICAvLyBJZiB0ZW1wRXZlbnQgaXMgdHJ1ZSwgdGhpcyBtZWFu
cyB0aGF0IHRoZSBET00gaW1wbGVtZW50YXRpb24KLSAgICAvLyB3aWxsIG5vdCBiZSBzdG9yaW5n
IGEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCwgaS5lLiAgdGhlcmUgaXMgbm8KLSAgICAvLyB3YXkg
dG8gcmV0cmlldmUgaXQgZnJvbSBqYXZhc2NyaXB0IGlmIGEgc2NyaXB0IGRvZXMgbm90IGFscmVh
ZHkKLSAgICAvLyBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0IGluIGEgdmFyaWFibGUuICBTbyB0aGVy
ZSBpcyBubyBuZWVkIGZvcgotICAgIC8vIHRoZSBpbnRlcnByZXRlciB0byBrZWVwIHRoZSBldmVu
dCBpbiBpdCdzIGNhY2hlCi0gICAgRnJhbWUgKmZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
LSAgICBpZiAodGVtcEV2ZW50ICYmIGZyYW1lICYmIGZyYW1lLT5zY3JpcHRQcm94eSgpKQotICAg
ICAgICBmcmFtZS0+c2NyaXB0UHJveHkoKS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZ0LmdldCgpKTsK
LSAgICAKLSAgICByZXR1cm4gIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpOyAvLyAjIyMgd2hhdCBp
ZiBkZWZhdWx0UHJldmVudGVkIHdhcyBjYWxsZWQgYmVmb3JlIGRpc3BhdGNoRXZlbnQ/CisgICAg
RXZlbnRUYXJnZXQ6OmhhbmRsZUxvY2FsRXZlbnRzKHRoaXMsIGV2dCwgdXNlQ2FwdHVyZSk7ICAg
IAogfQogCiBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBlLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCB0ZW1wRXZlbnQpCiB7Ci0gICAgcmV0dXJu
IGRpc3BhdGNoRXZlbnQoZSwgZWMsIHRlbXBFdmVudCwgdGhpcyk7Ci19Ci0KLWJvb2wgRXZlbnRU
YXJnZXROb2RlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBib29sIHRlbXBFdmVudCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKLXsKICAgICBSZWZQ
dHI8RXZlbnQ+IGV2dChlKTsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7
CiAgICAgaWYgKCFldnQgfHwgZXZ0LT50eXBlKCkuaXNFbXB0eSgpKSB7IApAQCAtMzAyLDExICsx
MDcsMTYgQEAgYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzcwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZXZ0LT5zZXRUYXJnZXQodGFyZ2V0KTsKLSAg
ICAKKyAgICBFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUgPSB0aGlzOworCisjaWYgRU5B
QkxFKFNWRykKKyAgICBldnQtPnNldFRhcmdldChhcHBseVNWR0V2ZW50VGFyZ2V0UnVsZXMocmVm
ZXJlbmNlTm9kZSwgZXZ0LmdldCgpKSk7CisjZWxzZQorICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMp
OworI2VuZGlmCisKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZG9jdW1lbnQoKS0+dmll
dygpOwotICAgIAotICAgIHJldHVybiBkaXNwYXRjaEdlbmVyaWNFdmVudChldnQucmVsZWFzZSgp
LCBlYywgdGVtcEV2ZW50KTsKKyAgICByZXR1cm4gZGlzcGF0Y2hHZW5lcmljRXZlbnQocmVmZXJl
bmNlTm9kZSwgZXZ0LnJlbGVhc2UoKSwgZWMsIHRlbXBFdmVudCk7CiB9CiAKIGJvb2wgRXZlbnRU
YXJnZXROb2RlOjpkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KGJvb2wgc2VuZENoaWxkcmVu
Q2hhbmdlZCkKQEAgLTM0NSw3ICsxNTUsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0
Y2hXaW5kb3dFdmVuCiAgICAgICAgIGlmIChvd25lckVsZW1lbnQpIHsKICAgICAgICAgICAgIFJl
ZlB0cjxFdmVudD4gb3duZXJFdmVudCA9IG5ldyBFdmVudChldmVudFR5cGUsIGZhbHNlLCBjYW5j
ZWxhYmxlQXJnKTsKICAgICAgICAgICAgIG93bmVyRXZlbnQtPnNldFRhcmdldChvd25lckVsZW1l
bnQpOwotICAgICAgICAgICAgb3duZXJFbGVtZW50LT5kaXNwYXRjaEdlbmVyaWNFdmVudChvd25l
ckV2ZW50LnJlbGVhc2UoKSwgZWMsIHRydWUpOworICAgICAgICAgICAgb3duZXJFbGVtZW50LT5k
aXNwYXRjaEdlbmVyaWNFdmVudChvd25lckVsZW1lbnQsIG93bmVyRXZlbnQucmVsZWFzZSgpLCBl
YywgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MjMsMjIgKzQzMyw2IEBAIHZvaWQg
RXZlbnRUYXJnZXROb2RlOjpkdW1wKFRleHRTdHJlYW0qIHMKICAgICBOb2RlOjpkdW1wKHN0cmVh
bSxpbmQpOwogfQogCi12b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKQotewotICAgICsrZ0V2ZW50
RGlzcGF0Y2hGb3JiaWRkZW47Ci19Ci0KLXZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCkKLXsKLSAg
ICBpZiAoZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPiAwKQotICAgICAgICAtLWdFdmVudERpc3Bh
dGNoRm9yYmlkZGVuOwotfQotCi1ib29sIGV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKQotewotICAg
IHJldHVybiBnRXZlbnREaXNwYXRjaEZvcmJpZGRlbiA+IDA7Ci19Ci0KICNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBkb20vRXZlbnRUYXJnZXROb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAyODczOCkKKysrIGRvbS9FdmVu
dFRhcmdldE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDkgKzMwLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgRGVwcmVjYXRlZFZhbHVl
TGlzdDsKLQotY2xhc3MgRXZlbnRUYXJnZXROb2RlIDogcHVibGljIE5vZGUsIHB1YmxpYyBFdmVu
dFRhcmdldCB7CitjbGFzcyBFdmVudFRhcmdldE5vZGUgOiBwdWJsaWMgTm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBFdmVudFRhcmdldCB7CiBwdWJsaWM6CiAgICAgRXZlbnRU
YXJnZXROb2RlKERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+RXZlbnRUYXJnZXROb2RlKCk7CkBA
IC00OSw3ICs0OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGRpc3BhdGNoSFRNTEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxl
KTsKICAgICBFdmVudExpc3RlbmVyKiBnZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSk7CiAKLSAgICBib29sIGRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1wRXZlbnQgPSBmYWxzZSk7CiAg
ICAgYm9vbCBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KGJvb2wgY2hpbGRyZW5DaGFuZ2Vk
ID0gdHJ1ZSk7CiAgICAgdm9pZCBkaXNwYXRjaFdpbmRvd0V2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKICAgICBib29s
IGRpc3BhdGNoVUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgaW50IGRldGFp
bCA9IDAsIFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVudCA9IDApOwpAQCAtNzMsMTEg
KzcyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKLSAgICAvLyBIYW5k
bGVycyB0byBkby91bmRvIGFjdGlvbnMgb24gdGhlIHRhcmdldCBub2RlIGJlZm9yZSBhbiBldmVu
dCBpcyBkaXNwYXRjaGVkIHRvIGl0IGFuZCBhZnRlciB0aGUgZXZlbnQKLSAgICAvLyBoYXMgYmVl
biBkaXNwYXRjaGVkLiAgVGhlIGRhdGEgcG9pbnRlciBpcyBoYW5kZWQgYmFjayBieSB0aGUgcHJl
RGlzcGF0Y2ggYW5kIHBhc3NlZCB0byBwb3N0RGlzcGF0Y2guCi0gICAgdmlydHVhbCB2b2lkKiBw
cmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCopIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgcG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50Kiwgdm9pZCogZGF0YUZyb21QcmVE
aXNwYXRjaCkgeyB9Ci0KICAgICAvKioKICAgICAgKiBQZXJmb3JtIHRoZSBkZWZhdWx0IGFjdGlv
biBmb3IgYW4gZXZlbnQgZS5nLiBzdWJtaXR0aW5nIGEgZm9ybQogICAgICAqLwpAQCAtOTMsMTUg
Kzg3LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtKiwgRGVw
cmVjYXRlZFN0cmluZyBpbmRlbnQgPSAiIikgY29uc3Q7CiAjZW5kaWYKIAorICAgIFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyTGlzdCogbG9jYWxFdmVudExpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJu
IG1fcmVnZExpc3RlbmVyczsgfQorCiAgICAgdXNpbmcgTm9kZTo6cmVmOwogICAgIHVzaW5nIE5v
ZGU6OmRlcmVmOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBTVkdFbGVtZW50OwotICAg
IGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYsIGJv
b2wgdGVtcEV2ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0KTsKICAKIHByb3RlY3RlZDoKLSAgICB0
eXBlZGVmIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8UmVmUHRyPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
PiA+IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDsKKyAgICBmcmllbmQgY2xhc3MgRXZlbnRU
YXJnZXQ7CiAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0KiBtX3JlZ2RMaXN0ZW5lcnM7
CiAKIHByaXZhdGU6CkBAIC0xMjEsMTkgKzExMyw2IEBAIGlubGluZSBjb25zdCBFdmVudFRhcmdl
dE5vZGUqIEV2ZW50VGFyZ2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRXZlbnRUYXJn
ZXROb2RlKj4obik7IAogfQogCi0jaWZuZGVmIE5ERUJVRwotCi12b2lkIGZvcmJpZEV2ZW50RGlz
cGF0Y2goKTsKLXZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCk7Ci1ib29sIGV2ZW50RGlzcGF0Y2hG
b3JiaWRkZW4oKTsKLQotI2Vsc2UKLQotaW5saW5lIHZvaWQgZm9yYmlkRXZlbnREaXNwYXRjaCgp
IHsgfQotaW5saW5lIHZvaWQgYWxsb3dFdmVudERpc3BhdGNoKCkgeyB9Ci0KLSNlbmRpZiAvLyBO
REVCVUcgCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEV2ZW50VGFyZ2V0
Tm9kZV9oCkluZGV4OiBzdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyODczOCkKKysrIHN2Zy9TVkdFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTY4LDcgKzE2OSw3IEBAIHZvaWQg
U1ZHRWxlbWVudDo6c2VuZFNWR0xvYWRFdmVudElmUG9zc2kKICAgICAgICAgUmVmUHRyPEV2ZW50
PiBldmVudCA9IG5ldyBFdmVudChsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGV2
ZW50LT5zZXRUYXJnZXQoY3VycmVudFRhcmdldCk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgaWdu
b3JlZCA9IDA7Ci0gICAgICAgIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2ZW50LnJlbGVhc2UoKSwg
aWdub3JlZCwgZmFsc2UpOworICAgICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudCh0aGlzLCBldmVu
dC5yZWxlYXNlKCksIGlnbm9yZWQsIGZhbHNlKTsKICAgICAgICAgY3VycmVudFRhcmdldCA9IChw
YXJlbnQgJiYgcGFyZW50LT5pc1NWR0VsZW1lbnQoKSkgPyBzdGF0aWNfcG9pbnRlcl9jYXN0PFNW
R0VsZW1lbnQ+KHBhcmVudCkgOiAwOwogICAgIH0KIH0KQEAgLTIyMCw2ICsyMjEsOCBAQCBzdGF0
aWMgTm9kZSogc2hhZG93VHJlZVBhcmVudEVsZW1lbnRGb3JTCiAKIGJvb2wgU1ZHRWxlbWVudDo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBlLCBFeGNlcHRpb25Db2RlJiBlYywgYm9v
bCB0ZW1wRXZlbnQpCiB7CisgICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92
ZWQgaW4gYSBmb2xsb3ctdXAgcGF0Y2ghCisKICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gdGhp
czsKICAgICBOb2RlKiB1c2VOb2RlID0gc2hhZG93VHJlZVBhcmVudEVsZW1lbnRGb3JTaGFkb3dU
cmVlRWxlbWVudCh0aGlzKTsKIApAQCAtMjM1LDcgKzIzOCwxMCBAQCBib29sIFNWR0VsZW1lbnQ6
OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0CiAgICAgICAgICAgICB0YXJnZXQgPSBpbnN0YW5jZTsK
ICAgICB9CiAKLSAgICByZXR1cm4gRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEV2ZW50KGUsIGVj
LCB0ZW1wRXZlbnQsIHRhcmdldCk7CisgICAgZS0+c2V0VGFyZ2V0KHRhcmdldCk7CisKKyAgICBS
ZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpOworICAgIHJldHVybiBF
dmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KHRoaXMsIGUsIGVjLCB0ZW1wRXZl
bnQpOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17915</attachid>
            <date>2007-12-15 12:22:16 -0800</date>
            <delta_ts>2007-12-15 14:43:27 -0800</delta_ts>
            <desc>Updated patch v2</desc>
            <filename>Refactor3.diff</filename>
            <type>text/plain</type>
            <size>88434</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMDctMTIt
MTUgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgRml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDQ1IChSZWZhY3RvciBFdmVudFRhcmdldE5vZGUgJiBKU0V2
ZW50VGFyZ2V0Tm9kZSBmb3IgYW4gdXBjb21pbmcgU1ZHIHBhdGNoKQorCisgICAgICAgIFNwbGl0
IHVwIEpTRXZlbnRUYXJnZXROb2RlIGluIEpTRXZlbnRUYXJnZXROb2RlICYgSlNFdmVudFRhcmdl
dEJhc2UgLSB3aGVyZSBtb3N0IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW92ZWQgZG93bgorICAg
ICAgICBpbiB0aGUgYmFzZSBjbGFzcy4gQXBwbGllZCB0aGUgc2FtZSByZWZhY3Rvcml6YXRpb24g
dG8gRXZlbnRUYXJnZXROb2RlLgorCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9y
IHRoZSB1cGNvbWluZyBwYXRjaCBpbXBsZW1lbnRpbmcgdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFj
ZSBmb3IgU1ZHRWxlbWVudEluc3RhbmNlCisgICAgICAgIHRvIHNoYXJlIGFzIG11Y2ggY29kZSBh
cyBwb3NzaWJsZSB3aXRoIHRoZSBFdmVudFRhcmdldE5vZGUgY2xhc3Nlcy4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9u
ZGluZ05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnROYW1lRm9yUHJvcGVydHlUb2tlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U6OkpTRXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpKU0V2ZW50VGFyZ2V0QmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6cHV0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVu
dFRhcmdldFByb3RvdHlwZTo6SlNFdmVudFRhcmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlOjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXRQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlOjpjbGFzc0luZm8pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVu
dFRhcmdldE5vZGU6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVu
dFRhcmdldE5vZGU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
cHV0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
c2V0TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9FdmVudFRhcmdldE5vZGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb246OnByb3RvdHlwZUNsYXNzTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb246OnBy
b3RvdHlwZUlkZW50aWZpZXIpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFRhcmdldDo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50VGFyZ2V0OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFRhcmdldDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFRhcmdldDo6aGFuZGxlTG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXQ6OmFwcGx5U1ZHRXZlbnRUYXJnZXRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpmb3Ji
aWRFdmVudERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmFsbG93RXZlbnREaXNwYXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpldmVudERpc3BhdGNoRm9yYmlkZGVuKToKKyAgICAgICAgKiBk
b20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpwcmVEaXNw
YXRjaEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6cG9zdERp
c3BhdGNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcmJpZEV2ZW50RGlzcGF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6YWxsb3dFdmVudERpc3BhdGNoKToKKyAgICAgICAgKiBk
b20vRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6fkV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6
Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5v
ZGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2Rl
OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXROb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dE5vZGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2Rl
OjpkaXNwYXRjaFdpbmRvd0V2ZW50KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXROb2RlLmg6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmxvY2FsRXZlbnRMaXN0ZW5lcnMp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnQ6OnNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsZW1lbnQ6OmRpc3BhdGNoRXZlbnQpOgorCiAyMDA3LTEyLTE1ICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBEZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIERlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlz
aW9uIDI4NzU1KQorKysgRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzQx
LDcgKzM0MSw3IEBAIGFsbCA6IFwKICAgICBKU0VudGl0eS5oIFwKICAgICBKU0VudGl0eVJlZmVy
ZW5jZS5oIFwKICAgICBKU0V2ZW50LmggXAotICAgIEpTRXZlbnRUYXJnZXROb2RlLmx1dC5oIFwK
KyAgICBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCBcCiAgICAgSlNIVE1MQXBwbGV0RWxlbWVudC5o
IFwKICAgICBKU0hUTUxBbmNob3JFbGVtZW50LmggXAogICAgIEpTSFRNTEFyZWFFbGVtZW50Lmgg
XApJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3NTUpCisrKyBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwOTMs
NiArMzA5Myw4IEBACiAJCUIyNTU5OUJBMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1h
cmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1
NTk5MjIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFya2VyLmggKi87IH07CiAJCUIy
NTU5OUJCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTkyMzBEMDBEOEI5MDBC
QjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovOyB9OwogCQlCMjU1OTlCQzBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OTI0MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNv
dXJjZU1hc2tlci5oICovOyB9OworCQlCMjVCRTUxMDBEMDZCNzA4MDBCNTI0QzYgLyogSlNFdmVu
dFRhcmdldEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI1QkU1MEUwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmNwcCAq
LzsgfTsKKwkJQjI1QkU1MTEwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjVCRTUwRjBE
MDZCNzA4MDBCNTI0QzYgLyogSlNFdmVudFRhcmdldEJhc2UuaCAqLzsgfTsKIAkJQjI1REZBQUYw
QjJFMjkyOTAwMEU2NTEwIC8qIEpTU1ZHTWF0cml4Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNURGQUFFMEIyRTI5MjkwMDBFNjUxMCAv
KiBKU1NWR01hdHJpeEN1c3RvbS5jcHAgKi87IH07CiAJCUIyNjU1NEVBMEI4MEQ3NDkwMEE1MEVD
MyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjY1NTRFODBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4
dFBhdGguY3BwICovOyB9OwogCQlCMjY1NTRFQjBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZH
VGV4dFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNjU1NEU5MEI4MEQ3NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oICovOyB9OwpA
QCAtMzE0NCw2ICszMTQ2LDcgQEAKIAkJQjI3NTM1ODIwQjA1MzgxNDAwMkNFNjRGIC8qIFBlbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NTUw
QjA1MzgxNDAwMkNFNjRGIC8qIFBlbi5oICovOyB9OwogCQlCMjc1MzU4RTBCMDUzQTY2MDAyQ0U2
NEYgLyogSWNvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tICovOyB9OwogCQlC
Mjc3QjQwNDBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3N0I0MDMwQjIyRjM3QzAw
MDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4dE1hYy5tbSAqLzsgfTsKKwkJQjI4QkMzMUEwRDEzNUU1
NDAwQ0RCQTI3IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QkMzMTkwRDEzNUU1NDAwQ0RCQTI3IC8qIEpT
RXZlbnRUYXJnZXRCYXNlLmx1dC5oICovOyB9OwogCQlCMjhDNkEyNzBEMDBDNDQ4MDAzMzRBQTQg
LyogU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTFFMEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwICovOyB9OwogCQlCMjhDNkEyODBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjhDNkExRjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmggKi87IH07CiAJCUIyOEM2QTI5MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhD
NkEyMDBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuY3BwICovOyB9OwpAQCAtMzY5
Myw3ICszNjk2LDYgQEAKIAkJQkNEOUMyQzIwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMy
QkUwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxpc3QuY3BwICovOyB9OwogCQlCQ0Q5QzJDMzBD
MTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMyQkYwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxp
c3QuaCAqLzsgfTsKIAkJQkNEOUMyQzYwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRE9NRXhjZXB0aW9u
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0Q5QzJDNDBDMTdCNkVDMDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1
Y3Rvci5sdXQuaCAqLzsgfTsKLQkJQkNEOUMyQzcwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRU
YXJnZXROb2RlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNEOUMyQzUwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXROb2RlLmx1dC5o
ICovOyB9OwogCQlCQ0UwMTM5QTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTAxMzk4MEMw
QkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuY3BwICovOyB9OwogCQlCQ0UwMTM5QjBDMEJF
RjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNo
ZWV0LmggKi87IH07CiAJCUJDRUE0NzhGMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNFQTQ3N0MwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAgKi87IH07CkBAIC03MDkxLDYgKzcwOTMsOCBAQAogCQlCMjU1OTkyMjBEMDBE
OEI5MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXJrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlTWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNTU5OTIzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTkyNDBEMDBEOEI5MDBCQjgy
NUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1Jlc291cmNlTWFza2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
NUJFNTBFMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFdmVudFRhcmdldEJhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjVCRTUwRjBEMDZCNzA4MDBCNTI0QzYgLyogSlNF
dmVudFRhcmdldEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXZl
bnRUYXJnZXRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNURGQUFFMEIy
RTI5MjkwMDBFNjUxMCAvKiBKU1NWR01hdHJpeEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdNYXRyaXhDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjY1NTRFODBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4
dFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RleHRQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NTU0RTkwQjgw
RDc0OTAwQTUwRUMzIC8qIFJlbmRlclNWR1RleHRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdUZXh0UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzE0Miw2ICs3MTQ2LDcgQEAKIAkJQjI3NTM1NTUwQjA1MzgxNDAwMkNFNjRGIC8q
IFBlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVuLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEljb25NYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzdCNDAzMEIyMkYzN0MwMDA0QkVDNiAv
KiBHcmFwaGljc0NvbnRleHRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCMjhCQzMxOTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2UubHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI4QzZBMUUwRDAwQzQ0ODAwMzM0QUE0
IC8qIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI4QzZBMUYwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0RvY3VtZW50RXh0ZW5z
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRG9jdW1lbnRFeHRl
bnNpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyOEM2QTIwMEQwMEM0NDgw
MDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHSW1hZ2VMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzcwMSw3ICs3NzA2LDYgQEAKIAkJQkNEOUMyQkUwQzE3QjY5RTAwNUM5MEEyIC8qIEpT
Tm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTm9k
ZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Q5QzJCRjBDMTdCNjlF
MDA1QzkwQTIgLyogSlNOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Q5QzJDNDBD
MTdCNkVDMDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IubHV0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDRDlDMkM1MEMxN0I2RUMwMDVDOTBB
MiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRXZlbnRUYXJnZXROb2RlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0UwMTM5ODBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHls
ZVNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0eWxlU2hlZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0MwOTdDQUFDODAwOTRDOUU0
IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgyMDgsNyArODIxMiw2IEBACiAJCQkJQThEMDZCMzgw
QTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgKi8sCiAJCQkJQThEMDZCMzcwQTI2NURD
RDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5oICovLAogCQkJCUJDRDlDMkM0MEMxN0I2RUMwMDVDOTBB
MiAvKiBKU0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oICovLAotCQkJCUJDRDlDMkM1MEMx
N0I2RUMwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCAqLywKIAkJCQk2NTY1ODFE
QTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX2Nzcy5sdXQuaCAqLywKIAkJCQk2NTY1ODFEQzA5RDE1
MDhEMDAwRTYxRDcgLyoga2pzX2V2ZW50cy5sdXQuaCAqLywKIAkJCQk2NTY1ODFERTA5RDE1MDhE
MDAwRTYxRDcgLyoga2pzX25hdmlnYXRvci5sdXQuaCAqLywKQEAgLTEwNTQxLDYgKzEwNTQ0LDcg
QEAKIAkJCQkxQUNFNTNERDBBOEQxODgxMDAyMjk0N0QgLyogSlNET01QYXJzZXIuY3BwICovLAog
CQkJCTFBQ0U1M0RFMEE4RDE4ODEwMDIyOTQ3RCAvKiBKU0RPTVBhcnNlci5oICovLAogCQkJCTY1
NjU4MUQ3MDlEMTUwOEQwMDBFNjFENyAvKiBKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oICovLAorCQkJ
CUIyOEJDMzE5MEQxMzVFNTQwMENEQkEyNyAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCAqLywK
IAkJCQkxQUNFNTNGNDBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmNwcCAqLywK
IAkJCQkxQUNFNTNGNTBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmggKi8sCiAJ
CQkJNjU2NTgxRDkwOUQxNTA4RDAwMEU2MUQ3IC8qIEpTWFNMVFByb2Nlc3Nvci5sdXQuaCAqLywK
QEAgLTExMzU5LDYgKzExMzYzLDggQEAKIAkJCQlFMTBCOTM3QjBCNzNDMDBBMDAzRUQ4OTAgLyog
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCAqLywKIAkJCQlCQ0Q5QzI2ODBDMTdBQTgxMDA1Qzkw
QTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEOUMyNjkwQzE3
QUE4MTAwNUM5MEEyIC8qIEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IuaCAqLywKKwkJCQlCMjVC
RTUwRTBEMDZCNzA4MDBCNTI0QzYgLyogSlNFdmVudFRhcmdldEJhc2UuY3BwICovLAorCQkJCUIy
NUJFNTBGMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5oICovLAogCQkJCUJD
RDlDMjZBMEMxN0FBODEwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5jcHAgKi8sCiAJCQkJ
QkNEOUMyNkIwQzE3QUE4MTAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXROb2RlLmggKi8sCiAJCQkJ
QkM2REM3QTAwQzFBNEJGQTAwNEUyMDE3IC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCAqLywKQEAg
LTEzMzM1LDcgKzEzMzQxLDYgQEAKIAkJCQk5M0Y5Qjc3NTBCQTVGREREMDA4NTQwNjQgLyogSlNF
bnRpdHlSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTgzNzhFMDlGODVENEYwMEI4
NUFFNCAvKiBKU0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Q5QzI3MTBDMTdBQTgxMDA1
QzkwQTIgLyogSlNFdmVudFRhcmdldE5vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDRDlDMkM3
MEMxN0I2RUMwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNkRDN0ExMEMxQTRCRkEwMDRFMjAxNyAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5j
aG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTJERjIwQTFCODUyQTAwQzgwN0Y4
IC8qIEpTSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTQwOTAsOSArMTQw
OTUsMTEgQEAKIAkJCQlCQ0IxNkMyRDA5NzlDM0JEMDA0Njc3NDEgLyogbG9hZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOURGODA5OUU2NDkyMDA1NkU1ODEgLyogbWFya3VwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQjI1QkU1MTEwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRU
YXJnZXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUNCRkM5OTBEMTBFNDgzMDAyREJGNTEg
LyogQ2FjaGVkUGFnZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MDRCNzcw
RDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NEJGOUU1MEQxMUUxMzMwMDdEMjQ3RiAvKiBDbGFzc05hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCMjhCQzMxQTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2UubHV0LmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTE0MTMxLDcgKzE0MTM4LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMw
MkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJ
CWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJCWNv
bXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rp
bmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTU4MDEsNiAr
MTU4MDcsNyBAQAogCQkJCUJDQjE2QzJDMDk3OUMzQkQwMDQ2Nzc0MSAvKiBsb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91
bml0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjVCRTUxMDBEMDZCNzA4MDBCNTI0QzYgLyog
SlNFdmVudFRhcmdldEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNBMzhCNEIwRDBFNTgw
ODAwNjg3MkMyIC8qIEVkaXRvckNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MDRC
NzYwRDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM0QkY5RTQwRDExRTEzMzAwN0QyNDdGIC8qIENsYXNzTmFtZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgYmlu
ZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSlNF
dmVudFRhcmdldE5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBTb3VyY2UgZm9y
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzVGFibGUKK0BiZWdpbiBKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllc1RhYmxlIDUwCitvbmFib3J0ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbkFib3J0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uYmx1ciAgICAgICAgV2Vi
Q29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmx1ciAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZQorb25jaGFuZ2UgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
T25DaGFuZ2UgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmNsaWNrICAgICAgIFdlYkNvcmU6
OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNsaWNrICAgICAgICAgICAgICAgIERvbnREZWxl
dGUKK29uY29udGV4dG1lbnUgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQ29u
dGV4dE1lbnUgICAgICAgICAgRG9udERlbGV0ZQorb25kYmxjbGljayAgICBXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25EYmxDbGljayAgICAgICAgICAgICBEb250RGVsZXRlCitv
bmJlZm9yZWN1dCAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkJlZm9yZUN1
dCAgICAgICAgICAgIERvbnREZWxldGUKK29uY3V0ICAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRh
cmdldFByb3BlcnRpZXM6Ok9uQ3V0ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25iZWZv
cmVjb3B5ICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CZWZvcmVDb3B5ICAg
ICAgICAgICBEb250RGVsZXRlCitvbmNvcHkgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkNvcHkgICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uYmVmb3JlcGFz
dGUgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlUGFzdGUgICAgICAg
ICAgRG9udERlbGV0ZQorb25wYXN0ZSAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25QYXN0ZSAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmRyYWcgICAgICAgIFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWcgICAgICAgICAgICAgICAgIERv
bnREZWxldGUKK29uZHJhZ2VuZCAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uRHJhZ0VuZCAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25kcmFnZW50ZXIgICBXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnRW50ZXIgICAgICAgICAgICBEb250RGVs
ZXRlCitvbmRyYWdsZWF2ZSAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRy
YWdMZWF2ZSAgICAgICAgICAgIERvbnREZWxldGUKK29uZHJhZ292ZXIgICAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZ092ZXIgICAgICAgICAgICAgRG9udERlbGV0ZQor
b25kcmFnc3RhcnQgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnU3Rh
cnQgICAgICAgICAgICBEb250RGVsZXRlCitvbmRyb3AgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkRyb3AgICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uZXJy
b3IgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRXJyb3IgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQorb25mb2N1cyAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6T25Gb2N1cyAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmlucHV0ICAg
ICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbklucHV0ICAgICAgICAgICAg
ICAgIERvbnREZWxldGUKK29ua2V5ZG93biAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3Bl
cnRpZXM6Ok9uS2V5RG93biAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25rZXlwcmVzcyAgICBX
ZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlQcmVzcyAgICAgICAgICAgICBE
b250RGVsZXRlCitvbmtleXVwICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVz
OjpPbktleVVwICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29ubG9hZCAgICAgICAgV2ViQ29y
ZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTG9hZCAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZQorb25tb3VzZWRvd24gICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25N
b3VzZURvd24gICAgICAgICAgICBEb250RGVsZXRlCitvbm1vdXNlbW92ZSAgIFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlTW92ZSAgICAgICAgICAgIERvbnREZWxldGUK
K29ubW91c2VvdXQgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VP
dXQgICAgICAgICAgICAgRG9udERlbGV0ZQorb25tb3VzZW92ZXIgICBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU92ZXIgICAgICAgICAgICBEb250RGVsZXRlCitvbm1v
dXNldXAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlVXAgICAg
ICAgICAgICAgIERvbnREZWxldGUKK29ubW91c2V3aGVlbCAgV2ViQ29yZTo6SlNFdmVudFRhcmdl
dFByb3BlcnRpZXM6Ok9uTW91c2VXaGVlbCAgICAgICAgICAgRG9udERlbGV0ZQorb25yZXNldCAg
ICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25SZXNldCAgICAgICAgICAg
ICAgICBEb250RGVsZXRlCitvbnJlc2l6ZSAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPblJlc2l6ZSAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uc2Nyb2xsICAgICAg
V2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uU2Nyb2xsICAgICAgICAgICAgICAg
RG9udERlbGV0ZQorb25zZWFyY2ggICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25TZWFyY2ggICAgICAgICAgICAgICBEb250RGVsZXRlCitvbnNlbGVjdCAgICAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNlbGVjdCAgICAgICAgICAgICAgIERvbnRE
ZWxldGUKK29uc2VsZWN0c3RhcnQgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
U2VsZWN0U3RhcnQgICAgICAgICAgRG9udERlbGV0ZQorb25zdWJtaXQgICAgICBXZWJDb3JlOjpK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TdWJtaXQgICAgICAgICAgICAgICBEb250RGVsZXRl
CitvbnVubG9hZCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblVubG9h
ZCAgICAgICAgICAgICAgIERvbnREZWxldGUKK0BlbmQKKyovCisKKy8qCitAYmVnaW4gSlNFdmVu
dFRhcmdldFByb3RvdHlwZVRhYmxlIDUKK2FkZEV2ZW50TGlzdGVuZXIgICAgICAgICZXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb248V2ViQ29yZTo6SlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6OkFkZEV2ZW50TGlzdGVuZXI+OjpjcmVhdGUgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAzCityZW1vdmVFdmVudExpc3RlbmVyICAgICAmV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uPFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpSZW1vdmVFdmVu
dExpc3RlbmVyPjo6Y3JlYXRlIERvbnREZWxldGV8RnVuY3Rpb24gMworZGlzcGF0Y2hFdmVudCAg
ICAgICAgICAgJldlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbjxXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD46OmNyZWF0ZSAgICAgICBE
b250RGVsZXRlfEZ1bmN0aW9uIDEKK0BlbmQKKyovCisKK2Jvb2wgcmV0cmlldmVFdmVudFRhcmdl
dEFuZENvcnJlc3BvbmRpbmdOb2RlKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCogdGhp
c09iaiwgTm9kZSomIGV2ZW50Tm9kZSwgRXZlbnRUYXJnZXQqJiBldmVudFRhcmdldCkKK3sKKyAg
ICBpZiAodGhpc09iai0+aW5oZXJpdHMoJkpTTm9kZTo6aW5mbykpIHsKKyAgICAgICAgSlNFdmVu
dFRhcmdldE5vZGUqIGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTRXZlbnRUYXJnZXROb2RlKj4odGhp
c09iaik7CisgICAgICAgIEFTU0VSVChqc05vZGUpOworCisgICAgICAgIEV2ZW50VGFyZ2V0Tm9k
ZSogbm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGpzTm9kZS0+aW1wbCgpKTsK
KyAgICAgICAgQVNTRVJUKG5vZGUpOworCisgICAgICAgIGV2ZW50Tm9kZSA9IG5vZGU7CisgICAg
ICAgIGV2ZW50VGFyZ2V0ID0gbm9kZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitBdG9taWNTdHJpbmcgZXZlbnROYW1lRm9yUHJvcGVydHlU
b2tlbihpbnQgdG9rZW4pCit7ICAgIAorICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkFib3J0OgorICAgICAgICByZXR1cm4gYWJvcnRFdmVu
dDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkJsdXI6CisgICAgICAgIHJl
dHVybiBibHVyRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25DaGFu
Z2U6CisgICAgICAgIHJldHVybiBjaGFuZ2VFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkNsaWNrOgorICAgICAgICByZXR1cm4gY2xpY2tFdmVudDsKKyAgICBjYXNl
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNvbnRleHRNZW51OgorICAgICAgICByZXR1cm4g
Y29udGV4dG1lbnVFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRi
bENsaWNrOgorICAgICAgICByZXR1cm4gZGJsY2xpY2tFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkVycm9yOgorICAgICAgICByZXR1cm4gZXJyb3JFdmVudDsKKyAg
ICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkZvY3VzOgorICAgICAgICByZXR1cm4g
Zm9jdXNFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbklucHV0Ogor
ICAgICAgICByZXR1cm4gaW5wdXRFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbktleURvd246CisgICAgICAgIHJldHVybiBrZXlkb3duRXZlbnQ7CisgICAgY2FzZSBK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlQcmVzczoKKyAgICAgICAgcmV0dXJuIGtleXBy
ZXNzRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlVcDoKKyAg
ICAgICAgcmV0dXJuIGtleXVwRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25Mb2FkOgorICAgICAgICByZXR1cm4gbG9hZEV2ZW50OworICAgIGNhc2UgSlNFdmVudFRh
cmdldFByb3BlcnRpZXM6Ok9uTW91c2VEb3duOgorICAgICAgICByZXR1cm4gbW91c2Vkb3duRXZl
bnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU1vdmU6CisgICAg
ICAgIHJldHVybiBtb3VzZW1vdmVFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbk1vdXNlT3V0OgorICAgICAgICByZXR1cm4gbW91c2VvdXRFdmVudDsKKyAgICBjYXNl
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlT3ZlcjoKKyAgICAgICAgcmV0dXJuIG1v
dXNlb3ZlckV2ZW50OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VV
cDoKKyAgICAgICAgcmV0dXJuIG1vdXNldXBFdmVudDsgICAgICAKKyAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlV2hlZWw6CisgICAgICAgIHJldHVybiBtb3VzZXdoZWVs
RXZlbnQ7ICAgICAgCisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CZWZvcmVD
dXQ6CisgICAgICAgIHJldHVybiBiZWZvcmVjdXRFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkN1dDoKKyAgICAgICAgcmV0dXJuIGN1dEV2ZW50OworICAgIGNhc2Ug
SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlQ29weToKKyAgICAgICAgcmV0dXJuIGJl
Zm9yZWNvcHlFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNvcHk6
CisgICAgICAgIHJldHVybiBjb3B5RXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25CZWZvcmVQYXN0ZToKKyAgICAgICAgcmV0dXJuIGJlZm9yZXBhc3RlRXZlbnQ7Cisg
ICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25QYXN0ZToKKyAgICAgICAgcmV0dXJu
IHBhc3RlRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnRW50
ZXI6CisgICAgICAgIHJldHVybiBkcmFnZW50ZXJFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkRyYWdPdmVyOgorICAgICAgICByZXR1cm4gZHJhZ292ZXJFdmVudDsK
KyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdMZWF2ZToKKyAgICAgICAg
cmV0dXJuIGRyYWdsZWF2ZUV2ZW50OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uRHJvcDoKKyAgICAgICAgcmV0dXJuIGRyb3BFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkRyYWdTdGFydDoKKyAgICAgICAgcmV0dXJuIGRyYWdzdGFydEV2ZW50
OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZzoKKyAgICAgICAgcmV0
dXJuIGRyYWdFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdF
bmQ6CisgICAgICAgIHJldHVybiBkcmFnZW5kRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6T25SZXNldDoKKyAgICAgICAgcmV0dXJuIHJlc2V0RXZlbnQ7CisgICAgY2Fz
ZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25SZXNpemU6CisgICAgICAgIHJldHVybiByZXNp
emVFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNjcm9sbDoKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbEV2ZW50OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRp
ZXM6Ok9uU2VhcmNoOgorICAgICAgICByZXR1cm4gc2VhcmNoRXZlbnQ7CisgICAgY2FzZSBKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25TZWxlY3Q6CisgICAgICAgIHJldHVybiBzZWxlY3RFdmVu
dDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNlbGVjdFN0YXJ0OgorICAg
ICAgICByZXR1cm4gc2VsZWN0c3RhcnRFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPblN1Ym1pdDoKKyAgICAgICAgcmV0dXJuIHN1Ym1pdEV2ZW50OworICAgIGNhc2Ug
SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uVW5sb2FkOgorICAgICAgICByZXR1cm4gdW5sb2Fk
RXZlbnQ7CisgICAgfQorCisgICAgcmV0dXJuIEF0b21pY1N0cmluZygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHJldmlzaW9uIDAp
CisrKyBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNFdmVudFRhcmdldEJhc2VfaAor
I2RlZmluZSBKU0V2ZW50VGFyZ2V0QmFzZV9oCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkpTRXZl
bnQuaCIKKyNpbmNsdWRlICJranNfZXZlbnRzLmgiCisjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsK
KworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKworICAgIC8vIEV2ZW50IHRhcmdldCBwcm9wZXJ0
aWVzIChzaGFyZWQgYWNyb3NzIGFsbCBKU0V2ZW50VGFyZ2V0KiBjbGFzc2VzKQorICAgIHN0cnVj
dCBKU0V2ZW50VGFyZ2V0UHJvcGVydGllcyB7CisgICAgICAgIGVudW0geworICAgICAgICAgICAg
QWRkRXZlbnRMaXN0ZW5lciwgUmVtb3ZlRXZlbnRMaXN0ZW5lciwgRGlzcGF0Y2hFdmVudCwKKyAg
ICAgICAgICAgIE9uQWJvcnQsIE9uQmx1ciwgT25DaGFuZ2UsIE9uQ2xpY2ssIE9uQ29udGV4dE1l
bnUsIE9uRGJsQ2xpY2ssIE9uRXJyb3IsCisgICAgICAgICAgICBPbkRyYWdFbnRlciwgT25EcmFn
T3ZlciwgT25EcmFnTGVhdmUsIE9uRHJvcCwgT25EcmFnU3RhcnQsIE9uRHJhZywgT25EcmFnRW5k
LAorICAgICAgICAgICAgT25CZWZvcmVDdXQsIE9uQ3V0LCBPbkJlZm9yZUNvcHksIE9uQ29weSwg
T25CZWZvcmVQYXN0ZSwgT25QYXN0ZSwgT25TZWxlY3RTdGFydCwKKyAgICAgICAgICAgIE9uRm9j
dXMsIE9uSW5wdXQsIE9uS2V5RG93biwgT25LZXlQcmVzcywgT25LZXlVcCwgT25Mb2FkLCBPbk1v
dXNlRG93biwKKyAgICAgICAgICAgIE9uTW91c2VNb3ZlLCBPbk1vdXNlT3V0LCBPbk1vdXNlT3Zl
ciwgT25Nb3VzZVVwLCBPbk1vdXNlV2hlZWwsIE9uUmVzZXQsCisgICAgICAgICAgICBPblJlc2l6
ZSwgT25TY3JvbGwsIE9uU2VhcmNoLCBPblNlbGVjdCwgT25TdWJtaXQsIE9uVW5sb2FkCisgICAg
ICAgIH07CisgICAgfTsKKworICAgIC8vIEV2ZW50IHRhcmdldCBwcm90b3R5cGUgc2hhcmluZyBm
dW5jdGlvbmFsaXR5CisgICAgdGVtcGxhdGU8aW50IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5j
dGlvbklkZW50aWZpZXI+CisgICAgY2xhc3MgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
QmFzZSA6IHB1YmxpYyBLSlM6OkludGVybmFsRnVuY3Rpb25JbXAgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZShLSlM6OkV4ZWNTdGF0ZSog
ZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1lKSAKKyAgICAgICAgICAg
IDogS0pTOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKHN0YXRpY19jYXN0PEtKUzo6RnVuY3Rpb25Qcm90
b3R5cGUqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG90eXBlKCkp
LCBuYW1lKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHB1dChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBLSlM6OmpzTnVtYmVyKGxlbiksIEtKUzo6RG9udERlbGV0ZSB8IEtK
Uzo6UmVhZE9ubHkgfCBLSlM6OkRvbnRFbnVtKTsgCisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgS0pTOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKiBjcmVhdGUoS0pTOjpFeGVjU3RhdGUqLCBpbnQg
bGVuLCBjb25zdCBLSlM6OklkZW50aWZpZXImIG5hbWUpOworICAgICAgICB2aXJ0dWFsIEtKUzo6
SlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0Kiwg
Y29uc3QgS0pTOjpMaXN0JikgPSAwOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgSlNFdmVu
dFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4KKyAgICBjbGFzcyBKU0V2ZW50VGFy
Z2V0UHJvdG90eXBlRnVuY3Rpb24gOiBwdWJsaWMgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0
aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVyPiB7CisgICAg
cHVibGljOgorICAgICAgICBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb24oS0pTOjpFeGVj
U3RhdGUqIGV4ZWMsIGludCBsZW4sIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgbmFtZSkgCisgICAg
ICAgICAgICA6IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4oZXhlYywgbGVuLCBuYW1lKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG5vdCBtZWFudCB0byBiZSBjYWxs
ZWQsIHRoZSB0ZW1wbGF0ZSBzcGV6aWFsaXphdGlvbnMgbmVlZCB0byBpbXBsZW1lbnQgaXQuCisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgICAgCisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgcGFydGlhbCBzcGVjaWFsaXphdGVkIHRl
bXBsYXRlIGZ1bmN0aW9ucyBiZWxvdyAKKyAgICBib29sIHJldHJpZXZlRXZlbnRUYXJnZXRBbmRD
b3JyZXNwb25kaW5nTm9kZShLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqIHRoaXNPYmos
IE5vZGUqJiwgRXZlbnRUYXJnZXQqJik7CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgSlNF
dmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRF
dmVudExpc3RlbmVyPiA6IHB1YmxpYyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25CYXNl
PEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRFdmVudExpc3RlbmVyPiB7CisgICAgcHVibGlj
OgorICAgICAgICBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb248SlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6OkFkZEV2ZW50TGlzdGVuZXI+KEtKUzo6RXhlY1N0YXRlKiBleGVjLCBpbnQgbGVu
LCBjb25zdCBLSlM6OklkZW50aWZpZXImIG5hbWUpIAorICAgICAgICAgICAgOiBKU0V2ZW50VGFy
Z2V0UHJvdG90eXBlRnVuY3Rpb25CYXNlPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRFdmVu
dExpc3RlbmVyPihleGVjLCBsZW4sIG5hbWUpCisgICAgICAgIHsgCisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUq
IGV4ZWMsIEtKUzo6SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEtKUzo6TGlzdCYgYXJncykKKyAg
ICAgICAgeworICAgICAgICAgICAgS0pTOjpET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlv
bihleGVjKTsKKworICAgICAgICAgICAgTm9kZSogZXZlbnROb2RlID0gMDsKKyAgICAgICAgICAg
IEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IDA7CisgICAgICAgICAgICBpZiAoIXJldHJpZXZl
RXZlbnRUYXJnZXRBbmRDb3JyZXNwb25kaW5nTm9kZShleGVjLCB0aGlzT2JqLCBldmVudE5vZGUs
IGV2ZW50VGFyZ2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4
ZWMsIEtKUzo6VHlwZUVycm9yKTsKKworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZXZlbnRO
b2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gS0pTOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICBpZiAo
SlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhm
cmFtZSktPmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKSkKKyAgICAgICAgICAg
ICAgICBldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVj
KSwgbGlzdGVuZXIsIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CisKKyAgICAgICAgICAgIHJl
dHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbjxKU0V2ZW50VGFy
Z2V0UHJvcGVydGllczo6UmVtb3ZlRXZlbnRMaXN0ZW5lcj4gOiBwdWJsaWMgSlNFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZl
bnRMaXN0ZW5lcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVudFRhcmdldFByb3RvdHlw
ZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpSZW1vdmVFdmVudExpc3RlbmVyPihL
SlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1l
KSAKKyAgICAgICAgICAgIDogSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZlbnRMaXN0ZW5lcj4oZXhlYywgbGVuLCBuYW1l
KQorICAgICAgICB7IAorICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUq
IGNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIEtKUzo6
RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisKKyAgICAgICAgICAgIE5v
ZGUqIGV2ZW50Tm9kZSA9IDA7CisgICAgICAgICAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQg
PSAwOworICAgICAgICAgICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGlu
Z05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnROb2RlLCBldmVudFRhcmdldCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBLSlM6OlR5cGVFcnJvcik7CisKKyAg
ICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGV2ZW50Tm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
KyAgICAgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEtKUzo6anNV
bmRlZmluZWQoKTsKKworICAgICAgICAgICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpLT5maW5kSlNFdmVudExpc3RlbmVy
KGFyZ3NbMV0pKQorICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LT5yZW1vdmVFdmVudExpc3Rl
bmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lciwgYXJnc1syXS0+dG9Cb29sZWFu
KGV4ZWMpKTsKKworICAgICAgICAgICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQorICAgIH07CisgCisgICAgdGVtcGxhdGU8PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRQ
cm90b3R5cGVGdW5jdGlvbjxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4g
OiBwdWJsaWMgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4geworICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVu
dFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpEaXNwYXRj
aEV2ZW50PihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiBuYW1lKSAKKyAgICAgICAgICAgIDogSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
QmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4oZXhlYywgbGVuLCBu
YW1lKQorICAgICAgICB7IAorICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFs
dWUqIGNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5v
ZGUqIGV2ZW50Tm9kZSA9IDA7CisgICAgICAgICAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQg
PSAwOworICAgICAgICAgICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGlu
Z05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnROb2RlLCBldmVudFRhcmdldCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBLSlM6OlR5cGVFcnJvcik7CisKKyAg
ICAgICAgICAgIEtKUzo6RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm4gS0pTOjpqc0Jvb2xlYW4oZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZl
bnQodG9FdmVudChhcmdzWzBdKSwgZXhjZXB0aW9uKSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLy8gVGhpcyBjcmVhdGlvbiBmdW5jdGlvbiByZWxpZXMgdXBvbiBhYm92ZSBzcGVjaWFsaXph
dGlvbnMKKyAgICB0ZW1wbGF0ZTxpbnQgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRl
bnRpZmllcj4KKyAgICBLSlM6OkludGVybmFsRnVuY3Rpb25JbXAqIEpTRXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmll
cj46OmNyZWF0ZShLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVu
dGlmaWVyJiBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBKU0V2ZW50VGFyZ2V0UHJv
dG90eXBlRnVuY3Rpb248SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4o
ZXhlYywgbGVuLCBuYW1lKTsgCisgICAgfQorfTsKKworLy8gTmVlZHMgdG8gYmUgaW5jbHVkZWQg
YWZ0ZXIgYWJvdmUgZGVjbGFyYXRpb24KKyNpbmNsdWRlICJKU0V2ZW50VGFyZ2V0QmFzZS5sdXQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBn
ZXRWYWx1ZVByb3BlcnR5L3B1dFZhbHVlUHJvcGVydHkKKyAgICBBdG9taWNTdHJpbmcgZXZlbnRO
YW1lRm9yUHJvcGVydHlUb2tlbihpbnQgdG9rZW4pOworCisgICAgdGVtcGxhdGU8Y2xhc3MgSlNF
dmVudFRhcmdldD4KKyAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0QmFzZSB7CisgICAgcHVibGljOgor
ICAgICAgICBKU0V2ZW50VGFyZ2V0QmFzZSgpIHsgfQorCisgICAgICAgIEtKUzo6SlNWYWx1ZSog
Z2V0VmFsdWVQcm9wZXJ0eShjb25zdCBKU0V2ZW50VGFyZ2V0KiBvd25lciwgS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQXRvbWlj
U3RyaW5nIGV2ZW50TmFtZSA9IGV2ZW50TmFtZUZvclByb3BlcnR5VG9rZW4odG9rZW4pOworICAg
ICAgICAgICAgaWYgKCFldmVudE5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBvd25lci0+Z2V0TGlzdGVuZXIoZXZlbnROYW1lKTsKKworICAgICAgICAgICAgcmV0dXJuIEtK
Uzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShjb25zdCBKU0V2ZW50VGFyZ2V0KiBvd25lciwgS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbiwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyBldmVudE5hbWUgPSBldmVudE5hbWVGb3JQcm9wZXJ0eVRva2Vu
KHRva2VuKTsKKyAgICAgICAgICAgIGlmICghZXZlbnROYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIoZXhlYywgZXZlbnROYW1lLCB2YWx1ZSk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU0V2ZW50VGFyZ2V0
Tm9kZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpTRXZlbnRUYXJnZXRTVkdFbGVtZW50SW5zdGFu
Y2U7CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgSlNQYXJlbnQ+CisgICAgICAgIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTRXZlbnRUYXJnZXQqIG93bmVyLCBLSlM6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEtKUzo6UHJvcGVydHlTbG90
JiBzbG90KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gS0pTOjpnZXRTdGF0aWNWYWx1
ZVNsb3Q8SlNFdmVudFRhcmdldCwgSlNQYXJlbnQ+KGV4ZWMsICZLSlM6OkpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzVGFibGUsIG93bmVyLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICB9CisK
KyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgSlNQYXJlbnQ+CisgICAgICAgIHZvaWQgcHV0KEpTRXZl
bnRUYXJnZXQqIG93bmVyLCBLSlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEtKUzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQorICAgICAg
ICB7CisgICAgICAgICAgICBLSlM6Omxvb2t1cFB1dDxKU0V2ZW50VGFyZ2V0LCBKU1BhcmVudD4o
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJktKUzo6SlNFdmVudFRhcmdldFByb3Bl
cnRpZXNUYWJsZSwgb3duZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFRoaXMgY2xh
c3MgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBjb2RlIHRoZSBLSlNfREVGSU5FX1BST1RP
VFlQRV9XSVRIX1BST1RPVFlQRQorICAgIC8vIGFuZCBLSlNfSU1QTEVNRU5UX1BST1RPVFlQRSBt
YWNyb3MgcHJvZHVjZSAtIHRoZSBpZGVhIGlzIHRoYXQgY2xhc3NlcyBsaWtlIEpTRXZlbnRUYXJn
ZXROb2RlCisgICAgLy8gYW5kIEpTRXZlbnRUYXJnZXRTVkdFbGVtZW50SW5zdGFuY2UgY2FuIHNo
YXJlIGEgc2luZ2xlIHByb3RvdHlwZSBqdXN0IGRpZmZlcmluZyBpbiB0aGUKKyAgICAvLyBuYW1p
bmcgIkV2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZSIgdnMgIkV2ZW50VGFyZ2V0U1ZHRWxlbWVudElu
c3RhbmNlUHJvdG90eXBlIi4gQWJvdmUgbWVudGlvbmVkCisgICAgLy8gbWFjcm9zIGZvcmNlIHRo
ZSBleGlzdGFuY2Ugb2Ygc2V2ZXJhbCBwcm90b3R5cGUgdGFibGVzIGZvciBlYWNoIG9mIHRoZSBj
bGFzc2VzIC0gYXZvaWQgdGhhdC4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBKU0V2ZW50VGFyZ2V0UHJv
dG90eXBlUGFyZW50LCBjbGFzcyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb24+Cisg
ICAgY2xhc3MgSlNFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBLSlM6OkpTT2JqZWN0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRUYXJnZXRQcm90b3R5cGUoS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMpCisgICAgICAgICAgICA6IEtKUzo6SlNPYmplY3QoSlNFdmVudFRhcmdldFByb3Rv
dHlwZVBhcmVudDo6c2VsZihleGVjKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIEtKUzo6SlNPYmplY3QqIHNlbGYoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN0YXRpYyBLSlM6OklkZW50aWZpZXIqIHByb3RvdHlwZU5hbWUgPSBu
ZXcgS0pTOjpJZGVudGlmaWVyKEpTRXZlbnRUYXJnZXRQcm90b3R5cGVJbmZvcm1hdGlvbjo6cHJv
dG90eXBlQ2xhc3NOYW1lKCkpOworCisgICAgICAgICAgICBLSlM6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBp
ZiAoS0pTOjpKU1ZhbHVlKiBvYmplY3RWYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0KCpw
cm90b3R5cGVOYW1lKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChvYmplY3RWYWx1ZS0+aXNP
YmplY3QoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6SlNPYmpl
Y3QqPihvYmplY3RWYWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEtKUzo6SlNP
YmplY3QqIG5ld09iamVjdCA9IG5ldyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlPEpTRXZlbnRUYXJn
ZXRQcm90b3R5cGVQYXJlbnQsIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVJbmZvcm1hdGlvbj4oZXhl
Yyk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnB1dChleGVjLCAqcHJvdG90eXBlTmFtZSwg
bmV3T2JqZWN0LCBLSlM6OkludGVybmFsIHwgS0pTOjpEb250RW51bSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3T2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBLSlM6OlByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEtKUzo6Z2V0U3RhdGljRnVuY3Rpb25TbG90PEtKUzo6SlNPYmplY3Q+KGV4ZWMsICZL
SlM6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBLSlM6
OkNsYXNzSW5mbyBzX2NsYXNzSW5mbyA9IHsgSlNFdmVudFRhcmdldFByb3RvdHlwZUluZm9ybWF0
aW9uOjpwcm90b3R5cGVDbGFzc05hbWUoKSwgMCwgJktKUzo6SlNFdmVudFRhcmdldFByb3RvdHlw
ZVRhYmxlIH07CisgICAgICAgICAgICByZXR1cm4gJnNfY2xhc3NJbmZvOworICAgICAgICB9Cisg
ICAgfTsKKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEpTRXZlbnRUYXJn
ZXRCYXNlX2gKSW5kZXg6IGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDI4NzU1
KQorKysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDY5ICsyNyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNFdmVudFRh
cmdldE5vZGUuaCIKIAotI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0j
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Tm9kZS5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSlNFdmVudC5oIgotI2luY2x1ZGUgIk5vZGUuaCIK
LSNpbmNsdWRlICJranNfZXZlbnRzLmgiCi0jaW5jbHVkZSAia2pzX3dpbmRvdy5oIgotCi0jaW5j
bHVkZSAiSlNFdmVudFRhcmdldE5vZGUubHV0LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEtKUzsKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCi0vKiBT
b3VyY2UgZm9yIEpTRXZlbnRUYXJnZXROb2RlVGFibGUKLUBiZWdpbiBKU0V2ZW50VGFyZ2V0Tm9k
ZVRhYmxlIDUwCi1vbmFib3J0ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkFi
b3J0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uYmx1ciAgICAgICAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldE5vZGU6Ok9uQmx1ciAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25jaGFu
Z2UgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25DaGFuZ2UgICAgICAgICAgICAg
ICBEb250RGVsZXRlCi1vbmNsaWNrICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpP
bkNsaWNrICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uY29udGV4dG1lbnUgV2ViQ29yZTo6
SlNFdmVudFRhcmdldE5vZGU6Ok9uQ29udGV4dE1lbnUgICAgICAgICAgRG9udERlbGV0ZQotb25k
YmxjbGljayAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EYmxDbGljayAgICAgICAg
ICAgICBEb250RGVsZXRlCi1vbmJlZm9yZWN1dCAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2Rl
OjpPbkJlZm9yZUN1dCAgICAgICAgICAgIERvbnREZWxldGUKLW9uY3V0ICAgICAgICAgV2ViQ29y
ZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQ3V0ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQot
b25iZWZvcmVjb3B5ICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25CZWZvcmVDb3B5ICAg
ICAgICAgICBEb250RGVsZXRlCi1vbmNvcHkgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRO
b2RlOjpPbkNvcHkgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uYmVmb3JlcGFzdGUgV2Vi
Q29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQmVmb3JlUGFzdGUgICAgICAgICAgRG9udERlbGV0
ZQotb25wYXN0ZSAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25QYXN0ZSAgICAg
ICAgICAgICAgICBEb250RGVsZXRlCi1vbmRyYWcgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJn
ZXROb2RlOjpPbkRyYWcgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uZHJhZ2VuZCAgICAg
V2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRHJhZ0VuZCAgICAgICAgICAgICAgRG9udERl
bGV0ZQotb25kcmFnZW50ZXIgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFnRW50
ZXIgICAgICAgICAgICBEb250RGVsZXRlCi1vbmRyYWdsZWF2ZSAgIFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXROb2RlOjpPbkRyYWdMZWF2ZSAgICAgICAgICAgIERvbnREZWxldGUKLW9uZHJhZ292ZXIg
ICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRHJhZ092ZXIgICAgICAgICAgICAgRG9u
dERlbGV0ZQotb25kcmFnc3RhcnQgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFn
U3RhcnQgICAgICAgICAgICBEb250RGVsZXRlCi1vbmRyb3AgICAgICAgIFdlYkNvcmU6OkpTRXZl
bnRUYXJnZXROb2RlOjpPbkRyb3AgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uZXJyb3Ig
ICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRXJyb3IgICAgICAgICAgICAgICAg
RG9udERlbGV0ZQotb25mb2N1cyAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25G
b2N1cyAgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmlucHV0ICAgICAgIFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXROb2RlOjpPbklucHV0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9ua2V5
ZG93biAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uS2V5RG93biAgICAgICAgICAg
ICAgRG9udERlbGV0ZQotb25rZXlwcmVzcyAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
T25LZXlQcmVzcyAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmtleXVwICAgICAgIFdlYkNvcmU6
OkpTRXZlbnRUYXJnZXROb2RlOjpPbktleVVwICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9u
bG9hZCAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTG9hZCAgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZQotb25tb3VzZWRvd24gICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9k
ZTo6T25Nb3VzZURvd24gICAgICAgICAgICBEb250RGVsZXRlCi1vbm1vdXNlbW92ZSAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbk1vdXNlTW92ZSAgICAgICAgICAgIERvbnREZWxldGUK
LW9ubW91c2VvdXQgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTW91c2VPdXQgICAg
ICAgICAgICAgRG9udERlbGV0ZQotb25tb3VzZW92ZXIgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
Tm9kZTo6T25Nb3VzZU92ZXIgICAgICAgICAgICBEb250RGVsZXRlCi1vbm1vdXNldXAgICAgIFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbk1vdXNlVXAgICAgICAgICAgICAgIERvbnREZWxl
dGUKLW9ubW91c2V3aGVlbCAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTW91c2VXaGVl
bCAgICAgICAgICAgRG9udERlbGV0ZQotb25yZXNldCAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFy
Z2V0Tm9kZTo6T25SZXNldCAgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnJlc2l6ZSAgICAg
IFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblJlc2l6ZSAgICAgICAgICAgICAgIERvbnRE
ZWxldGUKLW9uc2Nyb2xsICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uU2Nyb2xs
ICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25zZWFyY2ggICAgICBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0Tm9kZTo6T25TZWFyY2ggICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnNlbGVjdCAg
ICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblNlbGVjdCAgICAgICAgICAgICAgIERv
bnREZWxldGUKLW9uc2VsZWN0c3RhcnQgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uU2Vs
ZWN0U3RhcnQgICAgICAgICAgRG9udERlbGV0ZQotb25zdWJtaXQgICAgICBXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0Tm9kZTo6T25TdWJtaXQgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnVubG9h
ZCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblVubG9hZCAgICAgICAgICAgICAg
IERvbnREZWxldGUKLUBlbmQKLSovCiAKIEpTRXZlbnRUYXJnZXROb2RlOjpKU0V2ZW50VGFyZ2V0
Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG4pCiAgICAgOiBKU05vZGUoZXhlYywgbikKQEAg
LTk4LDIyOSArMzksMjUgQEAgSlNFdmVudFRhcmdldE5vZGU6OkpTRXZlbnRUYXJnZXROb2RlKEV4
ZQogCiBib29sIEpTRXZlbnRUYXJnZXROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTRXZlbnRUYXJnZXROb2RlLCBK
U05vZGU+KGV4ZWMsICZKU0V2ZW50VGFyZ2V0Tm9kZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworICAgIHJldHVybiBtX2Jhc2UuZ2V0T3duUHJvcGVydHlTbG90PEpTTm9kZT4odGhp
cywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogSlNWYWx1ZSogSlNFdmVudFRhcmdl
dE5vZGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIE9uQWJvcnQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoYWJvcnRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25CbHVy
OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGJsdXJFdmVudCk7Ci0gICAgICAgIGNh
c2UgT25DaGFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoY2hhbmdlRXZlbnQp
OwotICAgICAgICBjYXNlIE9uQ2xpY2s6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIo
Y2xpY2tFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Db250ZXh0TWVudToKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihjb250ZXh0bWVudUV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRibENs
aWNrOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRibGNsaWNrRXZlbnQpOwotICAg
ICAgICBjYXNlIE9uRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXJyb3JF
dmVudCk7Ci0gICAgICAgIGNhc2UgT25Gb2N1czoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0
ZW5lcihmb2N1c0V2ZW50KTsKLSAgICAgICAgY2FzZSBPbklucHV0OgotICAgICAgICAgICAgcmV0
dXJuIGdldExpc3RlbmVyKGlucHV0RXZlbnQpOwotICAgICAgICBjYXNlIE9uS2V5RG93bjoKLSAg
ICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihrZXlkb3duRXZlbnQpOwotICAgICAgICBjYXNl
IE9uS2V5UHJlc3M6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoa2V5cHJlc3NFdmVu
dCk7Ci0gICAgICAgIGNhc2UgT25LZXlVcDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5l
cihrZXl1cEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkxvYWQ6Ci0gICAgICAgICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIobG9hZEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbk1vdXNlRG93bjoKLSAgICAg
ICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihtb3VzZWRvd25FdmVudCk7Ci0gICAgICAgIGNhc2Ug
T25Nb3VzZU1vdmU6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIobW91c2Vtb3ZlRXZl
bnQpOwotICAgICAgICBjYXNlIE9uTW91c2VPdXQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlz
dGVuZXIobW91c2VvdXRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Nb3VzZU92ZXI6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIobW91c2VvdmVyRXZlbnQpOwotICAgICAgICBjYXNlIE9u
TW91c2VVcDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihtb3VzZXVwRXZlbnQpOyAg
ICAgIAotICAgICAgICBjYXNlIE9uTW91c2VXaGVlbDoKLSAgICAgICAgICAgIHJldHVybiBnZXRM
aXN0ZW5lcihtb3VzZXdoZWVsRXZlbnQpOyAgICAgIAotICAgICAgICBjYXNlIE9uQmVmb3JlQ3V0
OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGJlZm9yZWN1dEV2ZW50KTsKLSAgICAg
ICAgY2FzZSBPbkN1dDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihjdXRFdmVudCk7
Ci0gICAgICAgIGNhc2UgT25CZWZvcmVDb3B5OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKGJlZm9yZWNvcHlFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Db3B5OgotICAgICAgICAgICAg
cmV0dXJuIGdldExpc3RlbmVyKGNvcHlFdmVudCk7Ci0gICAgICAgIGNhc2UgT25CZWZvcmVQYXN0
ZToKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihiZWZvcmVwYXN0ZUV2ZW50KTsKLSAg
ICAgICAgY2FzZSBPblBhc3RlOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKHBhc3Rl
RXZlbnQpOwotICAgICAgICBjYXNlIE9uRHJhZ0VudGVyOgotICAgICAgICAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGRyYWdlbnRlckV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyYWdPdmVyOgotICAg
ICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdvdmVyRXZlbnQpOwotICAgICAgICBjYXNl
IE9uRHJhZ0xlYXZlOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdsZWF2ZUV2
ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyb3A6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoZHJvcEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyYWdTdGFydDoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihkcmFnc3RhcnRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25EcmFnOgot
ICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdFdmVudCk7Ci0gICAgICAgIGNhc2Ug
T25EcmFnRW5kOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdlbmRFdmVudCk7
Ci0gICAgICAgIGNhc2UgT25SZXNldDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihy
ZXNldEV2ZW50KTsKLSAgICAgICAgY2FzZSBPblJlc2l6ZToKLSAgICAgICAgICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihyZXNpemVFdmVudCk7Ci0gICAgICAgIGNhc2UgT25TY3JvbGw6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoc2Nyb2xsRXZlbnQpOwotICAgICAgICBjYXNlIE9uU2Vh
cmNoOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKHNlYXJjaEV2ZW50KTsKLSAgICAg
ICAgY2FzZSBPblNlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihzZWxlY3RF
dmVudCk7Ci0gICAgICAgIGNhc2UgT25TZWxlY3RTdGFydDoKLSAgICAgICAgICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihzZWxlY3RzdGFydEV2ZW50KTsKLSAgICAgICAgY2FzZSBPblN1Ym1pdDoKLSAg
ICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihzdWJtaXRFdmVudCk7Ci0gICAgICAgIGNhc2Ug
T25VbmxvYWQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIodW5sb2FkRXZlbnQpOwot
ICAgIH0KLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBtX2Jhc2UuZ2V0
VmFsdWVQcm9wZXJ0eSh0aGlzLCBleGVjLCB0b2tlbik7CiB9CiAKIHZvaWQgSlNFdmVudFRhcmdl
dE5vZGU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQogewotICAgIGxvb2t1cFB1dDxKU0V2ZW50VGFy
Z2V0Tm9kZSwgSlNOb2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSlNFdmVu
dFRhcmdldE5vZGVUYWJsZSwgdGhpcyk7CisgICAgbV9iYXNlLnB1dDxKU05vZGU+KHRoaXMsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXRO
b2RlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBKU1ZhbHVl
KiB2YWx1ZSwgaW50IC8qYXR0ciovKQordm9pZCBKU0V2ZW50VGFyZ2V0Tm9kZTo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSogdmFsdWUsIGludCBh
dHRyKQogewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBPbkFib3J0OgotICAg
ICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYWJvcnRFdmVudCwgdmFsdWUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25CbHVyOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywgYmx1ckV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBPbkNoYW5nZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGNoYW5nZUV2ZW50LCB2
YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkNsaWNrOgotICAgICAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYywgY2xpY2tFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgT25Db250ZXh0TWVudToKLSAgICAgICAgICAgIHNldExpc3Rl
bmVyKGV4ZWMsIGNvbnRleHRtZW51RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE9uRGJsQ2xpY2s6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBk
YmxjbGlja0V2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
bkVycm9yOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZXJyb3JFdmVudCwgdmFsdWUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Gb2N1czoKLSAgICAgICAgICAg
IHNldExpc3RlbmVyKGV4ZWMsIGZvY3VzRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE9uSW5wdXQ6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBp
bnB1dEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbktl
eURvd246Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBrZXlkb3duRXZlbnQsIHZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uS2V5UHJlc3M6Ci0gICAgICAg
ICAgICBzZXRMaXN0ZW5lcihleGVjLCBrZXlwcmVzc0V2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBPbktleVVwOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywga2V5dXBFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgT25Mb2FkOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgbG9hZEV2ZW50LCB2YWx1
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlRG93bjoKLSAgICAg
ICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIG1vdXNlZG93bkV2ZW50LCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlTW92ZToKLSAgICAgICAgICAgIHNldExp
c3RlbmVyKGV4ZWMsIG1vdXNlbW92ZUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBPbk1vdXNlT3V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywg
bW91c2VvdXRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25Nb3VzZU92ZXI6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBtb3VzZW92ZXJFdmVu
dCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Nb3VzZVVwOgot
ICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgbW91c2V1cEV2ZW50LCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlV2hlZWw6Ci0gICAgICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLCBtb3VzZXdoZWVsRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE9uQmVmb3JlQ3V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywgYmVmb3JlY3V0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE9uQ3V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgY3V0RXZlbnQsIHZh
bHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uQmVmb3JlQ29weToKLSAg
ICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGJlZm9yZWNvcHlFdmVudCwgdmFsdWUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Db3B5OgotICAgICAgICAgICAgc2V0TGlz
dGVuZXIoZXhlYywgY29weUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBPbkJlZm9yZVBhc3RlOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmVm
b3JlcGFzdGVFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25QYXN0ZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHBhc3RlRXZlbnQsIHZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZ0VudGVyOgotICAgICAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZHJhZ2VudGVyRXZlbnQsIHZhbHVlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZ092ZXI6Ci0gICAgICAgICAgICBzZXRMaXN0
ZW5lcihleGVjLCBkcmFnb3ZlckV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBPbkRyYWdMZWF2ZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGRy
YWdsZWF2ZUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
bkRyb3A6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBkcm9wRXZlbnQsIHZhbHVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZ1N0YXJ0OgotICAgICAgICAg
ICAgc2V0TGlzdGVuZXIoZXhlYywgZHJhZ3N0YXJ0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZzoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4
ZWMsIGRyYWdFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25EcmFnRW5kOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZHJhZ2VuZEV2ZW50LCB2
YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPblJlc2V0OgotICAgICAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYywgcmVzZXRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgT25SZXNpemU6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihl
eGVjLCByZXNpemVFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgT25TY3JvbGw6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBzY3JvbGxFdmVudCwg
dmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25TZWFyY2g6Ci0gICAg
ICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBzZWFyY2hFdmVudCwgdmFsdWUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25TZWxlY3Q6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5l
cihleGVjLCBzZWxlY3RFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgT25TZWxlY3RTdGFydDoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHNlbGVj
dHN0YXJ0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9u
U3VibWl0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgc3VibWl0RXZlbnQsIHZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uVW5sb2FkOgotICAgICAgICAg
ICAgc2V0TGlzdGVuZXIoZXhlYywgdW5sb2FkRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBtX2Jhc2UucHV0VmFsdWVQcm9wZXJ0eSh0aGlzLCBleGVjLCB0b2tl
biwgdmFsdWUsIGF0dHIpOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpzZXRMaXN0ZW5l
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBKU1ZhbHVl
KiBmdW5jKSBjb25zdAordm9pZCBKU0V2ZW50VGFyZ2V0Tm9kZTo6c2V0TGlzdGVuZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgSlNWYWx1ZSogZnVuYykg
Y29uc3QKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmRvY3VtZW50KCktPmZyYW1lKCk7
CiAgICAgaWYgKGZyYW1lKQpAQCAtMzQxLDY2ICs3OCwxMSBAQCB2b2lkIEpTRXZlbnRUYXJnZXRO
b2RlOjpwdXNoRXZlbnRIYW5kbGVyCiB7CiB9CiAKLS8qCi1AYmVnaW4gSlNFdmVudFRhcmdldE5v
ZGVQcm90b3R5cGVUYWJsZSA1Ci0jIGZyb20gdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotYWRk
RXZlbnRMaXN0ZW5lciAgICAgICAgJldlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBl
RnVuY3Rpb25BZGRFdmVudExpc3RlbmVyOjpjcmVhdGUgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAz
Ci1yZW1vdmVFdmVudExpc3RlbmVyICAgICAmV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGVQcm90
b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXI6OmNyZWF0ZSBEb250RGVsZXRlfEZ1bmN0
aW9uIDMKLWRpc3BhdGNoRXZlbnQgICAgICAgICAgICZXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9k
ZVByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudDo6Y3JlYXRlICAgICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMQotQGVuZAotKi8KLQotS0pTX0lNUExFTUVOVF9QUk9UT1RZUEUoIkV2ZW50VGFy
Z2V0Tm9kZSIsIEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlKQotCi1KU1ZhbHVlKiBKU0V2ZW50
VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcjo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykK
LXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0V2ZW50VGFyZ2V0Tm9kZTo6aW5mbykp
Ci0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgRE9NRXhj
ZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gICAgSlNFdmVudFRhcmdldE5vZGUq
IGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTRXZlbnRUYXJnZXROb2RlKj4odGhpc09iaik7Ci0gICAg
RXZlbnRUYXJnZXROb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4oanNO
b2RlLT5pbXBsKCkpOwotCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICBKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gS0pTOjpXaW5kb3c6OnJldHJpZXZlV2luZG93
KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGFyZ3NbMV0pOwotICAgIGlmIChs
aXN0ZW5lcikKLSAgICAgICAgbm9kZS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKSwgbGlzdGVuZXIsYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVG
dW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXI6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmSlNFdmVudFRhcmdldE5vZGU6OmluZm8pKQotICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3Ig
ZXhjZXB0aW9uKGV4ZWMpOwotICAgIEpTRXZlbnRUYXJnZXROb2RlKiBqc05vZGUgPSBzdGF0aWNf
Y2FzdDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KHRoaXNPYmopOwotICAgIEV2ZW50VGFyZ2V0Tm9kZSog
bm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGpzTm9kZS0+aW1wbCgpKTsKLQot
ICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSktPmZpbmRKU0V2
ZW50TGlzdGVuZXIoYXJnc1sxXSk7Ci0gICAgaWYgKGxpc3RlbmVyKSAKLSAgICAgICAgbm9kZS0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsYXJn
c1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQot
SlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQ6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0
IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNFdmVudFRhcmdl
dE5vZGU6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwotICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICAgIEpTRXZl
bnRUYXJnZXROb2RlKiBqc05vZGUgPSBzdGF0aWNfY2FzdDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KHRo
aXNPYmopOwotICAgIEV2ZW50VGFyZ2V0Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFy
Z2V0Tm9kZSo+KGpzTm9kZS0+aW1wbCgpKTsKLSAgICAKLSAgICByZXR1cm4ganNCb29sZWFuKG5v
ZGUtPmRpc3BhdGNoRXZlbnQodG9FdmVudChhcmdzWzBdKSwgZXhjZXB0aW9uKSk7Ci19Ci0KIEV2
ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoSlNWYWx1ZSogdmFsKQogewogICAgIGlm
ICghdmFsIHx8ICF2YWwtPmlzT2JqZWN0KCZKU0V2ZW50VGFyZ2V0Tm9kZTo6aW5mbykpCiAgICAg
ICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+
KHN0YXRpY19jYXN0PEpTRXZlbnRUYXJnZXROb2RlKj4odmFsKS0+aW1wbCgpKTsKIH0KIApJbmRl
eDogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAyODc1NSkKKysrIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjgsNyBAQAogI2Rl
ZmluZSBKU0V2ZW50VGFyZ2V0Tm9kZV9oCiAKICNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNsdWRl
ICJKU0V2ZW50VGFyZ2V0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDcg
KzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNFdmVudFRhcmdldE5v
ZGUgOiBwdWJsaWMgSlNOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTRXZlbnRUYXJnZXRO
b2RlKEtKUzo6RXhlY1N0YXRlKiwgTm9kZSogbik7CisgICAgICAgIEpTRXZlbnRUYXJnZXROb2Rl
KEtKUzo6RXhlY1N0YXRlKiwgTm9kZSopOwogCiAgICAgICAgIHZvaWQgc2V0TGlzdGVuZXIoS0pT
OjpFeGVjU3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgS0pTOjpKU1ZhbHVl
KiBmdW5jKSBjb25zdDsKICAgICAgICAgS0pTOjpKU1ZhbHVlKiBnZXRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CkBAIC00NiwyOCArNDgsMTcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlKiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpOwog
ICAgICAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4s
IEtKUzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKTsKIAotICAgICAgICBlbnVtIHsgIAotICAg
ICAgICAgICAgQWRkRXZlbnRMaXN0ZW5lciwgUmVtb3ZlRXZlbnRMaXN0ZW5lciwgRGlzcGF0Y2hF
dmVudCwKLSAgICAgICAgICAgIE9uQWJvcnQsIE9uQmx1ciwgT25DaGFuZ2UsIE9uQ2xpY2ssIE9u
Q29udGV4dE1lbnUsIE9uRGJsQ2xpY2ssIE9uRXJyb3IsCi0gICAgICAgICAgICBPbkRyYWdFbnRl
ciwgT25EcmFnT3ZlciwgT25EcmFnTGVhdmUsIE9uRHJvcCwgT25EcmFnU3RhcnQsIE9uRHJhZywg
T25EcmFnRW5kLAotICAgICAgICAgICAgT25CZWZvcmVDdXQsIE9uQ3V0LCBPbkJlZm9yZUNvcHks
IE9uQ29weSwgT25CZWZvcmVQYXN0ZSwgT25QYXN0ZSwgT25TZWxlY3RTdGFydCwKLSAgICAgICAg
ICAgIE9uRm9jdXMsIE9uSW5wdXQsIE9uS2V5RG93biwgT25LZXlQcmVzcywgT25LZXlVcCwgT25M
b2FkLCBPbk1vdXNlRG93biwKLSAgICAgICAgICAgIE9uTW91c2VNb3ZlLCBPbk1vdXNlT3V0LCBP
bk1vdXNlT3ZlciwgT25Nb3VzZVVwLCBPbk1vdXNlV2hlZWwsIE9uUmVzZXQsCi0gICAgICAgICAg
ICBPblJlc2l6ZSwgT25TY3JvbGwsIE9uU2VhcmNoLCBPblNlbGVjdCwgT25TdWJtaXQsIE9uVW5s
b2FkCi0gICAgICAgIH07CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNFdmVudFRhcmdldEJhc2U8
SlNFdmVudFRhcmdldE5vZGU+IG1fYmFzZTsKICAgICB9OwogCi0gICAgRXZlbnRUYXJnZXROb2Rl
KiB0b0V2ZW50VGFyZ2V0Tm9kZShLSlM6OkpTVmFsdWUqKTsKLQotICAgIEtKU19ERUZJTkVfUFJP
VE9UWVBFX1dJVEhfUFJPVE9UWVBFKEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlLCBKU05vZGVQ
cm90b3R5cGUpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfQ0xBU1MobWFjcm8pIFwKLSAgICBtYWNybyhK
U0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcikgXAotICAg
IG1hY3JvKEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3Rl
bmVyKSBcCi0gICAgbWFjcm8oSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlvbkRpc3Bh
dGNoRXZlbnQpIFwKKyAgICBzdHJ1Y3QgSlNFdmVudFRhcmdldFByb3RvdHlwZUluZm9ybWF0aW9u
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3RvdHlwZUNsYXNzTmFtZSgpIHsgcmV0
dXJuICJFdmVudFRhcmdldE5vZGVQcm90b3R5cGUiOyB9CisJCXN0YXRpYyBjb25zdCBjaGFyKiBw
cm90b3R5cGVJZGVudGlmaWVyKCkgeyByZXR1cm4gIltbRXZlbnRUYXJnZXROb2RlLnByb3RvdHlw
ZV1dIjsgfQorICAgIH07CiAKLUZPUl9FQUNIX0NMQVNTKEtKU19JTVBMRU1FTlRfUFJPVE9UWVBF
X0ZVTkNUSU9OX1dJVEhfQ1JFQVRFKQotI3VuZGVmIEZPUl9FQUNIX0NMQVNTCisgICAgdHlwZWRl
ZiBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlPEpTTm9kZVByb3RvdHlwZSwgSlNFdmVudFRhcmdldFBy
b3RvdHlwZUluZm9ybWF0aW9uPiBKU0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZTsKKyAgICBFdmVu
dFRhcmdldE5vZGUqIHRvRXZlbnRUYXJnZXROb2RlKEtKUzo6SlNWYWx1ZSopOwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IGRvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjg3NTUpCisrKyBkb20vRXZlbnRUYXJn
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsMTIgQEAKIC8qCiAgKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCiAgKgorICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDggKzM0LDI1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKIAorI2luY2x1ZGUg
Ik5vZGUuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBpbnQgZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4g
PSAwOworI2VuZGlmCisKIEV2ZW50VGFyZ2V0Ojp+RXZlbnRUYXJnZXQoKQogewogfQpAQCAtNTIs
NCArNzQsMjY5IEBAIFNWR0VsZW1lbnRJbnN0YW5jZSogRXZlbnRUYXJnZXQ6OnRvU1ZHRWwKIH0K
ICNlbmRpZgogCit2b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0
Tm9kZSogcmVmZXJlbmNlTm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBp
ZiAoIXJlZmVyZW5jZU5vZGUgfHwgIXJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPmF0dGFjaGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3VtZW50OjpMaXN0ZW5lclR5cGUgdHlwZSA9
IHN0YXRpY19jYXN0PERvY3VtZW50OjpMaXN0ZW5lclR5cGU+KDApOworICAgIGlmIChldmVudFR5
cGUgPT0gRE9NU3VidHJlZU1vZGlmaWVkRXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6
RE9NU1VCVFJFRU1PRElGSUVEX0xJU1RFTkVSOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBE
T01Ob2RlSW5zZXJ0ZWRFdmVudCkKKyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01OT0RFSU5T
RVJURURfTElTVEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVSZW1vdmVk
RXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVI7
CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50RXZl
bnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURGUk9NRE9DVU1FTlRf
TElTVEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJbnNlcnRlZEludG9E
b2N1bWVudEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRElO
VE9ET0NVTUVOVF9MSVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NQXR0ck1v
ZGlmaWVkRXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NQVRUUk1PRElGSUVEX0xJ
U1RFTkVSOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01DaGFyYWN0ZXJEYXRhTW9kaWZp
ZWRFdmVudCkKKyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01DSEFSQUNURVJEQVRBTU9ESUZJ
RURfTElTVEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IG92ZXJmbG93Y2hhbmdlZEV2
ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6Ok9WRVJGTE9XQ0hBTkdFRF9MSVNURU5FUjsK
KworICAgIGlmICh0eXBlKQorICAgICAgICByZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT5hZGRM
aXN0ZW5lclR5cGUodHlwZSk7CisKKyAgICBpZiAoIXJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3Rl
bmVycykKKyAgICAgICAgcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzID0gbmV3IFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyTGlzdDsKKworICAgIC8vIFJlbW92ZSBleGlzdGluZyBpZGVudGlj
YWwgZXIgc2V0IHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KKyAgICAvLyBUaGUgRE9NMiBzcGVj
IHNheXMgdGhhdCAiZHVwbGljYXRlIGluc3RhbmNlcyBhcmUgZGlzY2FyZGVkIiBpbiB0aGlzIGNh
c2UuCisgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihyZWZlcmVuY2VOb2RlLCBldmVudFR5cGUsIGxp
c3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKKworICAgIC8vIGFkZGluZyB0aGUgZmlyc3Qgb25l
CisgICAgaWYgKHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpICYmICFy
ZWZlcmVuY2VOb2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJlZmVyZW5jZU5vZGUtPmRvY3Vt
ZW50KCktPnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyhyZWZlcmVu
Y2VOb2RlKTsKKworICAgIHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+YXBwZW5kKG5l
dyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VD
YXB0dXJlKSk7Cit9CisKK3ZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXZl
bnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZiAo
IXJlZmVyZW5jZU5vZGUgfHwgIXJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmwoZXZlbnRUeXBlLCBs
aXN0ZW5lciwgdXNlQ2FwdHVyZSk7CisKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6
Okl0ZXJhdG9yIGVuZCA9IHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+ZW5kKCk7Cisg
ICAgZm9yIChSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGl0ID0gcmVmZXJl
bmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgIGlmICgqKCppdCkuZ2V0KCkgPT0gcmwpIHsKKyAgICAgICAgICAgICgqaXQpLT5zZXRS
ZW1vdmVkKHRydWUpOworICAgICAgICAgICAgaXQgPSByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0
ZW5lcnMtPnJlbW92ZShpdCk7CisKKyAgICAgICAgICAgIC8vIHJlbW92ZWQgbGFzdAorICAgICAg
ICAgICAgaWYgKHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpICYmICFy
ZWZlcmVuY2VOb2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9k
ZS0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5l
cnMocmVmZXJlbmNlTm9kZSk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KK30KKworYm9vbCBFdmVudFRhcmdldDo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoRXZlbnRUYXJn
ZXROb2RlKiByZWZlcmVuY2VOb2RlLCBQYXNzUmVmUHRyPEV2ZW50PiBlLCBFeGNlcHRpb25Db2Rl
JiwgYm9vbCB0ZW1wRXZlbnQpCit7CisgICAgUmVmUHRyPEV2ZW50PiBldnQoZSk7CisKKyAgICBB
U1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CisgICAgQVNTRVJUKGV2dC0+dGFyZ2V0
KCkpOworICAgIEFTU0VSVCghZXZ0LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNv
ZGUgY291bGQgY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZQorCisgICAgLy8gd29y
ayBvdXQgd2hhdCBub2RlcyB0byBzZW5kIGV2ZW50IHRvCisgICAgRGVwcmVjYXRlZFB0ckxpc3Q8
Tm9kZT4gbm9kZUNoYWluOworCisgICAgaWYgKHJlZmVyZW5jZU5vZGUtPmluRG9jdW1lbnQoKSkg
eworICAgICAgICBmb3IgKE5vZGUqIG4gPSByZWZlcmVuY2VOb2RlOyBuOyBuID0gbi0+ZXZlbnRQ
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIG4tPnJlZigpOworICAgICAgICAgICAgbm9kZUNo
YWluLnByZXBlbmQobik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBpZiBu
b2RlIGlzIG5vdCBpbiB0aGUgZG9jdW1lbnQganVzdCBzZW5kIGV2ZW50IHRvIGl0c2VsZiAKKyAg
ICAgICAgcmVmZXJlbmNlTm9kZS0+cmVmKCk7CisgICAgICAgIG5vZGVDaGFpbi5wcmVwZW5kKHJl
ZmVyZW5jZU5vZGUpOworICAgIH0KKworICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Tm9k
ZT4gaXQobm9kZUNoYWluKTsKKworICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBkaXNwYXRjaGluZyBl
dmVudHMsIGdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlv
cgorICAgIC8vIHRvIHRoZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0dGluZyBhIGNyYWNrLgorICAg
IHZvaWQqIGRhdGEgPSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOworCisgICAg
Ly8gdHJpZ2dlciBhbnkgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzIG9uIG91ciB3YXkgZG93bgor
ICAgIGV2dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKKyAgICBpdC50
b0ZpcnN0KCk7CisKKyAgICAvLyBIYW5kbGUgd2luZG93IGV2ZW50cyBmb3IgY2FwdHVyZSBwaGFz
ZSwgZXhjZXB0IGxvYWQgZXZlbnRzLCB0aGlzIHF1aXJrIGlzIG5lZWRlZAorICAgIC8vIGJlY2F1
c2UgTW96aWxsYSB1c2VkIHRvIG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyB0byB0aGUgd2lu
ZG93IG9iamVjdAorICAgIGlmIChldnQtPnR5cGUoKSAhPSBsb2FkRXZlbnQgJiYgaXQuY3VycmVu
dCgpLT5pc0RvY3VtZW50Tm9kZSgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpKQorICAg
ICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGl0LmN1cnJlbnQoKSktPmhhbmRsZVdpbmRvd0V2
ZW50KGV2dC5nZXQoKSwgdHJ1ZSk7CisKKyAgICBFdmVudFRhcmdldE5vZGUqIGV2ZW50VGFyZ2V0
Tm9kZSA9IDA7CisgICAgZm9yICg7IGl0LmN1cnJlbnQoKSAmJiBpdC5jdXJyZW50KCkgIT0gcmVm
ZXJlbmNlTm9kZSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKTsgKytpdCkgeworICAgICAg
ICBldmVudFRhcmdldE5vZGUgPSBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSk7CisK
KyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoYXBwbHlTVkdF
dmVudFRhcmdldFJ1bGVzKGV2ZW50VGFyZ2V0Tm9kZSwgZXZ0LmdldCgpKSk7CisjZWxzZQorICAg
ICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXROb2RlKTsKKyNlbmRpZgorCisg
ICAgICAgIGV2ZW50VGFyZ2V0Tm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCB0cnVl
KTsKKyAgICB9CisKKyAgICAvLyBkaXNwYXRjaCB0byB0aGUgYWN0dWFsIHRhcmdldCBub2RlCisg
ICAgaXQudG9MYXN0KCk7CisKKyAgICBpZiAoIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpIHsK
KyAgICAgICAgZXZ0LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQpOworICAgICAgICBl
dmVudFRhcmdldE5vZGUgPSBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSk7CisKKyNp
ZiBFTkFCTEUoU1ZHKQorICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoYXBwbHlTVkdFdmVu
dFRhcmdldFJ1bGVzKGV2ZW50VGFyZ2V0Tm9kZSwgZXZ0LmdldCgpKSk7CisjZWxzZQorICAgICAg
ICBldnQtPnNldEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXROb2RlKTsKKyNlbmRpZgorCisgICAg
ICAgIC8vIFdlIGRvIHdhbnQgY2FwdHVyaW5nIGV2ZW50IGVycyB0byBiZSBpbnZva2VkIGhlcmUs
IGV2ZW4gdGhvdWdoCisgICAgICAgIC8vIHRoYXQgdmlvbGF0ZXMgdGhlIHNwZWNpZmljYXRpb24g
c2luY2UgTW96aWxsYSBkb2VzIGl0LgorICAgICAgICBldmVudFRhcmdldE5vZGUtPmhhbmRsZUxv
Y2FsRXZlbnRzKGV2dC5nZXQoKSwgdHJ1ZSk7CisKKyAgICAgICAgZXZlbnRUYXJnZXROb2RlLT5o
YW5kbGVMb2NhbEV2ZW50cyhldnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9CisKKyAgICAtLWl0Owor
CisgICAgLy8gb2ssIG5vdyBidWJibGUgdXAgYWdhaW4gKG9ubHkgbm9uLWNhcHR1cmluZyBldmVu
dCBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZCkKKyAgICAvLyAjIyMgcmVjYWxjdWxhdGUgdGhlIG5v
ZGUgY2hhaW4gaGVyZT8gKGUuZy4gaWYgdGFyZ2V0IG5vZGUgbW92ZWQgaW4gZG9jdW1lbnQgYnkg
cHJldmlvdXMgZXZlbnQgaGFuZGxlcnMpCisgICAgLy8gbm8uIHRoZSBET00gc3BlY3Mgc2F5czoK
KyAgICAvLyBUaGUgY2hhaW4gb2YgRXZlbnRUYXJnZXRzIGZyb20gdGhlIGV2ZW50IHRhcmdldCB0
byB0aGUgdG9wIG9mIHRoZSB0cmVlCisgICAgLy8gaXMgZGV0ZXJtaW5lZCBiZWZvcmUgdGhlIGlu
aXRpYWwgZGlzcGF0Y2ggb2YgdGhlIGV2ZW50LgorICAgIC8vIElmIG1vZGlmaWNhdGlvbnMgb2Nj
dXIgdG8gdGhlIHRyZWUgZHVyaW5nIGV2ZW50IHByb2Nlc3NpbmcsCisgICAgLy8gZXZlbnQgZmxv
dyB3aWxsIHByb2NlZWQgYmFzZWQgb24gdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRyZWUuCisg
ICAgLy8KKyAgICAvLyBzaW5jZSB0aGUgaW5pdGlhbCBkaXNwYXRjaCBpcyBiZWZvcmUgdGhlIGNh
cHR1cmluZyBwaGFzZSwKKyAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhl
IG5vZGUgY2hhaW4uCisgICAgLy8gKHRvYmlhcykKKworICAgIGlmIChldnQtPmJ1YmJsZXMoKSkg
eworICAgICAgICBldnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKwor
ICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgp
ICYmICFldnQtPmNhbmNlbEJ1YmJsZSgpOyAtLWl0KSB7CisgICAgICAgICAgICBldmVudFRhcmdl
dE5vZGUgPSBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSk7CisKKyNpZiBFTkFCTEUo
U1ZHKQorICAgICAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGFwcGx5U1ZHRXZlbnRUYXJn
ZXRSdWxlcyhldmVudFRhcmdldE5vZGUsIGV2dC5nZXQoKSkpOworI2Vsc2UKKyAgICAgICAgICAg
IGV2dC0+c2V0Q3VycmVudFRhcmdldChldmVudFRhcmdldE5vZGUpOworI2VuZGlmCisKKyAgICAg
ICAgICAgIGV2ZW50VGFyZ2V0Tm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCBmYWxz
ZSk7CisgICAgICAgIH0KKworICAgICAgICBpdC50b0ZpcnN0KCk7CisKKyAgICAgICAgLy8gSGFu
ZGxlIHdpbmRvdyBldmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNlLCBleGNlcHQgbG9hZCBldmVudHMs
IHRoaXMgcXVpcmsgaXMgbmVlZGVkCisgICAgICAgIC8vIGJlY2F1c2UgTW96aWxsYSB1c2VkIHRv
IG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwKKyAgICAgICAgaWYgKGV2dC0+dHlw
ZSgpICE9IGxvYWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9jdW1lbnROb2RlKCkgJiYgIWV2
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2VsQnViYmxlKCkpIHsKKyAgICAg
ICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJl
bnQoKSkpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpdC5jdXJyZW50KCkp
LT5oYW5kbGVXaW5kb3dFdmVudChldnQuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgfSAKKyAgICB9
CisKKyAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7CisgICAgZXZ0LT5zZXRFdmVudFBoYXNl
KDApOyAvLyBJIGd1ZXNzIHRoaXMgaXMgY29ycmVjdCwgdGhlIHNwZWMgZG9lcyBub3Qgc2VlbSB0
byBzYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFueXRoaW5nIGFib3V0IHRoZSBk
ZWZhdWx0IGV2ZW50IGhhbmRsZXIgcGhhc2UuCisKKworICAgIC8vIE5vdyBjYWxsIHRoZSBwb3N0
IGRpc3BhdGNoLgorICAgIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCksIGRhdGEp
OworCisgICAgLy8gbm93IHdlIGNhbGwgYWxsIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgKHRoaXMg
aXMgbm90IHBhcnQgb2YgRE9NIC0gaXQgaXMgaW50ZXJuYWwgdG8ga2h0bWwpCisgICAgaXQudG9M
YXN0KCk7CisKKyAgICBpZiAoZXZ0LT5idWJibGVzKCkpCisgICAgICAgIGZvciAoOyBpdC5jdXJy
ZW50KCkgJiYgIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldnQtPmRlZmF1bHRIYW5kbGVk
KCk7IC0taXQpCisgICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkt
PmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0LmdldCgpKTsKKyAgICBlbHNlIGlmICghZXZ0LT5kZWZh
dWx0UHJldmVudGVkKCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgRXZlbnRU
YXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dC5nZXQo
KSk7CisKKyAgICAvLyBkZXJlZiBhbGwgbm9kZXMgaW4gY2hhaW4KKyAgICBpdC50b0ZpcnN0KCk7
CisgICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkKKyAgICAgICAgaXQuY3VycmVudCgpLT5k
ZXJlZigpOyAvLyB0aGlzIG1heSBkZWxldGUgdXMKKworICAgIERvY3VtZW50Ojp1cGRhdGVEb2N1
bWVudHNSZW5kZXJpbmcoKTsKKworICAgIC8vIElmIHRlbXBFdmVudCBpcyB0cnVlLCB0aGlzIG1l
YW5zIHRoYXQgdGhlIERPTSBpbXBsZW1lbnRhdGlvbgorICAgIC8vIHdpbGwgbm90IGJlIHN0b3Jp
bmcgYSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50LCBpLmUuICB0aGVyZSBpcyBubworICAgIC8vIHdh
eSB0byByZXRyaWV2ZSBpdCBmcm9tIGphdmFzY3JpcHQgaWYgYSBzY3JpcHQgZG9lcyBub3QgYWxy
ZWFkeQorICAgIC8vIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQgaW4gYSB2YXJpYWJsZS4gIFNvIHRo
ZXJlIGlzIG5vIG5lZWQgZm9yCisgICAgLy8gdGhlIGludGVycHJldGVyIHRvIGtlZXAgdGhlIGV2
ZW50IGluIGl0J3MgY2FjaGUKKyAgICBGcmFtZSogZnJhbWUgPSByZWZlcmVuY2VOb2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpOworICAgIGlmICh0ZW1wRXZlbnQgJiYgZnJhbWUgJiYgZnJhbWUtPnNj
cmlwdFByb3h5KCkpCisgICAgICAgIGZyYW1lLT5zY3JpcHRQcm94eSgpLT5maW5pc2hlZFdpdGhF
dmVudChldnQuZ2V0KCkpOworCisgICAgcmV0dXJuICFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsg
Ly8gIyMjIHdoYXQgaWYgZGVmYXVsdFByZXZlbnRlZCB3YXMgY2FsbGVkIGJlZm9yZSBkaXNwYXRj
aEV2ZW50PworfQorCit2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycyhF
dmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUpCit7CisgICAgZGVsZXRlIHJlZmVyZW5jZU5v
ZGUtPm1fcmVnZExpc3RlbmVyczsKKyAgICByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMg
PSAwOworfQorCit2b2lkIEV2ZW50VGFyZ2V0OjppbnNlcnRlZEludG9Eb2N1bWVudChFdmVudFRh
cmdldE5vZGUqIHJlZmVyZW5jZU5vZGUpCit7CisgICAgaWYgKHJlZmVyZW5jZU5vZGUgJiYgcmVm
ZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzICYmICFyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0
ZW5lcnMtPmlzRW1wdHkoKSkKKyAgICAgICAgcmVmZXJlbmNlTm9kZS0+ZG9jdW1lbnQoKS0+dW5y
ZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlTm9kZSk7
Cit9CisKK3ZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoRXZlbnRUYXJnZXRO
b2RlKiByZWZlcmVuY2VOb2RlKQoreworICAgIGlmIChyZWZlcmVuY2VOb2RlICYmIHJlZmVyZW5j
ZU5vZGUtPm1fcmVnZExpc3RlbmVycyAmJiAhcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJz
LT5pc0VtcHR5KCkpCisgICAgICAgIHJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPnJlZ2lzdGVy
RGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyhyZWZlcmVuY2VOb2RlKTsKK30KKwor
dm9pZCBFdmVudFRhcmdldDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnRUYXJnZXROb2RlKiByZWZl
cmVuY2VOb2RlLCBFdmVudCogZXZ0LCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFyZWZl
cmVuY2VOb2RlIHx8ICFyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMgfHwgcmVmZXJlbmNl
Tm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdCBsaXN0ZW5lcnNDb3B5ID0gKnJlZmVyZW5jZU5v
ZGUtPm1fcmVnZExpc3RlbmVyczsKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0
ZXJhdG9yIGVuZCA9IGxpc3RlbmVyc0NvcHkuZW5kKCk7CisKKyAgICBmb3IgKFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgaXQgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2dC0+
dHlwZSgpICYmICgqaXQpLT51c2VDYXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSAmJiAhKCppdCktPnJl
bW92ZWQoKSkKKyAgICAgICAgICAgICgqaXQpLT5saXN0ZW5lcigpLT5oYW5kbGVFdmVudChldnQs
IGZhbHNlKTsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoU1ZHKQorRXZlbnRUYXJnZXQqIEV2ZW50
VGFyZ2V0OjphcHBseVNWR0V2ZW50VGFyZ2V0UnVsZXMoRXZlbnRUYXJnZXROb2RlKiYgcmVmZXJl
bmNlTm9kZSwgRXZlbnQqKSBjb25zdAoreworICAgIC8vIFRPRE86IEEgZm9sbG93LXVwIHBhdGNo
IHdpbGwgbmVlZCB0aGlzIGZ1bmN0aW9uLgorICAgIHJldHVybiByZWZlcmVuY2VOb2RlOworfQor
I2VuZGlmCisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKQorewor
ICAgICsrZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW47Cit9CisKK3ZvaWQgYWxsb3dFdmVudERpc3Bh
dGNoKCkKK3sKKyAgICBpZiAoZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPiAwKQorICAgICAgICAt
LWdFdmVudERpc3BhdGNoRm9yYmlkZGVuOworfQorCitib29sIGV2ZW50RGlzcGF0Y2hGb3JiaWRk
ZW4oKQoreworICAgIHJldHVybiBnRXZlbnREaXNwYXRjaEZvcmJpZGRlbiA+IDA7Cit9CisjZW5k
aWYgLy8gTkRFQlVHCisKIH0gLy8gZW5kIG5hbWVzcGFjZQpJbmRleDogZG9tL0V2ZW50VGFyZ2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDI4NzU1KQorKysg
ZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSwxMiBAQAogLyoKICAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAq
CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMTEg
KzQyLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFz
cyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEV2ZW50VGFyZ2V0Tm9kZTsKKyAgICBjbGFzcyBO
b2RlOworICAgIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIFNWR0Vs
ZW1lbnRJbnN0YW5jZTsKICAgICBjbGFzcyBYTUxIdHRwUmVxdWVzdDsKIAogICAgIHR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXBy
ZWNhdGVkVmFsdWVMaXN0OworICAgIHR5cGVkZWYgRGVwcmVjYXRlZFZhbHVlTGlzdDxSZWZQdHI8
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+ID4gUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0Owor
CiAgICAgY2xhc3MgRXZlbnRUYXJnZXQgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldE5vZGUqIHRvTm9kZSgpOwpAQCAtNTQsMTcgKzY0LDUwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNl
Q2FwdHVyZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2Fw
dHVyZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVtcEV2ZW50ID0gZmFsc2UpID0gMDsKLSAg
ICAKKwogICAgICAgICB2b2lkIHJlZigpIHsgcmVmRXZlbnRUYXJnZXQoKTsgfQogICAgICAgICB2
b2lkIGRlcmVmKCkgeyBkZXJlZkV2ZW50VGFyZ2V0KCk7IH0KIAorICAgICAgICAvLyBIYW5kbGVy
cyB0byBkby91bmRvIGFjdGlvbnMgb24gdGhlIHRhcmdldCBub2RlIGJlZm9yZSBhbiBldmVudCBp
cyBkaXNwYXRjaGVkIHRvIGl0IGFuZCBhZnRlciB0aGUgZXZlbnQKKyAgICAgICAgLy8gaGFzIGJl
ZW4gZGlzcGF0Y2hlZC4gIFRoZSBkYXRhIHBvaW50ZXIgaXMgaGFuZGVkIGJhY2sgYnkgdGhlIHBy
ZURpc3BhdGNoIGFuZCBwYXNzZWQgdG8gcG9zdERpc3BhdGNoLgorICAgICAgICB2aXJ0dWFsIHZv
aWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50KikgeyByZXR1cm4gMDsgfQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgcG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50Kiwgdm9pZCogZGF0
YUZyb21QcmVEaXNwYXRjaCkgeyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwg
fkV2ZW50VGFyZ2V0KCk7CiAKKyAgICAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKEV2ZW50VGFy
Z2V0Tm9kZSogcmVmZXJlbmNlTm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZvaWQg
cmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJl
KTsKKworICAgICAgICBib29sIGRpc3BhdGNoR2VuZXJpY0V2ZW50KEV2ZW50VGFyZ2V0Tm9kZSog
cmVmZXJlbmNlTm9kZSwgUGFzc1JlZlB0cjxFdmVudD4gZSwgRXhjZXB0aW9uQ29kZSYsIGJvb2wg
dGVtcEV2ZW50KTsKKyAgICAgICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycyhFdmVudFRh
cmdldE5vZGUqIHJlZmVyZW5jZU5vZGUpOworCisgICAgICAgIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlKTsKKyAgICAgICAgdm9pZCByZW1v
dmVkRnJvbURvY3VtZW50KEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJlbmNlTm9kZSk7CisKKyAgICAg
ICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUs
IEV2ZW50KiBldnQsIGJvb2wgdXNlQ2FwdHVyZSk7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAg
ICBFdmVudFRhcmdldCogYXBwbHlTVkdFdmVudFRhcmdldFJ1bGVzKEV2ZW50VGFyZ2V0Tm9kZSom
IHJlZmVyZW5jZU5vZGUsIEV2ZW50KikgY29uc3Q7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpID0gMDsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgfTsKLX0KIAorI2lmbmRlZiBOREVC
VUcKKwordm9pZCBmb3JiaWRFdmVudERpc3BhdGNoKCk7Cit2b2lkIGFsbG93RXZlbnREaXNwYXRj
aCgpOworYm9vbCBldmVudERpc3BhdGNoRm9yYmlkZGVuKCk7CisKKyNlbHNlCisKK2lubGluZSB2
b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKSB7IH0KK2lubGluZSB2b2lkIGFsbG93RXZlbnREaXNw
YXRjaCgpIHsgfQorCisjZW5kaWYgLy8gTkRFQlVHIAorCit9CiAjZW5kaWYKSW5kZXg6IGRvbS9F
dmVudFRhcmdldE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdldE5vZGUuY3Bw
CShyZXZpc2lvbiAyODc1NSkKKysrIGRvbS9FdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDYgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsMTggKzI1LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXROb2RlLmgiCiAKLSNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRF
dmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50
LmgiCkBAIC00NSwxOCArNDEsMTIgQEAKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50LmgiCiAjaW5j
bHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIK
LSNpbmNsdWRlICJVSUV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUg
IldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJranNfcHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLXVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgaW50IGdFdmVudERpc3BhdGNoRm9yYmlk
ZGVuID0gMDsKLSNlbmRpZgogCiBFdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1
bWVudCAqZG9jKQogICAgIDogTm9kZShkb2MpCkBAIC02OCwyMzMgKzU4LDQ4IEBAIEV2ZW50VGFy
Z2V0Tm9kZTo6fkV2ZW50VGFyZ2V0Tm9kZSgpCiB7CiAgICAgaWYgKG1fcmVnZExpc3RlbmVycyAm
JiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYgIWluRG9jdW1lbnQoKSkKICAgICAgICAg
ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMo
dGhpcyk7CisKICAgICBkZWxldGUgbV9yZWdkTGlzdGVuZXJzOworICAgIG1fcmVnZExpc3RlbmVy
cyA9IDA7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjppbnNlcnRlZEludG9Eb2N1bWVudCgp
CiB7Ci0gICAgaWYgKG1fcmVnZExpc3RlbmVycyAmJiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5
KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2
ZW50TGlzdGVuZXJzKHRoaXMpOwotICAgIAorICAgIEV2ZW50VGFyZ2V0OjppbnNlcnRlZEludG9E
b2N1bWVudCh0aGlzKTsKICAgICBOb2RlOjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQogCiB2
b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgaWYgKG1f
cmVnZExpc3RlbmVycyAmJiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkpCi0gICAgICAgIGRv
Y3VtZW50KCktPnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyh0aGlz
KTsKLQorICAgIEV2ZW50VGFyZ2V0OjpyZW1vdmVkRnJvbURvY3VtZW50KHRoaXMpOwogICAgIE5v
ZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldE5vZGU6OmFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGNvbnN0IGJvb2wgdXNlQ2FwdHVyZSkKK3ZvaWQgRXZl
bnRUYXJnZXROb2RlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
CiB7Ci0gICAgaWYgKCFkb2N1bWVudCgpLT5hdHRhY2hlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQ6Okxpc3RlbmVyVHlwZT4oMCk7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBET01TdWJ0cmVlTW9k
aWZpZWRFdmVudCkKLSAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01TVUJUUkVFTU9ESUZJRURf
TElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJbnNlcnRlZEV2ZW50
KQotICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRF9MSVNURU5FUjsKLSAg
ICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRFdmVudCkKLSAgICAgICAgdHlw
ZSA9IERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUjsKLSAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCkKLSAgICAgICAgdHlwZSA9
IERvY3VtZW50OjpET01OT0RFUkVNT1ZFREZST01ET0NVTUVOVF9MSVNURU5FUjsKLSAgICBlbHNl
IGlmIChldmVudFR5cGUgPT0gRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50RXZlbnQpCi0gICAg
ICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVESU5UT0RPQ1VNRU5UX0xJU1RFTkVS
OwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01BdHRyTW9kaWZpZWRFdmVudCkKLSAgICAg
ICAgdHlwZSA9IERvY3VtZW50OjpET01BVFRSTU9ESUZJRURfTElTVEVORVI7Ci0gICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50KQotICAgICAgICB0
eXBlID0gRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUjsKLSAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gb3ZlcmZsb3djaGFuZ2VkRXZlbnQpCi0gICAgICAgIHR5cGUg
PSBEb2N1bWVudDo6T1ZFUkZMT1dDSEFOR0VEX0xJU1RFTkVSOwotICAgICAgICAKLSAgICBpZiAo
dHlwZSkKLSAgICAgICAgZG9jdW1lbnQoKS0+YWRkTGlzdGVuZXJUeXBlKHR5cGUpOwotICAgIAot
ICAgIGlmICghbV9yZWdkTGlzdGVuZXJzKQotICAgICAgICBtX3JlZ2RMaXN0ZW5lcnMgPSBuZXcg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OwotICAgIAotICAgIC8vIFJlbW92ZSBleGlzdGlu
ZyBpZGVudGljYWwgbGlzdGVuZXIgc2V0IHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KLSAgICAv
LyBUaGUgRE9NMiBzcGVjIHNheXMgdGhhdCAiZHVwbGljYXRlIGluc3RhbmNlcyBhcmUgZGlzY2Fy
ZGVkIiBpbiB0aGlzIGNhc2UuCi0gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxp
c3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKLSAgICAKLSAgICAvLyBhZGRpbmcgdGhlIGZpcnN0
IG9uZQotICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAmJiAhaW5Eb2N1bWVudCgp
KQotICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRM
aXN0ZW5lcnModGhpcyk7Ci0gICAgCi0gICAgbV9yZWdkTGlzdGVuZXJzLT5hcHBlbmQobmV3IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1
cmUpKTsKKyAgICBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUs
IGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIEV2ZW50TGlzdGVu
ZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBpZiAoIW1fcmVnZExpc3Rl
bmVycykgLy8gbm90aGluZyB0byByZW1vdmUKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyIHJsKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUp
OwotICAgIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0g
bV9yZWdkTGlzdGVuZXJzLT5lbmQoKTsKLSAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
TGlzdDo6SXRlcmF0b3IgaXQgPSBtX3JlZ2RMaXN0ZW5lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgaWYgKCooKml0KS5nZXQoKSA9PSBybCkgewotICAgICAgICAgICAgKCpp
dCktPnNldFJlbW92ZWQodHJ1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGl0ID0gbV9y
ZWdkTGlzdGVuZXJzLT5yZW1vdmUoaXQpOwotICAgICAgICAgICAgLy8gcmVtb3ZlZCBsYXN0Ci0g
ICAgICAgICAgICBpZiAobV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYgIWluRG9jdW1lbnQo
KSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9k
ZVdpdGhFdmVudExpc3RlbmVycyh0aGlzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQorICAgIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwg
bGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcnMoKQogewotICAgIGRlbGV0ZSBtX3JlZ2RMaXN0ZW5lcnM7Ci0gICAg
bV9yZWdkTGlzdGVuZXJzID0gMDsKKyAgICBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnModGhpcyk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpoYW5kbGVMb2NhbEV2ZW50
cyhFdmVudCAqZXZ0LCBib29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgaWYgKCFtX3JlZ2RMaXN0ZW5l
cnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBpZiAoZGlzYWJsZWQoKSAmJiBldnQtPmlz
TW91c2VFdmVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXJMaXN0IGxpc3RlbmVyc0NvcHkgPSAqbV9yZWdkTGlzdGVuZXJzOwotICAgIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0gbGlzdGVuZXJzQ29weS5lbmQo
KTsKIAotICAgIGZvciAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBpdCA9
IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAoKCpp
dCktPmV2ZW50VHlwZSgpID09IGV2dC0+dHlwZSgpICYmICgqaXQpLT51c2VDYXB0dXJlKCkgPT0g
dXNlQ2FwdHVyZSAmJiAhKCppdCktPnJlbW92ZWQoKSkKLSAgICAgICAgICAgICgqaXQpLT5saXN0
ZW5lcigpLT5oYW5kbGVFdmVudChldnQsIGZhbHNlKTsKLX0KLQotYm9vbCBFdmVudFRhcmdldE5v
ZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNv
ZGUmLCBib29sIHRlbXBFdmVudCkKLXsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dChlKTsKLSAgICBB
U1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgQVNTRVJUKGV2dC0+dGFyZ2V0
KCkpOwotICAgIEFTU0VSVCghZXZ0LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBKYXZhU2NyaXB0IGNv
ZGUgY291bGQgY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZQotICAgIAotICAgIC8v
IHdvcmsgb3V0IHdoYXQgbm9kZXMgdG8gc2VuZCBldmVudCB0bwotICAgIERlcHJlY2F0ZWRQdHJM
aXN0PE5vZGU+IG5vZGVDaGFpbjsKLSAgICAKLSAgICBpZiAoaW5Eb2N1bWVudCgpKSB7Ci0gICAg
ICAgIGZvciAoTm9kZSogbiA9IHRoaXM7IG47IG4gPSBuLT5ldmVudFBhcmVudE5vZGUoKSkgewot
ICAgICAgICAgICAgbi0+cmVmKCk7Ci0gICAgICAgICAgICBub2RlQ2hhaW4ucHJlcGVuZChuKTsK
LSAgICAgICAgfSAKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBpZiBub2RlIGlzIG5vdCBpbiB0
aGUgZG9jdW1lbnQganVzdCBzZW5kIGV2ZW50IHRvIGl0c2VsZiAKLSAgICAgICAgcmVmKCk7Ci0g
ICAgICAgIG5vZGVDaGFpbi5wcmVwZW5kKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBEZXByZWNh
dGVkUHRyTGlzdEl0ZXJhdG9yPE5vZGU+IGl0KG5vZGVDaGFpbik7Ci0gICAgCi0gICAgLy8gQmVm
b3JlIHdlIGJlZ2luIGRpc3BhdGNoaW5nIGV2ZW50cywgZ2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBj
aGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yCi0gICAgLy8gdG8gdGhlIERPTSBldmVudCBoYW5k
bGVycyBnZXR0aW5nIGEgY3JhY2suCi0gICAgdm9pZCogZGF0YSA9IHByZURpc3BhdGNoRXZlbnRI
YW5kbGVyKGV2dC5nZXQoKSk7Ci0gICAgCi0gICAgLy8gdHJpZ2dlciBhbnkgY2FwdHVyaW5nIGV2
ZW50IGhhbmRsZXJzIG9uIG91ciB3YXkgZG93bgotICAgIGV2dC0+c2V0RXZlbnRQaGFzZShFdmVu
dDo6Q0FQVFVSSU5HX1BIQVNFKTsKLSAgICAKLSAgICBpdC50b0ZpcnN0KCk7Ci0gICAgLy8gSGFu
ZGxlIHdpbmRvdyBldmVudHMgZm9yIGNhcHR1cmUgcGhhc2UsIGV4Y2VwdCBsb2FkIGV2ZW50cywg
dGhpcyBxdWlyayBpcyBuZWVkZWQKLSAgICAvLyBiZWNhdXNlIE1vemlsbGEgdXNlZCB0byBuZXZl
ciBwcm9wYWdhdGUgbG9hZCBldmVudHMgdG8gdGhlIHdpbmRvdyBvYmplY3QKLSAgICBpZiAoZXZ0
LT50eXBlKCkgIT0gbG9hZEV2ZW50ICYmIGl0LmN1cnJlbnQoKS0+aXNEb2N1bWVudE5vZGUoKSAm
JiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVXaW5kb3dFdmVudChldnQuZ2V0KCksIHRydWUpOwot
ICAgIAotICAgIGZvciAoOyBpdC5jdXJyZW50KCkgJiYgaXQuY3VycmVudCgpICE9IHRoaXMgJiYg
IWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCk7ICsraXQpIHsKLSAgICAgICAgZXZ0LT5zZXRDdXJy
ZW50VGFyZ2V0KEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKSk7Ci0gICAgICAgIEV2
ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0Lmdl
dCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gZGlzcGF0Y2ggdG8gdGhlIGFjdHVhbCB0
YXJnZXQgbm9kZQotICAgIGl0LnRvTGFzdCgpOwotICAgIGlmICghZXZ0LT5wcm9wYWdhdGlvblN0
b3BwZWQoKSkgewotICAgICAgICBldnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkFUX1RBUkdFVCk7
Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1
cnJlbnQoKSkpOwotICAgICAgICAKLSAgICAgICAgLy8gV2UgZG8gd2FudCBjYXB0dXJpbmcgZXZl
bnQgbGlzdGVuZXJzIHRvIGJlIGludm9rZWQgaGVyZSwgZXZlbiB0aG91Z2gKLSAgICAgICAgLy8g
dGhhdCB2aW9sYXRlcyB0aGUgc3BlY2lmaWNhdGlvbiBzaW5jZSBNb3ppbGxhIGRvZXMgaXQuCi0g
ICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+aGFuZGxlTG9jYWxFdmVu
dHMoZXZ0LmdldCgpLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNh
c3QoaXQuY3VycmVudCgpKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCBmYWxzZSk7Ci0g
ICAgfQotICAgIC0taXQ7Ci0gICAgCi0gICAgLy8gb2ssIG5vdyBidWJibGUgdXAgYWdhaW4gKG9u
bHkgbm9uLWNhcHR1cmluZyBldmVudCBoYW5kbGVycyB3aWxsIGJlIGNhbGxlZCkKLSAgICAvLyAj
IyMgcmVjYWxjdWxhdGUgdGhlIG5vZGUgY2hhaW4gaGVyZT8gKGUuZy4gaWYgdGFyZ2V0IG5vZGUg
bW92ZWQgaW4gZG9jdW1lbnQgYnkgcHJldmlvdXMgZXZlbnQgaGFuZGxlcnMpCi0gICAgLy8gbm8u
IHRoZSBET00gc3BlY3Mgc2F5czoKLSAgICAvLyBUaGUgY2hhaW4gb2YgRXZlbnRUYXJnZXRzIGZy
b20gdGhlIGV2ZW50IHRhcmdldCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlCi0gICAgLy8gaXMgZGV0
ZXJtaW5lZCBiZWZvcmUgdGhlIGluaXRpYWwgZGlzcGF0Y2ggb2YgdGhlIGV2ZW50LgotICAgIC8v
IElmIG1vZGlmaWNhdGlvbnMgb2NjdXIgdG8gdGhlIHRyZWUgZHVyaW5nIGV2ZW50IHByb2Nlc3Np
bmcsCi0gICAgLy8gZXZlbnQgZmxvdyB3aWxsIHByb2NlZWQgYmFzZWQgb24gdGhlIGluaXRpYWwg
c3RhdGUgb2YgdGhlIHRyZWUuCi0gICAgLy8KLSAgICAvLyBzaW5jZSB0aGUgaW5pdGlhbCBkaXNw
YXRjaCBpcyBiZWZvcmUgdGhlIGNhcHR1cmluZyBwaGFzZSwKLSAgICAvLyB0aGVyZSdzIG5vIG5l
ZWQgdG8gcmVjYWxjdWxhdGUgdGhlIG5vZGUgY2hhaW4uCi0gICAgLy8gKHRvYmlhcykKLSAgICAK
LSAgICBpZiAoZXZ0LT5idWJibGVzKCkpIHsKLSAgICAgICAgZXZ0LT5zZXRFdmVudFBoYXNlKEV2
ZW50OjpCVUJCTElOR19QSEFTRSk7Ci0gICAgICAgIGZvciAoOyBpdC5jdXJyZW50KCkgJiYgIWV2
dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2VsQnViYmxlKCk7IC0taXQpIHsK
LSAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdldE5vZGVDYXN0KGl0
LmN1cnJlbnQoKSkpOwotICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50
KCkpLT5oYW5kbGVMb2NhbEV2ZW50cyhldnQuZ2V0KCksIGZhbHNlKTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBIYW5kbGUgd2luZG93IGV2ZW50cyBmb3IgYnViYmxpbmcgcGhhc2UsIGV4Y2VwdCBs
b2FkIGV2ZW50cywgdGhpcyBxdWlyayBpcyBuZWVkZWQKLSAgICAgICAgLy8gYmVjYXVzZSBNb3pp
bGxhIHVzZWQgdG8gbmV2ZXIgcHJvcGFnYXRlIGxvYWQgZXZlbnRzIGF0IGFsbAotCi0gICAgICAg
IGl0LnRvRmlyc3QoKTsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGxvYWRFdmVudCAmJiBp
dC5jdXJyZW50KCktPmlzRG9jdW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVk
KCkgJiYgIWV2dC0+Y2FuY2VsQnViYmxlKCkpIHsKLSAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVu
dFRhcmdldChFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkpOwotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVXaW5kb3dFdmVudChl
dnQuZ2V0KCksIGZhbHNlKTsKLSAgICAgICAgfSAKLSAgICB9IAotICAgIAotICAgIGV2dC0+c2V0
Q3VycmVudFRhcmdldCgwKTsKLSAgICBldnQtPnNldEV2ZW50UGhhc2UoMCk7IC8vIEkgZ3Vlc3Mg
dGhpcyBpcyBjb3JyZWN0LCB0aGUgc3BlYyBkb2VzIG5vdCBzZWVtIHRvIHNheQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYW55dGhpbmcgYWJvdXQgdGhlIGRlZmF1bHQgZXZlbnQgaGFu
ZGxlciBwaGFzZS4KLSAgICAKLSAgICAKLSAgICAvLyBOb3cgY2FsbCB0aGUgcG9zdCBkaXNwYXRj
aC4KLSAgICBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZ0LmdldCgpLCBkYXRhKTsKLSAgICAK
LSAgICAvLyBub3cgd2UgY2FsbCBhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVycyAodGhpcyBpcyBu
b3QgcGFydCBvZiBET00gLSBpdCBpcyBpbnRlcm5hbCB0byBraHRtbCkKLSAgICAKLSAgICBpdC50
b0xhc3QoKTsKLSAgICBpZiAoZXZ0LT5idWJibGVzKCkpCi0gICAgICAgIGZvciAoOyBpdC5jdXJy
ZW50KCkgJiYgIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldnQtPmRlZmF1bHRIYW5kbGVk
KCk7IC0taXQpCi0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkt
PmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0LmdldCgpKTsKLSAgICBlbHNlIGlmICghZXZ0LT5kZWZh
dWx0UHJldmVudGVkKCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAgICAgICAgRXZlbnRU
YXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dC5nZXQo
KSk7Ci0gICAgCi0gICAgLy8gZGVyZWYgYWxsIG5vZGVzIGluIGNoYWluCi0gICAgaXQudG9GaXJz
dCgpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpCi0gICAgICAgIGl0LmN1cnJlbnQo
KS0+ZGVyZWYoKTsgLy8gdGhpcyBtYXkgZGVsZXRlIHVzCi0gICAgCi0gICAgRG9jdW1lbnQ6OnVw
ZGF0ZURvY3VtZW50c1JlbmRlcmluZygpOwotICAgIAotICAgIC8vIElmIHRlbXBFdmVudCBpcyB0
cnVlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIERPTSBpbXBsZW1lbnRhdGlvbgotICAgIC8vIHdpbGwg
bm90IGJlIHN0b3JpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50LCBpLmUuICB0aGVyZSBpcyBu
bwotICAgIC8vIHdheSB0byByZXRyaWV2ZSBpdCBmcm9tIGphdmFzY3JpcHQgaWYgYSBzY3JpcHQg
ZG9lcyBub3QgYWxyZWFkeQotICAgIC8vIGhhdmUgYSByZWZlcmVuY2UgdG8gaXQgaW4gYSB2YXJp
YWJsZS4gIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yCi0gICAgLy8gdGhlIGludGVycHJldGVyIHRv
IGtlZXAgdGhlIGV2ZW50IGluIGl0J3MgY2FjaGUKLSAgICBGcmFtZSAqZnJhbWUgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpOwotICAgIGlmICh0ZW1wRXZlbnQgJiYgZnJhbWUgJiYgZnJhbWUtPnNjcmlw
dFByb3h5KCkpCi0gICAgICAgIGZyYW1lLT5zY3JpcHRQcm94eSgpLT5maW5pc2hlZFdpdGhFdmVu
dChldnQuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiAhZXZ0LT5kZWZhdWx0UHJldmVudGVkKCk7
IC8vICMjIyB3aGF0IGlmIGRlZmF1bHRQcmV2ZW50ZWQgd2FzIGNhbGxlZCBiZWZvcmUgZGlzcGF0
Y2hFdmVudD8KKyAgICBFdmVudFRhcmdldDo6aGFuZGxlTG9jYWxFdmVudHModGhpcywgZXZ0LCB1
c2VDYXB0dXJlKTsgICAgCiB9CiAKIGJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sIHRlbXBFdmVudCkK
IHsKLSAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChlLCBlYywgdGVtcEV2ZW50LCB0aGlzKTsKLX0K
LQotYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvb2wgdGVtcEV2ZW50LCBFdmVudFRhcmdldCogdGFyZ2V0
KQotewogICAgIFJlZlB0cjxFdmVudD4gZXZ0KGUpOwogICAgIEFTU0VSVCghZXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpKTsKICAgICBpZiAoIWV2dCB8fCBldnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsg
CkBAIC0zMDIsMTEgKzEwNywxNiBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hFdmVu
dChQYXNzCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBldnQtPnNldFRhcmdl
dCh0YXJnZXQpOwotICAgIAorICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJlbmNlTm9kZSA9IHRo
aXM7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGV2dC0+c2V0VGFyZ2V0KGFwcGx5U1ZHRXZlbnRU
YXJnZXRSdWxlcyhyZWZlcmVuY2VOb2RlLCBldnQuZ2V0KCkpKTsKKyNlbHNlCisgICAgZXZ0LT5z
ZXRUYXJnZXQodGhpcyk7CisjZW5kaWYKKwogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBk
b2N1bWVudCgpLT52aWV3KCk7Ci0gICAgCi0gICAgcmV0dXJuIGRpc3BhdGNoR2VuZXJpY0V2ZW50
KGV2dC5yZWxlYXNlKCksIGVjLCB0ZW1wRXZlbnQpOworICAgIHJldHVybiBkaXNwYXRjaEdlbmVy
aWNFdmVudChyZWZlcmVuY2VOb2RlLCBldnQucmVsZWFzZSgpLCBlYywgdGVtcEV2ZW50KTsKIH0K
IAogYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoYm9v
bCBzZW5kQ2hpbGRyZW5DaGFuZ2VkKQpAQCAtMzQ1LDcgKzE1NSw3IEBAIHZvaWQgRXZlbnRUYXJn
ZXROb2RlOjpkaXNwYXRjaFdpbmRvd0V2ZW4KICAgICAgICAgaWYgKG93bmVyRWxlbWVudCkgewog
ICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiBvd25lckV2ZW50ID0gbmV3IEV2ZW50KGV2ZW50VHlw
ZSwgZmFsc2UsIGNhbmNlbGFibGVBcmcpOwogICAgICAgICAgICAgb3duZXJFdmVudC0+c2V0VGFy
Z2V0KG93bmVyRWxlbWVudCk7Ci0gICAgICAgICAgICBvd25lckVsZW1lbnQtPmRpc3BhdGNoR2Vu
ZXJpY0V2ZW50KG93bmVyRXZlbnQucmVsZWFzZSgpLCBlYywgdHJ1ZSk7CisgICAgICAgICAgICBv
d25lckVsZW1lbnQtPmRpc3BhdGNoR2VuZXJpY0V2ZW50KG93bmVyRWxlbWVudCwgb3duZXJFdmVu
dC5yZWxlYXNlKCksIGVjLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTYyMywyMiAr
NDMzLDYgQEAgdm9pZCBFdmVudFRhcmdldE5vZGU6OmR1bXAoVGV4dFN0cmVhbSogcwogICAgIE5v
ZGU6OmR1bXAoc3RyZWFtLGluZCk7CiB9CiAKLXZvaWQgZm9yYmlkRXZlbnREaXNwYXRjaCgpCi17
Ci0gICAgKytnRXZlbnREaXNwYXRjaEZvcmJpZGRlbjsKLX0KLQotdm9pZCBhbGxvd0V2ZW50RGlz
cGF0Y2goKQotewotICAgIGlmIChnRXZlbnREaXNwYXRjaEZvcmJpZGRlbiA+IDApCi0gICAgICAg
IC0tZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW47Ci19Ci0KLWJvb2wgZXZlbnREaXNwYXRjaEZvcmJp
ZGRlbigpCi17Ci0gICAgcmV0dXJuIGdFdmVudERpc3BhdGNoRm9yYmlkZGVuID4gMDsKLX0KLQog
I2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGRvbS9FdmVudFRhcmdldE5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vRXZlbnRUYXJnZXROb2RlLmgJKHJldmlzaW9uIDI4NzU1
KQorKysgZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBA
QAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksOSArMzAsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBE
ZXByZWNhdGVkVmFsdWVMaXN0OwotCi1jbGFzcyBFdmVudFRhcmdldE5vZGUgOiBwdWJsaWMgTm9k
ZSwgcHVibGljIEV2ZW50VGFyZ2V0IHsKK2NsYXNzIEV2ZW50VGFyZ2V0Tm9kZSA6IHB1YmxpYyBO
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1Ymxp
YzoKICAgICBFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5FdmVudFRh
cmdldE5vZGUoKTsKQEAgLTQ5LDcgKzQ5LDYgQEAgcHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hI
VE1MRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUpOwogICAgIEV2ZW50TGlzdGVuZXIqIGdldEhUTUxFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKIAotICAgIGJvb2wgZGlzcGF0Y2hHZW5l
cmljRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVu
dCA9IGZhbHNlKTsKICAgICBib29sIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQoYm9vbCBj
aGlsZHJlbkNoYW5nZWQgPSB0cnVlKTsKICAgICB2b2lkIGRpc3BhdGNoV2luZG93RXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFi
bGUpOwogICAgIGJvb2wgZGlzcGF0Y2hVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBpbnQgZGV0YWlsID0gMCwgUGFzc1JlZlB0cjxFdmVudD4gdW5kZXJseWluZ0V2ZW50ID0g
MCk7CkBAIC03MywxMSArNzIsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVk
SW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsK
IAotICAgIC8vIEhhbmRsZXJzIHRvIGRvL3VuZG8gYWN0aW9ucyBvbiB0aGUgdGFyZ2V0IG5vZGUg
YmVmb3JlIGFuIGV2ZW50IGlzIGRpc3BhdGNoZWQgdG8gaXQgYW5kIGFmdGVyIHRoZSBldmVudAot
ICAgIC8vIGhhcyBiZWVuIGRpc3BhdGNoZWQuICBUaGUgZGF0YSBwb2ludGVyIGlzIGhhbmRlZCBi
YWNrIGJ5IHRoZSBwcmVEaXNwYXRjaCBhbmQgcGFzc2VkIHRvIHBvc3REaXNwYXRjaC4KLSAgICB2
aXJ0dWFsIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50KikgeyByZXR1cm4gMDsg
fQotICAgIHZpcnR1YWwgdm9pZCBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqLCB2b2lk
KiBkYXRhRnJvbVByZURpc3BhdGNoKSB7IH0KLQogICAgIC8qKgogICAgICAqIFBlcmZvcm0gdGhl
IGRlZmF1bHQgYWN0aW9uIGZvciBhbiBldmVudCBlLmcuIHN1Ym1pdHRpbmcgYSBmb3JtCiAgICAg
ICovCkBAIC05MywxNSArODcsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRl
eHRTdHJlYW0qLCBEZXByZWNhdGVkU3RyaW5nIGluZGVudCA9ICIiKSBjb25zdDsKICNlbmRpZgog
CisgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0KiBsb2NhbEV2ZW50TGlzdGVuZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWdkTGlzdGVuZXJzOyB9CisKICAgICB1c2luZyBOb2RlOjpyZWY7
CiAgICAgdXNpbmcgTm9kZTo6ZGVyZWY7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFNW
R0VsZW1lbnQ7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNl
cHRpb25Db2RlJiwgYm9vbCB0ZW1wRXZlbnQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpOwogIAogcHJv
dGVjdGVkOgotICAgIHR5cGVkZWYgRGVwcmVjYXRlZFZhbHVlTGlzdDxSZWZQdHI8UmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXI+ID4gUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OworICAgIGZyaWVu
ZCBjbGFzcyBFdmVudFRhcmdldDsKICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3QqIG1f
cmVnZExpc3RlbmVyczsKIAogcHJpdmF0ZToKQEAgLTEyMSwxOSArMTEzLDYgQEAgaW5saW5lIGNv
bnN0IEV2ZW50VGFyZ2V0Tm9kZSogRXZlbnRUYXJnZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBFdmVudFRhcmdldE5vZGUqPihuKTsgCiB9CiAKLSNpZm5kZWYgTkRFQlVHCi0KLXZvaWQg
Zm9yYmlkRXZlbnREaXNwYXRjaCgpOwotdm9pZCBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKLWJvb2wg
ZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpOwotCi0jZWxzZQotCi1pbmxpbmUgdm9pZCBmb3JiaWRF
dmVudERpc3BhdGNoKCkgeyB9Ci1pbmxpbmUgdm9pZCBhbGxvd0V2ZW50RGlzcGF0Y2goKSB7IH0K
LQotI2VuZGlmIC8vIE5ERUJVRyAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRXZlbnRUYXJnZXROb2RlX2gKSW5kZXg6IHN2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDI4NzU1KQorKysgc3ZnL1NWR0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRXZlbnQu
aCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC0xNjgsNyAr
MTY5LDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzZW5kU1ZHTG9hZEV2ZW50SWZQb3NzaQogICAgICAg
ICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gbmV3IEV2ZW50KGxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KTsKICAgICAgICAgZXZlbnQtPnNldFRhcmdldChjdXJyZW50VGFyZ2V0KTsKICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBpZ25vcmVkID0gMDsKLSAgICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZl
bnQucmVsZWFzZSgpLCBpZ25vcmVkLCBmYWxzZSk7CisgICAgICAgIGRpc3BhdGNoR2VuZXJpY0V2
ZW50KHRoaXMsIGV2ZW50LnJlbGVhc2UoKSwgaWdub3JlZCwgZmFsc2UpOwogICAgICAgICBjdXJy
ZW50VGFyZ2V0ID0gKHBhcmVudCAmJiBwYXJlbnQtPmlzU1ZHRWxlbWVudCgpKSA/IHN0YXRpY19w
b2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4ocGFyZW50KSA6IDA7CiAgICAgfQogfQpAQCAtMjIwLDYg
KzIyMSw4IEBAIHN0YXRpYyBOb2RlKiBzaGFkb3dUcmVlUGFyZW50RWxlbWVudEZvclMKIAogYm9v
bCBTVkdFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlv
bkNvZGUmIGVjLCBib29sIHRlbXBFdmVudCkKIHsKKyAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9u
IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZvbGxvdy11cCBwYXRjaCEKKwogICAgIEV2ZW50VGFyZ2V0
KiB0YXJnZXQgPSB0aGlzOwogICAgIE5vZGUqIHVzZU5vZGUgPSBzaGFkb3dUcmVlUGFyZW50RWxl
bWVudEZvclNoYWRvd1RyZWVFbGVtZW50KHRoaXMpOwogCkBAIC0yMzUsNyArMjM4LDEwIEBAIGJv
b2wgU1ZHRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHQKICAgICAgICAgICAgIHRhcmdl
dCA9IGluc3RhbmNlOwogICAgIH0KIAotICAgIHJldHVybiBFdmVudFRhcmdldE5vZGU6OmRpc3Bh
dGNoRXZlbnQoZSwgZWMsIHRlbXBFdmVudCwgdGFyZ2V0KTsKKyAgICBlLT5zZXRUYXJnZXQodGFy
Z2V0KTsKKworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCk7
CisgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQodGhpcywg
ZSwgZWMsIHRlbXBFdmVudCk7CiB9CiAKIH0K
</data>
<flag name="review"
          id="7752"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17917</attachid>
            <date>2007-12-15 14:43:27 -0800</date>
            <delta_ts>2007-12-15 14:48:11 -0800</delta_ts>
            <desc>Updated patch v3</desc>
            <filename>Refactor4.diff</filename>
            <type>text/plain</type>
            <size>88835</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMDctMTIt
MTUgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkuCisKKyAgICAgICAgRml4ZXM6IGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDQ1IChSZWZhY3RvciBFdmVudFRhcmdldE5vZGUgJiBKU0V2
ZW50VGFyZ2V0Tm9kZSBmb3IgYW4gdXBjb21pbmcgU1ZHIHBhdGNoKQorCisgICAgICAgIFNwbGl0
IHVwIEpTRXZlbnRUYXJnZXROb2RlIGluIEpTRXZlbnRUYXJnZXROb2RlICYgSlNFdmVudFRhcmdl
dEJhc2UgLSB3aGVyZSBtb3N0IGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW92ZWQgZG93bgorICAg
ICAgICBpbiB0aGUgYmFzZSBjbGFzcy4gQXBwbGllZCB0aGUgc2FtZSByZWZhY3Rvcml6YXRpb24g
dG8gRXZlbnRUYXJnZXROb2RlLgorCisgICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9y
IHRoZSB1cGNvbWluZyBwYXRjaCBpbXBsZW1lbnRpbmcgdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFj
ZSBmb3IgU1ZHRWxlbWVudEluc3RhbmNlCisgICAgICAgIHRvIHNoYXJlIGFzIG11Y2ggY29kZSBh
cyBwb3NzaWJsZSB3aXRoIHRoZSBFdmVudFRhcmdldE5vZGUgY2xhc3Nlcy4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9u
ZGluZ05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnROYW1lRm9yUHJvcGVydHlUb2tlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U6OkpTRXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpKU0V2ZW50VGFyZ2V0QmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6cHV0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXRCYXNlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVu
dFRhcmdldFByb3RvdHlwZTo6SlNFdmVudFRhcmdldFByb3RvdHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlOjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXRQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlOjpjbGFzc0luZm8pOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVu
dFRhcmdldE5vZGU6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVu
dFRhcmdldE5vZGU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
cHV0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
c2V0TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9FdmVudFRhcmdldE5vZGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb246OnByb3RvdHlwZUNsYXNzTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb246OnBy
b3RvdHlwZUlkZW50aWZpZXIpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFRhcmdldDo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50VGFyZ2V0OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFRhcmdldDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFRhcmdldDo6aGFuZGxlTG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXQ6OmFwcGx5U1ZHRXZlbnRUYXJnZXRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpmb3Ji
aWRFdmVudERpc3BhdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmFsbG93RXZlbnREaXNwYXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpldmVudERpc3BhdGNoRm9yYmlkZGVuKToKKyAgICAgICAgKiBk
b20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpwcmVEaXNw
YXRjaEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6cG9zdERp
c3BhdGNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcmJpZEV2ZW50RGlzcGF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6YWxsb3dFdmVudERpc3BhdGNoKToKKyAgICAgICAgKiBk
b20vRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6fkV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6
Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5v
ZGU6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2Rl
OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9k
ZTo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJn
ZXROb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdl
dE5vZGU6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2Rl
OjpkaXNwYXRjaFdpbmRvd0V2ZW50KToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXROb2RlLmg6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmxvY2FsRXZlbnRMaXN0ZW5lcnMp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnQ6OnNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsZW1lbnQ6OmRpc3BhdGNoRXZlbnQpOgorCiAyMDA3LTEyLTE1ICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBEZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIERlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlz
aW9uIDI4NzU1KQorKysgRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzQx
LDcgKzM0MSw3IEBAIGFsbCA6IFwKICAgICBKU0VudGl0eS5oIFwKICAgICBKU0VudGl0eVJlZmVy
ZW5jZS5oIFwKICAgICBKU0V2ZW50LmggXAotICAgIEpTRXZlbnRUYXJnZXROb2RlLmx1dC5oIFwK
KyAgICBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCBcCiAgICAgSlNIVE1MQXBwbGV0RWxlbWVudC5o
IFwKICAgICBKU0hUTUxBbmNob3JFbGVtZW50LmggXAogICAgIEpTSFRNTEFyZWFFbGVtZW50Lmgg
XApJbmRleDogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg3NTUpCisrKyBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwOTMs
NiArMzA5Myw4IEBACiAJCUIyNTU5OUJBMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1h
cmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1
NTk5MjIwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR1Jlc291cmNlTWFya2VyLmggKi87IH07CiAJCUIy
NTU5OUJCMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTkyMzBEMDBEOEI5MDBC
QjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuY3BwICovOyB9OwogCQlCMjU1OTlCQzBEMDBEOEJB
MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OTI0MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNv
dXJjZU1hc2tlci5oICovOyB9OworCQlCMjVCRTUxMDBEMDZCNzA4MDBCNTI0QzYgLyogSlNFdmVu
dFRhcmdldEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI1QkU1MEUwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmNwcCAq
LzsgfTsKKwkJQjI1QkU1MTEwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjVCRTUwRjBE
MDZCNzA4MDBCNTI0QzYgLyogSlNFdmVudFRhcmdldEJhc2UuaCAqLzsgfTsKIAkJQjI1REZBQUYw
QjJFMjkyOTAwMEU2NTEwIC8qIEpTU1ZHTWF0cml4Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNURGQUFFMEIyRTI5MjkwMDBFNjUxMCAv
KiBKU1NWR01hdHJpeEN1c3RvbS5jcHAgKi87IH07CiAJCUIyNjU1NEVBMEI4MEQ3NDkwMEE1MEVD
MyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjY1NTRFODBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4
dFBhdGguY3BwICovOyB9OwogCQlCMjY1NTRFQjBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZH
VGV4dFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNjU1NEU5MEI4MEQ3NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oICovOyB9OwpA
QCAtMzE0NCw2ICszMTQ2LDcgQEAKIAkJQjI3NTM1ODIwQjA1MzgxNDAwMkNFNjRGIC8qIFBlbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NTUw
QjA1MzgxNDAwMkNFNjRGIC8qIFBlbi5oICovOyB9OwogCQlCMjc1MzU4RTBCMDUzQTY2MDAyQ0U2
NEYgLyogSWNvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tICovOyB9OwogCQlC
Mjc3QjQwNDBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3N0I0MDMwQjIyRjM3QzAw
MDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4dE1hYy5tbSAqLzsgfTsKKwkJQjI4QkMzMUEwRDEzNUU1
NDAwQ0RCQTI3IC8qIEpTRXZlbnRUYXJnZXRCYXNlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI4QkMzMTkwRDEzNUU1NDAwQ0RCQTI3IC8qIEpT
RXZlbnRUYXJnZXRCYXNlLmx1dC5oICovOyB9OwogCQlCMjhDNkEyNzBEMDBDNDQ4MDAzMzRBQTQg
LyogU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyOEM2QTFFMEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwICovOyB9OwogCQlCMjhDNkEyODBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjhDNkExRjBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHRG9jdW1lbnRFeHRlbnNp
b25zLmggKi87IH07CiAJCUIyOEM2QTI5MEQwMEM0NDgwMDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjhD
NkEyMDBEMDBDNDQ4MDAzMzRBQTQgLyogU1ZHSW1hZ2VMb2FkZXIuY3BwICovOyB9OwpAQCAtMzY5
Myw3ICszNjk2LDYgQEAKIAkJQkNEOUMyQzIwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMy
QkUwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxpc3QuY3BwICovOyB9OwogCQlCQ0Q5QzJDMzBD
MTdCNjlFMDA1QzkwQTIgLyogSlNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEOUMyQkYwQzE3QjY5RTAwNUM5MEEyIC8qIEpTTm9kZUxp
c3QuaCAqLzsgfTsKIAkJQkNEOUMyQzYwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRE9NRXhjZXB0aW9u
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0Q5QzJDNDBDMTdCNkVDMDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1
Y3Rvci5sdXQuaCAqLzsgfTsKLQkJQkNEOUMyQzcwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRU
YXJnZXROb2RlLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNEOUMyQzUwQzE3QjZFQzAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXROb2RlLmx1dC5o
ICovOyB9OwogCQlCQ0UwMTM5QTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTAxMzk4MEMw
QkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuY3BwICovOyB9OwogCQlCQ0UwMTM5QjBDMEJF
RjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNo
ZWV0LmggKi87IH07CiAJCUJDRUE0NzhGMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNFQTQ3N0MwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAgKi87IH07CkBAIC03MDkxLDYgKzcwOTMsOCBAQAogCQlCMjU1OTkyMjBEMDBE
OEI5MDBCQjgyNUMgLyogU1ZHUmVzb3VyY2VNYXJrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlTWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNTU5OTIzMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdSZXNvdXJjZU1hc2tlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3VyY2VNYXNrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTkyNDBEMDBEOEI5MDBCQjgy
NUMgLyogU1ZHUmVzb3VyY2VNYXNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1Jlc291cmNlTWFza2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
NUJFNTBFMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFdmVudFRhcmdldEJhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjVCRTUwRjBEMDZCNzA4MDBCNTI0QzYgLyogSlNF
dmVudFRhcmdldEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXZl
bnRUYXJnZXRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNURGQUFFMEIy
RTI5MjkwMDBFNjUxMCAvKiBKU1NWR01hdHJpeEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdNYXRyaXhDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjY1NTRFODBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4
dFBhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R1RleHRQYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NTU0RTkwQjgw
RDc0OTAwQTUwRUMzIC8qIFJlbmRlclNWR1RleHRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdUZXh0UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzE0Miw2ICs3MTQ2LDcgQEAKIAkJQjI3NTM1NTUwQjA1MzgxNDAwMkNFNjRGIC8q
IFBlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVuLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEljb25NYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzdCNDAzMEIyMkYzN0MwMDA0QkVDNiAv
KiBHcmFwaGljc0NvbnRleHRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCMjhCQzMxOTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2UubHV0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI4QzZBMUUwRDAwQzQ0ODAwMzM0QUE0
IC8qIFNWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI4QzZBMUYwRDAwQzQ0ODAwMzM0QUE0IC8qIFNWR0RvY3VtZW50RXh0ZW5z
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRG9jdW1lbnRFeHRl
bnNpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyOEM2QTIwMEQwMEM0NDgw
MDMzNEFBNCAvKiBTVkdJbWFnZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHSW1hZ2VMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzcwMSw3ICs3NzA2LDYgQEAKIAkJQkNEOUMyQkUwQzE3QjY5RTAwNUM5MEEyIC8qIEpT
Tm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTm9k
ZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Q5QzJCRjBDMTdCNjlF
MDA1QzkwQTIgLyogSlNOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Q5QzJDNDBD
MTdCNkVDMDA1QzkwQTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5sdXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IubHV0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDRDlDMkM1MEMxN0I2RUMwMDVDOTBB
MiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRXZlbnRUYXJnZXROb2RlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0UwMTM5ODBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0UwMTM5OTBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHls
ZVNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0eWxlU2hlZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0MwOTdDQUFDODAwOTRDOUU0
IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgyMDgsNyArODIxMiw2IEBACiAJCQkJQThEMDZCMzgw
QTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgKi8sCiAJCQkJQThEMDZCMzcwQTI2NURD
RDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5oICovLAogCQkJCUJDRDlDMkM0MEMxN0I2RUMwMDVDOTBB
MiAvKiBKU0RPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmx1dC5oICovLAotCQkJCUJDRDlDMkM1MEMx
N0I2RUMwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCAqLywKIAkJCQk2NTY1ODFE
QTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX2Nzcy5sdXQuaCAqLywKIAkJCQk2NTY1ODFEQzA5RDE1
MDhEMDAwRTYxRDcgLyoga2pzX2V2ZW50cy5sdXQuaCAqLywKIAkJCQk2NTY1ODFERTA5RDE1MDhE
MDAwRTYxRDcgLyoga2pzX25hdmlnYXRvci5sdXQuaCAqLywKQEAgLTEwNTQxLDYgKzEwNTQ0LDcg
QEAKIAkJCQkxQUNFNTNERDBBOEQxODgxMDAyMjk0N0QgLyogSlNET01QYXJzZXIuY3BwICovLAog
CQkJCTFBQ0U1M0RFMEE4RDE4ODEwMDIyOTQ3RCAvKiBKU0RPTVBhcnNlci5oICovLAogCQkJCTY1
NjU4MUQ3MDlEMTUwOEQwMDBFNjFENyAvKiBKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oICovLAorCQkJ
CUIyOEJDMzE5MEQxMzVFNTQwMENEQkEyNyAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5sdXQuaCAqLywK
IAkJCQkxQUNFNTNGNDBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmNwcCAqLywK
IAkJCQkxQUNFNTNGNTBBOEQxOTQ3MDAyMjk0N0QgLyogSlNYTUxTZXJpYWxpemVyLmggKi8sCiAJ
CQkJNjU2NTgxRDkwOUQxNTA4RDAwMEU2MUQ3IC8qIEpTWFNMVFByb2Nlc3Nvci5sdXQuaCAqLywK
QEAgLTExMzU5LDYgKzExMzYzLDggQEAKIAkJCQlFMTBCOTM3QjBCNzNDMDBBMDAzRUQ4OTAgLyog
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCAqLywKIAkJCQlCQ0Q5QzI2ODBDMTdBQTgxMDA1Qzkw
QTIgLyogSlNET01FeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEOUMyNjkwQzE3
QUE4MTAwNUM5MEEyIC8qIEpTRE9NRXhjZXB0aW9uQ29uc3RydWN0b3IuaCAqLywKKwkJCQlCMjVC
RTUwRTBEMDZCNzA4MDBCNTI0QzYgLyogSlNFdmVudFRhcmdldEJhc2UuY3BwICovLAorCQkJCUIy
NUJFNTBGMEQwNkI3MDgwMEI1MjRDNiAvKiBKU0V2ZW50VGFyZ2V0QmFzZS5oICovLAogCQkJCUJD
RDlDMjZBMEMxN0FBODEwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5jcHAgKi8sCiAJCQkJ
QkNEOUMyNkIwQzE3QUE4MTAwNUM5MEEyIC8qIEpTRXZlbnRUYXJnZXROb2RlLmggKi8sCiAJCQkJ
QkM2REM3QTAwQzFBNEJGQTAwNEUyMDE3IC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCAqLywKQEAg
LTEzMzM1LDcgKzEzMzQxLDYgQEAKIAkJCQk5M0Y5Qjc3NTBCQTVGREREMDA4NTQwNjQgLyogSlNF
bnRpdHlSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTgzNzhFMDlGODVENEYwMEI4
NUFFNCAvKiBKU0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Q5QzI3MTBDMTdBQTgxMDA1
QzkwQTIgLyogSlNFdmVudFRhcmdldE5vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDRDlDMkM3
MEMxN0I2RUMwMDVDOTBBMiAvKiBKU0V2ZW50VGFyZ2V0Tm9kZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNkRDN0ExMEMxQTRCRkEwMDRFMjAxNyAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5j
aG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTJERjIwQTFCODUyQTAwQzgwN0Y4
IC8qIEpTSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTQwOTAsOSArMTQw
OTUsMTEgQEAKIAkJCQlCQ0IxNkMyRDA5NzlDM0JEMDA0Njc3NDEgLyogbG9hZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOURGODA5OUU2NDkyMDA1NkU1ODEgLyogbWFya3VwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQjI1QkU1MTEwRDA2QjcwODAwQjUyNEM2IC8qIEpTRXZlbnRU
YXJnZXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUNCRkM5OTBEMTBFNDgzMDAyREJGNTEg
LyogQ2FjaGVkUGFnZVBsYXRmb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MDRCNzcw
RDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NEJGOUU1MEQxMUUxMzMwMDdEMjQ3RiAvKiBDbGFzc05hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCMjhCQzMxQTBEMTM1RTU0MDBDREJBMjcgLyogSlNFdmVudFRhcmdldEJhc2UubHV0LmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTE0MTMxLDcgKzE0MTM4LDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMw
MkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJ
CWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKLQkJCWNv
bXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rp
bmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMTU4MDEsNiAr
MTU4MDcsNyBAQAogCQkJCUJDQjE2QzJDMDk3OUMzQkQwMDQ2Nzc0MSAvKiBsb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91
bml0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjVCRTUxMDBEMDZCNzA4MDBCNTI0QzYgLyog
SlNFdmVudFRhcmdldEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNBMzhCNEIwRDBFNTgw
ODAwNjg3MkMyIC8qIEVkaXRvckNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MDRC
NzYwRDEwOTk4RjAwNjgwRDMyIC8qIENsYXNzTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM0QkY5RTQwRDExRTEzMzAwN0QyNDdGIC8qIENsYXNzTmFtZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgYmlu
ZGluZ3MvanMvSlNFdmVudFRhcmdldEJhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSlNF
dmVudFRhcmdldE5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBTb3VyY2UgZm9y
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzVGFibGUKK0BiZWdpbiBKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllc1RhYmxlIDUwCitvbmFib3J0ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbkFib3J0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uYmx1ciAgICAgICAgV2Vi
Q29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmx1ciAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZQorb25jaGFuZ2UgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6
T25DaGFuZ2UgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmNsaWNrICAgICAgIFdlYkNvcmU6
OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNsaWNrICAgICAgICAgICAgICAgIERvbnREZWxl
dGUKK29uY29udGV4dG1lbnUgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQ29u
dGV4dE1lbnUgICAgICAgICAgRG9udERlbGV0ZQorb25kYmxjbGljayAgICBXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25EYmxDbGljayAgICAgICAgICAgICBEb250RGVsZXRlCitv
bmJlZm9yZWN1dCAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkJlZm9yZUN1
dCAgICAgICAgICAgIERvbnREZWxldGUKK29uY3V0ICAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRh
cmdldFByb3BlcnRpZXM6Ok9uQ3V0ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25iZWZv
cmVjb3B5ICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CZWZvcmVDb3B5ICAg
ICAgICAgICBEb250RGVsZXRlCitvbmNvcHkgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkNvcHkgICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uYmVmb3JlcGFz
dGUgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlUGFzdGUgICAgICAg
ICAgRG9udERlbGV0ZQorb25wYXN0ZSAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25QYXN0ZSAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmRyYWcgICAgICAgIFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWcgICAgICAgICAgICAgICAgIERv
bnREZWxldGUKK29uZHJhZ2VuZCAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uRHJhZ0VuZCAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25kcmFnZW50ZXIgICBXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnRW50ZXIgICAgICAgICAgICBEb250RGVs
ZXRlCitvbmRyYWdsZWF2ZSAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRy
YWdMZWF2ZSAgICAgICAgICAgIERvbnREZWxldGUKK29uZHJhZ292ZXIgICAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZ092ZXIgICAgICAgICAgICAgRG9udERlbGV0ZQor
b25kcmFnc3RhcnQgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnU3Rh
cnQgICAgICAgICAgICBEb250RGVsZXRlCitvbmRyb3AgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkRyb3AgICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uZXJy
b3IgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRXJyb3IgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZQorb25mb2N1cyAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6T25Gb2N1cyAgICAgICAgICAgICAgICBEb250RGVsZXRlCitvbmlucHV0ICAg
ICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbklucHV0ICAgICAgICAgICAg
ICAgIERvbnREZWxldGUKK29ua2V5ZG93biAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3Bl
cnRpZXM6Ok9uS2V5RG93biAgICAgICAgICAgICAgRG9udERlbGV0ZQorb25rZXlwcmVzcyAgICBX
ZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlQcmVzcyAgICAgICAgICAgICBE
b250RGVsZXRlCitvbmtleXVwICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVz
OjpPbktleVVwICAgICAgICAgICAgICAgIERvbnREZWxldGUKK29ubG9hZCAgICAgICAgV2ViQ29y
ZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTG9hZCAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZQorb25tb3VzZWRvd24gICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25N
b3VzZURvd24gICAgICAgICAgICBEb250RGVsZXRlCitvbm1vdXNlbW92ZSAgIFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlTW92ZSAgICAgICAgICAgIERvbnREZWxldGUK
K29ubW91c2VvdXQgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VP
dXQgICAgICAgICAgICAgRG9udERlbGV0ZQorb25tb3VzZW92ZXIgICBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU92ZXIgICAgICAgICAgICBEb250RGVsZXRlCitvbm1v
dXNldXAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlVXAgICAg
ICAgICAgICAgIERvbnREZWxldGUKK29ubW91c2V3aGVlbCAgV2ViQ29yZTo6SlNFdmVudFRhcmdl
dFByb3BlcnRpZXM6Ok9uTW91c2VXaGVlbCAgICAgICAgICAgRG9udERlbGV0ZQorb25yZXNldCAg
ICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25SZXNldCAgICAgICAgICAg
ICAgICBEb250RGVsZXRlCitvbnJlc2l6ZSAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPblJlc2l6ZSAgICAgICAgICAgICAgIERvbnREZWxldGUKK29uc2Nyb2xsICAgICAg
V2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uU2Nyb2xsICAgICAgICAgICAgICAg
RG9udERlbGV0ZQorb25zZWFyY2ggICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25TZWFyY2ggICAgICAgICAgICAgICBEb250RGVsZXRlCitvbnNlbGVjdCAgICAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNlbGVjdCAgICAgICAgICAgICAgIERvbnRE
ZWxldGUKK29uc2VsZWN0c3RhcnQgV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9u
U2VsZWN0U3RhcnQgICAgICAgICAgRG9udERlbGV0ZQorb25zdWJtaXQgICAgICBXZWJDb3JlOjpK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25TdWJtaXQgICAgICAgICAgICAgICBEb250RGVsZXRl
CitvbnVubG9hZCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblVubG9h
ZCAgICAgICAgICAgICAgIERvbnREZWxldGUKK0BlbmQKKyovCisKKy8qCitAYmVnaW4gSlNFdmVu
dFRhcmdldFByb3RvdHlwZVRhYmxlIDUKK2FkZEV2ZW50TGlzdGVuZXIgICAgICAgICZXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb248V2ViQ29yZTo6SlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6OkFkZEV2ZW50TGlzdGVuZXI+OjpjcmVhdGUgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAzCityZW1vdmVFdmVudExpc3RlbmVyICAgICAmV2ViQ29yZTo6SlNFdmVudFRhcmdldFByb3Rv
dHlwZUZ1bmN0aW9uPFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpSZW1vdmVFdmVu
dExpc3RlbmVyPjo6Y3JlYXRlIERvbnREZWxldGV8RnVuY3Rpb24gMworZGlzcGF0Y2hFdmVudCAg
ICAgICAgICAgJldlYkNvcmU6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbjxXZWJDb3Jl
OjpKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD46OmNyZWF0ZSAgICAgICBE
b250RGVsZXRlfEZ1bmN0aW9uIDEKK0BlbmQKKyovCisKK2Jvb2wgcmV0cmlldmVFdmVudFRhcmdl
dEFuZENvcnJlc3BvbmRpbmdOb2RlKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpKU09iamVjdCogdGhp
c09iaiwgTm9kZSomIGV2ZW50Tm9kZSwgRXZlbnRUYXJnZXQqJiBldmVudFRhcmdldCkKK3sKKyAg
ICBpZiAodGhpc09iai0+aW5oZXJpdHMoJkpTTm9kZTo6aW5mbykpIHsKKyAgICAgICAgSlNFdmVu
dFRhcmdldE5vZGUqIGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTRXZlbnRUYXJnZXROb2RlKj4odGhp
c09iaik7CisgICAgICAgIEFTU0VSVChqc05vZGUpOworCisgICAgICAgIEV2ZW50VGFyZ2V0Tm9k
ZSogbm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGpzTm9kZS0+aW1wbCgpKTsK
KyAgICAgICAgQVNTRVJUKG5vZGUpOworCisgICAgICAgIGV2ZW50Tm9kZSA9IG5vZGU7CisgICAg
ICAgIGV2ZW50VGFyZ2V0ID0gbm9kZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitBdG9taWNTdHJpbmcgZXZlbnROYW1lRm9yUHJvcGVydHlU
b2tlbihpbnQgdG9rZW4pCit7ICAgIAorICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICBjYXNlIEpT
RXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkFib3J0OgorICAgICAgICByZXR1cm4gYWJvcnRFdmVu
dDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkJsdXI6CisgICAgICAgIHJl
dHVybiBibHVyRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25DaGFu
Z2U6CisgICAgICAgIHJldHVybiBjaGFuZ2VFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzOjpPbkNsaWNrOgorICAgICAgICByZXR1cm4gY2xpY2tFdmVudDsKKyAgICBjYXNl
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNvbnRleHRNZW51OgorICAgICAgICByZXR1cm4g
Y29udGV4dG1lbnVFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRi
bENsaWNrOgorICAgICAgICByZXR1cm4gZGJsY2xpY2tFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbkVycm9yOgorICAgICAgICByZXR1cm4gZXJyb3JFdmVudDsKKyAg
ICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkZvY3VzOgorICAgICAgICByZXR1cm4g
Zm9jdXNFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbklucHV0Ogor
ICAgICAgICByZXR1cm4gaW5wdXRFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbktleURvd246CisgICAgICAgIHJldHVybiBrZXlkb3duRXZlbnQ7CisgICAgY2FzZSBK
U0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlQcmVzczoKKyAgICAgICAgcmV0dXJuIGtleXBy
ZXNzRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25LZXlVcDoKKyAg
ICAgICAgcmV0dXJuIGtleXVwRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGll
czo6T25Mb2FkOgorICAgICAgICByZXR1cm4gbG9hZEV2ZW50OworICAgIGNhc2UgSlNFdmVudFRh
cmdldFByb3BlcnRpZXM6Ok9uTW91c2VEb3duOgorICAgICAgICByZXR1cm4gbW91c2Vkb3duRXZl
bnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25Nb3VzZU1vdmU6CisgICAg
ICAgIHJldHVybiBtb3VzZW1vdmVFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0
aWVzOjpPbk1vdXNlT3V0OgorICAgICAgICByZXR1cm4gbW91c2VvdXRFdmVudDsKKyAgICBjYXNl
IEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlT3ZlcjoKKyAgICAgICAgcmV0dXJuIG1v
dXNlb3ZlckV2ZW50OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uTW91c2VV
cDoKKyAgICAgICAgcmV0dXJuIG1vdXNldXBFdmVudDsgICAgICAKKyAgICBjYXNlIEpTRXZlbnRU
YXJnZXRQcm9wZXJ0aWVzOjpPbk1vdXNlV2hlZWw6CisgICAgICAgIHJldHVybiBtb3VzZXdoZWVs
RXZlbnQ7ICAgICAgCisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25CZWZvcmVD
dXQ6CisgICAgICAgIHJldHVybiBiZWZvcmVjdXRFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkN1dDoKKyAgICAgICAgcmV0dXJuIGN1dEV2ZW50OworICAgIGNhc2Ug
SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uQmVmb3JlQ29weToKKyAgICAgICAgcmV0dXJuIGJl
Zm9yZWNvcHlFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkNvcHk6
CisgICAgICAgIHJldHVybiBjb3B5RXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVy
dGllczo6T25CZWZvcmVQYXN0ZToKKyAgICAgICAgcmV0dXJuIGJlZm9yZXBhc3RlRXZlbnQ7Cisg
ICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25QYXN0ZToKKyAgICAgICAgcmV0dXJu
IHBhc3RlRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25EcmFnRW50
ZXI6CisgICAgICAgIHJldHVybiBkcmFnZW50ZXJFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkRyYWdPdmVyOgorICAgICAgICByZXR1cm4gZHJhZ292ZXJFdmVudDsK
KyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdMZWF2ZToKKyAgICAgICAg
cmV0dXJuIGRyYWdsZWF2ZUV2ZW50OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6
Ok9uRHJvcDoKKyAgICAgICAgcmV0dXJuIGRyb3BFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJn
ZXRQcm9wZXJ0aWVzOjpPbkRyYWdTdGFydDoKKyAgICAgICAgcmV0dXJuIGRyYWdzdGFydEV2ZW50
OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uRHJhZzoKKyAgICAgICAgcmV0
dXJuIGRyYWdFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPbkRyYWdF
bmQ6CisgICAgICAgIHJldHVybiBkcmFnZW5kRXZlbnQ7CisgICAgY2FzZSBKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6T25SZXNldDoKKyAgICAgICAgcmV0dXJuIHJlc2V0RXZlbnQ7CisgICAgY2Fz
ZSBKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6T25SZXNpemU6CisgICAgICAgIHJldHVybiByZXNp
emVFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNjcm9sbDoKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbEV2ZW50OworICAgIGNhc2UgSlNFdmVudFRhcmdldFByb3BlcnRp
ZXM6Ok9uU2VhcmNoOgorICAgICAgICByZXR1cm4gc2VhcmNoRXZlbnQ7CisgICAgY2FzZSBKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6T25TZWxlY3Q6CisgICAgICAgIHJldHVybiBzZWxlY3RFdmVu
dDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpPblNlbGVjdFN0YXJ0OgorICAg
ICAgICByZXR1cm4gc2VsZWN0c3RhcnRFdmVudDsKKyAgICBjYXNlIEpTRXZlbnRUYXJnZXRQcm9w
ZXJ0aWVzOjpPblN1Ym1pdDoKKyAgICAgICAgcmV0dXJuIHN1Ym1pdEV2ZW50OworICAgIGNhc2Ug
SlNFdmVudFRhcmdldFByb3BlcnRpZXM6Ok9uVW5sb2FkOgorICAgICAgICByZXR1cm4gdW5sb2Fk
RXZlbnQ7CisgICAgfQorCisgICAgcmV0dXJuIEF0b21pY1N0cmluZygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRCYXNlLmgJKHJldmlzaW9uIDAp
CisrKyBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNFdmVudFRhcmdldEJhc2VfaAor
I2RlZmluZSBKU0V2ZW50VGFyZ2V0QmFzZV9oCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkpTRXZl
bnQuaCIKKyNpbmNsdWRlICJranNfZXZlbnRzLmgiCisjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsK
KworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKworICAgIC8vIEV2ZW50IHRhcmdldCBwcm9wZXJ0
aWVzIChzaGFyZWQgYWNyb3NzIGFsbCBKU0V2ZW50VGFyZ2V0KiBjbGFzc2VzKQorICAgIHN0cnVj
dCBKU0V2ZW50VGFyZ2V0UHJvcGVydGllcyB7CisgICAgICAgIGVudW0geworICAgICAgICAgICAg
QWRkRXZlbnRMaXN0ZW5lciwgUmVtb3ZlRXZlbnRMaXN0ZW5lciwgRGlzcGF0Y2hFdmVudCwKKyAg
ICAgICAgICAgIE9uQWJvcnQsIE9uQmx1ciwgT25DaGFuZ2UsIE9uQ2xpY2ssIE9uQ29udGV4dE1l
bnUsIE9uRGJsQ2xpY2ssIE9uRXJyb3IsCisgICAgICAgICAgICBPbkRyYWdFbnRlciwgT25EcmFn
T3ZlciwgT25EcmFnTGVhdmUsIE9uRHJvcCwgT25EcmFnU3RhcnQsIE9uRHJhZywgT25EcmFnRW5k
LAorICAgICAgICAgICAgT25CZWZvcmVDdXQsIE9uQ3V0LCBPbkJlZm9yZUNvcHksIE9uQ29weSwg
T25CZWZvcmVQYXN0ZSwgT25QYXN0ZSwgT25TZWxlY3RTdGFydCwKKyAgICAgICAgICAgIE9uRm9j
dXMsIE9uSW5wdXQsIE9uS2V5RG93biwgT25LZXlQcmVzcywgT25LZXlVcCwgT25Mb2FkLCBPbk1v
dXNlRG93biwKKyAgICAgICAgICAgIE9uTW91c2VNb3ZlLCBPbk1vdXNlT3V0LCBPbk1vdXNlT3Zl
ciwgT25Nb3VzZVVwLCBPbk1vdXNlV2hlZWwsIE9uUmVzZXQsCisgICAgICAgICAgICBPblJlc2l6
ZSwgT25TY3JvbGwsIE9uU2VhcmNoLCBPblNlbGVjdCwgT25TdWJtaXQsIE9uVW5sb2FkCisgICAg
ICAgIH07CisgICAgfTsKKworICAgIC8vIEV2ZW50IHRhcmdldCBwcm90b3R5cGUgc2hhcmluZyBm
dW5jdGlvbmFsaXR5CisgICAgdGVtcGxhdGU8aW50IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5j
dGlvbklkZW50aWZpZXI+CisgICAgY2xhc3MgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
QmFzZSA6IHB1YmxpYyBLSlM6OkludGVybmFsRnVuY3Rpb25JbXAgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZShLSlM6OkV4ZWNTdGF0ZSog
ZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1lKSAKKyAgICAgICAgICAg
IDogS0pTOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKHN0YXRpY19jYXN0PEtKUzo6RnVuY3Rpb25Qcm90
b3R5cGUqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG90eXBlKCkp
LCBuYW1lKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIHB1dChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBLSlM6OmpzTnVtYmVyKGxlbiksIEtKUzo6RG9udERlbGV0ZSB8IEtK
Uzo6UmVhZE9ubHkgfCBLSlM6OkRvbnRFbnVtKTsgCisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgS0pTOjpJbnRlcm5hbEZ1bmN0aW9uSW1wKiBjcmVhdGUoS0pTOjpFeGVjU3RhdGUqLCBpbnQg
bGVuLCBjb25zdCBLSlM6OklkZW50aWZpZXImIG5hbWUpOworICAgICAgICB2aXJ0dWFsIEtKUzo6
SlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0Kiwg
Y29uc3QgS0pTOjpMaXN0JikgPSAwOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgSlNFdmVu
dFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4KKyAgICBjbGFzcyBKU0V2ZW50VGFy
Z2V0UHJvdG90eXBlRnVuY3Rpb24gOiBwdWJsaWMgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0
aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JZGVudGlmaWVyPiB7CisgICAg
cHVibGljOgorICAgICAgICBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb24oS0pTOjpFeGVj
U3RhdGUqIGV4ZWMsIGludCBsZW4sIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgbmFtZSkgCisgICAg
ICAgICAgICA6IEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4oZXhlYywgbGVuLCBuYW1lKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG5vdCBtZWFudCB0byBiZSBjYWxs
ZWQsIHRoZSB0ZW1wbGF0ZSBzcGV6aWFsaXphdGlvbnMgbmVlZCB0byBpbXBsZW1lbnQgaXQuCisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgICAgCisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgcGFydGlhbCBzcGVjaWFsaXphdGVkIHRl
bXBsYXRlIGZ1bmN0aW9ucyBiZWxvdyAKKyAgICBib29sIHJldHJpZXZlRXZlbnRUYXJnZXRBbmRD
b3JyZXNwb25kaW5nTm9kZShLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqIHRoaXNPYmos
IE5vZGUqJiwgRXZlbnRUYXJnZXQqJik7CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgSlNF
dmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRF
dmVudExpc3RlbmVyPiA6IHB1YmxpYyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25CYXNl
PEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRFdmVudExpc3RlbmVyPiB7CisgICAgcHVibGlj
OgorICAgICAgICBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb248SlNFdmVudFRhcmdldFBy
b3BlcnRpZXM6OkFkZEV2ZW50TGlzdGVuZXI+KEtKUzo6RXhlY1N0YXRlKiBleGVjLCBpbnQgbGVu
LCBjb25zdCBLSlM6OklkZW50aWZpZXImIG5hbWUpIAorICAgICAgICAgICAgOiBKU0V2ZW50VGFy
Z2V0UHJvdG90eXBlRnVuY3Rpb25CYXNlPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpBZGRFdmVu
dExpc3RlbmVyPihleGVjLCBsZW4sIG5hbWUpCisgICAgICAgIHsgCisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUq
IGV4ZWMsIEtKUzo6SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEtKUzo6TGlzdCYgYXJncykKKyAg
ICAgICAgeworICAgICAgICAgICAgS0pTOjpET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlv
bihleGVjKTsKKworICAgICAgICAgICAgTm9kZSogZXZlbnROb2RlID0gMDsKKyAgICAgICAgICAg
IEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IDA7CisgICAgICAgICAgICBpZiAoIXJldHJpZXZl
RXZlbnRUYXJnZXRBbmRDb3JyZXNwb25kaW5nTm9kZShleGVjLCB0aGlzT2JqLCBldmVudE5vZGUs
IGV2ZW50VGFyZ2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gS0pTOjp0aHJvd0Vycm9yKGV4
ZWMsIEtKUzo6VHlwZUVycm9yKTsKKworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZXZlbnRO
b2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gS0pTOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICBpZiAo
SlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhm
cmFtZSktPmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihhcmdzWzFdKSkKKyAgICAgICAgICAg
ICAgICBldmVudFRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVj
KSwgbGlzdGVuZXIsIGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKSk7CisKKyAgICAgICAgICAgIHJl
dHVybiBLSlM6OmpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbjxKU0V2ZW50VGFy
Z2V0UHJvcGVydGllczo6UmVtb3ZlRXZlbnRMaXN0ZW5lcj4gOiBwdWJsaWMgSlNFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZl
bnRMaXN0ZW5lcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVudFRhcmdldFByb3RvdHlw
ZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpSZW1vdmVFdmVudExpc3RlbmVyPihL
SlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBuYW1l
KSAKKyAgICAgICAgICAgIDogSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2
ZW50VGFyZ2V0UHJvcGVydGllczo6UmVtb3ZlRXZlbnRMaXN0ZW5lcj4oZXhlYywgbGVuLCBuYW1l
KQorICAgICAgICB7IAorICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFsdWUq
IGNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIEtKUzo6
RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisKKyAgICAgICAgICAgIE5v
ZGUqIGV2ZW50Tm9kZSA9IDA7CisgICAgICAgICAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQg
PSAwOworICAgICAgICAgICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGlu
Z05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnROb2RlLCBldmVudFRhcmdldCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBLSlM6OlR5cGVFcnJvcik7CisKKyAg
ICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGV2ZW50Tm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
KyAgICAgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEtKUzo6anNV
bmRlZmluZWQoKTsKKworICAgICAgICAgICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBLSlM6OldpbmRvdzo6cmV0cmlldmVXaW5kb3coZnJhbWUpLT5maW5kSlNFdmVudExpc3RlbmVy
KGFyZ3NbMV0pKQorICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LT5yZW1vdmVFdmVudExpc3Rl
bmVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lciwgYXJnc1syXS0+dG9Cb29sZWFu
KGV4ZWMpKTsKKworICAgICAgICAgICAgcmV0dXJuIEtKUzo6anNVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQorICAgIH07CisgCisgICAgdGVtcGxhdGU8PgorICAgIGNsYXNzIEpTRXZlbnRUYXJnZXRQ
cm90b3R5cGVGdW5jdGlvbjxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4g
OiBwdWJsaWMgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uQmFzZTxKU0V2ZW50VGFyZ2V0
UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4geworICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVu
dFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uPEpTRXZlbnRUYXJnZXRQcm9wZXJ0aWVzOjpEaXNwYXRj
aEV2ZW50PihLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiBuYW1lKSAKKyAgICAgICAgICAgIDogSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9u
QmFzZTxKU0V2ZW50VGFyZ2V0UHJvcGVydGllczo6RGlzcGF0Y2hFdmVudD4oZXhlYywgbGVuLCBu
YW1lKQorICAgICAgICB7IAorICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBLSlM6OkpTVmFs
dWUqIGNhbGxBc0Z1bmN0aW9uKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBLSlM6Okxpc3QmIGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5v
ZGUqIGV2ZW50Tm9kZSA9IDA7CisgICAgICAgICAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQg
PSAwOworICAgICAgICAgICAgaWYgKCFyZXRyaWV2ZUV2ZW50VGFyZ2V0QW5kQ29ycmVzcG9uZGlu
Z05vZGUoZXhlYywgdGhpc09iaiwgZXZlbnROb2RlLCBldmVudFRhcmdldCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEtKUzo6dGhyb3dFcnJvcihleGVjLCBLSlM6OlR5cGVFcnJvcik7CisKKyAg
ICAgICAgICAgIEtKUzo6RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm4gS0pTOjpqc0Jvb2xlYW4oZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZl
bnQodG9FdmVudChhcmdzWzBdKSwgZXhjZXB0aW9uKSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLy8gVGhpcyBjcmVhdGlvbiBmdW5jdGlvbiByZWxpZXMgdXBvbiBhYm92ZSBzcGVjaWFsaXph
dGlvbnMKKyAgICB0ZW1wbGF0ZTxpbnQgSlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRl
bnRpZmllcj4KKyAgICBLSlM6OkludGVybmFsRnVuY3Rpb25JbXAqIEpTRXZlbnRUYXJnZXRQcm90
b3R5cGVGdW5jdGlvbkJhc2U8SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmll
cj46OmNyZWF0ZShLSlM6OkV4ZWNTdGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgS0pTOjpJZGVu
dGlmaWVyJiBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBKU0V2ZW50VGFyZ2V0UHJv
dG90eXBlRnVuY3Rpb248SlNFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSWRlbnRpZmllcj4o
ZXhlYywgbGVuLCBuYW1lKTsgCisgICAgfQorfTsKKworLy8gTmVlZHMgdG8gYmUgaW5jbHVkZWQg
YWZ0ZXIgYWJvdmUgZGVjbGFyYXRpb24KKyNpbmNsdWRlICJKU0V2ZW50VGFyZ2V0QmFzZS5sdXQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBn
ZXRWYWx1ZVByb3BlcnR5L3B1dFZhbHVlUHJvcGVydHkKKyAgICBBdG9taWNTdHJpbmcgZXZlbnRO
YW1lRm9yUHJvcGVydHlUb2tlbihpbnQgdG9rZW4pOworCisgICAgdGVtcGxhdGU8Y2xhc3MgSlNF
dmVudFRhcmdldD4KKyAgICBjbGFzcyBKU0V2ZW50VGFyZ2V0QmFzZSB7CisgICAgcHVibGljOgor
ICAgICAgICBKU0V2ZW50VGFyZ2V0QmFzZSgpIHsgfQorCisgICAgICAgIEtKUzo6SlNWYWx1ZSog
Z2V0VmFsdWVQcm9wZXJ0eShjb25zdCBKU0V2ZW50VGFyZ2V0KiBvd25lciwgS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQXRvbWlj
U3RyaW5nIGV2ZW50TmFtZSA9IGV2ZW50TmFtZUZvclByb3BlcnR5VG9rZW4odG9rZW4pOworICAg
ICAgICAgICAgaWYgKCFldmVudE5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBvd25lci0+Z2V0TGlzdGVuZXIoZXZlbnROYW1lKTsKKworICAgICAgICAgICAgcmV0dXJuIEtK
Uzo6anNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShjb25zdCBKU0V2ZW50VGFyZ2V0KiBvd25lciwgS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbiwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyBldmVudE5hbWUgPSBldmVudE5hbWVGb3JQcm9wZXJ0eVRva2Vu
KHRva2VuKTsKKyAgICAgICAgICAgIGlmICghZXZlbnROYW1lLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBvd25lci0+c2V0TGlzdGVuZXIoZXhlYywgZXZlbnROYW1lLCB2YWx1ZSk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU0V2ZW50VGFyZ2V0
Tm9kZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpTRXZlbnRUYXJnZXRTVkdFbGVtZW50SW5zdGFu
Y2U7CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgSlNQYXJlbnQ+CisgICAgICAgIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTRXZlbnRUYXJnZXQqIG93bmVyLCBLSlM6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgS0pTOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEtKUzo6UHJvcGVydHlTbG90
JiBzbG90KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gS0pTOjpnZXRTdGF0aWNWYWx1
ZVNsb3Q8SlNFdmVudFRhcmdldCwgSlNQYXJlbnQ+KGV4ZWMsICZLSlM6OkpTRXZlbnRUYXJnZXRQ
cm9wZXJ0aWVzVGFibGUsIG93bmVyLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICB9CisK
KyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgSlNQYXJlbnQ+CisgICAgICAgIHZvaWQgcHV0KEpTRXZl
bnRUYXJnZXQqIG93bmVyLCBLSlM6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIEtKUzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQorICAgICAg
ICB7CisgICAgICAgICAgICBLSlM6Omxvb2t1cFB1dDxKU0V2ZW50VGFyZ2V0LCBKU1BhcmVudD4o
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJktKUzo6SlNFdmVudFRhcmdldFByb3Bl
cnRpZXNUYWJsZSwgb3duZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFRoaXMgY2xh
c3MgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBjb2RlIHRoZSBLSlNfREVGSU5FX1BST1RP
VFlQRV9XSVRIX1BST1RPVFlQRQorICAgIC8vIGFuZCBLSlNfSU1QTEVNRU5UX1BST1RPVFlQRSBt
YWNyb3MgcHJvZHVjZSAtIHRoZSBpZGVhIGlzIHRoYXQgY2xhc3NlcyBsaWtlIEpTRXZlbnRUYXJn
ZXROb2RlCisgICAgLy8gYW5kIEpTRXZlbnRUYXJnZXRTVkdFbGVtZW50SW5zdGFuY2UgY2FuIHNo
YXJlIGEgc2luZ2xlIHByb3RvdHlwZSBqdXN0IGRpZmZlcmluZyBpbiB0aGUKKyAgICAvLyBuYW1p
bmcgIkV2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZSIgdnMgIkV2ZW50VGFyZ2V0U1ZHRWxlbWVudElu
c3RhbmNlUHJvdG90eXBlIi4gQWJvdmUgbWVudGlvbmVkCisgICAgLy8gbWFjcm9zIGZvcmNlIHRo
ZSBleGlzdGFuY2Ugb2Ygc2V2ZXJhbCBwcm90b3R5cGUgdGFibGVzIGZvciBlYWNoIG9mIHRoZSBj
bGFzc2VzIC0gYXZvaWQgdGhhdC4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBKU0V2ZW50VGFyZ2V0UHJv
dG90eXBlUGFyZW50LCBjbGFzcyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlSW5mb3JtYXRpb24+Cisg
ICAgY2xhc3MgSlNFdmVudFRhcmdldFByb3RvdHlwZSA6IHB1YmxpYyBLSlM6OkpTT2JqZWN0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRUYXJnZXRQcm90b3R5cGUoS0pTOjpFeGVjU3Rh
dGUqIGV4ZWMpCisgICAgICAgICAgICA6IEtKUzo6SlNPYmplY3QoSlNFdmVudFRhcmdldFByb3Rv
dHlwZVBhcmVudDo6c2VsZihleGVjKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIEtKUzo6SlNPYmplY3QqIHNlbGYoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN0YXRpYyBLSlM6OklkZW50aWZpZXIqIHByb3RvdHlwZU5hbWUgPSBu
ZXcgS0pTOjpJZGVudGlmaWVyKEpTRXZlbnRUYXJnZXRQcm90b3R5cGVJbmZvcm1hdGlvbjo6cHJv
dG90eXBlQ2xhc3NOYW1lKCkpOworCisgICAgICAgICAgICBLSlM6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBp
ZiAoS0pTOjpKU1ZhbHVlKiBvYmplY3RWYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0RGlyZWN0KCpw
cm90b3R5cGVOYW1lKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChvYmplY3RWYWx1ZS0+aXNP
YmplY3QoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6SlNPYmpl
Y3QqPihvYmplY3RWYWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEtKUzo6SlNP
YmplY3QqIG5ld09iamVjdCA9IG5ldyBKU0V2ZW50VGFyZ2V0UHJvdG90eXBlPEpTRXZlbnRUYXJn
ZXRQcm90b3R5cGVQYXJlbnQsIEpTRXZlbnRUYXJnZXRQcm90b3R5cGVJbmZvcm1hdGlvbj4oZXhl
Yyk7CisgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnB1dChleGVjLCAqcHJvdG90eXBlTmFtZSwg
bmV3T2JqZWN0LCBLSlM6OkludGVybmFsIHwgS0pTOjpEb250RW51bSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3T2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBLSlM6OlByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEtKUzo6Z2V0U3RhdGljRnVuY3Rpb25TbG90PEtKUzo6SlNPYmplY3Q+KGV4ZWMsICZL
SlM6OkpTRXZlbnRUYXJnZXRQcm90b3R5cGVUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBLSlM6
OkNsYXNzSW5mbyBzX2NsYXNzSW5mbyA9IHsgSlNFdmVudFRhcmdldFByb3RvdHlwZUluZm9ybWF0
aW9uOjpwcm90b3R5cGVDbGFzc05hbWUoKSwgMCwgJktKUzo6SlNFdmVudFRhcmdldFByb3RvdHlw
ZVRhYmxlIH07CisgICAgICAgICAgICByZXR1cm4gJnNfY2xhc3NJbmZvOworICAgICAgICB9Cisg
ICAgfTsKKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEpTRXZlbnRUYXJn
ZXRCYXNlX2gKSW5kZXg6IGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDI4NzU1
KQorKysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDY5ICsyNyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNFdmVudFRh
cmdldE5vZGUuaCIKIAotI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0j
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Tm9kZS5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSlNFdmVudC5oIgotI2luY2x1ZGUgIk5vZGUuaCIK
LSNpbmNsdWRlICJranNfZXZlbnRzLmgiCi0jaW5jbHVkZSAia2pzX3dpbmRvdy5oIgotCi0jaW5j
bHVkZSAiSlNFdmVudFRhcmdldE5vZGUubHV0LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEtKUzsKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCi0vKiBT
b3VyY2UgZm9yIEpTRXZlbnRUYXJnZXROb2RlVGFibGUKLUBiZWdpbiBKU0V2ZW50VGFyZ2V0Tm9k
ZVRhYmxlIDUwCi1vbmFib3J0ICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbkFi
b3J0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uYmx1ciAgICAgICAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldE5vZGU6Ok9uQmx1ciAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25jaGFu
Z2UgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25DaGFuZ2UgICAgICAgICAgICAg
ICBEb250RGVsZXRlCi1vbmNsaWNrICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpP
bkNsaWNrICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uY29udGV4dG1lbnUgV2ViQ29yZTo6
SlNFdmVudFRhcmdldE5vZGU6Ok9uQ29udGV4dE1lbnUgICAgICAgICAgRG9udERlbGV0ZQotb25k
YmxjbGljayAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EYmxDbGljayAgICAgICAg
ICAgICBEb250RGVsZXRlCi1vbmJlZm9yZWN1dCAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2Rl
OjpPbkJlZm9yZUN1dCAgICAgICAgICAgIERvbnREZWxldGUKLW9uY3V0ICAgICAgICAgV2ViQ29y
ZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQ3V0ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQot
b25iZWZvcmVjb3B5ICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25CZWZvcmVDb3B5ICAg
ICAgICAgICBEb250RGVsZXRlCi1vbmNvcHkgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXRO
b2RlOjpPbkNvcHkgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uYmVmb3JlcGFzdGUgV2Vi
Q29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uQmVmb3JlUGFzdGUgICAgICAgICAgRG9udERlbGV0
ZQotb25wYXN0ZSAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25QYXN0ZSAgICAg
ICAgICAgICAgICBEb250RGVsZXRlCi1vbmRyYWcgICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJn
ZXROb2RlOjpPbkRyYWcgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uZHJhZ2VuZCAgICAg
V2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRHJhZ0VuZCAgICAgICAgICAgICAgRG9udERl
bGV0ZQotb25kcmFnZW50ZXIgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFnRW50
ZXIgICAgICAgICAgICBEb250RGVsZXRlCi1vbmRyYWdsZWF2ZSAgIFdlYkNvcmU6OkpTRXZlbnRU
YXJnZXROb2RlOjpPbkRyYWdMZWF2ZSAgICAgICAgICAgIERvbnREZWxldGUKLW9uZHJhZ292ZXIg
ICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRHJhZ092ZXIgICAgICAgICAgICAgRG9u
dERlbGV0ZQotb25kcmFnc3RhcnQgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25EcmFn
U3RhcnQgICAgICAgICAgICBEb250RGVsZXRlCi1vbmRyb3AgICAgICAgIFdlYkNvcmU6OkpTRXZl
bnRUYXJnZXROb2RlOjpPbkRyb3AgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9uZXJyb3Ig
ICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uRXJyb3IgICAgICAgICAgICAgICAg
RG9udERlbGV0ZQotb25mb2N1cyAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6T25G
b2N1cyAgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmlucHV0ICAgICAgIFdlYkNvcmU6OkpT
RXZlbnRUYXJnZXROb2RlOjpPbklucHV0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9ua2V5
ZG93biAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uS2V5RG93biAgICAgICAgICAg
ICAgRG9udERlbGV0ZQotb25rZXlwcmVzcyAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
T25LZXlQcmVzcyAgICAgICAgICAgICBEb250RGVsZXRlCi1vbmtleXVwICAgICAgIFdlYkNvcmU6
OkpTRXZlbnRUYXJnZXROb2RlOjpPbktleVVwICAgICAgICAgICAgICAgIERvbnREZWxldGUKLW9u
bG9hZCAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTG9hZCAgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZQotb25tb3VzZWRvd24gICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9k
ZTo6T25Nb3VzZURvd24gICAgICAgICAgICBEb250RGVsZXRlCi1vbm1vdXNlbW92ZSAgIFdlYkNv
cmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbk1vdXNlTW92ZSAgICAgICAgICAgIERvbnREZWxldGUK
LW9ubW91c2VvdXQgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTW91c2VPdXQgICAg
ICAgICAgICAgRG9udERlbGV0ZQotb25tb3VzZW92ZXIgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
Tm9kZTo6T25Nb3VzZU92ZXIgICAgICAgICAgICBEb250RGVsZXRlCi1vbm1vdXNldXAgICAgIFdl
YkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPbk1vdXNlVXAgICAgICAgICAgICAgIERvbnREZWxl
dGUKLW9ubW91c2V3aGVlbCAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uTW91c2VXaGVl
bCAgICAgICAgICAgRG9udERlbGV0ZQotb25yZXNldCAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFy
Z2V0Tm9kZTo6T25SZXNldCAgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnJlc2l6ZSAgICAg
IFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblJlc2l6ZSAgICAgICAgICAgICAgIERvbnRE
ZWxldGUKLW9uc2Nyb2xsICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uU2Nyb2xs
ICAgICAgICAgICAgICAgRG9udERlbGV0ZQotb25zZWFyY2ggICAgICBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0Tm9kZTo6T25TZWFyY2ggICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnNlbGVjdCAg
ICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblNlbGVjdCAgICAgICAgICAgICAgIERv
bnREZWxldGUKLW9uc2VsZWN0c3RhcnQgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6Ok9uU2Vs
ZWN0U3RhcnQgICAgICAgICAgRG9udERlbGV0ZQotb25zdWJtaXQgICAgICBXZWJDb3JlOjpKU0V2
ZW50VGFyZ2V0Tm9kZTo6T25TdWJtaXQgICAgICAgICAgICAgICBEb250RGVsZXRlCi1vbnVubG9h
ZCAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpPblVubG9hZCAgICAgICAgICAgICAg
IERvbnREZWxldGUKLUBlbmQKLSovCiAKIEpTRXZlbnRUYXJnZXROb2RlOjpKU0V2ZW50VGFyZ2V0
Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG4pCiAgICAgOiBKU05vZGUoZXhlYywgbikKQEAg
LTk4LDIyOSArMzksMjUgQEAgSlNFdmVudFRhcmdldE5vZGU6OkpTRXZlbnRUYXJnZXROb2RlKEV4
ZQogCiBib29sIEpTRXZlbnRUYXJnZXROb2RlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTRXZlbnRUYXJnZXROb2RlLCBK
U05vZGU+KGV4ZWMsICZKU0V2ZW50VGFyZ2V0Tm9kZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworICAgIHJldHVybiBtX2Jhc2UuZ2V0T3duUHJvcGVydHlTbG90PEpTTm9kZT4odGhp
cywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogSlNWYWx1ZSogSlNFdmVudFRhcmdl
dE5vZGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIE9uQWJvcnQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoYWJvcnRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25CbHVy
OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGJsdXJFdmVudCk7Ci0gICAgICAgIGNh
c2UgT25DaGFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoY2hhbmdlRXZlbnQp
OwotICAgICAgICBjYXNlIE9uQ2xpY2s6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIo
Y2xpY2tFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Db250ZXh0TWVudToKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihjb250ZXh0bWVudUV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRibENs
aWNrOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRibGNsaWNrRXZlbnQpOwotICAg
ICAgICBjYXNlIE9uRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXJyb3JF
dmVudCk7Ci0gICAgICAgIGNhc2UgT25Gb2N1czoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0
ZW5lcihmb2N1c0V2ZW50KTsKLSAgICAgICAgY2FzZSBPbklucHV0OgotICAgICAgICAgICAgcmV0
dXJuIGdldExpc3RlbmVyKGlucHV0RXZlbnQpOwotICAgICAgICBjYXNlIE9uS2V5RG93bjoKLSAg
ICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihrZXlkb3duRXZlbnQpOwotICAgICAgICBjYXNl
IE9uS2V5UHJlc3M6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoa2V5cHJlc3NFdmVu
dCk7Ci0gICAgICAgIGNhc2UgT25LZXlVcDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5l
cihrZXl1cEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkxvYWQ6Ci0gICAgICAgICAgICByZXR1cm4g
Z2V0TGlzdGVuZXIobG9hZEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbk1vdXNlRG93bjoKLSAgICAg
ICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihtb3VzZWRvd25FdmVudCk7Ci0gICAgICAgIGNhc2Ug
T25Nb3VzZU1vdmU6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIobW91c2Vtb3ZlRXZl
bnQpOwotICAgICAgICBjYXNlIE9uTW91c2VPdXQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlz
dGVuZXIobW91c2VvdXRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Nb3VzZU92ZXI6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIobW91c2VvdmVyRXZlbnQpOwotICAgICAgICBjYXNlIE9u
TW91c2VVcDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihtb3VzZXVwRXZlbnQpOyAg
ICAgIAotICAgICAgICBjYXNlIE9uTW91c2VXaGVlbDoKLSAgICAgICAgICAgIHJldHVybiBnZXRM
aXN0ZW5lcihtb3VzZXdoZWVsRXZlbnQpOyAgICAgIAotICAgICAgICBjYXNlIE9uQmVmb3JlQ3V0
OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGJlZm9yZWN1dEV2ZW50KTsKLSAgICAg
ICAgY2FzZSBPbkN1dDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihjdXRFdmVudCk7
Ci0gICAgICAgIGNhc2UgT25CZWZvcmVDb3B5OgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKGJlZm9yZWNvcHlFdmVudCk7Ci0gICAgICAgIGNhc2UgT25Db3B5OgotICAgICAgICAgICAg
cmV0dXJuIGdldExpc3RlbmVyKGNvcHlFdmVudCk7Ci0gICAgICAgIGNhc2UgT25CZWZvcmVQYXN0
ZToKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihiZWZvcmVwYXN0ZUV2ZW50KTsKLSAg
ICAgICAgY2FzZSBPblBhc3RlOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKHBhc3Rl
RXZlbnQpOwotICAgICAgICBjYXNlIE9uRHJhZ0VudGVyOgotICAgICAgICAgICAgcmV0dXJuIGdl
dExpc3RlbmVyKGRyYWdlbnRlckV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyYWdPdmVyOgotICAg
ICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdvdmVyRXZlbnQpOwotICAgICAgICBjYXNl
IE9uRHJhZ0xlYXZlOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdsZWF2ZUV2
ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyb3A6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoZHJvcEV2ZW50KTsKLSAgICAgICAgY2FzZSBPbkRyYWdTdGFydDoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihkcmFnc3RhcnRFdmVudCk7Ci0gICAgICAgIGNhc2UgT25EcmFnOgot
ICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdFdmVudCk7Ci0gICAgICAgIGNhc2Ug
T25EcmFnRW5kOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGRyYWdlbmRFdmVudCk7
Ci0gICAgICAgIGNhc2UgT25SZXNldDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihy
ZXNldEV2ZW50KTsKLSAgICAgICAgY2FzZSBPblJlc2l6ZToKLSAgICAgICAgICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihyZXNpemVFdmVudCk7Ci0gICAgICAgIGNhc2UgT25TY3JvbGw6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoc2Nyb2xsRXZlbnQpOwotICAgICAgICBjYXNlIE9uU2Vh
cmNoOgotICAgICAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKHNlYXJjaEV2ZW50KTsKLSAgICAg
ICAgY2FzZSBPblNlbGVjdDoKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihzZWxlY3RF
dmVudCk7Ci0gICAgICAgIGNhc2UgT25TZWxlY3RTdGFydDoKLSAgICAgICAgICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihzZWxlY3RzdGFydEV2ZW50KTsKLSAgICAgICAgY2FzZSBPblN1Ym1pdDoKLSAg
ICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihzdWJtaXRFdmVudCk7Ci0gICAgICAgIGNhc2Ug
T25VbmxvYWQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIodW5sb2FkRXZlbnQpOwot
ICAgIH0KLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBtX2Jhc2UuZ2V0
VmFsdWVQcm9wZXJ0eSh0aGlzLCBleGVjLCB0b2tlbik7CiB9CiAKIHZvaWQgSlNFdmVudFRhcmdl
dE5vZGU6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKQogewotICAgIGxvb2t1cFB1dDxKU0V2ZW50VGFy
Z2V0Tm9kZSwgSlNOb2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSlNFdmVu
dFRhcmdldE5vZGVUYWJsZSwgdGhpcyk7CisgICAgbV9iYXNlLnB1dDxKU05vZGU+KHRoaXMsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXRO
b2RlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuLCBKU1ZhbHVl
KiB2YWx1ZSwgaW50IC8qYXR0ciovKQordm9pZCBKU0V2ZW50VGFyZ2V0Tm9kZTo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSogdmFsdWUsIGludCBh
dHRyKQogewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBPbkFib3J0OgotICAg
ICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYWJvcnRFdmVudCwgdmFsdWUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25CbHVyOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywgYmx1ckV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBPbkNoYW5nZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGNoYW5nZUV2ZW50LCB2
YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbkNsaWNrOgotICAgICAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYywgY2xpY2tFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgT25Db250ZXh0TWVudToKLSAgICAgICAgICAgIHNldExpc3Rl
bmVyKGV4ZWMsIGNvbnRleHRtZW51RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE9uRGJsQ2xpY2s6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBk
YmxjbGlja0V2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
bkVycm9yOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZXJyb3JFdmVudCwgdmFsdWUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Gb2N1czoKLSAgICAgICAgICAg
IHNldExpc3RlbmVyKGV4ZWMsIGZvY3VzRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE9uSW5wdXQ6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBp
bnB1dEV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbktl
eURvd246Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBrZXlkb3duRXZlbnQsIHZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uS2V5UHJlc3M6Ci0gICAgICAg
ICAgICBzZXRMaXN0ZW5lcihleGVjLCBrZXlwcmVzc0V2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBPbktleVVwOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywga2V5dXBFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgT25Mb2FkOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgbG9hZEV2ZW50LCB2YWx1
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlRG93bjoKLSAgICAg
ICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIG1vdXNlZG93bkV2ZW50LCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlTW92ZToKLSAgICAgICAgICAgIHNldExp
c3RlbmVyKGV4ZWMsIG1vdXNlbW92ZUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBPbk1vdXNlT3V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywg
bW91c2VvdXRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25Nb3VzZU92ZXI6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBtb3VzZW92ZXJFdmVu
dCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Nb3VzZVVwOgot
ICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgbW91c2V1cEV2ZW50LCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPbk1vdXNlV2hlZWw6Ci0gICAgICAgICAgICBz
ZXRMaXN0ZW5lcihleGVjLCBtb3VzZXdoZWVsRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE9uQmVmb3JlQ3V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIo
ZXhlYywgYmVmb3JlY3V0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE9uQ3V0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgY3V0RXZlbnQsIHZh
bHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uQmVmb3JlQ29weToKLSAg
ICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGJlZm9yZWNvcHlFdmVudCwgdmFsdWUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25Db3B5OgotICAgICAgICAgICAgc2V0TGlz
dGVuZXIoZXhlYywgY29weUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBPbkJlZm9yZVBhc3RlOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgYmVm
b3JlcGFzdGVFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25QYXN0ZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHBhc3RlRXZlbnQsIHZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZ0VudGVyOgotICAgICAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZHJhZ2VudGVyRXZlbnQsIHZhbHVlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZ092ZXI6Ci0gICAgICAgICAgICBzZXRMaXN0
ZW5lcihleGVjLCBkcmFnb3ZlckV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBPbkRyYWdMZWF2ZToKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIGRy
YWdsZWF2ZUV2ZW50LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBP
bkRyb3A6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBkcm9wRXZlbnQsIHZhbHVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZ1N0YXJ0OgotICAgICAgICAg
ICAgc2V0TGlzdGVuZXIoZXhlYywgZHJhZ3N0YXJ0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE9uRHJhZzoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4
ZWMsIGRyYWdFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
T25EcmFnRW5kOgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgZHJhZ2VuZEV2ZW50LCB2
YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPblJlc2V0OgotICAgICAg
ICAgICAgc2V0TGlzdGVuZXIoZXhlYywgcmVzZXRFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgT25SZXNpemU6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihl
eGVjLCByZXNpemVFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgT25TY3JvbGw6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBzY3JvbGxFdmVudCwg
dmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25TZWFyY2g6Ci0gICAg
ICAgICAgICBzZXRMaXN0ZW5lcihleGVjLCBzZWFyY2hFdmVudCwgdmFsdWUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT25TZWxlY3Q6Ci0gICAgICAgICAgICBzZXRMaXN0ZW5l
cihleGVjLCBzZWxlY3RFdmVudCwgdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgT25TZWxlY3RTdGFydDoKLSAgICAgICAgICAgIHNldExpc3RlbmVyKGV4ZWMsIHNlbGVj
dHN0YXJ0RXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9u
U3VibWl0OgotICAgICAgICAgICAgc2V0TGlzdGVuZXIoZXhlYywgc3VibWl0RXZlbnQsIHZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9uVW5sb2FkOgotICAgICAgICAg
ICAgc2V0TGlzdGVuZXIoZXhlYywgdW5sb2FkRXZlbnQsIHZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBtX2Jhc2UucHV0VmFsdWVQcm9wZXJ0eSh0aGlzLCBleGVjLCB0b2tl
biwgdmFsdWUsIGF0dHIpOwogfQogCi12b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpzZXRMaXN0ZW5l
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBKU1ZhbHVl
KiBmdW5jKSBjb25zdAordm9pZCBKU0V2ZW50VGFyZ2V0Tm9kZTo6c2V0TGlzdGVuZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgSlNWYWx1ZSogZnVuYykg
Y29uc3QKIHsKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmRvY3VtZW50KCktPmZyYW1lKCk7
CiAgICAgaWYgKGZyYW1lKQpAQCAtMzQxLDY2ICs3OCwxMSBAQCB2b2lkIEpTRXZlbnRUYXJnZXRO
b2RlOjpwdXNoRXZlbnRIYW5kbGVyCiB7CiB9CiAKLS8qCi1AYmVnaW4gSlNFdmVudFRhcmdldE5v
ZGVQcm90b3R5cGVUYWJsZSA1Ci0jIGZyb20gdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotYWRk
RXZlbnRMaXN0ZW5lciAgICAgICAgJldlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBl
RnVuY3Rpb25BZGRFdmVudExpc3RlbmVyOjpjcmVhdGUgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAz
Ci1yZW1vdmVFdmVudExpc3RlbmVyICAgICAmV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGVQcm90
b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXI6OmNyZWF0ZSBEb250RGVsZXRlfEZ1bmN0
aW9uIDMKLWRpc3BhdGNoRXZlbnQgICAgICAgICAgICZXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9k
ZVByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudDo6Y3JlYXRlICAgICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMQotQGVuZAotKi8KLQotS0pTX0lNUExFTUVOVF9QUk9UT1RZUEUoIkV2ZW50VGFy
Z2V0Tm9kZSIsIEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlKQotCi1KU1ZhbHVlKiBKU0V2ZW50
VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcjo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykK
LXsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZKU0V2ZW50VGFyZ2V0Tm9kZTo6aW5mbykp
Ci0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgRE9NRXhj
ZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gICAgSlNFdmVudFRhcmdldE5vZGUq
IGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTRXZlbnRUYXJnZXROb2RlKj4odGhpc09iaik7Ci0gICAg
RXZlbnRUYXJnZXROb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4oanNO
b2RlLT5pbXBsKCkpOwotCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICBKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gS0pTOjpXaW5kb3c6OnJldHJpZXZlV2luZG93
KGZyYW1lKS0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGFyZ3NbMV0pOwotICAgIGlmIChs
aXN0ZW5lcikKLSAgICAgICAgbm9kZS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKSwgbGlzdGVuZXIsYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVG
dW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXI6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlz
T2JqLT5pbmhlcml0cygmSlNFdmVudFRhcmdldE5vZGU6OmluZm8pKQotICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3Ig
ZXhjZXB0aW9uKGV4ZWMpOwotICAgIEpTRXZlbnRUYXJnZXROb2RlKiBqc05vZGUgPSBzdGF0aWNf
Y2FzdDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KHRoaXNPYmopOwotICAgIEV2ZW50VGFyZ2V0Tm9kZSog
bm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGpzTm9kZS0+aW1wbCgpKTsKLQot
ICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgSlNFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IEtKUzo6V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhmcmFtZSktPmZpbmRKU0V2
ZW50TGlzdGVuZXIoYXJnc1sxXSk7Ci0gICAgaWYgKGxpc3RlbmVyKSAKLSAgICAgICAgbm9kZS0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsYXJn
c1syXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQot
SlNWYWx1ZSogSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQ6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0
IExpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNFdmVudFRhcmdl
dE5vZGU6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwotICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICAgIEpTRXZl
bnRUYXJnZXROb2RlKiBqc05vZGUgPSBzdGF0aWNfY2FzdDxKU0V2ZW50VGFyZ2V0Tm9kZSo+KHRo
aXNPYmopOwotICAgIEV2ZW50VGFyZ2V0Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PEV2ZW50VGFy
Z2V0Tm9kZSo+KGpzTm9kZS0+aW1wbCgpKTsKLSAgICAKLSAgICByZXR1cm4ganNCb29sZWFuKG5v
ZGUtPmRpc3BhdGNoRXZlbnQodG9FdmVudChhcmdzWzBdKSwgZXhjZXB0aW9uKSk7Ci19Ci0KIEV2
ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoSlNWYWx1ZSogdmFsKQogewogICAgIGlm
ICghdmFsIHx8ICF2YWwtPmlzT2JqZWN0KCZKU0V2ZW50VGFyZ2V0Tm9kZTo6aW5mbykpCiAgICAg
ICAgIHJldHVybiAwOworCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+
KHN0YXRpY19jYXN0PEpTRXZlbnRUYXJnZXROb2RlKj4odmFsKS0+aW1wbCgpKTsKIH0KIApJbmRl
eDogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAyODc1NSkKKysrIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjgsNyBAQAogI2Rl
ZmluZSBKU0V2ZW50VGFyZ2V0Tm9kZV9oCiAKICNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNsdWRl
ICJKU0V2ZW50VGFyZ2V0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDcg
KzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNFdmVudFRhcmdldE5v
ZGUgOiBwdWJsaWMgSlNOb2RlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTRXZlbnRUYXJnZXRO
b2RlKEtKUzo6RXhlY1N0YXRlKiwgTm9kZSogbik7CisgICAgICAgIEpTRXZlbnRUYXJnZXROb2Rl
KEtKUzo6RXhlY1N0YXRlKiwgTm9kZSopOwogCiAgICAgICAgIHZvaWQgc2V0TGlzdGVuZXIoS0pT
OjpFeGVjU3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgS0pTOjpKU1ZhbHVl
KiBmdW5jKSBjb25zdDsKICAgICAgICAgS0pTOjpKU1ZhbHVlKiBnZXRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3Q7CkBAIC00NiwyOCArNDgsMjQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlKiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyJiwgS0pTOjpKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIpOwog
ICAgICAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4s
IEtKUzo6SlNWYWx1ZSogdmFsdWUsIGludCBhdHRyKTsKIAotICAgICAgICBlbnVtIHsgIAotICAg
ICAgICAgICAgQWRkRXZlbnRMaXN0ZW5lciwgUmVtb3ZlRXZlbnRMaXN0ZW5lciwgRGlzcGF0Y2hF
dmVudCwKLSAgICAgICAgICAgIE9uQWJvcnQsIE9uQmx1ciwgT25DaGFuZ2UsIE9uQ2xpY2ssIE9u
Q29udGV4dE1lbnUsIE9uRGJsQ2xpY2ssIE9uRXJyb3IsCi0gICAgICAgICAgICBPbkRyYWdFbnRl
ciwgT25EcmFnT3ZlciwgT25EcmFnTGVhdmUsIE9uRHJvcCwgT25EcmFnU3RhcnQsIE9uRHJhZywg
T25EcmFnRW5kLAotICAgICAgICAgICAgT25CZWZvcmVDdXQsIE9uQ3V0LCBPbkJlZm9yZUNvcHks
IE9uQ29weSwgT25CZWZvcmVQYXN0ZSwgT25QYXN0ZSwgT25TZWxlY3RTdGFydCwKLSAgICAgICAg
ICAgIE9uRm9jdXMsIE9uSW5wdXQsIE9uS2V5RG93biwgT25LZXlQcmVzcywgT25LZXlVcCwgT25M
b2FkLCBPbk1vdXNlRG93biwKLSAgICAgICAgICAgIE9uTW91c2VNb3ZlLCBPbk1vdXNlT3V0LCBP
bk1vdXNlT3ZlciwgT25Nb3VzZVVwLCBPbk1vdXNlV2hlZWwsIE9uUmVzZXQsCi0gICAgICAgICAg
ICBPblJlc2l6ZSwgT25TY3JvbGwsIE9uU2VhcmNoLCBPblNlbGVjdCwgT25TdWJtaXQsIE9uVW5s
b2FkCi0gICAgICAgIH07CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNFdmVudFRhcmdldEJhc2U8
SlNFdmVudFRhcmdldE5vZGU+IG1fYmFzZTsKICAgICB9OwogCi0gICAgRXZlbnRUYXJnZXROb2Rl
KiB0b0V2ZW50VGFyZ2V0Tm9kZShLSlM6OkpTVmFsdWUqKTsKLQotICAgIEtKU19ERUZJTkVfUFJP
VE9UWVBFX1dJVEhfUFJPVE9UWVBFKEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlLCBKU05vZGVQ
cm90b3R5cGUpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfQ0xBU1MobWFjcm8pIFwKLSAgICBtYWNybyhK
U0V2ZW50VGFyZ2V0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcikgXAotICAg
IG1hY3JvKEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3Rl
bmVyKSBcCi0gICAgbWFjcm8oSlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlvbkRpc3Bh
dGNoRXZlbnQpIFwKKyAgICBzdHJ1Y3QgSlNFdmVudFRhcmdldFByb3RvdHlwZUluZm9ybWF0aW9u
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHByb3RvdHlwZUNsYXNzTmFtZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAiRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlIjsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm90b3R5cGVJZGVudGlmaWVy
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICJbW0V2ZW50VGFyZ2V0Tm9kZS5wcm90
b3R5cGVdXSI7CisgICAgICAgIH0KKyAgICB9OwogCi1GT1JfRUFDSF9DTEFTUyhLSlNfSU1QTEVN
RU5UX1BST1RPVFlQRV9GVU5DVElPTl9XSVRIX0NSRUFURSkKLSN1bmRlZiBGT1JfRUFDSF9DTEFT
UworICAgIHR5cGVkZWYgSlNFdmVudFRhcmdldFByb3RvdHlwZTxKU05vZGVQcm90b3R5cGUsIEpT
RXZlbnRUYXJnZXRQcm90b3R5cGVJbmZvcm1hdGlvbj4gSlNFdmVudFRhcmdldE5vZGVQcm90b3R5
cGU7CisgICAgRXZlbnRUYXJnZXROb2RlKiB0b0V2ZW50VGFyZ2V0Tm9kZShLSlM6OkpTVmFsdWUq
KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBkb20vRXZlbnRUYXJnZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI4NzU1KQorKysg
ZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDEyIEBACiAvKgog
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgog
ICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3
ZWJraXQub3JnKQorICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4
ICszNCwyNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CiAKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7CisKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgaW50IGdFdmVudERpc3Bh
dGNoRm9yYmlkZGVuID0gMDsKKyNlbmRpZgorCiBFdmVudFRhcmdldDo6fkV2ZW50VGFyZ2V0KCkK
IHsKIH0KQEAgLTUyLDQgKzc0LDI2MiBAQCBTVkdFbGVtZW50SW5zdGFuY2UqIEV2ZW50VGFyZ2V0
Ojp0b1NWR0VsCiB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGFkZExpc3RlbmVyVHlw
ZVRvRG9jdW1lbnRJZk5lZWRlZChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIERvY3VtZW50OjpMaXN0ZW5lclR5cGUgdHlwZSA9IHN0YXRp
Y19jYXN0PERvY3VtZW50OjpMaXN0ZW5lclR5cGU+KDApOworCisgICAgaWYgKGV2ZW50VHlwZSA9
PSBET01TdWJ0cmVlTW9kaWZpZWRFdmVudCkKKyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01T
VUJUUkVFTU9ESUZJRURfTElTVEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5v
ZGVJbnNlcnRlZEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRF
RF9MSVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRFdmVu
dCkKKyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUjsKKyAg
ICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCkK
KyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01OT0RFUkVNT1ZFREZST01ET0NVTUVOVF9MSVNU
RU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZUluc2VydGVkSW50b0RvY3Vt
ZW50RXZlbnQpCisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVESU5UT0RP
Q1VNRU5UX0xJU1RFTkVSOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01BdHRyTW9kaWZp
ZWRFdmVudCkKKyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01BVFRSTU9ESUZJRURfTElTVEVO
RVI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2
ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9M
SVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gb3ZlcmZsb3djaGFuZ2VkRXZlbnQp
CisgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6T1ZFUkZMT1dDSEFOR0VEX0xJU1RFTkVSOworCisg
ICAgaWYgKHR5cGUpCisgICAgICAgIGRvY3VtZW50LT5hZGRMaXN0ZW5lclR5cGUodHlwZSk7Cit9
CisKK3ZvaWQgRXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXROb2RlKiBy
ZWZlcmVuY2VOb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIEFTU0VSVChy
ZWZlcmVuY2VOb2RlKTsKKyAgICBpZiAoIXJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPmF0dGFj
aGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGFkZExpc3RlbmVyVHlwZVRvRG9jdW1lbnRJ
Zk5lZWRlZChldmVudFR5cGUsIHJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCkpOworCisgICAgaWYg
KCFyZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMpCisgICAgICAgIHJlZmVyZW5jZU5vZGUt
Pm1fcmVnZExpc3RlbmVycyA9IG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q7CisKKyAg
ICAvLyBSZW1vdmUgZXhpc3RpbmcgaWRlbnRpY2FsIGVyIHNldCB3aXRoIGlkZW50aWNhbCBhcmd1
bWVudHMuCisgICAgLy8gVGhlIERPTTIgc3BlYyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0YW5j
ZXMgYXJlIGRpc2NhcmRlZCIgaW4gdGhpcyBjYXNlLgorICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIo
cmVmZXJlbmNlTm9kZSwgZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7CisK
KyAgICAvLyBhZGRpbmcgdGhlIGZpcnN0IG9uZQorICAgIGlmIChyZWZlcmVuY2VOb2RlLT5tX3Jl
Z2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAmJiAhcmVmZXJlbmNlTm9kZS0+aW5Eb2N1bWVudCgpKQor
ICAgICAgICByZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT5yZWdpc3RlckRpc2Nvbm5lY3RlZE5v
ZGVXaXRoRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlTm9kZSk7CisKKyAgICByZWZlcmVuY2VOb2Rl
LT5tX3JlZ2RMaXN0ZW5lcnMtPmFwcGVuZChuZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoZXZl
bnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSkpOworfQorCit2b2lkIEV2ZW50VGFy
Z2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJlbmNlTm9kZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpCit7CisgICAgQVNTRVJUKHJlZmVyZW5jZU5vZGUpOworICAgIGlmICgh
cmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciBybChldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJl
KTsKKworICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0gcmVm
ZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5lbmQoKTsKKyAgICBmb3IgKFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgaXQgPSByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0
ZW5lcnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgaWYgKCooKml0KS5n
ZXQoKSA9PSBybCkgeworICAgICAgICAgICAgKCppdCktPnNldFJlbW92ZWQodHJ1ZSk7CisgICAg
ICAgICAgICBpdCA9IHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+cmVtb3ZlKGl0KTsK
KworICAgICAgICAgICAgLy8gcmVtb3ZlZCBsYXN0CisgICAgICAgICAgICBpZiAocmVmZXJlbmNl
Tm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYgIXJlZmVyZW5jZU5vZGUtPmluRG9j
dW1lbnQoKSkKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLT5kb2N1bWVudCgpLT51bnJl
Z2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyhyZWZlcmVuY2VOb2RlKTsK
KworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEV2ZW50
VGFyZ2V0OjpkaXNwYXRjaEdlbmVyaWNFdmVudChFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5v
ZGUsIFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCkK
K3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2dChlKTsKKworICAgIEFTU0VSVCghZXZlbnREaXNwYXRj
aEZvcmJpZGRlbigpKTsKKyAgICBBU1NFUlQoZXZ0LT50YXJnZXQoKSk7CisgICAgQVNTRVJUKCFl
dnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29kZSBjb3VsZCBjcmVhdGUgYW4g
ZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lCisKKyAgICAvLyB3b3JrIG91dCB3aGF0IG5vZGVzIHRv
IHNlbmQgZXZlbnQgdG8KKyAgICBEZXByZWNhdGVkUHRyTGlzdDxOb2RlPiBub2RlQ2hhaW47CisK
KyAgICBpZiAocmVmZXJlbmNlTm9kZS0+aW5Eb2N1bWVudCgpKSB7CisgICAgICAgIGZvciAoTm9k
ZSogbiA9IHJlZmVyZW5jZU5vZGU7IG47IG4gPSBuLT5ldmVudFBhcmVudE5vZGUoKSkgeworICAg
ICAgICAgICAgbi0+cmVmKCk7CisgICAgICAgICAgICBub2RlQ2hhaW4ucHJlcGVuZChuKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGlmIG5vZGUgaXMgbm90IGluIHRoZSBk
b2N1bWVudCBqdXN0IHNlbmQgZXZlbnQgdG8gaXRzZWxmIAorICAgICAgICByZWZlcmVuY2VOb2Rl
LT5yZWYoKTsKKyAgICAgICAgbm9kZUNoYWluLnByZXBlbmQocmVmZXJlbmNlTm9kZSk7CisgICAg
fQorCisgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxOb2RlPiBpdChub2RlQ2hhaW4pOwor
CisgICAgLy8gQmVmb3JlIHdlIGJlZ2luIGRpc3BhdGNoaW5nIGV2ZW50cywgZ2l2ZSB0aGUgdGFy
Z2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yCisgICAgLy8gdG8gdGhlIERP
TSBldmVudCBoYW5kbGVycyBnZXR0aW5nIGEgY3JhY2suCisgICAgdm9pZCogZGF0YSA9IHByZURp
c3BhdGNoRXZlbnRIYW5kbGVyKGV2dC5nZXQoKSk7CisKKyAgICAvLyB0cmlnZ2VyIGFueSBjYXB0
dXJpbmcgZXZlbnQgaGFuZGxlcnMgb24gb3VyIHdheSBkb3duCisgICAgZXZ0LT5zZXRFdmVudFBo
YXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOworICAgIGl0LnRvRmlyc3QoKTsKKworICAgIC8v
IEhhbmRsZSB3aW5kb3cgZXZlbnRzIGZvciBjYXB0dXJlIHBoYXNlLCBleGNlcHQgbG9hZCBldmVu
dHMsIHRoaXMgcXVpcmsgaXMgbmVlZGVkCisgICAgLy8gYmVjYXVzZSBNb3ppbGxhIHVzZWQgdG8g
bmV2ZXIgcHJvcGFnYXRlIGxvYWQgZXZlbnRzIHRvIHRoZSB3aW5kb3cgb2JqZWN0CisgICAgaWYg
KGV2dC0+dHlwZSgpICE9IGxvYWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9jdW1lbnROb2Rl
KCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCisgICAgICAgIHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oaXQuY3VycmVudCgpKS0+aGFuZGxlV2luZG93RXZlbnQoZXZ0LmdldCgpLCB0cnVl
KTsKKworICAgIEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRUYXJnZXROb2RlID0gMDsKKyAgICBmb3Ig
KDsgaXQuY3VycmVudCgpICYmIGl0LmN1cnJlbnQoKSAhPSByZWZlcmVuY2VOb2RlICYmICFldnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpOyArK2l0KSB7CisgICAgICAgIGV2ZW50VGFyZ2V0Tm9kZSA9
IEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKTsKKyAgICAgICAgZXZ0LT5zZXRDdXJy
ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NWR1RhcmdldFJ1bGVzKGV2ZW50VGFyZ2V0
Tm9kZSkpOworCisgICAgICAgIGV2ZW50VGFyZ2V0Tm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0
LmdldCgpLCB0cnVlKTsKKyAgICB9CisKKyAgICAvLyBkaXNwYXRjaCB0byB0aGUgYWN0dWFsIHRh
cmdldCBub2RlCisgICAgaXQudG9MYXN0KCk7CisKKyAgICBpZiAoIWV2dC0+cHJvcGFnYXRpb25T
dG9wcGVkKCkpIHsKKyAgICAgICAgZXZ0LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9UQVJHRVQp
OworCisgICAgICAgIGV2ZW50VGFyZ2V0Tm9kZSA9IEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3Vy
cmVudCgpKTsKKyAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVj
dGluZ1NWR1RhcmdldFJ1bGVzKGV2ZW50VGFyZ2V0Tm9kZSkpOworCisgICAgICAgIC8vIFdlIGRv
IHdhbnQgY2FwdHVyaW5nIGV2ZW50IGxpc3RlbmVycyB0byBiZSBpbnZva2VkIGhlcmUsIGV2ZW4g
dGhvdWdoCisgICAgICAgIC8vIHRoYXQgdmlvbGF0ZXMgdGhlIHNwZWNpZmljYXRpb24gc2luY2Ug
TW96aWxsYSBkb2VzIGl0LgorICAgICAgICBldmVudFRhcmdldE5vZGUtPmhhbmRsZUxvY2FsRXZl
bnRzKGV2dC5nZXQoKSwgdHJ1ZSk7CisKKyAgICAgICAgZXZlbnRUYXJnZXROb2RlLT5oYW5kbGVM
b2NhbEV2ZW50cyhldnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9CisKKyAgICAtLWl0OworCisgICAg
Ly8gb2ssIG5vdyBidWJibGUgdXAgYWdhaW4gKG9ubHkgbm9uLWNhcHR1cmluZyBldmVudCBoYW5k
bGVycyB3aWxsIGJlIGNhbGxlZCkKKyAgICAvLyAjIyMgcmVjYWxjdWxhdGUgdGhlIG5vZGUgY2hh
aW4gaGVyZT8gKGUuZy4gaWYgdGFyZ2V0IG5vZGUgbW92ZWQgaW4gZG9jdW1lbnQgYnkgcHJldmlv
dXMgZXZlbnQgaGFuZGxlcnMpCisgICAgLy8gbm8uIHRoZSBET00gc3BlY3Mgc2F5czoKKyAgICAv
LyBUaGUgY2hhaW4gb2YgRXZlbnRUYXJnZXRzIGZyb20gdGhlIGV2ZW50IHRhcmdldCB0byB0aGUg
dG9wIG9mIHRoZSB0cmVlCisgICAgLy8gaXMgZGV0ZXJtaW5lZCBiZWZvcmUgdGhlIGluaXRpYWwg
ZGlzcGF0Y2ggb2YgdGhlIGV2ZW50LgorICAgIC8vIElmIG1vZGlmaWNhdGlvbnMgb2NjdXIgdG8g
dGhlIHRyZWUgZHVyaW5nIGV2ZW50IHByb2Nlc3NpbmcsCisgICAgLy8gZXZlbnQgZmxvdyB3aWxs
IHByb2NlZWQgYmFzZWQgb24gdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRyZWUuCisgICAgLy8K
KyAgICAvLyBzaW5jZSB0aGUgaW5pdGlhbCBkaXNwYXRjaCBpcyBiZWZvcmUgdGhlIGNhcHR1cmlu
ZyBwaGFzZSwKKyAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIG5vZGUg
Y2hhaW4uCisgICAgLy8gKHRvYmlhcykKKworICAgIGlmIChldnQtPmJ1YmJsZXMoKSkgeworICAg
ICAgICBldnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJVQkJMSU5HX1BIQVNFKTsKKworICAgICAg
ICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQtPnByb3BhZ2F0aW9uU3RvcHBlZCgpICYmICFl
dnQtPmNhbmNlbEJ1YmJsZSgpOyAtLWl0KSB7CisgICAgICAgICAgICBldmVudFRhcmdldE5vZGUg
PSBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSk7CisgICAgICAgICAgICBldnQtPnNl
dEN1cnJlbnRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVsZXMoZXZlbnRU
YXJnZXROb2RlKSk7CisKKyAgICAgICAgICAgIGV2ZW50VGFyZ2V0Tm9kZS0+aGFuZGxlTG9jYWxF
dmVudHMoZXZ0LmdldCgpLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpdC50b0ZpcnN0
KCk7CisKKyAgICAgICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGJ1YmJsaW5nIHBoYXNl
LCBleGNlcHQgbG9hZCBldmVudHMsIHRoaXMgcXVpcmsgaXMgbmVlZGVkCisgICAgICAgIC8vIGJl
Y2F1c2UgTW96aWxsYSB1c2VkIHRvIG5ldmVyIHByb3BhZ2F0ZSBsb2FkIGV2ZW50cyBhdCBhbGwK
KyAgICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGxvYWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlz
RG9jdW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2dC0+Y2Fu
Y2VsQnViYmxlKCkpIHsKKyAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRh
cmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVXaW5kb3dFdmVudChldnQuZ2V0KCksIGZhbHNl
KTsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoMCk7Cisg
ICAgZXZ0LT5zZXRFdmVudFBoYXNlKDApOyAvLyBJIGd1ZXNzIHRoaXMgaXMgY29ycmVjdCwgdGhl
IHNwZWMgZG9lcyBub3Qgc2VlbSB0byBzYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFueXRoaW5nIGFib3V0IHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRsZXIgcGhhc2UuCisKKworICAg
IC8vIE5vdyBjYWxsIHRoZSBwb3N0IGRpc3BhdGNoLgorICAgIHBvc3REaXNwYXRjaEV2ZW50SGFu
ZGxlcihldnQuZ2V0KCksIGRhdGEpOworCisgICAgLy8gbm93IHdlIGNhbGwgYWxsIGRlZmF1bHQg
ZXZlbnQgaGFuZGxlcnMgKHRoaXMgaXMgbm90IHBhcnQgb2YgRE9NIC0gaXQgaXMgaW50ZXJuYWwg
dG8gV2ViQ29yZSkKKyAgICBpdC50b0xhc3QoKTsKKworICAgIGlmIChldnQtPmJ1YmJsZXMoKSkK
KyAgICAgICAgZm9yICg7IGl0LmN1cnJlbnQoKSAmJiAhZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkg
JiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKTsgLS1pdCkKKyAgICAgICAgICAgIEV2ZW50VGFyZ2V0
Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOwor
ICAgIGVsc2UgaWYgKCFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZ0LT5kZWZhdWx0SGFu
ZGxlZCgpKQorICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSktPmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZ0LmdldCgpKTsKKworICAgIC8vIGRlcmVmIGFsbCBub2RlcyBpbiBj
aGFpbgorICAgIGl0LnRvRmlyc3QoKTsKKyAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KQor
ICAgICAgICBpdC5jdXJyZW50KCktPmRlcmVmKCk7IC8vIHRoaXMgbWF5IGRlbGV0ZSB1cworCisg
ICAgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpOworCisgICAgLy8gSWYgdGVt
cEV2ZW50IGlzIHRydWUsIHRoaXMgbWVhbnMgdGhhdCB0aGUgRE9NIGltcGxlbWVudGF0aW9uCisg
ICAgLy8gd2lsbCBub3QgYmUgc3RvcmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQsIGkuZS4g
IHRoZXJlIGlzIG5vCisgICAgLy8gd2F5IHRvIHJldHJpZXZlIGl0IGZyb20gamF2YXNjcmlwdCBp
ZiBhIHNjcmlwdCBkb2VzIG5vdCBhbHJlYWR5CisgICAgLy8gaGF2ZSBhIHJlZmVyZW5jZSB0byBp
dCBpbiBhIHZhcmlhYmxlLiAgU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IKKyAgICAvLyB0aGUgaW50
ZXJwcmV0ZXIgdG8ga2VlcCB0aGUgZXZlbnQgaW4gaXQncyBjYWNoZQorICAgIEZyYW1lKiBmcmFt
ZSA9IHJlZmVyZW5jZU5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKHRlbXBFdmVu
dCAmJiBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0UHJveHkoKSkKKyAgICAgICAgZnJhbWUtPnNjcmlw
dFByb3h5KCktPmZpbmlzaGVkV2l0aEV2ZW50KGV2dC5nZXQoKSk7CisKKyAgICByZXR1cm4gIWV2
dC0+ZGVmYXVsdFByZXZlbnRlZCgpOyAvLyAjIyMgd2hhdCBpZiBkZWZhdWx0UHJldmVudGVkIHdh
cyBjYWxsZWQgYmVmb3JlIGRpc3BhdGNoRXZlbnQ/Cit9CisKK3ZvaWQgRXZlbnRUYXJnZXQ6OnJl
bW92ZUFsbEV2ZW50TGlzdGVuZXJzKEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJlbmNlTm9kZSkKK3sK
KyAgICBkZWxldGUgcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzOworICAgIHJlZmVyZW5j
ZU5vZGUtPm1fcmVnZExpc3RlbmVycyA9IDA7Cit9CisKK3ZvaWQgRXZlbnRUYXJnZXQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KEV2ZW50VGFyZ2V0Tm9kZSogcmVmZXJlbmNlTm9kZSkKK3sKKyAgICBp
ZiAocmVmZXJlbmNlTm9kZSAmJiByZWZlcmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMgJiYgIXJl
ZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpKQorICAgICAgICByZWZlcmVu
Y2VOb2RlLT5kb2N1bWVudCgpLT51bnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExp
c3RlbmVycyhyZWZlcmVuY2VOb2RlKTsKK30KKwordm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlZEZy
b21Eb2N1bWVudChFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUpCit7CisgICAgaWYgKHJl
ZmVyZW5jZU5vZGUgJiYgcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzICYmICFyZWZlcmVu
Y2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSkKKyAgICAgICAgcmVmZXJlbmNlTm9k
ZS0+ZG9jdW1lbnQoKS0+cmVnaXN0ZXJEaXNjb25uZWN0ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJz
KHJlZmVyZW5jZU5vZGUpOworfQorCit2b2lkIEV2ZW50VGFyZ2V0OjpoYW5kbGVMb2NhbEV2ZW50
cyhFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUsIEV2ZW50KiBldnQsIGJvb2wgdXNlQ2Fw
dHVyZSkKK3sKKyAgICBBU1NFUlQocmVmZXJlbmNlTm9kZSk7CisgICAgaWYgKCFyZWZlcmVuY2VO
b2RlLT5tX3JlZ2RMaXN0ZW5lcnMgfHwgcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
TGlzdCBsaXN0ZW5lcnNDb3B5ID0gKnJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVyczsKKyAg
ICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGVuZCA9IGxpc3RlbmVyc0Nv
cHkuZW5kKCk7CisKKyAgICBmb3IgKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0
b3IgaXQgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2dC0+dHlwZSgpICYmICgqaXQpLT51c2VDYXB0
dXJlKCkgPT0gdXNlQ2FwdHVyZSAmJiAhKCppdCktPnJlbW92ZWQoKSkKKyAgICAgICAgICAgICgq
aXQpLT5saXN0ZW5lcigpLT5oYW5kbGVFdmVudChldnQsIGZhbHNlKTsKKyAgICB9Cit9CisKK0V2
ZW50VGFyZ2V0KiBFdmVudFRhcmdldDo6ZXZlbnRUYXJnZXRSZXNwZWN0aW5nU1ZHVGFyZ2V0UnVs
ZXMoRXZlbnRUYXJnZXROb2RlKiYgcmVmZXJlbmNlTm9kZSkKK3sKKyAgICAvLyBUT0RPOiBTVkcg
d2lsbCBhZGQgbG9naWMgaGVyZSBzb29uLgorICAgIHJldHVybiByZWZlcmVuY2VOb2RlOworfQor
CisjaWZuZGVmIE5ERUJVRwordm9pZCBmb3JiaWRFdmVudERpc3BhdGNoKCkKK3sKKyAgICArK2dF
dmVudERpc3BhdGNoRm9yYmlkZGVuOworfQorCit2b2lkIGFsbG93RXZlbnREaXNwYXRjaCgpCit7
CisgICAgaWYgKGdFdmVudERpc3BhdGNoRm9yYmlkZGVuID4gMCkKKyAgICAgICAgLS1nRXZlbnRE
aXNwYXRjaEZvcmJpZGRlbjsKK30KKworYm9vbCBldmVudERpc3BhdGNoRm9yYmlkZGVuKCkKK3sK
KyAgICByZXR1cm4gZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPiAwOworfQorI2VuZGlmIC8vIE5E
RUJVRworCiB9IC8vIGVuZCBuYW1lc3BhY2UKSW5kZXg6IGRvbS9FdmVudFRhcmdldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGRvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyODc1NSkKKysrIGRvbS9FdmVu
dFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsMTIgQEAKIC8qCiAgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCiAgKgorICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcp
CisgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDExICs0MiwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRXZlbnRM
aXN0ZW5lcjsKICAgICBjbGFzcyBFdmVudFRhcmdldE5vZGU7CisgICAgY2xhc3MgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgU1ZHRWxlbWVudEluc3RhbmNlOwogICAgIGNsYXNz
IFhNTEh0dHBSZXF1ZXN0OwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcHJlY2F0ZWRWYWx1ZUxpc3Q7CisgICAgdHlw
ZWRlZiBEZXByZWNhdGVkVmFsdWVMaXN0PFJlZlB0cjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4g
PiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q7CisKICAgICBjbGFzcyBFdmVudFRhcmdldCB7
CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0Tm9kZSogdG9Ob2RlKCk7
CkBAIC01NCwxNyArNjMsNTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKSA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJiwg
Ym9vbCB0ZW1wRXZlbnQgPSBmYWxzZSkgPSAwOwotICAgIAorCiAgICAgICAgIHZvaWQgcmVmKCkg
eyByZWZFdmVudFRhcmdldCgpOyB9CiAgICAgICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmRXZlbnRU
YXJnZXQoKTsgfQogCisgICAgICAgIC8vIEhhbmRsZXJzIHRvIGRvL3VuZG8gYWN0aW9ucyBvbiB0
aGUgdGFyZ2V0IG5vZGUgYmVmb3JlIGFuIGV2ZW50IGlzIGRpc3BhdGNoZWQgdG8gaXQgYW5kIGFm
dGVyIHRoZSBldmVudAorICAgICAgICAvLyBoYXMgYmVlbiBkaXNwYXRjaGVkLiAgVGhlIGRhdGEg
cG9pbnRlciBpcyBoYW5kZWQgYmFjayBieSB0aGUgcHJlRGlzcGF0Y2ggYW5kIHBhc3NlZCB0byBw
b3N0RGlzcGF0Y2guCisgICAgICAgIHZpcnR1YWwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRs
ZXIoRXZlbnQqKSB7IHJldHVybiAwOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0RGlzcGF0
Y2hFdmVudEhhbmRsZXIoRXZlbnQqLCB2b2lkKiBkYXRhRnJvbVByZURpc3BhdGNoKSB7IH0KKwog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCB+RXZlbnRUYXJnZXQoKTsKIAorICAgICAg
ICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwg
Ym9vbCB1c2VDYXB0dXJlKTsKKyAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50
VGFyZ2V0Tm9kZSogcmVmZXJlbmNlTm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworCisgICAgICAgIGJvb2wgZGlzcGF0
Y2hHZW5lcmljRXZlbnQoRXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBQYXNzUmVmUHRy
PEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVtcEV2ZW50KTsKKyAgICAgICAgdm9pZCBy
ZW1vdmVBbGxFdmVudExpc3RlbmVycyhFdmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUpOwor
CisgICAgICAgIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRXZlbnRUYXJnZXROb2RlKiByZWZl
cmVuY2VOb2RlKTsKKyAgICAgICAgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KEV2ZW50VGFyZ2V0
Tm9kZSogcmVmZXJlbmNlTm9kZSk7CisKKyAgICAgICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhF
dmVudFRhcmdldE5vZGUqIHJlZmVyZW5jZU5vZGUsIEV2ZW50KiwgYm9vbCB1c2VDYXB0dXJlKTsK
KworICAgICAgICAvLyBGb3Igbm9uIFNWRyBlbGVtZW50cyBpdCB3aWxsIHJldHVybiAncmVmZXJl
bmNlTm9kZScgYW5kIG5vdCBtb2RpZnkgaXQuCisgICAgICAgIC8vIEZvciBTVkcgZWxlbWVudHMg
aXQgZXZlbnR1YWxseSByZXR1cm5zIGFuIGV2ZW50IHRhcmdldCBub3QgZXF1YWwgdG8gJ3JlZmVy
ZW5jZU5vZGUnLgorICAgICAgICAvLyAKKyAgICAgICAgLy8gSWYgJ3JlZmVyZW5jZU5vZGUnIGlz
IGEgY2hpbGQgb2YgYSBTVkcgPHVzZT4gZWxlbWVudCBpdCB3aWxsIHJldHVybiB0aGUgY29ycmVz
cG9uZGluZyBTVkdFbGVtZW50SW5zdGFuY2UKKyAgICAgICAgLy8gYXMgbmV3IGV2ZW50IHRhcmdl
dCAtIGFuZCAncmVmZXJlbmNlTm9kZScgd2lsbCBiZSBzZXQgdG8gdGhlIHNoYWRvdyB0cmVlIGVs
ZW1lbnQgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgIC8vIHRoZSBTVkdFbGVtZW50SW5zdGFuY2Uu
IEJlIHN1cmUgdG8gYWx3YXlzIGRpc3BhdGNoL2hhbmRsZSB5b3VyIGV2ZW50cyBvbiB0aGlzIG5l
dyBldmVudCB0YXJnZXQuCisgICAgICAgIEV2ZW50VGFyZ2V0KiBldmVudFRhcmdldFJlc3BlY3Rp
bmdTVkdUYXJnZXRSdWxlcyhFdmVudFRhcmdldE5vZGUqJiByZWZlcmVuY2VOb2RlKTsKKwogICAg
IHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpID0gMDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgfTsKLX0KIAor
I2lmbmRlZiBOREVCVUcKKwordm9pZCBmb3JiaWRFdmVudERpc3BhdGNoKCk7Cit2b2lkIGFsbG93
RXZlbnREaXNwYXRjaCgpOworYm9vbCBldmVudERpc3BhdGNoRm9yYmlkZGVuKCk7CisKKyNlbHNl
CisKK2lubGluZSB2b2lkIGZvcmJpZEV2ZW50RGlzcGF0Y2goKSB7IH0KK2lubGluZSB2b2lkIGFs
bG93RXZlbnREaXNwYXRjaCgpIHsgfQorCisjZW5kaWYgLy8gTkRFQlVHIAorCit9CiAjZW5kaWYK
SW5kZXg6IGRvbS9FdmVudFRhcmdldE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRh
cmdldE5vZGUuY3BwCShyZXZpc2lvbiAyODc1NSkKKysrIGRvbS9FdmVudFRhcmdldE5vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTggKzI1LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRXZlbnRUYXJnZXROb2RlLmgiCiAKLSNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
LSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJN
dXRhdGlvbkV2ZW50LmgiCkBAIC00NSwxOCArNDEsMTIgQEAKICNpbmNsdWRlICJQcm9ncmVzc0V2
ZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJU
ZXh0RXZlbnQuaCIKLSNpbmNsdWRlICJVSUV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5o
IgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJranNfcHJveHkuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLXVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7Ci0KLSNpZm5kZWYgTkRFQlVHCi1zdGF0aWMgaW50IGdFdmVudERp
c3BhdGNoRm9yYmlkZGVuID0gMDsKLSNlbmRpZgogCiBFdmVudFRhcmdldE5vZGU6OkV2ZW50VGFy
Z2V0Tm9kZShEb2N1bWVudCAqZG9jKQogICAgIDogTm9kZShkb2MpCkBAIC02OCwyMzMgKzU4LDQ4
IEBAIEV2ZW50VGFyZ2V0Tm9kZTo6fkV2ZW50VGFyZ2V0Tm9kZSgpCiB7CiAgICAgaWYgKG1fcmVn
ZExpc3RlbmVycyAmJiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYgIWluRG9jdW1lbnQo
KSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZl
bnRMaXN0ZW5lcnModGhpcyk7CisKICAgICBkZWxldGUgbV9yZWdkTGlzdGVuZXJzOworICAgIG1f
cmVnZExpc3RlbmVycyA9IDA7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpCiB7Ci0gICAgaWYgKG1fcmVnZExpc3RlbmVycyAmJiAhbV9yZWdkTGlzdGVu
ZXJzLT5pc0VtcHR5KCkpCi0gICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJEaXNjb25uZWN0
ZWROb2RlV2l0aEV2ZW50TGlzdGVuZXJzKHRoaXMpOwotICAgIAorICAgIEV2ZW50VGFyZ2V0Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCh0aGlzKTsKICAgICBOb2RlOjppbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7
Ci0gICAgaWYgKG1fcmVnZExpc3RlbmVycyAmJiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkp
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExp
c3RlbmVycyh0aGlzKTsKLQorICAgIEV2ZW50VGFyZ2V0OjpyZW1vdmVkRnJvbURvY3VtZW50KHRo
aXMpOwogICAgIE5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAotdm9pZCBFdmVudFRh
cmdldE5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUs
IFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGNvbnN0IGJvb2wgdXNlQ2FwdHVy
ZSkKK3ZvaWQgRXZlbnRUYXJnZXROb2RlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCgpLT5hdHRhY2hlZCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSB0eXBlID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQ6Okxpc3RlbmVyVHlwZT4oMCk7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBE
T01TdWJ0cmVlTW9kaWZpZWRFdmVudCkKLSAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01TVUJU
UkVFTU9ESUZJRURfTElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTU5vZGVJ
bnNlcnRlZEV2ZW50KQotICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRF9M
SVNURU5FUjsKLSAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRFdmVudCkK
LSAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01OT0RFUkVNT1ZFRF9MSVNURU5FUjsKLSAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCkKLSAg
ICAgICAgdHlwZSA9IERvY3VtZW50OjpET01OT0RFUkVNT1ZFREZST01ET0NVTUVOVF9MSVNURU5F
UjsKLSAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50
RXZlbnQpCi0gICAgICAgIHR5cGUgPSBEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVESU5UT0RPQ1VN
RU5UX0xJU1RFTkVSOwotICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01BdHRyTW9kaWZpZWRF
dmVudCkKLSAgICAgICAgdHlwZSA9IERvY3VtZW50OjpET01BVFRSTU9ESUZJRURfTElTVEVORVI7
Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50
KQotICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNU
RU5FUjsKLSAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gb3ZlcmZsb3djaGFuZ2VkRXZlbnQpCi0g
ICAgICAgIHR5cGUgPSBEb2N1bWVudDo6T1ZFUkZMT1dDSEFOR0VEX0xJU1RFTkVSOwotICAgICAg
ICAKLSAgICBpZiAodHlwZSkKLSAgICAgICAgZG9jdW1lbnQoKS0+YWRkTGlzdGVuZXJUeXBlKHR5
cGUpOwotICAgIAotICAgIGlmICghbV9yZWdkTGlzdGVuZXJzKQotICAgICAgICBtX3JlZ2RMaXN0
ZW5lcnMgPSBuZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OwotICAgIAotICAgIC8vIFJl
bW92ZSBleGlzdGluZyBpZGVudGljYWwgbGlzdGVuZXIgc2V0IHdpdGggaWRlbnRpY2FsIGFyZ3Vt
ZW50cy4KLSAgICAvLyBUaGUgRE9NMiBzcGVjIHNheXMgdGhhdCAiZHVwbGljYXRlIGluc3RhbmNl
cyBhcmUgZGlzY2FyZGVkIiBpbiB0aGlzIGNhc2UuCi0gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihl
dmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKLSAgICAKLSAgICAvLyBhZGRp
bmcgdGhlIGZpcnN0IG9uZQotICAgIGlmIChtX3JlZ2RMaXN0ZW5lcnMtPmlzRW1wdHkoKSAmJiAh
aW5Eb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckRpc2Nvbm5lY3RlZE5v
ZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7Ci0gICAgCi0gICAgbV9yZWdkTGlzdGVuZXJzLT5h
cHBlbmQobmV3IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIuZ2V0
KCksIHVzZUNhcHR1cmUpKTsKKyAgICBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcih0aGlz
LCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKIH0KIAotdm9pZCBFdmVudFRhcmdl
dE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUs
IEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit2b2lkIEV2ZW50VGFy
Z2V0Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSAgICBpZiAo
IW1fcmVnZExpc3RlbmVycykgLy8gbm90aGluZyB0byByZW1vdmUKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIHJsKGV2ZW50VHlwZSwgbGlzdGVuZXIs
IHVzZUNhcHR1cmUpOwotICAgIAotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRl
cmF0b3IgZW5kID0gbV9yZWdkTGlzdGVuZXJzLT5lbmQoKTsKLSAgICBmb3IgKFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgaXQgPSBtX3JlZ2RMaXN0ZW5lcnMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKCooKml0KS5nZXQoKSA9PSBybCkgewotICAg
ICAgICAgICAgKCppdCktPnNldFJlbW92ZWQodHJ1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGl0ID0gbV9yZWdkTGlzdGVuZXJzLT5yZW1vdmUoaXQpOwotICAgICAgICAgICAgLy8gcmVt
b3ZlZCBsYXN0Ci0gICAgICAgICAgICBpZiAobV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYg
IWluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRGlz
Y29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyh0aGlzKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKHRoaXMs
IGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0
Tm9kZTo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogewotICAgIGRlbGV0ZSBtX3JlZ2RMaXN0
ZW5lcnM7Ci0gICAgbV9yZWdkTGlzdGVuZXJzID0gMDsKKyAgICBFdmVudFRhcmdldDo6cmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcnModGhpcyk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpoYW5k
bGVMb2NhbEV2ZW50cyhFdmVudCAqZXZ0LCBib29sIHVzZUNhcHR1cmUpCiB7Ci0gICAgaWYgKCFt
X3JlZ2RMaXN0ZW5lcnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBpZiAoZGlzYWJsZWQo
KSAmJiBldnQtPmlzTW91c2VFdmVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0IGxpc3RlbmVyc0NvcHkgPSAqbV9yZWdkTGlzdGVuZXJz
OwotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6SXRlcmF0b3IgZW5kID0gbGlzdGVu
ZXJzQ29weS5lbmQoKTsKIAotICAgIGZvciAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJ
dGVyYXRvciBpdCA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2dC0+dHlwZSgpICYmICgqaXQpLT51c2VD
YXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSAmJiAhKCppdCktPnJlbW92ZWQoKSkKLSAgICAgICAgICAg
ICgqaXQpLT5saXN0ZW5lcigpLT5oYW5kbGVFdmVudChldnQsIGZhbHNlKTsKLX0KLQotYm9vbCBF
dmVudFRhcmdldE5vZGU6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUs
IEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCkKLXsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2
dChlKTsKLSAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7Ci0gICAgQVNTRVJU
KGV2dC0+dGFyZ2V0KCkpOwotICAgIEFTU0VSVCghZXZ0LT50eXBlKCkuaXNOdWxsKCkpOyAvLyBK
YXZhU2NyaXB0IGNvZGUgY291bGQgY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZQot
ICAgIAotICAgIC8vIHdvcmsgb3V0IHdoYXQgbm9kZXMgdG8gc2VuZCBldmVudCB0bwotICAgIERl
cHJlY2F0ZWRQdHJMaXN0PE5vZGU+IG5vZGVDaGFpbjsKLSAgICAKLSAgICBpZiAoaW5Eb2N1bWVu
dCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IHRoaXM7IG47IG4gPSBuLT5ldmVudFBhcmVu
dE5vZGUoKSkgewotICAgICAgICAgICAgbi0+cmVmKCk7Ci0gICAgICAgICAgICBub2RlQ2hhaW4u
cHJlcGVuZChuKTsKLSAgICAgICAgfSAKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBpZiBub2Rl
IGlzIG5vdCBpbiB0aGUgZG9jdW1lbnQganVzdCBzZW5kIGV2ZW50IHRvIGl0c2VsZiAKLSAgICAg
ICAgcmVmKCk7Ci0gICAgICAgIG5vZGVDaGFpbi5wcmVwZW5kKHRoaXMpOwotICAgIH0KLSAgICAK
LSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPE5vZGU+IGl0KG5vZGVDaGFpbik7Ci0gICAg
Ci0gICAgLy8gQmVmb3JlIHdlIGJlZ2luIGRpc3BhdGNoaW5nIGV2ZW50cywgZ2l2ZSB0aGUgdGFy
Z2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yCi0gICAgLy8gdG8gdGhlIERP
TSBldmVudCBoYW5kbGVycyBnZXR0aW5nIGEgY3JhY2suCi0gICAgdm9pZCogZGF0YSA9IHByZURp
c3BhdGNoRXZlbnRIYW5kbGVyKGV2dC5nZXQoKSk7Ci0gICAgCi0gICAgLy8gdHJpZ2dlciBhbnkg
Y2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzIG9uIG91ciB3YXkgZG93bgotICAgIGV2dC0+c2V0RXZl
bnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKLSAgICAKLSAgICBpdC50b0ZpcnN0KCk7
Ci0gICAgLy8gSGFuZGxlIHdpbmRvdyBldmVudHMgZm9yIGNhcHR1cmUgcGhhc2UsIGV4Y2VwdCBs
b2FkIGV2ZW50cywgdGhpcyBxdWlyayBpcyBuZWVkZWQKLSAgICAvLyBiZWNhdXNlIE1vemlsbGEg
dXNlZCB0byBuZXZlciBwcm9wYWdhdGUgbG9hZCBldmVudHMgdG8gdGhlIHdpbmRvdyBvYmplY3QK
LSAgICBpZiAoZXZ0LT50eXBlKCkgIT0gbG9hZEV2ZW50ICYmIGl0LmN1cnJlbnQoKS0+aXNEb2N1
bWVudE5vZGUoKSAmJiAhZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVXaW5kb3dFdmVudChldnQuZ2V0
KCksIHRydWUpOwotICAgIAotICAgIGZvciAoOyBpdC5jdXJyZW50KCkgJiYgaXQuY3VycmVudCgp
ICE9IHRoaXMgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCk7ICsraXQpIHsKLSAgICAgICAg
ZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKSk7
Ci0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+aGFuZGxlTG9jYWxF
dmVudHMoZXZ0LmdldCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gZGlzcGF0Y2ggdG8g
dGhlIGFjdHVhbCB0YXJnZXQgbm9kZQotICAgIGl0LnRvTGFzdCgpOwotICAgIGlmICghZXZ0LT5w
cm9wYWdhdGlvblN0b3BwZWQoKSkgewotICAgICAgICBldnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6
OkFUX1RBUkdFVCk7Ci0gICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdldE5v
ZGVDYXN0KGl0LmN1cnJlbnQoKSkpOwotICAgICAgICAKLSAgICAgICAgLy8gV2UgZG8gd2FudCBj
YXB0dXJpbmcgZXZlbnQgbGlzdGVuZXJzIHRvIGJlIGludm9rZWQgaGVyZSwgZXZlbiB0aG91Z2gK
LSAgICAgICAgLy8gdGhhdCB2aW9sYXRlcyB0aGUgc3BlY2lmaWNhdGlvbiBzaW5jZSBNb3ppbGxh
IGRvZXMgaXQuCi0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+aGFu
ZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIEV2ZW50
VGFyZ2V0Tm9kZUNhc3QoaXQuY3VycmVudCgpKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgp
LCBmYWxzZSk7Ci0gICAgfQotICAgIC0taXQ7Ci0gICAgCi0gICAgLy8gb2ssIG5vdyBidWJibGUg
dXAgYWdhaW4gKG9ubHkgbm9uLWNhcHR1cmluZyBldmVudCBoYW5kbGVycyB3aWxsIGJlIGNhbGxl
ZCkKLSAgICAvLyAjIyMgcmVjYWxjdWxhdGUgdGhlIG5vZGUgY2hhaW4gaGVyZT8gKGUuZy4gaWYg
dGFyZ2V0IG5vZGUgbW92ZWQgaW4gZG9jdW1lbnQgYnkgcHJldmlvdXMgZXZlbnQgaGFuZGxlcnMp
Ci0gICAgLy8gbm8uIHRoZSBET00gc3BlY3Mgc2F5czoKLSAgICAvLyBUaGUgY2hhaW4gb2YgRXZl
bnRUYXJnZXRzIGZyb20gdGhlIGV2ZW50IHRhcmdldCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlCi0g
ICAgLy8gaXMgZGV0ZXJtaW5lZCBiZWZvcmUgdGhlIGluaXRpYWwgZGlzcGF0Y2ggb2YgdGhlIGV2
ZW50LgotICAgIC8vIElmIG1vZGlmaWNhdGlvbnMgb2NjdXIgdG8gdGhlIHRyZWUgZHVyaW5nIGV2
ZW50IHByb2Nlc3NpbmcsCi0gICAgLy8gZXZlbnQgZmxvdyB3aWxsIHByb2NlZWQgYmFzZWQgb24g
dGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRyZWUuCi0gICAgLy8KLSAgICAvLyBzaW5jZSB0aGUg
aW5pdGlhbCBkaXNwYXRjaCBpcyBiZWZvcmUgdGhlIGNhcHR1cmluZyBwaGFzZSwKLSAgICAvLyB0
aGVyZSdzIG5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIG5vZGUgY2hhaW4uCi0gICAgLy8gKHRv
YmlhcykKLSAgICAKLSAgICBpZiAoZXZ0LT5idWJibGVzKCkpIHsKLSAgICAgICAgZXZ0LT5zZXRF
dmVudFBoYXNlKEV2ZW50OjpCVUJCTElOR19QSEFTRSk7Ci0gICAgICAgIGZvciAoOyBpdC5jdXJy
ZW50KCkgJiYgIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2VsQnViYmxl
KCk7IC0taXQpIHsKLSAgICAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdl
dE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkpOwotICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2Fz
dChpdC5jdXJyZW50KCkpLT5oYW5kbGVMb2NhbEV2ZW50cyhldnQuZ2V0KCksIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBIYW5kbGUgd2luZG93IGV2ZW50cyBmb3IgYnViYmxpbmcgcGhh
c2UsIGV4Y2VwdCBsb2FkIGV2ZW50cywgdGhpcyBxdWlyayBpcyBuZWVkZWQKLSAgICAgICAgLy8g
YmVjYXVzZSBNb3ppbGxhIHVzZWQgdG8gbmV2ZXIgcHJvcGFnYXRlIGxvYWQgZXZlbnRzIGF0IGFs
bAotCi0gICAgICAgIGl0LnRvRmlyc3QoKTsKLSAgICAgICAgaWYgKGV2dC0+dHlwZSgpICE9IGxv
YWRFdmVudCAmJiBpdC5jdXJyZW50KCktPmlzRG9jdW1lbnROb2RlKCkgJiYgIWV2dC0+cHJvcGFn
YXRpb25TdG9wcGVkKCkgJiYgIWV2dC0+Y2FuY2VsQnViYmxlKCkpIHsKLSAgICAgICAgICAgIGV2
dC0+c2V0Q3VycmVudFRhcmdldChFdmVudFRhcmdldE5vZGVDYXN0KGl0LmN1cnJlbnQoKSkpOwot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpdC5jdXJyZW50KCkpLT5oYW5kbGVX
aW5kb3dFdmVudChldnQuZ2V0KCksIGZhbHNlKTsKLSAgICAgICAgfSAKLSAgICB9IAotICAgIAot
ICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldCgwKTsKLSAgICBldnQtPnNldEV2ZW50UGhhc2UoMCk7
IC8vIEkgZ3Vlc3MgdGhpcyBpcyBjb3JyZWN0LCB0aGUgc3BlYyBkb2VzIG5vdCBzZWVtIHRvIHNh
eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55dGhpbmcgYWJvdXQgdGhlIGRlZmF1
bHQgZXZlbnQgaGFuZGxlciBwaGFzZS4KLSAgICAKLSAgICAKLSAgICAvLyBOb3cgY2FsbCB0aGUg
cG9zdCBkaXNwYXRjaC4KLSAgICBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoZXZ0LmdldCgpLCBk
YXRhKTsKLSAgICAKLSAgICAvLyBub3cgd2UgY2FsbCBhbGwgZGVmYXVsdCBldmVudCBoYW5kbGVy
cyAodGhpcyBpcyBub3QgcGFydCBvZiBET00gLSBpdCBpcyBpbnRlcm5hbCB0byBraHRtbCkKLSAg
ICAKLSAgICBpdC50b0xhc3QoKTsKLSAgICBpZiAoZXZ0LT5idWJibGVzKCkpCi0gICAgICAgIGZv
ciAoOyBpdC5jdXJyZW50KCkgJiYgIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpICYmICFldnQtPmRl
ZmF1bHRIYW5kbGVkKCk7IC0taXQpCi0gICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGl0
LmN1cnJlbnQoKSktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0LmdldCgpKTsKLSAgICBlbHNlIGlm
ICghZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKLSAg
ICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChpdC5jdXJyZW50KCkpLT5kZWZhdWx0RXZlbnRIYW5k
bGVyKGV2dC5nZXQoKSk7Ci0gICAgCi0gICAgLy8gZGVyZWYgYWxsIG5vZGVzIGluIGNoYWluCi0g
ICAgaXQudG9GaXJzdCgpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpCi0gICAgICAg
IGl0LmN1cnJlbnQoKS0+ZGVyZWYoKTsgLy8gdGhpcyBtYXkgZGVsZXRlIHVzCi0gICAgCi0gICAg
RG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpOwotICAgIAotICAgIC8vIElmIHRl
bXBFdmVudCBpcyB0cnVlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIERPTSBpbXBsZW1lbnRhdGlvbgot
ICAgIC8vIHdpbGwgbm90IGJlIHN0b3JpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50LCBpLmUu
ICB0aGVyZSBpcyBubwotICAgIC8vIHdheSB0byByZXRyaWV2ZSBpdCBmcm9tIGphdmFzY3JpcHQg
aWYgYSBzY3JpcHQgZG9lcyBub3QgYWxyZWFkeQotICAgIC8vIGhhdmUgYSByZWZlcmVuY2UgdG8g
aXQgaW4gYSB2YXJpYWJsZS4gIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yCi0gICAgLy8gdGhlIGlu
dGVycHJldGVyIHRvIGtlZXAgdGhlIGV2ZW50IGluIGl0J3MgY2FjaGUKLSAgICBGcmFtZSAqZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICh0ZW1wRXZlbnQgJiYgZnJhbWUgJiYg
ZnJhbWUtPnNjcmlwdFByb3h5KCkpCi0gICAgICAgIGZyYW1lLT5zY3JpcHRQcm94eSgpLT5maW5p
c2hlZFdpdGhFdmVudChldnQuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiAhZXZ0LT5kZWZhdWx0
UHJldmVudGVkKCk7IC8vICMjIyB3aGF0IGlmIGRlZmF1bHRQcmV2ZW50ZWQgd2FzIGNhbGxlZCBi
ZWZvcmUgZGlzcGF0Y2hFdmVudD8KKyAgICBFdmVudFRhcmdldDo6aGFuZGxlTG9jYWxFdmVudHMo
dGhpcywgZXZ0LCB1c2VDYXB0dXJlKTsgICAgCiB9CiAKIGJvb2wgRXZlbnRUYXJnZXROb2RlOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29s
IHRlbXBFdmVudCkKIHsKLSAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChlLCBlYywgdGVtcEV2ZW50
LCB0aGlzKTsKLX0KLQotYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4gZSwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvb2wgdGVtcEV2ZW50LCBFdmVudFRh
cmdldCogdGFyZ2V0KQotewogICAgIFJlZlB0cjxFdmVudD4gZXZ0KGUpOwogICAgIEFTU0VSVCgh
ZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBpZiAoIWV2dCB8fCBldnQtPnR5cGUoKS5p
c0VtcHR5KCkpIHsgCkBAIC0zMDIsMTEgKzEwNywxMSBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6
ZGlzcGF0Y2hFdmVudChQYXNzCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBl
dnQtPnNldFRhcmdldCh0YXJnZXQpOwotICAgIAorICAgIEV2ZW50VGFyZ2V0Tm9kZSogZXZlbnRU
YXJnZXQgPSB0aGlzOworICAgIGV2dC0+c2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1NW
R1RhcmdldFJ1bGVzKGV2ZW50VGFyZ2V0KSk7CisKICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3
ID0gZG9jdW1lbnQoKS0+dmlldygpOwotICAgIAotICAgIHJldHVybiBkaXNwYXRjaEdlbmVyaWNF
dmVudChldnQucmVsZWFzZSgpLCBlYywgdGVtcEV2ZW50KTsKKyAgICByZXR1cm4gZGlzcGF0Y2hH
ZW5lcmljRXZlbnQoZXZlbnRUYXJnZXQsIGV2dC5yZWxlYXNlKCksIGVjLCB0ZW1wRXZlbnQpOwog
fQogCiBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudChi
b29sIHNlbmRDaGlsZHJlbkNoYW5nZWQpCkBAIC0zNDUsNyArMTUwLDcgQEAgdm9pZCBFdmVudFRh
cmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbgogICAgICAgICBpZiAob3duZXJFbGVtZW50KSB7
CiAgICAgICAgICAgICBSZWZQdHI8RXZlbnQ+IG93bmVyRXZlbnQgPSBuZXcgRXZlbnQoZXZlbnRU
eXBlLCBmYWxzZSwgY2FuY2VsYWJsZUFyZyk7CiAgICAgICAgICAgICBvd25lckV2ZW50LT5zZXRU
YXJnZXQob3duZXJFbGVtZW50KTsKLSAgICAgICAgICAgIG93bmVyRWxlbWVudC0+ZGlzcGF0Y2hH
ZW5lcmljRXZlbnQob3duZXJFdmVudC5yZWxlYXNlKCksIGVjLCB0cnVlKTsKKyAgICAgICAgICAg
IG93bmVyRWxlbWVudC0+ZGlzcGF0Y2hHZW5lcmljRXZlbnQob3duZXJFbGVtZW50LCBvd25lckV2
ZW50LnJlbGVhc2UoKSwgZWMsIHRydWUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNjIzLDIy
ICs0MjgsNiBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZHVtcChUZXh0U3RyZWFtKiBzCiAgICAg
Tm9kZTo6ZHVtcChzdHJlYW0saW5kKTsKIH0KIAotdm9pZCBmb3JiaWRFdmVudERpc3BhdGNoKCkK
LXsKLSAgICArK2dFdmVudERpc3BhdGNoRm9yYmlkZGVuOwotfQotCi12b2lkIGFsbG93RXZlbnRE
aXNwYXRjaCgpCi17Ci0gICAgaWYgKGdFdmVudERpc3BhdGNoRm9yYmlkZGVuID4gMCkKLSAgICAg
ICAgLS1nRXZlbnREaXNwYXRjaEZvcmJpZGRlbjsKLX0KLQotYm9vbCBldmVudERpc3BhdGNoRm9y
YmlkZGVuKCkKLXsKLSAgICByZXR1cm4gZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPiAwOwotfQot
CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogZG9tL0V2ZW50VGFyZ2V0
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdldE5vZGUuaAkocmV2aXNpb24gMjg3
NTUpCisrKyBkb20vRXZlbnRUYXJnZXROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3
IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw5ICszMCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q7Ci0KLWNsYXNzIEV2ZW50VGFyZ2V0Tm9kZSA6IHB1YmxpYyBO
b2RlLCBwdWJsaWMgRXZlbnRUYXJnZXQgeworY2xhc3MgRXZlbnRUYXJnZXROb2RlIDogcHVibGlj
IE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVi
bGljOgogICAgIEV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkV2ZW50
VGFyZ2V0Tm9kZSgpOwpAQCAtNDksNyArNDksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRj
aEhUTUxFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGUs
IGJvb2wgY2FuY2VsYWJsZSk7CiAgICAgRXZlbnRMaXN0ZW5lciogZ2V0SFRNTEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwogCi0gICAgYm9vbCBkaXNwYXRjaEdl
bmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVtcEV2
ZW50ID0gZmFsc2UpOwogICAgIGJvb2wgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudChib29s
IGNoaWxkcmVuQ2hhbmdlZCA9IHRydWUpOwogICAgIHZvaWQgZGlzcGF0Y2hXaW5kb3dFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2Vs
YWJsZSk7CiAgICAgYm9vbCBkaXNwYXRjaFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGludCBkZXRhaWwgPSAwLCBQYXNzUmVmUHRyPEV2ZW50PiB1bmRlcmx5aW5nRXZlbnQg
PSAwKTsKQEAgLTczLDExICs3Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwogCi0gICAgLy8gSGFuZGxlcnMgdG8gZG8vdW5kbyBhY3Rpb25zIG9uIHRoZSB0YXJnZXQgbm9k
ZSBiZWZvcmUgYW4gZXZlbnQgaXMgZGlzcGF0Y2hlZCB0byBpdCBhbmQgYWZ0ZXIgdGhlIGV2ZW50
Ci0gICAgLy8gaGFzIGJlZW4gZGlzcGF0Y2hlZC4gIFRoZSBkYXRhIHBvaW50ZXIgaXMgaGFuZGVk
IGJhY2sgYnkgdGhlIHByZURpc3BhdGNoIGFuZCBwYXNzZWQgdG8gcG9zdERpc3BhdGNoLgotICAg
IHZpcnR1YWwgdm9pZCogcHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnQqKSB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCosIHZv
aWQqIGRhdGFGcm9tUHJlRGlzcGF0Y2gpIHsgfQotCiAgICAgLyoqCiAgICAgICogUGVyZm9ybSB0
aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGFuIGV2ZW50IGUuZy4gc3VibWl0dGluZyBhIGZvcm0KICAg
ICAgKi8KQEAgLTkzLDE1ICs4NywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
VGV4dFN0cmVhbSosIERlcHJlY2F0ZWRTdHJpbmcgaW5kZW50ID0gIiIpIGNvbnN0OwogI2VuZGlm
CiAKKyAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3QqIGxvY2FsRXZlbnRMaXN0ZW5lcnMo
KSBjb25zdCB7IHJldHVybiBtX3JlZ2RMaXN0ZW5lcnM7IH0KKwogICAgIHVzaW5nIE5vZGU6OnJl
ZjsKICAgICB1c2luZyBOb2RlOjpkZXJlZjsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
U1ZHRWxlbWVudDsKLSAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4
Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCwgRXZlbnRUYXJnZXQqIHRhcmdldCk7CiAgCiBw
cm90ZWN0ZWQ6Ci0gICAgdHlwZWRlZiBEZXByZWNhdGVkVmFsdWVMaXN0PFJlZlB0cjxSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lcj4gPiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q7CisgICAgZnJp
ZW5kIGNsYXNzIEV2ZW50VGFyZ2V0OwogICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdCog
bV9yZWdkTGlzdGVuZXJzOwogCiBwcml2YXRlOgpAQCAtMTIxLDE5ICsxMTMsNiBAQCBpbmxpbmUg
Y29uc3QgRXZlbnRUYXJnZXROb2RlKiBFdmVudFRhcmdlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEV2ZW50VGFyZ2V0Tm9kZSo+KG4pOyAKIH0KIAotI2lmbmRlZiBOREVCVUcKLQotdm9p
ZCBmb3JiaWRFdmVudERpc3BhdGNoKCk7Ci12b2lkIGFsbG93RXZlbnREaXNwYXRjaCgpOwotYm9v
bCBldmVudERpc3BhdGNoRm9yYmlkZGVuKCk7Ci0KLSNlbHNlCi0KLWlubGluZSB2b2lkIGZvcmJp
ZEV2ZW50RGlzcGF0Y2goKSB7IH0KLWlubGluZSB2b2lkIGFsbG93RXZlbnREaXNwYXRjaCgpIHsg
fQotCi0jZW5kaWYgLy8gTkRFQlVHIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFdmVudFRhcmdldE5vZGVfaApJbmRleDogc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHN2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMjg3NTUpCisrKyBzdmcvU1ZHRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTE2OCw3
ICsxNjksNyBAQCB2b2lkIFNWR0VsZW1lbnQ6OnNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpCiAgICAg
ICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBuZXcgRXZlbnQobG9hZEV2ZW50LCBmYWxzZSwgZmFs
c2UpOwogICAgICAgICBldmVudC0+c2V0VGFyZ2V0KGN1cnJlbnRUYXJnZXQpOwogICAgICAgICBF
eGNlcHRpb25Db2RlIGlnbm9yZWQgPSAwOwotICAgICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChl
dmVudC5yZWxlYXNlKCksIGlnbm9yZWQsIGZhbHNlKTsKKyAgICAgICAgZGlzcGF0Y2hHZW5lcmlj
RXZlbnQodGhpcywgZXZlbnQucmVsZWFzZSgpLCBpZ25vcmVkLCBmYWxzZSk7CiAgICAgICAgIGN1
cnJlbnRUYXJnZXQgPSAocGFyZW50ICYmIHBhcmVudC0+aXNTVkdFbGVtZW50KCkpID8gc3RhdGlj
X3BvaW50ZXJfY2FzdDxTVkdFbGVtZW50PihwYXJlbnQpIDogMDsKICAgICB9CiB9CkBAIC0yMjAs
NiArMjIxLDggQEAgc3RhdGljIE5vZGUqIHNoYWRvd1RyZWVQYXJlbnRFbGVtZW50Rm9yUwogCiBi
b29sIFNWR0VsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZSwgRXhjZXB0
aW9uQ29kZSYgZWMsIGJvb2wgdGVtcEV2ZW50KQogeworICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rp
b24gd2lsbCBiZSByZW1vdmVkIGluIGEgZm9sbG93LXVwIHBhdGNoIQorCiAgICAgRXZlbnRUYXJn
ZXQqIHRhcmdldCA9IHRoaXM7CiAgICAgTm9kZSogdXNlTm9kZSA9IHNoYWRvd1RyZWVQYXJlbnRF
bGVtZW50Rm9yU2hhZG93VHJlZUVsZW1lbnQodGhpcyk7CiAKQEAgLTIzNSw3ICsyMzgsMTAgQEAg
Ym9vbCBTVkdFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdAogICAgICAgICAgICAgdGFy
Z2V0ID0gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlz
cGF0Y2hFdmVudChlLCBlYywgdGVtcEV2ZW50LCB0YXJnZXQpOworICAgIGUtPnNldFRhcmdldCh0
YXJnZXQpOworCisgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGRvY3VtZW50KCktPnZpZXco
KTsKKyAgICByZXR1cm4gRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEdlbmVyaWNFdmVudCh0aGlz
LCBlLCBlYywgdGVtcEV2ZW50KTsKIH0KIAogfQo=
</data>
<flag name="review"
          id="7754"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>