<?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>104750</bug_id>
          
          <creation_ts>2012-12-11 17:41:32 -0800</creation_ts>
          <short_desc>webdatabase: Split the SQLTransaction between its front-end and back-end.</short_desc>
          <delta_ts>2013-02-14 18:04:24 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109109</dependson>
    
    <dependson>109243</dependson>
          <blocked>103668</blocked>
    
    <blocked>104749</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michaeln</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>789050</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-12-11 17:41:32 -0800</bug_when>
    <thetext>Split the SQLTransaction between its front-end and back-end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833180</commentid>
    <comment_count>1</comment_count>
      <attachid>188373</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-14 09:54:56 -0800</bug_when>
    <thetext>Created attachment 188373
Preliminary patch to test the bots.

This is effectively near the final patch.  Uploading this to get a read on the ews bots first.  The style checker will not be happy, but I think the violations are justified (as a special case here) as fixing them actually makes the code less readable, not more.

Will up load a final patch after I add the ChangeLog and some additional comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833185</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 09:59:05 -0800</bug_when>
    <thetext>Attachment 188373 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/ChangeVersionData.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/ChangeVersionWrapper.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/ChangeVersionWrapper.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendContext.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendContext.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTask.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransaction.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransaction.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionClient.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionState.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionStateMachine.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionStateMachine.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/inspector/InspectorDatabaseAgent.cpp&apos;]&quot; exit_code: 1
Source/WebCore/Modules/webdatabase/SQLTransactionState.h:35:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:80:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:81:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:82:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:83:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:84:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:85:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:86:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:87:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:88:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:90:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:91:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:92:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:59:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:309:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:310:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:311:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:313:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:314:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:315:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:317:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:318:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:319:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:320:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:321:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 25 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833187</commentid>
    <comment_count>3</comment_count>
      <attachid>188373</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-14 09:59:45 -0800</bug_when>
    <thetext>Comment on attachment 188373
Preliminary patch to test the bots.

Attachment 188373 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16581402</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833188</commentid>
    <comment_count>4</comment_count>
      <attachid>188373</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-14 09:59:58 -0800</bug_when>
    <thetext>Comment on attachment 188373
Preliminary patch to test the bots.

Attachment 188373 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16550732</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833319</commentid>
    <comment_count>5</comment_count>
      <attachid>188400</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-14 12:26:21 -0800</bug_when>
    <thetext>Created attachment 188400
The patch (with build fixes, ChangeLog, and more comprehensive comments).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833324</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 12:30:27 -0800</bug_when>
    <thetext>Attachment 188400 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/ChangeVersionData.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/ChangeVersionWrapper.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/ChangeVersionWrapper.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/Database.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendContext.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseBackendContext.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseManager.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseServer.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/DatabaseTask.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransaction.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransaction.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionClient.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionState.h&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionStateMachine.cpp&apos;, u&apos;Source/WebCore/Modules/webdatabase/SQLTransactionStateMachine.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.gypi&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/inspector/InspectorDatabaseAgent.cpp&apos;]&quot; exit_code: 1
Source/WebCore/Modules/webdatabase/SQLTransactionState.h:35:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:80:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:81:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:82:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:83:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:84:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:85:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:86:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:87:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:88:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:90:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:91:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:92:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:62:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:391:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:392:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:393:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:395:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:396:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:397:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:399:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:400:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:401:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:402:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:403:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 25 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833397</commentid>
    <comment_count>7</comment_count>
      <attachid>188400</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-02-14 14:06:14 -0800</bug_when>
    <thetext>Comment on attachment 188400
The patch (with build fixes, ChangeLog, and more comprehensive comments).

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

&gt; Source/WebCore/Modules/webdatabase/ChangeVersionData.h:45
&gt; +    const String&amp; m_oldVersion;
&gt; +    const String&amp; m_newVersion;

These should be String.

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackendContext.cpp:37
&gt; +    return static_cast&lt;DatabaseContext*&gt;(this);

This could use a comment.

&gt; Source/WebCore/Modules/webdatabase/SQLTransaction.cpp:95
&gt; +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))

We already have WTF_ARRAY_LENGTH, which is a safer version of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833425</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-14 14:23:51 -0800</bug_when>
    <thetext>I tried to look at this patch, but I gave up because it was 149.70 KB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833441</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-14 14:36:28 -0800</bug_when>
    <thetext>Sam, thanks for the review.  Adam, thanks for your attempt.  Sorry for the large size of the patch.

Landed in r142921: &lt;http://trac.webkit.org/changeset/142921&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833449</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-14 14:45:03 -0800</bug_when>
    <thetext>@abarth: That&apos;s OK because sam has reviewed it all in short order, not even a single question asked :)

@mlam: I haven&apos;t looked too closely (there&apos;s quite a lot of it and its in bugzilla style instead of rietveld style which doesn&apos;t help me), the ChangeLog description is very nice and makes good sense. Hopefully the ews bots will be an accurate reflection of how this affects the chromium port. Certainly somewhat reflective, but they don&apos;t run under ASAN or TSAN and such (and its not really chrome that running there either). There&apos;s a reasonable chance we&apos;ll spot some fallout downstream, hopefully not, but its possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833471</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-14 15:00:00 -0800</bug_when>
    <thetext>(In reply to comment #10)
@michaeln, I sat next to Sam and answered questions as he reviewed it.

Here&apos;s a few things that might help put your mind at ease:
1. When I do the refactoring, I compare it to preexisting code, and use equivalence as the standard.  Where I can&apos;t achieve equivalence for the chromium port side, I reach out to you for clarification like I did last time.
2. I also do my own chromium build on mac and ran the relevant layout tests for it to make sure there was no breakage before I even submitted this patch for review. 

Regarding understanding the patch, I&apos;d be happy to walk you thru it offline if that helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833478</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-14 15:08:20 -0800</bug_when>
    <thetext>&gt; @michaeln, I sat next to Sam and answered questions as he reviewed it.

I figured there was some out-of-band comm going on. Did any questions around using both templates&lt;&gt; and polymorphism for the state machine class come up? Seems like you could accomplish what you&apos;re doing with one or the other w/o having to invoke both fancy language features. It&apos;s a small thing.

&gt; Here&apos;s a few things that might help put your mind at ease:
&gt; 1. When I do the refactoring, I compare it to preexisting code, and use equivalence as the standard.  Where I can&apos;t achieve equivalence for the chromium port side, I reach out to you for clarification like I did last time.
&gt; 2. I also do my own chromium build on mac and ran the relevant layout tests for it to make sure there was no breakage before I even submitted this patch for review. 

Thank you for doing that!

&gt; Regarding understanding the patch, I&apos;d be happy to walk you thru it offline if that helps.

Thnx, I may ping you at some point depending on wha&apos; happens downstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833482</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-14 15:21:27 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; @michaeln, I sat next to Sam and answered questions as he reviewed it.
&gt; 
&gt; I figured there was some out-of-band comm going on. Did any questions around using both templates&lt;&gt; and polymorphism for the state machine class come up? Seems like you could accomplish what you&apos;re doing with one or the other w/o having to invoke both fancy language features. It&apos;s a small thing.

We did not talk about that.  I did not choose to go with a template to start with, but it was necessary because I was forced to specialize the state function type (C++ restrictions).  Otherwise, I can&apos;t use the subclass methods with the base class state dispatch mechanism (which would defeat my purpose of having shared code).  The alternative is to use static methods for the state functions with lots of manual casting (and this medicine is worse than the ailment it aims to cure).

As for the use of virtual methods, that part is still open for debate.  I went with it for now because it is the most straightforward approach to me, and it is only a very small part of the patch (not worth dwelling on too long).  We can always revisit this and change it again later if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833602</commentid>
    <comment_count>14</comment_count>
      <attachid>188400</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-14 18:04:24 -0800</bug_when>
    <thetext>Comment on attachment 188400
The patch (with build fixes, ChangeLog, and more comprehensive comments).

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

&gt; Source/WebCore/Modules/webdatabase/SQLTransactionStateMachine.h:104
&gt; +        m_nextState = (static_cast&lt;T*&gt;(this)-&gt;*stateFunction)();

I see...
but instead of retrieving a stateFunctionFor() to get a method ptr and then calling it a few lines down, you could just invoke a virtual changeToNextState(m_nextState) method...
or alternatively, not define stateFunctionFor() as virtual at all, T just must have such a method (need not be virtual) or the template won&apos;t compile

very much not a big deal</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188373</attachid>
            <date>2013-02-14 09:54:56 -0800</date>
            <delta_ts>2013-02-14 10:01:28 -0800</delta_ts>
            <desc>Preliminary patch to test the bots.</desc>
            <filename>bug-104750.patch</filename>
            <type>text/plain</type>
            <size>136606</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNDI2MzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDYgKzk2Miw3IEBAIHNl
dChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
QmFja2VuZFN5bmMuY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNs
aWVudC5jcHAKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlTWFjaGlu
ZS5jcHAKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAKIAog
ICAgIE1vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTQyNjM4KQorKysgU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA5Nyw2
ICsyMDk3LDcgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vV2F2ZVRhYmxlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9XYXZlVGFibGUuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbkRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAgXApAQCAt
MjE2NSw2ICsyMTY2LDkgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgg
XAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29udGV4dFdlYkRh
dGFiYXNlLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0MjYzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE0NTQsNiArMTQ1NCw3IEBA
IEhFQURFUlMgKz0gXAogICAgIE1vZHVsZXMvcHJveGltaXR5L0RldmljZVByb3hpbWl0eUV2ZW50
LmggXAogICAgIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2
ZXIuaCBcCisgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uRGF0YS5oIFwKICAg
ICBNb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmggXAogICAgIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuaCBcCiAgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZUF1dGhvcml6ZXIuaCBcCkBAIC0xNDg0LDYgKzE0ODUsOCBAQCBIRUFE
RVJTICs9IFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5
bmMuaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oIFwK
ICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCisg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlLmggXAorICAgIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCBcCiAgICAgTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFi
YXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5oIFwKQEAgLTMwNzAsNiArMzA3Myw3IEBAIGVu
YWJsZT8oU1FMX0RBVEFCQVNFKSB7CiAgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgXAogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBcCiAgICAgICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAorICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBcCiAKICAgICBTT1VSQ0VTICs9IFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDE0MjYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtOTgzLDYgKzk4Myw3IEBACiAgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9XYXZlVGFibGUuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL1dhdmVUYWJsZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0Fi
c3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFz
ZS9DaGFuZ2VWZXJzaW9uRGF0YS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNl
L0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRh
YmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcCcsCkBAIC0xMDM4LDYgKzEwMzksOSBAQAogICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCcsCiAg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0
ZS5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3Rh
dGVNYWNoaW5lLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvblN0YXRlTWFjaGluZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uU3luYy5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Fic3RyYWN0RGF0YWJhc2VTZXJ2
ZXIuaAkocmV2aXNpb24gMTQyNjM4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDEwICs3
NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCi0gICAgLy8gRnJvbSBhIHNlY29uZGFyeSB0
aHJlYWQsIG11c3QgYmUgdGhyZWFkIHNhZmUgd2l0aCBpdHMgZGF0YQotICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJh
c2VCYWNrZW5kKikgPSAwOwotCiAjZWxzZSAvLyBQTEFURk9STShDSFJPTUlVTSkKICAgICB2aXJ0
dWFsIHZvaWQgY2xvc2VEYXRhYmFzZXNJbW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogI2VuZGlmIC8vIFBMQVRGT1JNKENI
Uk9NSVVNKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VW
ZXJzaW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvQ2hhbmdlVmVyc2lvbkRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbkRhdGEuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIENoYW5nZVZlcnNpb25EYXRhX2gKKyNkZWZpbmUgQ2hhbmdlVmVyc2lvbkRh
dGFfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENoYW5nZVZlcnNpb25E
YXRhIHsKK3B1YmxpYzoKKyAgICBDaGFuZ2VWZXJzaW9uRGF0YShjb25zdCBTdHJpbmcmIG9sZFZl
cnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikKKyAgICAgICAgOiBtX29sZFZlcnNpb24o
b2xkVmVyc2lvbiksIG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uKSB7IH0KKworICAgIGNvbnN0IFN0
cmluZyYgb2xkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fb2xkVmVyc2lvbjsgfQorICAgIGNv
bnN0IFN0cmluZyYgbmV3VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3VmVyc2lvbjsgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IFN0cmluZyYgbV9vbGRWZXJzaW9uOworICAgIGNvbnN0IFN0
cmluZyYgbV9uZXdWZXJzaW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIENoYW5nZVZlcnNpb25EYXRh
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lv
bldyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwCShyZXZpc2lvbiAxNDI2MzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDMsMTEgKzQzLDExIEBAIENoYW5nZVZlcnNpb25XcmFwcGVyOjpDaGFu
Z2VWZXJzaW9uV3JhcHAKIHsKIH0KIAotYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9y
bVByZWZsaWdodChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCitib29sIENoYW5nZVZlcnNp
b25XcmFwcGVyOjpwZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpKTsKIAotICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
OworICAgIERhdGFiYXNlQmFja2VuZEFzeW5jKiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpOwogCiAgICAgU3RyaW5nIGFjdHVhbFZlcnNpb247CiAgICAgaWYgKCFkYXRhYmFzZS0+
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShhY3R1YWxWZXJzaW9uKSkgewpAQCAtNjcsMTEgKzY3LDEx
IEBAIGJvb2wgQ2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1QcmVmbGkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9ybVBvc3RmbGlnaHQo
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6
cGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKIHsK
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpOwogCi0g
ICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgRGF0
YWJhc2VCYWNrZW5kQXN5bmMqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CiAK
ICAgICBpZiAoIWRhdGFiYXNlLT5zZXRWZXJzaW9uSW5EYXRhYmFzZShtX25ld1ZlcnNpb24pKSB7
CiAgICAgICAgIGludCBzcWxpdGVFcnJvciA9IGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxh
c3RFcnJvcigpOwpAQCAtODcsNyArODcsNyBAQCBib29sIENoYW5nZVZlcnNpb25XcmFwcGVyOjpw
ZXJmb3JtUG9zdGZsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hhbmdlVmVyc2lvbldy
YXBwZXI6OmhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24pCit2b2lkIENoYW5nZVZlcnNpb25XcmFwcGVyOjpoYW5kbGVDb21taXRGYWls
ZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKIHsK
ICAgICB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2V0Q2FjaGVkVmVyc2lvbihtX29sZFZlcnNp
b24pOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VW
ZXJzaW9uV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaAkocmV2aXNpb24gMTQyNjM4KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00MSwxMCArNDEsMTAgQEAgY2xhc3MgQ2hhbmdlVmVyc2lvbldyYXBwZXIgOiBwdWJsaWMg
U1FMVAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoYW5nZVZlcnNpb25XcmFwcGVy
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNp
b24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGFuZ2VWZXJzaW9uV3JhcHBlcihvbGRWZXJzaW9u
LCBuZXdWZXJzaW9uKSk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUHJlZmxpZ2h0KFNR
TFRyYW5zYWN0aW9uKik7Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRy
YW5zYWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1QcmVmbGlnaHQoU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kKik7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRy
YW5zYWN0aW9uQmFja2VuZCopOwogICAgIHZpcnR1YWwgU1FMRXJyb3IqIHNxbEVycm9yKCkgY29u
c3QgeyByZXR1cm4gbV9zcWxFcnJvci5nZXQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVD
b21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb24qKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uQmFj
a2VuZCopOwogCiBwcml2YXRlOgogICAgIENoYW5nZVZlcnNpb25XcmFwcGVyKGNvbnN0IFN0cmlu
ZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAx
NDI2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKIAotI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVyLmgiCisjaW5jbHVkZSAiQ2hh
bmdlVmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRl
ICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5o
IgpAQCAtNDUsOSArNDUsOCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rp
b24uaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FM
VHJhbnNhY3Rpb25DbGllbnQuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpA
QCAtNzUsOCArNzQsNyBAQCBEYXRhYmFzZTo6RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZUJh
CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQog
ICAgIDogRGF0YWJhc2VCYXNlKGRhdGFiYXNlQ29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQogICAgICwgRGF0YWJhc2VCYWNrZW5kQXN5bmMoZGF0YWJhc2VDb250ZXh0LCBuYW1lLCBl
eHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKQotICAgICwgbV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCi0gICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJs
ZWQodHJ1ZSkKKyAgICAsIG1fZGF0YWJhc2VDb250ZXh0KERhdGFiYXNlQmFja2VuZEFzeW5jOjpk
YXRhYmFzZUNvbnRleHQoKS0+ZnJvbnRlbmQoKSkKICAgICAsIG1fZGVsZXRlZChmYWxzZSkKIHsK
ICAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRUaHJlYWRTZWN1
cml0eU9yaWdpbi0+aXNvbGF0ZWRDb3B5KCk7CkBAIC0xNjIsMTMgKzE2MCw2IEBAIHZvaWQgRGF0
YWJhc2U6OmNsb3NlKCkKICAgICBBU1NFUlQoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCkpOwogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VDb250ZXh0KCkt
PmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwogCi0gICAgewotICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7Ci0gICAgICAgIG1f
aXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICBtX3RyYW5zYWN0aW9u
SW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICBtX3RyYW5zYWN0aW9uUXVldWUuY2xlYXIoKTsK
LSAgICB9Ci0KICAgICBjbG9zZURhdGFiYXNlKCk7CiAKICAgICAvLyBNdXN0IHJlZigpIGJlZm9y
ZSBjYWxsaW5nIGRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKCkuCkBAIC0x
OTYsMTcgKzE4NywxOCBAQCB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmlu
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRy
PFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQogewotICAgIHJ1blRyYW5zYWN0aW9uKGNh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIENoYW5nZVZlcnNpb25XcmFw
cGVyOjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiksIGZhbHNlKTsKKyAgICBDaGFuZ2VW
ZXJzaW9uRGF0YSBkYXRhKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pOworICAgIHJ1blRyYW5zYWN0
aW9uKGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIGZhbHNlLCAmZGF0
YSk7CiB9CiAKIHZvaWQgRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrKQogewotICAgIHJ1blRyYW5zYWN0aW9uKGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBz
dWNjZXNzQ2FsbGJhY2ssIDAsIGZhbHNlKTsKKyAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBmYWxzZSk7CiB9CiAKIHZvaWQgRGF0YWJh
c2U6OnJlYWRUcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNh
bGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKIHsKLSAgICBy
dW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAw
LCB0cnVlKTsKKyAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3Vj
Y2Vzc0NhbGxiYWNrLCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgY2FsbFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTEVycm9yPiBlcnJvcikK
QEAgLTIxNSw1NyArMjA3LDE3IEBAIHN0YXRpYyB2b2lkIGNhbGxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2sKIH0KIAogdm9pZCBEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCByZWFkT25seSkKKyAgICBQYXNzUmVm
UHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5LCBjb25zdCBD
aGFuZ2VWZXJzaW9uRGF0YSogY2hhbmdlVmVyc2lvbkRhdGEpCiB7Ci0gICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwotICAgIGlmICghbV9pc1RyYW5z
YWN0aW9uUXVldWVFbmFibGVkKSB7Ci0gICAgICAgIGlmIChlcnJvckNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8U1FMRXJyb3I+IGVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJv
cjo6VU5LTk9XTl9FUlIsICJkYXRhYmFzZSBoYXMgYmVlbiBjbG9zZWQiKTsKLSAgICAgICAgICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZj
YWxsVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBlcnJvci5yZWxlYXNl
KCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJlYWRPbmx5
KTsKLSAgICBtX3RyYW5zYWN0aW9uUXVldWUuYXBwZW5kKHRyYW5zYWN0aW9uLnJlbGVhc2UoKSk7
Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcykKLSAgICAgICAgc2NoZWR1bGVUcmFu
c2FjdGlvbigpOwotfQotCi12b2lkIERhdGFiYXNlOjppblByb2dyZXNzVHJhbnNhY3Rpb25Db21w
bGV0ZWQoKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVz
c011dGV4KTsKLSAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgIHNjaGVk
dWxlVHJhbnNhY3Rpb24oKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlv
bigpCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4LnRyeUxvY2so
KSk7IC8vIExvY2tlZCBieSBjYWxsZXIuCi0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFu
c2FjdGlvbjsKLQotICAgIGlmIChtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQgJiYgIW1fdHJh
bnNhY3Rpb25RdWV1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvblF1ZXVlLnRha2VGaXJzdCgpOwotCi0gICAgaWYgKHRyYW5zYWN0aW9uICYmIGRhdGFiYXNl
Q29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKSB7Ci0gICAgICAgIE93blB0cjxEYXRhYmFzZVRy
YW5zYWN0aW9uVGFzaz4gdGFzayA9IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpjcmVhdGUodHJh
bnNhY3Rpb24pOwotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VU
cmFuc2FjdGlvblRhc2sgJXAgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0YXNrLmdldCgpLCB0YXNr
LT50cmFuc2FjdGlvbigpKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVl
OwotICAgICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVU
YXNrKHRhc2sucmVsZWFzZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV90cmFuc2FjdGlvbklu
UHJvZ3Jlc3MgPSBmYWxzZTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlv
blN0ZXAoU1FMVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhdGVs
eSkKLXsKLSAgICBpZiAoIWRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gYW5v
dGhlclJlZlRvRXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2s7CisgICAgUmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2Fs
bGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgYW5vdGhlclJlZlRvRXJyb3JDYWxsYmFjaywgcmVhZE9u
bHkpOwogCi0gICAgT3duUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0gRGF0YWJh
c2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbik7Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0aGUgdHJhbnNh
Y3Rpb24gc3RlcFxuIiwgdGFzay5nZXQoKSk7Ci0gICAgaWYgKGltbWVkaWF0ZWx5KQotICAgICAg
ICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVU
YXNrKHRhc2sucmVsZWFzZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGRhdGFiYXNlQ29udGV4dCgp
LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZVRhc2sodGFzay5yZWxlYXNlKCkpOworICAgIFJl
ZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uQmFja2VuZDsKKyAgICB0cmFu
c2FjdGlvbkJhY2tlbmQgPSBiYWNrZW5kKCktPnJ1blRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLnJl
bGVhc2UoKSwgcmVhZE9ubHksIGNoYW5nZVZlcnNpb25EYXRhKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uQmFja2VuZCAmJiBhbm90aGVyUmVmVG9FcnJvckNhbGxiYWNrKSB7CisgICAgICAgIFJlZlB0
cjxTUUxFcnJvcj4gZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VS
UiwgImRhdGFiYXNlIGhhcyBiZWVuIGNsb3NlZCIpOworICAgICAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY2FsbFRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaywgYW5vdGhlclJlZlRvRXJyb3JDYWxsYmFjaywgZXJyb3IucmVsZWFzZSgpKSk7
CisgICAgfQogfQogCiBjbGFzcyBEZWxpdmVyUGVuZGluZ0NhbGxiYWNrVGFzayA6IHB1YmxpYyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKQEAgLTMyMywxNiArMjc1LDYgQEAgVmVjdG9y
PFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogICAgIHJldHVybiB0YWJsZU5hbWVz
OwogfQogCi1TUUxUcmFuc2FjdGlvbkNsaWVudCogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ2xpZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCktPnRyYW5zYWN0aW9uQ2xpZW50KCk7Ci19Ci0KLVNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IERhdGFiYXNlOjp0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKTsKLX0KLQogVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogewogICAg
IC8vIEZJWE1FOiBOb3QgdXNpbmcgaXNvbGF0ZWRDb3B5IG9uIHRoZXNlIHN0cmluZ3MgbG9va3Mg
b2sgc2luY2UgdGhyZWFkcyB0YWtlIHN0cmljdCB0dXJucwpAQCAtMzU4LDYgKzMwMCwyMyBAQCBT
ZWN1cml0eU9yaWdpbiogRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luCiAgICAgcmV0dXJuIDA7CiB9
CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3ZvaWQgRGF0YWJhc2U6OnJlcG9ydFN0YXJ0VHJh
bnNhY3Rpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNx
bGl0ZUVycm9yQ29kZSkKK3sKKyAgICBiYWNrZW5kKCktPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25S
ZXN1bHQoZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Cit9CisK
K3ZvaWQgRGF0YWJhc2U6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNp
dGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpCit7CisgICAgYmFj
a2VuZCgpLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChlcnJvclNpdGUsIHdlYlNxbEVy
cm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsKK30KKwordm9pZCBEYXRhYmFzZTo6cmVwb3J0RXhl
Y3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAgIGJhY2tlbmQoKS0+cmVwb3J0RXhlY3V0ZVN0YXRl
bWVudFJlc3VsdChlcnJvclNpdGUsIHdlYlNxbEVycm9yQ29kZSwgc3FsaXRlRXJyb3JDb2RlKTsK
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuaAkocmV2aXNpb24gMTQyNjM4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMSArMzUsMTgg
QEAKICNpbmNsdWRlICJEYXRhYmFzZUJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJhc2ljVHlw
ZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDaGFuZ2VWZXJzaW9uRGF0YTsKIGNs
YXNzIERhdGFiYXNlQ2FsbGJhY2s7CitjbGFzcyBEYXRhYmFzZUNvbnRleHQ7CiBjbGFzcyBTZWN1
cml0eU9yaWdpbjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25DYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0
aW9uQ2xpZW50OwotY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uV3JhcHBlcjsKIGNs
YXNzIFZvaWRDYWxsYmFjazsKIAogY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgRGF0YWJhc2VCYXNl
LCBwdWJsaWMgRGF0YWJhc2VCYWNrZW5kQXN5bmMgewpAQCAtNjUsNiArNjIsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAogICAgIHN0YXRpYyBEYXRhYmFzZSog
ZnJvbShEYXRhYmFzZUJhY2tlbmRBc3luYyopOworICAgIERhdGFiYXNlQ29udGV4dCogZGF0YWJh
c2VDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUNvbnRleHQuZ2V0KCk7IH0KIAog
ICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsKIApAQCAtODAsMTAgKzc4LDYgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OwogCiAgICAg
dm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKLSAgICB2
b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uQmFja2VuZCosIGJvb2wg
aW1tZWRpYXRlbHkgPSBmYWxzZSk7Ci0KLSAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNh
Y3Rpb25DbGllbnQoKSBjb25zdDsKLSAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2UoUGFz
c1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLApAQCAt
OTIsMjUgKzg2LDMwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tl
bmQ+KTsKIAogICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAotICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsK
LQotICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7Ci0gICAgdm9pZCBz
Y2hlZHVsZVRyYW5zYWN0aW9uKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksIGNvbnN0IENoYW5nZVZlcnNpb25EYXRhKiA9
IDApOwogCiAgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybUdldFRhYmxlTmFtZXMoKTsKIAotICAg
IERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7Ci0gICAg
TXV0ZXggbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKLSAgICBib29sIG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzOwotICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkOworI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorICAgIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3Vs
dChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2Rl
KTsKKyAgICB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUs
IGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOworICAgIHZvaWQgcmVw
b3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JD
b2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyNlbHNlCisgICAgdm9pZCByZXBvcnRTdGFydFRy
YW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQorICAgIHZvaWQgcmVwb3J0Q29tbWl0
VHJhbnNhY3Rpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9CisgICAgdm9pZCByZXBvcnRFeGVj
dXRlU3RhdGVtZW50UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQorI2VuZGlmCiAKICAgICBSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKKyAgICBS
ZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBtX2RhdGFiYXNlQ29udGV4dDsKIAogICAgIGJvb2wgbV9k
ZWxldGVkOwogCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlTWFuYWdlcjsKICAgICBmcmllbmQg
Y2xhc3MgRGF0YWJhc2VTZXJ2ZXI7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNr
ZW5kIGhhcyBiZWVuIHNwbGl0IG91dC4KICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2VCYWNrZW5k
QXN5bmM7IC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHRoZSBiYWNrZW5kIGhhcyBiZWVuIHNw
bGl0IG91dC4KKyAgICBmcmllbmQgY2xhc3MgU1FMU3RhdGVtZW50OworICAgIGZyaWVuZCBjbGFz
cyBTUUxUcmFuc2FjdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFj
a2VuZC5jcHAJKHJldmlzaW9uIDE0MjYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDEzICs2
NTIsNiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0VmFjdXVtRGF0YWJhCiAgICAgRGF0
YWJhc2VPYnNlcnZlcjo6cmVwb3J0VmFjdXVtRGF0YWJhc2VSZXN1bHQodGhpcywgc3FsaXRlRXJy
b3JDb2RlKTsKIH0KIAotI2Vsc2UKLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Ci12b2lkIERhdGFiYXNlQmFja2VuZDo6cmVw
b3J0Q2hhbmdlVmVyc2lvblJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZvaWQgRGF0YWJhc2VC
YWNrZW5kOjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQot
dm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCwg
aW50LCBpbnQpIHsgfQotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1l
bnRSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Ci12b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0
VmFjdXVtRGF0YWJhc2VSZXN1bHQoaW50KSB7IH0KICNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlV
TSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5oCShyZXZpc2lvbiAxNDI2
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTIgKzExNCwyMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBzZXRDYWNoZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgZ2V0QWN0dWFs
VmVyc2lvbkZvclRyYW5zYWN0aW9uKFN0cmluZyYgdmVyc2lvbik7CiAKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKICAgICB2b2lkIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdChpbnQgZXJyb3JTaXRl
LCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKICAgICB2b2lkIHJl
cG9ydENoYW5nZVZlcnNpb25SZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29k
ZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CiAgICAgdm9pZCByZXBvcnRTdGFydFRyYW5zYWN0aW9u
UmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJv
ckNvZGUpOwogICAgIHZvaWQgcmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9y
U2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CiAgICAgdm9p
ZCByZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxF
cnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwogICAgIHZvaWQgcmVwb3J0VmFjdXVtRGF0
YWJhc2VSZXN1bHQoaW50IHNxbGl0ZUVycm9yQ29kZSk7CisjZWxzZQorICAgIHZvaWQgcmVwb3J0
T3BlbkRhdGFiYXNlUmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQorICAgIHZvaWQgcmVwb3J0Q2hh
bmdlVmVyc2lvblJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KKyAgICB2b2lkIHJlcG9ydFN0YXJ0
VHJhbnNhY3Rpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9CisgICAgdm9pZCByZXBvcnRDb21t
aXRUcmFuc2FjdGlvblJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KKyAgICB2b2lkIHJlcG9ydEV4
ZWN1dGVTdGF0ZW1lbnRSZXN1bHQoaW50LCBpbnQsIGludCkgeyB9CisgICAgdm9pZCByZXBvcnRW
YWN1dW1EYXRhYmFzZVJlc3VsdChpbnQpIHsgfQorI2VuZGlmCiAKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMu
Y3BwCShyZXZpc2lvbiAxNDI2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4
LDI0IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiQ2hhbmdlVmVy
c2lvbkRhdGEuaCIKKyNpbmNsdWRlICJDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIgogI2luY2x1ZGUg
IkRhdGFiYXNlQmFja2VuZENvbnRleHQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKICNp
bmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xp
ZW50LmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIERhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZUJhY2tlbmRBc3lu
YyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+IGRhdGFiYXNlQ29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgIDogRGF0
YWJhc2VCYWNrZW5kKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgRGF0YWJhc2VUeXBlOjpBc3luYykKKyAgICAsIG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQorICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFi
bGVkKHRydWUpCiB7CiB9CiAKQEAgLTY5LDYgKzc4LDY5IEBAIGJvb2wgRGF0YWJhc2VCYWNrZW5k
QXN5bmM6OnBlcmZvcm1PcGVuQW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1Bhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBEYXRhYmFzZUJhY2tlbmRBc3luYzo6cnVuVHJhbnNhY3Rp
b24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24sCisgICAgYm9vbCByZWFk
T25seSwgY29uc3QgQ2hhbmdlVmVyc2lvbkRhdGEqIGRhdGEpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOworICAgIGlmICghbV9pc1RyYW5z
YWN0aW9uUXVldWVFbmFibGVkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXI7CisgICAgaWYgKGRhdGEpCisgICAgICAgIHdyYXBw
ZXIgPSBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6Y3JlYXRlKGRhdGEtPm9sZFZlcnNpb24oKSwgZGF0
YS0+bmV3VmVyc2lvbigpKTsKKworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IHRy
YW5zYWN0aW9uQmFja2VuZCA9IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKHRoaXMsIHRy
YW5zYWN0aW9uLCB3cmFwcGVyLCByZWFkT25seSk7CisgICAgbV90cmFuc2FjdGlvblF1ZXVlLmFw
cGVuZCh0cmFuc2FjdGlvbkJhY2tlbmQpOworICAgIGlmICghbV90cmFuc2FjdGlvbkluUHJvZ3Jl
c3MpCisgICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKKworICAgIHJldHVybiB0cmFuc2Fj
dGlvbkJhY2tlbmQ7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OmluUHJvZ3Jlc3NU
cmFuc2FjdGlvbkNvbXBsZXRlZCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzTXV0ZXgpOworICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFs
c2U7CisgICAgc2NoZWR1bGVUcmFuc2FjdGlvbigpOworfQorCit2b2lkIERhdGFiYXNlQmFja2Vu
ZEFzeW5jOjpzY2hlZHVsZVRyYW5zYWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rp
b25JblByb2dyZXNzTXV0ZXgudHJ5TG9jaygpKTsgLy8gTG9ja2VkIGJ5IGNhbGxlci4KKyAgICBS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbjsKKworICAgIGlmIChtX2lz
VHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQgJiYgIW1fdHJhbnNhY3Rpb25RdWV1ZS5pc0VtcHR5KCkp
CisgICAgICAgIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvblF1ZXVlLnRha2VGaXJzdCgpOwor
CisgICAgaWYgKHRyYW5zYWN0aW9uICYmIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpKSB7CisgICAgICAgIE93blB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gdGFzayA9IERh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24pOworICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgJXAgZm9yIHRy
YW5zYWN0aW9uICVwXG4iLCB0YXNrLmdldCgpLCB0YXNrLT50cmFuc2FjdGlvbigpKTsKKyAgICAg
ICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOworICAgICAgICBkYXRhYmFzZUNvbnRl
eHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKK30KKwor
dm9pZCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKK3sKKyAgICBpZiAoIWRhdGFiYXNlQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBPd25QdHI8RGF0
YWJhc2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3Jl
YXRlKHRyYW5zYWN0aW9uKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJh
c2VUcmFuc2FjdGlvblRhc2sgJXAgZm9yIHRoZSB0cmFuc2FjdGlvbiBzdGVwXG4iLCB0YXNrLmdl
dCgpKTsKKyAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVU
YXNrKHRhc2sucmVsZWFzZSgpKTsKK30KKworU1FMVHJhbnNhY3Rpb25DbGllbnQqIERhdGFiYXNl
QmFja2VuZEFzeW5jOjp0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRh
dGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNsaWVudCgpOwor
fQorCitTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRhYmFzZUJhY2tlbmRBc3luYzo6dHJh
bnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFz
eW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUJhY2tlbmRBc3luYy5oCShyZXZpc2lvbiAxNDI2MzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEyICsyOSwxOCBAQAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICNpbmNs
dWRlICJEYXRhYmFzZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBD
aGFuZ2VWZXJzaW9uRGF0YTsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgRGF0YWJhc2VTZXJ2ZXI7
CitjbGFzcyBTUUxUcmFuc2FjdGlvbjsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZDsKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50OworY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKIAogLy8gRklYTUU6IFRoaXMgaW1wbGVtZW50YXRpb24gb2YgRGF0YWJhc2VCYWNrZW5kQXN5
bmMgaXMgb25seSBhIHBsYWNlIGhvbGRlcgogLy8gZm9yIHRoZSBzcGxpdCBvdXQgb2YgdGhlIERh
dGFiYXNlIGJhY2tlbmQgdG8gYmUgZG9uZSBsYXRlci4gVGhpcwpAQCAtNDcsNyArNTMsMTMgQEAg
cHVibGljOgogICAgIERhdGFiYXNlQmFja2VuZEFzeW5jKFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNr
ZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZl
cnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdl
KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKwor
ICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBydW5UcmFuc2FjdGlvbihQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiwgYm9vbCByZWFkT25seSwgY29uc3QgQ2hhbmdlVmVyc2lv
bkRhdGEqKTsKKyAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9u
QmFja2VuZCopOworICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisK
KyAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdDsKKyAg
ICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VPcGVuVGFzazsKQEAgLTU1LDYgKzY3
LDE1IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s7CiAgICAg
Y2xhc3MgRGF0YWJhc2VUYWJsZU5hbWVzVGFzazsKIAorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3Jt
T3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9y
JiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9u
KCk7CisKKyAgICBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiA+IG1fdHJhbnNh
Y3Rpb25RdWV1ZTsKKyAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4OworICAg
IGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgYm9vbCBtX2lzVHJhbnNhY3Rpb25R
dWV1ZUVuYWJsZWQ7CisKICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2U7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZENvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAJKHJldmlzaW9uIDE0MjYzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorRGF0
YWJhc2VDb250ZXh0KiBEYXRhYmFzZUJhY2tlbmRDb250ZXh0Ojpmcm9udGVuZCgpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERhdGFiYXNlQ29udGV4dCo+KHRoaXMpOworfQorCiBTZWN1cml0
eU9yaWdpbiogRGF0YWJhc2VCYWNrZW5kQ29udGV4dDo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAog
ewogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlQmFja2VuZENvbnRleHQuaAkocmV2aXNpb24gMTQyNjM4KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNs
YXNzIERhdGFiYXNlQmFja2VuZENvbnRleHQgOiBwdWJsaWMgRGF0YWJhc2VDb250ZXh0IHsKIHB1
YmxpYzoKKyAgICBEYXRhYmFzZUNvbnRleHQqIGZyb250ZW5kKCk7CisKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CiAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE0MjYzOCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEzLDE3ICs0MTMsNiBAQCBib29sIERhdGFiYXNlTWFuYWdlcjo6ZGVs
ZXRlRGF0YWJhc2UoU2VjCiAgICAgcmV0dXJuIG1fc2VydmVyLT5kZWxldGVEYXRhYmFzZShvcmln
aW4sIG5hbWUpOwogfQogCi0vLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJl
YWQgc2FmZSB3aXRoIGl0cyBkYXRhCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6c2NoZWR1bGVOb3Rp
ZnlEYXRhYmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIG1fc2VydmVyLT5zY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChvcmln
aW4sIG5hbWUpOwotfQotCi12b2lkIERhdGFiYXNlTWFuYWdlcjo6ZGF0YWJhc2VDaGFuZ2VkKERh
dGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCi17Ci0gICAgbV9zZXJ2ZXItPmRhdGFiYXNlQ2hhbmdl
ZChkYXRhYmFzZSk7Ci19Ci0KICNlbHNlIC8vIFBMQVRGT1JNKENIUk9NSVVNKQogdm9pZCBEYXRh
YmFzZU1hbmFnZXI6OmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmln
aW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHJldmlz
aW9uIDE0MjYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMSArMTA0LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3JpZ2luKik7CiAgICAgYm9vbCBkZWxldGVE
YXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICAvLyBG
cm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRh
Ci0gICAgdm9pZCBzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1cml0eU9yaWdpbios
IGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICB2b2lkIGRhdGFiYXNlQ2hhbmdlZChEYXRhYmFz
ZUJhY2tlbmQqKTsKLQogI2Vsc2UgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdm9pZCBjbG9z
ZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKICNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2
ZXIuY3BwCShyZXZpc2lvbiAxNDI2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDE3ICsxMjgs
NiBAQCBib29sIERhdGFiYXNlU2VydmVyOjpkZWxldGVEYXRhYmFzZShTZWN1CiAgICAgcmV0dXJu
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRlbGV0ZURhdGFiYXNlKG9yaWdpbiwgbmFtZSk7
CiB9CiAKLS8vIEZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLCBtdXN0IGJlIHRocmVhZCBzYWZlIHdp
dGggaXRzIGRhdGEKLXZvaWQgRGF0YWJhc2VTZXJ2ZXI6OnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VD
aGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdl
ZChvcmlnaW4sIG5hbWUpOwotfQotCi12b2lkIERhdGFiYXNlU2VydmVyOjpkYXRhYmFzZUNoYW5n
ZWQoRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZSkKLXsKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQoZGF0YWJhc2UpOwotfQotCiAjZWxzZSAvLyBQTEFURk9S
TShDSFJPTUlVTSkKIHZvaWQgRGF0YWJhc2VTZXJ2ZXI6OmNsb3NlRGF0YWJhc2VzSW1tZWRpYXRl
bHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVNlcnZlci5oCShyZXZpc2lvbiAxNDI2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2
Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luKik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIC8vIEZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLCBt
dXN0IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwotICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2VCYWNrZW5kKik7
Ci0KICNlbHNlIC8vIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIHZpcnR1YWwgdm9pZCBjbG9zZURh
dGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKICNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAJ
KHJldmlzaW9uIDE0MjYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDggKzE1NSw3IEBAIERhdGFi
YXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW8KIAogdm9pZCBEYXRhYmFzZUJhY2tl
bmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRvUGVyZm9ybVRhc2soKQogewotICAg
IGlmIChtX3RyYW5zYWN0aW9uLT5wZXJmb3JtTmV4dFN0ZXAoKSkKLSAgICAgICAgRGF0YWJhc2U6
OmZyb20obV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSktPmluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNv
bXBsZXRlZCgpOworICAgIG1fdHJhbnNhY3Rpb24tPnBlcmZvcm1OZXh0U3RlcCgpOwogfQogCiAj
aWYgIUxPR19ESVNBQkxFRApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDE0MjYzOCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwyOSArMzEsMjUyIEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQogCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKKyNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVk
ZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50
LmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAi
Vm9pZENhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IFNRTFRyYW5zYWN0aW9uOjpjcmVh
dGUoRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxi
YWNrLAotICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLAotICAgIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQor
ICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAorICAgIGJvb2wgcmVh
ZE9ubHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uKGRiLCBjYWxsYmFjaywg
c3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCByZWFkT25seSkpOwogfQogCiBTUUxUcmFu
c2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLAotICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLAotICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFw
cGVyLCBib29sIHJlYWRPbmx5KQotICAgIDogU1FMVHJhbnNhY3Rpb25CYWNrZW5kKGRiLCBjYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyLCByZWFkT25seSkK
KyAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKKyAgICBib29sIHJl
YWRPbmx5KQorICAgIDogbV9kYXRhYmFzZShkYikKKyAgICAsIG1fY2FsbGJhY2tXcmFwcGVyKGNh
bGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9zdWNjZXNzQ2Fs
bGJhY2tXcmFwcGVyKHN1Y2Nlc3NDYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKKyAgICAsIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIoZXJyb3JDYWxsYmFjaywgZGItPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fZXhlY3V0ZVNxbEFsbG93ZWQoZmFsc2UpCisg
ICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQogeworICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKIH0K
IAotU1FMVHJhbnNhY3Rpb24qIFNRTFRyYW5zYWN0aW9uOjpmcm9tKFNRTFRyYW5zYWN0aW9uQmFj
a2VuZCogYmFja2VuZCkKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OnNldEJhY2tlbmQoU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kKiBiYWNrZW5kKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTUUxUcmFu
c2FjdGlvbio+KGJhY2tlbmQpOworICAgIEFTU0VSVCghbV9iYWNrZW5kKTsKKyAgICBtX2JhY2tl
bmQgPSBiYWNrZW5kOworfQorCitTUUxUcmFuc2FjdGlvbjo6U3RhdGVGdW5jdGlvbiBTUUxUcmFu
c2FjdGlvbjo6c3RhdGVGdW5jdGlvbkZvcihTUUxUcmFuc2FjdGlvblN0YXRlIHN0YXRlKQorewor
ICAgIHN0YXRpYyBjb25zdCBTdGF0ZUZ1bmN0aW9uIHN0YXRlRnVuY3Rpb25zW10gPSB7CisgICAg
ICAgICZTUUxUcmFuc2FjdGlvbjo6dW5yZWFjaGFibGVTdGF0ZSwgICAgICAgICAgICAgICAgLy8g
MC4gaWxsZWdhbAorICAgICAgICAmU1FMVHJhbnNhY3Rpb246OnVucmVhY2hhYmxlU3RhdGUsICAg
ICAgICAgICAgICAgIC8vIDEuIGlkbGUKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uOjp1bnJlYWNo
YWJsZVN0YXRlLCAgICAgICAgICAgICAgICAvLyAyLiBhY3F1aXJlTG9jaworICAgICAgICAmU1FM
VHJhbnNhY3Rpb246OnVucmVhY2hhYmxlU3RhdGUsICAgICAgICAgICAgICAgIC8vIDMuIG9wZW5U
cmFuc2FjdGlvbkFuZFByZWZsaWdodAorICAgICAgICAmU1FMVHJhbnNhY3Rpb246OnNlbmRUb0Jh
Y2tlbmRTdGF0ZSwgICAgICAgICAgICAgIC8vIDQuIHJ1blN0YXRlbWVudHMKKyAgICAgICAgJlNR
TFRyYW5zYWN0aW9uOjp1bnJlYWNoYWJsZVN0YXRlLCAgICAgICAgICAgICAgICAvLyA1LiBwb3N0
ZmxpZ2h0QW5kQ29tbWl0CisgICAgICAgICZTUUxUcmFuc2FjdGlvbjo6c2VuZFRvQmFja2VuZFN0
YXRlLCAgICAgICAgICAgICAgLy8gNi4gY2xlYW51cEFuZFRlcm1pbmF0ZQorICAgICAgICAmU1FM
VHJhbnNhY3Rpb246OnNlbmRUb0JhY2tlbmRTdGF0ZSwgICAgICAgICAgICAgIC8vIDcuIGNsZWFu
dXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaworICAgICAgICAmU1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrLCAgICAgIC8vIDguCisgICAgICAgICZTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaywgLy8gOS4KKyAgICAgICAg
JlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2ssICAgICAgICAvLyAxMC4K
KyAgICAgICAgJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrLCAg
ICAvLyAxMS4KKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNr
ICAgICAgICAgICAvLyAxMi4KKyAgICB9OworCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVv
Zih4KSAvIHNpemVvZih4WzBdKSkKKyAgICBBU1NFUlQoQVJSQVlfU0laRShzdGF0ZUZ1bmN0aW9u
cykgPT0gc3RhdGljX2Nhc3Q8aW50PihTUUxUcmFuc2FjdGlvblN0YXRlOjpOdW1iZXJPZlN0YXRl
cykpOworICAgIEFTU0VSVChzdGF0ZSA8IFNRTFRyYW5zYWN0aW9uU3RhdGU6Ok51bWJlck9mU3Rh
dGVzKTsKKworICAgIHJldHVybiBzdGF0ZUZ1bmN0aW9uc1tzdGF0aWNfY2FzdDxpbnQ+KHN0YXRl
KV07Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OnJlcXVlc3RUcmFuc2l0VG9TdGF0ZShTUUxU
cmFuc2FjdGlvblN0YXRlIG5leHRTdGF0ZSkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVk
dWxpbmcgJXMgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCBuYW1lRm9yU1FMVHJhbnNhY3Rpb25TdGF0
ZShuZXh0U3RhdGUpLCB0aGlzKTsKKyAgICBtX3JlcXVlc3RlZFN0YXRlID0gbmV4dFN0YXRlOwor
ICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKK30KKwor
U1FMVHJhbnNhY3Rpb25TdGF0ZSBTUUxUcmFuc2FjdGlvbjo6bmV4dFN0YXRlRm9yVHJhbnNhY3Rp
b25FcnJvcigpCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25FcnJvcik7CisgICAgaWYgKG1f
ZXJyb3JDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIFNRTFRy
YW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CisKKyAgICAv
LyBObyBlcnJvciBjYWxsYmFjaywgc28gZmFzdC1mb3J3YXJkIHRvOgorICAgIC8vIFRyYW5zYWN0
aW9uIFN0ZXAgMTEgLSBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCisgICAgcmV0dXJuIFNRTFRy
YW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKK30K
KworU1FMVHJhbnNhY3Rpb25TdGF0ZSBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9u
Q2FsbGJhY2soKQoreworICAgIGJvb2wgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSBmYWxz
ZTsKKworICAgIC8vIFNwZWMgNC4zLjIgNDogSW52b2tlIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFj
ayB3aXRoIHRoZSBuZXcgU1FMVHJhbnNhY3Rpb24gb2JqZWN0CisgICAgUmVmUHRyPFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9jYWxsYmFja1dyYXBwZXIudW53cmFwKCk7Cisg
ICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOwor
ICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFjYWxsYmFjay0+aGFuZGxlRXZl
bnQodGhpcyk7CisgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBTcGVjIDQuMy4yIDU6IElmIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgbnVs
bCBvciByYWlzZWQgYW4gZXhjZXB0aW9uLCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjaworICAg
IFNRTFRyYW5zYWN0aW9uU3RhdGUgbmV4dFN0YXRlID0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6UnVu
U3RhdGVtZW50czsKKyAgICBpZiAoc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2spIHsKKyAgICAg
ICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCg1LCBTUUxFcnJvcjo6
VU5LTk9XTl9FUlIsIDApOworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6
Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInRoZSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
IHdhcyBudWxsIG9yIHRocmV3IGFuIGV4Y2VwdGlvbiIpOworICAgICAgICBuZXh0U3RhdGUgPSBT
UUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOworICAg
IH0KKyAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDAsIC0xLCAw
KTsgLy8gT0sKKyAgICByZXR1cm4gbmV4dFN0YXRlOworfQorCitTUUxUcmFuc2FjdGlvblN0YXRl
IFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKK3sKKyAg
ICAvLyBTcGVjIDQuMy4yLjEwOiBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRo
IHRoZSBsYXN0CisgICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0
aW9uLgorICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2sgPSBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIGlmIChlcnJvckNhbGxi
YWNrKSB7CisgICAgICAgIC8vIElmIHdlIGdldCBoZXJlIHdpdGggYW4gZW1wdHkgbV90cmFuc2Fj
dGlvbkVycm9yLCB0aGVuIHRoZSBiYWNrZW5kCisgICAgICAgIC8vIG11c3QgYmUgd2FpdGluZyBp
biB0aGUgaWRsZSBzdGF0ZSB3YWl0aW5nIGZvciB0aGlzIHN0YXRlIHRvIGZpbmlzaC4KKyAgICAg
ICAgLy8gSGVuY2UsIGl0J3MgdGhyZWFkIHNhZmUgdG8gZmV0Y2ggdGhlIGJhY2tlbmQgdHJhbnNh
Y3Rpb25FcnJvciB3aXRob3V0CisgICAgICAgIC8vIGEgbG9jay4KKyAgICAgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uRXJyb3IpCisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX2JhY2tl
bmQtPnRyYW5zYWN0aW9uRXJyb3IoKTsKKworICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkVy
cm9yKTsKKyAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlvbkVy
cm9yLmdldCgpKTsKKworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSAwOworICAgIH0KKwor
ICAgIGNsZWFyQ2FsbGJhY2tXcmFwcGVycygpOworCisgICAgLy8gU3BlYyA0LjMuMi4xMDogUm9s
bGJhY2sgdGhlIHRyYW5zYWN0aW9uLgorICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpD
bGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7Cit9CisKK1NRTFRyYW5zYWN0aW9u
U3RhdGUgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygpCit7CisgICAg
QVNTRVJUKG1fYmFja2VuZC0+bV9jdXJyZW50U3RhdGVtZW50KTsKKworICAgIC8vIFNwZWMgNC4z
LjIuNi42IGFuZCA0LjMuMi42LjM6IElmIHRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgd2VudCB3cm9u
ZywganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sKKyAgICAvLyBPdGhlcndp
c2UsIGNvbnRpbnVlIHRvIGxvb3AgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHF1ZXVlCisgICAgbV9l
eGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7CisgICAgYm9vbCByZXN1bHQgPSBtX2JhY2tlbmQtPm1f
Y3VycmVudFN0YXRlbWVudC0+cGVyZm9ybUNhbGxiYWNrKHRoaXMpOworICAgIG1fZXhlY3V0ZVNx
bEFsbG93ZWQgPSBmYWxzZTsKKworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgbV9kYXRhYmFz
ZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMiwgU1FMRXJyb3I6OlVOS05PV05fRVJS
LCAwKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxF
cnJvcjo6VU5LTk9XTl9FUlIsICJ0aGUgc3RhdGVtZW50IGNhbGxiYWNrIHJhaXNlZCBhbiBleGNl
cHRpb24gb3Igc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrIGRpZCBub3QgcmV0dXJuIGZhbHNlIik7
CisgICAgICAgIHJldHVybiBuZXh0U3RhdGVGb3JUcmFuc2FjdGlvbkVycm9yKCk7CisgICAgfQor
ICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpSdW5TdGF0ZW1lbnRzOworfQorCitTUUxU
cmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxi
YWNrKCkKK3sKKyAgICBBU1NFUlQobV9iYWNrZW5kLT5tX2N1cnJlbnRTdGF0ZW1lbnQpOworCisg
ICAgYm9vbCBzaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgpKTsKKyAgICBtX2JhY2tlbmQt
PnNldFNob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChzaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1l
bnQpOworCisgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OlJ1blN0YXRlbWVudHM7Cit9
CisKK1NRTFRyYW5zYWN0aW9uU3RhdGUgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2Fs
bGJhY2soKQoreworICAgIC8vIFNwZWMgNC4zLjIuODogRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNr
LgorICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0Nh
bGxiYWNrV3JhcHBlci51bndyYXAoKTsKKyAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKQorICAgICAg
ICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CisKKyAgICBjbGVhckNhbGxiYWNrV3Jh
cHBlcnMoKTsKKworICAgIC8vIFNjaGVkdWxlIGEgInBvc3Qtc3VjY2VzcyBjYWxsYmFjayIgc3Rl
cCB0byByZXR1cm4gY29udHJvbCB0byB0aGUgZGF0YWJhc2UgdGhyZWFkIGluIGNhc2UgdGhlcmUK
KyAgICAvLyBhcmUgZnVydGhlciB0cmFuc2FjdGlvbnMgcXVldWVkIHVwIGZvciB0aGlzIERhdGFi
YXNlCisgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBbmRUZXJtaW5hdGU7
Cit9CisKKy8vIFRoaXMgc3RhdGUgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIHN0dWIgZnVuY3Rpb24g
dG8gcGx1ZyB1bmltcGxlbWVudGVkIHN0YXRlcworLy8gaW4gdGhlIHN0YXRlIGRpc3BhdGNoIHRh
YmxlLiBUaGV5IGFyZSB1bmltcGxlbWVudGVkIGJlY2F1c2UgdGhleSBzaG91bGQKKy8vIG5ldmVy
IGJlIHJlYWNoZWQgaW4gdGhlIGNvdXJzZSBvZiBjb3JyZWN0IGV4ZWN1dGlvbi4KK1NRTFRyYW5z
YWN0aW9uU3RhdGUgU1FMVHJhbnNhY3Rpb246OnVucmVhY2hhYmxlU3RhdGUoKQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpFbmQ7
Cit9CisKK1NRTFRyYW5zYWN0aW9uU3RhdGUgU1FMVHJhbnNhY3Rpb246OnNlbmRUb0JhY2tlbmRT
dGF0ZSgpCit7CisgICAgQVNTRVJUKG1fbmV4dFN0YXRlICE9IFNRTFRyYW5zYWN0aW9uU3RhdGU6
OklkbGUpOworICAgIG1fYmFja2VuZC0+cmVxdWVzdFRyYW5zaXRUb1N0YXRlKG1fbmV4dFN0YXRl
KTsKKyAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZTsKK30KKwordm9pZCBTUUxU
cmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpCit7CisgICAgTE9HKFN0b3JhZ2VB
UEksICJDYWxsYmFjayAlc1xuIiwgbmFtZUZvclNRTFRyYW5zYWN0aW9uU3RhdGUobV9uZXh0U3Rh
dGUpKTsKKworICAgIHNldFN0YXRlVG9SZXF1ZXN0ZWRTdGF0ZSgpOworICAgIEFTU0VSVChtX25l
eHRTdGF0ZSA9PSBTUUxUcmFuc2FjdGlvblN0YXRlOjpFbmQKKyAgICAgICAgfHwgbV9uZXh0U3Rh
dGUgPT0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sKKyAg
ICAgICAgfHwgbV9uZXh0U3RhdGUgPT0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaworICAgICAgICB8fCBtX25leHRTdGF0ZSA9PSBTUUxUcmFuc2Fj
dGlvblN0YXRlOjpEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sKKyAgICAgICAgfHwgbV9uZXh0U3Rh
dGUgPT0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjawor
ICAgICAgICB8fCBtX25leHRTdGF0ZSA9PSBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyU3Vj
Y2Vzc0NhbGxiYWNrKTsKKworICAgIGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERh
dGFiYXNlKCk7CisgICAgcnVuU3RhdGVNYWNoaW5lKCk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rp
b246OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxT
UUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2Fs
bGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gY2FsbGJhY2tFcnJv
ciwgRXhjZXB0aW9uQ29kZSYgZSkKK3sKKyAgICBpZiAoIW1fZXhlY3V0ZVNxbEFsbG93ZWQgfHwg
IW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7CisgICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBwZXJtaXNzaW9ucyA9IERhdGFiYXNl
QXV0aG9yaXplcjo6UmVhZFdyaXRlTWFzazsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmRhdGFiYXNl
Q29udGV4dCgpLT5hbGxvd0RhdGFiYXNlQWNjZXNzKCkpCisgICAgICAgIHBlcm1pc3Npb25zIHw9
IERhdGFiYXNlQXV0aG9yaXplcjo6Tm9BY2Nlc3NNYXNrOworICAgIGVsc2UgaWYgKG1fcmVhZE9u
bHkpCisgICAgICAgIHBlcm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZE9ubHlN
YXNrOworCisgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50ID0gU1FMU3RhdGVtZW50
OjpjcmVhdGUobV9kYXRhYmFzZS5nZXQoKSwgc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxi
YWNrLCBjYWxsYmFja0Vycm9yLCBwZXJtaXNzaW9ucyk7CisKKyAgICBpZiAobV9kYXRhYmFzZS0+
ZGVsZXRlZCgpKQorICAgICAgICBzdGF0ZW1lbnQtPnNldERhdGFiYXNlRGVsZXRlZEVycm9yKG1f
ZGF0YWJhc2UuZ2V0KCkpOworCisgICAgbV9iYWNrZW5kLT5lbnF1ZXVlU3RhdGVtZW50KHN0YXRl
bWVudCk7Cit9CisKK2Jvb2wgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJ
bnRlcnJ1cHRlZERhdGFiYXNlKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZS0+b3BlbmVkKCkgJiYg
IW1fZGF0YWJhc2UtPmlzSW50ZXJydXB0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY2xlYXJDYWxsYmFja1dyYXBwZXJzKCk7CisgICAgbV9uZXh0U3RhdGUgPSBTUUxUcmFuc2Fj
dGlvblN0YXRlOjpDbGVhbnVwQW5kVGVybWluYXRlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFyQ2FsbGJhY2tXcmFwcGVycygpCit7CisgICAgLy8g
UmVsZWFzZSB0aGUgdW5uZWVkZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVz
LgorICAgIG1fY2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7CisgICAgbV9zdWNjZXNzQ2FsbGJhY2tX
cmFwcGVyLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiAxNDI2MzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDIwICszMSw3OSBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKIAotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIlNRTENh
bGxiYWNrV3JhcHBlci5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
U1FMVHJhbnNhY3Rpb24gOiBwdWJsaWMgU1FMVHJhbnNhY3Rpb25CYWNrZW5kIHsKK2NsYXNzIERh
dGFiYXNlOworY2xhc3MgU1FMRXJyb3I7CitjbGFzcyBTUUxTdGF0ZW1lbnRDYWxsYmFjazsKK2Ns
YXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrOworY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBWb2lkQ2FsbGJhY2s7CisKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uIDogcHVibGljIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lPFNR
TFRyYW5zYWN0aW9uPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb24+IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFj
az4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNr
PiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5ID0gZmFs
c2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBjcmVhdGUoRGF0YWJh
c2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LAorICAgICAgICBQYXNzUmVm
UHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4sCisgICAgICAgIGJvb2wgcmVhZE9ubHkpOworCisgICAgdm9pZCBz
ZXRCYWNrZW5kKFNRTFRyYW5zYWN0aW9uQmFja2VuZCopOworCisgICAgdm9pZCBwZXJmb3JtUGVu
ZGluZ0NhbGxiYWNrKCk7CisKKyAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxT
dGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywKKyAgICAgICAgUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHN0YXRpYyBTUUxUcmFuc2FjdGlv
biogZnJvbShTUUxUcmFuc2FjdGlvbkJhY2tlbmQqKTsKKyAgICBEYXRhYmFzZSogZGF0YWJhc2Uo
KSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CisKKyAgICBib29sIGhhc0NhbGxiYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKTsgfQorICAgIGJv
b2wgaGFzU3VjY2Vzc0NhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzQ2FsbGJhY2tX
cmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KKyAgICBib29sIGhhc0Vycm9yQ2FsbGJhY2soKSBjb25z
dCB7IHJldHVybiBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KIAogcHJp
dmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwK
LSAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CisgICAgU1FMVHJhbnNhY3Rp
b24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LAorICAgICAg
ICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCisgICAgICAgIGJvb2wgcmVhZE9ubHkpOworCisg
ICAgYm9vbCBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpOworICAg
IHZvaWQgY2xlYXJDYWxsYmFja1dyYXBwZXJzKCk7CisKKyAgICAvLyBTdGF0ZSBNYWNoaW5lIGZ1
bmN0aW9uczoKKyAgICB2aXJ0dWFsIFN0YXRlRnVuY3Rpb24gc3RhdGVGdW5jdGlvbkZvcihTUUxU
cmFuc2FjdGlvblN0YXRlKTsKKyAgICB2b2lkIHJlcXVlc3RUcmFuc2l0VG9TdGF0ZShTUUxUcmFu
c2FjdGlvblN0YXRlKTsKKworICAgIC8vIFN0YXRlIGZ1bmN0aW9uczoKKyAgICBTUUxUcmFuc2Fj
dGlvblN0YXRlIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCk7CisgICAgU1FMVHJhbnNhY3Rp
b25TdGF0ZSBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7CisgICAgU1FMVHJhbnNh
Y3Rpb25TdGF0ZSBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2soKTsKKyAgICBTUUxUcmFuc2FjdGlv
blN0YXRlIGRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2soKTsKKyAgICBTUUxUcmFuc2FjdGlv
blN0YXRlIGRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2soKTsKKworICAgIFNRTFRyYW5zYWN0aW9uU3Rh
dGUgdW5yZWFjaGFibGVTdGF0ZSgpOworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgc2VuZFRvQmFj
a2VuZFN0YXRlKCk7CisKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIG5leHRTdGF0ZUZvclRyYW5z
YWN0aW9uRXJyb3IoKTsKKworICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAgICBS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBtX2JhY2tlbmQ7CisgICAgU1FMQ2FsbGJhY2tX
cmFwcGVyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2tXcmFwcGVyOworICAgIFNR
TENhbGxiYWNrV3JhcHBlcjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcjsK
KyAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vy
cm9yQ2FsbGJhY2tXcmFwcGVyOworCisgICAgYm9vbCBtX2V4ZWN1dGVTcWxBbGxvd2VkOworICAg
IFJlZlB0cjxTUUxFcnJvcj4gbV90cmFuc2FjdGlvbkVycm9yOworCisgICAgYm9vbCBtX3JlYWRP
bmx5OworCisgICAgZnJpZW5kIGNsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAJKHJldmlz
aW9uIDE0MjYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMjAgKzM5LDEzIEBACiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNRTEVycm9yLmgiCiAjaW5jbHVkZSAiU1FM
U3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKLSNpbmNsdWRl
ICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2Fs
bGJhY2suaCIgLy8gRklYTUU6IHJlbW92ZSB3aGVuIFNRTFN0YXRlbWVudCBoYXMgYmVlbiByZWZh
Y3RvcmVkLgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIgLy8gRklYTUU6
IHJlbW92ZSB3aGVuIFNRTFN0YXRlbWVudCBoYXMgYmVlbiByZWZhY3RvcmVkLgogI2luY2x1ZGUg
IlNRTFRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgog
I2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5o
IgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIK
LSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiVm9pZENhbGxi
YWNrLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiAKQEAgLTYwLDExNCArNTMsMTY1IEBACiAvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KIC8vIFRoZSBTUUxUcmFuc2FjdGlvbiBpcyBhIHN0YXRlIG1hY2hpbmUgdGhhdCBl
eGVjdXRlcyBhIHNlcmllcyBvZiBzdGF0ZXMgLyBzdGVwcy4KIC8vCi0vLyB0aHMgU3RhdGUgVHJh
bnNpdGlvbiBHcmFwaCBhdCBhIGdsYW5jZToKKy8vIHRoZSBTdGF0ZSBUcmFuc2l0aW9uIEdyYXBo
IGF0IGEgZ2xhbmNlOgogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
IC8vCi0vLyAgICBCYWNrZW5kICh3b3JrcyB3aXRoIFNRTGl0ZURhdGFiYXNlKSAgICAgICAgICAu
ICAgRnJvbnRlbmQgKHdvcmtzIHdpdGggU2NyaXB0KQotLy8gICAgPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0gICAgICAgICAgLiAgID09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS8vICAgLC0tPiBTdGF0ZSAwOiBbaW5pdGlhbCBzdGF0ZV0gICAgICAgICAgICAgICAgIC4K
LS8vICAgfCBeICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLS8v
ICAgfCB8ICBTdGF0ZSAxOiBbYWNxdWlyZUxvY2tdICAgICAgICAgICAgICAgICAgIC4KLS8vICAg
fCB8ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLS8vICAgfCB8
ICBTdGF0ZSAyOiBbb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0XSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotLy8gICB8IHwgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyAgIHwgfCAgICAgYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gU3RhdGUgMzogW2RlbGl2ZXJUcmFuc2FjdGlvbkNh
bGxiYWNrXSAtLS0tLS4gIHwKLS8vICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdiAgdgotLy8gICB8IHwgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLScgICAgIFN0YXRlIDEwOiBbZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
a10gKwotLy8gICB8IHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICBeICBeICAg
fAotLy8gICB8IHwgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8ICAgfAot
Ly8gICB8IHwgIFN0YXRlIDQ6IFtydW5TdGF0ZW1lbnRzXSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICB8ICB8ICAgfAotLy8g
ICB8IHwgICAgIHwgICAgICAgIF4gIF4gfCAgXiB8ICAgICAgICAgICAgICAgICAgLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgfAotLy8gICB8
IHwgICAgIHwtLS0tLS0tLScgIHwgfCAgfCBgLS0tLS0tLS0tLS0tLS0tLS0tLS0+IFN0YXRlIDg6
IFtkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2tdICstLS0tLS0tLS0nICB8ICAgfAotLy8gICB8IHwg
ICAgIHwgICAgICAgICAgIHwgfCAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgICAgICAgICB8ICAgfAotLy8gICB8IHwgICAg
IHwgICAgICAgICAgIHwgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IFN0YXRlIDk6IFtkZWxp
dmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrXSArICAgICAgICB8ICAgfAotLy8gICB8IHwgICAgIHwg
ICAgICAgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICAgICAgICB8ICAgfAotLy8gICB8IHwgICAgIHYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAotLy8gICB8IHwgIFN0YXRlIDU6IFtw
b3N0ZmxpZ2h0QW5kQ29tbWl0XSAtLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICAgfAotLy8gICB8IHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0+IFN0YXRlIDY6IFtkZWxpdmVyU3VjY2Vzc0Nh
bGxiYWNrXSArICAgICAgICAgICAgICAgICAgfAotLy8gICB8IHwgICAgICwtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLScgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgfAotLy8gICB8IHwgICAgIHYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgfAotLy8gICB8IHwgIFN0YXRlIDc6IFtjbGVhbnVwQWZ0ZXJT
dWNjZXNzQ2FsbGJhY2tdIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0n
ICAgICAgICAgICAgICAgICAgfAotLy8gICB8IGAtLS0tLScgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAotLy8gICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tJwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLgorLy8gICAgIEJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICBG
cm9udGVuZAorLy8gICAgICh3b3JrcyB3aXRoIFNRTGl0ZURhdGFiYXNlKSAgICAgIC4gICAod29y
a3Mgd2l0aCBTY3JpcHQpCisvLyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAg
LiAgID09PT09PT09PT09PT09PT09PT0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuCisvLyAgICAgMS4gSWRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgLgorLy8g
ICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKy8vICAgICAyLiBBY3F1aXJl
TG9jayAgICAgICAgICAgICAgICAgICAuCisvLyAgICAgICAgIHYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLgorLy8gICAgIDMuIE9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisvLyAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKy8vICAgICAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IDguIERl
bGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIC0tLiAgfAorLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC4gICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICB2
CisvLyAgICAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyAgIDku
IERlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgKworLy8gICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe
ICBeICBeICAgIHwKKy8vICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgfCAgICB8CisvLyAgICAgNC4g
UnVuU3RhdGVtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLScgIHwgIHwgICAgfAorLy8gICAgICAgICB8ICAgICAgICBeICBeIHwgIF4gfCAg
ICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgIHwK
Ky8vICAgICAgICAgfC0tLS0tLS0tJyAgfCB8ICB8IGAtLS0tLS0tLS0tLS0+IDEwLiBEZWxpdmVy
U3RhdGVtZW50Q2FsbGJhY2sgKy0tLS0tJyAgfCAgICB8CisvLyAgICAgICAgIHwgICAgICAgICAg
IHwgfCAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAg
ICAgIHwgICAgfAorLy8gICAgICAgICB8ICAgICAgICAgICB8IGAtLS0tLS0tLS0tLS0tLS0tLT4g
MTEuIERlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sgKyAgICB8ICAgIHwKKy8vICAgICAgICAg
fCAgICAgICAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLScgICAgfCAgICB8CisvLyAgICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAor
Ly8gICAgIDUuIFBvc3RmbGlnaHRBbmRDb21taXQgLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfC0tLS0tLS0tLS0+IDEyLiBEZWxpdmVyU3VjY2Vzc0NhbGxiYWNrICsgICAgICAg
ICAgICAgICB8CisvLyAgICAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgICAgLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorLy8gICAgICAgICB2
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgIHwKKy8vICAgICA2LiBDbGVhbnVwQW5kVGVybWluYXRlIDwtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgICAgICAgICAgICB8Cisv
LyAgICAgICAgIHYgICAgICAgICAgIF4gICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgIDAuIEVuZCAgICAgICAgICB8
ICAgICAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAuICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICAg
ICAgICA3OiBDbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgPC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLgogLy8KIC8vIHRoZSBTdGF0ZXMgYW5kIFN0YXRlIFRyYW5zaXRpb25zOgogLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEV4ZWN1dGVkIGluIHRoZSBiYWNrLWVuZDoK
LS8vICAgICBTdGF0ZSAwOiBbaW5pdGlhbCBzdGF0ZV0KLS8vICAgICAtIE9uIHNjaGVkdWxlZCB0
cmFuc2FjdGlvbiwgZ290byBbYWNxdWlyZUxvY2tdLgotLy8KLS8vICAgICBTdGF0ZSAxOiBbYWNx
dWlyZUxvY2tdCi0vLyAgICAgLSBhY3F1aXJlIGxvY2suCi0vLyAgICAgLSBvbiAibG9jayIgYWNx
dWlzaXRpb24sIGdvdG8gW29wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodF0uCi0vLwotLy8gICAg
IFN0YXRlIDI6IFtvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHRdCi0vLyAgICAgLSBTZXRzIHVw
IGFuIFNRTGl0ZVRyYW5zYWN0aW9uLgotLy8gICAgIC0gYmVnaW4gdGhlIFNRTGl0ZVRyYW5zYWN0
aW9uLgotLy8gICAgIC0gY2FsbCB0aGUgU1FMVHJhbnNhY3Rpb25XcmFwcGVyIHByZWZsaWdodCBp
ZiBhdmFpbGFibGUuCi0vLyAgICAgLSBzY2hlZHVsZSBzY3JpcHQgY2FsbGJhY2suCi0vLyAgICAg
LSBvbiBlcnJvciAoc2VlIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IpLCBnb3RvIFtkZWxpdmVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrXS4KLS8vICAgICAtIGdvdG8gW2RlbGl2ZXJUcmFuc2FjdGlv
bkNhbGxiYWNrXS4KLS8vCi0vLyBFeGVjdXRlZCBpbiB0aGUgZnJvbnQtZW5kOgotLy8gICAgIFN0
YXRlIDM6IFtkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFja10KLS8vICAgICAtIGludm9rZSB0aGUg
c2NyaXB0IGZ1bmN0aW9uIGNhbGxiYWNrKCkgaWYgYXZhaWxhYmxlLgotLy8gICAgIC0gb24gZXJy
b3IsIGdvdG8gW2RlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2tdLgotLy8gICAgIC0gZ290
byBbcnVuU3RhdGVtZW50c10uCi0vLwotLy8gRXhlY3V0ZWQgaW4gdGhlIGJhY2stZW5kOgotLy8g
ICAgIFN0YXRlIDQ6IFtydW5TdGF0ZW1lbnRzXQotLy8gICAgIC0gd2hpbGUgdGhlcmUgYXJlIHN0
YXRlbWVudHMgewotLy8gICAgICAgICAtIHJ1biBhIHN0YXRlbWVudC4KLS8vICAgICAgICAgLSBp
ZiBzdGF0ZW1lbnRDYWxsYmFjayBpcyBhdmFpbGFibGUsIGdvdG8gW2RlbGl2ZXJTdGF0ZW1lbnRD
YWxsYmFja10uCi0vLyAgICAgICAgIC0gb24gZXJyb3IsCi0vLyAgICAgICAgICAgZ290byBbZGVs
aXZlclF1b3RhSW5jcmVhc2VDYWxsYmFja10sIG9yCi0vLyAgICAgICAgICAgZ290byBbZGVsaXZl
clN0YXRlbWVudENhbGxiYWNrXSAoc2VlIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvciksIG9y
Ci0vLyAgICAgICAgICAgZ290byBbZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja10uCi0v
LyAgICAgICB9Ci0vLyAgICAgLSBnb3RvIFtwb3N0ZmxpZ2h0QW5kQ29tbWl0XS4KLS8vCi0vLyAg
ICAgU3RhdGUgNTogW3Bvc3RmbGlnaHRBbmRDb21taXRdCi0vLyAgICAgLSBjYWxsIHRoZSBTUUxU
cmFuc2FjdGlvbldyYXBwZXIgcG9zdGZsaWdodCBpZiBhdmFpbGFibGUuCi0vLyAgICAgLSBjb21t
aXQgdGhlIFNRTGl0ZVRhbnNhY3Rpb24uCi0vLyAgICAgLSBvbiBlcnJvciwgZ290byBbZGVsaXZl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja10gKHNlZSBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKS4K
LS8vICAgICAtIGlmIHN1Y2Nlc3NDYWxsYmFjayBpcyBhdmFpbGFibGUsIGdvdG8gW2RlbGl2ZXJT
dWNjZXNzQ2FsbGJhY2tdLgotLy8gICAgICAgZWxzZSBnb3RvIFtjbGVhbnVwQWZ0ZXJTdWNjZXNz
Q2FsbGJhY2tdLgotLy8KLS8vIEV4ZWN1dGVkIGluIHRoZSBmcm9udC1lbmQ6Ci0vLyAgICAgU3Rh
dGUgNjogW2RlbGl2ZXJTdWNjZXNzQ2FsbGJhY2tdCi0vLyAgICAgLSBpbnZva2UgdGhlIHNjcmlw
dCBmdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2soKSBpZiBhdmFpbGFibGUuCi0vLyAgICAgLSBnb3Rv
IFtjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2tdLgotLy8KLS8vIEV4ZWN1dGVkIGluIHRoZSBi
YWNrLWVuZDoKLS8vICAgICBTdGF0ZSA3OiBbY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrXQot
Ly8gICAgIC0gY2xlYW4gdGhlIFNRTGl0ZVRyYW5zYWN0aW9uLgotLy8gICAgIC0gcmVsZWFzZSBs
b2NrLgotLy8gICAgIC0gZ290byBbaW5pdGlhbCBzdGF0ZV0uCi0vLwotLy8gT3RoZXIgc3RhdGVz
OgotLy8gRXhlY3V0ZWQgaW4gdGhlIGZyb250LWVuZDoKLS8vICAgICBTdGF0ZSA4OiBbZGVsaXZl
clN0YXRlbWVudENhbGxiYWNrXQotLy8gICAgIC0gaW52b2tlIHNjcmlwdCBzdGF0ZW1lbnQgY2Fs
bGJhY2sgKGFzc3VtZSBhdmFpbGFibGUpLgotLy8gICAgIC0gb24gZXJyb3IgKHNlZSBoYW5kbGVU
cmFuc2FjdGlvbkVycm9yKSwKLS8vICAgICAgIGdvdG8gW2RlbGl2ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2tdLgotLy8gICAgIC0gZ290byBbcnVuU3RhdGVtZW50c10uCi0vLwotLy8gICAgIFN0
YXRlIDk6IFtkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrXQotLy8gICAgIC0gZ2l2ZSBjbGll
bnQgYSBjaGFuY2UgdG8gaW5jcmVhc2UgdGhlIHF1b3RhLgotLy8gICAgIC0gZ290byBbcnVuU3Rh
dGVtZW50c10uCi0vLwotLy8gICAgIFN0YXRlIDEwOiBbZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFja10KLS8vICAgICAtIGludm9rZSB0aGUgc2NyaXB0IGZ1bmN0aW9uIGVycm9yQ2FsbGJh
Y2sgaWYgYXZhaWxhYmxlLgotLy8gICAgIC0gZ290byBbY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrXS4KLS8vCi0vLyBFeGVjdXRlZCBpbiB0aGUgYmFjay1lbmQ6Ci0vLyAgICAg
U3RhdGUgMTE6IFtjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2tdCi0vLyAgICAg
LSByb2xsYmFjayBhbmQgY2xlYXIgU1FMaXRlVHJhbnNhY3Rpb24uCi0vLyAgICAgLSBjbGVhciBz
dGF0ZW1lbnRzLgotLy8gICAgIC0gcmVsZWFzZSBsb2NrLgotLy8gICAgIC0gZ290byBbaW5pdGlh
bCBzdGF0ZV0uCisvLyAgICAgMC4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RW5kCisvLyAgICAgICAg
IC0gdGhlIGVuZCBzdGF0ZS4KKy8vCisvLyAgICAgMS4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRs
ZQorLy8gICAgICAgICAtIHBsYWNlaG9sZGVyIHN0YXRlIHdoaWxlIHdhaXRpbmcgb24gZnJvbnRl
bmQvYmFja2VuZCwgZXRjLgorLy8KKy8vICAgICAyLiBTUUxUcmFuc2FjdGlvblN0YXRlOjpBY3F1
aXJlTG9jayAocnVucyBpbiBiYWNrZW5kKQorLy8gICAgICAgICAtIHRoaXMgaXMgdGhlIHN0YXJ0
IHN0YXRlLgorLy8gICAgICAgICAtIGFjcXVpcmUgdGhlICJsb2NrIi4KKy8vICAgICAgICAgLSBv
biAibG9jayIgYWNxdWlzaXRpb24sIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6T3BlblRyYW5z
YWN0aW9uQW5kUHJlZmxpZ2h0LgorLy8KKy8vICAgICAzLiBTUUxUcmFuc2FjdGlvblN0YXRlOjpv
cGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgKHJ1bnMgaW4gYmFja2VuZCkKKy8vICAgICAgICAg
LSBTZXRzIHVwIGFuIFNRTGl0ZVRyYW5zYWN0aW9uLgorLy8gICAgICAgICAtIGJlZ2luIHRoZSBT
UUxpdGVUcmFuc2FjdGlvbi4KKy8vICAgICAgICAgLSBjYWxsIHRoZSBTUUxUcmFuc2FjdGlvbldy
YXBwZXIgcHJlZmxpZ2h0IGlmIGF2YWlsYWJsZS4KKy8vICAgICAgICAgLSBzY2hlZHVsZSBzY3Jp
cHQgY2FsbGJhY2suCisvLyAgICAgICAgIC0gb24gZXJyb3IsIGdvdG8gU1FMVHJhbnNhY3Rpb25T
dGF0ZTo6RGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay4KKy8vICAgICAgICAgLSBnb3Rv
IFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrLgorLy8KKy8v
ICAgICA0LiBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayAo
cnVucyBpbiBmcm9udGVuZCkKKy8vICAgICAgICAgLSBpbnZva2UgdGhlIHNjcmlwdCBmdW5jdGlv
biBjYWxsYmFjaygpIGlmIGF2YWlsYWJsZS4KKy8vICAgICAgICAgLSBvbiBlcnJvciwgZ290byBT
UUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLgorLy8g
ICAgICAgICAtIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6UnVuU3RhdGVtZW50cy4KKy8vCisv
LyAgICAgNS4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjayAocnVucyBpbiBmcm9udGVuZCkKKy8vICAgICAgICAgLSBpbnZva2UgdGhlIHNjcmlwdCBm
dW5jdGlvbiBlcnJvckNhbGxiYWNrIGlmIGF2YWlsYWJsZS4KKy8vICAgICAgICAgLSBnb3RvIFNR
TFRyYW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay4K
Ky8vCisvLyAgICAgNi4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6UnVuU3RhdGVtZW50cyAocnVucyBp
biBiYWNrZW5kKQorLy8gICAgICAgICAtIHdoaWxlIHRoZXJlIGFyZSBzdGF0ZW1lbnRzIHsKKy8v
ICAgICAgICAgICAgIC0gcnVuIGEgc3RhdGVtZW50LgorLy8gICAgICAgICAgICAgLSBpZiBzdGF0
ZW1lbnRDYWxsYmFjayBpcyBhdmFpbGFibGUsIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVs
aXZlclN0YXRlbWVudENhbGxiYWNrLgorLy8gICAgICAgICAgICAgLSBvbiBlcnJvciwKKy8vICAg
ICAgICAgICAgICAgZ290byBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyUXVvdGFJbmNyZWFz
ZUNhbGxiYWNrLCBvcgorLy8gICAgICAgICAgICAgICBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6
OkRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaywgb3IKKy8vICAgICAgICAgICAgICAgZ290byBTUUxU
cmFuc2FjdGlvblN0YXRlOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLgorLy8gICAg
ICAgICAgIH0KKy8vICAgICAgICAgLSBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OlBvc3RmbGln
aHRBbmRDb21taXQuCisvLworLy8gICAgIDcuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJT
dGF0ZW1lbnRDYWxsYmFjayAocnVucyBpbiBmcm9udGVuZCkKKy8vICAgICAgICAgLSBpbnZva2Ug
c2NyaXB0IHN0YXRlbWVudCBjYWxsYmFjayAoYXNzdW1lIGF2YWlsYWJsZSkuCisvLyAgICAgICAg
IC0gb24gZXJyb3IsIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay4KKy8vICAgICAgICAgLSBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OlJ1
blN0YXRlbWVudHMuCisvLworLy8gICAgIDguIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJR
dW90YUluY3JlYXNlQ2FsbGJhY2sgKHJ1bnMgaW4gZnJvbnRlbmQpCisvLyAgICAgICAgIC0gZ2l2
ZSBjbGllbnQgYSBjaGFuY2UgdG8gaW5jcmVhc2UgdGhlIHF1b3RhLgorLy8gICAgICAgICAtIGdv
dG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6UnVuU3RhdGVtZW50cy4KKy8vCisvLyAgICAgOS4gU1FM
VHJhbnNhY3Rpb25TdGF0ZTo6UG9zdGZsaWdodEFuZENvbW1pdCAocnVucyBpbiBiYWNrZW5kKQor
Ly8gICAgICAgICAtIGNhbGwgdGhlIFNRTFRyYW5zYWN0aW9uV3JhcHBlciBwb3N0ZmxpZ2h0IGlm
IGF2YWlsYWJsZS4KKy8vICAgICAgICAgLSBjb21taXQgdGhlIFNRTGl0ZVRhbnNhY3Rpb24uCisv
LyAgICAgICAgIC0gb24gZXJyb3IsIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay4KKy8vICAgICAgICAgLSBpZiBzdWNjZXNzQ2FsbGJhY2sg
aXMgYXZhaWxhYmxlLCBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJTdWNjZXNzQ2Fs
bGJhY2suCisvLyAgICAgICAgICAgZWxzZSBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkNsZWFu
dXBBbmRUZXJtaW5hdGUuCisvLworLy8gICAgIDEwLiBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxp
dmVyU3VjY2Vzc0NhbGxiYWNrIChydW5zIGluIGZyb250ZW5kKQorLy8gICAgICAgICAtIGludm9r
ZSB0aGUgc2NyaXB0IGZ1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaygpIGlmIGF2YWlsYWJsZS4KKy8v
ICAgICAgICAgLSBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBbmRUZXJtaW5hdGUu
CisvLworLy8gICAgIDExLiBTUUxUcmFuc2FjdGlvblN0YXRlOjpDbGVhbnVwQW5kVGVybWluYXRl
IChydW5zIGluIGJhY2tlbmQpCisvLyAgICAgICAgIC0gc3RvcCBhbmQgY2xlYXIgdGhlIFNRTGl0
ZVRyYW5zYWN0aW9uLgorLy8gICAgICAgICAtIHJlbGVhc2UgdGhlICJsb2NrIi4KKy8vICAgICAg
ICAgLSBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkVuZC4KKy8vCisvLyAgICAgMTIuIFNRTFRy
YW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayAocnVu
cyBpbiBiYWNrZW5kKQorLy8gICAgICAgICAtIHJvbGxiYWNrIHRoZSBTUUxpdGVUcmFuc2FjdGlv
bi4KKy8vICAgICAgICAgLSBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBbmRUZXJt
aW5hdGUuCisKKworLy8gVGhlIExpZmUtQ3ljbGUgb2YgYSBTUUxUcmFuc2FjdGlvbiBpLmUuIFdo
bydzIGtlZXBpbmcgdGhlIFNRTFRyYW5zYWN0aW9uQWxpdmU/IAorLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KKy8vIFRoZSBSZWZQdHIgY2hhaW4gZ29lcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorLy8K
Ky8vICAgICBBdCBiaXJ0aCAoaW4gRGF0YWJhc2VCYWNrZW5kQXN5bmM6OnJ1blRyYW5zYWN0aW9u
KCkpOgorLy8gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vICAgICBEYXRhYmFzZUJhY2tlbmRBc3luYyAgICAgICAgICAgICAgIC8vIGlu
IERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+ID4gbV90cmFuc2FjdGlvblF1ZXVl
IHBvaW50cyB0byAuLi4KKy8vICAgICAtLT4gU1FMVHJhbnNhY3Rpb25CYWNrZW5kICAgICAgICAg
IC8vIGluIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gbV9mcm9udGVuZCBwb2ludHMgdG8gLi4uCisv
LyAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbiAgICAgICAgICAgICAvLyBpbiBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25CYWNrZW5kPiBtX2JhY2tlbmQgcG9pbnRzIHRvIC4uLgorLy8gICAgICAgICAg
ICAgLS0+IFNRTFRyYW5zYWN0aW9uQmFja2VuZCAgLy8gd2hpY2ggaXMgYSBjaXJjdWxhciByZWZl
cmVuY2UuCisvLworLy8gICAgIE5vdGU6IHRoZXJlJ3MgYSBjaXJjdWxhciByZWZlcmVuY2UgYmV0
d2VlbiB0aGUgU1FMVHJhbnNhY3Rpb24gZnJvbnQtZW5kIGFuZAorLy8gICAgIGJhY2stZW5kLiBU
aGlzIGNpcmN1bGFyIHJlZmVyZW5jZSBpcyBlc3RhYmxpc2hlZCBpbiB0aGUgY29uc3RydWN0b3Ig
b2YgdGhlCisvLyAgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kLiBUaGUgY2lyY3VsYXIgcmVmZXJl
bmNlIHdpbGwgb25seSBiZSBicm9rZW4gYXQgdGhlIGVuZAorLy8gICAgIG9mIHRoZSB0cmFuc2Fj
dGlvbidzIGNsZWFuIHVwIHN0YXRlIGkuZS4gd2hlbiB0aGUgdHJhbnNhY3Rpb24gc2hvdWxkIG5v
CisvLyAgICAgbG9uZ2VyIGJlIGluIHVzZSB0aGVyZWFmdGVyLgorLy8KKy8vICAgICBBZnRlciBz
Y2hlZHVsaW5nIHRoZSB0cmFuc2FjdGlvbiB3aXRoIHRoZSBEYXRhYmFzZVRocmVhZCAoRGF0YWJh
c2VCYWNrZW5kQXN5bmM6OnNjaGVkdWxlVHJhbnNhY3Rpb24oKSk6CisvLyAgICAgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgICAgRGF0YWJhc2VUaHJl
YWQgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gTWVzc2FnZVF1ZXVlPERhdGFiYXNlVGFz
az4gbV9xdWV1ZSBwb2ludHMgdG8gLi4uCisvLyAgICAgLS0+IERhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrICAgICAgICAgICAgLy8gaW4gUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFu
c2FjdGlvbiBwb2ludHMgdG8gLi4uCisvLyAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tl
bmQgICAgICAgICAgLy8gaW4gUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBtX2Zyb250ZW5kIHBvaW50
cyB0byAuLi4KKy8vICAgICAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbiAgICAgICAgICAgICAv
LyBpbiBSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBtX2JhY2tlbmQgcG9pbnRzIHRvIC4u
LgorLy8gICAgICAgICAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgIC8vIHdoaWNo
IGlzIGEgY2lyY3VsYXIgcmVmZXJlbmNlLgorLy8KKy8vICAgICBXaGVuIGV4ZWN1dGluZyB0aGUg
dHJhbnNhY3Rpb24gKGluIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpKToKKy8vICAg
ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorLy8gICAgIE93blB0cjxEYXRhYmFzZVRhc2s+IHRhc2s7ICAgICAgICAg
ICAgIC8vIHBvaW50cyB0byAuLi4KKy8vICAgICAtLT4gRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sg
ICAgICAgICAgICAvLyBpbiBSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uIHBvaW50cyB0byAuLi4KKy8vICAgICAgICAgLS0+IFNRTFRyYW5zYWN0aW9uQmFja2VuZCAg
ICAgICAgICAvLyBpbjogUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBtX2Zyb250ZW5kOworLy8gICAg
ICAgICAgICAgLS0+IFNRTFRyYW5zYWN0aW9uICAgICAgICAgICAgIC8vIGluIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fYmFja2VuZCBwb2ludHMgdG8gLi4uCisvLyAgICAgICAgICAg
ICAgICAgLS0+IFNRTFRyYW5zYWN0aW9uQmFja2VuZCAgLy8gd2hpY2ggaXMgYSBjaXJjdWxhciBy
ZWZlcmVuY2UuCisvLworLy8gICAgIEF0IHRoZSBlbmQgb2YgY2xlYW51cEFuZFRlcm1pbmF0ZSgp
OgorLy8gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgICAgQXQg
dGhlIGVuZCBvZiB0aGUgY2xlYW51cCBzdGF0ZSwgdGhlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
bV9mcm9udGVuZCBpcyBudWxsaWZpZWQuCisvLyAgICAgSWYgYnkgdGhlbiwgYSBKU09iamVjdCB3
cmFwcGVyIGlzIHJlZmVycmluZyB0byB0aGUgU1FMVHJhbnNhY3Rpb24sIHRoZW4gdGhlIHJlZmVy
ZW5jZQorLy8gICAgIGNoYWluIGxvb2tzIGxpa2UgdGhpczoKKy8vCisvLyAgICAgSlNPYmplY3RX
cmFwcGVyCisvLyAgICAgLS0+IFNRTFRyYW5zYWN0aW9uICAgICAgICAgICAgIC8vIGluIFJlZlB0
cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fYmFja2VuZCBwb2ludHMgdG8gLi4uCisvLyAgICAg
ICAgIC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgIC8vIHdoaWNoIG5vIGxvbmdlciBwb2ludHMg
YmFjayB0byBpdHMgU1FMVHJhbnNhY3Rpb24uCisvLworLy8gICAgIFdoZW4gdGhlIEdDIGNvbGxl
Y3RzIHRoZSBjb3JyZXNwb25kaW5nIEpTT2JqZWN0LCB0aGUgYWJvdmUgY2hhaW4gd2lsbCBiZSBj
bGVhbmVkIHVwCisvLyAgICAgYW5kIGRlbGV0ZWQuCisvLworLy8gICAgIElmIHRoZXJlIGlzIG5v
IEpTT2JqZWN0IHdyYXBwZXIgcmVmZXJyaW5nIHRvIHRoZSBTUUxUcmFuc2FjdGlvbiB3aGVuIHRo
ZSBjbGVhbnVwCisvLyAgICAgc3RhdGVzIG51bGxpZnkgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpt
X2Zyb250ZW5kLCB0aGUgU1FMVHJhbnNhY3Rpb24gd2lsbCBkZWxldGVkIHRoZW4uCisvLyAgICAg
SG93ZXZlciwgdGhlcmUgd2lsbCBzdGlsbCBiZSBhIERhdGFiYXNlVGFzayBwb2ludGluZyB0byB0
aGUgU1FMVHJhbnNhY3Rpb25CYWNrZW5kIChzZWUKKy8vICAgICB0aGUgIldoZW4gZXhlY3V0aW5n
IHRoZSB0cmFuc2FjdGlvbiIgY2hhaW4gYWJvdmUpLiBUaGlzIHdpbGwga2VlcCB0aGUKKy8vICAg
ICBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgYWxpdmUgdW50aWwgRGF0YWJhc2VUaHJlYWQ6OmRhdGFi
YXNlVGhyZWFkKCkgcmVsZWFzZXMgaXRzCisvLyAgICAgdGFzayBPd25QdHIuCiAKIAogLy8gVGhl
cmUncyBubyB3YXkgb2Yga25vd2luZyBleGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBi
ZSByZXF1aXJlZCB3aGVuIGEgc3RhdGVtZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LgpAQCAtMTc3
LDE2ICsyMjEsMjAgQEAgc3RhdGljIGNvbnN0IGludCBEZWZhdWx0UXVvdGFTaXplSW5jcmVhcwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNRTFRyYW5zYWN0aW9uQmFja2VuZDo6U1FMVHJhbnNh
Y3Rpb25CYWNrZW5kKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrPiBjYWxsYmFjaywKLSAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aywKLSAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCBy
ZWFkT25seSkKLSAgICA6IG1fbmV4dFN0ZXAoJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6YWNxdWly
ZUxvY2spCi0gICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQorUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ+IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKERhdGFiYXNl
QmFja2VuZEFzeW5jKiBkYiwKKyAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBmcm9udGVu
ZCwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9u
bHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQoZGIs
IGZyb250ZW5kLCB3cmFwcGVyLCByZWFkT25seSkpOworfQorCitTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ6OlNRTFRyYW5zYWN0aW9uQmFja2VuZChEYXRhYmFzZUJhY2tlbmRBc3luYyogZGIsCisgICAg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gZnJvbnRlbmQsIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQorICAgIDogbV9mcm9udGVuZChm
cm9udGVuZCkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX3dyYXBwZXIod3JhcHBlcikK
LSAgICAsIG1fY2FsbGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQotICAgICwgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyKHN1Y2Nlc3NDYWxsYmFjaywg
ZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fZXJyb3JDYWxsYmFja1dyYXBw
ZXIoZXJyb3JDYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1f
aGFzQ2FsbGJhY2sobV9mcm9udGVuZC0+aGFzQ2FsbGJhY2soKSkKKyAgICAsIG1faGFzU3VjY2Vz
c0NhbGxiYWNrKG1fZnJvbnRlbmQtPmhhc1N1Y2Nlc3NDYWxsYmFjaygpKQorICAgICwgbV9oYXNF
cnJvckNhbGxiYWNrKG1fZnJvbnRlbmQtPmhhc0Vycm9yQ2FsbGJhY2soKSkKICAgICAsIG1fc2hv
dWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9tb2RpZmllZERhdGFiYXNl
KGZhbHNlKQogICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCkBAIC0xOTQsNiArMjQyLDggQEAg
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpTUUxUcmFuc2FjdGlvbkJhYwogICAgICwgbV9oYXNWZXJz
aW9uTWlzbWF0Y2goZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIG1fZnJv
bnRlbmQtPnNldEJhY2tlbmQodGhpcyk7CisgICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IFNRTFRyYW5z
YWN0aW9uU3RhdGU6OkFjcXVpcmVMb2NrOwogfQogCiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6On5T
UUxUcmFuc2FjdGlvbkJhY2tlbmQoKQpAQCAtMjAxLDYxICsyNTEsODggQEAgU1FMVHJhbnNhY3Rp
b25CYWNrZW5kOjp+U1FMVHJhbnNhY3Rpb25CYQogICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2Fj
dGlvbik7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpleGVjdXRlU1FMKGNvbnN0
IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMs
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUp
Cit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZG9DbGVhbnVwKCkKIHsKLSAgICBpZiAoIW1f
ZXhlY3V0ZVNxbEFsbG93ZWQgfHwgIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIGUg
PSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gZGF0YWJhc2UoKS0+ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCktPmdldFRocmVhZElEKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3RhdGVtZW50
TXV0ZXgpOworICAgIG1fc3RhdGVtZW50UXVldWUuY2xlYXIoKTsKKworICAgIGlmIChtX3NxbGl0
ZVRyYW5zYWN0aW9uKSB7CisgICAgICAgIC8vIEluIHRoZSBldmVudCB3ZSBnb3QgaGVyZSBiZWNh
dXNlIG9mIGFuIGludGVycnVwdGlvbiBvciBlcnJvciAoaS5lLiBpZgorICAgICAgICAvLyB0aGUg
dHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MpLCB3ZSBzaG91bGQgcm9sbCBpdCBiYWNrIGhlcmUu
IENsZWFyaW5nCisgICAgICAgIC8vIG1fc3FsaXRlVHJhbnNhY3Rpb24gaW52b2tlcyBTUUxpdGVU
cmFuc2FjdGlvbidzIGRlc3RydWN0b3Igd2hpY2ggZG9lcworICAgICAgICAvLyBqdXN0IHRoYXQu
IFdlIG1pZ2h0IGFzIHdlbGwgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgYW5kIGZyZWUgdXAgaXRz
CisgICAgICAgIC8vIHJlc291cmNlcyBiZWNhdXNlIHdlJ3JlIGFscmVhZHkgdGVybWluYXRpbmcu
CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICB9CiAKLSAgICBpbnQg
cGVybWlzc2lvbnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRXcml0ZU1hc2s7Ci0gICAgaWYg
KCFtX2RhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQot
ICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzTWFzazsK
LSAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQotICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFz
ZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKKyAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIG9uIHRo
aXMgZGF0YWJhc2UKKyAgICBpZiAobV9sb2NrQWNxdWlyZWQpCisgICAgICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7CisKKyAgICAvLyBO
b3cgdGhhdCB3ZSdyZSBkb25lLCBicmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlIHRoYXQga2VlcHMg
dXMgYWxpdmUuCisgICAgLy8gU2VlIGNvbW1lbnQgYWJvdXQgdGhlIGxpZmUtY3ljbGUgYWJvdmUu
CisgICAgbV9mcm9udGVuZCA9IDA7CisKKyAgICAvLyBEbyBzb21lIGFnZ3Jlc2l2ZSBjbGVhbiB1
cCBoZXJlIGV4Y2VwdCBmb3IgbV9kYXRhYmFzZS4KKyAgICAvLworICAgIC8vIFdlIGNhbid0IGNs
ZWFyIG1fZGF0YWJhc2UgaGVyZSBiZWNhdXNlIHRoZSBmcm9udGVuZCBtYXkgYXN5bmNocm9ub3Vz
bHkKKyAgICAvLyBpbnZva2UgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpyZXF1ZXN0VHJhbnNpdFRv
U3RhdGUoKSwgYW5kIHRoYXQgZnVuY3Rpb24KKyAgICAvLyB1c2VzIG1fZGF0YWJhc2UgdG8gc2No
ZWR1bGUgYSBzdGF0ZSB0cmFuc2l0aW9uLiBUaGlzIG1heSBvY2N1ciBiZWNhdXNlCisgICAgLy8g
dGhlIGZyb250ZW5kIChiZWluZyBpbiBhbm90aGVyIHRocmVhZCkgbWF5IGFscmVhZHkgYmUgb24g
dGhlIHdheSB0bworICAgIC8vIHJlcXVlc3Rpbmcgb3VyIG5leHQgc3RhdGUgYmVmb3JlIGl0IGRl
dGVjdHMgYW4gaW50ZXJydXB0aW9uLgorICAgIC8vCisgICAgLy8gVGhlcmUgaXMgbm8gaGFybSBp
biBsZXR0aW5nIGl0IGZpbmlzaCBtYWtpbmcgdGhlIHJlcXVlc3QuIEl0J2xsIHNldAorICAgIC8v
IG1fcmVxdWVzdGVkU3RhdGUsIGJ1dCB3ZSB3b24ndCBleGVjdXRlIGEgdHJhbnNpdGlvbiB0byB0
aGF0IHN0YXRlIGJlY2F1c2UKKyAgICAvLyB3ZSd2ZSBhbHJlYWR5IHNodXQgZG93biB0aGUgdHJh
bnNhY3Rpb24uCiAKLSAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0
ZW1lbnQ6OmNyZWF0ZShtX2RhdGFiYXNlLmdldCgpLCBzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywg
Y2FsbGJhY2ssIGNhbGxiYWNrRXJyb3IsIHBlcm1pc3Npb25zKTsKKyAgICBtX2N1cnJlbnRTdGF0
ZW1lbnQgPSAwOworICAgIG1fd3JhcHBlciA9IDA7CisgICAgbV90cmFuc2FjdGlvbkVycm9yID0g
MDsKK30KIAotICAgIGlmIChtX2RhdGFiYXNlLT5kZWxldGVkKCkpCi0gICAgICAgIHN0YXRlbWVu
dC0+c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IobV9kYXRhYmFzZS5nZXQoKSk7CitQYXNzUmVmUHRy
PFNRTEVycm9yPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnRyYW5zYWN0aW9uRXJyb3IoKQorewor
ICAgIHJldHVybiBtX3RyYW5zYWN0aW9uRXJyb3I7Cit9CiAKLSAgICBlbnF1ZXVlU3RhdGVtZW50
KHN0YXRlbWVudCk7Cit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2V0U2hvdWxkUmV0cnlD
dXJyZW50U3RhdGVtZW50KGJvb2wgc2hvdWxkUmV0cnkpCit7CisgICAgQVNTRVJUKCFtX3Nob3Vs
ZFJldHJ5Q3VycmVudFN0YXRlbWVudCk7CisgICAgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1l
bnQgPSBzaG91bGRSZXRyeTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmVucXVl
dWVTdGF0ZW1lbnQoUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCkKK1NRTFRyYW5z
YWN0aW9uQmFja2VuZDo6U3RhdGVGdW5jdGlvbiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnN0YXRl
RnVuY3Rpb25Gb3IoU1FMVHJhbnNhY3Rpb25TdGF0ZSBzdGF0ZSkKIHsKLSAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7Ci0gICAgbV9zdGF0ZW1lbnRRdWV1ZS5hcHBlbmQo
c3RhdGVtZW50KTsKKyAgICBzdGF0aWMgY29uc3QgU3RhdGVGdW5jdGlvbiBzdGF0ZUZ1bmN0aW9u
c1tdID0geworICAgICAgICAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjp1bnJlYWNoYWJsZVN0YXRl
LCAgICAgICAgICAgIC8vIDAuIGVuZAorICAgICAgICAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjp1
bnJlYWNoYWJsZVN0YXRlLCAgICAgICAgICAgIC8vIDEuIGlkbGUKKyAgICAgICAgJlNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6YWNxdWlyZUxvY2ssICAgICAgICAgICAgICAgICAvLyAyLgorICAgICAg
ICAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQsIC8v
IDMuCisgICAgICAgICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJ1blN0YXRlbWVudHMsICAgICAg
ICAgICAgICAgLy8gNC4KKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cG9zdGZsaWdo
dEFuZENvbW1pdCwgICAgICAgICAvLyA1LgorICAgICAgICAmU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpjbGVhbnVwQW5kVGVybWluYXRlLCAgICAgICAgIC8vIDYuCisgICAgICAgICZTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaywgLy8gNy4K
KyAgICAgICAgJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2VuZFRvRnJvbnRlbmRTdGF0ZSwgICAg
ICAgICAvLyA4LiBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaworICAgICAgICAmU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kOjpzZW5kVG9Gcm9udGVuZFN0YXRlLCAgICAgICAgIC8vIDkuIGRlbGl2ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
c2VuZFRvRnJvbnRlbmRTdGF0ZSwgICAgICAgICAvLyAxMC4gZGVsaXZlclN0YXRlbWVudENhbGxi
YWNrCisgICAgICAgICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnNlbmRUb0Zyb250ZW5kU3RhdGUs
ICAgICAgICAgLy8gMTEuIGRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sKKyAgICAgICAgJlNR
TFRyYW5zYWN0aW9uQmFja2VuZDo6c2VuZFRvRnJvbnRlbmRTdGF0ZSAgICAgICAgICAvLyAxMi4g
ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaworICAgIH07CisKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAo
c2l6ZW9mKHgpIC8gc2l6ZW9mKHhbMF0pKQorICAgIEFTU0VSVChBUlJBWV9TSVpFKHN0YXRlRnVu
Y3Rpb25zKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KFNRTFRyYW5zYWN0aW9uU3RhdGU6Ok51bWJlck9m
U3RhdGVzKSk7CisgICAgQVNTRVJUKHN0YXRlIDwgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6TnVtYmVy
T2ZTdGF0ZXMpOworCisgICAgcmV0dXJuIHN0YXRlRnVuY3Rpb25zW3N0YXRpY19jYXN0PGludD4o
c3RhdGUpXTsKIH0KIAotI2lmICFMT0dfRElTQUJMRUQKLWNvbnN0IGNoYXIqIFNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6ZGVidWdTdGVwTmFtZShTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OlRyYW5zYWN0
aW9uU3RlcE1ldGhvZCBzdGVwKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmVucXVldWVT
dGF0ZW1lbnQoUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCkKIHsKLSAgICBpZiAo
c3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaykKLSAgICAgICAgcmV0
dXJuICJhY3F1aXJlTG9jayI7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KQotICAgICAgICByZXR1cm4gIm9wZW5UcmFu
c2FjdGlvbkFuZFByZWZsaWdodCI7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6cnVuU3RhdGVtZW50cykKLSAgICAgICAgcmV0dXJuICJydW5TdGF0ZW1lbnRzIjsKLSAg
ICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0
KQotICAgICAgICByZXR1cm4gInBvc3RmbGlnaHRBbmRDb21taXQiOwotICAgIGlmIChzdGVwID09
ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjaykKLSAgICAgICAgcmV0dXJuICJjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2siOwotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFu
c2FjdGlvbkNhbGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxi
YWNrIjsKLSAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2siOwotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6
OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyU3RhdGVt
ZW50Q2FsbGJhY2siOwotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRl
bGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclF1b3Rh
SW5jcmVhc2VDYWxsYmFjayI7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyU3VjY2Vz
c0NhbGxiYWNrIjsKLSAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVh
bnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiY2xlYW51cEFmdGVyU3Vj
Y2Vzc0NhbGxiYWNrIjsKLSAgICByZXR1cm4gIlVOS05PV04iOworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3N0YXRlbWVudE11dGV4KTsKKyAgICBtX3N0YXRlbWVudFF1ZXVlLmFwcGVuZChzdGF0
ZW1lbnQpOwogfQotI2VuZGlmCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjaGVja0Fu
ZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpCiB7CkBAIC0yNjQsMTggKzM0MSw2
IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjaGVja0FuZEhhbmQKIAogICAgIC8vIElm
IHRoZSBkYXRhYmFzZSB3YXMgc3RvcHBlZCwgZG9uJ3QgZG8gYW55dGhpbmcgYW5kIGNhbmNlbCBx
dWV1ZWQgd29yawogICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2Ugd2FzIHN0b3BwZWQgb3Ig
aW50ZXJydXB0ZWQgLSBjYW5jZWxsaW5nIHdvcmsgZm9yIHRoaXMgdHJhbnNhY3Rpb24iKTsKLSAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7Ci0gICAgbV9zdGF0ZW1lbnRR
dWV1ZS5jbGVhcigpOwotICAgIG1fbmV4dFN0ZXAgPSAwOwotCi0gICAgLy8gUmVsZWFzZSB0aGUg
dW5uZWVkZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fY2Fs
bGJhY2tXcmFwcGVyLmNsZWFyKCk7Ci0gICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFy
KCk7Ci0gICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwotCi0gICAgLy8gVGhlIG5l
eHQgc3RlcHMgc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgd2UncmUgb24gdGhlIERCIHRocmVh
ZC4KLSAgICBpZiAoY3VycmVudFRocmVhZCgpICE9IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKQotICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBUaGUgY3VycmVudCBTUUxpdGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHN0b3BwZWQs
IGFzIHdlbGwKICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgewpAQCAtMjgzLDcxICszNDgs
NjEgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNoZWNrQW5kSGFuZAogICAgICAgICBt
X3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKG1fbG9ja0FjcXVp
cmVkKQotICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVh
c2VMb2NrKHRoaXMpOwotfQotCi0KLWJvb2wgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwZXJmb3Jt
TmV4dFN0ZXAoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiU3RlcCAlc1xuIiwgZGVidWdTdGVw
TmFtZShtX25leHRTdGVwKSk7Ci0KLSAgICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jawotICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodAotICAgICAgICB8
fCBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJ1blN0YXRlbWVudHMKLSAg
ICAgICAgfHwgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwb3N0ZmxpZ2h0
QW5kQ29tbWl0Ci0gICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrCi0gICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrKTsKKyAgICAvLyBUZXJtaW5hdGUgdGhlIGZyb250ZW5kIHN0YXRlIG1hY2hpbmUuIFRoaXMg
YWxzbyBnZXRzIHRoZSBmcm9udGVuZCB0bworICAgIC8vIGNhbGwgY2hlY2tBbmRIYW5kbGVDbG9z
ZWRPckludGVycnVwdGVkRGF0YWJhc2UoKSBhbmQgY2xlYXIgaXRzIHdyYXBwZXJzCisgICAgLy8g
aWYgbmVlZGVkLgorICAgIG1fZnJvbnRlbmQtPnJlcXVlc3RUcmFuc2l0VG9TdGF0ZShTUUxUcmFu
c2FjdGlvblN0YXRlOjpFbmQpOworCisgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGVuZCBzdGF0ZSB0
byBhYm9ydCwgY2xlYW4gdXAsIGFuZCBlbmQgdGhlIHRyYW5zYWN0aW9uLgorICAgIGRvQ2xlYW51
cCgpOworICAgIG1fbmV4dFN0YXRlID0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RW5kOworfQorCit2
b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cGVyZm9ybU5leHRTdGVwKCkKK3sKKyAgICBMT0co
U3RvcmFnZUFQSSwgIlN0YXRlICVzXG4iLCBuYW1lRm9yU1FMVHJhbnNhY3Rpb25TdGF0ZShtX25l
eHRTdGF0ZSkpOworCisgICAgc2V0U3RhdGVUb1JlcXVlc3RlZFN0YXRlKCk7CisgICAgQVNTRVJU
KG1fbmV4dFN0YXRlID09IFNRTFRyYW5zYWN0aW9uU3RhdGU6OkFjcXVpcmVMb2NrCisgICAgICAg
IHx8IG1fbmV4dFN0YXRlID09IFNRTFRyYW5zYWN0aW9uU3RhdGU6Ok9wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodAorICAgICAgICB8fCBtX25leHRTdGF0ZSA9PSBTUUxUcmFuc2FjdGlvblN0YXRl
OjpSdW5TdGF0ZW1lbnRzCisgICAgICAgIHx8IG1fbmV4dFN0YXRlID09IFNRTFRyYW5zYWN0aW9u
U3RhdGU6OlBvc3RmbGlnaHRBbmRDb21taXQKKyAgICAgICAgfHwgbV9uZXh0U3RhdGUgPT0gU1FM
VHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFuZFRlcm1pbmF0ZQorICAgICAgICB8fCBtX25leHRT
dGF0ZSA9PSBTUUxUcmFuc2FjdGlvblN0YXRlOjpDbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2spOwogCiAgICAgY2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVycnVwdGVkRGF0YWJh
c2UoKTsKLQotICAgIGlmIChtX25leHRTdGVwKQotICAgICAgICAodGhpcy0+Km1fbmV4dFN0ZXAp
KCk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXh0U3RlcCBhZnRlciBwZXJmb3JtaW5nIHRo
ZSBhYm92ZSBzdGVwLCB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUKLSAgICByZXR1cm4gIW1f
bmV4dFN0ZXA7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwZXJmb3JtUGVuZGlu
Z0NhbGxiYWNrKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNhbGxiYWNrICVzXG4iLCBkZWJ1
Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKLQotICAgIEFTU0VSVChtX25leHRTdGVwID09ICZTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrCi0gICAgICAgIHx8
IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjawotICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjawotICAgICAgICB8fCBtX25leHRTdGVwID09
ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sKLSAg
ICAgICAgfHwgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3Vj
Y2Vzc0NhbGxiYWNrKTsKLQotICAgIGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERh
dGFiYXNlKCk7Ci0KLSAgICBpZiAobV9uZXh0U3RlcCkKLSAgICAgICAgKHRoaXMtPiptX25leHRT
dGVwKSgpOworICAgIHJ1blN0YXRlTWFjaGluZSgpOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpCiB7CiAgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZSgpLT5kYXRhYmFzZUNvbnRleHQoKS0+ZGF0
YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAKLSAgICAvLyBJZiB0aGUgdHJhbnNhY3Rp
b24gaXMgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCByb2xsIGl0IGJhY2sgaGVyZSwgc2luY2UgdGhp
cyBpcyBvdXIgbGFzdAotICAgIC8vIG9wb3J0dW5pdHkgdG8gZG8gc29tZXRoaW5nIHJlbGF0ZWQg
dG8gdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgREIgdGhyZWFkLgotICAgIC8vIENsZWFyaW5nIG1f
c3FsaXRlVHJhbnNhY3Rpb24gaW52b2tlcyBTUUxpdGVUcmFuc2FjdGlvbidzIGRlc3RydWN0b3Ig
d2hpY2ggZG9lcyBqdXN0IHRoYXQuCi0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwor
ICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHJvbGwg
aXQgYmFjayBoZXJlLCBzaW5jZSB0aGlzCisgICAgLy8gaXMgb3VyIGxhc3Qgb3Bwb3J0dW5pdHkg
dG8gZG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUKKyAgICAv
LyBEQiB0aHJlYWQuIEFtb25nc3Qgb3RoZXIgd29yaywgZG9DbGVhbnVwKCkgd2lsbCBjbGVhciBt
X3NxbGl0ZVRyYW5zYWN0aW9uCisgICAgLy8gd2hpY2ggaW52b2tlcyBTUUxpdGVUcmFuc2FjdGlv
bidzIGRlc3RydWN0b3IsIHdoaWNoIHdpbGwgZG8gdGhlIHJvbGwgYmFjaworICAgIC8vIGlmIG5l
Y2Vzc2FyeS4KKworICAgIC8vIE5vdGU6IGlmIGRvQ2xlYW51cCgpIGhhcyBhbHJlYWR5IGJlZW4g
aW52b2tlZCwgdGhlbiBtX2Zyb250ZW5kIHdvdWxkIGhhdmUKKyAgICAvLyBiZWVuIG51bGxpZmll
ZC4KKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAgICAgZG9DbGVhbnVwKCk7CiB9CiAKLXZvaWQg
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaygpCitTUUxUcmFuc2FjdGlvblN0YXRl
IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6YWNxdWlyZUxvY2soKQogewogICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhpcyk7CisgICAgcmV0dXJu
IFNRTFRyYW5zYWN0aW9uU3RhdGU6OklkbGU7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjpsb2NrQWNxdWlyZWQoKQogewogICAgIG1fbG9ja0FjcXVpcmVkID0gdHJ1ZTsKLSAgICBt
X25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3BlblRyYW5zYWN0aW9uQW5kUHJl
ZmxpZ2h0OwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25B
bmRQcmVmbGlnaHQgaW1tZWRpYXRlbHkgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKKyAgICBy
ZXF1ZXN0VHJhbnNpdFRvU3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZTo6T3BlblRyYW5zYWN0aW9u
QW5kUHJlZmxpZ2h0KTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFu
c2FjdGlvbkFuZFByZWZsaWdodCgpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKIHsKICAgICBBU1NFUlQoIW1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAg
IEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7CkBAIC0zNTUsMTEgKzQxMCwxMCBAQCB2b2lkIFNRTFRy
YW5zYWN0aW9uQmFja2VuZDo6b3BlblRyYW5zYWN0CiAgICAgTE9HKFN0b3JhZ2VBUEksICJPcGVu
aW5nIGFuZCBwcmVmbGlnaHRpbmcgdHJhbnNhY3Rpb24gJXAiLCB0aGlzKTsKIAogICAgIC8vIElm
IHRoZSBkYXRhYmFzZSB3YXMgZGVsZXRlZCwganVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKLSAg
ICBpZiAobV9kYXRhYmFzZS0+ZGVsZXRlZCgpKSB7CisgICAgaWYgKERhdGFiYXNlOjpmcm9tKG1f
ZGF0YWJhc2UuZ2V0KCkpLT5kZWxldGVkKCkpIHsKICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0
U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwogICAg
ICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktO
T1dOX0VSUiwgInVuYWJsZSB0byBvcGVuIGEgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdGhlIHVzZXIg
ZGVsZXRlZCB0aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihm
YWxzZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG5leHRTdGF0ZUZvclRyYW5z
YWN0aW9uRXJyb3IoKTsKICAgICB9CiAKICAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9y
IHRoaXMgdHJhbnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seQpA
QCAtMzc0LDE1ICs0MjgsMTQgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFu
c2FjdAogICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7CiAgICAgbV9kYXRhYmFzZS0+
ZW5hYmxlQXV0aG9yaXplcigpOwogCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgMSsyIC0gT3Bl
biBhIHRyYW5zYWN0aW9uIHRvIHRoZSBkYXRhYmFzZSwganVtcGluZyB0byB0aGUgZXJyb3IgY2Fs
bGJhY2sgaWYgdGhhdCBmYWlscworICAgIC8vIFNwZWMgNC4zLjIuMSsyOiBPcGVuIGEgdHJhbnNh
Y3Rpb24gdG8gdGhlIGRhdGFiYXNlLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0
aGF0IGZhaWxzCiAgICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsK
ICAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9u
SW5Qcm9ncmVzcygpKTsKICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlv
blJlc3VsdCgyLCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRh
YmFzZSgpLmxhc3RFcnJvcigpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJy
b3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidW5hYmxlIHRvIGJlZ2luIHRyYW5z
YWN0aW9uIiwKICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVy
cm9yKCksIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0
aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBuZXh0U3Rh
dGVGb3JUcmFuc2FjdGlvbkVycm9yKCk7CiAgICAgfQogCiAgICAgLy8gTm90ZTogV2UgaW50ZW50
aW9uYWxseSByZXRyaWV2ZSB0aGUgYWN0dWFsIHZlcnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4
cGVjdGVkIHZlcnNpb24uCkBAIC0zOTYsMTMgKzQ0OSwxMiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6b3BlblRyYW5zYWN0CiAgICAgICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3Jp
emVyKCk7CiAgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICAgICAgbV9k
YXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVy
cm9yKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbmV4dFN0YXRlRm9y
VHJhbnNhY3Rpb25FcnJvcigpOwogICAgIH0KICAgICBtX2hhc1ZlcnNpb25NaXNtYXRjaCA9ICFt
X2RhdGFiYXNlLT5leHBlY3RlZFZlcnNpb24oKS5pc0VtcHR5KCkgJiYgKG1fZGF0YWJhc2UtPmV4
cGVjdGVkVmVyc2lvbigpICE9IGFjdHVhbFZlcnNpb24pOwogCi0gICAgLy8gVHJhbnNhY3Rpb24g
U3RlcHMgMyAtIFBlZm9ybSBwcmVmbGlnaHQgc3RlcHMsIGp1bXBpbmcgdG8gdGhlIGVycm9yIGNh
bGxiYWNrIGlmIHRoZXkgZmFpbAotICAgIGlmIChtX3dyYXBwZXIgJiYgIW1fd3JhcHBlci0+cGVy
Zm9ybVByZWZsaWdodChTUUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSkpIHsKKyAgICAvLyBTcGVj
IDQuMy4yLjM6IFBlcmZvcm0gcHJlZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBj
YWxsYmFjayBpZiB0aGV5IGZhaWwKKyAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBl
cmZvcm1QcmVmbGlnaHQodGhpcykpIHsKICAgICAgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhv
cml6ZXIoKTsKICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwogICAgICAgICBt
X2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CkBAIC00MTEsNDggKzQ2MywyMSBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3BlblRyYW5zYWN0CiAgICAgICAgICAgICBtX2RhdGFi
YXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDQsIFNRTEVycm9yOjpVTktOT1dOX0VS
UiwgMCk7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRl
KFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVua25vd24gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRy
YW5zYWN0aW9uIHByZWZsaWdodCIpOwogICAgICAgICB9Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0
aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBuZXh0U3Rh
dGVGb3JUcmFuc2FjdGlvbkVycm9yKCk7CiAgICAgfQogCi0gICAgLy8gVHJhbnNhY3Rpb24gU3Rl
cCA0IC0gSW52b2tlIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3aXRoIHRoZSBuZXcgU1FMVHJh
bnNhY3Rpb24gb2JqZWN0Ci0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6
OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1
bGluZyBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRo
aXMpOwotICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFu
c2FjdGlvbjo6ZnJvbSh0aGlzKSk7Ci19CisgICAgLy8gU3BlYyA0LjMuMi40OiBJbnZva2UgdGhl
IHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdpdGggdGhlIG5ldyBTUUxUcmFuc2FjdGlvbiBvYmplY3QK
KyAgICBpZiAobV9oYXNDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9uU3Rh
dGU6OkRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrOwogCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2soKQotewotICAgIGJvb2wgc2hvdWxkRGVs
aXZlckVycm9yQ2FsbGJhY2sgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiBjYWxsYmFjayA9IG1fY2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChj
YWxsYmFjaykgewotICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAg
c2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhY2FsbGJhY2stPmhhbmRsZUV2ZW50KFNRTFRy
YW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKLSAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZh
bHNlOwotICAgIH0KLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNSAtIElmIHRoZSB0cmFuc2Fj
dGlvbiBjYWxsYmFjayB3YXMgbnVsbCBvciByYWlzZWQgYW4gZXhjZXB0aW9uLCBqdW1wIHRvIHRo
ZSBlcnJvciBjYWxsYmFjawotICAgIGlmIChzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjaykgewot
ICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDUsIFNRTEVy
cm9yOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2sgd2FzIG51bGwgb3IgdGhyZXcgYW4gZXhjZXB0aW9uIik7Ci0gICAgICAgIGRlbGl2ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NoZWR1bGVU
b1J1blN0YXRlbWVudHMoKTsKLQotICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rp
b25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6c2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKQotewotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOjpydW5TdGF0ZW1lbnRzOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2No
ZWR1bGluZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAg
bV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7CisgICAgLy8gSWYgd2Ug
aGF2ZSBubyBjYWxsYmFjayB0byBtYWtlLCBza2lwIHBhc3MgdG8gdGhlIHN0YXRlIGFmdGVyOgor
ICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpSdW5TdGF0ZW1lbnRzOwogfQogCi12b2lk
IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVuU3RhdGVtZW50cygpCitTUUxUcmFuc2FjdGlvblN0
YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVuU3RhdGVtZW50cygpCiB7CiAgICAgQVNTRVJU
KG1fbG9ja0FjcXVpcmVkKTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIG5leHRTdGF0ZTsKIAog
ICAgIC8vIElmIHRoZXJlIGlzIGEgc2VyaWVzIG9mIHN0YXRlbWVudHMgcXVldWVkIHVwIHRoYXQg
YXJlIGFsbCBzdWNjZXNzZnVsIGFuZCBoYXZlIG5vIGFzc29jaWF0ZWQKICAgICAvLyBTUUxTdGF0
ZW1lbnRDYWxsYmFjayBvYmplY3RzLCB0aGVuIHdlIGNhbiBidXJuIHRocm91Z2ggdGhlIHF1ZXVl
CkBAIC00NzEsMjAgKzQ5NiwxNiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVuU3Rh
dGVtZW50CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQgaGFzIGFscmVh
ZHkgYmVlbiBydW4sIGZhaWxlZCBkdWUgdG8gcXVvdGEgY29uc3RyYWludHMsIGFuZCB3ZSdyZSBu
b3QgcmV0cnlpbmcgaXQsCiAgICAgICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IGVuZGVkIGluIGFu
IGVycm9yLiBIYW5kbGUgaXQgbm93CiAgICAgICAgICAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50
ICYmIG1fY3VycmVudFN0YXRlbWVudC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkg
ewotICAgICAgICAgICAgICAgIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U3RhdGVGb3JDdXJy
ZW50U3RhdGVtZW50RXJyb3IoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHN0YXRlbWVudAogICAgICAgICAgICAgZ2V0TmV4
dFN0YXRlbWVudCgpOwogICAgICAgICB9Ci0gICAgfSB3aGlsZSAocnVuQ3VycmVudFN0YXRlbWVu
dCgpKTsKKyAgICAgICAgbmV4dFN0YXRlID0gcnVuQ3VycmVudFN0YXRlbWVudEFuZEdldE5leHRT
dGF0ZSgpOworICAgIH0gd2hpbGUgKG5leHRTdGF0ZSA9PSBTUUxUcmFuc2FjdGlvblN0YXRlOjpS
dW5TdGF0ZW1lbnRzKTsKIAotICAgIC8vIElmIHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSByZXR1cm5l
ZCBmYWxzZSwgdGhhdCBtZWFucyBlaXRoZXIgdGhlcmUgd2FzIG5vIGN1cnJlbnQgc3RhdGVtZW50
IHRvIHJ1biwKLSAgICAvLyBvciB0aGUgY3VycmVudCBzdGF0ZW1lbnQgcmVxdWlyZXMgYSBjYWxs
YmFjayB0byBjb21wbGV0ZS4gSW4gdGhlIGxhdGVyIGNhc2UsIGl0IGFsc28gc2NoZWR1bGVkCi0g
ICAgLy8gdGhlIGNhbGxiYWNrIG9yIHBlcmZvcm1lZCBhbnkgb3RoZXIgYWRkaXRpb25hbCB3b3Jr
IHNvIHdlIGNhbiByZXR1cm4KLSAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKLSAgICAgICAg
cG9zdGZsaWdodEFuZENvbW1pdCgpOworICAgIHJldHVybiBuZXh0U3RhdGU7CiB9CiAKIHZvaWQg
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpnZXROZXh0U3RhdGVtZW50KCkKQEAgLTQ5NiwxMDkgKzUx
Nyw3MiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Z2V0TmV4dFN0YXRlCiAgICAgICAg
IG1fY3VycmVudFN0YXRlbWVudCA9IG1fc3RhdGVtZW50UXVldWUudGFrZUZpcnN0KCk7CiB9CiAK
LWJvb2wgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3RhdGVtZW50KCkKK1NRTFRy
YW5zYWN0aW9uU3RhdGUgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3RhdGVtZW50
QW5kR2V0TmV4dFN0YXRlKCkKIHsKLSAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jdXJyZW50U3RhdGVtZW50KSB7CisgICAgICAg
IC8vIE5vIG1vcmUgc3RhdGVtZW50cyB0byBydW4uIFNvIG1vdmUgb24gdG8gdGhlIG5leHQgc3Rh
dGUuCisgICAgICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpQb3N0ZmxpZ2h0QW5kQ29t
bWl0OworICAgIH0KIAogICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOwogCiAgICAg
aWYgKG1faGFzVmVyc2lvbk1pc21hdGNoKQotICAgICAgICBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNl
dFZlcnNpb25NaXNtYXRjaGVkRXJyb3IobV9kYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIG1fY3Vy
cmVudFN0YXRlbWVudC0+c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcihEYXRhYmFzZTo6ZnJvbSht
X2RhdGFiYXNlLmdldCgpKSk7CiAKLSAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5leGVjdXRl
KG1fZGF0YWJhc2UuZ2V0KCkpKSB7CisgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+ZXhlY3V0
ZShEYXRhYmFzZTo6ZnJvbShtX2RhdGFiYXNlLmdldCgpKSkpIHsKICAgICAgICAgaWYgKG1fZGF0
YWJhc2UtPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgewogICAgICAgICAgICAgLy8gRmxh
ZyB0aGlzIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRoZSBkYXRhYmFzZSBmb3IgbGF0
ZXIgZGVsZWdhdGUgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2Ug
PSB0cnVlOwogICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6ZSBvZiB0aGlzIGRhdGFi
YXNlIGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCi0gICAgICAgICAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkp
OworICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhlY3V0
ZVN0YXRlbWVudChEYXRhYmFzZTo6ZnJvbShkYXRhYmFzZSgpKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5oYXNTdGF0ZW1lbnRDYWxsYmFjaygpKSB7Ci0g
ICAgICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN0
YXRlbWVudENhbGxiYWNrOwotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5n
IGRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwot
ICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRy
YW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyU3RhdGVtZW50Q2FsbGJh
Y2s7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gSWYgd2Ug
Z2V0IGhlcmUsIHRoZW4gdGhlIHN0YXRlbWVudCBkb2Vzbid0IGhhdmUgYSBjYWxsYmFjayB0byBp
bnZva2UuCisgICAgICAgIC8vIFdlIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlbWVudC4g
SGVuY2UsIHN0YXkgaW4gdGhpcyBzdGF0ZS4KKyAgICAgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9u
U3RhdGU6OlJ1blN0YXRlbWVudHM7CiAgICAgfQogCiAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVu
dC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkgewotICAgICAgICBtX25leHRTdGVw
ID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjazsK
LSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJRdW90YUluY3JlYXNl
Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFz
ZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMp
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25T
dGF0ZTo6RGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjazsKICAgICB9CiAKLSAgICBoYW5kbGVD
dXJyZW50U3RhdGVtZW50RXJyb3IoKTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
bmV4dFN0YXRlRm9yQ3VycmVudFN0YXRlbWVudEVycm9yKCk7CiB9CiAKLXZvaWQgU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kOjpoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3IoKQorU1FMVHJhbnNhY3Rp
b25TdGF0ZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om5leHRTdGF0ZUZvckN1cnJlbnRTdGF0ZW1l
bnRFcnJvcigpCiB7Ci0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgNi5lcnJvciAtIENhbGwgdGhl
IHN0YXRlbWVudCdzIGVycm9yIGNhbGxiYWNrLCBidXQgaWYgdGhlcmUgd2FzIG5vIGVycm9yIGNh
bGxiYWNrLAorICAgIC8vIFNwZWMgNC4zLjIuNi42OiBlcnJvciAtIENhbGwgdGhlIHN0YXRlbWVu
dCdzIGVycm9yIGNhbGxiYWNrLCBidXQgaWYgdGhlcmUgd2FzIG5vIGVycm9yIGNhbGxiYWNrLAog
ICAgIC8vIG9yIHRoZSB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2ssIGp1bXAgdG8gdGhlIHRy
YW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrCi0gICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+aGFz
U3RhdGVtZW50RXJyb3JDYWxsYmFjaygpICYmICFtX3NxbGl0ZVRyYW5zYWN0aW9uLT53YXNSb2xs
ZWRCYWNrQnlTcWxpdGUoKSkgewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrOwotICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIlNjaGVkdWxpbmcgZGVsaXZlclN0YXRlbWVudENhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAl
cFxuIiwgdGhpcyk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxs
YmFjayhTUUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV90cmFuc2FjdGlvbkVycm9yID0gbV9jdXJyZW50U3RhdGVtZW50LT5zcWxFcnJvcigpOwotICAg
ICAgICBpZiAoIW1fdHJhbnNhY3Rpb25FcnJvcikgewotICAgICAgICAgICAgbV9kYXRhYmFzZS0+
cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwg
MCk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpEQVRBQkFTRV9FUlIsICJ0aGUgc3RhdGVtZW50IGZhaWxlZCB0byBleGVjdXRlIik7
Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAg
fQotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN0YXRlbWVudENhbGxi
YWNrKCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKLQotICAgIC8vIFRyYW5z
YWN0aW9uIFN0ZXAgNi42IGFuZCA2LjMoZXJyb3IpIC0gSWYgdGhlIHN0YXRlbWVudCBjYWxsYmFj
ayB3ZW50IHdyb25nLCBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjawotICAg
IC8vIE90aGVyd2lzZSwgY29udGludWUgdG8gbG9vcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgcXVl
dWUKLSAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IG1f
Y3VycmVudFN0YXRlbWVudC0+cGVyZm9ybUNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRo
aXMpKTsKLSAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7Ci0KLSAgICBpZiAocmVzdWx0
KSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDIs
IFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBj
YWxsYmFjayByYWlzZWQgYW4gZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBk
aWQgbm90IHJldHVybiBmYWxzZSIpOwotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKHRy
dWUpOwotICAgIH0gZWxzZQotICAgICAgICBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOwotfQor
ICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSAm
JiAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpCisgICAgICAg
IHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7CiAK
LXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNr
KCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKLSAgICBBU1NFUlQoIW1fc2hv
dWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KTsKLQotICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEo
ZGF0YWJhc2UoKSk7Ci0KLSAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
cnVuU3RhdGVtZW50czsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3RhdGVt
ZW50cyBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnNjaGVk
dWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOworICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fY3Vy
cmVudFN0YXRlbWVudC0+c3FsRXJyb3IoKTsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb25FcnJvcikg
eworICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgxLCBT
UUxFcnJvcjo6REFUQUJBU0VfRVJSLCAwKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidGhlIHN0YXRlbWVudCBm
YWlsZWQgdG8gZXhlY3V0ZSIpOworICAgIH0KKyAgICByZXR1cm4gbmV4dFN0YXRlRm9yVHJhbnNh
Y3Rpb25FcnJvcigpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cG9zdGZsaWdo
dEFuZENvbW1pdCgpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
cG9zdGZsaWdodEFuZENvbW1pdCgpCiB7CiAgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKIAot
ICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1w
aW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZhaWwKLSAgICBpZiAobV93cmFwcGVy
ICYmICFtX3dyYXBwZXItPnBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRo
aXMpKSkgeworICAgIC8vIFNwZWMgNC4zLjIuNzogUGVyZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBq
dW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZhaWwuCisgICAgaWYgKG1fd3Jh
cHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUG9zdGZsaWdodCh0aGlzKSkgewogICAgICAgICBt
X3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVycm9yKCk7CiAgICAgICAgIGlmICgh
bV90cmFuc2FjdGlvbkVycm9yKSB7CiAgICAgICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21t
aXRUcmFuc2FjdGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwogICAgICAg
ICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5L
Tk9XTl9FUlIsICJ1bmtub3duIGVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc2FjdGlvbiBwb3N0
ZmxpZ2h0Iik7CiAgICAgICAgIH0KLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG5leHRTdGF0ZUZvclRyYW5zYWN0
aW9uRXJyb3IoKTsKICAgICB9CiAKLSAgICAvLyBUcmFuc2FjdG9uIFN0ZXAgOCs5IC0gQ29tbWl0
IHRoZSB0cmFuc2FjdGlvbiwganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBm
YWlscworICAgIC8vIFNwZWMgNC4zLjIuNzogQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiwganVtcGlu
ZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscy4KICAgICBBU1NFUlQobV9zcWxp
dGVUcmFuc2FjdGlvbik7CiAKICAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOwpA
QCAtNjA4LDEzICs1OTIsMTEgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnBvc3RmbGln
aHRBbgogICAgIC8vIElmIHRoZSBjb21taXQgZmFpbGVkLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBz
dGlsbCBiZSBtYXJrZWQgYXMgImluIHByb2dyZXNzIgogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0
aW9uLT5pblByb2dyZXNzKCkpIHsKICAgICAgICAgaWYgKG1fd3JhcHBlcikKLSAgICAgICAgICAg
IG1fd3JhcHBlci0+aGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0
aW9uOjpmcm9tKHRoaXMpKTsKLSAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFy
KCk7CisgICAgICAgICAgICBtX3dyYXBwZXItPmhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZs
aWdodCh0aGlzKTsKICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25S
ZXN1bHQoNCwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJh
c2UoKS5sYXN0RXJyb3IoKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInVuYWJsZSB0byBjb21taXQgdHJhbnNh
Y3Rpb24iLAogICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBuZXh0U3RhdGVGb3JUcmFuc2FjdGlvbkVycm9yKCk7CiAgICAgfQogCiAgICAg
bV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBP
SwpAQCAtNjI3LDkyICs2MDksNDIgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnBvc3Rm
bGlnaHRBbgogICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCiAgICAgICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2Uo
KSk7CiAKLSAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2FsbGJhY2tzLCB0byBicmVh
ayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsK
LQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2ss
IGlmIHRoZXJlIGlzIG9uZQotICAgIGlmIChtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIuaGFzQ2Fs
bGJhY2soKSkgewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVs
aW5nIGRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsK
LSAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5z
YWN0aW9uOjpmcm9tKHRoaXMpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2xlYW51cEFmdGVyU3Vj
Y2Vzc0NhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVy
U3VjY2Vzc0NhbGxiYWNrKCkKLXsKLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVsaXZl
ciBzdWNjZXNzIGNhbGxiYWNrCi0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrID0gbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChzdWNjZXNz
Q2FsbGJhY2spCi0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKLQotICAg
IC8vIFNjaGVkdWxlIGEgInBvc3Qtc3VjY2VzcyBjYWxsYmFjayIgc3RlcCB0byByZXR1cm4gY29u
dHJvbCB0byB0aGUgZGF0YWJhc2UgdGhyZWFkIGluIGNhc2UgdGhlcmUKLSAgICAvLyBhcmUgZnVy
dGhlciB0cmFuc2FjdGlvbnMgcXVldWVkIHVwIGZvciB0aGlzIERhdGFiYXNlCi0gICAgbV9uZXh0
U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFj
azsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyU3VjY2Vzc0Nh
bGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2No
ZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7CisgICAgLy8gU3BlYyA0LjMuMi44OiBEZWxpdmVy
IHN1Y2Nlc3MgY2FsbGJhY2ssIGlmIHRoZXJlIGlzIG9uZS4KKyAgICByZXR1cm4gU1FMVHJhbnNh
Y3Rpb25TdGF0ZTo6RGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsKIH0KIAotdm9pZCBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpCitTUUxUcmFuc2FjdGlv
blN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51cEFuZFRlcm1pbmF0ZSgpCiB7CiAg
ICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKIAotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTEg
LSBFbmQgdHJhbnNhY3Rpb24gc3RlcHMKLSAgICAvLyBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKKyAg
ICAvLyBTcGVjIDQuMy4yLjk6IEVuZCB0cmFuc2FjdGlvbiBzdGVwcy4gVGhlcmUgaXMgbm8gbmV4
dCBzdGVwLgogICAgIExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGVc
biIsIHRoaXMpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwot
ICAgIG1fbmV4dFN0ZXAgPSAwOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRh
dGFiYXNlCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNl
TG9jayh0aGlzKTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmhhbmRsZVRyYW5z
YWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQotewotICAgIGlmIChtX2Vycm9yQ2FsbGJhY2tX
cmFwcGVyLmhhc0NhbGxiYWNrKCkpIHsKLSAgICAgICAgaWYgKGluQ2FsbGJhY2spCi0gICAgICAg
ICAgICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNj
aGVkdWxpbmcgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24g
JXBcbiIsIHRoaXMpOwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlv
bkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm47Ci0gICAgfQogCi0gICAgLy8gTm8gZXJyb3IgY2FsbGJhY2ssIHNvIGZhc3QtZm9y
d2FyZCB0bzoKLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gUm9sbGJhY2sgdGhlIHRyYW5z
YWN0aW9uLgotICAgIGlmIChpbkNhbGxiYWNrKSB7Ci0gICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7
Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAg
bV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOworICAgIGRvQ2xl
YW51cCgpOworICAgIG1fZGF0YWJhc2UtPmluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgp
OworICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpFbmQ7CiB9CiAKLXZvaWQgU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKK1NRTFRy
YW5zYWN0aW9uU3RhdGUgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpuZXh0U3RhdGVGb3JUcmFuc2Fj
dGlvbkVycm9yKCkKIHsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkVycm9yKTsKKyAgICBpZiAo
bV9oYXNFcnJvckNhbGxiYWNrKQorICAgICAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6
RGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIAotICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgMTIgLSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0Ci0g
ICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgotICAgIFJl
ZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9y
Q2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChlcnJvckNhbGxiYWNrKQotICAgICAg
ICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwot
Ci0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcg
Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxu
IiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7
CisgICAgLy8gTm8gZXJyb3IgY2FsbGJhY2ssIHNvIGZhc3QtZm9yd2FyZCB0byB0aGUgbmV4dCBz
dGF0ZSBhbmQgcm9sbGJhY2sgdGhlCisgICAgLy8gdHJhbnNhY3Rpb24uCisgICAgcmV0dXJuIFNR
TFRyYW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsK
IH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaygpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKIHsKICAgICBBU1NFUlQo
bV9sb2NrQWNxdWlyZWQpOwogCisgICAgTE9HKFN0b3JhZ2VBUEksICJUcmFuc2FjdGlvbiAlcCBp
cyBjb21wbGV0ZSB3aXRoIGFuIGVycm9yXG4iLCB0aGlzKTsKICAgICBtX2RhdGFiYXNlLT5kaXNh
YmxlQXV0aG9yaXplcigpOwogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAg
IC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCisgICAg
ICAgIC8vIFNwZWMgNC4zLjIuMTA6IFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi4KICAgICAgICAg
bV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKIAogICAgICAgICBBU1NFUlQoIW1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwpAQCAtNzIw
LDE5ICs2NTIsMzMgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlcgog
ICAgIH0KICAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CiAKLSAgICAvLyBUcmFu
c2FjdGlvbiBTdGVwIDEyIC0gQW55IHN0aWxsLXBlbmRpbmcgc3RhdGVtZW50cyBpbiB0aGUgdHJh
bnNhY3Rpb24gYXJlIGRpc2NhcmRlZC4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3N0YXRlbWVudE11dGV4KTsKLSAgICAgICAgbV9zdGF0ZW1lbnRRdWV1ZS5jbGVhcigpOwot
ICAgIH0KLQotICAgIC8vIFRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlISBUaGVyZSBpcyBubyBuZXh0
IHN0ZXAKLSAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRlIHdp
dGggYW4gZXJyb3JcbiIsIHRoaXMpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0
YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgbV9uZXh0U3RlcCA9IDA7CiAK
LSAgICAvLyBOb3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCi0gICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKKyAgICBy
ZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFuZFRlcm1pbmF0ZTsKK30KKwordm9p
ZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJlcXVlc3RUcmFuc2l0VG9TdGF0ZShTUUxUcmFuc2Fj
dGlvblN0YXRlIG5leHRTdGF0ZSkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcg
JXMgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCBuYW1lRm9yU1FMVHJhbnNhY3Rpb25TdGF0ZShuZXh0
U3RhdGUpLCB0aGlzKTsKKyAgICBtX3JlcXVlc3RlZFN0YXRlID0gbmV4dFN0YXRlOworICAgIEFT
U0VSVChtX3JlcXVlc3RlZFN0YXRlICE9IFNRTFRyYW5zYWN0aW9uU3RhdGU6OkVuZCk7CisgICAg
bV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Cit9CisKKy8vIFRoaXMg
c3RhdGUgZnVuY3Rpb24gaXMgdXNlZCBhcyBhIHN0dWIgZnVuY3Rpb24gdG8gcGx1ZyB1bmltcGxl
bWVudGVkIHN0YXRlcworLy8gaW4gdGhlIHN0YXRlIGRpc3BhdGNoIHRhYmxlLiBUaGV5IGFyZSB1
bmltcGxlbWVudGVkIGJlY2F1c2UgdGhleSBzaG91bGQKKy8vIG5ldmVyIGJlIHJlYWNoZWQgaW4g
dGhlIGNvdXJzZSBvZiBjb3JyZWN0IGV4ZWN1dGlvbi4KK1NRTFRyYW5zYWN0aW9uU3RhdGUgU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjp1bnJlYWNoYWJsZVN0YXRlKCkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RW5kOworfQorCitT
UUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2VuZFRvRnJvbnRlbmRT
dGF0ZSgpCit7CisgICAgQVNTRVJUKG1fbmV4dFN0YXRlICE9IFNRTFRyYW5zYWN0aW9uU3RhdGU6
OklkbGUpOworICAgIG1fZnJvbnRlbmQtPnJlcXVlc3RUcmFuc2l0VG9TdGF0ZShtX25leHRTdGF0
ZSk7CisgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OklkbGU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaAkocmV2aXNpb24gMTQyNjM4
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJh
Y2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOTAgKzMyLDg2IEBACiAKICNpbmNsdWRlICJE
YXRhYmFzZUJhc2ljVHlwZXMuaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKKyNpbmNsdWRl
ICJTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIERhdGFiYXNlOworY2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5bmM7CiBjbGFzcyBTUUxF
cnJvcjsKIGNsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwotY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJh
Y2s7Ci1jbGFzcyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rp
b247Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOwotY2xhc3MgU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOwogY2xhc3MgU1FMVmFs
dWU7Ci1jbGFzcyBWb2lkQ2FsbGJhY2s7CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uV3JhcHBlciA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbldyYXBwZXIoKSB7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgcGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2FjdGlvbiopID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb24qKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHBlcmZvcm1QcmVmbGlnaHQoU1FMVHJhbnNhY3Rpb25CYWNrZW5kKikgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbkJhY2tlbmQq
KSA9IDA7CiAgICAgdmlydHVhbCBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxUcmFuc2Fj
dGlvbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0
ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uQmFja2VuZCopID0gMDsKIH07CiAKLWNsYXNzIFNRTFRyYW5z
YWN0aW9uQmFja2VuZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ+IHsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZCA6IHB1YmxpYyBTUUxUcmFu
c2FjdGlvblN0YXRlTWFjaGluZTxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IHsKIHB1YmxpYzoKLSAg
ICB+U1FMVHJhbnNhY3Rpb25CYWNrZW5kKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25CYWNrZW5kPiBjcmVhdGUoRGF0YWJhc2VCYWNrZW5kQXN5bmMqLAorICAgICAgICBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBw
ZXI+LCBib29sIHJlYWRPbmx5KTsKIAotICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcm
IHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLAotICAgICAg
ICBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgflNRTFRyYW5z
YWN0aW9uQmFja2VuZCgpOwogCiAgICAgdm9pZCBsb2NrQWNxdWlyZWQoKTsKLSAgICBib29sIHBl
cmZvcm1OZXh0U3RlcCgpOwotICAgIHZvaWQgcGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOworICAg
IHZvaWQgcGVyZm9ybU5leHRTdGVwKCk7CiAKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJl
dHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CisgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmMqIGRhdGFi
YXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQogICAgIGJvb2wgaXNSZWFkT25seSgp
IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KICAgICB2b2lkIG5vdGlmeURhdGFiYXNlVGhyZWFkSXNT
aHV0dGluZ0Rvd24oKTsKIAorICAgIFBhc3NSZWZQdHI8U1FMRXJyb3I+IHRyYW5zYWN0aW9uRXJy
b3IoKTsKKyAgICB2b2lkIHNldFNob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChib29sKTsKKwog
cHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvbkJhY2tlbmQoRGF0YWJhc2UqLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4sCi0gICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKKyAgICBTUUxUcmFuc2FjdGlv
bkJhY2tlbmQoRGF0YWJhc2VCYWNrZW5kQXN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiwKKyAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRP
bmx5KTsKIAotICAgIHR5cGVkZWYgdm9pZCAoU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjoqVHJhbnNh
Y3Rpb25TdGVwTWV0aG9kKSgpOwotICAgIFRyYW5zYWN0aW9uU3RlcE1ldGhvZCBtX25leHRTdGVw
OworICAgIHZvaWQgZG9DbGVhbnVwKCk7CiAKICAgICB2b2lkIGVucXVldWVTdGF0ZW1lbnQoUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnQ+KTsKIAogICAgIHZvaWQgY2hlY2tBbmRIYW5kbGVDbG9zZWRP
ckludGVycnVwdGVkRGF0YWJhc2UoKTsKIAotICAgIHZvaWQgYWNxdWlyZUxvY2soKTsKLSAgICB2
b2lkIG9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpOwotICAgIHZvaWQgZGVsaXZlclRyYW5z
YWN0aW9uQ2FsbGJhY2soKTsKLSAgICB2b2lkIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7Ci0g
ICAgdm9pZCBydW5TdGF0ZW1lbnRzKCk7Ci0gICAgdm9pZCBnZXROZXh0U3RhdGVtZW50KCk7Ci0g
ICAgYm9vbCBydW5DdXJyZW50U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBoYW5kbGVDdXJyZW50U3Rh
dGVtZW50RXJyb3IoKTsKLSAgICB2b2lkIGRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygpOwotICAg
IHZvaWQgZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjaygpOwotICAgIHZvaWQgcG9zdGZsaWdo
dEFuZENvbW1pdCgpOwotICAgIHZvaWQgZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaygpOwotICAgIHZv
aWQgY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrKCk7Ci0gICAgdm9pZCBoYW5kbGVUcmFuc2Fj
dGlvbkVycm9yKGJvb2wgaW5DYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKCk7Ci0gICAgdm9pZCBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2soKTsKKyAgICAvLyBTdGF0ZSBNYWNoaW5lIGZ1bmN0aW9uczoKKyAgICB2aXJ0dWFsIFN0
YXRlRnVuY3Rpb24gc3RhdGVGdW5jdGlvbkZvcihTUUxUcmFuc2FjdGlvblN0YXRlKTsKKyAgICB2
b2lkIHJlcXVlc3RUcmFuc2l0VG9TdGF0ZShTUUxUcmFuc2FjdGlvblN0YXRlKTsKKworICAgIC8v
IFN0YXRlIGZ1bmN0aW9uczoKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIGFjcXVpcmVMb2NrKCk7
CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKTsK
KyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIHJ1blN0YXRlbWVudHMoKTsKKyAgICBTUUxUcmFuc2Fj
dGlvblN0YXRlIHBvc3RmbGlnaHRBbmRDb21taXQoKTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRl
IGNsZWFudXBBbmRUZXJtaW5hdGUoKTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIGNsZWFudXBB
ZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOworCisgICAgU1FMVHJhbnNhY3Rpb25TdGF0
ZSB1bnJlYWNoYWJsZVN0YXRlKCk7CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBzZW5kVG9Gcm9u
dGVuZFN0YXRlKCk7CisKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIG5leHRTdGF0ZUZvckN1cnJl
bnRTdGF0ZW1lbnRFcnJvcigpOworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgbmV4dFN0YXRlRm9y
VHJhbnNhY3Rpb25FcnJvcigpOworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgcnVuQ3VycmVudFN0
YXRlbWVudEFuZEdldE5leHRTdGF0ZSgpOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBkZWJ1Z1N0ZXBOYW1lKFRyYW5zYWN0aW9uU3RlcE1ldGhvZCk7Ci0jZW5k
aWYKKyAgICB2b2lkIGdldE5leHRTdGF0ZW1lbnQoKTsKIAorICAgIFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbj4gbV9mcm9udGVuZDsKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBtX2N1cnJlbnRTdGF0
ZW1lbnQ7CiAKLSAgICBib29sIG1fZXhlY3V0ZVNxbEFsbG93ZWQ7Ci0KLSAgICBSZWZQdHI8RGF0
YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPERhdGFiYXNlQmFja2VuZEFzeW5jPiBtX2Rh
dGFiYXNlOwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IG1fd3JhcHBlcjsKLSAg
ICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gbV9jYWxsYmFja1dy
YXBwZXI7Ci0gICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFZvaWRDYWxsYmFjaz4gbV9zdWNjZXNzQ2Fs
bGJhY2tXcmFwcGVyOwotICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFja1dyYXBwZXI7CiAgICAgUmVmUHRyPFNRTEVycm9yPiBt
X3RyYW5zYWN0aW9uRXJyb3I7CisKKyAgICBib29sIG1faGFzQ2FsbGJhY2s7CisgICAgYm9vbCBt
X2hhc1N1Y2Nlc3NDYWxsYmFjazsKKyAgICBib29sIG1faGFzRXJyb3JDYWxsYmFjazsKICAgICBi
b29sIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50OwogICAgIGJvb2wgbV9tb2RpZmllZERh
dGFiYXNlOwogICAgIGJvb2wgbV9sb2NrQWNxdWlyZWQ7CkBAIC0xMjcsNyArMTIzLDcgQEAgcHJp
dmF0ZToKIAogICAgIE93blB0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV9zcWxpdGVUcmFuc2FjdGlv
bjsKIAotICAgIGZyaWVuZCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIG9uY2UgdGhlIGZyb250LWVuZCBoYXMgYmVlbiBwcm9wZXJseSBpc29sYXRlZC4KKyAgICBm
cmllbmQgY2xhc3MgU1FMVHJhbnNhY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAkocmV2aXNpb24gMTQyNjM4KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmQu
aCIKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKQEAg
LTQzLDEzICs0NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU1FMVHJhbnNhY3Rp
b25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oRGF0YWJhc2VCYWNrZW5kKiBkYXRh
YmFzZSkKIHsKLSAgICBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5zY2hlZHVsZU5vdGlmeURh
dGFiYXNlQ2hhbmdlZCgKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zY2hlZHVsZU5v
dGlmeURhdGFiYXNlQ2hhbmdlZCgKICAgICAgICAgZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCks
IGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9u
Q2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCiB7
Ci0gICAgRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZGF0YWJhc2VDaGFuZ2VkKGRhdGFiYXNl
KTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQoZGF0YWJh
c2UpOwogfQogCiBib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShEYXRh
YmFzZUJhY2tlbmQqIGRhdGFiYXNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNDI2MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmRBc3luYy5oIgogI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uQmFja2VuZC5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIoU1FMVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbikKIHsKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKTsKKyAgICBEYXRhYmFzZUJhY2tlbmRBc3luYyogZGF0YWJhc2UgPSB0cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIHJldHVybiBkYXRhYmFz
ZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
U3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNRTFRyYW5zYWN0aW9uU3RhdGVf
aAorI2RlZmluZSBTUUxUcmFuc2FjdGlvblN0YXRlX2gKKworI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKyNpbmNsdWRlIDx3dGYvRW51bUNsYXNzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRU5VTV9DTEFTUyhTUUxUcmFuc2FjdGlvblN0YXRlKSB7CisgICAgRW5kID0gMCwKKyAgICBJ
ZGxlLAorICAgIEFjcXVpcmVMb2NrLAorICAgIE9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCwK
KyAgICBSdW5TdGF0ZW1lbnRzLAorICAgIFBvc3RmbGlnaHRBbmRDb21taXQsCisgICAgQ2xlYW51
cEFuZFRlcm1pbmF0ZSwKKyAgICBDbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2ss
CisgICAgRGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2ssCisgICAgRGVsaXZlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaywKKyAgICBEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2ssCisgICAgRGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjaywKKyAgICBEZWxpdmVyU3VjY2Vzc0NhbGxiYWNrLAorICAg
IE51bWJlck9mU3RhdGVzIC8vIEFsd2F5cyBrZWVwIHRoaXMgYXQgdGhlIGVuZCBvZiB0aGUgbGlz
dC4KK30gRU5VTV9DTEFTU19FTkQoU1FMVHJhbnNhY3Rpb25TdGF0ZSk7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAv
LyBTUUxUcmFuc2FjdGlvblN0YXRlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hp
bmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmgi
CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFM
T0dfRElTQUJMRUQKK2NvbnN0IGNoYXIqIG5hbWVGb3JTUUxUcmFuc2FjdGlvblN0YXRlKFNRTFRy
YW5zYWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2Ug
U1FMVHJhbnNhY3Rpb25TdGF0ZTo6RW5kOgorICAgICAgICByZXR1cm4gImVuZCI7CisgICAgY2Fz
ZSBTUUxUcmFuc2FjdGlvblN0YXRlOjpJZGxlOgorICAgICAgICByZXR1cm4gImlkbGUiOworICAg
IGNhc2UgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6QWNxdWlyZUxvY2s6CisgICAgICAgIHJldHVybiAi
YWNxdWlyZUxvY2siOworICAgIGNhc2UgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6T3BlblRyYW5zYWN0
aW9uQW5kUHJlZmxpZ2h0OgorICAgICAgICByZXR1cm4gIm9wZW5UcmFuc2FjdGlvbkFuZFByZWZs
aWdodCI7CisgICAgY2FzZSBTUUxUcmFuc2FjdGlvblN0YXRlOjpSdW5TdGF0ZW1lbnRzOgorICAg
ICAgICByZXR1cm4gInJ1blN0YXRlbWVudHMiOworICAgIGNhc2UgU1FMVHJhbnNhY3Rpb25TdGF0
ZTo6UG9zdGZsaWdodEFuZENvbW1pdDoKKyAgICAgICAgcmV0dXJuICJwb3N0ZmxpZ2h0QW5kQ29t
bWl0IjsKKyAgICBjYXNlIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkNsZWFudXBBbmRUZXJtaW5hdGU6
CisgICAgICAgIHJldHVybiAiY2xlYW51cEFuZFRlcm1pbmF0ZSI7CisgICAgY2FzZSBTUUxUcmFu
c2FjdGlvblN0YXRlOjpDbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6CisgICAg
ICAgIHJldHVybiAiY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIjsKKyAgICBj
YXNlIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrOgorICAg
ICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIjsKKyAgICBjYXNlIFNRTFRy
YW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s6CisgICAgICAg
IHJldHVybiAiZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayI7CisgICAgY2FzZSBTUUxU
cmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s6CisgICAgICAgIHJldHVy
biAiZGVsaXZlclN0YXRlbWVudENhbGxiYWNrIjsKKyAgICBjYXNlIFNRTFRyYW5zYWN0aW9uU3Rh
dGU6OkRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2s6CisgICAgICAgIHJldHVybiAiZGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjayI7CisgICAgY2FzZSBTUUxUcmFuc2FjdGlvblN0YXRlOjpE
ZWxpdmVyU3VjY2Vzc0NhbGxiYWNrOgorICAgICAgICByZXR1cm4gImRlbGl2ZXJTdWNjZXNzQ2Fs
bGJhY2siOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVU5LTk9XTiI7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiVU5LTk9XTiI7Cit9CisjZW5k
aWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRB
QkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25TdGF0ZU1hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGVN
YWNoaW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25TdGF0
ZU1hY2hpbmVfaAorI2RlZmluZSBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZV9oCisKKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBTUUxUcmFuc2FjdGlvblN0YXRlTWFj
aGluZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN0YXRlTWFj
aGluZTxUPj4geworcHVibGljOgorICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uU3RhdGVNYWNo
aW5lKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZSgp
OworCisgICAgdHlwZWRlZiBTUUxUcmFuc2FjdGlvblN0YXRlIChUOjoqIFN0YXRlRnVuY3Rpb24p
KCk7CisgICAgdmlydHVhbCBTdGF0ZUZ1bmN0aW9uIHN0YXRlRnVuY3Rpb25Gb3IoU1FMVHJhbnNh
Y3Rpb25TdGF0ZSkgPSAwOworCisgICAgdm9pZCBzZXRTdGF0ZVRvUmVxdWVzdGVkU3RhdGUoKTsK
KyAgICB2b2lkIHJ1blN0YXRlTWFjaGluZSgpOworCisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBt
X25leHRTdGF0ZTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIG1fcmVxdWVzdGVkU3RhdGU7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgLy8gVGhlIHN0YXRlIGF1ZGl0IHRyYWlsIChpLmUuIGJyZWFk
IGNydW1icykga2VlcHMgdHJhY2sgb2YgdXAgdG8gdGhlIGxhc3QKKyAgICAvLyBzX3NpemVPZlN0
YXRlQXVkaXRUcmFpbCBzdGF0ZXMgdGhhdCB0aGUgc3RhdGUgbWFjaGluZSBlbnRlcnMuIFRoZSBh
dWRpdAorICAgIC8vIHRyYWlsIGlzIHVwZGF0ZWQgYmVmb3JlIGVudGVyaW5nIGVhY2ggc3RhdGUu
IFRoaXMgaXMgZm9yIGRlYnVnZ2luZyB1c2UKKyAgICAvLyBvbmx5LgorICAgIHN0YXRpYyBjb25z
dCBpbnQgc19zaXplT2ZTdGF0ZUF1ZGl0VHJhaWwgPSAyMDsKKyAgICBpbnQgbV9uZXh0U3RhdGVB
dWRpdEVudHJ5OworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgbV9zdGF0ZUF1ZGl0VHJhaWxbc19z
aXplT2ZTdGF0ZUF1ZGl0VHJhaWxdOworI2VuZGlmCit9OworCisjaWYgIUxPR19ESVNBQkxFRAor
ZXh0ZXJuIGNvbnN0IGNoYXIqIG5hbWVGb3JTUUxUcmFuc2FjdGlvblN0YXRlKFNRTFRyYW5zYWN0
aW9uU3RhdGUpOworI2VuZGlmCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitTUUxUcmFuc2FjdGlv
blN0YXRlTWFjaGluZTxUPjo6U1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUoKQorICAgIDogbV9u
ZXh0U3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZSkKKyAgICAsIG1fcmVxdWVzdGVkU3Rh
dGUoU1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX25l
eHRTdGF0ZUF1ZGl0RW50cnkoMCkKKyNlbmRpZgoreworI2lmbmRlZiBOREVCVUcKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNfc2l6ZU9mU3RhdGVBdWRpdFRyYWlsOyBpKyspCisgICAgICAgIG1f
c3RhdGVBdWRpdFRyYWlsW2ldID0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6TnVtYmVyT2ZTdGF0ZXM7
CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgU1FMVHJhbnNhY3Rpb25T
dGF0ZU1hY2hpbmU8VD46OnNldFN0YXRlVG9SZXF1ZXN0ZWRTdGF0ZSgpCit7CisgICAgQVNTRVJU
KG1fbmV4dFN0YXRlID09IFNRTFRyYW5zYWN0aW9uU3RhdGU6OklkbGUpOworICAgIEFTU0VSVCht
X3JlcXVlc3RlZFN0YXRlICE9IFNRTFRyYW5zYWN0aW9uU3RhdGU6OklkbGUpOworICAgIG1fbmV4
dFN0YXRlID0gbV9yZXF1ZXN0ZWRTdGF0ZTsKKyAgICBtX3JlcXVlc3RlZFN0YXRlID0gU1FMVHJh
bnNhY3Rpb25TdGF0ZTo6SWRsZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgU1FM
VHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmU8VD46OnJ1blN0YXRlTWFjaGluZSgpCit7CisgICAgQVNT
RVJUKFNRTFRyYW5zYWN0aW9uU3RhdGU6OkVuZCA8IFNRTFRyYW5zYWN0aW9uU3RhdGU6OklkbGUp
OworICAgIHdoaWxlIChtX25leHRTdGF0ZSA+IFNRTFRyYW5zYWN0aW9uU3RhdGU6OklkbGUpIHsK
KyAgICAgICAgQVNTRVJUKG1fbmV4dFN0YXRlIDwgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6TnVtYmVy
T2ZTdGF0ZXMpOworICAgICAgICBTdGF0ZUZ1bmN0aW9uIHN0YXRlRnVuY3Rpb24gPSBzdGF0ZUZ1
bmN0aW9uRm9yKG1fbmV4dFN0YXRlKTsKKyAgICAgICAgQVNTRVJUKHN0YXRlRnVuY3Rpb24pOwor
CisjaWZuZGVmIE5ERUJVRworICAgICAgICBtX3N0YXRlQXVkaXRUcmFpbFttX25leHRTdGF0ZUF1
ZGl0RW50cnldID0gbV9uZXh0U3RhdGU7CisgICAgICAgIG1fbmV4dFN0YXRlQXVkaXRFbnRyeSA9
IChtX25leHRTdGF0ZUF1ZGl0RW50cnkgKyAxKSAlIHNfc2l6ZU9mU3RhdGVBdWRpdFRyYWlsOwor
I2VuZGlmCisgICAgICAgIG1fbmV4dFN0YXRlID0gKHN0YXRpY19jYXN0PFQqPih0aGlzKS0+KnN0
YXRlRnVuY3Rpb24pKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25T
dGF0ZU1hY2hpbmVfaApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHJldmlzaW9uIDE0MjYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMyMiw2ICsyNTMyMiwx
MCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxDaGFuZ2VWZXJzaW9uRGF0YS5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRh
YmFzZVxDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC0y
NTU4Miw2ICsyNTU4NiwxOCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvblN0YXRl
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0
YWJhc2VcU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2
aXNpb24gMTQyNjM4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg4MCw2ICsxODgwLDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25CYWNrZW5k
U3luYy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5z
YWN0aW9uU3RhdGVNYWNoaW5lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1v
ZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcV29ya2VyQ29udGV4dFdlYkRhdGFi
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2Vic29ja2V0
c1xUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAiIC8+CkBAIC02NDE0LDYgKzY0MTUsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xub3RpZmljYXRpb25zXE5vdGlm
aWNhdGlvbkNsaWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xu
b3RpZmljYXRpb25zXFdvcmtlckNvbnRleHROb3RpZmljYXRpb25zLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXEFic3RyYWN0RGF0YWJhc2VTZXJ2
ZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2Vc
Q2hhbmdlVmVyc2lvbkRhdGEuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVs
ZXNcd2ViZGF0YWJhc2VcQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2UuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcRGF0YWJhc2VBdXRob3JpemVy
LmgiIC8+CkBAIC02NDUxLDYgKzY0NTMsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
TW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkNsaWVudC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvblN0YXRlLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0
aW9uU3RhdGVNYWNoaW5lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3luYy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxXb3Jr
ZXJDb250ZXh0V2ViRGF0YWJhc2UuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE0
MjYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ou
ZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTg5OSw5ICsxODk5LDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb24uY3BwIj4K
ICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxU
cmFuc2FjdGlvbi5jcHAiPgotICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0
ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAiPgogICAgICAgPEZpbHRlcj5N
b2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xOTE0LDYg
KzE5MTEsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFz
ZVxTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNc
d2ViZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUu
Y3BwIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgorICAgIDwv
Q2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFz
ZVxTUUxUcmFuc2FjdGlvblN5bmMuY3BwIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRh
YmFzZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtODQ3Miw2ICs4NDcyLDkgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcQWJzdHJhY3REYXRh
YmFzZVNlcnZlci5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3
ZWJkYXRhYmFzZVxDaGFuZ2VWZXJzaW9uRGF0YS5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3
ZWJkYXRhYmFzZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIj4KICAg
ICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgpAQCAtODU4Myw2ICs4NTg2LDEyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1
bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIj4KICAgICAgIDxG
aWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlv
blN0YXRlLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+Cisg
ICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1
bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3luYy5oIj4K
ICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTQyNjM4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzA1LDYgKzM3MDUs
NyBAQAogCQk5N0I4RkZEMTE2QUU3Rjk2MDAzODM4OEQgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTdCOEZGQ0YxNkFFN0Y5MjAwMzgzODhEIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklu
bGluZXMuaCAqLzsgfTsKIAkJOTdCQzY5REExNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFj
a2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
N0JDNjlENjE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kLmNwcCAqLzsgfTsKIAkJ
OTdCQzY5REIxNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RDcxNTA1RjA3NjAwMUI3
NEFDIC8qIERhdGFiYXNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUZFMzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJz
aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUzNkZEMTExNkM3ODI2NDAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggKi87IH07CiAJ
CTk3QkM2OURDMTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlEODE1MDVG
MDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovOyB9OwogCQk5N0JDNjlE
RDE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUQ5MTUwNUYwNzYwMDFCNzRB
QyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovOyB9OwogCQk5N0JDNkEyMDE1MDVGMDgxMDAx
Qjc0QUMgLyogRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTdCQzY5REUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCAqLzsg
fTsKQEAgLTM3NDQsMTIgKzM3NDUsMTkgQEAKIAkJOTdCQzZBNEUxNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3QkM2QTBDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxTdGF0ZW1lbnRTeW5jLmgg
Ki87IH07CiAJCTk3QkM2QTRGMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkEwRDE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovOyB9OwogCQk5N0JDNkE1MDE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTBFMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxU
cmFuc2FjdGlvbi5oICovOyB9OworCQlGRUUxODExMzE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRTE4MTExMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tl
bmQuY3BwICovOyB9OworCQlGRUUxODExNDE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rp
b25CYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRUUxODExMjE2QzMxOUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmggKi87
IH07CisJCUZFQUQ3RDg3MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRT
eW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QUQ3RDg1MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcCAq
LzsgfTsKKwkJRkVBRDdEODgxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZFN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QUQ3RDg2MTZDMzM5RUUwMEQ0NjcwQiAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmggKi87
IH07CiAJCTk3QkM2QTUyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkEx
MDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovOyB9OwogCQk5
N0JDNkE1NDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTIxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCAqLzsgfTsKIAkJOTdCQzZBNTUx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExMzE1MDVGMDgxMDAxQjc0QUMg
LyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCAqLzsgfTsKIAkJOTdCQzZBNTYxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTQxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovOyB9OwogCQk5N0JDNkE1NzE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTUxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLzsgfTsKIAkJOTdCQzZBNTgxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTYxNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oICovOyB9OworCQlGRTM2RkQxODE2Qzc4MjY1MDBG
ODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTQxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5z
YWN0aW9uU3RhdGUuaCAqLzsgfTsKKwkJRkUzNkZEMTYxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRy
YW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFMzZGRDEyMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlv
blN0YXRlTWFjaGluZS5jcHAgKi87IH07CisJCUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBT
UUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUzNkZEMTMxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0
aW9uU3RhdGVNYWNoaW5lLmggKi87IH07CiAJCTk3QkM2QTVBMTUwNUYwODEwMDFCNzRBQyAvKiBT
UUxUcmFuc2FjdGlvblN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTdCQzZBMTgxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3lu
Yy5jcHAgKi87IH07CiAJCTk3QkM2QTVCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlv
blN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
QkM2QTE5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaCAqLzsgfTsKIAkJ
OTdCQzZBNUQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExQjE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLzsgfTsKQEAg
LTExMTUwLDYgKzExMTU4LDcgQEAKIAkJOTdCOEZGQ0YxNkFFN0Y5MjAwMzgzODhEIC8qIENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5N0JDNjlENjE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERhdGFiYXNlQmFja2Vu
ZC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OUQ3MTUwNUYwNzYwMDFCNzRBQyAvKiBE
YXRhYmFzZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YWJh
c2VCYWNrZW5kLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTM2RkQxMTE2Qzc4MjY0MDBGODg3QzEg
LyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q2hhbmdlVmVyc2lvbkRhdGEuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVy
c2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzY5RDgxNTA1RjA3
NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcDsgcGF0aCA9IE1vZHVs
ZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5N0JDNjlEOTE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldy
YXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2hhbmdlVmVyc2lvbldy
YXBwZXIuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzY5REUxNTA1RjA4MTAwMUI3NEFD
IC8qIERhdGFiYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERh
dGFiYXNlLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTExOTksNiArMTEyMDgsMTAgQEAKIAkJOTdCQzZB
MEQxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uLmNwcDsgcGF0aCA9IE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5N0JDNkEwRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb24uaDsgcGF0aCA9IE1vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTdCQzZBMEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkVFMTgxMTExNkMzMTlFODAwMDg0ODQ5IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkJhY2tl
bmQuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUUxODExMjE2QzMxOUU4MDAwODQ4
NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFNRTFRyYW5zYWN0aW9uQmFja2VuZC5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkVBRDdEODUxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kU3luYy5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFj
a2VuZFN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUFEN0Q4NjE2QzMz
OUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmg7IHBhdGggPSBN
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMTAxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2QTExMTUw
NUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmlkbDsgcGF0aCA9IE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3QkM2QTEyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxUcmFuc2FjdGlv
bkNsaWVudC5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xp
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjA3LDYgKzExMjIwLDkg
QEAKIAkJOTdCQzZBMTUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2QTE2MTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmg7IHBhdGggPSBN
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNkExNzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRTM2RkQxNDE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvblN0YXRlLmg7IHBhdGgg
PSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkUzNkZEMTIxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0
aW9uU3RhdGVNYWNoaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTM2RkQxMzE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1h
Y2hpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25T
dGF0ZU1hY2hpbmUuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25T
dGF0ZU1hY2hpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMTgxNTA1
RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxUcmFuc2FjdGlvblN5bmMuY3BwOyBwYXRoID0gTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5N0JDNkExOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5j
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uU3luYy5o
OyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMUExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRy
YW5zYWN0aW9uU3luYy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU1FMVHJhbnNhY3Rpb25T
eW5jLmlkbDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NjAxLDYgKzE4NjE3LDcgQEAKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRkUxMTVGQTkxNjc5ODhDRDAw
MjQ5MTM0IC8qIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCAqLywKKwkJCQlGRTM2RkQxMTE2Qzc4
MjY0MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLywKIAkJCQk5N0JDNjlEODE1MDVG
MDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTk3QkM2OUQ5
MTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTk3QkM2
OURFMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xODY4MSw2ICsxODY5
OCw5IEBACiAJCQkJOTdCQzZBMTUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCAqLywKIAkJCQk5N0JDNkExNjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmggKi8sCiAJCQkJOTdCQzZBMTcxNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5pZGwgKi8sCisJCQkJRkUzNkZEMTQxNkM3ODI2
NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGUuaCAqLywKKwkJCQlGRTM2RkQxMjE2Qzc4
MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwICovLAorCQkJCUZF
MzZGRDEzMTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oICov
LAogCQkJCTk3QkM2QTE4MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3Bw
ICovLAogCQkJCTk3QkM2QTE5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMu
aCAqLywKIAkJCQk5N0JDNkExQTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5j
LmlkbCAqLywKQEAgLTIzMjkzLDYgKzIzMzEzLDcgQEAKIAkJCQkwNzlEMDg2ODE2MkYyMEU4MDBE
Qjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc5
RDA4NkIxNjJGMjFGOTAwREI4NjU4IC8qIENhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTY1NTBCNjlFMDk5REYwMjcwMDkwRDc4MSAvKiBDREFUQVNlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCUZFMzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VW
ZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFD
IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNUZGRjEy
QjAyNjc2MDBDMUEzNTkgLyogQ2hhbm5lbE1lcmdlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZEMzE2MDAyMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI1OTA1LDYgKzI1OTI2LDggQEAKIAkJCQk5N0JDNkE1NTE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2
QTU3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5N0JDNkE1ODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTM2RkQxODE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzNkZEMTcx
NkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5N0JDNkE1QjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5j
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkE1RDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkU2RTVBMENDNTUy
MTMwMDRBMjA2MiAvKiBTUUxWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTIwMSw2ICsyOTIy
NCw3IEBACiAJCQkJRkVBRDdEODcxNkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNTQxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTU2
MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUZFMzZGRDE2MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0
YXRlTWFjaGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkE1QTE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkU2RTU5
MENDNTUyMTMwMDRBMjA2MiAvKiBTUUxWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Yx
OUFFNjA4MjQ1RTU5MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcAkocmV2aXNpb24gMTQyNjM4KQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5
ICs0MSwxMCBAQAogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3Ry
dW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJTUUxFcnJvci5oIgorI2luY2x1ZGUgIlNRTFJl
c3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFJlc3VsdFNldFJvd0xpc3QuaCIKICNpbmNsdWRlICJT
UUxTdGF0ZW1lbnRDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaCIKLSNpbmNsdWRlICJTUUxSZXN1bHRTZXRSb3dMaXN0LmgiCiAjaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb24uaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgiCg==
</data>
<flag name="commit-queue"
          id="208465"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188400</attachid>
            <date>2013-02-14 12:26:21 -0800</date>
            <delta_ts>2013-02-14 18:04:24 -0800</delta_ts>
            <desc>The patch (with build fixes, ChangeLog, and more comprehensive comments).</desc>
            <filename>bug-104750.patch</filename>
            <type>text/plain</type>
            <size>153291</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyMiBAQAorMjAxMy0wMi0xNCAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgU1FMVHJhbnNhY3Rpb24g
d29yayBiZXR3ZWVuIHRoZSBmcm9udGVuZCBhbmQgYmFja2VuZC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDc1MC4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHBhcnQgb2YgdGhlIHdlYmRh
dGFiYXNlIHJlZmFjdG9yaW5nIGZvciB3ZWJraXQyLgorCisgICAgICAgIDEuIENoYW5nZWQgaG93
IHRyYW5zYWN0aW9ucyBhcmUgY3JlYXRlZC4KKworICAgICAgICAgICAtIERhdGFiYXNlOjpydW5U
cmFuc2FjdGlvbigpIGZpcnN0IGNyZWF0ZXMgYSBTUUxUcmFuc2FjdGlvbiBmcm9udGVuZAorICAg
ICAgICAgICAgIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgMyBzY3JpcHQgY2FsbGJhY2tzLiBJdCB0
aGVuIHBhc3NlcyB0aGUKKyAgICAgICAgICAgICBTUUxUcmFuc2FjdGlvbiB0byB0aGUgYmFja2Vu
ZCBkYXRhYmFzZSB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kLgorICAgICAgICAgICAtIFRoZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgbWFuYWdlcyBhbGwg
U1FMaXRlVHJhbnNhY3Rpb24gd29yay4KKworICAgICAgICAyLiBJbnRyb2R1Y2VkIFNRTFRyYW5z
YWN0aW9uU3RhdGUgYW5kIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLgorCisgICAgICAgICAg
IC0gSW5zdGVhZCBvZiB0cmFja2luZyB0aGUgdHJhbnNhY3Rpb24gcGhhc2VzIGFzICJzdGVwcyIg
aW4gbV9uZXh0U3RlcCwKKyAgICAgICAgICAgICB3ZSBub3cgdXNlIG1fbmV4dFN0YXRlIHdoaWNo
IGlzIG9mIGVudW0gY2xhc3MgU1FMVHJhbnNhY3Rpb25TdGF0ZS4KKyAgICAgICAgICAgICBVbmxp
a2UgbV9uZXh0U3RlcCB3aGljaCBpcyBhIHBvaW50ZXIgdG8gYSAic3RlcCIgZnVuY3Rpb24sCisg
ICAgICAgICAgICAgbV9uZXh0U3RhdGUgaXMgYSBzdGF0ZSB2YXJpYWJsZSB3aGljaCBpcyB1c2Vk
IHRvIGluZGV4IGludG8gYQorICAgICAgICAgICAgIHN0YXRlIGRpc3BhdGNoIHRhYmxlLgorCisg
ICAgICAgICAgIC0gQm90aCBTUUxUcmFuc2FjdGlvbiBhbmQgU1FMVHJhbnNhY3Rpb25CYWNrZW5k
IG5vdyBleHRlbmRzCisgICAgICAgICAgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUsIGFu
ZCB1c2VzIGl0cyBkaXNwYXRjaCBtZWNoYW5pc20gYmFzZWQgb24KKyAgICAgICAgICAgICB0aGUg
U1FMVHJhbnNhY3Rpb25TdGF0ZS4KKworICAgICAgICAgICAtIEluc3RlYWQgb2YgaGF2aW5nIDEg
c3RhdGUgbWFjaGluZSBpbnN0YW5jZXMsIHRoZXJlIGFyZSAyOiAxIGluIHRoZQorICAgICAgICAg
ICAgIGZyb250ZW5kLCBhbmQgMSBpbiB0aGUgYmFja2VuZC4gVGhlIDIgaGF2ZSBtaXJyb3JlZCBz
dGF0ZXMsIGFuZAorICAgICAgICAgICAgIHRyYW5zZmVycyB3b3JrIHRvIHRoZSBvdGhlciBzdGF0
ZSBtYWNoaW5lIHdoZW4gbmVlZGVkLgorCisgICAgICAgICAgIC0gUHJldmlvdXNseSwgc3RhdGUg
ZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgaW5saW5lIGZyb20gb3RoZXIgc3RhdGVzLgorICAgICAg
ICAgICAgIFRoZXkgYXJlIG5vdyBvbmx5IGNhbGxlZCBmcm9tIHRoZSBzdGF0ZSBtYWNoaW5lcyBy
dW5TdGF0ZU1hY2hpbmUoKQorICAgICAgICAgICAgIG1ldGhvZC4gVGhpcyBtYWtlcyBpdCBwb3Nz
aWJsZSB0byBpc29sYXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uCisgICAgICAgICAgICAgbWVjaGFu
aXNtIGdvaW5nIGJldHdlZW4gdGhlIHNpZGVzIChmcm9udGVuZCBhbmQgYmFja2VuZCkgdG8gMgor
ICAgICAgICAgICAgIGZ1bmN0aW9ucyBvbmx5OiBTUUxUcmFuc2FjdGlvbjo6c2VuZFRvQmFja2Vu
ZFN0YXRlKCkgYW5kCisgICAgICAgICAgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpzZW5kVG9G
cm9udGVuZFN0YXRlKCkuCisKKyAgICAgICAgMy4gQ29uc29saWRhdGVkIGNsZWFudXAgd29yayAo
bW9zdGx5KSB0byBhIHVuaWZpZWQgY2xlYW51cCBmdW5jdGlvbi4KKworICAgICAgICA0LiBDaGFu
Z2VkIHRoZSBmcm9udGVuZCBEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24oKSB0byB1c2UgYQorICAg
ICAgICAgICBDaGFuZ2VWZXJzaW9uRGF0YSogKGluc3RlYWQgb2YgYSBDaGFuZ2VWZXJzaW9uV3Jh
cHBlciByZWYgcHRyKS4KKworICAgICAgICAgICAtIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ug
Q2hhbmdlVmVyc2lvbldyYXBwZXIgY29udGFpbnMgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAg
IHVzZWQgaW4gcHJvY2Vzc2luZyBhIHRyYW5zYWN0aW9uICh0byBiZSBpbnZva2VkIGluIHRoZSBi
YWNrZW5kKS4KKyAgICAgICAgICAgICBJbnN0ZWFkLCB3aGF0IHdlIHdhbnQgaXMgdG8gc2ltcGx5
IHBhc3MgdGhlIDIgb2xkIGFuZCBuZXcgdmVyc2lvbgorICAgICAgICAgICAgIHN0cmluZ3MgdG8g
dGhlIGJhY2tlbmQuIFRoZSBuZXcgQ2hhbmdlVmVyc2lvbkRhdGEgc2ltcGx5IHBhY2thZ2VzIHVw
CisgICAgICAgICAgICAgdGhlc2UgMiBzdHJpbmdzLgorICAgICAgICAgICAtIFRoaXMgbWFrZXMg
Q2hhbmdlVmVyc2lvbkRhdGEgZWFzeSB0byBzZXJpYWxpemUgZm9yIElQQyBtZXNzYWdpbmcgbGF0
ZXIuCisKKyAgICAgICAgNS4gTW92ZWQgc29tZSB0cmFuc2FjdGlvbiBmdW5jdGlvbnMgYmFjayB0
byB0aGUgZnJvbnRlbmQgU1FMVHJhbnNhY3Rpb24KKyAgICAgICAgICAgYmVjYXVzZSB0aGV5IGJl
bG9uZyB0aGVyZS4KKworICAgICAgICA2LiBNb3ZlZCBzb21lIERhdGFiYXNlIGZ1bmN0aW9ucyB0
byBpdHMgRGF0YWJhc2VCYWNrZW5kQXN5bmMgYmFja2VuZAorICAgICAgICAgICBub3cgdGhhdCB0
aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gc3BsaXQgdXAuCisKKyAgICAgICAgICAgLSBUaGlzIGlz
IGRyaXZlbiBuYXR1cmFsbHkgYnkgdGhvc2UgZnVuY3Rpb25zIGJlaW5nIHVzZWQgZXhjbHVzaXZl
bHkKKyAgICAgICAgICAgICBpbiB0aGUgYmFja2VuZCBmb3IgdHJhbnNhY3Rpb24gd29yay4KKyAg
ICAgICAgICAgLSBTUUxUcmFuc2FjdGlvbkNsaWVudCwgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ciwgYW5kCisgICAgICAgICAgICAgU1FMVHJhbnNhY3Rpb25XcmFwcGVyIGFyZSBub3cgZXhjbHVz
aXZlbHkgYmFja2VuZCBkYXRhIHN0cnVjdHVyZXMuCisgICAgICAgICAgICAgU1FMVHJhbnNhY3Rp
b25DbGllbnQgc3RpbGwgaGFzIHNvbWUgZnJvbnRlbmQgInBvbGx1dGlvbiIgdGhhdCBJJ2xsCisg
ICAgICAgICAgICAgZml4IGxhdGVyLgorCisgICAgICAgIDcuIE1hZGUgdGhlIGZldyBkYXRhYmFz
ZSByZXBvcnQgZnVuY3Rpb25zIHVzZWQgb25seSBieSBDaHJvbWl1bSBjb25kaXRpb25hbAorICAg
ICAgICAgICBvbiBQTEFURk9STShjaHJvbWl1bSkuCisKKyAgICAgICAgICAgLSBUaGUgcmVwb3J0
IGZ1bmN0aW9ucyBnZXRzIHJlLXJvdXRlZCB0byBDaHJvbWl1bSdzIERhdGFiYXNlT2JzZXJ2ZXIK
KyAgICAgICAgICAgICB3aGljaCBmdXJ0aGVyIHJvdXRlcyB0aGVtIGVsc2V3aGVyZS4gSXQgaXMg
dW5jbGVhciBob3cgQ2hyb21pdW0gdXNlcworICAgICAgICAgICAgIHRoZXNlIHJvdXRlZCBtZXNz
YWdlcywgYW5kIEkgYW0gdGhlcmVmb3JlIG5vdCBhYmxlIHRvIGRldGVybWluZSBob3cKKyAgICAg
ICAgICAgICB0aGV5IHNob3VsZCB3b3JrIGluIGEgZnJvbnRlbmQvYmFja2VuZCB3b3JsZC4gU28s
IEknbSAjaWZkZWYnaW5nCisgICAgICAgICAgICAgdGhlbSBvdXQuIFRoZXkgc3RpbGwgd29yayBs
aWtlIGluIHRoZSBvbGQgd2F5IGZvciBDaHJvbWl1bS4KKworICAgICAgICA4LiBBZGRlZCBuZXcg
ZmlsZXMgdG8gdGhlIGJ1aWxkIC8gcHJvamVjdCBmaWxlcy4KKworICAgICAgICA5LiBVcGRhdGVk
IC8gYWRkZWQgY29tbWVudHMgYWJvdXQgaG93IHRoZSB0cmFuc2FjdGlvbiBhbmQgaXRzIHN0YXRl
cyB3b3JrLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKENoYW5nZVZl
cnNpb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25EYXRhOjpDaGFuZ2VW
ZXJzaW9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uRGF0YTo6b2xkVmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uRGF0YTo6bmV3VmVyc2lvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9ybVByZWZsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9ybVBvc3Rm
bGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvbldyYXBwZXI6OmhhbmRsZUNv
bW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oOgorICAgICAgICAoQ2hhbmdlVmVyc2lvbldyYXBwZXIp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZTo6cnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnJlcG9ydFN0
YXJ0VHJhbnNhY3Rpb25SZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnJlcG9y
dENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpy
ZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6ZGF0YWJhc2VDb250
ZXh0KToKKyAgICAgICAgKERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpy
ZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZTo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmg6CisgICAgICAgIChEYXRhYmFzZUJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRDaGFuZ2VWZXJzaW9u
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZDo6cmVwb3J0U3RhcnRU
cmFuc2FjdGlvblJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmQ6OnJl
cG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
QmFja2VuZDo6cmVwb3J0RXhlY3V0ZVN0YXRlbWVudFJlc3VsdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZUJhY2tlbmRBc3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6cnVuVHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kQXN5bmM6OmluUHJvZ3Jlc3NUcmFuc2Fj
dGlvbkNvbXBsZXRlZCk6IE1vdmVkIGZyb20gZnJvbnRlbmQuCisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZUJhY2tlbmRBc3luYzo6c2NoZWR1bGVUcmFuc2FjdGlvbik6IE1vdmVkIGZyb20gZnJv
bnRlbmQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6c2NoZWR1bGVU
cmFuc2FjdGlvblN0ZXApOiBNb3ZlZCBmcm9tIGZyb250ZW5kLgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VCYWNrZW5kQXN5bmM6OnRyYW5zYWN0aW9uQ2xpZW50KTogTW92ZWQgZnJvbSBmcm9u
dGVuZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEFzeW5jOjp0cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKTogTW92ZWQgZnJvbSBmcm9udGVuZC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmg6CisgICAgICAgIChEYXRhYmFzZUJhY2tl
bmRBc3luYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZENvbnRleHQ6OmZy
b250ZW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZENv
bnRleHQuaDoKKyAgICAgICAgKERhdGFiYXNlQmFja2VuZENvbnRleHQpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oOgorICAgICAgICAoRGF0YWJhc2VNYW5hZ2Vy
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkb1BlcmZvcm1U
YXNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uOjpzZXRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpzdGF0ZUZ1bmN0aW9uRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uOjpyZXF1ZXN0VHJhbnNpdFRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246Om5leHRTdGF0ZUZvclRyYW5zYWN0aW9uRXJyb3IpOgorICAgICAgICAgICAgLSB3YXMg
aGFuZGxlVHJhbnNhY3Rpb25FcnJvcigpLiBUaGVyZSdzIGFsc28gYSBiYWNrZW5kIHZlcnNpb24u
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2Fs
bGJhY2spOiBNb3ZlZCBmcm9tIGJhY2tlbmQuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2Fj
dGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6IE1vdmVkIGZyb20gYmFja2Vu
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2Fs
bGJhY2spOiBNb3ZlZCBmcm9tIGJhY2tlbmQuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2Fj
dGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjayk6IE1vdmVkIGZyb20gYmFja2VuZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNr
KTogTW92ZWQgZnJvbSBiYWNrZW5kLgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OnVucmVhY2hhYmxlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnNl
bmRUb0JhY2tlbmRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cGVy
Zm9ybVBlbmRpbmdDYWxsYmFjayk6IE1vdmVkIGZyb20gYmFja2VuZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKTogTW92ZWQgZnJvbSBiYWNrZW5kLgorICAg
ICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRl
cnJ1cHRlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpjbGVh
ckNhbGxiYWNrV3JhcHBlcnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb24uaDoKKyAgICAgICAgKFNRTFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uOjpkYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2Fj
dGlvbjo6aGFzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246Omhh
c1N1Y2Nlc3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6aGFz
RXJyb3JDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbkJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpTUUxU
cmFuc2FjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjpkb0NsZWFudXApOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5k
Ojp0cmFuc2FjdGlvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6c2V0U2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c3RhdGVGdW5jdGlvbkZvcik6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmVucXVldWVTdGF0ZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50
ZXJydXB0ZWREYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ6OnBlcmZvcm1OZXh0U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQ6Om5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24pOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmxvY2tBY3F1aXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJ1blN0YXRlbWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3Rh
dGVtZW50QW5kR2V0TmV4dFN0YXRlKToKKyAgICAgICAgICAgIC0gd2FzIHJ1bkN1cnJlbnRTdGF0
ZW1lbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6bmV4dFN0
YXRlRm9yQ3VycmVudFN0YXRlbWVudEVycm9yKToKKyAgICAgICAgICAgIC0gd2FzIGhhbmRsZUN1
cnJlbnRTdGF0ZW1lbnRFcnJvcigpLgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6Y2xlYW51cEFuZFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om5leHRTdGF0ZUZvclRyYW5zYWN0aW9uRXJyb3IpOgorICAg
ICAgICAgICAgLSB3YXMgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcigpLiBUaGVyZSdzIGFsc28gYSBm
cm9udGVuZCB2ZXJzaW9uLgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpyZXF1ZXN0VHJhbnNpdFRvU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjp1bnJlYWNoYWJsZVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2VuZFRvRnJvbnRlbmRTdGF0
ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQu
aDoKKyAgICAgICAgKFNRTFRyYW5zYWN0aW9uV3JhcHBlcik6CisgICAgICAgIChTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpk
YXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNs
aWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29t
bWl0V3JpdGVUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNs
aWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldERh
dGFiYXNlSWRlbnRpZmllcik6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvblN0YXRlLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FM
VHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5h
bWVGb3JTUUxUcmFuc2FjdGlvblN0YXRlKToKKyAgICAgICAgICAgIC0gd2FzIGRlYnVnU3RlcE5h
bWUoKS4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGVN
YWNoaW5lLmg6IEFkZGVkLgorICAgICAgICAoU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmU6On5TUUxUcmFuc2Fj
dGlvblN0YXRlTWFjaGluZSk6CisgICAgICAgIChXZWJDb3JlOjo6OlNRTFRyYW5zYWN0aW9uU3Rh
dGVNYWNoaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6c2V0U3RhdGVUb1JlcXVlc3RlZFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6cnVuU3RhdGVNYWNoaW5lKToKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorCiAyMDEzLTAyLTE0ICBUb255
IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUGFkZGluZyBhbmQgYm9yZGVy
IGNoYW5nZXMgZG9lc24ndCB0cmlnZ2VyIHJlbGF5b3V0IG9mIGNoaWxkcmVuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk2Myw2ICs5NjMsNyBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5j
LmNwcAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCiAg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorICAg
IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwCiAgICAg
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCiAKICAgICBNb2R1bGVz
L3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIxMDAsNiArMjEwMCw3IEBA
IHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dhdmVUYWJsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVRhYmxlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJh
Y3REYXRhYmFzZVNlcnZlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0NoYW5nZVZlcnNpb25EYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwIFwKQEAgLTIxNjgsNiArMjE2
OSw5IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBc
CiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uU3RhdGUuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCBcCiAJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1dvcmtlckNvbnRleHRXZWJEYXRhYmFzZS5jcHAg
XApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU1LDYgKzE0NTUsNyBAQCBIRUFERVJTICs9
IFwKICAgICBNb2R1bGVzL3Byb3hpbWl0eS9EZXZpY2VQcm94aW1pdHlFdmVudC5oIFwKICAgICBc
CiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmggXAorICAg
IE1vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbkRhdGEuaCBcCiAgICAgTW9kdWxlcy93
ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNlLmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VBdXRob3JpemVyLmggXApAQCAtMTQ4NSw2ICsxNDg2LDggQEAgSEVBREVSUyArPSBcCiAg
ICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmggXAogICAg
IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBcCiAgICAgTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXAorICAgIE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIFwKKyAgICBNb2R1bGVzL3dlYmRhdGFi
YXNlL1NRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25TeW5jLmggXAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJD
b250ZXh0V2ViRGF0YWJhc2UuaCBcCkBAIC0zMDc0LDYgKzMwNzcsNyBAQCBlbmFibGU/KFNRTF9E
QVRBQkFTRSkgewogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFj
a2VuZFN5bmMuY3BwIFwKICAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNsaWVudC5jcHAgXAogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvblN0YXRlTWFjaGluZS5jcHAgXAogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uU3luYy5jcHAgXAogCiAgICAgU09VUkNFUyArPSBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTk4NCw2ICs5ODQsNyBAQAogICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vV2F2ZVRhYmxlLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9XYXZl
VGFibGUuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFi
YXNlU2VydmVyLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVy
c2lvbkRhdGEuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJz
aW9uV3JhcHBlci5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdl
VmVyc2lvbldyYXBwZXIuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZS5jcHAnLApAQCAtMTAzOSw2ICsxMDQwLDkgQEAKICAgICAgICAgICAgICdNb2R1bGVzL3dl
YmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgnLAogICAgICAgICAgICAgJ01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAgICAgICAgICAg
J01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKKyAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGUuaCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5j
cHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0
ZU1hY2hpbmUuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvblN5bmMuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uU3luYy5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgJKHJldmlz
aW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJh
Y3REYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMCArNzQsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZU9yaWdpbihTZWN1cml0eU9yaWdpbiopID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBT
dHJpbmcmIG5hbWUpID0gMDsKIAotICAgIC8vIEZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLCBtdXN0
IGJlIHRocmVhZCBzYWZlIHdpdGggaXRzIGRhdGEKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVO
b3RpZnlEYXRhYmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNlQmFja2VuZCop
ID0gMDsKLQogI2Vsc2UgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAgICAgdmlydHVhbCB2b2lkIGNs
b3NlRGF0YWJhc2VzSW1tZWRpYXRlbHkoY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5hbWUpID0gMDsKICNlbmRpZiAvLyBQTEFURk9STShDSFJPTUlVTSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbkRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5n
ZVZlcnNpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0NoYW5nZVZlcnNpb25EYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBDaGFuZ2VWZXJzaW9uRGF0YV9oCisjZGVmaW5lIENoYW5nZVZlcnNpb25EYXRhX2gKKworI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDaGFuZ2VWZXJzaW9uRGF0YSB7CitwdWJs
aWM6CisgICAgQ2hhbmdlVmVyc2lvbkRhdGEoY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25z
dCBTdHJpbmcmIG5ld1ZlcnNpb24pCisgICAgICAgIDogbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24p
LCBtX25ld1ZlcnNpb24obmV3VmVyc2lvbikgeyB9CisKKyAgICBjb25zdCBTdHJpbmcmIG9sZFZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX29sZFZlcnNpb247IH0KKyAgICBjb25zdCBTdHJpbmcm
IG5ld1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX25ld1ZlcnNpb247IH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBTdHJpbmcmIG1fb2xkVmVyc2lvbjsKKyAgICBjb25zdCBTdHJpbmcmIG1fbmV3
VmVyc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShTUUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBDaGFuZ2VWZXJzaW9uRGF0YV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0NoYW5n
ZVZlcnNpb25XcmFwcGVyLmNwcAkocmV2aXNpb24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQzLDExICs0MywxMSBAQCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6Q2hhbmdlVmVyc2lvbldy
YXBwCiB7CiB9CiAKLWJvb2wgQ2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1QcmVmbGlnaHQo
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6
cGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQogewog
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7CiAKLSAg
ICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBEYXRh
YmFzZUJhY2tlbmRBc3luYyogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKIAog
ICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOwogICAgIGlmICghZGF0YWJhc2UtPmdldFZlcnNpb25G
cm9tRGF0YWJhc2UoYWN0dWFsVmVyc2lvbikpIHsKQEAgLTY3LDExICs2NywxMSBAQCBib29sIENo
YW5nZVZlcnNpb25XcmFwcGVyOjpwZXJmb3JtUHJlZmxpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgQ2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKK2Jvb2wgQ2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1Qb3N0
ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKTsKIAotICAgIERhdGFiYXNl
KiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOworICAgIERhdGFiYXNlQmFja2Vu
ZEFzeW5jKiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOwogCiAgICAgaWYgKCFk
YXRhYmFzZS0+c2V0VmVyc2lvbkluRGF0YWJhc2UobV9uZXdWZXJzaW9uKSkgewogICAgICAgICBp
bnQgc3FsaXRlRXJyb3IgPSBkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKTsK
QEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9ybVBvc3Rm
bAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENoYW5nZVZlcnNpb25XcmFwcGVyOjpoYW5k
bGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQordm9pZCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6aGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0
ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7CiAgICAgdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCktPnNldENhY2hlZFZlcnNpb24obV9vbGRWZXJzaW9uKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0No
YW5nZVZlcnNpb25XcmFwcGVyLmgJKHJldmlzaW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsMTAg
KzQxLDEwIEBAIGNsYXNzIENoYW5nZVZlcnNpb25XcmFwcGVyIDogcHVibGljIFNRTFQKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaGFuZ2VWZXJzaW9uV3JhcHBlcj4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgQ2hhbmdlVmVyc2lvbldyYXBwZXIob2xkVmVyc2lvbiwgbmV3VmVyc2lv
bikpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVByZWZsaWdodChTUUxUcmFuc2FjdGlv
biopOwotICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiop
OworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZCopOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQqKTsKICAgICB2aXJ0dWFsIFNRTEVycm9yKiBzcWxFcnJvcigpIGNvbnN0IHsgcmV0dXJu
IG1fc3FsRXJyb3IuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ29tbWl0RmFpbGVk
QWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbkJhY2tlbmQqKTsKIAog
cHJpdmF0ZToKICAgICBDaGFuZ2VWZXJzaW9uV3JhcHBlcihjb25zdCBTdHJpbmcmIG9sZFZlcnNp
b24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQyODg5KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNp
bmNsdWRlICJDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIgorI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25E
YXRhLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VC
YWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKQEAgLTQ1LDkg
KzQ1LDggQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJTUUxFcnJvci5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCiAjaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9u
Q2xpZW50LmgiCi0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTc1LDggKzc0
LDcgQEAgRGF0YWJhc2U6OkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2VCYQogICAgIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFi
YXNlQmFzZShkYXRhYmFzZUNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAs
IERhdGFiYXNlQmFja2VuZEFzeW5jKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJz
aW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkKLSAgICAsIG1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzKGZhbHNlKQotICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCisg
ICAgLCBtX2RhdGFiYXNlQ29udGV4dChEYXRhYmFzZUJhY2tlbmRBc3luYzo6ZGF0YWJhc2VDb250
ZXh0KCktPmZyb250ZW5kKCkpCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCiB7CiAgICAgbV9kYXRh
YmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4t
Pmlzb2xhdGVkQ29weSgpOwpAQCAtMTYyLDEzICsxNjAsNiBAQCB2b2lkIERhdGFiYXNlOjpjbG9z
ZSgpCiAgICAgQVNTRVJUKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpKTsKICAg
ICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRo
cmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKIAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwotICAgICAgICBtX2lzVHJhbnNhY3Rp
b25RdWV1ZUVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3Mg
PSBmYWxzZTsKLSAgICAgICAgbV90cmFuc2FjdGlvblF1ZXVlLmNsZWFyKCk7Ci0gICAgfQotCiAg
ICAgY2xvc2VEYXRhYmFzZSgpOwogCiAgICAgLy8gTXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBk
YXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgpAQCAtMTk2LDE3ICsxODcs
MTggQEAgdm9pZCBEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNh
bGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaykKIHsKLSAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZXJy
b3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6Y3JlYXRl
KG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pLCBmYWxzZSk7CisgICAgQ2hhbmdlVmVyc2lvbkRhdGEg
ZGF0YShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKTsKKyAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBmYWxzZSwgJmRhdGEpOwogfQogCiB2
b2lkIERhdGFiYXNlOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKIHsK
LSAgICBydW5UcmFuc2FjdGlvbihjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxi
YWNrLCAwLCBmYWxzZSk7CisgICAgcnVuVHJhbnNhY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2ssIHN1Y2Nlc3NDYWxsYmFjaywgZmFsc2UpOwogfQogCiB2b2lkIERhdGFiYXNlOjpyZWFkVHJh
bnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spCiB7Ci0gICAgcnVuVHJhbnNhY3Rp
b24oY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCwgdHJ1ZSk7Cisg
ICAgcnVuVHJhbnNhY3Rpb24oY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFj
aywgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhbGxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxFcnJvcj4gZXJyb3IpCkBAIC0yMTUsNTcg
KzIwNywxNyBAQCBzdGF0aWMgdm9pZCBjYWxsVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrCiB9CiAK
IHZvaWQgRGF0YWJhc2U6OnJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0
cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCisgICAgUGFzc1JlZlB0cjxWb2lkQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSwgY29uc3QgQ2hhbmdlVmVyc2lv
bkRhdGEqIGNoYW5nZVZlcnNpb25EYXRhKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Ry
YW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKLSAgICBpZiAoIW1faXNUcmFuc2FjdGlvblF1ZXVl
RW5hYmxlZCkgewotICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykgewotICAgICAgICAgICAgUmVm
UHRyPFNRTEVycm9yPiBlcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05f
RVJSLCAiZGF0YWJhc2UgaGFzIGJlZW4gY2xvc2VkIik7Ci0gICAgICAgICAgICBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY2FsbFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgZXJyb3IucmVsZWFzZSgpKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJy
b3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyLCByZWFkT25seSk7Ci0gICAgbV90
cmFuc2FjdGlvblF1ZXVlLmFwcGVuZCh0cmFuc2FjdGlvbi5yZWxlYXNlKCkpOwotICAgIGlmICgh
bV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MpCi0gICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsK
LX0KLQotdm9pZCBEYXRhYmFzZTo6aW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCkKLXsK
LSAgICBNdXRleExvY2tlciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7Ci0g
ICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICBzY2hlZHVsZVRyYW5zYWN0
aW9uKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24oKQotewotICAg
IEFTU0VSVCghbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleC50cnlMb2NrKCkpOyAvLyBMb2Nr
ZWQgYnkgY2FsbGVyLgotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb247Ci0K
LSAgICBpZiAobV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkICYmICFtX3RyYW5zYWN0aW9uUXVl
dWUuaXNFbXB0eSgpKQotICAgICAgICB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25RdWV1ZS50
YWtlRmlyc3QoKTsKLQotICAgIGlmICh0cmFuc2FjdGlvbiAmJiBkYXRhYmFzZUNvbnRleHQoKS0+
ZGF0YWJhc2VUaHJlYWQoKSkgewotICAgICAgICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsK
LSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGFzay5nZXQoKSwgdGFzay0+dHJhbnNhY3Rp
b24oKSk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKLSAgICAgICAg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJl
bGVhc2UoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHkpCi17Ci0gICAg
aWYgKCFkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGFub3RoZXJSZWZUb0Vy
cm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4g
dHJhbnNhY3Rpb24gPSBTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCBzdWNj
ZXNzQ2FsbGJhY2ssIGFub3RoZXJSZWZUb0Vycm9yQ2FsbGJhY2ssIHJlYWRPbmx5KTsKIAotICAg
IE93blB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gdGFzayA9IERhdGFiYXNlVHJhbnNhY3Rp
b25UYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24pOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1
bGluZyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayAlcCBmb3IgdGhlIHRyYW5zYWN0aW9uIHN0ZXBc
biIsIHRhc2suZ2V0KCkpOwotICAgIGlmIChpbW1lZGlhdGVseSkKLSAgICAgICAgZGF0YWJhc2VD
b250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJl
bGVhc2UoKSk7Ci0gICAgZWxzZQotICAgICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VU
aHJlYWQoKS0+c2NoZWR1bGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKKyAgICBSZWZQdHI8U1FMVHJh
bnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbkJhY2tlbmQ7CisgICAgdHJhbnNhY3Rpb25CYWNr
ZW5kID0gYmFja2VuZCgpLT5ydW5UcmFuc2FjdGlvbih0cmFuc2FjdGlvbi5yZWxlYXNlKCksIHJl
YWRPbmx5LCBjaGFuZ2VWZXJzaW9uRGF0YSk7CisgICAgaWYgKCF0cmFuc2FjdGlvbkJhY2tlbmQg
JiYgYW5vdGhlclJlZlRvRXJyb3JDYWxsYmFjaykgeworICAgICAgICBSZWZQdHI8U1FMRXJyb3I+
IGVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJkYXRhYmFz
ZSBoYXMgYmVlbiBjbG9zZWQiKTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5w
b3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmNhbGxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2ss
IGFub3RoZXJSZWZUb0Vycm9yQ2FsbGJhY2ssIGVycm9yLnJlbGVhc2UoKSkpOworICAgIH0KIH0K
IAogY2xhc3MgRGVsaXZlclBlbmRpbmdDYWxsYmFja1Rhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzayB7CkBAIC0zMjMsMTYgKzI3NSw2IEBAIFZlY3RvcjxTdHJpbmc+IERh
dGFiYXNlOjpwZXJmb3JtR2V0VGFibGUKICAgICByZXR1cm4gdGFibGVOYW1lczsKIH0KIAotU1FM
VHJhbnNhY3Rpb25DbGllbnQqIERhdGFiYXNlOjp0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2Fj
dGlvbkNsaWVudCgpOwotfQotCi1TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRhYmFzZTo6
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGFiYXNlQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci19Ci0K
IFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKIHsKICAgICAvLyBGSVhNRTog
Tm90IHVzaW5nIGlzb2xhdGVkQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRo
cmVhZHMgdGFrZSBzdHJpY3QgdHVybnMKQEAgLTM1OCw2ICszMDAsMjMgQEAgU2VjdXJpdHlPcmln
aW4qIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbgogICAgIHJldHVybiAwOwogfQogCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCit2b2lkIERhdGFiYXNlOjpyZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVz
dWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNv
ZGUpCit7CisgICAgYmFja2VuZCgpLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KGVycm9y
U2l0ZSwgd2ViU3FsRXJyb3JDb2RlLCBzcWxpdGVFcnJvckNvZGUpOworfQorCit2b2lkIERhdGFi
YXNlOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2Vi
U3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKQoreworICAgIGJhY2tlbmQoKS0+cmVw
b3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNx
bGl0ZUVycm9yQ29kZSk7Cit9CisKK3ZvaWQgRGF0YWJhc2U6OnJlcG9ydEV4ZWN1dGVTdGF0ZW1l
bnRSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVy
cm9yQ29kZSkKK3sKKyAgICBiYWNrZW5kKCktPnJlcG9ydEV4ZWN1dGVTdGF0ZW1lbnRSZXN1bHQo
ZXJyb3JTaXRlLCB3ZWJTcWxFcnJvckNvZGUsIHNxbGl0ZUVycm9yQ29kZSk7Cit9CisjZW5kaWYK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmgJKHJldmlzaW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjEgKzM1LDE4IEBACiAjaW5jbHVk
ZSAiRGF0YWJhc2VCYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2hhbmdlVmVyc2lvbkRhdGE7CiBjbGFzcyBEYXRhYmFz
ZUNhbGxiYWNrOworY2xhc3MgRGF0YWJhc2VDb250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47
CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZDsKIGNs
YXNzIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s7Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudDsK
LWNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s7Ci1jbGFzcyBTUUxUcmFuc2FjdGlvbldyYXBwZXI7CiBjbGFzcyBWb2lkQ2Fs
bGJhY2s7CiAKIGNsYXNzIERhdGFiYXNlIDogcHVibGljIERhdGFiYXNlQmFzZSwgcHVibGljIERh
dGFiYXNlQmFja2VuZEFzeW5jIHsKQEAgLTY1LDYgKzYyLDcgQEAgcHVibGljOgogCiAgICAgLy8g
SW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKICAgICBzdGF0aWMgRGF0YWJhc2UqIGZyb20oRGF0YWJh
c2VCYWNrZW5kQXN5bmMqKTsKKyAgICBEYXRhYmFzZUNvbnRleHQqIGRhdGFiYXNlQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb250ZXh0LmdldCgpOyB9CiAKICAgICBWZWN0b3I8
U3RyaW5nPiB0YWJsZU5hbWVzKCk7CiAKQEAgLTgwLDEwICs3OCw2IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAogICAgIHZvaWQgc2NoZWR1
bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7Ci0gICAgdm9pZCBzY2hlZHVs
ZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbkJhY2tlbmQqLCBib29sIGltbWVkaWF0ZWx5
ID0gZmFsc2UpOwotCi0gICAgU1FMVHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50
KCkgY29uc3Q7Ci0gICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIERhdGFiYXNlKFBhc3NSZWZQdHI8RGF0
YWJhc2VCYWNrZW5kQ29udGV4dD4sIGNvbnN0IFN0cmluZyYgbmFtZSwKQEAgLTkyLDI1ICs4Niwz
MCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RGF0YWJhc2VCYWNrZW5kPik7CiAKICAg
ICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4s
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7Ci0KLSAgICB2b2lk
IGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwotICAgIHZvaWQgc2NoZWR1bGVUcmFu
c2FjdGlvbigpOworICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCBib29sIHJlYWRPbmx5LCBjb25zdCBDaGFuZ2VWZXJzaW9uRGF0YSogPSAwKTsKIAogICAg
IFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAKLSAgICBEZXF1ZTxSZWZQ
dHI8U1FMVHJhbnNhY3Rpb24+ID4gbV90cmFuc2FjdGlvblF1ZXVlOwotICAgIE11dGV4IG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzTXV0ZXg7Ci0gICAgYm9vbCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVz
czsKLSAgICBib29sIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZDsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICB2b2lkIHJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoaW50IGVycm9y
U2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CisgICAgdm9p
ZCByZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3Fs
RXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKKyAgICB2b2lkIHJlcG9ydEV4ZWN1dGVT
dGF0ZW1lbnRSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNxbEVycm9yQ29kZSwgaW50IHNx
bGl0ZUVycm9yQ29kZSk7CisjZWxzZQorICAgIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJl
c3VsdChpbnQsIGludCwgaW50KSB7IH0KKyAgICB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9u
UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQorICAgIHZvaWQgcmVwb3J0RXhlY3V0ZVN0YXRlbWVu
dFJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KKyNlbmRpZgogCiAgICAgUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47CisgICAgUmVmUHRyPERhdGFi
YXNlQ29udGV4dD4gbV9kYXRhYmFzZUNvbnRleHQ7CiAKICAgICBib29sIG1fZGVsZXRlZDsKIAog
ICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZU1hbmFnZXI7CiAgICAgZnJpZW5kIGNsYXNzIERhdGFi
YXNlU2VydmVyOyAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB0aGUgYmFja2VuZCBoYXMgYmVl
biBzcGxpdCBvdXQuCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlQmFja2VuZEFzeW5jOyAvLyBG
SVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB0aGUgYmFja2VuZCBoYXMgYmVlbiBzcGxpdCBvdXQuCisg
ICAgZnJpZW5kIGNsYXNzIFNRTFN0YXRlbWVudDsKKyAgICBmcmllbmQgY2xhc3MgU1FMVHJhbnNh
Y3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwCShy
ZXZpc2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1MiwxMyArNjUyLDYgQEAgdm9p
ZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydFZhY3V1bURhdGFiYQogICAgIERhdGFiYXNlT2JzZXJ2
ZXI6OnJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0KHRoaXMsIHNxbGl0ZUVycm9yQ29kZSk7CiB9
CiAKLSNlbHNlCi12b2lkIERhdGFiYXNlQmFja2VuZDo6cmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0
KGludCwgaW50LCBpbnQpIHsgfQotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydENoYW5nZVZl
cnNpb25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9Ci12b2lkIERhdGFiYXNlQmFja2VuZDo6cmVw
b3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KLXZvaWQgRGF0YWJh
c2VCYWNrZW5kOjpyZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdChpbnQsIGludCwgaW50KSB7
IH0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kOjpyZXBvcnRFeGVjdXRlU3RhdGVtZW50UmVzdWx0KGlu
dCwgaW50LCBpbnQpIHsgfQotdm9pZCBEYXRhYmFzZUJhY2tlbmQ6OnJlcG9ydFZhY3V1bURhdGFi
YXNlUmVzdWx0KGludCkgeyB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkocmV2aXNpb24gMTQyODg5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDEyICsxMTQsMjEgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0Q2Fj
aGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGdldEFjdHVhbFZlcnNpb25Gb3JU
cmFuc2FjdGlvbihTdHJpbmcmIHZlcnNpb24pOwogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAg
ICAgdm9pZCByZXBvcnRPcGVuRGF0YWJhc2VSZXN1bHQoaW50IGVycm9yU2l0ZSwgaW50IHdlYlNx
bEVycm9yQ29kZSwgaW50IHNxbGl0ZUVycm9yQ29kZSk7CiAgICAgdm9pZCByZXBvcnRDaGFuZ2VW
ZXJzaW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3ZWJTcWxFcnJvckNvZGUsIGludCBzcWxp
dGVFcnJvckNvZGUpOwogICAgIHZvaWQgcmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdChpbnQg
ZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBpbnQgc3FsaXRlRXJyb3JDb2RlKTsKICAg
ICB2b2lkIHJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KGludCBlcnJvclNpdGUsIGludCB3
ZWJTcWxFcnJvckNvZGUsIGludCBzcWxpdGVFcnJvckNvZGUpOwogICAgIHZvaWQgcmVwb3J0RXhl
Y3V0ZVN0YXRlbWVudFJlc3VsdChpbnQgZXJyb3JTaXRlLCBpbnQgd2ViU3FsRXJyb3JDb2RlLCBp
bnQgc3FsaXRlRXJyb3JDb2RlKTsKICAgICB2b2lkIHJlcG9ydFZhY3V1bURhdGFiYXNlUmVzdWx0
KGludCBzcWxpdGVFcnJvckNvZGUpOworI2Vsc2UKKyAgICB2b2lkIHJlcG9ydE9wZW5EYXRhYmFz
ZVJlc3VsdChpbnQsIGludCwgaW50KSB7IH0KKyAgICB2b2lkIHJlcG9ydENoYW5nZVZlcnNpb25S
ZXN1bHQoaW50LCBpbnQsIGludCkgeyB9CisgICAgdm9pZCByZXBvcnRTdGFydFRyYW5zYWN0aW9u
UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQorICAgIHZvaWQgcmVwb3J0Q29tbWl0VHJhbnNhY3Rp
b25SZXN1bHQoaW50LCBpbnQsIGludCkgeyB9CisgICAgdm9pZCByZXBvcnRFeGVjdXRlU3RhdGVt
ZW50UmVzdWx0KGludCwgaW50LCBpbnQpIHsgfQorICAgIHZvaWQgcmVwb3J0VmFjdXVtRGF0YWJh
c2VSZXN1bHQoaW50KSB7IH0KKyNlbmRpZgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFi
YXNlSW5mb1RhYmxlTmFtZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAkocmV2aXNp
b24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmRBc3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE1ICsyOCwyNCBAQAogCiAj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25EYXRhLmgi
CisjaW5jbHVkZSAiQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZUJh
Y2tlbmRDb250ZXh0LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTUUxUcmFu
c2FjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgorI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0
cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IERhdGFiYXNlQmFja2Vu
ZChkYXRhYmFzZUNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUsIERhdGFiYXNlVHlwZTo6QXN5bmMpCisgICAgLCBtX3RyYW5zYWN0aW9uSW5Q
cm9ncmVzcyhmYWxzZSkKKyAgICAsIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCh0cnVlKQog
ewogfQogCkBAIC02OSw2ICs3OCw2OSBAQCBib29sIERhdGFiYXNlQmFja2VuZEFzeW5jOjpwZXJm
b3JtT3BlbkFuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uQmFja2VuZD4gRGF0YWJhc2VCYWNrZW5kQXN5bmM6OnJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uLAorICAgIGJvb2wgcmVhZE9ubHksIGNvbnN0
IENoYW5nZVZlcnNpb25EYXRhKiBkYXRhKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Ry
YW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKKyAgICBpZiAoIW1faXNUcmFuc2FjdGlvblF1ZXVl
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25X
cmFwcGVyPiB3cmFwcGVyOworICAgIGlmIChkYXRhKQorICAgICAgICB3cmFwcGVyID0gQ2hhbmdl
VmVyc2lvbldyYXBwZXI6OmNyZWF0ZShkYXRhLT5vbGRWZXJzaW9uKCksIGRhdGEtPm5ld1ZlcnNp
b24oKSk7CisKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbkJh
Y2tlbmQgPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNyZWF0ZSh0aGlzLCB0cmFuc2FjdGlvbiwg
d3JhcHBlciwgcmVhZE9ubHkpOworICAgIG1fdHJhbnNhY3Rpb25RdWV1ZS5hcHBlbmQodHJhbnNh
Y3Rpb25CYWNrZW5kKTsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb25JblByb2dyZXNzKQorICAgICAg
ICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CisKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25CYWNrZW5k
OworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZEFzeW5jOjppblByb2dyZXNzVHJhbnNhY3Rpb25D
b21wbGV0ZWQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9n
cmVzc011dGV4KTsKKyAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIHNj
aGVkdWxlVHJhbnNhY3Rpb24oKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6c2No
ZWR1bGVUcmFuc2FjdGlvbigpCit7CisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uSW5Qcm9ncmVz
c011dGV4LnRyeUxvY2soKSk7IC8vIExvY2tlZCBieSBjYWxsZXIuCisgICAgUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb247CisKKyAgICBpZiAobV9pc1RyYW5zYWN0aW9u
UXVldWVFbmFibGVkICYmICFtX3RyYW5zYWN0aW9uUXVldWUuaXNFbXB0eSgpKQorICAgICAgICB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25RdWV1ZS50YWtlRmlyc3QoKTsKKworICAgIGlmICh0
cmFuc2FjdGlvbiAmJiBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSkgeworICAg
ICAgICBPd25QdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5z
YWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0cmFuc2FjdGlvbiAl
cFxuIiwgdGFzay5nZXQoKSwgdGFzay0+dHJhbnNhY3Rpb24oKSk7CisgICAgICAgIG1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKKyAgICAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFi
YXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJlbGVhc2UoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Cit9CisKK3ZvaWQgRGF0YWJh
c2VCYWNrZW5kQXN5bmM6OnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKCFkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJh
c2VUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgT3duUHRyPERhdGFiYXNlVHJhbnNh
Y3Rpb25UYXNrPiB0YXNrID0gRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSh0cmFuc2Fj
dGlvbik7CisgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rp
b25UYXNrICVwIGZvciB0aGUgdHJhbnNhY3Rpb24gc3RlcFxuIiwgdGFzay5nZXQoKSk7CisgICAg
ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJl
bGVhc2UoKSk7Cit9CisKK1NRTFRyYW5zYWN0aW9uQ2xpZW50KiBEYXRhYmFzZUJhY2tlbmRBc3lu
Yzo6dHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdAoreworICAgIHJldHVybiBkYXRhYmFzZUNvbnRl
eHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25DbGllbnQoKTsKK30KKworU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvciogRGF0YWJhc2VCYWNrZW5kQXN5bmM6OnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJh
c2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNr
ZW5kQXN5bmMuaAkocmV2aXNpb24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MiArMjksMTggQEAKICNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJh
c2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2hhbmdlVmVyc2lv
bkRhdGE7CiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlU2VydmVyOworY2xhc3MgU1FM
VHJhbnNhY3Rpb247CitjbGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ7CitjbGFzcyBTUUxUcmFu
c2FjdGlvbkNsaWVudDsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiAKIC8vIEZJ
WE1FOiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIERhdGFiYXNlQmFja2VuZEFzeW5jIGlzIG9ubHkg
YSBwbGFjZSBob2xkZXIKIC8vIGZvciB0aGUgc3BsaXQgb3V0IG9mIHRoZSBEYXRhYmFzZSBiYWNr
ZW5kIHRvIGJlIGRvbmUgbGF0ZXIuIFRoaXMKQEAgLTQ3LDcgKzUzLDEzIEBAIHB1YmxpYzoKICAg
ICBEYXRhYmFzZUJhY2tlbmRBc3luYyhQYXNzUmVmUHRyPERhdGFiYXNlQmFja2VuZENvbnRleHQ+
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogCiAg
ICAgdmlydHVhbCBib29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAgdmly
dHVhbCBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UsIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisKKyAgICBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gcnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbj4sIGJvb2wgcmVhZE9ubHksIGNvbnN0IENoYW5nZVZlcnNpb25EYXRhKik7Cisg
ICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbkJhY2tlbmQqKTsK
KyAgICB2b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOworCisgICAgU1FMVHJh
bnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7CisgICAgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIGNsYXNzIERhdGFiYXNlT3BlblRhc2s7CkBAIC01NSw2ICs2NywxNSBAQCBwcml2
YXRlOgogICAgIGNsYXNzIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOwogICAgIGNsYXNzIERhdGFi
YXNlVGFibGVOYW1lc1Rhc2s7CiAKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJp
ZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKKworICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbigpOworCisgICAg
RGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gPiBtX3RyYW5zYWN0aW9uUXVldWU7
CisgICAgTXV0ZXggbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKKyAgICBib29sIG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzOworICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVk
OworCiAgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2Vu
ZENvbnRleHQuY3BwCShyZXZpc2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0RhdGFiYXNlQ29udGV4
dCogRGF0YWJhc2VCYWNrZW5kQ29udGV4dDo6ZnJvbnRlbmQoKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxEYXRhYmFzZUNvbnRleHQqPih0aGlzKTsKK30KKwogU2VjdXJpdHlPcmlnaW4qIERh
dGFiYXNlQmFja2VuZENvbnRleHQ6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZUJhY2tlbmRDb250ZXh0LmgJKHJldmlzaW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw4IEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBjbGFzcyBEYXRhYmFz
ZUJhY2tlbmRDb250ZXh0IDogcHVibGljIERhdGFiYXNlQ29udGV4dCB7CiBwdWJsaWM6CisgICAg
RGF0YWJhc2VDb250ZXh0KiBmcm9udGVuZCgpOworCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsgfQogICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFu
YWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxNCwxNyArNDE0LDYgQEAgYm9vbCBEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZURhdGFiYXNl
KFNlYwogICAgIHJldHVybiBtX3NlcnZlci0+ZGVsZXRlRGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsK
IH0KIAotLy8gRnJvbSBhIHNlY29uZGFyeSB0aHJlYWQsIG11c3QgYmUgdGhyZWFkIHNhZmUgd2l0
aCBpdHMgZGF0YQotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VD
aGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBtX3NlcnZlci0+c2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQob3JpZ2luLCBuYW1lKTsK
LX0KLQotdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRhdGFiYXNlQ2hhbmdlZChEYXRhYmFzZUJhY2tl
bmQqIGRhdGFiYXNlKQotewotICAgIG1fc2VydmVyLT5kYXRhYmFzZUNoYW5nZWQoZGF0YWJhc2Up
OwotfQotCiAjZWxzZSAvLyBQTEFURk9STShDSFJPTUlVTSkKIHZvaWQgRGF0YWJhc2VNYW5hZ2Vy
OjpjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCShyZXZpc2lvbiAxNDI4ODkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTEgKzEwNCw2IEBAIHB1YmxpYzoKICAgICBib29sIGRl
bGV0ZU9yaWdpbihTZWN1cml0eU9yaWdpbiopOwogICAgIGJvb2wgZGVsZXRlRGF0YWJhc2UoU2Vj
dXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgLy8gRnJvbSBhIHNlY29u
ZGFyeSB0aHJlYWQsIG11c3QgYmUgdGhyZWFkIHNhZmUgd2l0aCBpdHMgZGF0YQotICAgIHZvaWQg
c2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwotCi0gICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2VCYWNrZW5kKik7
Ci0KICNlbHNlIC8vIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIHZvaWQgY2xvc2VEYXRhYmFzZXNJ
bW1lZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAkocmV2
aXNpb24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxNyArMTI4LDYgQEAgYm9vbCBE
YXRhYmFzZVNlcnZlcjo6ZGVsZXRlRGF0YWJhc2UoU2VjdQogICAgIHJldHVybiBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5kZWxldGVEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogfQogCi0vLyBG
cm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJlYWQgc2FmZSB3aXRoIGl0cyBkYXRh
Ci12b2lkIERhdGFiYXNlU2VydmVyOjpzY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZChTZWN1
cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQob3JpZ2luLCBu
YW1lKTsKLX0KLQotdm9pZCBEYXRhYmFzZVNlcnZlcjo6ZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNl
QmFja2VuZCogZGF0YWJhc2UpCi17Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0
YWJhc2VDaGFuZ2VkKGRhdGFiYXNlKTsKLX0KLQogI2Vsc2UgLy8gUExBVEZPUk0oQ0hST01JVU0p
CiB2b2lkIERhdGFiYXNlU2VydmVyOjpjbG9zZURhdGFiYXNlc0ltbWVkaWF0ZWx5KGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIu
aAkocmV2aXNpb24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMCArNjIsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZU9yaWdpbihTZWN1cml0eU9yaWdpbiopOwogICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CiAKLSAgICAvLyBGcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgbXVzdCBiZSB0aHJl
YWQgc2FmZSB3aXRoIGl0cyBkYXRhCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTm90aWZ5RGF0
YWJhc2VDaGFuZ2VkKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKERhdGFiYXNlQmFja2VuZCopOwotCiAjZWxzZSAv
LyBQTEFURk9STShDSFJPTUlVTSkKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VEYXRhYmFzZXNJbW1l
ZGlhdGVseShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAjZW5kaWYgLy8gUExBVEZPUk0oQ0hST01JVU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCShyZXZpc2lvbiAx
NDI4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFz
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw4ICsxNTUsNyBAQCBEYXRhYmFzZUJhY2tlbmRB
c3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvCiAKIHZvaWQgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpkb1BlcmZvcm1UYXNrKCkKIHsKLSAgICBpZiAobV90cmFu
c2FjdGlvbi0+cGVyZm9ybU5leHRTdGVwKCkpCi0gICAgICAgIERhdGFiYXNlOjpmcm9tKG1fdHJh
bnNhY3Rpb24tPmRhdGFiYXNlKCkpLT5pblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsK
KyAgICBtX3RyYW5zYWN0aW9uLT5wZXJmb3JtTmV4dFN0ZXAoKTsKIH0KIAogI2lmICFMT0dfRElT
QUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMjkgKzMxLDI1NSBAQAogCiAjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKIAorI2luY2x1
ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxFcnJvci5oIgorI2luY2x1ZGUgIlNRTFN0YXRl
bWVudENhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgor
I2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQmFja2VuZC5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgogI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFj
ay5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKERhdGFiYXNl
KiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywKLSAgICBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFz
c1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywKLSAgICBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCByZWFkT25seSkKKyAgICBQYXNzUmVm
UHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKKyAgICBib29sIHJlYWRPbmx5KQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb24oZGIsIGNhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJlYWRPbmx5KSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJhY2ssIHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgcmVhZE9ubHkpKTsKIH0KIAogU1FMVHJhbnNhY3Rpb246OlNR
TFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxi
YWNrPiBjYWxsYmFjaywKLSAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
aywKLSAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCBy
ZWFkT25seSkKLSAgICA6IFNRTFRyYW5zYWN0aW9uQmFja2VuZChkYiwgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpCisgICAgUGFzc1Jl
ZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCisgICAgYm9vbCByZWFkT25seSkKKyAg
ICA6IG1fZGF0YWJhc2UoZGIpCisgICAgLCBtX2NhbGxiYWNrV3JhcHBlcihjYWxsYmFjaywgZGIt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBl
cihzdWNjZXNzQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBt
X2Vycm9yQ2FsbGJhY2tXcmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCisgICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQorICAgICwgbV9yZWFk
T25seShyZWFkT25seSkKIHsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CiB9CiAKLVNRTFRyYW5z
YWN0aW9uKiBTUUxUcmFuc2FjdGlvbjo6ZnJvbShTUUxUcmFuc2FjdGlvbkJhY2tlbmQqIGJhY2tl
bmQpCit2b2lkIFNRTFRyYW5zYWN0aW9uOjpzZXRCYWNrZW5kKFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZCogYmFja2VuZCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1FMVHJhbnNhY3Rpb24qPihi
YWNrZW5kKTsKKyAgICBBU1NFUlQoIW1fYmFja2VuZCk7CisgICAgbV9iYWNrZW5kID0gYmFja2Vu
ZDsKK30KKworU1FMVHJhbnNhY3Rpb246OlN0YXRlRnVuY3Rpb24gU1FMVHJhbnNhY3Rpb246OnN0
YXRlRnVuY3Rpb25Gb3IoU1FMVHJhbnNhY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgU3RhdGVGdW5jdGlvbiBzdGF0ZUZ1bmN0aW9uc1tdID0geworICAgICAgICAmU1FMVHJh
bnNhY3Rpb246OnVucmVhY2hhYmxlU3RhdGUsICAgICAgICAgICAgICAgIC8vIDAuIGlsbGVnYWwK
KyAgICAgICAgJlNRTFRyYW5zYWN0aW9uOjp1bnJlYWNoYWJsZVN0YXRlLCAgICAgICAgICAgICAg
ICAvLyAxLiBpZGxlCisgICAgICAgICZTUUxUcmFuc2FjdGlvbjo6dW5yZWFjaGFibGVTdGF0ZSwg
ICAgICAgICAgICAgICAgLy8gMi4gYWNxdWlyZUxvY2sKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9u
Ojp1bnJlYWNoYWJsZVN0YXRlLCAgICAgICAgICAgICAgICAvLyAzLiBvcGVuVHJhbnNhY3Rpb25B
bmRQcmVmbGlnaHQKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uOjpzZW5kVG9CYWNrZW5kU3RhdGUs
ICAgICAgICAgICAgICAvLyA0LiBydW5TdGF0ZW1lbnRzCisgICAgICAgICZTUUxUcmFuc2FjdGlv
bjo6dW5yZWFjaGFibGVTdGF0ZSwgICAgICAgICAgICAgICAgLy8gNS4gcG9zdGZsaWdodEFuZENv
bW1pdAorICAgICAgICAmU1FMVHJhbnNhY3Rpb246OnNlbmRUb0JhY2tlbmRTdGF0ZSwgICAgICAg
ICAgICAgIC8vIDYuIGNsZWFudXBBbmRUZXJtaW5hdGUKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9u
OjpzZW5kVG9CYWNrZW5kU3RhdGUsICAgICAgICAgICAgICAvLyA3LiBjbGVhbnVwQWZ0ZXJUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2sKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJh
bnNhY3Rpb25DYWxsYmFjaywgICAgICAvLyA4LgorICAgICAgICAmU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2ssIC8vIDkuCisgICAgICAgICZTUUxUcmFuc2Fj
dGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrLCAgICAgICAgLy8gMTAuCisgICAgICAgICZT
UUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjaywgICAgLy8gMTEuCisg
ICAgICAgICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayAgICAgICAgICAg
Ly8gMTIuCisgICAgfTsKKworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkgLyBzaXpl
b2YoeFswXSkpCisgICAgQVNTRVJUKEFSUkFZX1NJWkUoc3RhdGVGdW5jdGlvbnMpID09IHN0YXRp
Y19jYXN0PGludD4oU1FMVHJhbnNhY3Rpb25TdGF0ZTo6TnVtYmVyT2ZTdGF0ZXMpKTsKKyAgICBB
U1NFUlQoc3RhdGUgPCBTUUxUcmFuc2FjdGlvblN0YXRlOjpOdW1iZXJPZlN0YXRlcyk7CisKKyAg
ICByZXR1cm4gc3RhdGVGdW5jdGlvbnNbc3RhdGljX2Nhc3Q8aW50PihzdGF0ZSldOworfQorCisv
LyByZXF1ZXN0VHJhbnNpdFRvU3RhdGUoKSBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIGJhY2tlbmQu
IEhlbmNlLCBpdCBzaG91bGQKKy8vIE5PVCBiZSBtb2RpZnlpbmcgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kIGluIGdlbmVyYWwuIFRoZSBvbmx5IHNhZmUgZmllbGQgdG8KKy8vIG1vZGlmeSBpcyBtX3Jl
cXVlc3RlZFN0YXRlIHdoaWNoIGlzIG1lYW50IGZvciB0aGlzIHB1cnBvc2UuCit2b2lkIFNRTFRy
YW5zYWN0aW9uOjpyZXF1ZXN0VHJhbnNpdFRvU3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZSBuZXh0
U3RhdGUpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nICVzIGZvciB0cmFuc2Fj
dGlvbiAlcFxuIiwgbmFtZUZvclNRTFRyYW5zYWN0aW9uU3RhdGUobmV4dFN0YXRlKSwgdGhpcyk7
CisgICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IG5leHRTdGF0ZTsKKyAgICBtX2RhdGFiYXNlLT5zY2hl
ZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2sodGhpcyk7Cit9CisKK1NRTFRyYW5zYWN0aW9uU3RhdGUg
U1FMVHJhbnNhY3Rpb246Om5leHRTdGF0ZUZvclRyYW5zYWN0aW9uRXJyb3IoKQoreworICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9uRXJyb3IpOworICAgIGlmIChtX2Vycm9yQ2FsbGJhY2tXcmFwcGVy
Lmhhc0NhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxp
dmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOworCisgICAgLy8gTm8gZXJyb3IgY2FsbGJhY2ss
IHNvIGZhc3QtZm9yd2FyZCB0bzoKKyAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDExIC0gUm9sbGJh
Y2sgdGhlIHRyYW5zYWN0aW9uLgorICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpDbGVh
bnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7Cit9CisKK1NRTFRyYW5zYWN0aW9uU3Rh
dGUgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCkKK3sKKyAgICBi
b29sIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gZmFsc2U7CisKKyAgICAvLyBTcGVjIDQu
My4yIDQ6IEludm9rZSB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2l0aCB0aGUgbmV3IFNRTFRy
YW5zYWN0aW9uIG9iamVjdAorICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxs
YmFjayA9IG1fY2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIGlmIChjYWxsYmFjaykgewor
ICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKKyAgICAgICAgc2hvdWxkRGVsaXZl
ckVycm9yQ2FsbGJhY2sgPSAhY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOworICAgICAgICBt
X2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gU3BlYyA0LjMuMiA1
OiBJZiB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIG51bGwgb3IgcmFpc2VkIGFuIGV4Y2Vw
dGlvbiwganVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRl
IG5leHRTdGF0ZSA9IFNRTFRyYW5zYWN0aW9uU3RhdGU6OlJ1blN0YXRlbWVudHM7CisgICAgaWYg
KHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9y
dFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQoNSwgU1FMRXJyb3I6OlVOS05PV05fRVJSLCAwKTsKKyAg
ICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5L
Tk9XTl9FUlIsICJ0aGUgU1FMVHJhbnNhY3Rpb25DYWxsYmFjayB3YXMgbnVsbCBvciB0aHJldyBh
biBleGNlcHRpb24iKTsKKyAgICAgICAgbmV4dFN0YXRlID0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6
RGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKKyAgICB9CisgICAgbV9kYXRhYmFzZS0+
cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgwLCAtMSwgMCk7IC8vIE9LCisgICAgcmV0dXJu
IG5leHRTdGF0ZTsKK30KKworU1FMVHJhbnNhY3Rpb25TdGF0ZSBTUUxUcmFuc2FjdGlvbjo6ZGVs
aXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpCit7CisgICAgLy8gU3BlYyA0LjMuMi4xMDog
SWYgZXhpc3RzLCBpbnZva2UgZXJyb3IgY2FsbGJhY2sgd2l0aCB0aGUgbGFzdAorICAgIC8vIGVy
cm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KKyAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9lcnJvckNhbGxiYWNr
V3JhcHBlci51bndyYXAoKTsKKyAgICBpZiAoZXJyb3JDYWxsYmFjaykgeworICAgICAgICAvLyBJ
ZiB3ZSBnZXQgaGVyZSB3aXRoIGFuIGVtcHR5IG1fdHJhbnNhY3Rpb25FcnJvciwgdGhlbiB0aGUg
YmFja2VuZAorICAgICAgICAvLyBtdXN0IGJlIHdhaXRpbmcgaW4gdGhlIGlkbGUgc3RhdGUgd2Fp
dGluZyBmb3IgdGhpcyBzdGF0ZSB0byBmaW5pc2guCisgICAgICAgIC8vIEhlbmNlLCBpdCdzIHRo
cmVhZCBzYWZlIHRvIGZldGNoIHRoZSBiYWNrZW5kIHRyYW5zYWN0aW9uRXJyb3Igd2l0aG91dAor
ICAgICAgICAvLyBhIGxvY2suCisgICAgICAgIGlmICghbV90cmFuc2FjdGlvbkVycm9yKQorICAg
ICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gbV9iYWNrZW5kLT50cmFuc2FjdGlvbkVycm9y
KCk7CisKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25FcnJvcik7CisgICAgICAgIGVycm9y
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CisKKyAgICAg
ICAgbV90cmFuc2FjdGlvbkVycm9yID0gMDsKKyAgICB9CisKKyAgICBjbGVhckNhbGxiYWNrV3Jh
cHBlcnMoKTsKKworICAgIC8vIFNwZWMgNC4zLjIuMTA6IFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlv
bi4KKyAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFmdGVyVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrOworfQorCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2soKQoreworICAgIEFTU0VSVChtX2JhY2tlbmQtPm1f
Y3VycmVudFN0YXRlbWVudCk7CisKKyAgICAvLyBTcGVjIDQuMy4yLjYuNiBhbmQgNC4zLjIuNi4z
OiBJZiB0aGUgc3RhdGVtZW50IGNhbGxiYWNrIHdlbnQgd3JvbmcsIGp1bXAgdG8gdGhlIHRyYW5z
YWN0aW9uIGVycm9yIGNhbGxiYWNrCisgICAgLy8gT3RoZXJ3aXNlLCBjb250aW51ZSB0byBsb29w
IHRocm91Z2ggdGhlIHN0YXRlbWVudCBxdWV1ZQorICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0
cnVlOworICAgIGJvb2wgcmVzdWx0ID0gbV9iYWNrZW5kLT5tX2N1cnJlbnRTdGF0ZW1lbnQtPnBl
cmZvcm1DYWxsYmFjayh0aGlzKTsKKyAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7CisK
KyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5z
YWN0aW9uUmVzdWx0KDIsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CisgICAgICAgIG1fdHJh
bnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAi
dGhlIHN0YXRlbWVudCBjYWxsYmFjayByYWlzZWQgYW4gZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBl
cnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxzZSIpOworICAgICAgICByZXR1cm4gbmV4
dFN0YXRlRm9yVHJhbnNhY3Rpb25FcnJvcigpOworICAgIH0KKyAgICByZXR1cm4gU1FMVHJhbnNh
Y3Rpb25TdGF0ZTo6UnVuU3RhdGVtZW50czsKK30KKworU1FMVHJhbnNhY3Rpb25TdGF0ZSBTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjaygpCit7CisgICAgQVNTRVJU
KG1fYmFja2VuZC0+bV9jdXJyZW50U3RhdGVtZW50KTsKKworICAgIGJvb2wgc2hvdWxkUmV0cnlD
dXJyZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhj
ZWVkUXVvdGEoZGF0YWJhc2UoKSk7CisgICAgbV9iYWNrZW5kLT5zZXRTaG91bGRSZXRyeUN1cnJl
bnRTdGF0ZW1lbnQoc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KTsKKworICAgIHJldHVybiBT
UUxUcmFuc2FjdGlvblN0YXRlOjpSdW5TdGF0ZW1lbnRzOworfQorCitTUUxUcmFuc2FjdGlvblN0
YXRlIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKCkKK3sKKyAgICAvLyBT
cGVjIDQuMy4yLjg6IERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjay4KKyAgICBSZWZQdHI8Vm9pZENh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIudW53cmFw
KCk7CisgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5o
YW5kbGVFdmVudCgpOworCisgICAgY2xlYXJDYWxsYmFja1dyYXBwZXJzKCk7CisKKyAgICAvLyBT
Y2hlZHVsZSBhICJwb3N0LXN1Y2Nlc3MgY2FsbGJhY2siIHN0ZXAgdG8gcmV0dXJuIGNvbnRyb2wg
dG8gdGhlIGRhdGFiYXNlIHRocmVhZCBpbiBjYXNlIHRoZXJlCisgICAgLy8gYXJlIGZ1cnRoZXIg
dHJhbnNhY3Rpb25zIHF1ZXVlZCB1cCBmb3IgdGhpcyBEYXRhYmFzZQorICAgIHJldHVybiBTUUxU
cmFuc2FjdGlvblN0YXRlOjpDbGVhbnVwQW5kVGVybWluYXRlOworfQorCisvLyBUaGlzIHN0YXRl
IGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBzdHViIGZ1bmN0aW9uIHRvIHBsdWcgdW5pbXBsZW1lbnRl
ZCBzdGF0ZXMKKy8vIGluIHRoZSBzdGF0ZSBkaXNwYXRjaCB0YWJsZS4gVGhleSBhcmUgdW5pbXBs
ZW1lbnRlZCBiZWNhdXNlIHRoZXkgc2hvdWxkCisvLyBuZXZlciBiZSByZWFjaGVkIGluIHRoZSBj
b3Vyc2Ugb2YgY29ycmVjdCBleGVjdXRpb24uCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5z
YWN0aW9uOjp1bnJlYWNoYWJsZVN0YXRlKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RW5kOworfQorCitTUUxUcmFuc2FjdGlv
blN0YXRlIFNRTFRyYW5zYWN0aW9uOjpzZW5kVG9CYWNrZW5kU3RhdGUoKQoreworICAgIEFTU0VS
VChtX25leHRTdGF0ZSAhPSBTUUxUcmFuc2FjdGlvblN0YXRlOjpJZGxlKTsKKyAgICBtX2JhY2tl
bmQtPnJlcXVlc3RUcmFuc2l0VG9TdGF0ZShtX25leHRTdGF0ZSk7CisgICAgcmV0dXJuIFNRTFRy
YW5zYWN0aW9uU3RhdGU6OklkbGU7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1Q
ZW5kaW5nQ2FsbGJhY2soKQoreworICAgIExPRyhTdG9yYWdlQVBJLCAiQ2FsbGJhY2sgJXNcbiIs
IG5hbWVGb3JTUUxUcmFuc2FjdGlvblN0YXRlKG1fbmV4dFN0YXRlKSk7CisKKyAgICBzZXRTdGF0
ZVRvUmVxdWVzdGVkU3RhdGUoKTsKKyAgICBBU1NFUlQobV9uZXh0U3RhdGUgPT0gU1FMVHJhbnNh
Y3Rpb25TdGF0ZTo6RW5kCisgICAgICAgIHx8IG1fbmV4dFN0YXRlID09IFNRTFRyYW5zYWN0aW9u
U3RhdGU6OkRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrCisgICAgICAgIHx8IG1fbmV4dFN0YXRl
ID09IFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sK
KyAgICAgICAgfHwgbV9uZXh0U3RhdGUgPT0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclN0
YXRlbWVudENhbGxiYWNrCisgICAgICAgIHx8IG1fbmV4dFN0YXRlID09IFNRTFRyYW5zYWN0aW9u
U3RhdGU6OkRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sKKyAgICAgICAgfHwgbV9uZXh0U3Rh
dGUgPT0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclN1Y2Nlc3NDYWxsYmFjayk7CisKKyAg
ICBjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpOworICAgIHJ1blN0
YXRlTWFjaGluZSgpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0
IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMs
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUp
Cit7CisgICAgaWYgKCFtX2V4ZWN1dGVTcWxBbGxvd2VkIHx8ICFtX2RhdGFiYXNlLT5vcGVuZWQo
KSkgeworICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpbnQgcGVybWlzc2lvbnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRXcml0
ZU1hc2s7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxsb3dEYXRh
YmFzZUFjY2VzcygpKQorICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6
Ok5vQWNjZXNzTWFzazsKKyAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQorICAgICAgICBwZXJtaXNz
aW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKKworICAgIFJlZlB0cjxT
UUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJhc2Uu
Z2V0KCksIHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwg
cGVybWlzc2lvbnMpOworCisgICAgaWYgKG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKKyAgICAgICAg
c3RhdGVtZW50LT5zZXREYXRhYmFzZURlbGV0ZWRFcnJvcihtX2RhdGFiYXNlLmdldCgpKTsKKwor
ICAgIG1fYmFja2VuZC0+ZW5xdWV1ZVN0YXRlbWVudChzdGF0ZW1lbnQpOworfQorCitib29sIFNR
TFRyYW5zYWN0aW9uOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgp
Cit7CisgICAgaWYgKG1fZGF0YWJhc2UtPm9wZW5lZCgpICYmICFtX2RhdGFiYXNlLT5pc0ludGVy
cnVwdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNsZWFyQ2FsbGJhY2tXcmFw
cGVycygpOworICAgIG1fbmV4dFN0YXRlID0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFu
ZFRlcm1pbmF0ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9u
OjpjbGVhckNhbGxiYWNrV3JhcHBlcnMoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIHVubmVlZGVk
IGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICBtX2NhbGxiYWNrV3Jh
cHBlci5jbGVhcigpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVhcigpOworICAg
IG1fZXJyb3JDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2Fj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwy
MCArMzEsNzkgQEAKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJTUUxU
cmFuc2FjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJTUUxDYWxsYmFja1dyYXBwZXIuaCIKKyNp
bmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN0YXRlTWFj
aGluZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNRTFRyYW5zYWN0aW9uIDogcHVi
bGljIFNRTFRyYW5zYWN0aW9uQmFja2VuZCB7CitjbGFzcyBEYXRhYmFzZTsKK2NsYXNzIFNRTEVy
cm9yOworY2xhc3MgU1FMU3RhdGVtZW50Q2FsbGJhY2s7CitjbGFzcyBTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOworY2xhc3MgU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjazsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKK2NsYXNz
IFNRTFZhbHVlOworY2xhc3MgVm9pZENhbGxiYWNrOworCitjbGFzcyBTUUxUcmFuc2FjdGlvbiA6
IHB1YmxpYyBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZTxTUUxUcmFuc2FjdGlvbj4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBjcmVhdGUoRGF0YWJh
c2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSA9IGZhbHNlKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiwKKyAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAor
ICAgICAgICBib29sIHJlYWRPbmx5KTsKKworICAgIHZvaWQgc2V0QmFja2VuZChTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQqKTsKKworICAgIHZvaWQgcGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOworCisg
ICAgdm9pZCBleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsCisgICAgICAgIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBFeGNlcHRp
b25Db2RlJik7CiAKLSAgICBzdGF0aWMgU1FMVHJhbnNhY3Rpb24qIGZyb20oU1FMVHJhbnNhY3Rp
b25CYWNrZW5kKik7CisgICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFz
ZS5nZXQoKTsgfQorCisgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KKyAgICBib29sIGhhc1N1Y2Nlc3NDYWxsYmFj
aygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygp
OyB9CisgICAgYm9vbCBoYXNFcnJvckNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvckNh
bGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpOyB9CiAKIHByaXZhdGU6Ci0gICAgU1FMVHJhbnNh
Y3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCi0gICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBl
cj4sIGJvb2wgcmVhZE9ubHkpOworICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwKKyAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s+LAorICAgICAgICBib29sIHJlYWRPbmx5KTsKKworICAgIGJvb2wgY2hlY2tBbmRIYW5k
bGVDbG9zZWRPckludGVycnVwdGVkRGF0YWJhc2UoKTsKKyAgICB2b2lkIGNsZWFyQ2FsbGJhY2tX
cmFwcGVycygpOworCisgICAgLy8gU3RhdGUgTWFjaGluZSBmdW5jdGlvbnM6CisgICAgdmlydHVh
bCBTdGF0ZUZ1bmN0aW9uIHN0YXRlRnVuY3Rpb25Gb3IoU1FMVHJhbnNhY3Rpb25TdGF0ZSk7Cisg
ICAgdm9pZCByZXF1ZXN0VHJhbnNpdFRvU3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZSk7CisKKyAg
ICAvLyBTdGF0ZSBmdW5jdGlvbnM6CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBkZWxpdmVyVHJh
bnNhY3Rpb25DYWxsYmFjaygpOworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgZGVsaXZlclRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjaygpOworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgZGVsaXZlclN0
YXRlbWVudENhbGxiYWNrKCk7CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBkZWxpdmVyUXVvdGFJ
bmNyZWFzZUNhbGxiYWNrKCk7CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBkZWxpdmVyU3VjY2Vz
c0NhbGxiYWNrKCk7CisKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIHVucmVhY2hhYmxlU3RhdGUo
KTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIHNlbmRUb0JhY2tlbmRTdGF0ZSgpOworCisgICAg
U1FMVHJhbnNhY3Rpb25TdGF0ZSBuZXh0U3RhdGVGb3JUcmFuc2FjdGlvbkVycm9yKCk7CisKKyAg
ICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
QmFja2VuZD4gbV9iYWNrZW5kOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrPiBtX2NhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8Vm9p
ZENhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXI7CisgICAgU1FMQ2FsbGJhY2tXcmFw
cGVyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrV3JhcHBlcjsK
KworICAgIGJvb2wgbV9leGVjdXRlU3FsQWxsb3dlZDsKKyAgICBSZWZQdHI8U1FMRXJyb3I+IG1f
dHJhbnNhY3Rpb25FcnJvcjsKKworICAgIGJvb2wgbV9yZWFkT25seTsKKworICAgIGZyaWVuZCBj
bGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
QmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCShyZXZpc2lvbiAxNDI4ODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDIwICszOSwxMyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJTUUxFcnJvci5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgotI2luY2x1
ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiIC8vIEZJWE1FOiBy
ZW1vdmUgd2hlbiBTUUxTdGF0ZW1lbnQgaGFzIGJlZW4gcmVmYWN0b3JlZC4KKyNpbmNsdWRlICJT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiIC8vIEZJWE1FOiByZW1vdmUgd2hlbiBTUUxTdGF0
ZW1lbnQgaGFzIGJlZW4gcmVmYWN0b3JlZC4KICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgot
I2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNp
bmNsdWRlICJTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxWYWx1
ZS5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogCkBAIC02MCwxMTQg
KzUzLDI0NyBAQAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBUaGUgU1FM
VHJhbnNhY3Rpb24gaXMgYSBzdGF0ZSBtYWNoaW5lIHRoYXQgZXhlY3V0ZXMgYSBzZXJpZXMgb2Yg
c3RhdGVzIC8gc3RlcHMuCiAvLwotLy8gdGhzIFN0YXRlIFRyYW5zaXRpb24gR3JhcGggYXQgYSBn
bGFuY2U6CisvLyBUaGUgd29yayBvZiB0aGUgdHJhbnNhY3Rpb24gc3RhdGVzIGFyZSBkZWZpbmVk
IGluIHNlY3Rpb24gb2YgNC4zLjIgb2YgdGhlCisvLyB3ZWJkYXRhYmFzZSBzcGVjOiBodHRwOi8v
ZGV2LnczLm9yZy9odG1sNS93ZWJkYXRhYmFzZS8jcHJvY2Vzc2luZy1tb2RlbAorLy8KKy8vIHRo
ZSBTdGF0ZSBUcmFuc2l0aW9uIEdyYXBoIGF0IGEgZ2xhbmNlOgogLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KIC8vCi0vLyAgICBCYWNrZW5kICh3b3JrcyB3aXRoIFNR
TGl0ZURhdGFiYXNlKSAgICAgICAgICAuICAgRnJvbnRlbmQgKHdvcmtzIHdpdGggU2NyaXB0KQot
Ly8gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgICAgLiAgID09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vICAgLC0tPiBTdGF0ZSAwOiBbaW5pdGlhbCBz
dGF0ZV0gICAgICAgICAgICAgICAgIC4KLS8vICAgfCBeICAgICB2ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC4KLS8vICAgfCB8ICBTdGF0ZSAxOiBbYWNxdWlyZUxvY2tdICAg
ICAgICAgICAgICAgICAgIC4KLS8vICAgfCB8ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4KLS8vICAgfCB8ICBTdGF0ZSAyOiBbb3BlblRyYW5zYWN0aW9uQW5kUHJl
ZmxpZ2h0XSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgotLy8gICB8IHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0vLyAg
IHwgfCAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gU3RhdGUg
MzogW2RlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrXSAtLS0tLS4gIHwKLS8vICAgfCB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgdgotLy8gICB8IHwgICAgICwtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgIFN0YXRlIDEwOiBbZGVsaXZl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja10gKwotLy8gICB8IHwgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBeICBeICBeICAgfAotLy8gICB8IHwgICAgIHYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICB8ICB8ICAgfAotLy8gICB8IHwgIFN0YXRlIDQ6IFtydW5TdGF0ZW1lbnRz
XSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0nICB8ICB8ICAgfAotLy8gICB8IHwgICAgIHwgICAgICAgIF4gIF4gfCAgXiB8ICAg
ICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICB8ICAgfAotLy8gICB8IHwgICAgIHwtLS0tLS0tLScgIHwgfCAgfCBgLS0tLS0t
LS0tLS0tLS0tLS0tLS0+IFN0YXRlIDg6IFtkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2tdICstLS0t
LS0tLS0nICB8ICAgfAotLy8gICB8IHwgICAgIHwgICAgICAgICAgIHwgfCAgYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgICAg
ICAgICB8ICAgfAotLy8gICB8IHwgICAgIHwgICAgICAgICAgIHwgYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0+IFN0YXRlIDk6IFtkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrXSArICAgICAg
ICB8ICAgfAotLy8gICB8IHwgICAgIHwgICAgICAgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICAgICAgICB8
ICAgfAotLy8gICB8IHwgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fAotLy8gICB8IHwgIFN0YXRlIDU6IFtwb3N0ZmxpZ2h0QW5kQ29tbWl0XSAtLSstLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICAgfAot
Ly8gICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0+IFN0
YXRlIDY6IFtkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrXSArICAgICAgICAgICAgICAgICAgfAotLy8g
ICB8IHwgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgICAgLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotLy8gICB8
IHwgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAotLy8gICB8IHwg
IFN0YXRlIDc6IFtjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2tdIDwtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICAgICAgICAgICAgICAgICAgfAotLy8gICB8IGAtLS0t
LScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gICBgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorLy8gICAgIEJhY2tlbmQgICAgICAg
ICAgICAgICAgICAgICAgICAgIC4gICBGcm9udGVuZAorLy8gICAgICh3b3JrcyB3aXRoIFNRTGl0
ZURhdGFiYXNlKSAgICAgIC4gICAod29ya3Mgd2l0aCBTY3JpcHQpCisvLyAgICAgPT09PT09PT09
PT09PT09PT09PT09PT09PT09ICAgICAgLiAgID09PT09PT09PT09PT09PT09PT0KKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisvLyAgICAgMS4gSWRsZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgLgorLy8gICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC4KKy8vICAgICAyLiBBY3F1aXJlTG9jayAgICAgICAgICAgICAgICAgICAuCisvLyAgICAg
ICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorLy8gICAgIDMuIE9wZW5UcmFuc2Fj
dGlvbkFuZFByZWZsaWdodCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCisvLyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAgICAgYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0+IDguIERlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIC0tLiAgfAor
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ICB2CisvLyAgICAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tJyAgIDkuIERlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sg
KworLy8gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBeICBeICBeICAgIHwKKy8vICAgICAgICAgdiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgfCAgfCAgICB8CisvLyAgICAgNC4gUnVuU3RhdGVtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgIHwgIHwgICAgfAorLy8gICAgICAg
ICB8ICAgICAgICBeICBeIHwgIF4gfCAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICB8ICAgIHwKKy8vICAgICAgICAgfC0tLS0tLS0tJyAgfCB8ICB8IGAt
LS0tLS0tLS0tLS0+IDEwLiBEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2sgKy0tLS0tJyAgfCAgICB8
CisvLyAgICAgICAgIHwgICAgICAgICAgIHwgfCAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLScgICAgICAgIHwgICAgfAorLy8gICAgICAgICB8ICAgICAgICAg
ICB8IGAtLS0tLS0tLS0tLS0tLS0tLT4gMTEuIERlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sg
KyAgICB8ICAgIHwKKy8vICAgICAgICAgfCAgICAgICAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScgICAgfCAgICB8CisvLyAgICAgICAg
IHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgfAorLy8gICAgIDUuIFBvc3RmbGlnaHRBbmRDb21taXQgLS0r
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nICAgIHwK
Ky8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0+IDEyLiBEZWxpdmVy
U3VjY2Vzc0NhbGxiYWNrICsgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICwtLS0tLS0tLS0t
LS0tLS0tLS0tLScgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgfAorLy8gICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKy8vICAgICA2LiBD
bGVhbnVwQW5kVGVybWluYXRlIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLScgICAgICAgICAgICAgICB8CisvLyAgICAgICAgIHYgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
Ly8gICAgIDAuIEVuZCAgICAgICAgICB8ICAgICAgICAgICAgICAgIC4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8CisvLyAgICAgICAgICAgICAgICA3OiBDbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2sgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLgogLy8KIC8vIHRoZSBTdGF0ZXMgYW5kIFN0YXRl
IFRyYW5zaXRpb25zOgogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEV4
ZWN1dGVkIGluIHRoZSBiYWNrLWVuZDoKLS8vICAgICBTdGF0ZSAwOiBbaW5pdGlhbCBzdGF0ZV0K
LS8vICAgICAtIE9uIHNjaGVkdWxlZCB0cmFuc2FjdGlvbiwgZ290byBbYWNxdWlyZUxvY2tdLgot
Ly8KLS8vICAgICBTdGF0ZSAxOiBbYWNxdWlyZUxvY2tdCi0vLyAgICAgLSBhY3F1aXJlIGxvY2su
Ci0vLyAgICAgLSBvbiAibG9jayIgYWNxdWlzaXRpb24sIGdvdG8gW29wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodF0uCi0vLwotLy8gICAgIFN0YXRlIDI6IFtvcGVuVHJhbnNhY3Rpb25BbmRQcmVm
bGlnaHRdCi0vLyAgICAgLSBTZXRzIHVwIGFuIFNRTGl0ZVRyYW5zYWN0aW9uLgotLy8gICAgIC0g
YmVnaW4gdGhlIFNRTGl0ZVRyYW5zYWN0aW9uLgotLy8gICAgIC0gY2FsbCB0aGUgU1FMVHJhbnNh
Y3Rpb25XcmFwcGVyIHByZWZsaWdodCBpZiBhdmFpbGFibGUuCi0vLyAgICAgLSBzY2hlZHVsZSBz
Y3JpcHQgY2FsbGJhY2suCi0vLyAgICAgLSBvbiBlcnJvciAoc2VlIGhhbmRsZVRyYW5zYWN0aW9u
RXJyb3IpLCBnb3RvIFtkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrXS4KLS8vICAgICAt
IGdvdG8gW2RlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrXS4KLS8vCi0vLyBFeGVjdXRlZCBpbiB0
aGUgZnJvbnQtZW5kOgotLy8gICAgIFN0YXRlIDM6IFtkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFj
a10KLS8vICAgICAtIGludm9rZSB0aGUgc2NyaXB0IGZ1bmN0aW9uIGNhbGxiYWNrKCkgaWYgYXZh
aWxhYmxlLgotLy8gICAgIC0gb24gZXJyb3IsIGdvdG8gW2RlbGl2ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2tdLgotLy8gICAgIC0gZ290byBbcnVuU3RhdGVtZW50c10uCi0vLwotLy8gRXhlY3V0
ZWQgaW4gdGhlIGJhY2stZW5kOgotLy8gICAgIFN0YXRlIDQ6IFtydW5TdGF0ZW1lbnRzXQotLy8g
ICAgIC0gd2hpbGUgdGhlcmUgYXJlIHN0YXRlbWVudHMgewotLy8gICAgICAgICAtIHJ1biBhIHN0
YXRlbWVudC4KLS8vICAgICAgICAgLSBpZiBzdGF0ZW1lbnRDYWxsYmFjayBpcyBhdmFpbGFibGUs
IGdvdG8gW2RlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFja10uCi0vLyAgICAgICAgIC0gb24gZXJyb3Is
Ci0vLyAgICAgICAgICAgZ290byBbZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFja10sIG9yCi0v
LyAgICAgICAgICAgZ290byBbZGVsaXZlclN0YXRlbWVudENhbGxiYWNrXSAoc2VlIGhhbmRsZUN1
cnJlbnRTdGF0ZW1lbnRFcnJvciksIG9yCi0vLyAgICAgICAgICAgZ290byBbZGVsaXZlclRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFja10uCi0vLyAgICAgICB9Ci0vLyAgICAgLSBnb3RvIFtwb3N0Zmxp
Z2h0QW5kQ29tbWl0XS4KLS8vCi0vLyAgICAgU3RhdGUgNTogW3Bvc3RmbGlnaHRBbmRDb21taXRd
Ci0vLyAgICAgLSBjYWxsIHRoZSBTUUxUcmFuc2FjdGlvbldyYXBwZXIgcG9zdGZsaWdodCBpZiBh
dmFpbGFibGUuCi0vLyAgICAgLSBjb21taXQgdGhlIFNRTGl0ZVRhbnNhY3Rpb24uCi0vLyAgICAg
LSBvbiBlcnJvciwgZ290byBbZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja10gKHNlZSBo
YW5kbGVUcmFuc2FjdGlvbkVycm9yKS4KLS8vICAgICAtIGlmIHN1Y2Nlc3NDYWxsYmFjayBpcyBh
dmFpbGFibGUsIGdvdG8gW2RlbGl2ZXJTdWNjZXNzQ2FsbGJhY2tdLgotLy8gICAgICAgZWxzZSBn
b3RvIFtjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2tdLgotLy8KLS8vIEV4ZWN1dGVkIGluIHRo
ZSBmcm9udC1lbmQ6Ci0vLyAgICAgU3RhdGUgNjogW2RlbGl2ZXJTdWNjZXNzQ2FsbGJhY2tdCi0v
LyAgICAgLSBpbnZva2UgdGhlIHNjcmlwdCBmdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2soKSBpZiBh
dmFpbGFibGUuCi0vLyAgICAgLSBnb3RvIFtjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2tdLgot
Ly8KLS8vIEV4ZWN1dGVkIGluIHRoZSBiYWNrLWVuZDoKLS8vICAgICBTdGF0ZSA3OiBbY2xlYW51
cEFmdGVyU3VjY2Vzc0NhbGxiYWNrXQotLy8gICAgIC0gY2xlYW4gdGhlIFNRTGl0ZVRyYW5zYWN0
aW9uLgotLy8gICAgIC0gcmVsZWFzZSBsb2NrLgotLy8gICAgIC0gZ290byBbaW5pdGlhbCBzdGF0
ZV0uCi0vLwotLy8gT3RoZXIgc3RhdGVzOgotLy8gRXhlY3V0ZWQgaW4gdGhlIGZyb250LWVuZDoK
LS8vICAgICBTdGF0ZSA4OiBbZGVsaXZlclN0YXRlbWVudENhbGxiYWNrXQotLy8gICAgIC0gaW52
b2tlIHNjcmlwdCBzdGF0ZW1lbnQgY2FsbGJhY2sgKGFzc3VtZSBhdmFpbGFibGUpLgotLy8gICAg
IC0gb24gZXJyb3IgKHNlZSBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKSwKLS8vICAgICAgIGdvdG8g
W2RlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2tdLgotLy8gICAgIC0gZ290byBbcnVuU3Rh
dGVtZW50c10uCi0vLwotLy8gICAgIFN0YXRlIDk6IFtkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxi
YWNrXQotLy8gICAgIC0gZ2l2ZSBjbGllbnQgYSBjaGFuY2UgdG8gaW5jcmVhc2UgdGhlIHF1b3Rh
LgotLy8gICAgIC0gZ290byBbcnVuU3RhdGVtZW50c10uCi0vLwotLy8gICAgIFN0YXRlIDEwOiBb
ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFja10KLS8vICAgICAtIGludm9rZSB0aGUgc2Ny
aXB0IGZ1bmN0aW9uIGVycm9yQ2FsbGJhY2sgaWYgYXZhaWxhYmxlLgotLy8gICAgIC0gZ290byBb
Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrXS4KLS8vCi0vLyBFeGVjdXRlZCBp
biB0aGUgYmFjay1lbmQ6Ci0vLyAgICAgU3RhdGUgMTE6IFtjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2tdCi0vLyAgICAgLSByb2xsYmFjayBhbmQgY2xlYXIgU1FMaXRlVHJhbnNh
Y3Rpb24uCi0vLyAgICAgLSBjbGVhciBzdGF0ZW1lbnRzLgotLy8gICAgIC0gcmVsZWFzZSBsb2Nr
LgotLy8gICAgIC0gZ290byBbaW5pdGlhbCBzdGF0ZV0uCisvLyAgICAgMC4gU1FMVHJhbnNhY3Rp
b25TdGF0ZTo6RW5kCisvLyAgICAgICAgIC0gdGhlIGVuZCBzdGF0ZS4KKy8vCisvLyAgICAgMS4g
U1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZQorLy8gICAgICAgICAtIHBsYWNlaG9sZGVyIHN0YXRl
IHdoaWxlIHdhaXRpbmcgb24gZnJvbnRlbmQvYmFja2VuZCwgZXRjLiBTZWUgY29tbWVudCBvbgor
Ly8gICAgICAgICAgICJTdGF0ZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIFNRTFRyYW5zYWN0aW9uIGFu
ZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQiCisvLyAgICAgICAgICAgYmVsb3cuCisvLworLy8gICAg
IDIuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkFjcXVpcmVMb2NrIChydW5zIGluIGJhY2tlbmQpCisv
LyAgICAgICAgIC0gdGhpcyBpcyB0aGUgc3RhcnQgc3RhdGUuCisvLyAgICAgICAgIC0gYWNxdWly
ZSB0aGUgImxvY2siLgorLy8gICAgICAgICAtIG9uICJsb2NrIiBhY3F1aXNpdGlvbiwgZ290byBT
UUxUcmFuc2FjdGlvblN0YXRlOjpPcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQuCisvLworLy8g
ICAgIDMuIFNRTFRyYW5zYWN0aW9uU3RhdGU6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCAo
cnVucyBpbiBiYWNrZW5kKQorLy8gICAgICAgICAtIFNldHMgdXAgYW4gU1FMaXRlVHJhbnNhY3Rp
b24uCisvLyAgICAgICAgIC0gYmVnaW4gdGhlIFNRTGl0ZVRyYW5zYWN0aW9uLgorLy8gICAgICAg
ICAtIGNhbGwgdGhlIFNRTFRyYW5zYWN0aW9uV3JhcHBlciBwcmVmbGlnaHQgaWYgYXZhaWxhYmxl
LgorLy8gICAgICAgICAtIHNjaGVkdWxlIHNjcmlwdCBjYWxsYmFjay4KKy8vICAgICAgICAgLSBv
biBlcnJvciwgZ290byBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLgorLy8gICAgICAgICAtIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZl
clRyYW5zYWN0aW9uQ2FsbGJhY2suCisvLworLy8gICAgIDQuIFNRTFRyYW5zYWN0aW9uU3RhdGU6
OkRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIChydW5zIGluIGZyb250ZW5kKQorLy8gICAgICAg
ICAtIGludm9rZSB0aGUgc2NyaXB0IGZ1bmN0aW9uIGNhbGxiYWNrKCkgaWYgYXZhaWxhYmxlLgor
Ly8gICAgICAgICAtIG9uIGVycm9yLCBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suCisvLyAgICAgICAgIC0gZ290byBTUUxUcmFuc2FjdGlv
blN0YXRlOjpSdW5TdGF0ZW1lbnRzLgorLy8KKy8vICAgICA1LiBTUUxUcmFuc2FjdGlvblN0YXRl
OjpEZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIChydW5zIGluIGZyb250ZW5kKQorLy8g
ICAgICAgICAtIGludm9rZSB0aGUgc2NyaXB0IGZ1bmN0aW9uIGVycm9yQ2FsbGJhY2sgaWYgYXZh
aWxhYmxlLgorLy8gICAgICAgICAtIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLgorLy8KKy8vICAgICA2LiBTUUxUcmFuc2FjdGlv
blN0YXRlOjpSdW5TdGF0ZW1lbnRzIChydW5zIGluIGJhY2tlbmQpCisvLyAgICAgICAgIC0gd2hp
bGUgdGhlcmUgYXJlIHN0YXRlbWVudHMgeworLy8gICAgICAgICAgICAgLSBydW4gYSBzdGF0ZW1l
bnQuCisvLyAgICAgICAgICAgICAtIGlmIHN0YXRlbWVudENhbGxiYWNrIGlzIGF2YWlsYWJsZSwg
Z290byBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2suCisvLyAg
ICAgICAgICAgICAtIG9uIGVycm9yLAorLy8gICAgICAgICAgICAgICBnb3RvIFNRTFRyYW5zYWN0
aW9uU3RhdGU6OkRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2ssIG9yCisvLyAgICAgICAgICAg
ICAgIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclN0YXRlbWVudENhbGxiYWNrLCBv
cgorLy8gICAgICAgICAgICAgICBnb3RvIFNRTFRyYW5zYWN0aW9uU3RhdGU6OmRlbGl2ZXJUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suCisvLyAgICAgICAgICAgfQorLy8gICAgICAgICAtIGdvdG8g
U1FMVHJhbnNhY3Rpb25TdGF0ZTo6UG9zdGZsaWdodEFuZENvbW1pdC4KKy8vCisvLyAgICAgNy4g
U1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclN0YXRlbWVudENhbGxiYWNrIChydW5zIGluIGZy
b250ZW5kKQorLy8gICAgICAgICAtIGludm9rZSBzY3JpcHQgc3RhdGVtZW50IGNhbGxiYWNrIChh
c3N1bWUgYXZhaWxhYmxlKS4KKy8vICAgICAgICAgLSBvbiBlcnJvciwgZ290byBTUUxUcmFuc2Fj
dGlvblN0YXRlOjpEZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLgorLy8gICAgICAgICAt
IGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6UnVuU3RhdGVtZW50cy4KKy8vCisvLyAgICAgOC4g
U1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjayAocnVucyBp
biBmcm9udGVuZCkKKy8vICAgICAgICAgLSBnaXZlIGNsaWVudCBhIGNoYW5jZSB0byBpbmNyZWFz
ZSB0aGUgcXVvdGEuCisvLyAgICAgICAgIC0gZ290byBTUUxUcmFuc2FjdGlvblN0YXRlOjpSdW5T
dGF0ZW1lbnRzLgorLy8KKy8vICAgICA5LiBTUUxUcmFuc2FjdGlvblN0YXRlOjpQb3N0ZmxpZ2h0
QW5kQ29tbWl0IChydW5zIGluIGJhY2tlbmQpCisvLyAgICAgICAgIC0gY2FsbCB0aGUgU1FMVHJh
bnNhY3Rpb25XcmFwcGVyIHBvc3RmbGlnaHQgaWYgYXZhaWxhYmxlLgorLy8gICAgICAgICAtIGNv
bW1pdCB0aGUgU1FMaXRlVGFuc2FjdGlvbi4KKy8vICAgICAgICAgLSBvbiBlcnJvciwgZ290byBT
UUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLgorLy8g
ICAgICAgICAtIGlmIHN1Y2Nlc3NDYWxsYmFjayBpcyBhdmFpbGFibGUsIGdvdG8gU1FMVHJhbnNh
Y3Rpb25TdGF0ZTo6RGVsaXZlclN1Y2Nlc3NDYWxsYmFjay4KKy8vICAgICAgICAgICBlbHNlIGdv
dG8gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFuZFRlcm1pbmF0ZS4KKy8vCisvLyAgICAg
MTAuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2sgKHJ1bnMgaW4g
ZnJvbnRlbmQpCisvLyAgICAgICAgIC0gaW52b2tlIHRoZSBzY3JpcHQgZnVuY3Rpb24gc3VjY2Vz
c0NhbGxiYWNrKCkgaWYgYXZhaWxhYmxlLgorLy8gICAgICAgICAtIGdvdG8gU1FMVHJhbnNhY3Rp
b25TdGF0ZTo6Q2xlYW51cEFuZFRlcm1pbmF0ZS4KKy8vCisvLyAgICAgMTEuIFNRTFRyYW5zYWN0
aW9uU3RhdGU6OkNsZWFudXBBbmRUZXJtaW5hdGUgKHJ1bnMgaW4gYmFja2VuZCkKKy8vICAgICAg
ICAgLSBzdG9wIGFuZCBjbGVhciB0aGUgU1FMaXRlVHJhbnNhY3Rpb24uCisvLyAgICAgICAgIC0g
cmVsZWFzZSB0aGUgImxvY2siLgorLy8gICAgICAgICAtIGdvdG8gU1FMVHJhbnNhY3Rpb25TdGF0
ZTo6RW5kLgorLy8KKy8vICAgICAxMi4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFmdGVy
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIChydW5zIGluIGJhY2tlbmQpCisvLyAgICAgICAgIC0g
cm9sbGJhY2sgdGhlIFNRTGl0ZVRyYW5zYWN0aW9uLgorLy8gICAgICAgICAtIGdvdG8gU1FMVHJh
bnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFuZFRlcm1pbmF0ZS4KKy8vCisvLyBTdGF0ZSB0cmFuc2l0
aW9ucyBiZXR3ZWVuIFNRTFRyYW5zYWN0aW9uIGFuZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQKKy8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorLy8gQXMgc2hvd24gYWJvdmUsIHRoZXJlIGFyZSBzdGF0ZSB0cmFuc2l0aW9u
cyB0aGF0IGNyb3NzZXMgdGhlIGJvdW5kYXJ5IGJldHdlZW4KKy8vIHRoZSBmcm9udGVuZCBhbmQg
YmFja2VuZC4gRm9yIGV4YW1wbGUsCisvLworLy8gICAgIE9wZW5UcmFuc2FjdGlvbkFuZFByZWZs
aWdodCAoc3RhdGUgMyBpbiB0aGUgYmFja2VuZCkKKy8vICAgICB0cmFuc2l0aW9ucyB0byBEZWxp
dmVyVHJhbnNhY3Rpb25DYWxsYmFjayAoc3RhdGUgOCBpbiB0aGUgZnJvbnRlbmQpLAorLy8gICAg
IHdoaWNoIGluIHR1cm4gdHJhbnNpdGlvbnMgdG8gUnVuU3RhdGVtZW50cyAoc3RhdGUgNCBpbiB0
aGUgYmFja2VuZCkuCisvLworLy8gVGhpcyBjcm9zcyBib3VuZGFyeSB0cmFuc2l0aW9uIGlzIGRv
bmUgYnkgcG9zdGluZyB0cmFuc2l0aW9uIHJlcXVlc3RzIHRvIHRoZQorLy8gb3RoZXIgc2lkZSBh
bmQgbGV0dGluZyB0aGUgb3RoZXIgc2lkZSdzIHN0YXRlIG1hY2hpbmUgZXhlY3V0ZSB0aGUgc3Rh
dGUKKy8vIHRyYW5zaXRpb24gaW4gdGhlIGFwcHJvcHJpYXRlIHRocmVhZCAoaS5lLiB0aGUgc2Ny
aXB0IHRocmVhZCBmb3IgdGhlIGZyb250ZW5kLAorLy8gYW5kIHRoZSBkYXRhYmFzZSB0aHJlYWQg
Zm9yIHRoZSBiYWNrZW5kKS4KKy8vCisvLyBMb2dpY2FsbHksIHRoZSBzdGF0ZSB0cmFuc2l0aW9u
cyB3b3JrIGFzIHNob3duIGluIHRoZSBncmFwaCBhYm92ZS4gQnV0CisvLyBwaHlzaWNhbGx5LCB0
aGUgdHJhbnNpdGlvbiBtZWNoYW5pc20gdXNlcyB0aGUgSWRsZSBzdGF0ZSAoYm90aCBpbiB0aGUg
ZnJvbnRlbmQKKy8vIGFuZCBiYWNrZW5kKSBhcyBhIHdhaXRpbmcgc3RhdGUgZm9yIGZ1cnRoZXIg
YWN0aXZpdHkuIEZvciBleGFtcGxlLCB0YWtpbmcgYQorLy8gY2xvc2VyIGxvb2sgYXQgdGhlIDMg
c3RhdGUgdHJhbnNpdGlvbiBleGFtcGxlIGFib3ZlLCB3aGF0IGFjdHVhbGx5IGhhcHBlbnMKKy8v
IGlzIGFzIGZvbGxvd3M6CisvLworLy8gICAgIFN0ZXAgMToKKy8vICAgICA9PT09PT0KKy8vICAg
ICBJbiB0aGUgZnJvbnRlbmQgdGhyZWFkOgorLy8gICAgIC0gd2FpdGluZyBxdWlldGx5IGlzIElk
bGUuIE5vdCBkb2luZyBhbnkgd29yay4KKy8vCisvLyAgICAgSW4gdGhlIGJhY2tlbmQ6CisvLyAg
ICAgLSBpcyBpbiBPcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQsIGFuZCBkb2luZyBpdHMgd29y
ay4KKy8vICAgICAtIHdoZW4gZG9uZSwgaXQgdHJhbnNpdHMgdG8gdGhlIGJhY2tlbmQgRGVsaXZl
clRyYW5zYWN0aW9uQ2FsbGJhY2suCisvLyAgICAgLSB0aGUgYmFja2VuZCBEZWxpdmVyVHJhbnNh
Y3Rpb25DYWxsYmFjayBzZW5kcyBhIHJlcXVlc3QgdG8gdGhlIGZyb250ZW5kCisvLyAgICAgICB0
byB0cmFuc2l0IHRvIERlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrLCBhbmQgdGhlbiBpdHNlbGYg
dHJhbnNpdHMgdG8KKy8vICAgICAgIElkbGUuCisvLworLy8gICAgIFN0ZXAgMjoKKy8vICAgICA9
PT09PT0KKy8vICAgICBJbiB0aGUgZnJvbnRlbmQgdGhyZWFkOgorLy8gICAgIC0gdHJhbnNpdHMg
dG8gRGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sgYW5kIGRvZXMgaXRzIHdvcmsuCisvLyAgICAg
LSB3aGVuIGRvbmUsIGl0IHRyYW5zaXRzIHRvIHRoZSBmcm9udGVuZCBSdW5TdGF0ZW1lbnRzLgor
Ly8gICAgIC0gdGhlIGZyb250ZW5kIFJ1blN0YXRlbWVudHMgc2VuZHMgYSByZXF1ZXN0IHRvIHRo
ZSBiYWNrZW5kIHRvIHRyYW5zaXQKKy8vICAgICAgIHRvIFJ1blN0YXRlbWVudHMsIGFuZCB0aGVu
IGl0c2VsZiB0cmFuc2l0cyB0byBJZGxlLgorLy8KKy8vICAgICBJbiB0aGUgYmFja2VuZDoKKy8v
ICAgICAtIHdhaXRpbmcgcXVpZXRseSBpbiBJZGxlLgorLy8KKy8vICAgICBTdGVwIDM6CisvLyAg
ICAgPT09PT09CisvLyAgICAgSW4gdGhlIGZyb250ZW5kIHRocmVhZDoKKy8vICAgICAtIHdhaXRp
bmcgcXVpZXRseSBpcyBJZGxlLiBOb3QgZG9pbmcgYW55IHdvcmsuCisvLworLy8gICAgIEluIHRo
ZSBiYWNrZW5kOgorLy8gICAgIC0gdHJhbnNpdHMgdG8gUnVuU3RhdGVtZW50cywgYW5kIGRvZXMg
aXRzIHdvcmsuCisvLyAgICAgICAgLi4uCisvLworLy8gU28sIHdoZW4gdGhlIGZyb250ZW5kIG9y
IGJhY2tlbmQgYXJlIG5vdCBhY3RpdmUsIHRoZXkgd2lsbCBwYXJrIHRoZW1zZWx2ZXMgaW4KKy8v
IHRoZWlyIElkbGUgc3RhdGVzLiBUaGlzIG1lYW5zIHRoZWlyIG1fbmV4dFN0YXRlIGlzIHNldCB0
byBJZGxlLCBidXQgdGhleSBuZXZlcgorLy8gYWN0dWFsbHkgcnVuIHRoZSBjb3JyZXNwb25kaW5n
IHN0YXRlIGZ1bmN0aW9uLiBOb3RlOiBmb3IgYm90aCB0aGUgZnJvbnRlbmQgYW5kCisvLyBiYWNr
ZW5kLCB0aGUgc3RhdGUgZnVuY3Rpb24gZm9yIElkbGUgaXMgdW5yZWFjaGFibGVTdGF0ZSgpLgor
Ly8KKy8vIFRoZSBzdGF0ZXMgdGhhdCBzZW5kIGEgcmVxdWVzdCB0byB0aGVpciBwZWVyIGFjcm9z
cyB0aGUgZnJvbnQvYmFjayBib3VuZGFyeQorLy8gYXJlIGltcGxlbWVudGVkIHdpdGgganVzdCAy
IGZ1bmN0aW9uczogU1FMVHJhbnNhY3Rpb246OnNlbmRUb0JhY2tlbmRTdGF0ZSgpCisvLyBhbmQg
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpzZW5kVG9Gcm9udGVuZFN0YXRlKCkuIFRoZXNlIHN0YXRl
IGZ1bmN0aW9ucyBkbworLy8gbm90aGluZyBidXQgc2VuZHMgYSByZXF1ZXN0IHRvIHRoZSBvdGhl
ciBzaWRlIHRvIHRyYW5zaXQgdG8gdGhlIGN1cnJlbnQKKy8vIHN0YXRlIChpbmRpY2F0ZWQgYnkg
bV9uZXh0U3RhdGUpLCBhbmQgdGhlbiB0cmFuc2l0cyBpdHNlbGYgdG8gdGhlIElkbGUgc3RhdGUK
Ky8vIHRvIHdhaXQgZm9yIGZ1cnRoZXIgYWN0aW9uLgorCisKKy8vIFRoZSBMaWZlLUN5Y2xlIG9m
IGEgU1FMVHJhbnNhY3Rpb24gaS5lLiBXaG8ncyBrZWVwaW5nIHRoZSBTUUxUcmFuc2FjdGlvbkFs
aXZlPyAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBUaGUgUmVmUHRyIGNoYWluIGdvZXMg
c29tZXRoaW5nIGxpa2UgdGhpczoKKy8vCisvLyAgICAgQXQgYmlydGggKGluIERhdGFiYXNlQmFj
a2VuZEFzeW5jOjpydW5UcmFuc2FjdGlvbigpKToKKy8vICAgICA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgICAgRGF0YWJhc2VCYWNrZW5k
QXN5bmMgICAgICAgICAgICAgICAvLyBpbiBEZXF1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNr
ZW5kPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZSBwb2ludHMgdG8gLi4uCisvLyAgICAgLS0+IFNRTFRy
YW5zYWN0aW9uQmFja2VuZCAgICAgICAgICAvLyBpbiBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1f
ZnJvbnRlbmQgcG9pbnRzIHRvIC4uLgorLy8gICAgICAgICAtLT4gU1FMVHJhbnNhY3Rpb24gICAg
ICAgICAgICAgLy8gaW4gUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gbV9iYWNrZW5kIHBv
aW50cyB0byAuLi4KKy8vICAgICAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgIC8v
IHdoaWNoIGlzIGEgY2lyY3VsYXIgcmVmZXJlbmNlLgorLy8KKy8vICAgICBOb3RlOiB0aGVyZSdz
IGEgY2lyY3VsYXIgcmVmZXJlbmNlIGJldHdlZW4gdGhlIFNRTFRyYW5zYWN0aW9uIGZyb250LWVu
ZCBhbmQKKy8vICAgICBiYWNrLWVuZC4gVGhpcyBjaXJjdWxhciByZWZlcmVuY2UgaXMgZXN0YWJs
aXNoZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZQorLy8gICAgIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZC4gVGhlIGNpcmN1bGFyIHJlZmVyZW5jZSB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHRoZSBl
bmQKKy8vICAgICBvZiB0aGUgdHJhbnNhY3Rpb24ncyBjbGVhbiB1cCBzdGF0ZSBpLmUuIHdoZW4g
dGhlIHRyYW5zYWN0aW9uIHNob3VsZCBubworLy8gICAgIGxvbmdlciBiZSBpbiB1c2UgdGhlcmVh
ZnRlci4KKy8vCisvLyAgICAgQWZ0ZXIgc2NoZWR1bGluZyB0aGUgdHJhbnNhY3Rpb24gd2l0aCB0
aGUgRGF0YWJhc2VUaHJlYWQgKERhdGFiYXNlQmFja2VuZEFzeW5jOjpzY2hlZHVsZVRyYW5zYWN0
aW9uKCkpOgorLy8gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorLy8gICAgIERhdGFiYXNlVGhyZWFkICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlu
IE1lc3NhZ2VRdWV1ZTxEYXRhYmFzZVRhc2s+IG1fcXVldWUgcG9pbnRzIHRvIC4uLgorLy8gICAg
IC0tPiBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayAgICAgICAgICAgIC8vIGluIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb24gcG9pbnRzIHRvIC4uLgorLy8gICAgICAg
ICAtLT4gU1FMVHJhbnNhY3Rpb25CYWNrZW5kICAgICAgICAgIC8vIGluIFJlZlB0cjxTUUxUcmFu
c2FjdGlvbj4gbV9mcm9udGVuZCBwb2ludHMgdG8gLi4uCisvLyAgICAgICAgICAgICAtLT4gU1FM
VHJhbnNhY3Rpb24gICAgICAgICAgICAgLy8gaW4gUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZD4gbV9iYWNrZW5kIHBvaW50cyB0byAuLi4KKy8vICAgICAgICAgICAgICAgICAtLT4gU1FMVHJh
bnNhY3Rpb25CYWNrZW5kICAvLyB3aGljaCBpcyBhIGNpcmN1bGFyIHJlZmVyZW5jZS4KKy8vCisv
LyAgICAgV2hlbiBleGVjdXRpbmcgdGhlIHRyYW5zYWN0aW9uIChpbiBEYXRhYmFzZVRocmVhZDo6
ZGF0YWJhc2VUaHJlYWQoKSk6CisvLyAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICAgICBPd25QdHI8RGF0
YWJhc2VUYXNrPiB0YXNrOyAgICAgICAgICAgICAvLyBwb2ludHMgdG8gLi4uCisvLyAgICAgLS0+
IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICAgICAgICAgICAgLy8gaW4gUmVmUHRyPFNRTFRyYW5z
YWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbiBwb2ludHMgdG8gLi4uCisvLyAgICAgICAgIC0t
PiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgICAgICAgICAgLy8gaW46IFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbj4gbV9mcm9udGVuZDsKKy8vICAgICAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbiAgICAg
ICAgICAgICAvLyBpbiBSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBtX2JhY2tlbmQgcG9p
bnRzIHRvIC4uLgorLy8gICAgICAgICAgICAgICAgIC0tPiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQg
IC8vIHdoaWNoIGlzIGEgY2lyY3VsYXIgcmVmZXJlbmNlLgorLy8KKy8vICAgICBBdCB0aGUgZW5k
IG9mIGNsZWFudXBBbmRUZXJtaW5hdGUoKToKKy8vICAgICA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorLy8gICAgIEF0IHRoZSBlbmQgb2YgdGhlIGNsZWFudXAgc3RhdGUsIHRo
ZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om1fZnJvbnRlbmQgaXMgbnVsbGlmaWVkLgorLy8gICAg
IElmIGJ5IHRoZW4sIGEgSlNPYmplY3Qgd3JhcHBlciBpcyByZWZlcnJpbmcgdG8gdGhlIFNRTFRy
YW5zYWN0aW9uLCB0aGVuIHRoZSByZWZlcmVuY2UKKy8vICAgICBjaGFpbiBsb29rcyBsaWtlIHRo
aXM6CisvLworLy8gICAgIEpTT2JqZWN0V3JhcHBlcgorLy8gICAgIC0tPiBTUUxUcmFuc2FjdGlv
biAgICAgICAgICAgICAvLyBpbiBSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBtX2JhY2tl
bmQgcG9pbnRzIHRvIC4uLgorLy8gICAgICAgICAtLT4gU1FMVHJhbnNhY3Rpb25CYWNrZW5kICAv
LyB3aGljaCBubyBsb25nZXIgcG9pbnRzIGJhY2sgdG8gaXRzIFNRTFRyYW5zYWN0aW9uLgorLy8K
Ky8vICAgICBXaGVuIHRoZSBHQyBjb2xsZWN0cyB0aGUgY29ycmVzcG9uZGluZyBKU09iamVjdCwg
dGhlIGFib3ZlIGNoYWluIHdpbGwgYmUgY2xlYW5lZCB1cAorLy8gICAgIGFuZCBkZWxldGVkLgor
Ly8KKy8vICAgICBJZiB0aGVyZSBpcyBubyBKU09iamVjdCB3cmFwcGVyIHJlZmVycmluZyB0byB0
aGUgU1FMVHJhbnNhY3Rpb24gd2hlbiB0aGUgY2xlYW51cAorLy8gICAgIHN0YXRlcyBudWxsaWZ5
IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6bV9mcm9udGVuZCwgdGhlIFNRTFRyYW5zYWN0aW9uIHdp
bGwgZGVsZXRlZCB0aGVuLgorLy8gICAgIEhvd2V2ZXIsIHRoZXJlIHdpbGwgc3RpbGwgYmUgYSBE
YXRhYmFzZVRhc2sgcG9pbnRpbmcgdG8gdGhlIFNRTFRyYW5zYWN0aW9uQmFja2VuZCAoc2VlCisv
LyAgICAgdGhlICJXaGVuIGV4ZWN1dGluZyB0aGUgdHJhbnNhY3Rpb24iIGNoYWluIGFib3ZlKS4g
VGhpcyB3aWxsIGtlZXAgdGhlCisvLyAgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kIGFsaXZlIHVu
dGlsIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpIHJlbGVhc2VzIGl0cworLy8gICAg
IHRhc2sgT3duUHRyLgorLy8KKy8vICAgICBXaGF0IGhhcHBlbnMgaWYgYSB0cmFuc2FjdGlvbiBp
cyBpbnRlcnJ1cHRlZD8KKy8vICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorLy8gICAgIElmIHRoZSB0cmFuc2FjdGlvbiBpcyBpbnRlcnJ1cHRlZCBoYWxm
IHdheSwgaXQgd29uJ3QgZ2V0IHRvIHJ1biB0byBzdGF0ZQorLy8gICAgIENsZWFudXBBbmRUZXJt
aW5hdGUsIGFuZCBoZW5jZSwgd291bGQgbm90IGhhdmUgY2FsbGVkIGRvQ2xlYW51cCgpLiBkb0Ns
ZWFudXAoKSBpcworLy8gICAgIHdoZXJlIHdlIG51bGxpZnkgU1FMVHJhbnNhY3Rpb25CYWNrZW5k
OjptX2Zyb250ZW5kIHRvIGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUKKy8vICAgICBiZXR3ZWVu
IHRoZSBmcm9udGVuZCBhbmQgYmFja2VuZC4gSGVuY2UsIHRoYXQgdHJhbnNhY3Rpb24gd2lsbCBu
ZXZlciBnZXQgY2xlYW5lZAorLy8gICAgIHVwLCB1bmxlc3MgLi4uCisvLworLy8gICAgIC4uLiB1
bmxlc3Mgd2UgaGF2ZSBhIGNsZWFudXAgbWVjaGFuaXNtIGZvciBpbnRlcnJ1cHRpb25zLiBUaGF0
IGlzLCBkdXJpbmcgdGhlCisvLyAgICAgc2h1dGRvd24gb2YgdGhlIERhdGFiYXNlVGhyZWFkLCB0
aGUgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciB3aWxsIGRpc2NvdmVyIHRoaXMKKy8vICAgICBp
bnRlcnJ1cHRlZCB0cmFuc2FjdGlvbiBhbmQgaW52b2tlIGl0cyBub3RpZnlEYXRhYmFzZVRocmVh
ZElzU2h1dHRpbmdEb3duKCksCisvLyAgICAgd2hpY2ggaW4gdHVybiB3aWxsIGNhbGwgZG9DbGVh
bnVwKCkuIFdpdGggdGhhdCwgYWxsIGlzIHdlbGwgYWdhaW4uCiAKIAogLy8gVGhlcmUncyBubyB3
YXkgb2Yga25vd2luZyBleGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBiZSByZXF1aXJl
ZCB3aGVuIGEgc3RhdGVtZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LgpAQCAtMTc3LDE2ICszMDMs
MjAgQEAgc3RhdGljIGNvbnN0IGludCBEZWZhdWx0UXVvdGFTaXplSW5jcmVhcwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNRTFRyYW5zYWN0aW9uQmFja2VuZDo6U1FMVHJhbnNhY3Rpb25CYWNr
ZW5kKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxs
YmFjaywKLSAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywKLSAgICBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCByZWFkT25seSkK
LSAgICA6IG1fbmV4dFN0ZXAoJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6YWNxdWlyZUxvY2spCi0g
ICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQorUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ+IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRlKERhdGFiYXNlQmFja2VuZEFz
eW5jKiBkYiwKKyAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBmcm9udGVuZCwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQoZGIsIGZyb250ZW5k
LCB3cmFwcGVyLCByZWFkT25seSkpOworfQorCitTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OlNRTFRy
YW5zYWN0aW9uQmFja2VuZChEYXRhYmFzZUJhY2tlbmRBc3luYyogZGIsCisgICAgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbj4gZnJvbnRlbmQsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFw
cGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQorICAgIDogbV9mcm9udGVuZChmcm9udGVuZCkK
ICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX3dyYXBwZXIod3JhcHBlcikKLSAgICAsIG1f
Y2FsbGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQot
ICAgICwgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyKHN1Y2Nlc3NDYWxsYmFjaywgZGItPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIoZXJyb3JD
YWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1faGFzQ2FsbGJh
Y2sobV9mcm9udGVuZC0+aGFzQ2FsbGJhY2soKSkKKyAgICAsIG1faGFzU3VjY2Vzc0NhbGxiYWNr
KG1fZnJvbnRlbmQtPmhhc1N1Y2Nlc3NDYWxsYmFjaygpKQorICAgICwgbV9oYXNFcnJvckNhbGxi
YWNrKG1fZnJvbnRlbmQtPmhhc0Vycm9yQ2FsbGJhY2soKSkKICAgICAsIG1fc2hvdWxkUmV0cnlD
dXJyZW50U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNlKQog
ICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCkBAIC0xOTQsNiArMzI0LDggQEAgU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kOjpTUUxUcmFuc2FjdGlvbkJhYwogICAgICwgbV9oYXNWZXJzaW9uTWlzbWF0
Y2goZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIG1fZnJvbnRlbmQtPnNl
dEJhY2tlbmQodGhpcyk7CisgICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IFNRTFRyYW5zYWN0aW9uU3Rh
dGU6OkFjcXVpcmVMb2NrOwogfQogCiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6On5TUUxUcmFuc2Fj
dGlvbkJhY2tlbmQoKQpAQCAtMjAxLDYxICszMzMsODggQEAgU1FMVHJhbnNhY3Rpb25CYWNrZW5k
Ojp+U1FMVHJhbnNhY3Rpb25CYQogICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7CiB9
CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYg
c3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCit2b2lkIFNR
TFRyYW5zYWN0aW9uQmFja2VuZDo6ZG9DbGVhbnVwKCkKIHsKLSAgICBpZiAoIW1fZXhlY3V0ZVNx
bEFsbG93ZWQgfHwgIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7Ci0gICAgICAgIGUgPSBJTlZBTElE
X1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkg
PT0gZGF0YWJhc2UoKS0+ZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRo
cmVhZElEKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3RhdGVtZW50TXV0ZXgpOwor
ICAgIG1fc3RhdGVtZW50UXVldWUuY2xlYXIoKTsKKworICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0
aW9uKSB7CisgICAgICAgIC8vIEluIHRoZSBldmVudCB3ZSBnb3QgaGVyZSBiZWNhdXNlIG9mIGFu
IGludGVycnVwdGlvbiBvciBlcnJvciAoaS5lLiBpZgorICAgICAgICAvLyB0aGUgdHJhbnNhY3Rp
b24gaXMgaW4gcHJvZ3Jlc3MpLCB3ZSBzaG91bGQgcm9sbCBpdCBiYWNrIGhlcmUuIENsZWFyaW5n
CisgICAgICAgIC8vIG1fc3FsaXRlVHJhbnNhY3Rpb24gaW52b2tlcyBTUUxpdGVUcmFuc2FjdGlv
bidzIGRlc3RydWN0b3Igd2hpY2ggZG9lcworICAgICAgICAvLyBqdXN0IHRoYXQuIFdlIG1pZ2h0
IGFzIHdlbGwgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgYW5kIGZyZWUgdXAgaXRzCisgICAgICAg
IC8vIHJlc291cmNlcyBiZWNhdXNlIHdlJ3JlIGFscmVhZHkgdGVybWluYXRpbmcuCisgICAgICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICB9CiAKLSAgICBpbnQgcGVybWlzc2lv
bnMgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRXcml0ZU1hc2s7Ci0gICAgaWYgKCFtX2RhdGFi
YXNlLT5kYXRhYmFzZUNvbnRleHQoKS0+YWxsb3dEYXRhYmFzZUFjY2VzcygpKQotICAgICAgICBw
ZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6Ok5vQWNjZXNzTWFzazsKLSAgICBlbHNl
IGlmIChtX3JlYWRPbmx5KQotICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6
ZXI6OlJlYWRPbmx5TWFzazsKKyAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJh
c2UKKyAgICBpZiAobV9sb2NrQWNxdWlyZWQpCisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7CisKKyAgICAvLyBOb3cgdGhhdCB3
ZSdyZSBkb25lLCBicmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlIHRoYXQga2VlcHMgdXMgYWxpdmUu
CisgICAgLy8gU2VlIGNvbW1lbnQgYWJvdXQgdGhlIGxpZmUtY3ljbGUgYWJvdmUuCisgICAgbV9m
cm9udGVuZCA9IDA7CisKKyAgICAvLyBEbyBzb21lIGFnZ3Jlc2l2ZSBjbGVhbiB1cCBoZXJlIGV4
Y2VwdCBmb3IgbV9kYXRhYmFzZS4KKyAgICAvLworICAgIC8vIFdlIGNhbid0IGNsZWFyIG1fZGF0
YWJhc2UgaGVyZSBiZWNhdXNlIHRoZSBmcm9udGVuZCBtYXkgYXN5bmNocm9ub3VzbHkKKyAgICAv
LyBpbnZva2UgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpyZXF1ZXN0VHJhbnNpdFRvU3RhdGUoKSwg
YW5kIHRoYXQgZnVuY3Rpb24KKyAgICAvLyB1c2VzIG1fZGF0YWJhc2UgdG8gc2NoZWR1bGUgYSBz
dGF0ZSB0cmFuc2l0aW9uLiBUaGlzIG1heSBvY2N1ciBiZWNhdXNlCisgICAgLy8gdGhlIGZyb250
ZW5kIChiZWluZyBpbiBhbm90aGVyIHRocmVhZCkgbWF5IGFscmVhZHkgYmUgb24gdGhlIHdheSB0
bworICAgIC8vIHJlcXVlc3Rpbmcgb3VyIG5leHQgc3RhdGUgYmVmb3JlIGl0IGRldGVjdHMgYW4g
aW50ZXJydXB0aW9uLgorICAgIC8vCisgICAgLy8gVGhlcmUgaXMgbm8gaGFybSBpbiBsZXR0aW5n
IGl0IGZpbmlzaCBtYWtpbmcgdGhlIHJlcXVlc3QuIEl0J2xsIHNldAorICAgIC8vIG1fcmVxdWVz
dGVkU3RhdGUsIGJ1dCB3ZSB3b24ndCBleGVjdXRlIGEgdHJhbnNpdGlvbiB0byB0aGF0IHN0YXRl
IGJlY2F1c2UKKyAgICAvLyB3ZSd2ZSBhbHJlYWR5IHNodXQgZG93biB0aGUgdHJhbnNhY3Rpb24u
CiAKLSAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNy
ZWF0ZShtX2RhdGFiYXNlLmdldCgpLCBzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ss
IGNhbGxiYWNrRXJyb3IsIHBlcm1pc3Npb25zKTsKKyAgICBtX2N1cnJlbnRTdGF0ZW1lbnQgPSAw
OworICAgIG1fd3JhcHBlciA9IDA7CisgICAgbV90cmFuc2FjdGlvbkVycm9yID0gMDsKK30KIAot
ICAgIGlmIChtX2RhdGFiYXNlLT5kZWxldGVkKCkpCi0gICAgICAgIHN0YXRlbWVudC0+c2V0RGF0
YWJhc2VEZWxldGVkRXJyb3IobV9kYXRhYmFzZS5nZXQoKSk7CitQYXNzUmVmUHRyPFNRTEVycm9y
PiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnRyYW5zYWN0aW9uRXJyb3IoKQoreworICAgIHJldHVy
biBtX3RyYW5zYWN0aW9uRXJyb3I7Cit9CiAKLSAgICBlbnF1ZXVlU3RhdGVtZW50KHN0YXRlbWVu
dCk7Cit2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2V0U2hvdWxkUmV0cnlDdXJyZW50U3Rh
dGVtZW50KGJvb2wgc2hvdWxkUmV0cnkpCit7CisgICAgQVNTRVJUKCFtX3Nob3VsZFJldHJ5Q3Vy
cmVudFN0YXRlbWVudCk7CisgICAgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBzaG91
bGRSZXRyeTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmVucXVldWVTdGF0ZW1l
bnQoUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCkKK1NRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6U3RhdGVGdW5jdGlvbiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnN0YXRlRnVuY3Rpb25G
b3IoU1FMVHJhbnNhY3Rpb25TdGF0ZSBzdGF0ZSkKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9zdGF0ZW1lbnRNdXRleCk7Ci0gICAgbV9zdGF0ZW1lbnRRdWV1ZS5hcHBlbmQoc3RhdGVtZW50
KTsKKyAgICBzdGF0aWMgY29uc3QgU3RhdGVGdW5jdGlvbiBzdGF0ZUZ1bmN0aW9uc1tdID0gewor
ICAgICAgICAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjp1bnJlYWNoYWJsZVN0YXRlLCAgICAgICAg
ICAgIC8vIDAuIGVuZAorICAgICAgICAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjp1bnJlYWNoYWJs
ZVN0YXRlLCAgICAgICAgICAgIC8vIDEuIGlkbGUKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6YWNxdWlyZUxvY2ssICAgICAgICAgICAgICAgICAvLyAyLgorICAgICAgICAmU1FMVHJh
bnNhY3Rpb25CYWNrZW5kOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQsIC8vIDMuCisgICAg
ICAgICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJ1blN0YXRlbWVudHMsICAgICAgICAgICAgICAg
Ly8gNC4KKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cG9zdGZsaWdodEFuZENvbW1p
dCwgICAgICAgICAvLyA1LgorICAgICAgICAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVw
QW5kVGVybWluYXRlLCAgICAgICAgIC8vIDYuCisgICAgICAgICZTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaywgLy8gNy4KKyAgICAgICAg
JlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2VuZFRvRnJvbnRlbmRTdGF0ZSwgICAgICAgICAvLyA4
LiBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaworICAgICAgICAmU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjpzZW5kVG9Gcm9udGVuZFN0YXRlLCAgICAgICAgIC8vIDkuIGRlbGl2ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sKKyAgICAgICAgJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2VuZFRvRnJv
bnRlbmRTdGF0ZSwgICAgICAgICAvLyAxMC4gZGVsaXZlclN0YXRlbWVudENhbGxiYWNrCisgICAg
ICAgICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnNlbmRUb0Zyb250ZW5kU3RhdGUsICAgICAgICAg
Ly8gMTEuIGRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sKKyAgICAgICAgJlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6c2VuZFRvRnJvbnRlbmRTdGF0ZSAgICAgICAgICAvLyAxMi4gZGVsaXZlclN1
Y2Nlc3NDYWxsYmFjaworICAgIH07CisKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgp
IC8gc2l6ZW9mKHhbMF0pKQorICAgIEFTU0VSVChBUlJBWV9TSVpFKHN0YXRlRnVuY3Rpb25zKSA9
PSBzdGF0aWNfY2FzdDxpbnQ+KFNRTFRyYW5zYWN0aW9uU3RhdGU6Ok51bWJlck9mU3RhdGVzKSk7
CisgICAgQVNTRVJUKHN0YXRlIDwgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6TnVtYmVyT2ZTdGF0ZXMp
OworCisgICAgcmV0dXJuIHN0YXRlRnVuY3Rpb25zW3N0YXRpY19jYXN0PGludD4oc3RhdGUpXTsK
IH0KIAotI2lmICFMT0dfRElTQUJMRUQKLWNvbnN0IGNoYXIqIFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6ZGVidWdTdGVwTmFtZShTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OlRyYW5zYWN0aW9uU3RlcE1l
dGhvZCBzdGVwKQordm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmVucXVldWVTdGF0ZW1lbnQo
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCkKIHsKLSAgICBpZiAoc3RlcCA9PSAm
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaykKLSAgICAgICAgcmV0dXJuICJhY3F1
aXJlTG9jayI7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3BlblRy
YW5zYWN0aW9uQW5kUHJlZmxpZ2h0KQotICAgICAgICByZXR1cm4gIm9wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodCI7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVu
U3RhdGVtZW50cykKLSAgICAgICAgcmV0dXJuICJydW5TdGF0ZW1lbnRzIjsKLSAgICBpZiAoc3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KQotICAgICAg
ICByZXR1cm4gInBvc3RmbGlnaHRBbmRDb21taXQiOwotICAgIGlmIChzdGVwID09ICZTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaykKLSAg
ICAgICAgcmV0dXJuICJjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2siOwotICAg
IGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlvbkNh
bGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrIjsKLSAg
ICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKQotICAgICAgICByZXR1cm4gImRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2siOwotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJT
dGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyU3RhdGVtZW50Q2FsbGJh
Y2siOwotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJRdW90
YUluY3JlYXNlQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiZGVsaXZlclF1b3RhSW5jcmVhc2VD
YWxsYmFjayI7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZl
clN1Y2Nlc3NDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuICJkZWxpdmVyU3VjY2Vzc0NhbGxiYWNr
IjsKLSAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJT
dWNjZXNzQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiAiY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxi
YWNrIjsKLSAgICByZXR1cm4gIlVOS05PV04iOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0
YXRlbWVudE11dGV4KTsKKyAgICBtX3N0YXRlbWVudFF1ZXVlLmFwcGVuZChzdGF0ZW1lbnQpOwog
fQotI2VuZGlmCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjaGVja0FuZEhhbmRsZUNs
b3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSgpCiB7CkBAIC0yNjQsMTggKzQyMyw2IEBAIHZvaWQg
U1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpjaGVja0FuZEhhbmQKIAogICAgIC8vIElmIHRoZSBkYXRh
YmFzZSB3YXMgc3RvcHBlZCwgZG9uJ3QgZG8gYW55dGhpbmcgYW5kIGNhbmNlbCBxdWV1ZWQgd29y
awogICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2Ugd2FzIHN0b3BwZWQgb3IgaW50ZXJydXB0
ZWQgLSBjYW5jZWxsaW5nIHdvcmsgZm9yIHRoaXMgdHJhbnNhY3Rpb24iKTsKLSAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9zdGF0ZW1lbnRNdXRleCk7Ci0gICAgbV9zdGF0ZW1lbnRRdWV1ZS5jbGVh
cigpOwotICAgIG1fbmV4dFN0ZXAgPSAwOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgdW5uZWVkZWQg
Y2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fY2FsbGJhY2tXcmFw
cGVyLmNsZWFyKCk7Ci0gICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7Ci0gICAg
bV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwotCi0gICAgLy8gVGhlIG5leHQgc3RlcHMg
c2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgd2UncmUgb24gdGhlIERCIHRocmVhZC4KLSAgICBp
ZiAoY3VycmVudFRocmVhZCgpICE9IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKQotICAgICAgICByZXR1cm47CiAKICAgICAvLyBU
aGUgY3VycmVudCBTUUxpdGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHN0b3BwZWQsIGFzIHdlbGwK
ICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgewpAQCAtMjgzLDcxICs0MzAsNjEgQEAgdm9p
ZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNoZWNrQW5kSGFuZAogICAgICAgICBtX3NxbGl0ZVRy
YW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgfQogCi0gICAgaWYgKG1fbG9ja0FjcXVpcmVkKQotICAg
ICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRo
aXMpOwotfQotCi0KLWJvb2wgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwZXJmb3JtTmV4dFN0ZXAo
KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiU3RlcCAlc1xuIiwgZGVidWdTdGVwTmFtZShtX25l
eHRTdGVwKSk7Ci0KLSAgICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjphY3F1aXJlTG9jawotICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodAotICAgICAgICB8fCBtX25leHRT
dGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnJ1blN0YXRlbWVudHMKLSAgICAgICAgfHwg
bV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0
Ci0gICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51
cEFmdGVyU3VjY2Vzc0NhbGxiYWNrCi0gICAgICAgIHx8IG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKTsKKyAg
ICAvLyBUZXJtaW5hdGUgdGhlIGZyb250ZW5kIHN0YXRlIG1hY2hpbmUuIFRoaXMgYWxzbyBnZXRz
IHRoZSBmcm9udGVuZCB0bworICAgIC8vIGNhbGwgY2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVy
cnVwdGVkRGF0YWJhc2UoKSBhbmQgY2xlYXIgaXRzIHdyYXBwZXJzCisgICAgLy8gaWYgbmVlZGVk
LgorICAgIG1fZnJvbnRlbmQtPnJlcXVlc3RUcmFuc2l0VG9TdGF0ZShTUUxUcmFuc2FjdGlvblN0
YXRlOjpFbmQpOworCisgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGVuZCBzdGF0ZSB0byBhYm9ydCwg
Y2xlYW4gdXAsIGFuZCBlbmQgdGhlIHRyYW5zYWN0aW9uLgorICAgIGRvQ2xlYW51cCgpOworICAg
IG1fbmV4dFN0YXRlID0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RW5kOworfQorCit2b2lkIFNRTFRy
YW5zYWN0aW9uQmFja2VuZDo6cGVyZm9ybU5leHRTdGVwKCkKK3sKKyAgICBMT0coU3RvcmFnZUFQ
SSwgIlN0YXRlICVzXG4iLCBuYW1lRm9yU1FMVHJhbnNhY3Rpb25TdGF0ZShtX25leHRTdGF0ZSkp
OworCisgICAgc2V0U3RhdGVUb1JlcXVlc3RlZFN0YXRlKCk7CisgICAgQVNTRVJUKG1fbmV4dFN0
YXRlID09IFNRTFRyYW5zYWN0aW9uU3RhdGU6OkFjcXVpcmVMb2NrCisgICAgICAgIHx8IG1fbmV4
dFN0YXRlID09IFNRTFRyYW5zYWN0aW9uU3RhdGU6Ok9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdo
dAorICAgICAgICB8fCBtX25leHRTdGF0ZSA9PSBTUUxUcmFuc2FjdGlvblN0YXRlOjpSdW5TdGF0
ZW1lbnRzCisgICAgICAgIHx8IG1fbmV4dFN0YXRlID09IFNRTFRyYW5zYWN0aW9uU3RhdGU6OlBv
c3RmbGlnaHRBbmRDb21taXQKKyAgICAgICAgfHwgbV9uZXh0U3RhdGUgPT0gU1FMVHJhbnNhY3Rp
b25TdGF0ZTo6Q2xlYW51cEFuZFRlcm1pbmF0ZQorICAgICAgICB8fCBtX25leHRTdGF0ZSA9PSBT
UUxUcmFuc2FjdGlvblN0YXRlOjpDbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sp
OwogCiAgICAgY2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVycnVwdGVkRGF0YWJhc2UoKTsKLQot
ICAgIGlmIChtX25leHRTdGVwKQotICAgICAgICAodGhpcy0+Km1fbmV4dFN0ZXApKCk7Ci0KLSAg
ICAvLyBJZiB0aGVyZSBpcyBubyBuZXh0U3RlcCBhZnRlciBwZXJmb3JtaW5nIHRoZSBhYm92ZSBz
dGVwLCB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUKLSAgICByZXR1cm4gIW1fbmV4dFN0ZXA7
Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpwZXJmb3JtUGVuZGluZ0NhbGxiYWNr
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNhbGxiYWNrICVzXG4iLCBkZWJ1Z1N0ZXBOYW1l
KG1fbmV4dFN0ZXApKTsKLQotICAgIEFTU0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrCi0gICAgICAgIHx8IG1fbmV4dFN0
ZXAgPT0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjawotICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRl
bGl2ZXJTdGF0ZW1lbnRDYWxsYmFjawotICAgICAgICB8fCBtX25leHRTdGVwID09ICZTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sKLSAgICAgICAgfHwg
bV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3VjY2Vzc0NhbGxi
YWNrKTsKLQotICAgIGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKCk7
Ci0KLSAgICBpZiAobV9uZXh0U3RlcCkKLSAgICAgICAgKHRoaXMtPiptX25leHRTdGVwKSgpOwor
ICAgIHJ1blN0YXRlTWFjaGluZSgpOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpCiB7CiAgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBkYXRhYmFzZSgpLT5kYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJl
YWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAKLSAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgaW4g
cHJvZ3Jlc3MsIHdlIHNob3VsZCByb2xsIGl0IGJhY2sgaGVyZSwgc2luY2UgdGhpcyBpcyBvdXIg
bGFzdAotICAgIC8vIG9wb3J0dW5pdHkgdG8gZG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyB0
cmFuc2FjdGlvbiBvbiB0aGUgREIgdGhyZWFkLgotICAgIC8vIENsZWFyaW5nIG1fc3FsaXRlVHJh
bnNhY3Rpb24gaW52b2tlcyBTUUxpdGVUcmFuc2FjdGlvbidzIGRlc3RydWN0b3Igd2hpY2ggZG9l
cyBqdXN0IHRoYXQuCi0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAgIC8vIElm
IHRoZSB0cmFuc2FjdGlvbiBpcyBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHJvbGwgaXQgYmFjayBo
ZXJlLCBzaW5jZSB0aGlzCisgICAgLy8gaXMgb3VyIGxhc3Qgb3Bwb3J0dW5pdHkgdG8gZG8gc29t
ZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUKKyAgICAvLyBEQiB0aHJl
YWQuIEFtb25nc3Qgb3RoZXIgd29yaywgZG9DbGVhbnVwKCkgd2lsbCBjbGVhciBtX3NxbGl0ZVRy
YW5zYWN0aW9uCisgICAgLy8gd2hpY2ggaW52b2tlcyBTUUxpdGVUcmFuc2FjdGlvbidzIGRlc3Ry
dWN0b3IsIHdoaWNoIHdpbGwgZG8gdGhlIHJvbGwgYmFjaworICAgIC8vIGlmIG5lY2Vzc2FyeS4K
KworICAgIC8vIE5vdGU6IGlmIGRvQ2xlYW51cCgpIGhhcyBhbHJlYWR5IGJlZW4gaW52b2tlZCwg
dGhlbiBtX2Zyb250ZW5kIHdvdWxkIGhhdmUKKyAgICAvLyBiZWVuIG51bGxpZmllZC4KKyAgICBp
ZiAobV9mcm9udGVuZCkKKyAgICAgICAgZG9DbGVhbnVwKCk7CiB9CiAKLXZvaWQgU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kOjphY3F1aXJlTG9jaygpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6YWNxdWlyZUxvY2soKQogewogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhpcyk7CisgICAgcmV0dXJuIFNRTFRyYW5z
YWN0aW9uU3RhdGU6OklkbGU7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpsb2Nr
QWNxdWlyZWQoKQogewogICAgIG1fbG9ja0FjcXVpcmVkID0gdHJ1ZTsKLSAgICBtX25leHRTdGVw
ID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0Owot
ICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGln
aHQgaW1tZWRpYXRlbHkgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICBtX2RhdGFi
YXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKKyAgICByZXF1ZXN0VHJh
bnNpdFRvU3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZTo6T3BlblRyYW5zYWN0aW9uQW5kUHJlZmxp
Z2h0KTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodCgpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2Ut
PnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIEFTU0VSVCht
X2xvY2tBY3F1aXJlZCk7CkBAIC0zNTUsMTEgKzQ5MiwxMCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6b3BlblRyYW5zYWN0CiAgICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuaW5nIGFuZCBw
cmVmbGlnaHRpbmcgdHJhbnNhY3Rpb24gJXAiLCB0aGlzKTsKIAogICAgIC8vIElmIHRoZSBkYXRh
YmFzZSB3YXMgZGVsZXRlZCwganVtcCB0byB0aGUgZXJyb3IgY2FsbGJhY2sKLSAgICBpZiAobV9k
YXRhYmFzZS0+ZGVsZXRlZCgpKSB7CisgICAgaWYgKERhdGFiYXNlOjpmcm9tKG1fZGF0YWJhc2Uu
Z2V0KCkpLT5kZWxldGVkKCkpIHsKICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFu
c2FjdGlvblJlc3VsdCgxLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwogICAgICAgICBtX3Ry
YW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwg
InVuYWJsZSB0byBvcGVuIGEgdHJhbnNhY3Rpb24sIGJlY2F1c2UgdGhlIHVzZXIgZGVsZXRlZCB0
aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG5leHRTdGF0ZUZvclRyYW5zYWN0aW9uRXJy
b3IoKTsKICAgICB9CiAKICAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9yIHRoaXMgdHJh
bnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seQpAQCAtMzc0LDE1
ICs1MTAsMTQgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om9wZW5UcmFuc2FjdAogICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7CiAgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0
aG9yaXplcigpOwogCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgMSsyIC0gT3BlbiBhIHRyYW5z
YWN0aW9uIHRvIHRoZSBkYXRhYmFzZSwganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYg
dGhhdCBmYWlscworICAgIC8vIFNwZWMgNC4zLjIuMSsyOiBPcGVuIGEgdHJhbnNhY3Rpb24gdG8g
dGhlIGRhdGFiYXNlLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGF0IGZhaWxz
CiAgICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKICAgICAgICAg
QVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVz
cygpKTsKICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0U3RhcnRUcmFuc2FjdGlvblJlc3VsdCgy
LCBTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxh
c3RFcnJvcigpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0
ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidW5hYmxlIHRvIGJlZ2luIHRyYW5zYWN0aW9uIiwK
ICAgICAgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBtX3Nx
bGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3Io
ZmFsc2UpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBuZXh0U3RhdGVGb3JUcmFu
c2FjdGlvbkVycm9yKCk7CiAgICAgfQogCiAgICAgLy8gTm90ZTogV2UgaW50ZW50aW9uYWxseSBy
ZXRyaWV2ZSB0aGUgYWN0dWFsIHZlcnNpb24gZXZlbiB3aXRoIGFuIGVtcHR5IGV4cGVjdGVkIHZl
cnNpb24uCkBAIC0zOTYsMTMgKzUzMSwxMiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
b3BlblRyYW5zYWN0CiAgICAgICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7CiAg
ICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICAgICAgbV9kYXRhYmFzZS0+
ZW5hYmxlQXV0aG9yaXplcigpOwotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNl
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbmV4dFN0YXRlRm9yVHJhbnNhY3Rp
b25FcnJvcigpOwogICAgIH0KICAgICBtX2hhc1ZlcnNpb25NaXNtYXRjaCA9ICFtX2RhdGFiYXNl
LT5leHBlY3RlZFZlcnNpb24oKS5pc0VtcHR5KCkgJiYgKG1fZGF0YWJhc2UtPmV4cGVjdGVkVmVy
c2lvbigpICE9IGFjdHVhbFZlcnNpb24pOwogCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgMyAt
IFBlZm9ybSBwcmVmbGlnaHQgc3RlcHMsIGp1bXBpbmcgdG8gdGhlIGVycm9yIGNhbGxiYWNrIGlm
IHRoZXkgZmFpbAotICAgIGlmIChtX3dyYXBwZXIgJiYgIW1fd3JhcHBlci0+cGVyZm9ybVByZWZs
aWdodChTUUxUcmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSkpIHsKKyAgICAvLyBTcGVjIDQuMy4yLjM6
IFBlcmZvcm0gcHJlZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBp
ZiB0aGV5IGZhaWwKKyAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZvcm1QcmVm
bGlnaHQodGhpcykpIHsKICAgICAgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsK
ICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwogICAgICAgICBtX2RhdGFiYXNl
LT5lbmFibGVBdXRob3JpemVyKCk7CkBAIC00MTEsNDggKzU0NSwyMSBAQCB2b2lkIFNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6b3BlblRyYW5zYWN0CiAgICAgICAgICAgICBtX2RhdGFiYXNlLT5yZXBv
cnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDQsIFNRTEVycm9yOjpVTktOT1dOX0VSUiwgMCk7CiAg
ICAgICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpVTktOT1dOX0VSUiwgInVua25vd24gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5zYWN0aW9u
IHByZWZsaWdodCIpOwogICAgICAgICB9Ci0gICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3Io
ZmFsc2UpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBuZXh0U3RhdGVGb3JUcmFu
c2FjdGlvbkVycm9yKCk7CiAgICAgfQogCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA0IC0gSW52
b2tlIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3aXRoIHRoZSBuZXcgU1FMVHJhbnNhY3Rpb24g
b2JqZWN0Ci0gICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJU
cmFuc2FjdGlvbkNhbGxiYWNrOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxp
dmVyVHJhbnNhY3Rpb25DYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwotICAg
IG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbjo6
ZnJvbSh0aGlzKSk7Ci19CisgICAgLy8gU3BlYyA0LjMuMi40OiBJbnZva2UgdGhlIHRyYW5zYWN0
aW9uIGNhbGxiYWNrIHdpdGggdGhlIG5ldyBTUUxUcmFuc2FjdGlvbiBvYmplY3QKKyAgICBpZiAo
bV9oYXNDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkRlbGl2
ZXJUcmFuc2FjdGlvbkNhbGxiYWNrOwogCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVs
aXZlclRyYW5zYWN0aW9uQ2FsbGJhY2soKQotewotICAgIGJvb2wgc2hvdWxkRGVsaXZlckVycm9y
Q2FsbGJhY2sgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBj
YWxsYmFjayA9IG1fY2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChjYWxsYmFjaykg
ewotICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgc2hvdWxkRGVs
aXZlckVycm9yQ2FsbGJhY2sgPSAhY2FsbGJhY2stPmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9u
Ojpmcm9tKHRoaXMpKTsKLSAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOwotICAg
IH0KLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNSAtIElmIHRoZSB0cmFuc2FjdGlvbiBjYWxs
YmFjayB3YXMgbnVsbCBvciByYWlzZWQgYW4gZXhjZXB0aW9uLCBqdW1wIHRvIHRoZSBlcnJvciBj
YWxsYmFjawotICAgIGlmIChzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjaykgewotICAgICAgICBt
X2RhdGFiYXNlLT5yZXBvcnRTdGFydFRyYW5zYWN0aW9uUmVzdWx0KDUsIFNRTEVycm9yOjpVTktO
T1dOX0VSUiwgMCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgd2Fz
IG51bGwgb3IgdGhyZXcgYW4gZXhjZXB0aW9uIik7Ci0gICAgICAgIGRlbGl2ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2soKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2NoZWR1bGVUb1J1blN0YXRl
bWVudHMoKTsKLQotICAgIG1fZGF0YWJhc2UtPnJlcG9ydFN0YXJ0VHJhbnNhY3Rpb25SZXN1bHQo
MCwgLTEsIDApOyAvLyBPSwotfQotCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1
bGVUb1J1blN0YXRlbWVudHMoKQotewotICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjpydW5TdGF0ZW1lbnRzOwotICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBy
dW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFz
ZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7CisgICAgLy8gSWYgd2UgaGF2ZSBubyBj
YWxsYmFjayB0byBtYWtlLCBza2lwIHBhc3MgdG8gdGhlIHN0YXRlIGFmdGVyOgorICAgIHJldHVy
biBTUUxUcmFuc2FjdGlvblN0YXRlOjpSdW5TdGF0ZW1lbnRzOwogfQogCi12b2lkIFNRTFRyYW5z
YWN0aW9uQmFja2VuZDo6cnVuU3RhdGVtZW50cygpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRy
YW5zYWN0aW9uQmFja2VuZDo6cnVuU3RhdGVtZW50cygpCiB7CiAgICAgQVNTRVJUKG1fbG9ja0Fj
cXVpcmVkKTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIG5leHRTdGF0ZTsKIAogICAgIC8vIElm
IHRoZXJlIGlzIGEgc2VyaWVzIG9mIHN0YXRlbWVudHMgcXVldWVkIHVwIHRoYXQgYXJlIGFsbCBz
dWNjZXNzZnVsIGFuZCBoYXZlIG5vIGFzc29jaWF0ZWQKICAgICAvLyBTUUxTdGF0ZW1lbnRDYWxs
YmFjayBvYmplY3RzLCB0aGVuIHdlIGNhbiBidXJuIHRocm91Z2ggdGhlIHF1ZXVlCkBAIC00NzEs
MjAgKzU3OCwxNiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVuU3RhdGVtZW50CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBy
dW4sIGZhaWxlZCBkdWUgdG8gcXVvdGEgY29uc3RyYWludHMsIGFuZCB3ZSdyZSBub3QgcmV0cnlp
bmcgaXQsCiAgICAgICAgICAgICAvLyB0aGF0IG1lYW5zIGl0IGVuZGVkIGluIGFuIGVycm9yLiBI
YW5kbGUgaXQgbm93CiAgICAgICAgICAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50ICYmIG1fY3Vy
cmVudFN0YXRlbWVudC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkgewotICAgICAg
ICAgICAgICAgIGhhbmRsZUN1cnJlbnRTdGF0ZW1lbnRFcnJvcigpOwotICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U3RhdGVGb3JDdXJyZW50U3RhdGVt
ZW50RXJyb3IoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBh
ZHZhbmNlIHRvIHRoZSBuZXh0IHN0YXRlbWVudAogICAgICAgICAgICAgZ2V0TmV4dFN0YXRlbWVu
dCgpOwogICAgICAgICB9Ci0gICAgfSB3aGlsZSAocnVuQ3VycmVudFN0YXRlbWVudCgpKTsKKyAg
ICAgICAgbmV4dFN0YXRlID0gcnVuQ3VycmVudFN0YXRlbWVudEFuZEdldE5leHRTdGF0ZSgpOwor
ICAgIH0gd2hpbGUgKG5leHRTdGF0ZSA9PSBTUUxUcmFuc2FjdGlvblN0YXRlOjpSdW5TdGF0ZW1l
bnRzKTsKIAotICAgIC8vIElmIHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSByZXR1cm5lZCBmYWxzZSwg
dGhhdCBtZWFucyBlaXRoZXIgdGhlcmUgd2FzIG5vIGN1cnJlbnQgc3RhdGVtZW50IHRvIHJ1biwK
LSAgICAvLyBvciB0aGUgY3VycmVudCBzdGF0ZW1lbnQgcmVxdWlyZXMgYSBjYWxsYmFjayB0byBj
b21wbGV0ZS4gSW4gdGhlIGxhdGVyIGNhc2UsIGl0IGFsc28gc2NoZWR1bGVkCi0gICAgLy8gdGhl
IGNhbGxiYWNrIG9yIHBlcmZvcm1lZCBhbnkgb3RoZXIgYWRkaXRpb25hbCB3b3JrIHNvIHdlIGNh
biByZXR1cm4KLSAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKLSAgICAgICAgcG9zdGZsaWdo
dEFuZENvbW1pdCgpOworICAgIHJldHVybiBuZXh0U3RhdGU7CiB9CiAKIHZvaWQgU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kOjpnZXROZXh0U3RhdGVtZW50KCkKQEAgLTQ5NiwxMDkgKzU5OSw3MiBAQCB2
b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Z2V0TmV4dFN0YXRlCiAgICAgICAgIG1fY3VycmVu
dFN0YXRlbWVudCA9IG1fc3RhdGVtZW50UXVldWUudGFrZUZpcnN0KCk7CiB9CiAKLWJvb2wgU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3RhdGVtZW50KCkKK1NRTFRyYW5zYWN0aW9u
U3RhdGUgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpydW5DdXJyZW50U3RhdGVtZW50QW5kR2V0TmV4
dFN0YXRlKCkKIHsKLSAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghbV9jdXJyZW50U3RhdGVtZW50KSB7CisgICAgICAgIC8vIE5vIG1v
cmUgc3RhdGVtZW50cyB0byBydW4uIFNvIG1vdmUgb24gdG8gdGhlIG5leHQgc3RhdGUuCisgICAg
ICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpQb3N0ZmxpZ2h0QW5kQ29tbWl0OworICAg
IH0KIAogICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOwogCiAgICAgaWYgKG1faGFz
VmVyc2lvbk1pc21hdGNoKQotICAgICAgICBtX2N1cnJlbnRTdGF0ZW1lbnQtPnNldFZlcnNpb25N
aXNtYXRjaGVkRXJyb3IobV9kYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIG1fY3VycmVudFN0YXRl
bWVudC0+c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcihEYXRhYmFzZTo6ZnJvbShtX2RhdGFiYXNl
LmdldCgpKSk7CiAKLSAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5leGVjdXRlKG1fZGF0YWJh
c2UuZ2V0KCkpKSB7CisgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+ZXhlY3V0ZShEYXRhYmFz
ZTo6ZnJvbShtX2RhdGFiYXNlLmdldCgpKSkpIHsKICAgICAgICAgaWYgKG1fZGF0YWJhc2UtPmxh
c3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKSkgewogICAgICAgICAgICAgLy8gRmxhZyB0aGlzIHRy
YW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRoZSBkYXRhYmFzZSBmb3IgbGF0ZXIgZGVsZWdh
dGUgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwog
ICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGZpbGUg
Zm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCi0gICAgICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOworICAgICAg
ICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhlY3V0ZVN0YXRlbWVu
dChEYXRhYmFzZTo6ZnJvbShkYXRhYmFzZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
bV9jdXJyZW50U3RhdGVtZW50LT5oYXNTdGF0ZW1lbnRDYWxsYmFjaygpKSB7Ci0gICAgICAgICAg
ICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN0YXRlbWVudENh
bGxiYWNrOwotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJT
dGF0ZW1lbnRDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwotICAgICAgICAg
ICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9u
Ojpmcm9tKHRoaXMpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUs
IHRoZW4gdGhlIHN0YXRlbWVudCBkb2Vzbid0IGhhdmUgYSBjYWxsYmFjayB0byBpbnZva2UuCisg
ICAgICAgIC8vIFdlIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlbWVudC4gSGVuY2UsIHN0
YXkgaW4gdGhpcyBzdGF0ZS4KKyAgICAgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OlJ1
blN0YXRlbWVudHM7CiAgICAgfQogCiAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+bGFzdEV4
ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkgewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRy
YW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjazsKLSAgICAgICAg
TE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2sg
Zm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1
bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVs
aXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjazsKICAgICB9CiAKLSAgICBoYW5kbGVDdXJyZW50U3Rh
dGVtZW50RXJyb3IoKTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbmV4dFN0YXRl
Rm9yQ3VycmVudFN0YXRlbWVudEVycm9yKCk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOjpoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3IoKQorU1FMVHJhbnNhY3Rpb25TdGF0ZSBT
UUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om5leHRTdGF0ZUZvckN1cnJlbnRTdGF0ZW1lbnRFcnJvcigp
CiB7Ci0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcHMgNi5lcnJvciAtIENhbGwgdGhlIHN0YXRlbWVu
dCdzIGVycm9yIGNhbGxiYWNrLCBidXQgaWYgdGhlcmUgd2FzIG5vIGVycm9yIGNhbGxiYWNrLAor
ICAgIC8vIFNwZWMgNC4zLjIuNi42OiBlcnJvciAtIENhbGwgdGhlIHN0YXRlbWVudCdzIGVycm9y
IGNhbGxiYWNrLCBidXQgaWYgdGhlcmUgd2FzIG5vIGVycm9yIGNhbGxiYWNrLAogICAgIC8vIG9y
IHRoZSB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2ssIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9u
IGVycm9yIGNhbGxiYWNrCi0gICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+aGFzU3RhdGVtZW50
RXJyb3JDYWxsYmFjaygpICYmICFtX3NxbGl0ZVRyYW5zYWN0aW9uLT53YXNSb2xsZWRCYWNrQnlT
cWxpdGUoKSkgewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrOwotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVk
dWxpbmcgZGVsaXZlclN0YXRlbWVudENhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhp
cyk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxU
cmFuc2FjdGlvbjo6ZnJvbSh0aGlzKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV90cmFuc2Fj
dGlvbkVycm9yID0gbV9jdXJyZW50U3RhdGVtZW50LT5zcWxFcnJvcigpOwotICAgICAgICBpZiAo
IW1fdHJhbnNhY3Rpb25FcnJvcikgewotICAgICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29t
bWl0VHJhbnNhY3Rpb25SZXN1bHQoMSwgU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgMCk7Ci0gICAg
ICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpE
QVRBQkFTRV9FUlIsICJ0aGUgc3RhdGVtZW50IGZhaWxlZCB0byBleGVjdXRlIik7Ci0gICAgICAg
IH0KLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAgfQotfQotCi12
b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrKCkKLXsK
LSAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKLQotICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgNi42IGFuZCA2LjMoZXJyb3IpIC0gSWYgdGhlIHN0YXRlbWVudCBjYWxsYmFjayB3ZW50IHdy
b25nLCBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjawotICAgIC8vIE90aGVy
d2lzZSwgY29udGludWUgdG8gbG9vcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgcXVldWUKLSAgICBt
X2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IG1fY3VycmVudFN0
YXRlbWVudC0+cGVyZm9ybUNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKLSAg
ICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7Ci0KLSAgICBpZiAocmVzdWx0KSB7Ci0gICAg
ICAgIG1fZGF0YWJhc2UtPnJlcG9ydENvbW1pdFRyYW5zYWN0aW9uUmVzdWx0KDIsIFNRTEVycm9y
OjpVTktOT1dOX0VSUiwgMCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBjYWxsYmFjayBy
YWlzZWQgYW4gZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJl
dHVybiBmYWxzZSIpOwotICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKHRydWUpOwotICAg
IH0gZWxzZQotICAgICAgICBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOwotfQorICAgIGlmICht
X2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSAmJiAhbV9zcWxp
dGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpCisgICAgICAgIHJldHVybiBT
UUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7CiAKLXZvaWQgU1FM
VHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKCkKLXsKLSAg
ICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKLSAgICBBU1NFUlQoIW1fc2hvdWxkUmV0cnlD
dXJyZW50U3RhdGVtZW50KTsKLQotICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0g
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJhc2Uo
KSk7Ci0KLSAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cnVuU3RhdGVt
ZW50czsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3RhdGVtZW50cyBmb3Ig
dHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNh
Y3Rpb25TdGVwKHRoaXMpOworICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fY3VycmVudFN0YXRl
bWVudC0+c3FsRXJyb3IoKTsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb25FcnJvcikgeworICAgICAg
ICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2FjdGlvblJlc3VsdCgxLCBTUUxFcnJvcjo6
REFUQUJBU0VfRVJSLCAwKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6
OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAidGhlIHN0YXRlbWVudCBmYWlsZWQgdG8g
ZXhlY3V0ZSIpOworICAgIH0KKyAgICByZXR1cm4gbmV4dFN0YXRlRm9yVHJhbnNhY3Rpb25FcnJv
cigpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cG9zdGZsaWdodEFuZENvbW1p
dCgpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6cG9zdGZsaWdo
dEFuZENvbW1pdCgpCiB7CiAgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKIAotICAgIC8vIFRy
YW5zYWN0aW9uIFN0ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRo
ZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZhaWwKLSAgICBpZiAobV93cmFwcGVyICYmICFtX3dy
YXBwZXItPnBlcmZvcm1Qb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKSkgewor
ICAgIC8vIFNwZWMgNC4zLjIuNzogUGVyZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRv
IHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZhaWwuCisgICAgaWYgKG1fd3JhcHBlciAmJiAh
bV93cmFwcGVyLT5wZXJmb3JtUG9zdGZsaWdodCh0aGlzKSkgewogICAgICAgICBtX3RyYW5zYWN0
aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVycm9yKCk7CiAgICAgICAgIGlmICghbV90cmFuc2Fj
dGlvbkVycm9yKSB7CiAgICAgICAgICAgICBtX2RhdGFiYXNlLT5yZXBvcnRDb21taXRUcmFuc2Fj
dGlvblJlc3VsdCgzLCBTUUxFcnJvcjo6VU5LTk9XTl9FUlIsIDApOwogICAgICAgICAgICAgbV90
cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIs
ICJ1bmtub3duIGVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc2FjdGlvbiBwb3N0ZmxpZ2h0Iik7
CiAgICAgICAgIH0KLSAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG5leHRTdGF0ZUZvclRyYW5zYWN0aW9uRXJyb3Io
KTsKICAgICB9CiAKLSAgICAvLyBUcmFuc2FjdG9uIFN0ZXAgOCs5IC0gQ29tbWl0IHRoZSB0cmFu
c2FjdGlvbiwganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscworICAg
IC8vIFNwZWMgNC4zLjIuNzogQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiwganVtcGluZyB0byB0aGUg
ZXJyb3IgY2FsbGJhY2sgaWYgdGhhdCBmYWlscy4KICAgICBBU1NFUlQobV9zcWxpdGVUcmFuc2Fj
dGlvbik7CiAKICAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOwpAQCAtNjA4LDEz
ICs2NzQsMTEgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnBvc3RmbGlnaHRBbgogICAg
IC8vIElmIHRoZSBjb21taXQgZmFpbGVkLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBzdGlsbCBiZSBt
YXJrZWQgYXMgImluIHByb2dyZXNzIgogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblBy
b2dyZXNzKCkpIHsKICAgICAgICAgaWYgKG1fd3JhcHBlcikKLSAgICAgICAgICAgIG1fd3JhcHBl
ci0+aGFuZGxlQ29tbWl0RmFpbGVkQWZ0ZXJQb3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uOjpmcm9t
KHRoaXMpKTsKLSAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7CisgICAg
ICAgICAgICBtX3dyYXBwZXItPmhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodCh0aGlz
KTsKICAgICAgICAgbV9kYXRhYmFzZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoNCwg
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0
RXJyb3IoKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgInVuYWJsZSB0byBjb21taXQgdHJhbnNhY3Rpb24iLAog
ICAgICAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3IoKSwgbV9k
YXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGhhbmRs
ZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBuZXh0U3RhdGVGb3JUcmFuc2FjdGlvbkVycm9yKCk7CiAgICAgfQogCiAgICAgbV9kYXRhYmFz
ZS0+cmVwb3J0Q29tbWl0VHJhbnNhY3Rpb25SZXN1bHQoMCwgLTEsIDApOyAvLyBPSwpAQCAtNjI3
LDkyICs2OTEsNDIgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnBvc3RmbGlnaHRBbgog
ICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCiAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ2xpZW50KCktPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7CiAKLSAg
ICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVu
Y2UgY3ljbGVzLgotICAgIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKLQotICAgIC8v
IFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2ssIGlmIHRoZXJl
IGlzIG9uZQotICAgIGlmIChtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKSkg
ewotICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZGVsaXZlclN1
Y2Nlc3NDYWxsYmFjazsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2
ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAg
bV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uOjpm
cm9tKHRoaXMpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxi
YWNrKCk7Ci19Ci0KLXZvaWQgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkZWxpdmVyU3VjY2Vzc0Nh
bGxiYWNrKCkKLXsKLSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNz
IGNhbGxiYWNrCi0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gbV9z
dWNjZXNzQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sp
Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKLQotICAgIC8vIFNjaGVk
dWxlIGEgInBvc3Qtc3VjY2VzcyBjYWxsYmFjayIgc3RlcCB0byByZXR1cm4gY29udHJvbCB0byB0
aGUgZGF0YWJhc2UgdGhyZWFkIGluIGNhc2UgdGhlcmUKLSAgICAvLyBhcmUgZnVydGhlciB0cmFu
c2FjdGlvbnMgcXVldWVkIHVwIGZvciB0aGlzIERhdGFiYXNlCi0gICAgbV9uZXh0U3RlcCA9ICZT
UUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjazsKLSAgICBM
T0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIGZv
ciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFu
c2FjdGlvblN0ZXAodGhpcyk7CisgICAgLy8gU3BlYyA0LjMuMi44OiBEZWxpdmVyIHN1Y2Nlc3Mg
Y2FsbGJhY2ssIGlmIHRoZXJlIGlzIG9uZS4KKyAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0
ZTo6RGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ6OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjaygpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNR
TFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51cEFuZFRlcm1pbmF0ZSgpCiB7CiAgICAgQVNTRVJU
KG1fbG9ja0FjcXVpcmVkKTsKIAotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTEgLSBFbmQgdHJh
bnNhY3Rpb24gc3RlcHMKLSAgICAvLyBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKKyAgICAvLyBTcGVj
IDQuMy4yLjk6IEVuZCB0cmFuc2FjdGlvbiBzdGVwcy4gVGhlcmUgaXMgbm8gbmV4dCBzdGVwLgog
ICAgIExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGVcbiIsIHRoaXMp
OwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbklu
UHJvZ3Jlc3MoKSk7Ci0gICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgIG1fbmV4
dFN0ZXAgPSAwOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCi0g
ICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlz
KTsKLX0KLQotdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmhhbmRsZVRyYW5zYWN0aW9uRXJy
b3IoYm9vbCBpbkNhbGxiYWNrKQotewotICAgIGlmIChtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLmhh
c0NhbGxiYWNrKCkpIHsKLSAgICAgICAgaWYgKGluQ2FsbGJhY2spCi0gICAgICAgICAgICBkZWxp
dmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlbGl2ZXJUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2s7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcg
ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRo
aXMpOwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNr
KFNRTFRyYW5zYWN0aW9uOjpmcm9tKHRoaXMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgLy8gTm8gZXJyb3IgY2FsbGJhY2ssIHNvIGZhc3QtZm9yd2FyZCB0bzoK
LSAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gUm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLgot
ICAgIGlmIChpbkNhbGxiYWNrKSB7Ci0gICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rp
b25CYWNrZW5kOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7Ci0gICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKLSAgICAgICAgbV9kYXRhYmFz
ZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNs
ZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOworICAgIGRvQ2xlYW51cCgpOwor
ICAgIG1fZGF0YWJhc2UtPmluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIHJl
dHVybiBTUUxUcmFuc2FjdGlvblN0YXRlOjpFbmQ7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKK1NRTFRyYW5zYWN0aW9u
U3RhdGUgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpuZXh0U3RhdGVGb3JUcmFuc2FjdGlvbkVycm9y
KCkKIHsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkVycm9yKTsKKyAgICBpZiAobV9oYXNFcnJv
ckNhbGxiYWNrKQorICAgICAgICByZXR1cm4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIAotICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBJ
ZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0Ci0gICAgLy8gZXJy
b3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgotICAgIFJlZlB0cjxTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tX
cmFwcGVyLnVud3JhcCgpOwotICAgIGlmIChlcnJvckNhbGxiYWNrKQotICAgICAgICBlcnJvckNh
bGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwotCi0gICAgbV9u
ZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjazsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7
Ci0gICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7CisgICAgLy8g
Tm8gZXJyb3IgY2FsbGJhY2ssIHNvIGZhc3QtZm9yd2FyZCB0byB0aGUgbmV4dCBzdGF0ZSBhbmQg
cm9sbGJhY2sgdGhlCisgICAgLy8gdHJhbnNhY3Rpb24uCisgICAgcmV0dXJuIFNRTFRyYW5zYWN0
aW9uU3RhdGU6OkNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIH0KIAotdm9p
ZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjaygpCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6Y2xlYW51
cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKIHsKICAgICBBU1NFUlQobV9sb2NrQWNx
dWlyZWQpOwogCisgICAgTE9HKFN0b3JhZ2VBUEksICJUcmFuc2FjdGlvbiAlcCBpcyBjb21wbGV0
ZSB3aXRoIGFuIGVycm9yXG4iLCB0aGlzKTsKICAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9y
aXplcigpOwogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIC8vIFRyYW5z
YWN0aW9uIFN0ZXAgMTIgLSBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCisgICAgICAgIC8vIFNw
ZWMgNC4zLjIuMTA6IFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi4KICAgICAgICAgbV9zcWxpdGVU
cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKIAogICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNx
bGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwpAQCAtNzIwLDE5ICs3MzQs
MzYgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBZnRlcgogICAgIH0KICAg
ICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CiAKLSAgICAvLyBUcmFuc2FjdGlvbiBT
dGVwIDEyIC0gQW55IHN0aWxsLXBlbmRpbmcgc3RhdGVtZW50cyBpbiB0aGUgdHJhbnNhY3Rpb24g
YXJlIGRpc2NhcmRlZC4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRl
bWVudE11dGV4KTsKLSAgICAgICAgbV9zdGF0ZW1lbnRRdWV1ZS5jbGVhcigpOwotICAgIH0KLQot
ICAgIC8vIFRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlISBUaGVyZSBpcyBubyBuZXh0IHN0ZXAKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRlIHdpdGggYW4gZXJy
b3JcbiIsIHRoaXMpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgbV9uZXh0U3RlcCA9IDA7CiAKLSAgICAvLyBO
b3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCi0gICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKKyAgICByZXR1cm4gU1FM
VHJhbnNhY3Rpb25TdGF0ZTo6Q2xlYW51cEFuZFRlcm1pbmF0ZTsKK30KKworLy8gcmVxdWVzdFRy
YW5zaXRUb1N0YXRlKCkgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZC4gSGVuY2UsIGl0
IHNob3VsZAorLy8gTk9UIGJlIG1vZGlmeWluZyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgaW4gZ2Vu
ZXJhbC4gVGhlIG9ubHkgc2FmZSBmaWVsZCB0bworLy8gbW9kaWZ5IGlzIG1fcmVxdWVzdGVkU3Rh
dGUgd2hpY2ggaXMgbWVhbnQgZm9yIHRoaXMgcHVycG9zZS4KK3ZvaWQgU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjpyZXF1ZXN0VHJhbnNpdFRvU3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZSBuZXh0U3Rh
dGUpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nICVzIGZvciB0cmFuc2FjdGlv
biAlcFxuIiwgbmFtZUZvclNRTFRyYW5zYWN0aW9uU3RhdGUobmV4dFN0YXRlKSwgdGhpcyk7Cisg
ICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IG5leHRTdGF0ZTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0ZWRT
dGF0ZSAhPSBTUUxUcmFuc2FjdGlvblN0YXRlOjpFbmQpOworICAgIG1fZGF0YWJhc2UtPnNjaGVk
dWxlVHJhbnNhY3Rpb25TdGVwKHRoaXMpOworfQorCisvLyBUaGlzIHN0YXRlIGZ1bmN0aW9uIGlz
IHVzZWQgYXMgYSBzdHViIGZ1bmN0aW9uIHRvIHBsdWcgdW5pbXBsZW1lbnRlZCBzdGF0ZXMKKy8v
IGluIHRoZSBzdGF0ZSBkaXNwYXRjaCB0YWJsZS4gVGhleSBhcmUgdW5pbXBsZW1lbnRlZCBiZWNh
dXNlIHRoZXkgc2hvdWxkCisvLyBuZXZlciBiZSByZWFjaGVkIGluIHRoZSBjb3Vyc2Ugb2YgY29y
cmVjdCBleGVjdXRpb24uCitTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2Vu
ZDo6dW5yZWFjaGFibGVTdGF0ZSgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkVuZDsKK30KKworU1FMVHJhbnNhY3Rpb25TdGF0
ZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OnNlbmRUb0Zyb250ZW5kU3RhdGUoKQoreworICAgIEFT
U0VSVChtX25leHRTdGF0ZSAhPSBTUUxUcmFuc2FjdGlvblN0YXRlOjpJZGxlKTsKKyAgICBtX2Zy
b250ZW5kLT5yZXF1ZXN0VHJhbnNpdFRvU3RhdGUobV9uZXh0U3RhdGUpOworICAgIHJldHVybiBT
UUxUcmFuc2FjdGlvblN0YXRlOjpJZGxlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFj
a2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgJKHJldmlzaW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDkwICszMiw4NiBAQAogCiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVz
LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25T
dGF0ZU1hY2hpbmUuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZTsK
K2NsYXNzIERhdGFiYXNlQmFja2VuZEFzeW5jOwogY2xhc3MgU1FMRXJyb3I7CiBjbGFzcyBTUUxp
dGVUcmFuc2FjdGlvbjsKLWNsYXNzIFNRTFN0YXRlbWVudENhbGxiYWNrOwotY2xhc3MgU1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjazsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwotY2xhc3MgU1FMVHJh
bnNhY3Rpb25DYWxsYmFjazsKLWNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uQmFja2VuZDsKIGNsYXNzIFNRTFZhbHVlOwotY2xhc3MgVm9pZENh
bGxiYWNrOwogCiBjbGFzcyBTUUxUcmFuc2FjdGlvbldyYXBwZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U1FMVHJhbnNhY3Rpb25XcmFwcGVyKCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Q
cmVmbGlnaHQoU1FMVHJhbnNhY3Rpb24qKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1Q
b3N0ZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3Jt
UHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9uQmFja2VuZCopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGVyZm9ybVBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb25CYWNrZW5kKikgPSAwOwogICAgIHZpcnR1
YWwgU1FMRXJyb3IqIHNxbEVycm9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVDb21taXRGYWlsZWRBZnRlclBvc3RmbGlnaHQoU1FMVHJhbnNhY3Rpb24qKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUNvbW1pdEZhaWxlZEFmdGVyUG9zdGZsaWdodChTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQqKSA9IDA7CiB9OwogCi1jbGFzcyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB7CitjbGFz
cyBTUUxUcmFuc2FjdGlvbkJhY2tlbmQgOiBwdWJsaWMgU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hp
bmU8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB7CiBwdWJsaWM6Ci0gICAgflNRTFRyYW5zYWN0aW9u
QmFja2VuZCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4g
Y3JlYXRlKERhdGFiYXNlQmFja2VuZEFzeW5jKiwKKyAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbj4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25s
eSk7CiAKLSAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNv
bnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywKLSAgICAgICAgUGFzc1JlZlB0cjxTUUxT
dGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4s
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkJhY2tlbmQoKTsK
IAogICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7Ci0gICAgYm9vbCBwZXJmb3JtTmV4dFN0ZXAoKTsK
LSAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsKKyAgICB2b2lkIHBlcmZvcm1OZXh0
U3RlcCgpOwogCi0gICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5n
ZXQoKTsgfQorICAgIERhdGFiYXNlQmFja2VuZEFzeW5jKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1f
ZGF0YWJhc2UuZ2V0KCk7IH0KICAgICBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBtX3JlYWRP
bmx5OyB9CiAgICAgdm9pZCBub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7CiAK
KyAgICBQYXNzUmVmUHRyPFNRTEVycm9yPiB0cmFuc2FjdGlvbkVycm9yKCk7CisgICAgdm9pZCBz
ZXRTaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoYm9vbCk7CisKIHByaXZhdGU6Ci0gICAgU1FM
VHJhbnNhY3Rpb25CYWNrZW5kKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAotICAgICAg
ICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFw
cGVyPiwgYm9vbCByZWFkT25seSk7CisgICAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kKERhdGFiYXNl
QmFja2VuZEFzeW5jKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4sCisgICAgICAgIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKLSAgICB0eXBl
ZGVmIHZvaWQgKFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6KlRyYW5zYWN0aW9uU3RlcE1ldGhvZCko
KTsKLSAgICBUcmFuc2FjdGlvblN0ZXBNZXRob2QgbV9uZXh0U3RlcDsKKyAgICB2b2lkIGRvQ2xl
YW51cCgpOwogCiAgICAgdm9pZCBlbnF1ZXVlU3RhdGVtZW50KFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Pik7CiAKICAgICB2b2lkIGNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFi
YXNlKCk7CiAKLSAgICB2b2lkIGFjcXVpcmVMb2NrKCk7Ci0gICAgdm9pZCBvcGVuVHJhbnNhY3Rp
b25BbmRQcmVmbGlnaHQoKTsKLSAgICB2b2lkIGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCk7
Ci0gICAgdm9pZCBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOwotICAgIHZvaWQgcnVuU3RhdGVt
ZW50cygpOwotICAgIHZvaWQgZ2V0TmV4dFN0YXRlbWVudCgpOwotICAgIGJvb2wgcnVuQ3VycmVu
dFN0YXRlbWVudCgpOwotICAgIHZvaWQgaGFuZGxlQ3VycmVudFN0YXRlbWVudEVycm9yKCk7Ci0g
ICAgdm9pZCBkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2soKTsKLSAgICB2b2lkIGRlbGl2ZXJRdW90
YUluY3JlYXNlQ2FsbGJhY2soKTsKLSAgICB2b2lkIHBvc3RmbGlnaHRBbmRDb21taXQoKTsKLSAg
ICB2b2lkIGRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2soKTsKLSAgICB2b2lkIGNsZWFudXBBZnRlclN1
Y2Nlc3NDYWxsYmFjaygpOwotICAgIHZvaWQgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihib29sIGlu
Q2FsbGJhY2spOwotICAgIHZvaWQgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwot
ICAgIHZvaWQgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7CisgICAgLy8g
U3RhdGUgTWFjaGluZSBmdW5jdGlvbnM6CisgICAgdmlydHVhbCBTdGF0ZUZ1bmN0aW9uIHN0YXRl
RnVuY3Rpb25Gb3IoU1FMVHJhbnNhY3Rpb25TdGF0ZSk7CisgICAgdm9pZCByZXF1ZXN0VHJhbnNp
dFRvU3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZSk7CisKKyAgICAvLyBTdGF0ZSBmdW5jdGlvbnM6
CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBhY3F1aXJlTG9jaygpOworICAgIFNRTFRyYW5zYWN0
aW9uU3RhdGUgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCk7CisgICAgU1FMVHJhbnNhY3Rp
b25TdGF0ZSBydW5TdGF0ZW1lbnRzKCk7CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBwb3N0Zmxp
Z2h0QW5kQ29tbWl0KCk7CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBjbGVhbnVwQW5kVGVybWlu
YXRlKCk7CisgICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2soKTsKKworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgdW5yZWFjaGFibGVTdGF0
ZSgpOworICAgIFNRTFRyYW5zYWN0aW9uU3RhdGUgc2VuZFRvRnJvbnRlbmRTdGF0ZSgpOworCisg
ICAgU1FMVHJhbnNhY3Rpb25TdGF0ZSBuZXh0U3RhdGVGb3JDdXJyZW50U3RhdGVtZW50RXJyb3Io
KTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIG5leHRTdGF0ZUZvclRyYW5zYWN0aW9uRXJyb3Io
KTsKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIHJ1bkN1cnJlbnRTdGF0ZW1lbnRBbmRHZXROZXh0
U3RhdGUoKTsKIAotI2lmICFMT0dfRElTQUJMRUQKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVi
dWdTdGVwTmFtZShUcmFuc2FjdGlvblN0ZXBNZXRob2QpOwotI2VuZGlmCisgICAgdm9pZCBnZXRO
ZXh0U3RhdGVtZW50KCk7CiAKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IG1fZnJvbnRlbmQ7
CiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gbV9jdXJyZW50U3RhdGVtZW50OwogCi0gICAgYm9v
bCBtX2V4ZWN1dGVTcWxBbGxvd2VkOwotCi0gICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNl
OworICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3luYz4gbV9kYXRhYmFzZTsKICAgICBSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiBtX3dyYXBwZXI7Ci0gICAgU1FMQ2FsbGJhY2tXcmFw
cGVyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2tXcmFwcGVyOwotICAgIFNRTENh
bGxiYWNrV3JhcHBlcjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcjsKLSAg
ICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9y
Q2FsbGJhY2tXcmFwcGVyOwogICAgIFJlZlB0cjxTUUxFcnJvcj4gbV90cmFuc2FjdGlvbkVycm9y
OworCisgICAgYm9vbCBtX2hhc0NhbGxiYWNrOworICAgIGJvb2wgbV9oYXNTdWNjZXNzQ2FsbGJh
Y2s7CisgICAgYm9vbCBtX2hhc0Vycm9yQ2FsbGJhY2s7CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5
Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsKICAgICBib29s
IG1fbG9ja0FjcXVpcmVkOwpAQCAtMTI3LDcgKzEyMyw3IEBAIHByaXZhdGU6CiAKICAgICBPd25Q
dHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiAKLSAgICBmcmllbmQg
Y2xhc3MgU1FMVHJhbnNhY3Rpb247IC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHRoZSBmcm9u
dC1lbmQgaGFzIGJlZW4gcHJvcGVybHkgaXNvbGF0ZWQuCisgICAgZnJpZW5kIGNsYXNzIFNRTFRy
YW5zYWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNsaWVudC5jcHAJKHJldmlzaW9uIDE0Mjg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2VCYWNrZW5kQ29udGV4dC5oIgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCkBAIC00MywxMyArNDQsMTMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21t
aXRXcml0ZVRyYW5zYWN0aW9uKERhdGFiYXNlQmFja2VuZCogZGF0YWJhc2UpCiB7Ci0gICAgRGF0
YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQoCisg
ICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5n
ZWQoCiAgICAgICAgIGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5n
SWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0
ZVN0YXRlbWVudChEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogewotICAgIERhdGFiYXNlTWFu
YWdlcjo6bWFuYWdlcigpLmRhdGFiYXNlQ2hhbmdlZChkYXRhYmFzZSk7CisgICAgRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VDaGFuZ2VkKGRhdGFiYXNlKTsKIH0KIAogYm9vbCBT
UUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoRGF0YWJhc2VCYWNrZW5kKiBkYXRh
YmFzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTQy
ODg5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
RGF0YWJhc2VCYWNrZW5kQXN5bmMuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkJhY2tlbmQu
aCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAt
NDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBTdHJpbmcgZ2V0RGF0
YWJhc2VJZGVudGlmaWVyKFNRTFRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCiB7Ci0g
ICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgRGF0
YWJhc2VCYWNrZW5kQXN5bmMqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CiAg
ICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICByZXR1cm4gZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZp
ZXIoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBTUUxUcmFuc2FjdGlvblN0YXRlX2gKKyNkZWZpbmUgU1FMVHJh
bnNhY3Rpb25TdGF0ZV9oCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8
d3RmL0VudW1DbGFzcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VOVU1fQ0xBU1MoU1FM
VHJhbnNhY3Rpb25TdGF0ZSkgeworICAgIEVuZCA9IDAsCisgICAgSWRsZSwKKyAgICBBY3F1aXJl
TG9jaywKKyAgICBPcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQsCisgICAgUnVuU3RhdGVtZW50
cywKKyAgICBQb3N0ZmxpZ2h0QW5kQ29tbWl0LAorICAgIENsZWFudXBBbmRUZXJtaW5hdGUsCisg
ICAgQ2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLAorICAgIERlbGl2ZXJUcmFu
c2FjdGlvbkNhbGxiYWNrLAorICAgIERlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2ssCisg
ICAgRGVsaXZlclN0YXRlbWVudENhbGxiYWNrLAorICAgIERlbGl2ZXJRdW90YUluY3JlYXNlQ2Fs
bGJhY2ssCisgICAgRGVsaXZlclN1Y2Nlc3NDYWxsYmFjaywKKyAgICBOdW1iZXJPZlN0YXRlcyAv
LyBBbHdheXMga2VlcCB0aGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCit9IEVOVU1fQ0xBU1Nf
RU5EKFNRTFRyYW5zYWN0aW9uU3RhdGUpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25T
dGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uU3RhdGVNYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25T
dGF0ZU1hY2hpbmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIgorCisjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhTE9HX0RJU0FCTEVECitjb25z
dCBjaGFyKiBuYW1lRm9yU1FMVHJhbnNhY3Rpb25TdGF0ZShTUUxUcmFuc2FjdGlvblN0YXRlIHN0
YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFNRTFRyYW5zYWN0aW9uU3Rh
dGU6OkVuZDoKKyAgICAgICAgcmV0dXJuICJlbmQiOworICAgIGNhc2UgU1FMVHJhbnNhY3Rpb25T
dGF0ZTo6SWRsZToKKyAgICAgICAgcmV0dXJuICJpZGxlIjsKKyAgICBjYXNlIFNRTFRyYW5zYWN0
aW9uU3RhdGU6OkFjcXVpcmVMb2NrOgorICAgICAgICByZXR1cm4gImFjcXVpcmVMb2NrIjsKKyAg
ICBjYXNlIFNRTFRyYW5zYWN0aW9uU3RhdGU6Ok9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodDoK
KyAgICAgICAgcmV0dXJuICJvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQiOworICAgIGNhc2Ug
U1FMVHJhbnNhY3Rpb25TdGF0ZTo6UnVuU3RhdGVtZW50czoKKyAgICAgICAgcmV0dXJuICJydW5T
dGF0ZW1lbnRzIjsKKyAgICBjYXNlIFNRTFRyYW5zYWN0aW9uU3RhdGU6OlBvc3RmbGlnaHRBbmRD
b21taXQ6CisgICAgICAgIHJldHVybiAicG9zdGZsaWdodEFuZENvbW1pdCI7CisgICAgY2FzZSBT
UUxUcmFuc2FjdGlvblN0YXRlOjpDbGVhbnVwQW5kVGVybWluYXRlOgorICAgICAgICByZXR1cm4g
ImNsZWFudXBBbmRUZXJtaW5hdGUiOworICAgIGNhc2UgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6Q2xl
YW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOgorICAgICAgICByZXR1cm4gImNsZWFu
dXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayI7CisgICAgY2FzZSBTUUxUcmFuc2FjdGlv
blN0YXRlOjpEZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjazoKKyAgICAgICAgcmV0dXJuICJkZWxp
dmVyVHJhbnNhY3Rpb25DYWxsYmFjayI7CisgICAgY2FzZSBTUUxUcmFuc2FjdGlvblN0YXRlOjpE
ZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOgorICAgICAgICByZXR1cm4gImRlbGl2ZXJU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2siOworICAgIGNhc2UgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6
RGVsaXZlclN0YXRlbWVudENhbGxiYWNrOgorICAgICAgICByZXR1cm4gImRlbGl2ZXJTdGF0ZW1l
bnRDYWxsYmFjayI7CisgICAgY2FzZSBTUUxUcmFuc2FjdGlvblN0YXRlOjpEZWxpdmVyUXVvdGFJ
bmNyZWFzZUNhbGxiYWNrOgorICAgICAgICByZXR1cm4gImRlbGl2ZXJRdW90YUluY3JlYXNlQ2Fs
bGJhY2siOworICAgIGNhc2UgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6RGVsaXZlclN1Y2Nlc3NDYWxs
YmFjazoKKyAgICAgICAgcmV0dXJuICJkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIjsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gIlVOS05PV04iOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gIlVOS05PV04iOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvblN0YXRlTWFjaGluZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lX2gKKyNkZWZp
bmUgU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmVfaAorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmU8VD4gPiB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUoKSB7IH0KKworcHJv
dGVjdGVkOgorICAgIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lKCk7CisKKyAgICB0eXBlZGVm
IFNRTFRyYW5zYWN0aW9uU3RhdGUgKFQ6OiogU3RhdGVGdW5jdGlvbikoKTsKKyAgICB2aXJ0dWFs
IFN0YXRlRnVuY3Rpb24gc3RhdGVGdW5jdGlvbkZvcihTUUxUcmFuc2FjdGlvblN0YXRlKSA9IDA7
CisKKyAgICB2b2lkIHNldFN0YXRlVG9SZXF1ZXN0ZWRTdGF0ZSgpOworICAgIHZvaWQgcnVuU3Rh
dGVNYWNoaW5lKCk7CisKKyAgICBTUUxUcmFuc2FjdGlvblN0YXRlIG1fbmV4dFN0YXRlOworICAg
IFNRTFRyYW5zYWN0aW9uU3RhdGUgbV9yZXF1ZXN0ZWRTdGF0ZTsKKworI2lmbmRlZiBOREVCVUcK
KyAgICAvLyBUaGUgc3RhdGUgYXVkaXQgdHJhaWwgKGkuZS4gYnJlYWQgY3J1bWJzKSBrZWVwcyB0
cmFjayBvZiB1cCB0byB0aGUgbGFzdAorICAgIC8vIHNfc2l6ZU9mU3RhdGVBdWRpdFRyYWlsIHN0
YXRlcyB0aGF0IHRoZSBzdGF0ZSBtYWNoaW5lIGVudGVycy4gVGhlIGF1ZGl0CisgICAgLy8gdHJh
aWwgaXMgdXBkYXRlZCBiZWZvcmUgZW50ZXJpbmcgZWFjaCBzdGF0ZS4gVGhpcyBpcyBmb3IgZGVi
dWdnaW5nIHVzZQorICAgIC8vIG9ubHkuCisgICAgc3RhdGljIGNvbnN0IGludCBzX3NpemVPZlN0
YXRlQXVkaXRUcmFpbCA9IDIwOworICAgIGludCBtX25leHRTdGF0ZUF1ZGl0RW50cnk7CisgICAg
U1FMVHJhbnNhY3Rpb25TdGF0ZSBtX3N0YXRlQXVkaXRUcmFpbFtzX3NpemVPZlN0YXRlQXVkaXRU
cmFpbF07CisjZW5kaWYKK307CisKKyNpZiAhTE9HX0RJU0FCTEVECitleHRlcm4gY29uc3QgY2hh
ciogbmFtZUZvclNRTFRyYW5zYWN0aW9uU3RhdGUoU1FMVHJhbnNhY3Rpb25TdGF0ZSk7CisjZW5k
aWYKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1NRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lPFQ+
OjpTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZSgpCisgICAgOiBtX25leHRTdGF0ZShTUUxUcmFu
c2FjdGlvblN0YXRlOjpJZGxlKQorICAgICwgbV9yZXF1ZXN0ZWRTdGF0ZShTUUxUcmFuc2FjdGlv
blN0YXRlOjpJZGxlKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbmV4dFN0YXRlQXVkaXRFbnRy
eSgwKQorI2VuZGlmCit7CisjaWZuZGVmIE5ERUJVRworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c19zaXplT2ZTdGF0ZUF1ZGl0VHJhaWw7IGkrKykKKyAgICAgICAgbV9zdGF0ZUF1ZGl0VHJhaWxb
aV0gPSBTUUxUcmFuc2FjdGlvblN0YXRlOjpOdW1iZXJPZlN0YXRlczsKKyNlbmRpZgorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZTxUPjo6
c2V0U3RhdGVUb1JlcXVlc3RlZFN0YXRlKCkKK3sKKyAgICBBU1NFUlQobV9uZXh0U3RhdGUgPT0g
U1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZSk7CisgICAgQVNTRVJUKG1fcmVxdWVzdGVkU3RhdGUg
IT0gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZSk7CisgICAgbV9uZXh0U3RhdGUgPSBtX3JlcXVl
c3RlZFN0YXRlOworICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBTUUxUcmFuc2FjdGlvblN0YXRlOjpJ
ZGxlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBTUUxUcmFuc2FjdGlvblN0YXRl
TWFjaGluZTxUPjo6cnVuU3RhdGVNYWNoaW5lKCkKK3sKKyAgICBBU1NFUlQoU1FMVHJhbnNhY3Rp
b25TdGF0ZTo6RW5kIDwgU1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZSk7CisgICAgd2hpbGUgKG1f
bmV4dFN0YXRlID4gU1FMVHJhbnNhY3Rpb25TdGF0ZTo6SWRsZSkgeworICAgICAgICBBU1NFUlQo
bV9uZXh0U3RhdGUgPCBTUUxUcmFuc2FjdGlvblN0YXRlOjpOdW1iZXJPZlN0YXRlcyk7CisgICAg
ICAgIFN0YXRlRnVuY3Rpb24gc3RhdGVGdW5jdGlvbiA9IHN0YXRlRnVuY3Rpb25Gb3IobV9uZXh0
U3RhdGUpOworICAgICAgICBBU1NFUlQoc3RhdGVGdW5jdGlvbik7CisKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIG1fc3RhdGVBdWRpdFRyYWlsW21fbmV4dFN0YXRlQXVkaXRFbnRyeV0gPSBtX25l
eHRTdGF0ZTsKKyAgICAgICAgbV9uZXh0U3RhdGVBdWRpdEVudHJ5ID0gKG1fbmV4dFN0YXRlQXVk
aXRFbnRyeSArIDEpICUgc19zaXplT2ZTdGF0ZUF1ZGl0VHJhaWw7CisjZW5kaWYKKyAgICAgICAg
bV9uZXh0U3RhdGUgPSAoc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT4qc3RhdGVGdW5jdGlvbikoKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZV9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gMTQyODg5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1Mzc4LDYgKzI1Mzc4LDEwIEBACiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRh
dGFiYXNlXENoYW5nZVZlcnNpb25EYXRhLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZp
bGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXENoYW5nZVZlcnNp
b25XcmFwcGVyLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI1NjM4LDYgKzI1NjQyLDE4
IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3RhdGUuaCIKKwkJCQkJPgorCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcd2ViZGF0
YWJhc2VcU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxT
UUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2Fj
dGlvblN5bmMuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNDI4ODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xODgwLDYgKzE4ODAsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
TW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rp
b25DbGllbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJk
YXRhYmFzZVxTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hp
bmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFz
ZVxTUUxUcmFuc2FjdGlvblN5bmMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
TW9kdWxlc1x3ZWJkYXRhYmFzZVxXb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJzb2NrZXRzXFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmNwcCIgLz4KQEAgLTY0MTUsNiArNjQxNiw3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG5vdGlmaWNhdGlvbnNcTm90aWZpY2F0aW9uQ2xpZW50Lmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG5vdGlmaWNhdGlvbnNcV29y
a2VyQ29udGV4dE5vdGlmaWNhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XE1vZHVsZXNcd2ViZGF0YWJhc2VcQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxDaGFuZ2VWZXJzaW9uRGF0
YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxD
aGFuZ2VWZXJzaW9uV3JhcHBlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9k
dWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZUF1dGhvcml6ZXIuaCIgLz4KQEAgLTY0NTIs
NiArNjQ1NCw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXFNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3RhdGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FM
VHJhbnNhY3Rpb25TeW5jLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFdvcmtlckNvbnRleHRXZWJEYXRh
YmFzZS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTQyODg5KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5n
IGNvcHkpCkBAIC0xODk5LDkgKzE4OTksNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
TW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbi5jcHAiPgogICAgICAgPEZpbHRlcj5N
b2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uLmNwcCI+
Ci0gICAgICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FM
VHJhbnNhY3Rpb25CYWNrZW5kLmNwcCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJh
c2U8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTE5MTQsNiArMTkxMSw5IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxl
c1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAiPgorICAgICAgPEZp
bHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9u
U3luYy5jcHAiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+CkBAIC04NDcyLDYgKzg0NzIsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxBYnN0cmFjdERhdGFiYXNlU2VydmVyLmgiPgog
ICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXENoYW5n
ZVZlcnNpb25EYXRhLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0
ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXENoYW5nZVZlcnNpb25XcmFwcGVyLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1
bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC04NTgzLDYgKzg1
ODYsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2Vc
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdl
YmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTFRyYW5zYWN0aW9uU3RhdGUuaCI+CisgICAg
ICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNh
Y3Rpb25TdGF0ZU1hY2hpbmUuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXNcd2ViZGF0YWJhc2U8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1v
ZHVsZXNcd2ViZGF0YWJhc2VcU1FMVHJhbnNhY3Rpb25TeW5jLmgiPgogICAgICAgPEZpbHRlcj5N
b2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3MDYsNiArMzcwNiw3IEBACiAJCTk3QjhGRkQx
MTZBRTdGOTYwMDM4Mzg4RCAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0I4RkZDRjE2QUU3
RjkyMDAzODM4OEQgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lcy5oICovOyB9Owog
CQk5N0JDNjlEQTE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUQ2MTUwNUYwNzYw
MDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuY3BwICovOyB9OwogCQk5N0JDNjlEQjE1MDVGMDc2
MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlENzE1MDVGMDc2MDAxQjc0QUMgLyogRGF0YWJhc2VC
YWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM2RkQxMTE2Qzc4MjY0
MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCAqLzsgfTsKIAkJOTdCQzY5REMxNTA1RjA3
NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUQ4MTUwNUYwNzYwMDFCNzRBQyAvKiBD
aGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgKi87IH07CiAJCTk3QkM2OUREMTUwNUYwNzYwMDFCNzRB
QyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RDkxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNp
b25XcmFwcGVyLmggKi87IH07CiAJCTk3QkM2QTIwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JD
NjlERTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3BwICovOyB9OwpAQCAtMzc0NSwxMiAr
Mzc0NiwxOSBAQAogCQk5N0JDNkE0RTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMU3RhdGVtZW50U3lu
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZB
MEMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLzsgfTsKIAkJOTdCQzZB
NEYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTBEMTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxUcmFuc2FjdGlvbi5jcHAgKi87IH07CiAJCTk3QkM2QTUwMTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTdCQzZBMEUxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uLmggKi87
IH07CisJCUZFRTE4MTEzMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVFMTgx
MTExNkMzMTlFODAwMDg0ODQ5IC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAgKi87IH07CisJ
CUZFRTE4MTE0MTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRTE4MTEyMTZDMzE5
RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLzsgfTsKKwkJRkVBRDdEODcx
NkMzMzlFRTAwRDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBRDdEODUxNkMzMzlFRTAw
RDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwICovOyB9OworCQlGRUFEN0Q4
ODE2QzMzOUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVBRDdEODYxNkMzMzlFRTAw
RDQ2NzBCIC8qIFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaCAqLzsgfTsKIAkJOTdCQzZBNTIx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTEwMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggKi87IH07CiAJCTk3QkM2QTU0MTUwNUYwODEw
MDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNkExMjE1MDVGMDgxMDAxQjc0QUMgLyogU1FM
VHJhbnNhY3Rpb25DbGllbnQuY3BwICovOyB9OwogCQk5N0JDNkE1NTE1MDVGMDgxMDAxQjc0QUMg
LyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3QkM2QTEzMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlv
bkNsaWVudC5oICovOyB9OwogCQk5N0JDNkE1NjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5N0JDNkExNDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAgKi87IH07CiAJCTk3QkM2QTU3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5N0JDNkExNTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oICovOyB9OwogCQk5N0JDNkE1ODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5N0JDNkExNjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLmggKi87IH07CisJCUZFMzZGRDE4MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFu
c2FjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTM2RkQxNDE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oICov
OyB9OworCQlGRTM2RkQxNjE2Qzc4MjY1MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1h
Y2hpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUzNkZEMTIxNkM3ODI2NDAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNw
cCAqLzsgfTsKKwkJRkUzNkZEMTcxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3Rh
dGVNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTM2RkQxMzE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUu
aCAqLzsgfTsKIAkJOTdCQzZBNUExNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3lu
Yy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JD
NkExODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCAqLzsgfTsKIAkJ
OTdCQzZBNUIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzZBMTkxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oICovOyB9OwogCQk5N0JDNkE1RDE1MDVGMDgx
MDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2QTFCMTUwNUYwODEwMDFCNzRBQyAv
KiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovOyB9OwpAQCAtMTExNTcsNiArMTExNjUs
NyBAQAogCQk5N0I4RkZDRjE2QUU3RjkyMDAzODM4OEQgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3
QkM2OUQ2MTUwNUYwNzYwMDFCNzRBQyAvKiBEYXRhYmFzZUJhY2tlbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2VCYWNrZW5kLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTdCQzY5RDcxNTA1RjA3NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZUJhY2tlbmQuaDsgcGF0
aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMzZGRDExMTZDNzgyNjQwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9u
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDaGFuZ2VWZXJzaW9uRGF0
YS5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlEODE1MDVGMDc2MDAxQjc0QUMgLyogQ2hh
bmdlVmVyc2lvbldyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9D
aGFuZ2VWZXJzaW9uV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3
QkM2OUQ5MTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oOyBwYXRoID0g
TW9kdWxlcy93ZWJkYXRhYmFzZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5N0JDNjlERTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YWJhc2UuY3BwOyBwYXRo
ID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMTIwNiw2ICsxMTIxNSwxMCBAQAogCQk5N0JDNkEwRDE1MDVGMDgxMDAxQjc0
QUMgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gU1FMVHJhbnNhY3Rpb24uY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2QTBFMTUw
NUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbi5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNkEwRjE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IFNRTFRyYW5zYWN0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUUxODExMTE2QzMx
OUU4MDAwODQ4NDkgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHA7IHBhdGggPSBN
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFRTE4MTEyMTZDMzE5RTgwMDA4NDg0OSAvKiBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9u
QmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUFEN0Q4NTE2QzMzOUVF
MDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcDsgcGF0
aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQUQ3RDg2MTZDMzM5RUUwMEQ0NjcwQiAvKiBT
UUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5N0JDNkExMDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
Lmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMTExNTA1RjA4MTAwMUI3NEFDIC8q
IFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvbkNhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZB
MTIxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcDsgcGF0
aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyMTQsNiArMTEyMjcsOSBAQAogCQk5N0JDNkExNTE1
MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHBhdGgg
PSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTdCQzZBMTYxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3QkM2QTE3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjay5pZGw7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzZGRDE0MTZDNzgy
NjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNRTFRyYW5zYWN0aW9uU3RhdGUuaDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMVHJhbnNhY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRTM2RkQxMjE2Qzc4MjY0MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25T
dGF0ZU1hY2hpbmUuY3BwOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlv
blN0YXRlTWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFMzZGRDEz
MTZDNzgyNjQwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oOyBw
YXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNkExODE1MDVGMDgxMDAxQjc0QUMgLyog
U1FMVHJhbnNhY3Rpb25TeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFNRTFRyYW5zYWN0aW9uU3luYy5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2
QTE5MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU1FMVHJhbnNhY3Rpb25TeW5jLmg7IHBhdGggPSBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uU3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5N0JDNkExQTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTUUxUcmFuc2FjdGlvblN5bmMuaWRsOyBwYXRoID0g
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTg2MTUsNiArMTg2MzEsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlGRTExNUZBOTE2Nzk4OENEMDAyNDkxMzQgLyogQWJzdHJh
Y3REYXRhYmFzZVNlcnZlci5oICovLAorCQkJCUZFMzZGRDExMTZDNzgyNjQwMEY4ODdDMSAvKiBD
aGFuZ2VWZXJzaW9uRGF0YS5oICovLAogCQkJCTk3QkM2OUQ4MTUwNUYwNzYwMDFCNzRBQyAvKiBD
aGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAgKi8sCiAJCQkJOTdCQzY5RDkxNTA1RjA3NjAwMUI3NEFD
IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggKi8sCiAJCQkJOTdCQzY5REUxNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlLmNwcCAqLywKQEAgLTE4Njk1LDYgKzE4NzEyLDkgQEAKIAkJCQk5N0JD
NkExNTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovLAog
CQkJCTk3QkM2QTE2MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suaCAqLywKIAkJCQk5N0JDNkExNzE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrLmlkbCAqLywKKwkJCQlGRTM2RkQxNDE2Qzc4MjY0MDBGODg3QzEgLyogU1FM
VHJhbnNhY3Rpb25TdGF0ZS5oICovLAorCQkJCUZFMzZGRDEyMTZDNzgyNjQwMEY4ODdDMSAvKiBT
UUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5jcHAgKi8sCisJCQkJRkUzNkZEMTMxNkM3ODI2NDAw
Rjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggKi8sCiAJCQkJOTdCQzZBMTgx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5jcHAgKi8sCiAJCQkJOTdCQzZB
MTkxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oICovLAogCQkJCTk3QkM2
QTFBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaWRsICovLApAQCAtMjMz
MTMsNiArMjMzMzMsNyBAQAogCQkJCTA3OUQwODY4MTYyRjIwRTgwMERCODY1OCAvKiBDYXB0aW9u
VXNlclByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzlEMDg2QjE2MkYyMUY5MDBE
Qjg2NTggLyogQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5N0JDNjlERDE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE1RkZGMTJCMDI2NzYwMEMxQTM1OSAv
KiBDaGFubmVsTWVyZ2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMDIxMkIwMjY3
NjAwQzFBMzU5IC8qIENoYW5uZWxTcGxpdHRlck5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjU5
MjcsNiArMjU5NDgsOCBAQAogCQkJCTk3QkM2QTU1MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFu
c2FjdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBNTcxNTA1RjA4MTAwMUI3
NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
QkM2QTU4MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAorCQkJCUZFMzZGRDE4MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2Fj
dGlvblN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTM2RkQxNzE2Qzc4MjY1MDBGODg3QzEg
LyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1hY2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2
QTVCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QkM2QTVEMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRTZFNUEwQ0M1NTIxMzAwNEEyMDYyIC8qIFNR
TFZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTI5MjI1LDYgKzI5MjQ4LDcgQEAKIAkJCQlGRUFE
N0Q4NzE2QzMzOUVFMDBENDY3MEIgLyogU1FMVHJhbnNhY3Rpb25CYWNrZW5kU3luYy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5N0JDNkE1NDE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rp
b25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBNTYxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUz
NkZEMTYxNkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk3QkM2QTVBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2Fj
dGlvblN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRTZFNTkwQ0M1NTIxMzAwNEEyMDYy
IC8qIFNRTFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUU2MDgyNDVFNTkwMDFF
OUFCQyAvKiBTU0xLZXlHZW5lcmF0b3JNYWMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
CShyZXZpc2lvbiAxNDI4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDEwIEBACiAjaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5o
IgogI2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5j
bHVkZSAiU1FMUmVzdWx0U2V0Um93TGlzdC5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUg
IlNRTFJlc3VsdFNldFJvd0xpc3QuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgogI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2suaCIK
</data>
<flag name="review"
          id="208499"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>