<?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>125258</bug_id>
          
          <creation_ts>2013-12-04 15:03:39 -0800</creation_ts>
          <short_desc>DatabaseProcess IndexedDB: Establish a metadata backing store on disk</short_desc>
          <delta_ts>2013-12-12 16:39:26 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>956644</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-04 15:03:39 -0800</bug_when>
    <thetext>DatabaseProcess IndexedDB: Establish a metadata backing store on disk

The directory structure for each unique Indexed Database is:
&lt;The WebKit2 Databases path&gt; /___IndexedDB/&lt;main frame security origin&gt;/&lt;name of indexed database&gt;/

This patch adds a SQLite backing store and actually establishes files on disk.

Each IDB will have its metadata stored in a backing store database in that directory.
Going forward, each ObjectStore will also live in a separate database in that directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956657</commentid>
    <comment_count>1</comment_count>
      <attachid>218462</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-04 15:23:33 -0800</bug_when>
    <thetext>Created attachment 218462
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956678</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-04 15:48:16 -0800</bug_when>
    <thetext>Since this patch touches the filesystem, I&apos;ll be trying to get 3 reviews on at least those specific areas of the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956696</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-04 16:44:14 -0800</bug_when>
    <thetext>&gt; ___IndexedDB

What are the underscores good for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956700</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-04 16:54:17 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; ___IndexedDB
&gt; 
&gt; What are the underscores good for?

This was established in an earlier patch.

The &quot;Databases&quot; directory contains both WebSQL and now IndexedDB.
Currently WebSQL stuff is dumped directly in the Databases directory.  the ___IndexedDB name guarantees a lack of collision with any WebSQL names because they will never have a ___ prefix.

It&apos;s a hack, but hopefully a very temporary one - WebSQL should be migrated into a .../Databases/WebSQL directory, and then IDB can be in .../Databases/IndexedDB instead of ___IndexedDB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956703</commentid>
    <comment_count>5</comment_count>
      <attachid>218462</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-04 17:00:14 -0800</bug_when>
    <thetext>Comment on attachment 218462
Patch v1

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

I only looked at a small part of the patch so far, will continue tomorrow.

&gt; Source/WebKit2/ChangeLog:45
&gt; +        To help with thread safety, add an isolatedCopy to UniqueIDBDatabaseIdentifier:

Can you elaborate please, what does this fix? It&apos;s clear that isolatedCopy always serves this purpose, so this comment doesn&apos;t add much.

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:102
&gt; +    ensureIndexedDatabaseRelativePathExists(&quot;&quot;);

Not sure if it&apos;s something DatabaseProcess should do, or UI process. From sandboxing point of view, having access above the root level is excessive and dangerous, although I think that we mitigate this by only allowing creating certain types of nodes.

We&apos;ll need to more closely look at what WebProcess does for similar directories.

Also, String::empty().

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:111
&gt; +        LOG_ERROR(&quot;DatabaseProcess::ensureDatabaseRelativePathExists() - Complete path is empty&quot;);

We were just calling this function with an empty argument above? Is the problem actually with null strings?

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:121
&gt; +    ASSERT(!isMainThread());

I think that a comment would help here. Why is calling this on main thread a problem?

This is a faceless background process, so this is not going to block UI or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956710</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-04 17:17:03 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 218462 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218462&amp;action=review
&gt; 
&gt; I only looked at a small part of the patch so far, will continue tomorrow.
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:45
&gt; &gt; +        To help with thread safety, add an isolatedCopy to UniqueIDBDatabaseIdentifier:
&gt; 
&gt; Can you elaborate please, what does this fix? It&apos;s clear that isolatedCopy always serves this purpose, so this comment doesn&apos;t add much.
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:102
&gt; &gt; +    ensureIndexedDatabaseRelativePathExists(&quot;&quot;);
&gt; 
&gt; Not sure if it&apos;s something DatabaseProcess should do, or UI process. From sandboxing point of view, having access above the root level is excessive and dangerous, although I think that we mitigate this by only allowing creating certain types of nodes.

Maybe I&apos;m misunderstanding your concern - I think the idea here is that the DatabaseProcess only has access to the database directory, and not anything above it.
It should be able to mkdir and create files underneath that directory.

&gt; Also, String::empty().

Indeed.

&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:111
&gt; &gt; +        LOG_ERROR(&quot;DatabaseProcess::ensureDatabaseRelativePathExists() - Complete path is empty&quot;);
&gt; 
&gt; We were just calling this function with an empty argument above? Is the problem actually with null strings?

The relative path can be empty - e.g. &quot;/Users/myname/WebKit/Databases/&quot; with a relative path of &quot;&quot; resolves to a complete path of &quot;/Users/myname/WebKit/Databases/&quot;

The complete path cannot be empty.

&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:121
&gt; &gt; +    ASSERT(!isMainThread());
&gt; 
&gt; I think that a comment would help here. Why is calling this on main thread a problem?

Because the main thread should not do I/O.
 
&gt; This is a faceless background process, so this is not going to block UI or something.

I&apos;m not willing to make the leap of &quot;this is a faceless background process therefore main thread i/o is okay&quot;

If there was a simple process-wide way to enforce &quot;disk i/o on the main thread is a fatal error&quot; I would support enabling it.  Until then, we have a tradition of asserting !isMainThread() for known i/o work.

In this concrete example, main thread i/o would block the DatabaseProcess from processing non-i/o messages and requests from any number of WebProcesses</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956794</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-05 00:11:21 -0800</bug_when>
    <thetext>&gt;It should be able to mkdir and create files underneath that directory.

Creating the top level database directory requires write access to its parent directory.

&gt; In this concrete example, main thread i/o would block the DatabaseProcess from processing non-i/o messages and requests from any number of WebProcesses

Ok. How is this a problem?

I think that there needs to be a real reason for writing more complicated code, not just a mantra that remains a failure even for UI processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956942</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-05 09:58:31 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt;It should be able to mkdir and create files underneath that directory.
&gt; 
&gt; Creating the top level database directory requires write access to its parent directory.

Fair enough.  When we get to sandboxing, we&apos;ll have to make sure UI Process makes that directory.

&gt; &gt; In this concrete example, main thread i/o would block the DatabaseProcess from processing non-i/o messages and requests from any number of WebProcesses
&gt; 
&gt; Ok. How is this a problem?

WebProcess A triggers an IDB database to be opened for the first time, requiring i/o to complete.
WebProcess B opens a connection to an already-open IDB database and needs to get the database&apos;s metadata to continue.

The operation requested by WebProcess B could occur immediately without i/o...  as long as WebProcess A is doing its i/o on a background thread.

&gt; I think that there needs to be a real reason for writing more complicated code, not just a mantra that remains a failure even for UI processes.

&quot;...not just a mantra that remains a failure even for UI processes.&quot;

I&apos;m not sure what you mean here...  are you suggesting that work we put in to moving i/o to non-main threads is wasted effort?

I&apos;m surprised to hear this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956956</commentid>
    <comment_count>9</comment_count>
      <attachid>218462</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-05 10:37:39 -0800</bug_when>
    <thetext>Comment on attachment 218462
Patch v1

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

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:49
&gt; +    m_inMemory = identifier.openingOrigin() != identifier.mainFrameOrigin();

Not sure if comparing origins for equality is what we want here.

Should document.domain relaxing allow using database in a subframe? How can we make this decision? How will we regression test it?

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:54
&gt; +    m_databaseRelativeDirectory = pathByAppendingComponent(identifier.openingOrigin().databaseFilenameIdentifier(), encodeForFileName(identifier.databaseName()));

Where are path components sanitized, is that explicit? 

I think that things probably work well implicitly, but they might be fragile. For example, encodeForFileName(&quot;..&quot;) just returns &quot;..&quot;, which is not a good component to build paths from.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:114
&gt; +    if (m_metadata) {

Is m_metadata accessed from multiple threads without locking?

It is very difficult to analyze this code, because we have a class with methods run on multiple threads, which doesn&apos;t even have threading asserts in most functions.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:115
&gt; +        completionCallback(true, IDBDatabaseMetadata(*m_metadata));

What is the purpose of this copy? Is the metadata mutable? But in that case, returning a possibly stale copy makes racy code.

Or if it&apos;s for passing data across threads, then a regular copy isn&apos;t sufficient, there are strings inside IDBDatabaseMetadata.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:61
&gt; +    String fullDatabaseDirectory() const;

&quot;Absolute path&quot; might be a little clearer than &quot;full&quot;.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:41
&gt; +// Current version of the metadata schema being used in the metadata database

Please add a period at the end.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:46
&gt; +    : m_identifier(database.identifier().isolatedCopy())
&gt; +    , m_fullDatabaseDirectory(database.fullDatabaseDirectory().isolatedCopy())

As you said, we need a better way for ensuring that isolatedCopy is called.

We have some existing and fairly well established code for that, CrossThreadCopier.h. It is automatically invoked in some existing message passing designs (see CrossThreadTask, FileThreadTask, MainThreadTask).

&gt; Source/WebKit2/Shared/SecurityOriginData.h:63
&gt;  bool operator==(const SecurityOriginData&amp;, const SecurityOriginData&amp;);
&gt; +bool operator!=(const SecurityOriginData&amp;, const SecurityOriginData&amp;);

As alluded to above, equality is rarely (if ever) the right operation for security origins, which is why we have individual &quot;can&quot; functions for everything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956962</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-05 10:55:41 -0800</bug_when>
    <thetext>&gt; &gt; Ok. How is this a problem?
&gt; 
&gt; WebProcess A triggers an IDB database to be opened for the first time, requiring i/o to complete.
&gt; WebProcess B opens a connection to an already-open IDB database and needs to get the database&apos;s metadata to continue.
&gt; 
&gt; The operation requested by WebProcess B could occur immediately without i/o...  as long as WebProcess A is doing its i/o on a background thread.

What is the scenario where this would happen, in user observable terms? Won&apos;t there be other I/O blocking response to any reasonable user action anyway?

Presumably a process that opens a new connection does so to read some data from the DB, and won&apos;t respond to user action unlit that data is available.

I feel that the opportunity cost for this kind of effort is unreasonable by many orders of magnitude, considering all the other things we could be fixing. It&apos;s just a background process that&apos;s invoked by web process, and web process happily blocks its own main thread for HTML parsing and JavaScript execution!

&gt; I&apos;m not sure what you mean here...  are you suggesting that work we put in to moving i/o to non-main threads is wasted effort?

Yes. We put a lot of effort into moving explicit open/read/write/mkdir calls to secondary threads, but little effort into moving system API calls that perform blocking I/O internally. That just doesn&apos;t make sense.

&gt; I&apos;m surprised to hear this.

Anyway, this bug is not a good place to discuss this in general terms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956964</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-05 10:58:47 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 218462 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218462&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:49
&gt; &gt; +    m_inMemory = identifier.openingOrigin() != identifier.mainFrameOrigin();
&gt; 
&gt; Not sure if comparing origins for equality is what we want here.

Right now it is our design.  As the comment says, we can change policies at any time.

&gt; Should document.domain relaxing allow using database in a subframe? 

Databases can always be used in a subframe.  They just get partitioned.  I don&apos;t think document.domain relaxing breaks you out of the partition, but that&apos;s a policy greater in scope than just IDB.

&gt; How can we make this decision? 

By actually knowing the design of 3rd party partitioning, which I don&apos;t think should hold up the task of getting IDB working...

&gt; How will we regression test it?

Once we know the design, I&apos;m not sure how it would be difficult to regression test?

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:54
&gt; &gt; +    m_databaseRelativeDirectory = pathByAppendingComponent(identifier.openingOrigin().databaseFilenameIdentifier(), encodeForFileName(identifier.databaseName()));
&gt; 
&gt; Where are path components sanitized, is that explicit? 

No, but:

&gt; I think that things probably work well implicitly, but they might be fragile. For example, encodeForFileName(&quot;..&quot;) just returns &quot;..&quot;, which is not a good component to build paths from.

If encodeForFileName(&quot;..&quot;) just returns &quot;..&quot; then encodeForFileName has a pretty terrible bug that should be fixed.

&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:114
&gt; &gt; +    if (m_metadata) {
&gt; 
&gt; Is m_metadata accessed from multiple threads without locking?

Excellent catch.

&gt; It is very difficult to analyze this code, because we have a class with methods run on multiple threads, which doesn&apos;t even have threading asserts in most functions.

This class actually doesn&apos;t have very many methods yet, but I agree there should be more threading ASSERTs.  Willdo.

&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:115
&gt; &gt; +        completionCallback(true, IDBDatabaseMetadata(*m_metadata));
&gt; 
&gt; What is the purpose of this copy? Is the metadata mutable? 

Yes, in limited circumstances.

&gt; But in that case, returning a possibly stale copy makes racy code.

Those limited circumstances (a version change transaction being in progress) are not implemented yet, but they preempt anything else happening.

Once version change transactions are implemented, the case where the metadata is mutable will not get the easy return like this.

&gt; &gt; Or if it&apos;s for passing data across threads, then a regular copy isn&apos;t sufficient, there are strings inside IDBDatabaseMetadata.

It&apos;s also for this, and therefore it should also be an isolatedcopy().

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:61
&gt; &gt; +    String fullDatabaseDirectory() const;
&gt; 
&gt; &quot;Absolute path&quot; might be a little clearer than &quot;full&quot;.

I agree.

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:46
&gt; &gt; +    : m_identifier(database.identifier().isolatedCopy())
&gt; &gt; +    , m_fullDatabaseDirectory(database.fullDatabaseDirectory().isolatedCopy())
&gt; 
&gt; As you said, we need a better way for ensuring that isolatedCopy is called.
&gt; 
&gt; We have some existing and fairly well established code for that, CrossThreadCopier.h. It is automatically invoked in some existing message passing designs (see CrossThreadTask, FileThreadTask, MainThreadTask).

Interesting.  This is new since the last time I worked in heavily MT code. I will take a look.
&gt; 
&gt; &gt; Source/WebKit2/Shared/SecurityOriginData.h:63
&gt; &gt;  bool operator==(const SecurityOriginData&amp;, const SecurityOriginData&amp;);
&gt; &gt; +bool operator!=(const SecurityOriginData&amp;, const SecurityOriginData&amp;);
&gt; 
&gt; As alluded to above, equality is rarely (if ever) the right operation for security origins, which is why we have individual &quot;can&quot; functions for everything.

As answered above, currently equality *is* the design.  But I agree the design can be encapsulated by a &quot;can&quot; method on SecurityOriginData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956967</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-05 11:07:26 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; &gt; Ok. How is this a problem?
&gt; &gt; 
&gt; &gt; WebProcess A triggers an IDB database to be opened for the first time, requiring i/o to complete.
&gt; &gt; WebProcess B opens a connection to an already-open IDB database and needs to get the database&apos;s metadata to continue.
&gt; &gt; 
&gt; &gt; The operation requested by WebProcess B could occur immediately without i/o...  as long as WebProcess A is doing its i/o on a background thread.
&gt; 
&gt; What is the scenario where this would happen, in user observable terms? Won&apos;t there be other I/O blocking response to any reasonable user action anyway?
&gt; 
&gt; Presumably a process that opens a new connection does so to read some data from the DB, and won&apos;t respond to user action unlit that data is available.

There are some synchronous operations that can take place on an open IDB database handle in JS that don&apos;t require I/O.
Those operations can&apos;t be made until the database handle is open.

So the user observation is that the web page is &quot;slow&quot; (if not actually blocked) when there&apos;s no reason for it to be slow.

&gt; I feel that the opportunity cost for this kind of effort is unreasonable by many orders of magnitude, considering all the other things we could be fixing. It&apos;s just a background process that&apos;s invoked by web process, and web process happily blocks its own main thread for HTML parsing and JavaScript execution!

As you probably know, there&apos;s various efforts at various stages of completion to move more and more types of work off the main thread.  Yes, the WebProcess main thread currently does HTML parsing and JS execution, but we also take great strides to speed those tasks up and - whenever we identify where they might block for unreasonable amounts of time - break them up so the main thread doesn&apos;t stay blocked.

That&apos;s a reasonable solution for now since we have absolute control over the characteristics of HTML parsing and JS execution.

Long ago in the project we identified known file I/O as something to not allow on the main thread since it both has potentially terrible characteristics in comparison to HTML/JS, and since we don&apos;t have anywhere near absolutely control over improving those characteristics.

&gt; &gt; I&apos;m not sure what you mean here...  are you suggesting that work we put in to moving i/o to non-main threads is wasted effort?
&gt; 
&gt; Yes. We put a lot of effort into moving explicit open/read/write/mkdir calls to secondary threads, but little effort into moving system API calls that perform blocking I/O internally. That just doesn&apos;t make sense.

Sounds like we should expand the effort to make it more comprehensive and effective, instead of giving up on it since we haven&apos;t been 100% successful yet.

&gt; Anyway, this bug is not a good place to discuss this in general terms.

No argument here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956975</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-05 11:24:57 -0800</bug_when>
    <thetext>&gt; If encodeForFileName(&quot;..&quot;) just returns &quot;..&quot; then encodeForFileName has a pretty terrible bug that should be fixed.

It does, but it&apos;s not a bug - .. is a valid file name as far as file system goes. We can&apos;t escape periods, because &quot;mydatabase.db&quot; has a period in he name!

encodeForFileName does not sanitize - it does not check for reserved names like &quot;COM1&quot; on Windows, does not check for &quot;..&quot;, and so on.

&gt; Sounds like we should expand the effort to make it more comprehensive and effective, instead of giving up on it since we haven&apos;t been 100% successful yet.

Again, please consider opportunity cost. Most things we *should* do are OK to perpetually sit as open known bugs that don&apos;t affect users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956982</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-05 11:39:05 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; If encodeForFileName(&quot;..&quot;) just returns &quot;..&quot; then encodeForFileName has a pretty terrible bug that should be fixed.
&gt; 
&gt; It does, but it&apos;s not a bug - .. is a valid file name as far as file system goes. We can&apos;t escape periods, because &quot;mydatabase.db&quot; has a period in he name!

We can scan for equality to one or two periods, though.  &quot;.&quot; is an invalid filename, and &quot;..&quot; is an invalid filename, but &quot;...&quot; and so on are valid.

&gt; encodeForFileName does not sanitize - it does not check for reserved names like &quot;COM1&quot; on Windows, does not check for &quot;..&quot;, and so on.

Fair enough.  
&gt; 
&gt; &gt; Sounds like we should expand the effort to make it more comprehensive and effective, instead of giving up on it since we haven&apos;t been 100% successful yet.
&gt; 
&gt; Again, please consider opportunity cost. Most things we *should* do are OK to perpetually sit as open known bugs that don&apos;t affect users.

If you&apos;re objecting to the mkdir being on a background thread, which is where you made the original comment, I wonder if we&apos;ve spend more time discussing it instead of pointing out anything wrong with the already written code and having me fix it?

If you&apos;re objecting to the entire notion of trying to make all DatabaseProcess i/o be on a background thread, then you have an extremely steep mountain to climb to convince me threading isn&apos;t worth it, considering the short and long term plans for the DatabaseProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956983</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-05 11:39:54 -0800</bug_when>
    <thetext>&gt; &gt; encodeForFileName does not sanitize - it does not check for reserved names like &quot;COM1&quot; on Windows, does not check for &quot;..&quot;, and so on.
&gt; 
&gt; Fair enough.  

And to elaborate on this point, do we have any sanitization like this anywhere?  Or should I just build it in to WK2/DatabaseProcess locally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956996</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-05 12:11:23 -0800</bug_when>
    <thetext>&gt; I wonder if we&apos;ve spend more time discussing it

Not my fault that you disagreed with my short and reasonable comment ;-)

&gt; And to elaborate on this point, do we have any sanitization like this anywhere?

We sanitize paths with realpath in some places, although that&apos;s not quite right API to use, and not really relevant here.

Also, we have custom sanitization in code like this &lt;http://trac.webkit.org/changeset/146902/trunk/Source/WebKit2/PluginProcess/mac/PluginProcessMac.mm&gt; (which is not really relevant either, as slashes are already escaped by encodeForFileName).

&gt; Or should I just build it in to WK2/DatabaseProcess locally?

I can&apos;t think of any existing code, WebKit rarely creates files or directories. And I don&apos;t see how anything really bad could happen (famous last words). As there aren&apos;t slashes, it looks like the only thing a rogue page WebProcess might do is replace one of the components with &quot;..&quot;, and thus manipulate files at a higher level than it should (but still within the root directory, because there will be sandbox).

So maybe it could prevent another page from using IndexedDB by preemptively creating a file with the name reserved for that page&apos;s origin. Or if there are any additional files WebKit creates in the hierarchy, it could mess with those.

Again, I don&apos;t think that there is any immediate impact, it&apos;s just that the code looks fragile without explicit sanitization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957094</commentid>
    <comment_count>17</comment_count>
      <attachid>218554</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-05 17:08:12 -0800</bug_when>
    <thetext>Created attachment 218554
Patch v2 - Incorporate all feedback besides CrossThreadCopier

This incorporates all feedback except for looking in to CrossThreadCopier.  I&apos;m looking more closely at that now, but just wanted another EWS pass on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957686</commentid>
    <comment_count>18</comment_count>
      <attachid>218554</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-08 12:00:57 -0800</bug_when>
    <thetext>Comment on attachment 218554
Patch v2 - Incorporate all feedback besides CrossThreadCopier

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

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:109
&gt; +    // FIXME: We should come up with a better idiom for safely copying strings across threads.

As discussed in person, the better idiom is to use tasks that invoke CrossThreadCopier automatically, not a WorkQueue.

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:129
&gt; +    return pathByAppendingComponent(m_indexedDatabaseDirectory, relativePath);

This is a misuse of pathByAppendingComponent - this function only adds one component, not a subpath.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:148
&gt; +            MutexLocker locker(m_metadataMutex);

I&apos;m not sure what the design here is. As noted below, m_metadataMutex is not taken by any code outside this function. But even if it were, I don&apos;t see how it would help. Did you intend to use a condition variable?

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:174
&gt; +    ASSERT(!m_metadata);

No m_metadataMutex locking?

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:182
&gt; +    m_metadata = m_backingStore-&gt;getOrEstablishMetadata();

No m_metadataMutex locking?

&gt; Source/WebKit2/Shared/SecurityOriginData.h:53
&gt; +    // Returns a serialized string that is appropriate for use as a unique filename
&gt; +    String databaseFilenameIdentifier() const;
&gt; +
&gt; +    // Returns true if this origin can use the same databases as the given origin.
&gt; +    bool canShareDatabases(const SecurityOriginData&amp;) const;

What is the difference between SecurityOrigin and SecurityOriginData? I didn&apos;t expect to see any policy decisions made by a &quot;Data&quot; class, which sounds like maybe it&apos;s for temporary objects used in message passing only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958800</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 11:00:43 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 218554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218554&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:109
&gt; &gt; +    // FIXME: We should come up with a better idiom for safely copying strings across threads.
&gt; 
&gt; As discussed in person, the better idiom is to use tasks that invoke CrossThreadCopier automatically, not a WorkQueue.

New patch coming up that does this.

&gt; &gt; Source/WebKit2/Shared/SecurityOriginData.h:53
&gt; &gt; +    // Returns a serialized string that is appropriate for use as a unique filename
&gt; &gt; +    String databaseFilenameIdentifier() const;
&gt; &gt; +
&gt; &gt; +    // Returns true if this origin can use the same databases as the given origin.
&gt; &gt; +    bool canShareDatabases(const SecurityOriginData&amp;) const;
&gt; 
&gt; What is the difference between SecurityOrigin and SecurityOriginData? I didn&apos;t expect to see any policy decisions made by a &quot;Data&quot; class, which sounds like maybe it&apos;s for temporary objects used in message passing only.

In general WK2 works in terms of SecurityOriginData objects and tries not to pretend they are SecurityOrigins because:
1 - Don&apos;t have the full fidelity of a SecurityOrigin
2 - They often exist in a different process from the originating SecurityOrigin
3 - Changes to the originating SecurityOrigin (via events in the WebProcess) are not reflected in the SecurityOriginData.

The policy could just as easily be put on WebCore::SecurityOrigin, but I think we&apos;d fall into a trap of converting SecurityOriginData back into SecurityOrigin then assuming we can do more with it than we can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958808</commentid>
    <comment_count>20</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 11:10:43 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:129
&gt; &gt; +    return pathByAppendingComponent(m_indexedDatabaseDirectory, relativePath);
&gt; 
&gt; This is a misuse of pathByAppendingComponent - this function only adds one component, not a subpath.

Perhaps this is a concern of semantics - How is a &quot;subpath&quot; not a &quot;component&quot;?

I could rename the method to pathByAppendingSubpath(), but it&apos;s implementation would remain the same (I believe)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958842</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-11 11:50:01 -0800</bug_when>
    <thetext>&gt; Perhaps this is a concern of semantics - How is a &quot;subpath&quot; not a &quot;component&quot;?

A path component is a file or directory name I think.

&gt; I could rename the method to pathByAppendingSubpath(), but it&apos;s implementation would remain the same (I believe)

A function with that name would have to be more resilient - what will it do when called as pathByAppendingSubpath(&quot;/foo/bar&quot;)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958854</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 12:13:25 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; Perhaps this is a concern of semantics - How is a &quot;subpath&quot; not a &quot;component&quot;?
&gt; 
&gt; A path component is a file or directory name I think.

Those are atomic components, sure, but I would argue a subpath is a non-atomic component.

&gt; &gt; I could rename the method to pathByAppendingSubpath(), but it&apos;s implementation would remain the same (I believe)
&gt; 
&gt; A function with that name would have to be more resilient - what will it do when called as pathByAppendingSubpath(&quot;/foo/bar&quot;)?

Probably fail the same way that pathByAppendingComponent(&quot;/foo&quot;) fails today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958856</commentid>
    <comment_count>23</comment_count>
      <attachid>218994</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 12:15:47 -0800</bug_when>
    <thetext>Created attachment 218994
Patch v3 - Message passing for threading with cross thread copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958857</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-11 12:16:46 -0800</bug_when>
    <thetext>Attachment 218994 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&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/indexeddb/IDBDatabaseMetadata.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseMetadata.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.cpp&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h&apos;, u&apos;Source/WebKit2/Shared/AsyncTask.h&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.cpp&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.h&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/AsyncTask.h:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 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>958887</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-11 13:57:35 -0800</bug_when>
    <thetext>&gt; Probably fail the same way that pathByAppendingComponent(&quot;/foo&quot;) fails today.

Well, &quot;/foo&quot; is not a component I think, so it&apos;s not expected that this will work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958935</commentid>
    <comment_count>26</comment_count>
      <attachid>218994</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-12-11 15:01:02 -0800</bug_when>
    <thetext>Comment on attachment 218994
Patch v3 - Message passing for threading with cross thread copying.

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

Thank you on iterating on this code, I find it much, much easier to follow now.

Looks good to me - did you want additional reviewers to take a look?

One thing I don&apos;t quite understand is what guarantees continuing existence of target objects while async requests are in flight. Are there implicit RefPtrs somewhere?

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:103
&gt; +    ensureIndexedDatabaseRelativePathExists(StringImpl::empty());

Still not sure if it&apos;s a great idea do this in DatabaseProcess. UI process has to build the path anyway, so it would be easy for it to also create the directory.

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:110
&gt; +    postDatabaseTask(createAsyncTask(this, &amp;DatabaseProcess::ensurePathExists, absoluteIndexedDatabasePathFromDatabaseRelativePath(relativePath)));

Can createAsyncTask be inside postDatabaseTask?

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:123
&gt; +    return pathByAppendingComponent(m_indexedDatabaseDirectory, relativePath);

Still unhappy. Please at least add a FIXME saying that this is an abuse of this function, and should be made nicer.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:62
&gt; +String UniqueIDBDatabase::filenameForDatabaseName()

I wonder if we should block .DS_Store or any other strange names. Not sure what the best approach is.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:148
&gt; +    if (success)
&gt; +        m_metadata = std::make_unique&lt;IDBDatabaseMetadata&gt;(metadata);
&gt; +
&gt; +    while (!m_pendingMetadataRequests.isEmpty()) {
&gt; +        RefPtr&lt;AsyncRequest&gt; request = m_pendingMetadataRequests.takeFirst();
&gt;          request-&gt;completeRequest();
&gt;      }

I think that this code can enter an infinite loop if success is false, so there is no m_metadata. Client could call getOrEstablishIDBDatabaseMetadata again from its completeRequest() function, and if m_metadata is null, that would just append to m_pendingMetadataRequests, or even create a new task, depending on whether this was the last request.

I think that we need separate bits of data for m_metadata and for whether an attempt to establish it already finished (successfully or not).

&gt; Source/WebKit2/Shared/AsyncTask.h:100
&gt; +

Blank line.

&gt; Source/WebKit2/Shared/SecurityOriginData.cpp:79
&gt; +bool SecurityOriginData::canShareDatabases(const SecurityOriginData&amp; other) const

We might need a better name for SecurityOriginData now (or eventually), something that explains how it&apos;s a SecurityOrigin with limited knowledge about things, just for secondary processes.

&gt; Source/WebKit2/Shared/SecurityOriginData.h:49
&gt; +    // Returns a serialized string that is appropriate for use as a unique filename

I think that &quot;serialized string&quot; is that same thing as &quot;string&quot; :)

&gt; Source/WebKit2/Shared/WebCrossThreadCopier.cpp:36
&gt; +CrossThreadCopierBase&lt;false, false, UniqueIDBDatabaseIdentifier&gt;::Type CrossThreadCopierBase&lt;false, false, UniqueIDBDatabaseIdentifier&gt;::copy(const UniqueIDBDatabaseIdentifier&amp; identifier)

Can we just say what the return type is here, explicitly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958945</commentid>
    <comment_count>27</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 15:25:26 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 218994 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=218994&amp;action=review
&gt; 
&gt; Thank you on iterating on this code, I find it much, much easier to follow now.
&gt; 
&gt; Looks good to me - did you want additional reviewers to take a look?

Once you&apos;re happy, I will be having 2 others take a look at filesystem bits.

&gt; 
&gt; One thing I don&apos;t quite understand is what guarantees continuing existence of target objects while async requests are in flight. Are there implicit RefPtrs somewhere?

Doh!  We need to abort any outstanding AsyncRequests before the UniqueIDBDatabase goes away.

But I&apos;m not sure what a good solution is for AsyncTasks.  Maybe they need to implicitly Ref the UniqueIDBDatabase...

&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:103
&gt; &gt; +    ensureIndexedDatabaseRelativePathExists(StringImpl::empty());
&gt; 
&gt; Still not sure if it&apos;s a great idea do this in DatabaseProcess. UI process has to build the path anyway, so it would be easy for it to also create the directory.
&gt; 
&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:110
&gt; &gt; +    postDatabaseTask(createAsyncTask(this, &amp;DatabaseProcess::ensurePathExists, absoluteIndexedDatabasePathFromDatabaseRelativePath(relativePath)));
&gt; 
&gt; Can createAsyncTask be inside postDatabaseTask?

If I can easily do it with a single variadic template, then I think it&apos;s worthwhile.
If not, I don&apos;t think it&apos;s worthwhile.

&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:123
&gt; &gt; +    return pathByAppendingComponent(m_indexedDatabaseDirectory, relativePath);
&gt; 
&gt; Still unhappy. Please at least add a FIXME saying that this is an abuse of this function, and should be made nicer.

Willdo.

&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:62
&gt; &gt; +String UniqueIDBDatabase::filenameForDatabaseName()
&gt; 
&gt; I wonder if we should block .DS_Store or any other strange names. Not sure what the best approach is.

I&apos;m not sure, either.
 
&gt; &gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:148
&gt; &gt; +    if (success)
&gt; &gt; +        m_metadata = std::make_unique&lt;IDBDatabaseMetadata&gt;(metadata);
&gt; &gt; +
&gt; &gt; +    while (!m_pendingMetadataRequests.isEmpty()) {
&gt; &gt; +        RefPtr&lt;AsyncRequest&gt; request = m_pendingMetadataRequests.takeFirst();
&gt; &gt;          request-&gt;completeRequest();
&gt; &gt;      }
&gt; 
&gt; I think that this code can enter an infinite loop if success is false, so there is no m_metadata. Client could call getOrEstablishIDBDatabaseMetadata again from its completeRequest() function, and if m_metadata is null, that would just append to m_pendingMetadataRequests, or even create a new task, depending on whether this was the last request.
&gt; 
&gt; I think that we need separate bits of data for m_metadata and for whether an attempt to establish it already finished (successfully or not).

I agree on the theoretical problem with future changes, but don&apos;t see it happening with the code as-is.

It makes sense to keep a separate bit.  Will do.

&gt; &gt; Source/WebKit2/Shared/SecurityOriginData.cpp:79
&gt; &gt; +bool SecurityOriginData::canShareDatabases(const SecurityOriginData&amp; other) const
&gt; 
&gt; We might need a better name for SecurityOriginData now (or eventually), something that explains how it&apos;s a SecurityOrigin with limited knowledge about things, just for secondary processes.

I agree.  Suggestions?

&gt; &gt; Source/WebKit2/Shared/SecurityOriginData.h:49
&gt; &gt; +    // Returns a serialized string that is appropriate for use as a unique filename
&gt; 
&gt; I think that &quot;serialized string&quot; is that same thing as &quot;string&quot; :)

Fixed

&gt; &gt; Source/WebKit2/Shared/WebCrossThreadCopier.cpp:36
&gt; &gt; +CrossThreadCopierBase&lt;false, false, UniqueIDBDatabaseIdentifier&gt;::Type CrossThreadCopierBase&lt;false, false, UniqueIDBDatabaseIdentifier&gt;::copy(const UniqueIDBDatabaseIdentifier&amp; identifier)
&gt; 
&gt; Can we just say what the return type is here, explicitly?

Sure. I originally was copying the pattern from WebCore/CrossThreadCopier for consistency, but the WebKit file can be a clean break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958974</commentid>
    <comment_count>28</comment_count>
      <attachid>219019</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 17:05:44 -0800</bug_when>
    <thetext>Created attachment 219019
Patch v4 - More code is better, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958976</commentid>
    <comment_count>29</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 17:06:21 -0800</bug_when>
    <thetext>Patch v4 answers the AsyncRequest question, but doesn&apos;t answer the AsyncTask question...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958978</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-11 17:07:05 -0800</bug_when>
    <thetext>Attachment 219019 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&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/indexeddb/IDBDatabaseMetadata.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseMetadata.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.cpp&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h&apos;, u&apos;Source/WebKit2/Shared/AsyncTask.h&apos;, u&apos;Source/WebKit2/Shared/FileSystemHelper.cpp&apos;, u&apos;Source/WebKit2/Shared/FileSystemHelper.h&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.cpp&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.h&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.h&apos;, u&apos;Source/WebKit2/UIProcess/WebContext.cpp&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:128:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/AsyncTask.h:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 32 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>959055</commentid>
    <comment_count>31</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-11 22:14:26 -0800</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=125616 for the check-webkit-style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959227</commentid>
    <comment_count>32</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-12 10:24:31 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Patch v4 answers the AsyncRequest question, but doesn&apos;t answer the AsyncTask question...

I have a solution for the AsyncTask question with clean database shutdown.  Patch v5 on its way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959231</commentid>
    <comment_count>33</comment_count>
      <attachid>219094</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-12 10:33:09 -0800</bug_when>
    <thetext>Created attachment 219094
Patch v5 - Landing candidate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959233</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-12 10:35:55 -0800</bug_when>
    <thetext>Attachment 219094 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&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/indexeddb/IDBDatabaseMetadata.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseMetadata.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.cpp&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h&apos;, u&apos;Source/WebKit2/Shared/AsyncTask.h&apos;, u&apos;Source/WebKit2/Shared/FileSystemHelper.cpp&apos;, u&apos;Source/WebKit2/Shared/FileSystemHelper.h&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.cpp&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.h&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.h&apos;, u&apos;Source/WebKit2/UIProcess/WebContext.cpp&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:148:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/AsyncTask.h:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 32 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>959252</commentid>
    <comment_count>35</comment_count>
      <attachid>219099</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-12 11:09:10 -0800</bug_when>
    <thetext>Created attachment 219099
Patch v6 - Move database directory creation back into the database process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959254</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-12 11:12:14 -0800</bug_when>
    <thetext>Attachment 219099 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&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/indexeddb/IDBDatabaseMetadata.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseMetadata.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBKeyPath.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.cpp&apos;, u&apos;Source/WebCore/platform/CrossThreadCopier.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/DatabaseProcess.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.h&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp&apos;, u&apos;Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h&apos;, u&apos;Source/WebKit2/Shared/AsyncTask.h&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.cpp&apos;, u&apos;Source/WebKit2/Shared/SecurityOriginData.h&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.cpp&apos;, u&apos;Source/WebKit2/Shared/WebCrossThreadCopier.h&apos;, u&apos;Source/WebKit2/WebKit2.xcodeproj/project.pbxproj&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:148:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/Shared/AsyncTask.h:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 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>959327</commentid>
    <comment_count>37</comment_count>
      <attachid>219099</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-12-12 13:42:14 -0800</bug_when>
    <thetext>Comment on attachment 219099
Patch v6 - Move database directory creation back into the database process.

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

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseMetadata.cpp:45
&gt; +    ObjectStoreMap::const_iterator i = objectStores.begin();
&gt; +    ObjectStoreMap::const_iterator end = objectStores.end();
&gt; +    for (; i != end; ++i)
&gt; +        result.objectStores.set(i-&gt;key, i-&gt;value.isolatedCopy());

Please move the declarations inside the loop:

for (auto it = objectStores.begin(), end = objectStores.end(); it != end; ++it)

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseMetadata.cpp:63
&gt; +    IndexMap::const_iterator i = indexes.begin();
&gt; +    IndexMap::const_iterator end = indexes.end();
&gt; +    for (; i != end; ++i)
&gt; +        result.indexes.set(i-&gt;key, i-&gt;value.isolatedCopy());

Same thing here.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp:257
&gt; +    result.m_array.reserveCapacity(m_array.size());

This should use reserveInitialCapacity.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyPath.cpp:259
&gt; +        result.m_array.append(m_array[i].isolatedCopy());

This should use uncheckedAppend.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:80
&gt; +    ASSERT(!m_identifier.databaseName().isNull());
&gt; +
&gt; +    if (m_identifier.databaseName().isEmpty())
&gt; +        return &quot;%00&quot;;
&gt; +
&gt; +    String filename = encodeForFileName(m_identifier.databaseName());
&gt; +    if (filename == &quot;.&quot;)
&gt; +        return &quot;%2E&quot;;
&gt; +
&gt; +    if (filename == &quot;..&quot;)
&gt; +        return &quot;%2E%2E&quot;;
&gt; +
&gt; +    return filename;

Escape all the dots (Says Tim).

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:255
&gt; +        ref();

I think you should use a protection variable here instead of explicitly calling ref()/deref().

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:147
&gt; +std::unique_ptr&lt;WebCore::SQLiteDatabase&gt; UniqueIDBDatabaseBackingStoreSQLite::openSQLiteDatabaseAtPath(const String&amp; path)

No need for WebCore:: here.

&gt; Source/WebKit2/Shared/AsyncTask.h:48
&gt; +    AsyncTaskImpl(T* const callee, void (T::*method)(Arguments...), Arguments&amp;&amp;... arguments)

I think callee should be a reference here (and everywhere else).

&gt; Source/WebKit2/Shared/SecurityOriginData.h:53
&gt; +    // Returns a string that is appropriate for use as a unique filename
&gt; +    String databaseFilenameIdentifier() const;
&gt; +
&gt; +    // Returns true if this origin can use the same databases as the given origin.
&gt; +    bool canShareDatabases(const SecurityOriginData&amp;) const;

We think these should be moved to the IDB code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959385</commentid>
    <comment_count>38</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-12 15:52:51 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebKit2/Shared/AsyncTask.h:48
&gt; &gt; +    AsyncTaskImpl(T* const callee, void (T::*method)(Arguments...), Arguments&amp;&amp;... arguments)
&gt; 
&gt; I think callee should be a reference here (and everywhere else).

This causes problems with deleted constructors, and I&apos;m not sure how to explore the fix...  I changed the createAsyncTask() helpers to take a reference, but left the AsyncTaskImpl class taking a pointer.

I&apos;m going to land it like this, but would love to have help resolving it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959401</commentid>
    <comment_count>39</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-12-12 16:39:26 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/160517</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218462</attachid>
            <date>2013-12-04 15:23:33 -0800</date>
            <delta_ts>2013-12-05 17:08:12 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>39697</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNzU2NTA5Zi4uMGNjMjI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMi0wNCAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzIEluZGV4ZWREQjogRXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBFeHBvcnQgdG9VSW50NjRTdHJpY3QoKS4KKwogMjAxMy0xMi0wNCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgVVNFKFNF
Q1VSSVRZX0ZSQU1FV09SSykgd2l0aCBmaW5lci1ncmFpbmVkIGRlZmluZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCmluZGV4IDNjNDI0YjQuLmIzZDg0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aApAQCAtMzY4LDcgKzM2OCw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
aW50IHRvSW50U3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7CiAgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHVuc2lnbmVkIHRvVUludFN0cmljdChib29sKiBvayA9IDAs
IGludCBiYXNlID0gMTApIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBpbnQ2NF90
IHRvSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKLSAgICB1
aW50NjRfdCB0b1VJbnQ2NFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0
OworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB1aW50NjRfdCB0b1VJbnQ2NFN0cmljdChib29s
KiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogICAgIGludHB0cl90IHRvSW50UHRyU3Ry
aWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7CiAKICAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgaW50IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTEzY2E5Ni4uY2FmNTBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTEyLTA0
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBEYXRhYmFzZVBy
b2Nlc3MgSW5kZXhlZERCOiBFc3RhYmxpc2ggYSBtZXRhZGF0YSBiYWNraW5nIHN0b3JlIG9uIGRp
c2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTI1
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46IEV4cG9ydCBuZWVkZWQgc3ltYm9scy4KKwogMjAxMy0xMi0wNCAgT2xpdmVy
IEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIHN0YXRpYyBnZXR0
ZXIgZnVuY3Rpb24gcHJvdG90eXBlIHRvIGluY2x1ZGUgdGhpc1ZhbHVlIGluIGFkZGl0aW9uIHRv
IHRoZSBiYXNlIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBhYTM2OWZiLi4wM2VlMmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMzY0LDkgKzM2NCwxMSBAQCBfX1pON1dlYkNvcmUx
NFJlc291cmNlTG9hZGVyMTRjYW5jZWxsZWRFcnJvckV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNl
TG9hZGVyMzJkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUVSS05TXzIzQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlTG9hZGVyNmNhbmNlbEV2CiBf
X1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNlMTF0YWJsZUV4aXN0c0VSS04zV1RGNlN0cmluZ0UK
K19fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2UxMmxhc3RFcnJvck1zZ0V2CiBfX1pON1dlYkNv
cmUxNFNRTGl0ZURhdGFiYXNlMTRleGVjdXRlQ29tbWFuZEVSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2U0b3BlbkVSS04zV1RGNlN0cmluZ0ViCiBfX1pON1dlYkNv
cmUxNFNRTGl0ZURhdGFiYXNlNWNsb3NlRXYKK19fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2U5
bGFzdEVycm9yRXYKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2VDMUV2CiBfX1pON1dlYkNv
cmUxNFNRTGl0ZURhdGFiYXNlRDFFdgogX19aTjdXZWJDb3JlMTRTY2hlbWVSZWdpc3RyeTI0cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsRVJLTjNXVEY2U3RyaW5nRQpAQCAtNTcyLDEyICs1NzQsMTQg
QEAgX19aTjdXZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VDMUV2CiBfX1pON1dlYkNvcmUxNVJlc291
cmNlUmVxdWVzdDIxaHR0cFBpcGVsaW5pbmdFbmFibGVkRXYKIF9fWk43V2ViQ29yZTE1UmVzb3Vy
Y2VSZXF1ZXN0MjRzZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWRFYgogX19aTjdXZWJDb3JlMTVTUUxp
dGVTdGF0ZW1lbnQxMmdldENvbHVtbkludEVpCitfX1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVu
dDEyaXNDb2x1bW5OdWxsRWkKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTNnZXRDb2x1
bW5UZXh0RWkKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTRleGVjdXRlQ29tbWFuZEV2
CiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDIxZ2V0Q29sdW1uQmxvYkFzU3RyaW5nRWkK
IF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MjJpc0NvbHVtbkRlY2xhcmVkQXNCbG9iRWkK
IF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50NHN0ZXBFdgogX19aTjdXZWJDb3JlMTVTUUxp
dGVTdGF0ZW1lbnQ1cmVzZXRFdgorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ3YmluZElu
dEVpaQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ3cHJlcGFyZUV2CiBfX1pON1dlYkNv
cmUxNVNRTGl0ZVN0YXRlbWVudDhiaW5kQmxvYkVpUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNv
cmUxNVNRTGl0ZVN0YXRlbWVudDhiaW5kVGV4dEVpUktOM1dURjZTdHJpbmdFCkBAIC02OTIsNiAr
Njk2LDcgQEAgX19aTjdXZWJDb3JlMTdTUUxpdGVUcmFuc2FjdGlvbkQxRXYKIF9fWk43V2ViQ29y
ZTE3U3VicmVzb3VyY2VMb2FkZXI2Y3JlYXRlRVBOU181RnJhbWVFUE5TXzE0Q2FjaGVkUmVzb3Vy
Y2VFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzIxUmVzb3VyY2VMb2FkZXJPcHRpb25zRQog
X19aTjdXZWJDb3JlMTdjYWNoZURPTVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQ
TjNKU0M5U3RydWN0dXJlRVBLTlMyXzlDbGFzc0luZm9FCiBfX1pON1dlYkNvcmUxN2RyYXdMYXll
ckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxhdGZvcm1DQUxheWVyRVJOM1dURjZWZWN0b3JJ
TlNfOUZsb2F0UmVjdEVMbTVFTlM0XzE1Q3Jhc2hPbk92ZXJmbG93RUVFCitfX1pON1dlYkNvcmUx
N2VuY29kZUZvckZpbGVOYW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTdsYW5ndWFn
ZURpZENoYW5nZUV2CiBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3Ry
aW5nRVJpCiBfX1pON1dlYkNvcmUxN3NldENvb2tpZXNGcm9tRE9NRVJLTlNfMjFOZXR3b3JrU3Rv
cmFnZVNlc3Npb25FUktOU18zVVJMRVM1X1JLTjNXVEY2U3RyaW5nRQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDIw
NGEyMDYuLjZkNjE3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxMy0xMi0wNCAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzIEluZGV4ZWREQjogRXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgRGF0
YWJhc2VQcm9jZXNzIGFscmVhZHkgaGFzIGFuICJJbmRleGVkIERhdGFiYXNlIHBhdGgiLgorICAg
ICAgICBFYWNoIFNlY3VyaXR5T3JpZ2luIHdpdGggaW5kZXhlZCBkYXRhYmFzZXMgd2lsbCBoYXZl
IGEgc3ViZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXRoLgorICAgICAgICBFYWNoIGluZGV4ZWQgZGF0
YWJhc2Ugd2lsbCBoYXZlIGEgc3ViZGlyZWN0b3J5IHVuZGVyIGl0cyBTZWN1cml0eU9yaWdpbidz
IHBhdGguCisgICAgICAgIEluc2lkZSB0aGF0IGRpcmVjdG9yeSB3aWxsIGV4aXN0ICgxKSBtZXRh
ZGF0YSBkYXRhYmFzZSwgYW5kIDAtTiBPYmplY3RTdG9yZSBkYXRhYmFzZXMuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBlc3RhYmxpc2hlcyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgdGhlICgx
KSBtZXRhZGF0YSBkYXRhYmFzZS4KKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFz
ZVByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmluaXRpYWxp
emVEYXRhYmFzZVByb2Nlc3MpOiBBc3luY2hyb25vdXNseSBlbnN1cmUgdGhlIGluZGV4ZWQgZGF0
YWJhc2UgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNz
OjplbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMpOiBBbGxvdyBhbnlvbmUg
dG8gbWFrZSBuZWNlc3NhcnkgZGlyZWN0b3JpZXMgcmVsYXRpdmUgdG8KKyAgICAgICAgICB0aGUg
aW5kZXhlZCBkYXRhYmFzZSBkaXJlY3RvcnkuCisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJv
Y2Vzczo6ZW5zdXJlUGF0aEV4aXN0c0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJh
c2VQcm9jZXNzOjpmdWxsSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0
aCk6IEluc3RlYWQgb2YgZXhwb3NpbmcgdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5LCAK
KyAgICAgICAgICBnaXZlIERhdGFiYXNlUHJvY2VzcyBhIG1ldGhvZCB0byBhbGxvdyBvdGhlcnMg
dG8gY29tcHV0ZSBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0
b3J5LgorCisgICAgICAgIEluc3RlYWQgb2YgZmFpbGluZyB0byByZXR1cm4gSURCRGF0YWJhc2VN
ZXRhZGF0YSwgY3JlYXRlIGEgU1FMaXRlIGJhY2tpbmcgc3RvcmUgYW5kIGFjdHVhbGx5IGdldCBt
ZXRhZGF0YSBmcm9tIGl0OgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5p
cXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6
VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZnVsbERhdGFiYXNlRGlyZWN0b3J5KToKKyAg
ICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisK
KyAgICAgICAgQWRkIGEgdmlydHVhbCBiYWNraW5nIHN0b3JlIGludGVyZmFjZSBmb3IgVW5pcXVl
SURCRGF0YWJhc2UgdG8gdXNlLgorICAgICAgICBBbGwgYWN0dWFsIGkvbyBtdXN0IGdvIHRocm91
Z2ggdGhpcyBpbnRlcmZhY2UuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9V
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZTo6flVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlKToK
KworICAgICAgICBBZGQgYSBTUUxpdGUgYmFja2luZyBzdG9yZSBpbXBsZW1lbnRhdGlvbgorICAg
ICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSk6CisgICAgICAgIChXZWJL
aXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpleHRyYWN0RXhpc3RpbmdN
ZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlOjpvcGVuU1FMaXRlRGF0YWJhc2VBdFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hNZXRhZGF0YSk6
CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaDoKKworICAgICAgICBUbyBoZWxwIHdpdGggdGhyZWFk
IHNhZmV0eSwgYWRkIGFuIGlzb2xhdGVkQ29weSB0byBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXI6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXI6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaDoKKworICAgICAgICBBZGQgc29tZSBjb252
ZW5pZW5jZSBtZXRob2RzIHRvIFNlY3VyaXR5T3JpZ2luRGF0YToKKyAgICAgICAgKiBTaGFyZWQv
U2VjdXJpdHlPcmlnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2VjdXJpdHlPcmlnaW5E
YXRhOjpkYXRhYmFzZUZpbGVuYW1lSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6Om9wZXJh
dG9yIT0pOgorICAgICAgICAqIFNoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaDoKKworICAgICAg
ICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0xMi0wNCAgT2xp
dmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIHN0YXRpYyBn
ZXR0ZXIgZnVuY3Rpb24gcHJvdG90eXBlIHRvIGluY2x1ZGUgdGhpc1ZhbHVlIGluIGFkZGl0aW9u
IHRvIHRoZSBiYXNlIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvRGF0YWJhc2VQcm9jZXNzLmNwcAppbmRleCBiMWJkYzdjLi4yZTgzYWU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAt
MzIsNiArMzIsMTAgQEAKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAi
VW5pcXVlSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTkzLDcgKzk3LDM2IEBAIHZvaWQgRGF0YWJhc2VQcm9j
ZXNzOjpyZW1vdmVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZSYgZGF0
YWJhc2UpCiAKIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjppbml0aWFsaXplRGF0YWJhc2VQcm9jZXNz
KGNvbnN0IERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsK
LSAgICBtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5OworICAgIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNvbGF0ZWRDb3B5KCk7CisKKyAgICBlbnN1cmVJ
bmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMoIiIpOworfQorCit2b2lkIERhdGFiYXNl
UHJvY2Vzczo6ZW5zdXJlSW5kZXhlZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhpc3RzKGNvbnN0IFN0
cmluZyYgcmVsYXRpdmVQYXRoKQoreworICAgIFN0cmluZyBwYXRoID0gZnVsbEluZGV4ZWREYXRh
YmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoKTsKKworICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgY29tZSB1cCB3aXRoIGEgYmV0dGVyIGlkaW9tIGZvciBzYWZlbHkg
Y29weWluZyBzdHJpbmdzIGFjcm9zcyB0aHJlYWRzLgorICAgIGlmICghcGF0aC5pbXBsKCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZURhdGFiYXNlUmVsYXRp
dmVQYXRoRXhpc3RzKCkgLSBDb21wbGV0ZSBwYXRoIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGNvcHkgPSBwYXRoLmltcGwoKS0+aXNv
bGF0ZWRDb3B5KCk7CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChiaW5kKCZEYXRhYmFzZVByb2Nl
c3M6OmVuc3VyZVBhdGhFeGlzdHNJbnRlcm5hbCwgdGhpcywgY29weS5yZWxlYXNlKCkpKTsKK30K
Kwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHNJbnRlcm5hbChTdHJpbmdJ
bXBsKiBwYXRoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFt
YWtlQWxsRGlyZWN0b3JpZXMocGF0aCkpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1h
a2UgYWxsIGRpcmVjdG9yaWVzIGZvciBwYXRoICclcyciLCBwYXRoLT51dGY4KCkuZGF0YSgpKTsK
K30KKworU3RyaW5nIERhdGFiYXNlUHJvY2Vzczo6ZnVsbEluZGV4ZWREYXRhYmFzZVBhdGhGcm9t
RGF0YWJhc2VSZWxhdGl2ZVBhdGgoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpCit7CisgICAg
cmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSwgcmVsYXRpdmVQYXRoKTsKIH0KIAogdm9pZCBEYXRhYmFzZVByb2Nlc3M6OmNyZWF0ZURhdGFi
YXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggODM3N2E0Yy4uYjllZmU5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaApAQCAt
NTIsNiArNTIsOSBAQCBwdWJsaWM6CiAKICAgICBXb3JrUXVldWUmIHF1ZXVlKCkgY29uc3QgeyBy
ZXR1cm4gY29uc3RfY2FzdDxXb3JrUXVldWUmPihtX3F1ZXVlLmdldCgpKTsgfQogCisgICAgdm9p
ZCBlbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMoY29uc3QgU3RyaW5nJik7
CisgICAgU3RyaW5nIGZ1bGxJbmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQ
YXRoKGNvbnN0IFN0cmluZyYpOworCiBwcml2YXRlOgogICAgIERhdGFiYXNlUHJvY2VzcygpOwog
ICAgIH5EYXRhYmFzZVByb2Nlc3MoKTsKQEAgLTcyLDYgKzc1LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGluaXRpYWxpemVEYXRhYmFzZVByb2Nlc3MoY29uc3QgRGF0YWJhc2VQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJik7CiAgICAgdm9pZCBjcmVhdGVEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb24oKTsKIAorICAgIC8vIEZvciBleGVjdXRpb24gb24gd29yayBxdWV1ZSB0aHJlYWQgb25s
eQorICAgIHZvaWQgZW5zdXJlUGF0aEV4aXN0c0ludGVybmFsKFN0cmluZ0ltcGwqKTsKKwogICAg
IFZlY3RvcjxSZWZQdHI8RGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uPj4gbV9kYXRhYmFz
ZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwogCiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5p
cXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggYmM3MjQ1Yy4uZDJjZWZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJE
YXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJBc3lu
Y1JlcXVlc3QuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3MuaCIKICNpbmNsdWRlICJEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlTWV0YWRhdGEuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogCkBAIC00Miw2ICs0NCwxNiBAQCBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVl
SURCRGF0YWJhc2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaQog
ICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX3Byb2Nlc3NpbmdEYXRhYmFz
ZVF1ZXVlUmVxdWVzdHMoZmFsc2UpCiB7CisgICAgLy8gT3VyIGN1cnJlbnQgcG9saWN5IGlzIHRo
YXQgM3JkIHBhcnR5IGRhdGFiYXNlcyBhcmUgaW4tbWVtb3J5IG9ubHkuCisgICAgLy8gSWYgdGhh
dCBwb2xpY3kgbmVlZHMgdG8gYmVjb21lIG1vcmUgZmxleGlibGUgaW4gdGhlIGZ1dHVyZSwgdGhp
cyBpcyB3aGVyZSB3ZSB3aWxsIGFkZCB0aGF0IGZsZXhpYmlsaXR5LgorICAgIG1faW5NZW1vcnkg
PSBpZGVudGlmaWVyLm9wZW5pbmdPcmlnaW4oKSAhPSBpZGVudGlmaWVyLm1haW5GcmFtZU9yaWdp
bigpOworICAgIGlmIChtX2luTWVtb3J5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFYWNo
IHVuaXF1ZSBJbmRleGVkIERhdGFiYXNlIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSBuYW1lZCBmb3Ig
dGhlIGRhdGFiYXNlLCB3aGljaCBleGlzdHMgaW4gYSBkaXJlY3RvcnkgcmVwcmVzZW50aW5nIGl0
cyBvcGVuaW5nIG9yaWdpbi4KKyAgICBtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkgPSBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoaWRlbnRpZmllci5vcGVuaW5nT3JpZ2luKCkuZGF0YWJhc2VG
aWxlbmFtZUlkZW50aWZpZXIoKSwgZW5jb2RlRm9yRmlsZU5hbWUoaWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkpOworCisgICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5lbnN1cmVJbmRleGVk
RGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMobV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsK
IH0KIAogVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSgpCkBAIC05OCw5ICsx
MTAsMjIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHJvY2Vzc0RhdGFiYXNlUmVxdWVzdFF1
ZXVlKCkKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFz
ZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZChib29sLCBjb25zdCBJREJEYXRhYmFzZU1ldGFk
YXRhJik+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICAvLyBJZiB0aGUgYmFja2luZyBzdG9y
ZSBpcyBhbHJlYWR5IG9wZW4gYW5kIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgcmVhZHkg
dG8gZ28sIGp1c3QgcmV0dXJuIGl0IG5vdy4KKyAgICBpZiAobV9tZXRhZGF0YSkgeworICAgICAg
ICBjb21wbGV0aW9uQ2FsbGJhY2sodHJ1ZSwgSURCRGF0YWJhc2VNZXRhZGF0YSgqbV9tZXRhZGF0
YSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlLCBlbnF1ZXVl
IGEgcmVxdWVzdCB0byBvcGVuIHRoZSBiYWNraW5nIHN0b3JlIGFuZCByZWFkIGluIHRoZSBtZXRh
ZGF0YS4KICAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1w
bDw+OjpjcmVhdGUoW2NvbXBsZXRpb25DYWxsYmFjaywgdGhpc10oKSB7CisgICAgICAgIG9wZW5C
YWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoKTsKKwogICAgICAgICBJREJEYXRhYmFzZU1ldGFk
YXRhIG1ldGFkYXRhOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRPckVzdGFibGlzaElEQkRh
dGFiYXNlTWV0YWRhdGFJbnRlcm5hbChtZXRhZGF0YSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOworICAgICAgICBpZiAobV9tZXRhZGF0YSkgeworICAgICAgICAgICAgbWV0YWRhdGEg
PSAqbV9tZXRhZGF0YTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICB9CiAK
ICAgICAgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChbbWV0YWRhdGEsIHN1Y2Nlc3MsIGNv
bXBsZXRpb25DYWxsYmFja10oKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soc3Vj
Y2VzcywgbWV0YWRhdGEpOwpAQCAtMTE3LDEyICsxNDIsMjQgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rpb248dm9p
ZChib28KICAgICBlbnF1ZXVlRGF0YWJhc2VRdWV1ZVJlcXVlc3QocmVxdWVzdC5yZWxlYXNlKCkp
OwogfQogCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNl
TWV0YWRhdGFJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJikKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoKQog
ewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBzdWNjZXNzZnVsbHkgY2FsbGVkIGJ5IG1l
c3NhZ2luZyBmcm9tIHRoZSBXZWJQcm9jZXNzLCBhbmQgY2FsbHMgYmFjayB3aXRoIGR1bW15IGRh
dGEuCi0gICAgLy8gTmVlZHMgcmVhbCBpbXBsZW1lbnRhdGlvbi4KICAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9y
ZSk7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhKTsKKworICAgIGlmIChtX2luTWVtb3J5KSB7Cisg
ICAgICAgIExPR19FUlJPUigiU3VwcG9ydCBmb3IgaW4tbWVtb3J5IGRhdGFiYXNlcyBub3QgeWV0
IGltcGxlbWVudGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tpbmdT
dG9yZSA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGUoKnRoaXMp
OworICAgIG1fbWV0YWRhdGEgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hNZXRhZGF0
YSgpOworfQorCitTdHJpbmcgVW5pcXVlSURCRGF0YWJhc2U6OmZ1bGxEYXRhYmFzZURpcmVjdG9y
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuZnVsbElu
ZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgobV9kYXRhYmFzZVJlbGF0
aXZlRGlyZWN0b3J5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRh
dGFiYXNlLmgKaW5kZXggM2RlMDEwNC4uYWI2OTc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2Uu
aApAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQXN5bmNSZXF1
ZXN0OwogY2xhc3MgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjsKK2NsYXNzIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlOwogCiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogCkBA
IC01Nyw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICB+VW5pcXVlSURCRGF0YWJhc2UoKTsKIAogICAg
IGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIFN0cmluZyBmdWxsRGF0YWJhc2VEaXJlY3Rvcnko
KSBjb25zdDsKIAogICAgIHZvaWQgcmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb24mKTsKICAgICB2b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24mKTsKQEAgLTY4LDYgKzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIFVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAKKyAgICBib29sIG1faW5N
ZW1vcnk7CisgICAgU3RyaW5nIG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeTsKKwogICAgIEhh
c2hTZXQ8UmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25z
OwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX2RhdGFiYXNl
UmVxdWVzdHM7CiAKQEAgLTc1LDExICs4MCwxNyBAQCBwcml2YXRlOgogCiAgICAgLy8gVG8gYmUg
Y2FsbGVkIGZyb20gdGhlIGRhdGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQgb25seQogICAgIHZvaWQg
cHJvY2Vzc0RhdGFiYXNlUmVxdWVzdFF1ZXVlKCk7Ci0gICAgYm9vbCBnZXRPckVzdGFibGlzaElE
QkRhdGFiYXNlTWV0YWRhdGFJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFk
YXRhJik7CisgICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKCk7CisgICAg
dm9pZCBleHRyYWN0RXhpc3RpbmdJREJNZXRhZGF0YSgpOworICAgIHZvaWQgY3JlYXRlQW5kUG9w
dWxhdGVJbml0aWFsRGF0YWJhc2VUYWJsZXMoKTsKIAogICAgIE11dGV4IG1fZGF0YWJhc2VRdWV1
ZVJlcXVlc3RzTXV0ZXg7CiAgICAgRGVxdWU8UmVmUHRyPEFzeW5jUmVxdWVzdD4+IG1fZGF0YWJh
c2VRdWV1ZVJlcXVlc3RzOwogICAgIGJvb2wgbV9wcm9jZXNzaW5nRGF0YWJhc2VRdWV1ZVJlcXVl
c3RzOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+
IG1fbWV0YWRhdGE7CisKKyAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjRiOGQwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUu
aApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZV9oCisjZGVmaW5lIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlX2gK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VT
UykKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K3N0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4geworcHVibGljOgorICAgIHZpcnR1YWwgflVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBnZXRPckVzdGFibGlzaE1ldGFk
YXRhKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisjZW5kaWYg
Ly8gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIuY3BwCmluZGV4IGZmOGJkN2UuLjJhN2E5NTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0
YWJhc2VJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAKQEAgLTc1LDYgKzc1LDIx
IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOjppc051bGwoKSBjb25zdAogICAg
IHJldHVybiBtX2RhdGFiYXNlTmFtZS5pc051bGwoKTsKIH0KIAorVW5pcXVlSURCRGF0YWJhc2VJ
ZGVudGlmaWVyIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNvbGF0ZWRDb3B5KCkgY29u
c3QKK3sKKyAgICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgcmVzdWx0OworCisgICAgcmVz
dWx0Lm1fZGF0YWJhc2VOYW1lID0gbV9kYXRhYmFzZU5hbWUuaXNvbGF0ZWRDb3B5KCk7CisgICAg
cmVzdWx0Lm1fb3BlbmluZ09yaWdpbi5wcm90b2NvbCA9IG1fb3BlbmluZ09yaWdpbi5wcm90b2Nv
bC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQubV9vcGVuaW5nT3JpZ2luLmhvc3QgPSBtX29w
ZW5pbmdPcmlnaW4uaG9zdC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQubV9vcGVuaW5nT3Jp
Z2luLnBvcnQgPSBtX29wZW5pbmdPcmlnaW4ucG9ydDsKKyAgICByZXN1bHQubV9tYWluRnJhbWVP
cmlnaW4ucHJvdG9jb2wgPSBtX21haW5GcmFtZU9yaWdpbi5wcm90b2NvbC5pc29sYXRlZENvcHko
KTsKKyAgICByZXN1bHQubV9tYWluRnJhbWVPcmlnaW4uaG9zdCA9IG1fbWFpbkZyYW1lT3JpZ2lu
Lmhvc3QuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0Lm1fbWFpbkZyYW1lT3JpZ2luLnBvcnQg
PSBtX21haW5GcmFtZU9yaWdpbi5wb3J0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgYSwgY29uc3Qg
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBiKQogewogICAgIGlmICgmYSA9PSAmYikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oCmluZGV4IGJlYmNkYzQuLmRi
ZjlkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaApAQCAt
NTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0OwogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAorICAgIFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciBpc29sYXRlZENvcHkoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBTdHJp
bmcgbV9kYXRhYmFzZU5hbWU7CiAgICAgU2VjdXJpdHlPcmlnaW5EYXRhIG1fb3BlbmluZ09yaWdp
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
c3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ODFiNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
Y3BwCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgiCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFi
YXNlTWV0YWRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
Ky8vIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbWV0YWRhdGEgc2NoZW1hIGJlaW5nIHVzZWQgaW4g
dGhlIG1ldGFkYXRhIGRhdGFiYXNlCitzdGF0aWMgY29uc3QgaW50IGN1cnJlbnRNZXRhZGF0YVZl
cnNpb24gPSAxOworCitVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6VW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2UmIGRh
dGFiYXNlKQorICAgIDogbV9pZGVudGlmaWVyKGRhdGFiYXNlLmlkZW50aWZpZXIoKS5pc29sYXRl
ZENvcHkoKSkKKyAgICAsIG1fZnVsbERhdGFiYXNlRGlyZWN0b3J5KGRhdGFiYXNlLmZ1bGxEYXRh
YmFzZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpKQoreworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKCkKK3sKKyAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YURCKTsKKyAgICBBU1NF
UlQobV9tZXRhZGF0YURCLT5pc09wZW4oKSk7CisKKyAgICBpZiAoIW1fbWV0YWRhdGFEQi0+ZXhl
Y3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJREJEYXRhYmFzZUluZm8gKGtleSBURVhUIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIFRF
WFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgY3JlYXRlIElEQkRhdGFiYXNlSW5mbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX21ldGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREItPmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21l
dGFkYXRhREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFW
ZXJzaW9uJywgPyk7Iik7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
CisgICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAh
PSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxSZXN1bHREb25l
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0
YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRhdGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX21l
dGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgICAgIG1fbWV0YWRhdGFEQiA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
cWwoKm1fbWV0YWRhdGFEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdE
YXRhYmFzZU5hbWUnLCA/KTsiKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVz
dWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBtX2lkZW50aWZpZXIuZGF0YWJh
c2VOYW1lKCkpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNR
TFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBk
YXRhYmFzZSBuYW1lIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fbWV0
YWRhdGFEQi0+bGFzdEVycm9yKCksIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yTXNnKCkpOworICAg
ICAgICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lv
bnMgYXJlIGRlZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRv
ZXNuJ3Qgc3VwcG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KKyAgICAg
ICAgLy8gVGhlcmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgorICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIsICJJTlNFUlQgSU5UTyBJREJE
YXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJzaW9uJywgPyk7Iik7CisgICAgICAgIGlm
IChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuYmluZFRl
eHQoMSwgU3RyaW5nOjpudW1iZXIoMCkpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBz
cWwuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGluc2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUg
KCVpKSAtICVzIiwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3IoKSwgbV9tZXRhZGF0YURCLT5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgICAgICBtX21ldGFkYXRhREIgPSBudWxscHRyOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlu
aXRpYWwgbWV0YWRhdGEgbWF0Y2hlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgd2UganVzdCBwdXQgaW50
byB0aGUgbWV0YWRhdGEgZGF0YWJhc2UuCisgICAgYXV0byBtZXRhZGF0YSA9IHN0ZDo6bWFrZV91
bmlxdWU8SURCRGF0YWJhc2VNZXRhZGF0YT4oKTsKKyAgICBtZXRhZGF0YS0+bmFtZSA9IG1faWRl
bnRpZmllci5kYXRhYmFzZU5hbWUoKTsKKyAgICBtZXRhZGF0YS0+dmVyc2lvbiA9IDA7CisKKyAg
ICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFk
YXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0aW5n
TWV0YWRhdGEoKQoreworICAgIEFTU0VSVChtX21ldGFkYXRhREIpOworCisgICAgaWYgKCFtX21l
dGFkYXRhREItPnRhYmxlRXhpc3RzKCJJREJEYXRhYmFzZUluZm8iKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIG1ldGFkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRh
YmFzZU1ldGFkYXRhPigpOworICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9t
ZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9
ICdNZXRhZGF0YVZlcnNpb24nOyIpOworICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBtZXRhZGF0YS0+dmVyc2lvbiA9
IHNxbC5nZXRDb2x1bW5JbnQoMCk7CisgICAgfQorICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZv
IFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOworICAgICAgICBpZiAoc3FsLmlzQ29sdW1u
TnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBtZXRhZGF0YS0+
bmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBpZiAobWV0YWRhdGEtPm5hbWUg
IT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IkRhdGFiYXNlIG5hbWUgaW4gdGhlIG1ldGFkYXRhIGRhdGFiYXNlICgnJXMnKSBkb2VzIG5vdCBt
YXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVzJykiLCBtZXRhZGF0YS0+bmFtZS51dGY4KCkuZGF0
YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIlNFTEVDVCB2YWx1ZSBGUk9NIElEQkRh
dGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJzaW9uJzsiKTsKKyAgICAgICAgaWYg
KHNxbC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSBzcWwuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAg
Ym9vbCBvazsKKyAgICAgICAgbWV0YWRhdGEtPnZlcnNpb24gPSBzdHJpbmdWZXJzaW9uLnRvVUlu
dDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBkb2VzIG5vdCBjbGVhbmx5IGNvbnZl
cnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVyc2lvbiIsIHN0cmluZ1ZlcnNpb24u
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIHdlIHNhdmUgT2JqZWN0U3RvcmVzIGFuZCBpbmRl
eGVzIHdlIG5lZWQgdG8gZXh0cmFjdCB0aGVpciBtZXRhZGF0YSwgYWxzby4KKyAgICByZXR1cm4g
bWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4g
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6Om9wZW5TUUxpdGVEYXRhYmFzZUF0
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYXV0byBzcWxpdGVEYXRhYmFzZSA9IHN0
ZDo6bWFrZV91bmlxdWU8U1FMaXRlRGF0YWJhc2U+KCk7CisgICAgaWYgKCFzcWxpdGVEYXRhYmFz
ZS0+b3BlbihwYXRoKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIFNRTGl0
ZSBkYXRhYmFzZSBhdCBwYXRoICclcyciLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gc3FsaXRlRGF0YWJhc2U7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hNZXRhZGF0YSgpCit7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBTdHJpbmcgbWV0YWRhdGFEQkZpbGVuYW1lID0gcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZnVsbERhdGFiYXNlRGlyZWN0b3J5LCAiSURCTWV0YWRh
dGEuc3FsaXRlMyIpOworICAgIG1fbWV0YWRhdGFEQiA9IG9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0
aChtZXRhZGF0YURCRmlsZW5hbWUpOworICAgIGlmICghbV9tZXRhZGF0YURCKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRh
PiBtZXRhZGF0YSA9IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CisgICAgaWYgKCFtZXRhZGF0
YSkKKyAgICAgICAgbWV0YWRhdGEgPSBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSgp
OworCisgICAgaWYgKCFtZXRhZGF0YSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0
YWJsaXNoIElEQiBkYXRhYmFzZSBhdCBwYXRoICclcyciLCBtZXRhZGF0YURCRmlsZW5hbWUudXRm
OCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShE
QVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYTRlZDU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVfaAorI2RlZmluZSBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5o
IiAKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworc3RydWN0IElEQkRhdGFi
YXNlTWV0YWRhdGE7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSBGSU5BTCA6IHB1YmxpYyBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZSYgZGF0
YWJhc2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlKGRhdGFiYXNlKSk7CisgICAgfQorCisgICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZ2V0T3JFc3RhYmxp
c2hNZXRhZGF0YSgpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIFVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlJik7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG9wZW5TUUxpdGVEYXRhYmFzZUF0
UGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0
YWJhc2VNZXRhZGF0YT4gZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEoKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gY3JlYXRlQW5kUG9wdWxhdGVJbml0
aWFsTWV0YWRhdGEoKTsKKworICAgIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50
aWZpZXI7CisgICAgU3RyaW5nIG1fZnVsbERhdGFiYXNlRGlyZWN0b3J5OworCisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX21ldGFkYXRhREI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKyNlbmRpZiAvLyBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2VjdXJpdHlPcmlnaW5EYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9y
aWdpbkRhdGEuY3BwCmluZGV4IGRhYWM2ZmIuLmM5YTFmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCkBAIC02OSw2ICs2OSwxMiBAQCBib29sIFNl
Y3VyaXR5T3JpZ2luRGF0YTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgU2VjdXJpdHlPcmlnaQogICAgIHJldHVybiB0cnVlOwogfQogCitTdHJpbmcgU2VjdXJpdHlP
cmlnaW5EYXRhOjpkYXRhYmFzZUZpbGVuYW1lSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUocHJvdG9jb2wsIGhvc3QsIHBvcnQpOworICAgIHJldHVybiBzZWN1cml0eU9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCk7Cit9CisKIHZvaWQgcGVyZm9ybUFQSUNhbGxiYWNrV2l0aFNlY3Vy
aXR5T3JpZ2luRGF0YVZlY3Rvcihjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3Jp
Z2luRGF0YXMsIEFycmF5Q2FsbGJhY2sqIGNhbGxiYWNrKQogewogICAgIGlmICghY2FsbGJhY2sp
IHsKQEAgLTk5LDQgKzEwNSw5IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmIGEsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgYikKICAgICAgICAgJiYgYS5wb3J0
ID09IGIucG9ydDsKIH0KIAorYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0
YSYgYSwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oCmluZGV4IGMzZjg3YTAuLjA1Mzg4N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmgKQEAgLTQ2LDYgKzQ2LDkgQEAgc3RydWN0
IFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRF
bmNvZGVyJikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciYsIFNlY3VyaXR5T3JpZ2luRGF0YSYpOwogCisgICAgLy8gUmV0dXJucyBhIHNlcmlh
bGl6ZWQgc3RyaW5nIHRoYXQgaXMgYXBwcm9wcmlhdGUgZm9yIHVzZSBhcyBhIHVuaXF1ZSBmaWxl
bmFtZQorICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lSWRlbnRpZmllcigpIGNvbnN0OworCiAg
ICAgLy8gRklYTUUgPHJkYXI6Ly85MDE4Mzg2PjogV2Ugc2hvdWxkIGJlIHNlbmRpbmcgbW9yZSBz
dGF0ZSBhY3Jvc3MgdGhlIHdpcmUgdGhhbiBqdXN0IHRoZSBwcm90b2NvbCwKICAgICAvLyBob3N0
LCBhbmQgcG9ydC4KIApAQCAtNTcsNiArNjAsNyBAQCBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRh
IHsKIHZvaWQgcGVyZm9ybUFQSUNhbGxiYWNrV2l0aFNlY3VyaXR5T3JpZ2luRGF0YVZlY3Rvcihj
b25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEFycmF5Q2FsbGJhY2sqKTsKIAogYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYsIGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGIwNGI4NGUuLjJlOWQ4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU2NSw2ICs1NjUsOSBAQAogCQk1MTYzMTk5MjE2Mjg5
ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxOTkxMTYyODk4MEEwMEUyMkYwMCAv
KiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tICovOyB9OwogCQk1MTYzMTk5NDE2Mjg5QTYwMDBF
MjJGMDAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0M5MzQxNjI4MDY0ODAwMzQyNTUw
IC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTE2MzE5OTUx
NjI4OUE2MzAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNDOTM1MTYyODA2NDgwMDM0MjU1
MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggKi87IH07CisJCTUxNjU0RUZEMTg0RUYzM0Yw
MDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY1NEVGQjE4NEVGMzNG
MDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwICovOyB9
OworCQk1MTY1NEVGRTE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjU0RUZDMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZS5oICovOyB9OworCQk1MTY1NEYwMDE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjU0RUZGMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZS5oICovOyB9OwogCQk1MTY3RUVBMDE3MDM3N0JGMDA3NjgxQ0EgLyog
RGlza0NhY2hlTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE2N0VFOUUxNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IuaCAq
LzsgfTsKIAkJNTE2N0VFQTExNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY3RUU5RjE3
MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5tbSAqLzsgfTsKIAkJNTE2QTRBNUQx
MjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3Iu
aCAqLzsgfTsKQEAgLTIxMTcsNiArMjEyMCw5IEBACiAJCTUxNUU3NzMyMTg0MDJENTEwMDA3MjAz
RiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2dpbmcubWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYzMTk5MTE2Mjg5ODBBMDBFMjJGMDAg
LyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW07IHBhdGggPSBtYWMvTmV0d29y
a1Byb2Nlc3NQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NTRF
RkIxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTE2NTRFRkMxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUx
NjU0RUZGMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY3RUU5RTE3MDM3N0JG
MDA3NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXNrQ2FjaGVNb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNjdFRTlGMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRGlza0NhY2hlTW9uaXRvci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdl
YkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MDA1LDYgKzQwMTEsMTUgQEAKIAkJCW5hbWUg
PSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1MTY1NEVGMDE4NEVG
MjQxMDA3REM4MzcgLyogc3FsaXRlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQk1MTY1NEVGQjE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwICovLAorCQkJCTUxNjU0RUZDMTg0RUYzM0YwMDdEQzgz
NyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSBzcWxpdGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1MTdE
RDVCQjE4MERBN0M0MDA4MTY2MEIgLyogRGF0YWJhc2VzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTQxMjksMTEgKzQxNDQsMTMgQEAKIAkJNTFFMzUxRjkx
ODBGNUNGNjAwRTUzQkU5IC8qIEluZGV4ZWREQiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJNTE2NTRFRjAxODRFRjI0MTAwN0RDODM3IC8qIHNxbGl0ZSAq
LywKIAkJCQk1MUQwRDQyRTE4M0IzNDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbi5jcHAgKi8sCiAJCQkJNTFEMEQ0MkYxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNl
UHJvY2Vzc0lEQkNvbm5lY3Rpb24uaCAqLywKIAkJCQk1MUQwRDQzMDE4M0IzNDEzMDA5NzA0MUQg
LyogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLywKIAkJCQk1MTVF
NzcyRDE4NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuY3BwICovLAogCQkJCTUx
NUU3NzJFMTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZS5oICovLAorCQkJCTUx
NjU0RUZGMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5o
ICovLAogCQkJCTUxNUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXIuY3BwICovLAogCQkJCTUxNUU3NzMyMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLywKIAkJCSk7CkBAIC01Njc1LDYgKzU2OTIsNyBAQAog
CQkJCUJDODE0N0E5MTJGNjRDREEwMDdCMkMzMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VQb2xpY3lD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQThDNkIwMTFFM0MwODcwMDgxMkZCNyAvKiBJ
bmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5RTMyODkx
ODIxNjM2OTAwRjVEMDRDIC8qIFdLUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUxNjU0RUZFMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZVNRTGl0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzM0UwRDExMjQwOEU4NjAwMzYw
RjNGIC8qIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MTRERjc3MTIwQjVCNzkwMDgyNkMwQyAvKiBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0IwQjBERTEyMzA1QThDMDBCMTM0MUUgLyogSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUNvZGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC01ODgzLDYgKzU5MDEsNyBA
QAogCQkJCUJDQUMxMTFGMTJDOTJDMUYwMEIwOEVFRSAvKiBXZWJEYXRhYmFzZU1hbmFnZXJQcm94
eUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYyQTc2QjkxMkIxQjI1RjAwMDVGMUI2IC8q
IFdlYkRhdGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
QjdENzJDMTI4OENBQUQwMENGRDA4QyAvKiBXZWJEb3dubG9hZENsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTE2NTRGMDAxODRFRjM0QTAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkQ3QjEwRjQzNzhEMDA1OEMxNUEg
LyogV2ViRHJhZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMEVGOUYxMjMzMjY0MjAw
N0QzQ0ZCIC8qIFdlYkVkaXRDb21tYW5kUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMy
RDdEMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJFZGl0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtNzE1Myw2ICs3MTcyLDcgQEAKIAkJCQkxQTQ0Qjk1NzE2QjczN0FBMDBCN0JCRDggLyogU3Rv
cmFnZU5hbWVzcGFjZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRjQ5MDAxODMzREU3
ODAwOUFCMTVBIC8qIFdLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTdERDVCRTE4MERBN0QzMDA4MTY2MEIgLyogRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTE2NTRFRkQxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5NkJEODVF
MTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkxWlo0MTdFRjEyQzAwRDg3MDAyQkU2N0IgLyogVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxRTM1MUZGMTgwRjVEMEYwMEU1M0JFOSAvKiBEYXRhYmFzZVBy
b2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218554</attachid>
            <date>2013-12-05 17:08:12 -0800</date>
            <delta_ts>2013-12-11 12:15:47 -0800</delta_ts>
            <desc>Patch v2 - Incorporate all feedback besides CrossThreadCopier</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55752</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNzU2NTA5Zi4uOGU1ODc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMi0wNSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzIEluZGV4ZWREQjogRXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBFeHBvcnQgdG9VSW50NjRTdHJpY3QoKS4KKwogMjAxMy0xMi0wNCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgVVNFKFNF
Q1VSSVRZX0ZSQU1FV09SSykgd2l0aCBmaW5lci1ncmFpbmVkIGRlZmluZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCmluZGV4IDNjNDI0YjQuLmIzZDg0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aApAQCAtMzY4LDcgKzM2OCw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
aW50IHRvSW50U3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7CiAgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIHVuc2lnbmVkIHRvVUludFN0cmljdChib29sKiBvayA9IDAs
IGludCBiYXNlID0gMTApIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBpbnQ2NF90
IHRvSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKLSAgICB1
aW50NjRfdCB0b1VJbnQ2NFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0
OworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB1aW50NjRfdCB0b1VJbnQ2NFN0cmljdChib29s
KiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogICAgIGludHB0cl90IHRvSW50UHRyU3Ry
aWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7CiAKICAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgaW50IHRvSW50KGJvb2wqIG9rID0gMCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGIwMjk5ZDguLmYyODlkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03OTgs
NiArNzk4LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRp
b24uY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAKICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMTNjYTk2Li43OWRjYzZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTMtMTItMDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIERhdGFiYXNlUHJvY2VzcyBJbmRleGVkREI6IEVzdGFi
bGlzaCBhIG1ldGFkYXRhIGJhY2tpbmcgc3RvcmUgb24gZGlzaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MjU4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIElEQkRhdGFiYXNlTWV0YWRhdGE6Omlz
b2xhdGVkQ29weSgpIGZvciBjcm9zcy10aHJlYWQgcGFzc2luZy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmlu
OgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVk
Q29weSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhOjppc29sYXRlZENvcHkp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaDoKKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmg6CisKIDIwMTMtMTItMDQgIE9saXZlciBIdW50ICA8b2xpdmVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBzdGF0aWMgZ2V0dGVyIGZ1bmN0aW9uIHByb3Rv
dHlwZSB0byBpbmNsdWRlIHRoaXNWYWx1ZSBpbiBhZGRpdGlvbiB0byB0aGUgYmFzZSBvYmplY3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDMwMWNlYmUuLjEzMjRmYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTgyNCw2ICsxODI0LDcgQEAgd2ViY29yZV9t
b2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlRXJyb3IuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMTc4ODUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNw
cApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkRhdGFiYXNlTWV0YWRhdGEgSURCRGF0
YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJEYXRhYmFzZU1l
dGFkYXRhIHJlc3VsdDsKKyAgICByZXN1bHQuaWQgPSBpZDsKKyAgICByZXN1bHQudmVyc2lvbiA9
IHZlcnNpb247CisgICAgcmVzdWx0Lm1heE9iamVjdFN0b3JlSWQgPSBtYXhPYmplY3RTdG9yZUlk
OworCisgICAgcmVzdWx0Lm5hbWUgPSBuYW1lLmlzb2xhdGVkQ29weSgpOworCisgICAgT2JqZWN0
U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBvYmplY3RTdG9yZXMuYmVnaW4oKTsKKyAgICBP
YmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0U3RvcmVzLmVuZCgpOwor
ICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQorICAgICAgICByZXN1bHQub2JqZWN0U3RvcmVzLnNl
dChpLT5rZXksIGktPnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0lEQk9iamVjdFN0b3JlTWV0YWRhdGEgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6aXNv
bGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHJlc3VsdDsK
KyAgICByZXN1bHQuaWQgPSBpZDsKKyAgICByZXN1bHQuYXV0b0luY3JlbWVudCA9IGF1dG9JbmNy
ZW1lbnQ7CisgICAgcmVzdWx0Lm1heEluZGV4SWQgPSBtYXhJbmRleElkOworCisgICAgcmVzdWx0
Lm5hbWUgPSBuYW1lLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5rZXlQYXRoID0ga2V5UGF0
aC5pc29sYXRlZENvcHkoKTsKKworICAgIEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpID0gaW5k
ZXhlcy5iZWdpbigpOworICAgIEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBpbmRleGVz
LmVuZCgpOworICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQorICAgICAgICByZXN1bHQuaW5kZXhl
cy5zZXQoaS0+a2V5LCBpLT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitJREJJbmRleE1ldGFkYXRhIElEQkluZGV4TWV0YWRhdGE6Omlzb2xhdGVkQ29w
eSgpIGNvbnN0Cit7CisgICAgSURCSW5kZXhNZXRhZGF0YSByZXN1bHQ7CisgICAgcmVzdWx0Lmlk
ID0gaWQ7CisgICAgcmVzdWx0LnVuaXF1ZSA9IHVuaXF1ZTsKKyAgICByZXN1bHQubXVsdGlFbnRy
eSA9IG11bHRpRW50cnk7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5KCk7
CisgICAgcmVzdWx0LmtleVBhdGggPSBrZXlQYXRoLmlzb2xhdGVkQ29weSgpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmgKaW5kZXggY2RhNTY0ZC4uZGRhNTNiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VN
ZXRhZGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlTWV0YWRhdGEuaApAQCAtNTMsNiArNTMsOCBAQCBzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YSB7
CiAgICAgYm9vbCB1bmlxdWU7CiAgICAgYm9vbCBtdWx0aUVudHJ5OwogCisgICAgSURCSW5kZXhN
ZXRhZGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90
IEludmFsaWRJZCA9IC0xOwogfTsKIApAQCAtNzcsNiArNzksNyBAQCBzdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0
YWRhdGE+IEluZGV4TWFwOwogICAgIEluZGV4TWFwIGluZGV4ZXM7CiAKKyAgICBJREJPYmplY3RT
dG9yZU1ldGFkYXRhIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogfTsKIAogc3RydWN0IElEQkRhdGFi
YXNlTWV0YWRhdGEgewpAQCAtMTIwLDYgKzEyMyw4IEBAIHN0cnVjdCBJREJEYXRhYmFzZU1ldGFk
YXRhIHsKICAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7CiAKICAgICBPYmplY3RTdG9yZU1h
cCBvYmplY3RTdG9yZXM7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIGlzb2xhdGVkQ29weSgp
IGNvbnN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmNwcAppbmRleCA3ZDhjOGQyLi4xOWM1YTRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcApAQCAtMjQ4LDYgKzI0OCwxOCBA
QCBib29sIElEQktleVBhdGg6Om9wZXJhdG9yPT0oY29uc3QgSURCS2V5UGF0aCYgb3RoZXIpIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitJREJLZXlQYXRoIElEQktleVBhdGg6Omlzb2xh
dGVkQ29weSgpIGNvbnN0Cit7CisgICAgSURCS2V5UGF0aCByZXN1bHQ7CisgICAgcmVzdWx0Lm1f
dHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQubV9zdHJpbmcgPSBtX3N0cmluZy5pc29sYXRlZENv
cHkoKTsKKworICAgIHJlc3VsdC5tX2FycmF5LnJlc2VydmVDYXBhY2l0eShtX2FycmF5LnNpemUo
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FycmF5LnNpemUoKTsgKytpKQorICAg
ICAgICByZXN1bHQubV9hcnJheS5hcHBlbmQobV9hcnJheVtpXS5pc29sYXRlZENvcHkoKSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAppbmRleCAzZDAwMTgy
Li4xMzVmNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UGF0aC5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzVmFsaWQoKSBjb25z
dDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5UGF0aCYgb3RoZXIpIGNvbnN0Owog
CisgICAgSURCS2V5UGF0aCBpc29sYXRlZENvcHkoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBU
eXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV9zdHJpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4
IGFhMzY5ZmIuLmJjNjkwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0zNjQsOSArMzY0LDEx
IEBAIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIxNGNhbmNlbGxlZEVycm9yRXYKIF9fWk43
V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIzMmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
RVJLTlNfMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUUKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VM
b2FkZXI2Y2FuY2VsRXYKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2UxMXRhYmxlRXhpc3Rz
RVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTEybGFzdEVycm9y
TXNnRXYKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2UxNGV4ZWN1dGVDb21tYW5kRVJLTjNX
VEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTRvcGVuRVJLTjNXVEY2U3Ry
aW5nRWIKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2U1Y2xvc2VFdgorX19aTjdXZWJDb3Jl
MTRTUUxpdGVEYXRhYmFzZTlsYXN0RXJyb3JFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFz
ZUMxRXYKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2VEMUV2CiBfX1pON1dlYkNvcmUxNFNj
aGVtZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWxFUktOM1dURjZTdHJpbmdFCkBA
IC01NzIsMTIgKzU3NCwxNCBAQCBfX1pON1dlYkNvcmUxNVByb3RlY3Rpb25TcGFjZUMxRXYKIF9f
Wk43V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MjFodHRwUGlwZWxpbmluZ0VuYWJsZWRFdgogX19a
TjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QyNHNldEhUVFBQaXBlbGluaW5nRW5hYmxlZEViCiBf
X1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDEyZ2V0Q29sdW1uSW50RWkKK19fWk43V2ViQ29y
ZTE1U1FMaXRlU3RhdGVtZW50MTJpc0NvbHVtbk51bGxFaQogX19aTjdXZWJDb3JlMTVTUUxpdGVT
dGF0ZW1lbnQxM2dldENvbHVtblRleHRFaQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQx
NGV4ZWN1dGVDb21tYW5kRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MjFnZXRDb2x1
bW5CbG9iQXNTdHJpbmdFaQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQyMmlzQ29sdW1u
RGVjbGFyZWRBc0Jsb2JFaQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ0c3RlcEV2CiBf
X1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDVyZXNldEV2CitfX1pON1dlYkNvcmUxNVNRTGl0
ZVN0YXRlbWVudDdiaW5kSW50RWlpCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDdwcmVw
YXJlRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJpbmRCbG9iRWlSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJpbmRUZXh0RWlSS04zV1RGNlN0
cmluZ0UKQEAgLTY5Miw2ICs2OTYsNyBAQCBfX1pON1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9u
RDFFdgogX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVhdGVFUE5TXzVGcmFtZUVQ
TlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMjFSZXNvdXJj
ZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUxN2NhY2hlRE9NU3RydWN0dXJlRVBOU18xN0pT
RE9NR2xvYmFsT2JqZWN0RVBOM0pTQzlTdHJ1Y3R1cmVFUEtOUzJfOUNsYXNzSW5mb0UKIF9fWk43
V2ViQ29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlDR0NvbnRleHRQTlNfMTVQbGF0Zm9ybUNBTGF5
ZXJFUk4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtNUVOUzRfMTVDcmFzaE9uT3ZlcmZsb3dF
RUUKK19fWk43V2ViQ29yZTE3ZW5jb2RlRm9yRmlsZU5hbWVFUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxN2xhbmd1YWdlRGlkQ2hhbmdlRXYKIF9fWk43V2ViQ29yZTE3b3BlblRlbXBvcmFy
eUZpbGVFUktOM1dURjZTdHJpbmdFUmkKIF9fWk43V2ViQ29yZTE3c2V0Q29va2llc0Zyb21ET01F
UktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUzVfUktOM1dURjZTdHJpbmdF
CkBAIC0xNTg5LDYgKzE1OTQsNyBAQCBfX1pOSzdXZWJDb3JlMThSZW5kZXJMYXllckJhY2tpbmcy
MGNvbXBvc2l0aW5nTGF5ZXJUeXBlRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xs
ZXIxMWlzU3VzcGVuZGVkRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51
bWJlck9mQWN0aXZlQW5pbWF0aW9uc0VQTlNfOERvY3VtZW50RQogX19aTks3V2ViQ29yZTE5QW5p
bWF0aW9uQ29udHJvbGxlcjMzYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkRXYKK19f
Wk5LN1dlYkNvcmUxOUlEQkRhdGFiYXNlTWV0YWRhdGExMmlzb2xhdGVkQ29weUV2CiBfX1pOSzdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJnZXRIaWdobGlnaHRFUE5TXzlIaWdobGlnaHRF
CiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjlidWlsZE9iamVjdEZvckhpZ2hs
aWdodGVkTm9kZUV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTBodHRwTWV0
aG9kRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBjZGM3N2I4Li5mYWUyNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzQ3LDYgKzE3NDcsNyBAQAogCQk1
MTYwRjQ5ODBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwRjQ5NzBCMEFBNzVGMDBDMUQy
QUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gKi87IH07CiAJCTUxNjJDN0Y0MTFGNzdFRkIwMDYxMkVG
RSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
Y3BwICovOyB9OwogCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0Yz
MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxNjMxMTdEMTg1MTI0MkIwMDUzNDY0NyAv
KiBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjMxMTdDMTg1MTI0MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFzZU1l
dGFkYXRhLmNwcCAqLzsgfTsKIAkJNTE2NEVENDMxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjRFRDQxMTgzMjA4QzcwMEVBOEZGMSAvKiBJREJTZXJ2ZXJDb25uZWN0
aW9uTGV2ZWxEQi5jcHAgKi87IH07CiAJCTUxNjRFRDQ0MTgzMjA4QzcwMEVBOEZGMSAvKiBJREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE2NEVENDIxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCLmggKi87IH07CiAJCTUxNjYwQUI2MTgyOEJCODIwMDA3NENBRCAvKiBJREJC
YWNraW5nU3RvcmVMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjYwQUIwMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVM
ZXZlbERCLmNwcCAqLzsgfTsKQEAgLTc3MjcsOCArNzcyOCw4IEBACiAJCTMxNDZGRTY1MTg0NDIw
ODcwMDFBOTM3QyAvKiBPRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcDsgcGF0aCA9IGNh
bnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTQ2RkU2NjE4NDQyMDg3MDAxQTkzN0MgLyogT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdExpbmVhci5o
OyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTQ2RkU2NzE4NDQyMDg3MDAxQTkzN0MgLyogT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXRMaW5lYXIu
aWRsOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTMxNDZGRTcwMTg0NDIzNjcwMDFBOTM3QyAvKiBKU09FU1RleHR1
cmVGbG9hdExpbmVhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBK
U09FU1RleHR1cmVGbG9hdExpbmVhci5jcHA7IHBhdGggPSBKU09FU1RleHR1cmVGbG9hdExpbmVh
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNDZGRTcxMTg0NDIzNjcwMDFB
OTM3QyAvKiBKU09FU1RleHR1cmVGbG9hdExpbmVhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU09FU1RleHR1cmVGbG9hdExpbmVhci5oOyBwYXRoID0gSlNPRVNUZXh0dXJl
RmxvYXRMaW5lYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0NkZFNzAxODQ0
MjM2NzAwMUE5MzdDIC8qIEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0NkZFNzExODQ0MjM2NzAwMUE5MzdDIC8qIEpT
T0VTVGV4dHVyZUZsb2F0TGluZWFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTT0VTVGV4dHVyZUZsb2F0TGluZWFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxNjAyM0VGMTUzMkM0MEMwMEQ1MEZGNCAvKiBEaWN0aW9uYXJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5IC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNjExRTU4MEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODQ3OSw2ICs4NDgwLDcgQEAKIAkJNTE2MEY0OTcwQjBBQTc1RjAw
QzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gSGlzdG9yeUl0ZW1NYWMubW07IHBhdGggPSBtYWMvSGlzdG9yeUl0ZW1NYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjJDN0YyMTFGNzdFRkEwMDYxMkVG
RSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTY2hlbWVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZU1l
dGFkYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDExODMyMDhD
NzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDIxODMyMDhDNzAwRUE4RkYxIC8q
IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNjYwQUIwMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVMZXZl
bERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkJhY2tpbmdT
dG9yZUxldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxMDUsNiAr
MTcxMDcsNyBAQAogCQkJCTUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUVy
cm9yLmggKi8sCiAJCQkJNTFENzE5ODQxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcCAqLywKIAkJCQk1MUQ3MTk4NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJh
c2VFeGNlcHRpb24uaCAqLywKKwkJCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0
YWJhc2VNZXRhZGF0YS5jcHAgKi8sCiAJCQkJNTFDOTYxMUExODNEMkI4MDAwRDIwMDJFIC8qIElE
QkRhdGFiYXNlTWV0YWRhdGEuaCAqLywKIAkJCQk1MUQ3MTk4NjE4MTEwNkRGMDAxNkRDNTEgLyog
SURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk1MUQ3MTk4NzE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8sCkBAIC0yODE1Myw2ICsyODE1Niw3IEBACiAJCQkJ
QjJDM0RBM0QwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMkFGRkM5OTBEMDBBNURGMDAzMDA3NEQgLyogVGV4dENvZGVjTWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyQzNEQTNGMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNV
c2VyRGVmaW5lZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTYzMTE3RDE4NTEyNDJCMDA1MzQ2
NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE0
MTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTFGRjhGNkMxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29k
ZWNVVEY4LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDIwNGEyMDYuLjVlMWU4MTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxMy0xMi0wNCAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9jZXNzIEluZGV4ZWREQjog
RXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNrCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgRGF0YWJhc2VQcm9jZXNzIGFs
cmVhZHkgaGFzIGFuICJJbmRleGVkIERhdGFiYXNlIHBhdGgiLgorICAgICAgICBFYWNoIFNlY3Vy
aXR5T3JpZ2luIHdpdGggaW5kZXhlZCBkYXRhYmFzZXMgd2lsbCBoYXZlIGEgc3ViZGlyZWN0b3J5
IHVuZGVyIHRoZSBwYXRoLgorICAgICAgICBFYWNoIGluZGV4ZWQgZGF0YWJhc2Ugd2lsbCBoYXZl
IGEgc3ViZGlyZWN0b3J5IHVuZGVyIGl0cyBTZWN1cml0eU9yaWdpbidzIHBhdGguCisgICAgICAg
IEluc2lkZSB0aGF0IGRpcmVjdG9yeSB3aWxsIGV4aXN0ICgxKSBtZXRhZGF0YSBkYXRhYmFzZSwg
YW5kIDAtTiBPYmplY3RTdG9yZSBkYXRhYmFzZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBlc3Rh
Ymxpc2hlcyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgdGhlICgxKSBtZXRhZGF0YSBkYXRh
YmFzZS4KKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmluaXRpYWxpemVEYXRhYmFzZVByb2Nl
c3MpOiBBc3luY2hyb25vdXNseSBlbnN1cmUgdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5
IGV4aXN0cy4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjplbnN1cmVJbmRleGVk
RGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMpOiBBbGxvdyBhbnlvbmUgdG8gbWFrZSBuZWNlc3Nh
cnkgZGlyZWN0b3JpZXMgcmVsYXRpdmUgdG8KKyAgICAgICAgICB0aGUgaW5kZXhlZCBkYXRhYmFz
ZSBkaXJlY3RvcnkuCisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6ZW5zdXJlUGF0
aEV4aXN0c0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjphYnNv
bHV0ZUluZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgpOiBJbnN0ZWFk
IG9mIGV4cG9zaW5nIHRoZSBpbmRleGVkIGRhdGFiYXNlIGRpcmVjdG9yeSwgCisgICAgICAgICAg
Z2l2ZSBEYXRhYmFzZVByb2Nlc3MgYSBtZXRob2QgdG8gYWxsb3cgb3RoZXJzIHRvIGNvbXB1dGUg
YSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBpbmRleGVkIGRhdGFiYXNlIGRpcmVjdG9yeS4KKyAgICAg
ICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmg6CisKKyAgICAgICAgKiBEYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpnZXRPckVzdGFi
bGlzaElEQkRhdGFiYXNlTWV0YWRhdGEpOgorCisgICAgICAgIEluc3RlYWQgb2YgZmFpbGluZyB0
byByZXR1cm4gSURCRGF0YWJhc2VNZXRhZGF0YSwgY3JlYXRlIGEgU1FMaXRlIGJhY2tpbmcgc3Rv
cmUgYW5kIGFjdHVhbGx5IGdldCBtZXRhZGF0YSBmcm9tIGl0OgorICAgICAgICAqIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZURhdGFiYXNlUXVldWVSZXF1ZXN0KToK
KyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnByb2Nlc3NEYXRhYmFzZVJlcXVl
c3RRdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRPckVzdGFi
bGlzaElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6
OlVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KToKKyAgICAgICAg
KiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKKyAgICAg
ICAgQWRkIGEgdmlydHVhbCBiYWNraW5nIHN0b3JlIGludGVyZmFjZSBmb3IgVW5pcXVlSURCRGF0
YWJhc2UgdG8gdXNlLgorICAgICAgICBBbGwgYWN0dWFsIGRhdGFiYXNlIEkvTyBtdXN0IGdvIHRo
cm91Z2ggdGhpcyBpbnRlcmZhY2UuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZTo6flVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
KToKKworICAgICAgICBBZGQgYSBTUUxpdGUgYmFja2luZyBzdG9yZSBpbXBsZW1lbnRhdGlvbjoK
KyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGUpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEpOgorICAgICAgICAo
V2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0
aW5nTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZTo6b3BlblNRTGl0ZURhdGFiYXNlQXRQYXRoKToKKyAgICAgICAgKFdlYktpdDo6
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmdldE9yRXN0YWJsaXNoTWV0YWRh
dGEpOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmg6CisKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNvbGF0ZWRDb3B5KToKKyAgICAg
ICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ci5oOgorCisgICAgICAgIEFkZCBzb21lIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gU2VjdXJpdHlP
cmlnaW5EYXRhOgorICAgICAgICAqIFNoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpTZWN1cml0eU9yaWdpbkRhdGE6OmRhdGFiYXNlRmlsZW5hbWVJZGVudGlm
aWVyKToKKyAgICAgICAgKFdlYktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhOjpjYW5TaGFyZURhdGFi
YXNlcyk6CisgICAgICAgICogU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oOgorCisgICAgICAg
ICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTEyLTA0ICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3Igc3RhdGljIGdl
dHRlciBmdW5jdGlvbiBwcm90b3R5cGUgdG8gaW5jbHVkZSB0aGlzVmFsdWUgaW4gYWRkaXRpb24g
dG8gdGhlIGJhc2Ugb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IGIxYmRjN2MuLmEwZWFlNzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC0z
Miw2ICszMiwxMCBAQAogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJV
bmlxdWVJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtOTMsNyArOTcsMzYgQEAgdm9pZCBEYXRhYmFzZVByb2Nl
c3M6OnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRh
YmFzZSkKIAogdm9pZCBEYXRhYmFzZVByb2Nlc3M6OmluaXRpYWxpemVEYXRhYmFzZVByb2Nlc3Mo
Y29uc3QgRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewot
ICAgIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3Rvcnk7CisgICAgbV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSBwYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc29sYXRlZENvcHkoKTsKKworICAgIGVuc3VyZUlu
ZGV4ZWREYXRhYmFzZVJlbGF0aXZlUGF0aEV4aXN0cyhTdHJpbmdJbXBsOjplbXB0eSgpKTsKK30K
Kwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZUluZGV4ZWREYXRhYmFzZVJlbGF0aXZlUGF0
aEV4aXN0cyhjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCkKK3sKKyAgICBTdHJpbmcgcGF0aCA9
IGFic29sdXRlSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChyZWxh
dGl2ZVBhdGgpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb21lIHVwIHdpdGggYSBiZXR0
ZXIgaWRpb20gZm9yIHNhZmVseSBjb3B5aW5nIHN0cmluZ3MgYWNyb3NzIHRocmVhZHMuCisgICAg
aWYgKCFwYXRoLmltcGwoKSkgeworICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlUHJvY2Vzczo6
ZW5zdXJlRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMoKSAtIENvbXBsZXRlIHBhdGggaXMgZW1w
dHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gY29w
eSA9IHBhdGguaW1wbCgpLT5pc29sYXRlZENvcHkoKTsKKworICAgIG1fcXVldWUtPmRpc3BhdGNo
KGJpbmQoJkRhdGFiYXNlUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0c0ludGVybmFsLCB0aGlzLCBj
b3B5LnJlbGVhc2UoKSkpOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6ZW5zdXJlUGF0aEV4
aXN0c0ludGVybmFsKFN0cmluZ0ltcGwqIHBhdGgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKSkKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBhbGwgZGlyZWN0b3JpZXMgZm9yIHBhdGggJyVzJyIsIHBh
dGgtPnV0ZjgoKS5kYXRhKCkpOworfQorCitTdHJpbmcgRGF0YWJhc2VQcm9jZXNzOjphYnNvbHV0
ZUluZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgoY29uc3QgU3RyaW5n
JiByZWxhdGl2ZVBhdGgpCit7CisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCht
X2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcmVsYXRpdmVQYXRoKTsKIH0KIAogdm9pZCBEYXRh
YmFzZVByb2Nlc3M6OmNyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXgg
ODM3N2E0Yy4uZGQ3NDhiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuaApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6CiAKICAgICBXb3Jr
UXVldWUmIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxXb3JrUXVldWUmPihtX3F1
ZXVlLmdldCgpKTsgfQogCisgICAgdm9pZCBlbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBh
dGhFeGlzdHMoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGFic29sdXRlSW5kZXhlZERhdGFi
YXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcmKTsKKwogcHJpdmF0
ZToKICAgICBEYXRhYmFzZVByb2Nlc3MoKTsKICAgICB+RGF0YWJhc2VQcm9jZXNzKCk7CkBAIC03
Miw2ICs3NSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplRGF0YWJhc2VQcm9jZXNz
KGNvbnN0IERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIHZvaWQgY3Jl
YXRlRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uKCk7CiAKKyAgICAvLyBGb3IgZXhlY3V0
aW9uIG9uIHdvcmsgcXVldWUgdGhyZWFkIG9ubHkKKyAgICB2b2lkIGVuc3VyZVBhdGhFeGlzdHNJ
bnRlcm5hbChTdHJpbmdJbXBsKik7CisKICAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlVG9XZWJQ
cm9jZXNzQ29ubmVjdGlvbj4+IG1fZGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uczsKIAog
ICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3Bw
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uLmNwcAppbmRleCA3MmUxNThhLi44OWYzZDFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlTWV0
YWRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApAQCAtNjgsNiArNjksNyBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb246OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSh1aW50NjRfdCByZQogCiAg
ICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7
CiAgICAgbV91bmlxdWVJREJEYXRhYmFzZS0+Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFk
YXRhKFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGJvb2wgc3VjY2VzcywgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYgbWV0YWRhdGEpIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlv
bjo6RGlkR2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHJlcXVlc3RJRCwgc3VjY2Vz
cywgbWV0YWRhdGEpKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5k
ZXggYmM3MjQ1Yy4uYzI3NTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTMx
LDYgKzMxLDggQEAKICNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKICNpbmNsdWRlICJEYXRhYmFz
ZVByb2Nlc3MuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgiCisj
aW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlTWV0
YWRhdGEuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00MiwxMiArNDQsMzcg
QEAgVW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRh
dGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVy
KQogICAgICwgbV9wcm9jZXNzaW5nRGF0YWJhc2VRdWV1ZVJlcXVlc3RzKGZhbHNlKQogeworICAg
IG1faW5NZW1vcnkgPSBpZGVudGlmaWVyLm9wZW5pbmdPcmlnaW4oKS5jYW5TaGFyZURhdGFiYXNl
cyhpZGVudGlmaWVyLm1haW5GcmFtZU9yaWdpbigpKTsKKyAgICBpZiAobV9pbk1lbW9yeSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRWFjaCB1bmlxdWUgSW5kZXhlZCBEYXRhYmFzZSBleGlz
dHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZm9yIHRoZSBkYXRhYmFzZSwgd2hpY2ggZXhpc3RzIGlu
IGEgZGlyZWN0b3J5IHJlcHJlc2VudGluZyBpdHMgb3BlbmluZyBvcmlnaW4uCisgICAgbV9kYXRh
YmFzZVJlbGF0aXZlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGlkZW50aWZp
ZXIub3BlbmluZ09yaWdpbigpLmRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKCksIGZpbGVuYW1l
Rm9yRGF0YWJhc2VOYW1lKCkpOworCisgICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5lbnN1
cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMobV9kYXRhYmFzZVJlbGF0aXZlRGly
ZWN0b3J5KTsKIH0KIAogVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSgpCiB7
CiB9CiAKK1N0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUo
KQoreworICAgIEFTU0VSVCghbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLmlzTnVsbCgpKTsK
KworICAgIGlmIChtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gIiUwMCI7CisKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSBlbmNvZGVGb3JGaWxlTmFt
ZShtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkpOworICAgIGlmIChmaWxlbmFtZSA9PSAiLiIp
CisgICAgICAgIHJldHVybiAiJTJFIjsKKworICAgIGlmIChmaWxlbmFtZSA9PSAiLi4iKQorICAg
ICAgICByZXR1cm4gIiUyRSUyRSI7CisKKyAgICByZXR1cm4gZmlsZW5hbWU7Cit9CisKIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnJlZ2lzdGVyQ29ubmVjdGlvbihEYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uJiBjb25uZWN0aW9uKQogewogICAgIEFTU0VSVCghbV9jb25uZWN0aW9ucy5jb250
YWlucygmY29ubmVjdGlvbikpOwpAQCAtNjUsNiArOTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjp1bnJlZ2lzdGVyQ29ubmVjdGlvbihEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJiBj
b25uZQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1ZXVlRGF0YWJhc2VRdWV1ZVJlcXVl
c3QoUGFzc1JlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QpCiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBBU1NFUlQocmVxdWVzdCk7CiAKICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleCk7CkBAIC03OSw2ICsxMDcsNyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1ZXVlRGF0YWJhc2VRdWV1ZVJlcXVlc3QoUGFzc1JlZlB0
cjxBc3luY1JlcXVlc3Q+IHJlcQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwcm9jZXNzRGF0
YWJhc2VSZXF1ZXN0UXVldWUoKQogeworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IEFTU0VSVChtX3Byb2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHMpOwogCiAgICAgd2hpbGUg
KHRydWUpIHsKQEAgLTk4LDkgKzEyNywzMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwcm9j
ZXNzRGF0YWJhc2VSZXF1ZXN0UXVldWUoKQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRP
ckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wsIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKT4gY29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBJZiB0aGUgYmFja2luZyBzdG9yZSBpcyBh
bHJlYWR5IG9wZW4gYW5kIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWV0YWRhdGEgcmVhZHkgdG8gZ28s
IGp1c3QgcmV0dXJuIGl0IG5vdy4KKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X21ldGFkYXRhTXV0ZXgpOworICAgICAgICBpZiAobV9tZXRhZGF0YSkgeworICAgICAgICAgICAg
Y29tcGxldGlvbkNhbGxiYWNrKHRydWUsICptX21ldGFkYXRhKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgZW5xdWV1ZSBhIHJlcXVl
c3QgdG8gb3BlbiB0aGUgYmFja2luZyBzdG9yZSBhbmQgcmVhZCBpbiB0aGUgbWV0YWRhdGEuCiAg
ICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Pjo6Y3Jl
YXRlKFtjb21wbGV0aW9uQ2FsbGJhY2ssIHRoaXNdKCkgeworICAgICAgICBvcGVuQmFja2luZ1N0
b3JlQW5kUmVhZE1ldGFkYXRhKCk7CisKICAgICAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRh
ZGF0YTsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1l
dGFkYXRhSW50ZXJuYWwobWV0YWRhdGEpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
KyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbWV0YWRhdGFNdXRl
eCk7CisgICAgICAgICAgICBpZiAobV9tZXRhZGF0YSkgeworICAgICAgICAgICAgICAgIG1ldGFk
YXRhID0gbV9tZXRhZGF0YS0+aXNvbGF0ZWRDb3B5KCk7CisgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICBSdW5Mb29wOjpt
YWluKCktPmRpc3BhdGNoKFttZXRhZGF0YSwgc3VjY2VzcywgY29tcGxldGlvbkNhbGxiYWNrXSgp
IHsKICAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhzdWNjZXNzLCBtZXRhZGF0YSk7CkBA
IC0xMTcsMTIgKzE2NywyNCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRPckVzdGFibGlz
aElEQkRhdGFiYXNlTWV0YWRhdGEoc3RkOjpmdW5jdGlvbjx2b2lkKGJvbwogICAgIGVucXVldWVE
YXRhYmFzZVF1ZXVlUmVxdWVzdChyZXF1ZXN0LnJlbGVhc2UoKSk7CiB9CiAKLWJvb2wgVW5pcXVl
SURCRGF0YWJhc2U6OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YUludGVybmFsKGNv
bnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmKQordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSgpCiB7Ci0gICAgLy8gRklYTUU6IFRo
aXMgbWV0aG9kIGlzIHN1Y2Nlc3NmdWxseSBjYWxsZWQgYnkgbWVzc2FnaW5nIGZyb20gdGhlIFdl
YlByb2Nlc3MsIGFuZCBjYWxscyBiYWNrIHdpdGggZHVtbXkgZGF0YS4KLSAgICAvLyBOZWVkcyBy
ZWFsIGltcGxlbWVudGF0aW9uLgogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQoIW1f
bWV0YWRhdGEpOworCisgICAgaWYgKG1faW5NZW1vcnkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJT
dXBwb3J0IGZvciBpbi1tZW1vcnkgZGF0YWJhc2VzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2luZ1N0b3JlID0gVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9tZXRhZGF0YSA9
IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaE1ldGFkYXRhKCk7Cit9CisKK1N0cmluZyBV
bmlxdWVJREJEYXRhYmFzZTo6YWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuYWJzb2x1dGVJbmRleGVkRGF0YWJh
c2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9y
eSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCmlu
ZGV4IDNkZTAxMDQuLmE5Mzc4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQ0LDYg
KzQ0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEFzeW5jUmVxdWVzdDsKIGNsYXNz
IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb247CitjbGFzcyBVbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZTsKIAogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIApAQCAtNTcsNiArNTgs
NyBAQCBwdWJsaWM6CiAgICAgflVuaXF1ZUlEQkRhdGFiYXNlKCk7CiAKICAgICBjb25zdCBVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lk
ZW50aWZpZXI7IH0KKyAgICBTdHJpbmcgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0
OwogCiAgICAgdm9pZCByZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbiYpOwogICAgIHZvaWQgdW5yZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbiYpOwpAQCAtNjgsMTggKzcwLDMxIEBAIHByaXZhdGU6CiAKICAgICBVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogCisgICAgYm9vbCBtX2luTWVtb3J5
OworICAgIFN0cmluZyBtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3Rvcnk7CisKICAgICBIYXNoU2V0
PFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPj4gbV9jb25uZWN0aW9uczsKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9kYXRhYmFzZVJlcXVl
c3RzOwogCiAgICAgdm9pZCBlbnF1ZXVlRGF0YWJhc2VRdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxB
c3luY1JlcXVlc3Q+KTsKIAorICAgIC8vIE1ldGhvZCB0aGF0IGF0dGVtcHRzIHRvIG1ha2UgbGVn
YWwgZmlsZW5hbWVzIGZyb20gYWxsIGxlZ2FsIGRhdGFiYXNlIG5hbWVzCisgICAgU3RyaW5nIGZp
bGVuYW1lRm9yRGF0YWJhc2VOYW1lKCk7CisKICAgICAvLyBUbyBiZSBjYWxsZWQgZnJvbSB0aGUg
ZGF0YWJhc2Ugd29ya3F1ZXVlIHRocmVhZCBvbmx5CiAgICAgdm9pZCBwcm9jZXNzRGF0YWJhc2VS
ZXF1ZXN0UXVldWUoKTsKLSAgICBib29sIGdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0
YUludGVybmFsKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmKTsKKyAgICB2b2lk
IG9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoKTsKKyAgICB2b2lkIGV4dHJhY3RFeGlz
dGluZ0lEQk1ldGFkYXRhKCk7CisgICAgdm9pZCBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRh
YmFzZVRhYmxlcygpOwogCiAgICAgTXV0ZXggbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleDsK
ICAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHM7
CiAgICAgYm9vbCBtX3Byb2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHM7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gbV9tZXRhZGF0YTsKKyAg
ICBNdXRleCBtX21ldGFkYXRhTXV0ZXg7CisKKyAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1Vu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiOGQwMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZV9oCisjZGVmaW5lIFVuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFU
QUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK3N0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUgOiBwdWJsaWMg
UmVmQ291bnRlZDxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4geworcHVibGljOgorICAg
IHZpcnR1YWwgflVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlKCkgeyB9CisKKyAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBnZXRPckVz
dGFibGlzaE1ldGFkYXRhKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NF
U1MpCisjZW5kaWYgLy8gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwCmluZGV4IGZmOGJkN2UuLjJhN2E5
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAKQEAg
LTc1LDYgKzc1LDIxIEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOjppc051bGwo
KSBjb25zdAogICAgIHJldHVybiBtX2RhdGFiYXNlTmFtZS5pc051bGwoKTsKIH0KIAorVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNvbGF0
ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgcmVzdWx0
OworCisgICAgcmVzdWx0Lm1fZGF0YWJhc2VOYW1lID0gbV9kYXRhYmFzZU5hbWUuaXNvbGF0ZWRD
b3B5KCk7CisgICAgcmVzdWx0Lm1fb3BlbmluZ09yaWdpbi5wcm90b2NvbCA9IG1fb3BlbmluZ09y
aWdpbi5wcm90b2NvbC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQubV9vcGVuaW5nT3JpZ2lu
Lmhvc3QgPSBtX29wZW5pbmdPcmlnaW4uaG9zdC5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQu
bV9vcGVuaW5nT3JpZ2luLnBvcnQgPSBtX29wZW5pbmdPcmlnaW4ucG9ydDsKKyAgICByZXN1bHQu
bV9tYWluRnJhbWVPcmlnaW4ucHJvdG9jb2wgPSBtX21haW5GcmFtZU9yaWdpbi5wcm90b2NvbC5p
c29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQubV9tYWluRnJhbWVPcmlnaW4uaG9zdCA9IG1fbWFp
bkZyYW1lT3JpZ2luLmhvc3QuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0Lm1fbWFpbkZyYW1l
T3JpZ2luLnBvcnQgPSBtX21haW5GcmFtZU9yaWdpbi5wb3J0OworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ciYgYSwgY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBiKQogewogICAgIGlmICgm
YSA9PSAmYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oCmluZGV4
IGJlYmNkYzQuLmRiZjlkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXIuaApAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAorICAgIFVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBpc29sYXRlZENvcHkoKSBjb25zdDsKKwogcHJpdmF0
ZToKICAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7CiAgICAgU2VjdXJpdHlPcmlnaW5EYXRhIG1f
b3BlbmluZ09yaWdpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zMWY4YzgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGUuY3BwCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BS
T0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0lEQkRhdGFiYXNlTWV0YWRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFi
YXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKKy8vIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbWV0YWRhdGEgc2NoZW1hIGJl
aW5nIHVzZWQgaW4gdGhlIG1ldGFkYXRhIGRhdGFiYXNlLgorc3RhdGljIGNvbnN0IGludCBjdXJy
ZW50TWV0YWRhdGFWZXJzaW9uID0gMTsKKworVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGU6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKGNvbnN0IFVuaXF1ZUlE
QkRhdGFiYXNlJiBkYXRhYmFzZSkKKyAgICA6IG1faWRlbnRpZmllcihkYXRhYmFzZS5pZGVudGlm
aWVyKCkuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3Rvcnko
ZGF0YWJhc2UuYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpKQorewor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1l
dGFkYXRhKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9t
ZXRhZGF0YURCKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YURCLT5pc09wZW4oKSk7CisKKyAgICBp
ZiAoIW1fbWV0YWRhdGFEQi0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJREJEYXRhYmFz
ZUluZm8gKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZM
SUNUIFJFUExBQ0UsIHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIElEQkRhdGFiYXNlSW5mbyB0YWJs
ZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX21ldGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21l
dGFkYXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgeworICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUlu
Zm8gVkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywgPyk7Iik7CisgICAgICAgIGlmIChzcWwucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJy
ZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLnN0
ZXAoKSAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRhdGFiYXNlSW5mbyB0
YWJsZSAoJWkpIC0gJXMiLCBtX21ldGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREIt
Pmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1fbWV0YWRhdGFEQiA9IG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIklOU0VSVCBJTlRPIElEQkRh
dGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZU5hbWUnLCA/KTsiKTsKKyAgICAgICAgaWYgKHNx
bC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAg
ICB8fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGluc2VydCBkYXRhYmFzZSBuYW1lIGludG8gSURCRGF0YWJhc2VJbmZvIHRh
YmxlICglaSkgLSAlcyIsIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yKCksIG1fbWV0YWRhdGFEQi0+
bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAg
ICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRlZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRo
ZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3VwcG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNp
Z25lZCBpbnRlZ2Vycy4KKyAgICAgICAgLy8gVGhlcmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJz
aW9uIGFzIGEgU3RyaW5nLgorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRh
REIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnRGF0YWJhc2VWZXJzaW9u
JywgPyk7Iik7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgU3RyaW5nOjpudW1iZXIoMCkpICE9IFNRTFJlc3Vs
dE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJ
REJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3Io
KSwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBtX21ldGFkYXRh
REIgPSBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBUaGlzIGluaXRpYWwgbWV0YWRhdGEgbWF0Y2hlcyB0aGUgZGVmYXVsdCB2
YWx1ZXMgd2UganVzdCBwdXQgaW50byB0aGUgbWV0YWRhdGEgZGF0YWJhc2UuCisgICAgYXV0byBt
ZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VNZXRhZGF0YT4oKTsKKyAgICBt
ZXRhZGF0YS0+bmFtZSA9IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKTsKKyAgICBtZXRhZGF0
YS0+dmVyc2lvbiA9IDA7CisKKyAgICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZTo6ZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEoKQoreworICAgIEFTU0VSVChtX21ldGFkYXRh
REIpOworCisgICAgaWYgKCFtX21ldGFkYXRhREItPnRhYmxlRXhpc3RzKCJJREJEYXRhYmFzZUlu
Zm8iKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG1ldGFkYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPigpOworICAgIHsKKyAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0
YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdNZXRhZGF0YVZlcnNpb24nOyIpOworICAgICAgICBpZiAo
c3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBtZXRhZGF0YS0+dmVyc2lvbiA9IHNxbC5nZXRDb2x1bW5JbnQoMCk7CisgICAgfQorICAgIHsK
KyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVl
IEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOworICAg
ICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBtZXRhZGF0YS0+bmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBpZiAobWV0YWRhdGEtPm5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIG1ldGFkYXRhIGRhdGFi
YXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVzJykiLCBtZXRh
ZGF0YS0+bmFtZS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAg
IH0KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIlNF
TEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJz
aW9uJzsiKTsKKyAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSBzcWwuZ2V0Q29s
dW1uVGV4dCgwKTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgbWV0YWRhdGEtPnZlcnNpb24g
PSBzdHJpbmdWZXJzaW9uLnRvVUludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmICghb2spIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBk
b2VzIG5vdCBjbGVhbmx5IGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVy
c2lvbiIsIHN0cmluZ1ZlcnNpb24udXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIHdlIHNhdmUg
T2JqZWN0U3RvcmVzIGFuZCBpbmRleGVzIHdlIG5lZWQgdG8gZXh0cmFjdCB0aGVpciBtZXRhZGF0
YSwgYWxzby4KKyAgICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVEYXRhYmFzZT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6
Om9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYXV0
byBzcWxpdGVEYXRhYmFzZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlRGF0YWJhc2U+KCk7Cisg
ICAgaWYgKCFzcWxpdGVEYXRhYmFzZS0+b3BlbihwYXRoKSkgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBvcGVuIFNRTGl0ZSBkYXRhYmFzZSBhdCBwYXRoICclcyciLCBwYXRoLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
c3FsaXRlRGF0YWJhc2U7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRh
PiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hNZXRh
ZGF0YSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBTdHJpbmcgbWV0
YWRhdGFEQkZpbGVuYW1lID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fYWJzb2x1dGVEYXRh
YmFzZURpcmVjdG9yeSwgIklEQk1ldGFkYXRhLnNxbGl0ZTMiKTsKKyAgICBtX21ldGFkYXRhREIg
PSBvcGVuU1FMaXRlRGF0YWJhc2VBdFBhdGgobWV0YWRhdGFEQkZpbGVuYW1lKTsKKyAgICBpZiAo
IW1fbWV0YWRhdGFEQikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gbWV0YWRhdGEgPSBleHRyYWN0RXhpc3RpbmdNZXRh
ZGF0YSgpOworICAgIGlmICghbWV0YWRhdGEpCisgICAgICAgIG1ldGFkYXRhID0gY3JlYXRlQW5k
UG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKTsKKworICAgIGlmICghbWV0YWRhdGEpCisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGVzdGFibGlzaCBJREIgZGF0YWJhc2UgYXQgcGF0aCAnJXMn
IiwgbWV0YWRhdGFEQkZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIG1ldGFk
YXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOTRkYzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9V
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlX2gK
KyNkZWZpbmUgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVfaAorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiVW5pcXVlSURCRGF0YWJhc2UuaCIgCisjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTUUxpdGVE
YXRhYmFzZTsKK3N0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUgRklOQUwg
OiBwdWJsaWMgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29u
c3QgVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShkYXRhYmFzZSkp
OworICAgIH0KKworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFi
YXNlTWV0YWRhdGE+IGdldE9yRXN0YWJsaXNoTWV0YWRhdGEoKSBPVkVSUklERTsKKworcHJpdmF0
ZToKKyAgICBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShjb25zdCBVbmlxdWVJ
REJEYXRhYmFzZSYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlPiBvcGVuU1FMaXRlRGF0YWJhc2VBdFBhdGgoY29uc3QgU3RyaW5nJik7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IGV4dHJhY3RFeGlzdGluZ01l
dGFkYXRhKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRh
dGE+IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKCk7CisKKyAgICBVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAgIFN0cmluZyBtX2Fic29sdXRlRGF0
YWJhc2VEaXJlY3Rvcnk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U+IG1fbWV0YWRhdGFEQjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNT
KQorI2VuZGlmIC8vIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKaW5kZXggZGFhYzZmYi4u
ZThhOTFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2lu
RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5j
cHAKQEAgLTY5LDYgKzY5LDIwIEBAIGJvb2wgU2VjdXJpdHlPcmlnaW5EYXRhOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTZWN1cml0eU9yaWdpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK1N0cmluZyBTZWN1cml0eU9yaWdpbkRhdGE6OmRhdGFiYXNlRmlsZW5hbWVJ
ZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5
T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShwcm90b2NvbCwgaG9zdCwgcG9ydCk7Cisg
ICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKTsKK30KKworYm9v
bCBTZWN1cml0eU9yaWdpbkRhdGE6OmNhblNoYXJlRGF0YWJhc2VzKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gRm9yIG5vdywgYW4gb3JpZ2luJ3MgZGF0
YWJhc2UgYWNjZXNzIGlzIHByZWRpY2F0ZWQgb24gZXF1YWxpdHkgd2l0aCB0aGUgb3RoZXIgb3Jp
Z2luLgorICAgIC8vIFdlIG1pZ2h0IG5lZWQgdG8gbWFrZSB0aGlzIG1vcmUgbnVhbmNlZCBsYXRl
ci4KKyAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXI7Cit9CisKKwogdm9pZCBwZXJmb3JtQVBJQ2Fs
bGJhY2tXaXRoU2VjdXJpdHlPcmlnaW5EYXRhVmVjdG9yKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdGE+JiBvcmlnaW5EYXRhcywgQXJyYXlDYWxsYmFjayogY2FsbGJhY2spCiB7CiAgICAg
aWYgKCFjYWxsYmFjaykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3Vy
aXR5T3JpZ2luRGF0YS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0
YS5oCmluZGV4IGMzZjg3YTAuLjUzNjQzMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vj
dXJpdHlPcmlnaW5EYXRhLmgKQEAgLTQ2LDYgKzQ2LDEyIEBAIHN0cnVjdCBTZWN1cml0eU9yaWdp
bkRhdGEgewogICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0
OwogICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXImLCBTZWN1
cml0eU9yaWdpbkRhdGEmKTsKIAorICAgIC8vIFJldHVybnMgYSBzZXJpYWxpemVkIHN0cmluZyB0
aGF0IGlzIGFwcHJvcHJpYXRlIGZvciB1c2UgYXMgYSB1bmlxdWUgZmlsZW5hbWUKKyAgICBTdHJp
bmcgZGF0YWJhc2VGaWxlbmFtZUlkZW50aWZpZXIoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGlzIG9yaWdpbiBjYW4gdXNlIHRoZSBzYW1lIGRhdGFiYXNlcyBhcyB0aGUgZ2l2
ZW4gb3JpZ2luLgorICAgIGJvb2wgY2FuU2hhcmVEYXRhYmFzZXMoY29uc3QgU2VjdXJpdHlPcmln
aW5EYXRhJikgY29uc3Q7CisKICAgICAvLyBGSVhNRSA8cmRhcjovLzkwMTgzODY+OiBXZSBzaG91
bGQgYmUgc2VuZGluZyBtb3JlIHN0YXRlIGFjcm9zcyB0aGUgd2lyZSB0aGFuIGp1c3QgdGhlIHBy
b3RvY29sLAogICAgIC8vIGhvc3QsIGFuZCBwb3J0LgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjA0Yjg0ZS4uMmU5ZDgyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNTY1LDYgKzU2NSw5IEBACiAJCTUxNjMxOTkyMTYyODk4MEEwMEUyMkYwMCAvKiBOZXR3
b3JrUHJvY2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2MzE5OTExNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJv
eHlNYWMubW0gKi87IH07CiAJCTUxNjMxOTk0MTYyODlBNjAwMEUyMkYwMCAvKiBOZXR3b3JrUHJv
Y2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUFDQzkzNDE2MjgwNjQ4MDAzNDI1NTAgLyogTmV0d29ya1Byb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTYzMTk5NTE2Mjg5QTYzMDBFMjJGMDAgLyog
TmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFBQ0M5MzUxNjI4MDY0ODAwMzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNz
TWVzc2FnZXMuaCAqLzsgfTsKKwkJNTE2NTRFRkQxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjU0RUZCMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgKi87IH07CisJCTUxNjU0RUZFMTg0RUYz
M0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NTRFRkMxODRFRjMz
RjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggKi87IH07
CisJCTUxNjU0RjAwMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
NTRFRkYxODRFRjM0QTAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgg
Ki87IH07CiAJCTUxNjdFRUEwMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY3RUU5RTE3
MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5oICovOyB9OwogCQk1MTY3RUVBMTE3
MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjdFRTlGMTcwMzc3QkYwMDc2ODFDQSAvKiBE
aXNrQ2FjaGVNb25pdG9yLm1tICovOyB9OwogCQk1MTZBNEE1RDEyMEEyQ0NEMDBDMDVCN0YgLyog
V2ViRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovOyB9OwpAQCAtMjExNyw2
ICsyMTIwLDkgQEAKIAkJNTE1RTc3MzIxODQwMkQ1MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2
MEJGRTAxMzM4MURGOTAwOTE4OTk5IC8qIExvZ2dpbmcubWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9nZ2luZy5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNjMxOTkxMTYyODk4MEEwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc1By
b3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29y
a1Byb2Nlc3NQcm94eU1hYy5tbTsgcGF0aCA9IG1hYy9OZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY1NEVGQjE4NEVGMzNGMDA3REM4Mzcg
LyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY1NEVGQzE4NEVGMzNGMDA3
REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NTRFRkYxODRFRjM0QTAwN0RD
ODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjdFRTlFMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2Fj
aGVNb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc2tDYWNoZU1v
bml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2N0VFOUYxNzAzNzdCRjAw
NzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBEaXNrQ2FjaGVNb25pdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQwMDUsNiArNDAxMSwxNSBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUxNjU0RUYwMTg0RUYyNDEwMDdEQzgzNyAvKiBzcWxp
dGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxNjU0
RUZCMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0
ZS5jcHAgKi8sCisJCQkJNTE2NTRFRkMxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHNxbGl0ZTsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTUxN0RENUJCMTgwREE3QzQwMDgxNjYw
QiAvKiBEYXRhYmFzZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtNDEyOSwxMSArNDE0NCwxMyBAQAogCQk1MUUzNTFGOTE4MEY1Q0Y2MDBFNTNCRTkgLyog
SW5kZXhlZERCICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1MTY1NEVGMDE4NEVGMjQxMDA3REM4MzcgLyogc3FsaXRlICovLAogCQkJCTUxRDBENDJFMTgz
QjM0MTMwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcCAqLywKIAkJ
CQk1MUQwRDQyRjE4M0IzNDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bi5oICovLAogCQkJCTUxRDBENDMwMTgzQjM0MTMwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovLAogCQkJCTUxNUU3NzJEMTg0MDE1ODAwMDA3MjAz
RiAvKiBVbmlxdWVJREJEYXRhYmFzZS5jcHAgKi8sCiAJCQkJNTE1RTc3MkUxODQwMTU4MDAwMDcy
MDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlLmggKi8sCisJCQkJNTE2NTRFRkYxODRFRjM0QTAwN0RD
ODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNTE1RTc3MzEx
ODQwMkQ1MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAgKi8sCiAJ
CQkJNTE1RTc3MzIxODQwMkQ1MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ci5oICovLAogCQkJKTsKQEAgLTU2NzUsNiArNTY5Miw3IEBACiAJCQkJQkM4MTQ3QTkxMkY2NENE
QTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNBOEM2QjAxMUUzQzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJ
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTlFMzI4OTE4MjE2MzY5MDBGNUQwNEMgLyog
V0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2NTRFRkUxODRF
RjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzMzRTBEMTEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNERGNzcxMjBCNUI3OTAwODI2
QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QjBCMERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJz
LmggaW4gSGVhZGVycyAqLywKQEAgLTU4ODMsNiArNTkwMSw3IEBACiAJCQkJQkNBQzExMUYxMkM5
MkMxRjAwQjA4RUVFIC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5Q2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGNjJBNzZCOTEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCN0Q3MkMxMjg4Q0FBRDAwQ0ZE
MDhDIC8qIFdlYkRvd25sb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY1NEYwMDE4
NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMDMyRDdCMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0EwRUY5RjEyMzMyNjQyMDA3RDNDRkIgLyogV2ViRWRpdENv
bW1hbmRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEN0QxMEY0Mzc4RDAwNThDMTVB
IC8qIFdlYkVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTUzLDYgKzcxNzIsNyBA
QAogCQkJCTFBNDRCOTU3MTZCNzM3QUEwMEI3QkJEOCAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZGNDkwMDE4MzNERTc4MDA5QUIxNUEgLyogV0tEZXBy
ZWNhdGVkRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0RENUJFMTgwREE3RDMw
MDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MTY1NEVGRDE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2QkQ4NUUxNTAxOUJDMzAwNzFGNDI0IC8q
IFN0cmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFaWjQxN0VGMTJDMDBEODcw
MDJCRTY3QiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFFMzUxRkYxODBGNUQwRjAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzcy5jcHAgaW4gU291cmNl
cyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218994</attachid>
            <date>2013-12-11 12:15:47 -0800</date>
            <delta_ts>2013-12-11 17:05:44 -0800</delta_ts>
            <desc>Patch v3 - Message passing for threading with cross thread copying.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>75901</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZWI3NjBiMy4uMDc3Y2MyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMi0xMSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzIEluZGV4ZWREQjogRXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBFeHBvcnQgdG9VSW50NjRTdHJpY3QoKS4KKwogMjAxMy0xMi0xMCAg
TGFzemxvIFZpZGFjcyAgPGxhY0BpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgVXNlIHN0ZDo6
YXJyYXkgd2hlbiBjb21wdXRpbmcgTUQ1IGNoZWNrc3VtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaApp
bmRleCAzYzQyNGI0Li5iM2Q4NDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTM2OCw3
ICszNjgsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGludCB0b0ludFN0
cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSB1bnNpZ25lZCB0b1VJbnRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9
IDEwKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50NjRfdCB0b0ludDY0U3Ry
aWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7Ci0gICAgdWludDY0X3QgdG9V
SW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKKyAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgdWludDY0X3QgdG9VSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBp
bnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBpbnRwdHJfdCB0b0ludFB0clN0cmljdChib29sKiBv
ayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBj
YTdjNDgzLi4yMGQzM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNzk5LDYgKzc5OSw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmQuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAorICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnkuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWRhZGFkNC4uNGM1NzMyMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMxIEBACisyMDEzLTEyLTExICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KKworICAgICAgICBEYXRhYmFzZVByb2Nlc3MgSW5kZXhlZERCOiBFc3RhYmxpc2ggYSBtZXRh
ZGF0YSBiYWNraW5nIHN0b3JlIG9uIGRpc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNTI1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlYWNoIENyb3NzVGhyZWFkQ29waWVyIGhvdyB0byBoYW5kbGUg
SURCRGF0YWJhc2VNZXRhZGF0YS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaDoKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6
aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmg6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjo6OmNvcHkpOiBBZGQgYW4gSURCRGF0YWJhc2VNZXRhZGF0YSBzcGVjaWFsaXphdGlv
bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOgorCiAyMDEzLTEyLTEw
ICBSb2IgQnVpcyAgPHJvYi5idWlzQHNhbXN1bmcuY29tPgogCiAgICAgICAgIENsZWFuIHVwIFNW
R1NjcmlwdEVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGM5YTJkZmEu
LjFiOTU5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTgyNyw2ICsxODI3
LDcgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFk
YXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0
YWRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMTc4ODUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZU1ldGFkYXRhLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkRhdGFiYXNl
TWV0YWRhdGEgSURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAg
ICBJREJEYXRhYmFzZU1ldGFkYXRhIHJlc3VsdDsKKyAgICByZXN1bHQuaWQgPSBpZDsKKyAgICBy
ZXN1bHQudmVyc2lvbiA9IHZlcnNpb247CisgICAgcmVzdWx0Lm1heE9iamVjdFN0b3JlSWQgPSBt
YXhPYmplY3RTdG9yZUlkOworCisgICAgcmVzdWx0Lm5hbWUgPSBuYW1lLmlzb2xhdGVkQ29weSgp
OworCisgICAgT2JqZWN0U3RvcmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBvYmplY3RTdG9yZXMu
YmVnaW4oKTsKKyAgICBPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0
U3RvcmVzLmVuZCgpOworICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQorICAgICAgICByZXN1bHQu
b2JqZWN0U3RvcmVzLnNldChpLT5rZXksIGktPnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0lEQk9iamVjdFN0b3JlTWV0YWRhdGEgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIHJlc3VsdDsKKyAgICByZXN1bHQuaWQgPSBpZDsKKyAgICByZXN1bHQuYXV0b0luY3Jl
bWVudCA9IGF1dG9JbmNyZW1lbnQ7CisgICAgcmVzdWx0Lm1heEluZGV4SWQgPSBtYXhJbmRleElk
OworCisgICAgcmVzdWx0Lm5hbWUgPSBuYW1lLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5r
ZXlQYXRoID0ga2V5UGF0aC5pc29sYXRlZENvcHkoKTsKKworICAgIEluZGV4TWFwOjpjb25zdF9p
dGVyYXRvciBpID0gaW5kZXhlcy5iZWdpbigpOworICAgIEluZGV4TWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBpbmRleGVzLmVuZCgpOworICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQorICAgICAg
ICByZXN1bHQuaW5kZXhlcy5zZXQoaS0+a2V5LCBpLT52YWx1ZS5pc29sYXRlZENvcHkoKSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitJREJJbmRleE1ldGFkYXRhIElEQkluZGV4TWV0YWRh
dGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgSURCSW5kZXhNZXRhZGF0YSByZXN1bHQ7
CisgICAgcmVzdWx0LmlkID0gaWQ7CisgICAgcmVzdWx0LnVuaXF1ZSA9IHVuaXF1ZTsKKyAgICBy
ZXN1bHQubXVsdGlFbnRyeSA9IG11bHRpRW50cnk7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUu
aXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0LmtleVBhdGggPSBrZXlQYXRoLmlzb2xhdGVkQ29w
eSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmgKaW5kZXggY2Rh
NTY0ZC4uZGRhNTNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaApAQCAtNTMsNiArNTMsOCBAQCBzdHJ1Y3QgSURC
SW5kZXhNZXRhZGF0YSB7CiAgICAgYm9vbCB1bmlxdWU7CiAgICAgYm9vbCBtdWx0aUVudHJ5Owog
CisgICAgSURCSW5kZXhNZXRhZGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKKwogICAgIHN0YXRp
YyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOwogfTsKIApAQCAtNzcsNiArNzksNyBAQCBz
dHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0
X3QsIElEQkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOwogICAgIEluZGV4TWFwIGluZGV4ZXM7CiAK
KyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogfTsKIAog
c3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGEgewpAQCAtMTIwLDYgKzEyMyw4IEBAIHN0cnVjdCBJ
REJEYXRhYmFzZU1ldGFkYXRhIHsKICAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7CiAKICAg
ICBPYmplY3RTdG9yZU1hcCBvYmplY3RTdG9yZXM7CisKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRh
IGlzb2xhdGVkQ29weSgpIGNvbnN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCA3ZDhjOGQyLi4xOWM1YTRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcApAQCAt
MjQ4LDYgKzI0OCwxOCBAQCBib29sIElEQktleVBhdGg6Om9wZXJhdG9yPT0oY29uc3QgSURCS2V5
UGF0aCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitJREJLZXlQYXRoIElE
QktleVBhdGg6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgSURCS2V5UGF0aCByZXN1bHQ7
CisgICAgcmVzdWx0Lm1fdHlwZSA9IG1fdHlwZTsKKyAgICByZXN1bHQubV9zdHJpbmcgPSBtX3N0
cmluZy5pc29sYXRlZENvcHkoKTsKKworICAgIHJlc3VsdC5tX2FycmF5LnJlc2VydmVDYXBhY2l0
eShtX2FycmF5LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FycmF5LnNp
emUoKTsgKytpKQorICAgICAgICByZXN1bHQubV9hcnJheS5hcHBlbmQobV9hcnJheVtpXS5pc29s
YXRlZENvcHkoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGgu
aAppbmRleCAzZDAwMTgyLi4xMzVmNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UGF0aC5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICBib29s
IGlzVmFsaWQoKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5UGF0aCYg
b3RoZXIpIGNvbnN0OwogCisgICAgSURCS2V5UGF0aCBpc29sYXRlZENvcHkoKSBjb25zdDsKKwog
cHJpdmF0ZToKICAgICBUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV9zdHJpbmc7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCmluZGV4IDMxM2RhN2EuLmNkNTYyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBA
IC0zNjQsOSArMzY0LDExIEBAIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIxNGNhbmNlbGxl
ZEVycm9yRXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIzMmRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRVJLTlNfMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUUKIF9fWk43V2Vi
Q29yZTE0UmVzb3VyY2VMb2FkZXI2Y2FuY2VsRXYKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJh
c2UxMXRhYmxlRXhpc3RzRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRh
YmFzZTEybGFzdEVycm9yTXNnRXYKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2UxNGV4ZWN1
dGVDb21tYW5kRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTRv
cGVuRVJLTjNXVEY2U3RyaW5nRWIKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2U1Y2xvc2VF
dgorX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTlsYXN0RXJyb3JFdgogX19aTjdXZWJDb3Jl
MTRTUUxpdGVEYXRhYmFzZUMxRXYKIF9fWk43V2ViQ29yZTE0U1FMaXRlRGF0YWJhc2VEMUV2CiBf
X1pON1dlYkNvcmUxNFNjaGVtZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWxFUktO
M1dURjZTdHJpbmdFCkBAIC01NzEsMTIgKzU3MywxNCBAQCBfX1pON1dlYkNvcmUxNVByb3RlY3Rp
b25TcGFjZUMxRXYKIF9fWk43V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MjFodHRwUGlwZWxpbmlu
Z0VuYWJsZWRFdgogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QyNHNldEhUVFBQaXBlbGlu
aW5nRW5hYmxlZEViCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDEyZ2V0Q29sdW1uSW50
RWkKK19fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTJpc0NvbHVtbk51bGxFaQogX19aTjdX
ZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxM2dldENvbHVtblRleHRFaQogX19aTjdXZWJDb3JlMTVT
UUxpdGVTdGF0ZW1lbnQxNGV4ZWN1dGVDb21tYW5kRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3Rh
dGVtZW50MjFnZXRDb2x1bW5CbG9iQXNTdHJpbmdFaQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0
ZW1lbnQyMmlzQ29sdW1uRGVjbGFyZWRBc0Jsb2JFaQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0
ZW1lbnQ0c3RlcEV2CiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDVyZXNldEV2CitfX1pO
N1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDdiaW5kSW50RWlpCiBfX1pON1dlYkNvcmUxNVNRTGl0
ZVN0YXRlbWVudDdwcmVwYXJlRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJpbmRC
bG9iRWlSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50OGJpbmRU
ZXh0RWlSS04zV1RGNlN0cmluZ0UKQEAgLTY5MSw2ICs2OTUsNyBAQCBfX1pON1dlYkNvcmUxN1NR
TGl0ZVRyYW5zYWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVh
dGVFUE5TXzVGcmFtZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0
RVJLTlNfMjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUxN2NhY2hlRE9NU3Ry
dWN0dXJlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOM0pTQzlTdHJ1Y3R1cmVFUEtOUzJfOUNs
YXNzSW5mb0UKIF9fWk43V2ViQ29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlDR0NvbnRleHRQTlNf
MTVQbGF0Zm9ybUNBTGF5ZXJFUk4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtNUVOUzRfMTVD
cmFzaE9uT3ZlcmZsb3dFRUUKK19fWk43V2ViQ29yZTE3ZW5jb2RlRm9yRmlsZU5hbWVFUktOM1dU
RjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxN2xhbmd1YWdlRGlkQ2hhbmdlRXYKIF9fWk43V2ViQ29y
ZTE3b3BlblRlbXBvcmFyeUZpbGVFUktOM1dURjZTdHJpbmdFUmkKIF9fWk43V2ViQ29yZTE3c2V0
Q29va2llc0Zyb21ET01FUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUzVf
UktOM1dURjZTdHJpbmdFCkBAIC03ODUsNiArNzkwLDggQEAgX19aTjdXZWJDb3JlMjBwcmV2aW91
c0xpbmVQb3NpdGlvbkVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRWlOU18xMkVkaXRhYmxlVHlwZUUK
IF9fWk43V2ViQ29yZTIwcHJvdG9jb2xJc0phdmFTY3JpcHRFUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUyMHRvVUludDMyRW5mb3JjZVJhbmdlRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1Zh
bHVlRQogX19aTjdXZWJDb3JlMjFCYWNrRm9yd2FyZENvbnRyb2xsZXIxMWl0ZW1BdEluZGV4RWkK
K19fWk43V2ViQ29yZTIxQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlSUxiMEVMYjBFTjNXVEY2U3RyaW5n
RUU0Y29weUVSS1MyXworX19aTjdXZWJDb3JlMjFDcm9zc1RocmVhZENvcGllckJhc2VJTGIwRUxi
MEVOU18xOUlEQkRhdGFiYXNlTWV0YWRhdGFFRTRjb3B5RVJLUzFfCiBfX1pON1dlYkNvcmUyMU1l
bW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0YWxsRXYKIF9fWk43V2ViQ29yZTIxTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uMjFkZWZhdWx0U3RvcmFnZVNlc3Npb25FdgogX19aTjdXZWJDb3JlMjFOZXR3b3Jr
U3RvcmFnZVNlc3Npb24yNXN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb25FdgpAQCAtMTU5MCw2ICsx
NTk3LDcgQEAgX19aTks3V2ViQ29yZTE4UmVuZGVyTGF5ZXJCYWNraW5nMjBjb21wb3NpdGluZ0xh
eWVyVHlwZUV2CiBfX1pOSzdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTFpc1N1c3BlbmRl
ZEV2CiBfX1pOSzdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMjRudW1iZXJPZkFjdGl2ZUFu
aW1hdGlvbnNFUE5TXzhEb2N1bWVudEUKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xs
ZXIzM2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZEV2CitfX1pOSzdXZWJDb3JlMTlJ
REJEYXRhYmFzZU1ldGFkYXRhMTJpc29sYXRlZENvcHlFdgogX19aTks3V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjEyZ2V0SGlnaGxpZ2h0RVBOU185SGlnaGxpZ2h0RQogX19aTks3V2ViQ29y
ZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI5YnVpbGRPYmplY3RGb3JIaWdobGlnaHRlZE5vZGVFdgog
X19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEwaHR0cE1ldGhvZEV2CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2Rj
YzkwYy4uNGU5ZjA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAkJMkU0MzQ2NTQwRjU0NkE4
MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDY0MjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhy
ZWFkLmNwcCAqLzsgfTsKIAkJMkU0MzQ2NTUwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVh
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2
NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFNDM0NjU4MEY1NDZBOTkwMEIwRjFCQSAv
KiBDcm9zc1RocmVhZENvcGllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRTQzNDY1NjBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwICovOyB9OwotCQkyRTQzNDY1OTBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRD
b3BpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
NDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICovOyB9OworCQky
RTQzNDY1OTBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjU3MEY1NDZBOTkwMEIw
RjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTJFNzU4MkVFMTI3NjRGMjYwMDYyNjI4QiAvKiBKU0ZpbGVS
ZWFkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkU3NTgyRUQxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmlsZVJlYWRlckN1c3RvbS5jcHAg
Ki87IH07CiAJCTJFNzU4NDFEMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFB
MTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyLmNwcCAqLzsgfTsKIAkJMkU3NTg0
MUUxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFCMTI3NzlBREEwMDYyNjI4QiAv
KiBGaWxlUmVhZGVyTG9hZGVyLmggKi87IH07CkBAIC0xNzUxLDYgKzE3NTEsNyBAQAogCQk1MTYw
RjQ5ODBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwRjQ5NzBCMEFBNzVGMDBDMUQyQUYg
LyogSGlzdG9yeUl0ZW1NYWMubW0gKi87IH07CiAJCTUxNjJDN0Y0MTFGNzdFRkIwMDYxMkVGRSAv
KiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3Bw
ICovOyB9OwogCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0YzMTFG
NzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxNjMxMTdEMTg1MTI0MkIwMDUzNDY0NyAvKiBJ
REJEYXRhYmFzZU1ldGFkYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjMxMTdDMTg1MTI0MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFzZU1ldGFk
YXRhLmNwcCAqLzsgfTsKIAkJNTE2NEVENDMxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNv
bm5lY3Rpb25MZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjRFRDQxMTgzMjA4QzcwMEVBOEZGMSAvKiBJREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQi5jcHAgKi87IH07CiAJCTUxNjRFRDQ0MTgzMjA4QzcwMEVBOEZGMSAvKiBJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NEVENDIxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCLmggKi87IH07CiAJCTUxNjYwQUI2MTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNr
aW5nU3RvcmVMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjYwQUIwMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVMZXZl
bERCLmNwcCAqLzsgfTsKQEAgLTg1MDEsNiArODUwMiw3IEBACiAJCTUxNjBGNDk3MEIwQUE3NUYw
MEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IEhpc3RvcnlJdGVtTWFjLm1tOyBwYXRoID0gbWFjL0hpc3RvcnlJdGVtTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYyQzdGMjExRjc3RUZBMDA2MTJF
RkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2NoZW1lUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NoZW1lUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE2MzExN0MxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRhdGFiYXNlTWV0YWRh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VN
ZXRhZGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjRFRDQxMTgzMjA4
QzcwMEVBOEZGMSAvKiBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjRFRDQyMTgzMjA4QzcwMEVBOEZGMSAv
KiBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTY2MEFCMDE4MjhCQjgyMDAwNzRDQUQgLyogSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJCYWNraW5n
U3RvcmVMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MTQyLDYg
KzE3MTQ0LDcgQEAKIAkJCQk1MUQ3MTk4MzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0YWJhc2VF
cnJvci5oICovLAogCQkJCTUxRDcxOTg0MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUV4
Y2VwdGlvbi5jcHAgKi8sCiAJCQkJNTFENzE5ODUxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFi
YXNlRXhjZXB0aW9uLmggKi8sCisJCQkJNTE2MzExN0MxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRh
dGFiYXNlTWV0YWRhdGEuY3BwICovLAogCQkJCTUxQzk2MTFBMTgzRDJCODAwMEQyMDAyRSAvKiBJ
REJEYXRhYmFzZU1ldGFkYXRhLmggKi8sCiAJCQkJNTFENzE5ODYxODExMDZERjAwMTZEQzUxIC8q
IElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCiAJCQkJNTFENzE5ODcxODExMDZERjAwMTZEQzUx
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oICovLApAQCAtMjgyMjgsNiArMjgyMzEsNyBAQAogCQkJ
CUIyQzNEQTNEMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNMYXRpbjEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJBRkZDOTkwRDAwQTVERjAwMzAwNzREIC8qIFRleHRDb2RlY01hYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEzRjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVj
VXNlckRlZmluZWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE2MzExN0QxODUxMjQyQjAwNTM0
NjQ3IC8qIElEQkRhdGFiYXNlTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RB
NDEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY1VURjE2LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxRkY4RjZDMTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzQzQ0I4MTEyRjI1RTUxMDAzM0M1RUUgLyogVGV4dENv
ZGVjVVRGOC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ny
b3NzVGhyZWFkQ29waWVyLmNwcAppbmRleCA1ZThiYTc5Li42NWRmNDdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC00MCw2ICs0MCwxMCBA
QAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpbmNsdWRlICJJREJEYXRh
YmFzZU1ldGFkYXRhLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDcm9zc1Ro
cmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBVUkw+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVy
QmFzZTxmYWxzZSwgZmFsc2UsIFVSTD46OmNvcHkoY29uc3QgVVJMJiB1cmwpCkBAIC02Nyw2ICs3
MSwxNSBAQCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBSZXNvdXJjZVJlc3Bv
bnNlPjo6VHlwZSBDcm9zc1RocmVhZENvcGllckJhcwogICAgIHJldHVybiByZXNwb25zZS5jb3B5
RGF0YSgpOwogfQogCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK0Nyb3NzVGhyZWFk
Q29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGE+OjpUeXBlIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGE+Ojpjb3B5
KGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIHJldHVybiBtZXRh
ZGF0YS5pc29sYXRlZENvcHkoKTsKK30KKworI2VuZGlmCisKIC8vIFRlc3QgQ3Jvc3NUaHJlYWRD
b3BpZXIgdXNpbmcgQ09NUElMRV9BU1NFUlQuCiAKIC8vIFZlcmlmeSB0aGF0IFRocmVhZFNhZmVS
ZWZDb3VudGVkIG9iamVjdHMgZ2V0IGhhbmRsZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKaW5kZXggYzc3YzkxYi4uZjRjOTNkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCkBAIC0xNDUsNiAr
MTQ1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFR5cGUgY29weShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgfTsKIAorI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorICAgIHN0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhOworICAgIHRlbXBsYXRlPD4g
c3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkRhdGFiYXNlTWV0
YWRhdGE+IHsKKyAgICAgICAgdHlwZWRlZiBJREJEYXRhYmFzZU1ldGFkYXRhIFR5cGU7CisgICAg
ICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpOworICAgIH07
CisjZW5kaWYKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgc3RydWN0IENyb3NzVGhy
ZWFkQ29waWVyIDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyQmFzZTxDcm9zc1RocmVhZENvcGll
ckJhc2VIZWxwZXI6OklzQ29udmVydGlibGVUb0ludGVnZXI8VD46OnZhbHVlLCBDcm9zc1RocmVh
ZENvcGllckJhc2VIZWxwZXI6OklzVGhyZWFkU2FmZVJlZkNvdW50ZWRQb2ludGVyPFQ+Ojp2YWx1
ZSwgVD4gewogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzkxMjdlZS4uMDFkMzgyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDc5IEBACisyMDEzLTEyLTExICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KKworICAgICAgICBEYXRhYmFzZVByb2Nlc3MgSW5kZXhlZERCOiBFc3RhYmxpc2gg
YSBtZXRhZGF0YSBiYWNraW5nIHN0b3JlIG9uIGRpc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTI1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBEYXRhYmFzZVByb2Nlc3MgYWxyZWFkeSBoYXMg
YW4gIkluZGV4ZWQgRGF0YWJhc2UgcGF0aCIuCisgICAgICAgIEVhY2ggU2VjdXJpdHlPcmlnaW4g
d2l0aCBpbmRleGVkIGRhdGFiYXNlcyB3aWxsIGhhdmUgYSBzdWJkaXJlY3RvcnkgdW5kZXIgdGhl
IHBhdGguCisgICAgICAgIEVhY2ggaW5kZXhlZCBkYXRhYmFzZSB3aWxsIGhhdmUgYSBzdWJkaXJl
Y3RvcnkgdW5kZXIgaXRzIFNlY3VyaXR5T3JpZ2luJ3MgcGF0aC4KKyAgICAgICAgSW5zaWRlIHRo
YXQgZGlyZWN0b3J5IHdpbGwgZXhpc3QgKDEpIG1ldGFkYXRhIGRhdGFiYXNlLCBhbmQgMC1OIE9i
amVjdFN0b3JlIGRhdGFiYXNlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGVzdGFibGlzaGVzIHRo
ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCB0aGUgKDEpIG1ldGFkYXRhIGRhdGFiYXNlLgorCisg
ICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6aW5pdGlhbGl6ZURhdGFiYXNlUHJvY2Vzcyk6IEFzeW5j
aHJvbm91c2x5IGVuc3VyZSB0aGUgaW5kZXhlZCBkYXRhYmFzZSBkaXJlY3RvcnkgZXhpc3RzLgor
ICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZUluZGV4ZWREYXRhYmFzZVJl
bGF0aXZlUGF0aEV4aXN0cyk6IEFsbG93IGFueW9uZSB0byBtYWtlIG5lY2Vzc2FyeSBkaXJlY3Rv
cmllcyByZWxhdGl2ZSB0bworICAgICAgICAgIHRoZSBpbmRleGVkIGRhdGFiYXNlIGRpcmVjdG9y
eS4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzKToK
KyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjphYnNvbHV0ZUluZGV4ZWREYXRhYmFz
ZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgpOiBJbnN0ZWFkIG9mIGV4cG9zaW5nIHRoZSBp
bmRleGVkIGRhdGFiYXNlIGRpcmVjdG9yeSwgCisgICAgICAgICAgZ2l2ZSBEYXRhYmFzZVByb2Nl
c3MgYSBtZXRob2QgdG8gYWxsb3cgb3RoZXJzIHRvIGNvbXB1dGUgYSBwYXRoIHJlbGF0aXZlIHRv
IHRoZSBpbmRleGVkIGRhdGFiYXNlIGRpcmVjdG9yeS4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJh
c2VQcm9jZXNzOjpwb3N0RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQ
cm9jZXNzOjpwZXJmb3JtTmV4dERhdGFiYXNlVGFzayk6CisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0RhdGFiYXNlUHJvY2Vzcy5oOgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1l
dGFkYXRhKToKKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVl
SURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZmlsZW5h
bWVGb3JEYXRhYmFzZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEpOiBUbyBiZSBy
dW4gb24gdGhlIGRhdGFiYXNlIHdvcmsgcXVldWUsIGVzdGFibGlzaGVzIGEgYmFja2luZyBzdG9y
ZQorICAgICAgICAgIGFuZCBleHRyYWN0cyBtZXRhZGF0YSBmcm9tIGl0LgorICAgICAgICAoV2Vi
S2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0
YSk6IENhbGxiYWNrIG9uY2UgbWV0YWRhdGEgZnJvbSB0aGUgYmFja2luZyBzdG9yZSBpcyByZWFk
eSBmb3IgdXNlLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6YWJzb2x1dGVE
YXRhYmFzZURpcmVjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
b3N0TWFpblRocmVhZFRhc2spOiBBZGQgYSBtYWluIHRocmVhZCB0YXNrIHF1ZXVlIGZvciB0aGlz
IGRhdGFiYXNlLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5l
eHRNYWluVGhyZWFkVGFzayk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9V
bmlxdWVJREJEYXRhYmFzZS5oOgorCisgICAgICAgIEFkZCBhIHZpcnR1YWwgYmFja2luZyBzdG9y
ZSBpbnRlcmZhY2U6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZTo6flVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlKToKKworICAg
ICAgICBBZGQgYSBTUUxpdGUgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBpbnRlcmZhY2U6CisgICAg
ICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKToKKyAgICAgICAgKFdlYktp
dDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmV4dHJhY3RFeGlzdGluZ01l
dGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGU6Om9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpnZXRPckVzdGFibGlzaE1ldGFkYXRhKToK
KyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oOgorCisgICAgICAgIEFkZCBhIGdlbmVyYWwgcHVycG9z
ZSBhc3luY2hyb25vdXMgdGFzayB0aGF0IGRvZXMgY3Jvc3MgdGhyZWFkIGNvcHlpbmc6CisgICAg
ICAgICogU2hhcmVkL0FzeW5jVGFzay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6QXN5bmNU
YXNrOjp+QXN5bmNUYXNrKToKKyAgICAgICAgKFdlYktpdDo6QXN5bmNUYXNrOjpBc3luY1Rhc2sp
OgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVBc3luY1Rhc2spOgorCisgICAgICAgIEFkZCBtb3Jl
IGlzb2xhdGVkIGNvcGllcnMgYW5kIGludHJvZHVjZSBXZWJLaXQgQ3Jvc3NUaHJlYWRDb3BpZXIg
c3BlY2lhbGl6YXRpb25zOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5p
cXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIERhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmg6CisKKyAgICAgICAg
KiBTaGFyZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2VjdXJp
dHlPcmlnaW5EYXRhOjpkYXRhYmFzZUZpbGVuYW1lSWRlbnRpZmllcik6CisgICAgICAgIChXZWJL
aXQ6OlNlY3VyaXR5T3JpZ2luRGF0YTo6Y2FuU2hhcmVEYXRhYmFzZXMpOgorICAgICAgICAoV2Vi
S2l0OjpTZWN1cml0eU9yaWdpbkRhdGE6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogU2hhcmVk
L1NlY3VyaXR5T3JpZ2luRGF0YS5oOgorCisgICAgICAgICogU2hhcmVkL1dlYkNyb3NzVGhyZWFk
Q29waWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3Jp
Z2luRGF0YS5oLgorICAgICAgICAoV2ViQ29yZTo6Ojpjb3B5KToKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVk
L1NlY3VyaXR5T3JpZ2luRGF0YS5oLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDEzLTEyLTEwICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVuYW1lIFdlYk51bWJlci5oIHRvIEFQSU51bWJlci5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3Bw
CmluZGV4IGIxYmRjN2MuLmQzZjg0NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC0yOCwxMCArMjgsMTUgQEAKIAogI2lm
IEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCisjaW5jbHVkZSAiQXN5bmNUYXNrLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2VQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVG9XZWJQcm9j
ZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC05NCw2
ICs5OSw1MyBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzczo6cmVtb3ZlVW5pcXVlSURCRGF0YWJhc2Uo
Y29uc3QgVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlKQogdm9pZCBEYXRhYmFzZVByb2Nlc3M6
OmluaXRpYWxpemVEYXRhYmFzZVByb2Nlc3MoY29uc3QgRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogICAgIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
ID0gcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CisKKyAgICBlbnN1cmVJbmRl
eGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMoU3RyaW5nSW1wbDo6ZW1wdHkoKSk7Cit9CisK
K3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjplbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhF
eGlzdHMoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQXN5bmNUYXNrKHRoaXMsICZE
YXRhYmFzZVByb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGFic29sdXRlSW5kZXhlZERhdGFiYXNl
UGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChyZWxhdGl2ZVBhdGgpKSk7Cit9CisKK3ZvaWQg
RGF0YWJhc2VQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbWFrZUFsbERpcmVjdG9y
aWVzKHBhdGgpKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGFsbCBkaXJlY3Rv
cmllcyBmb3IgcGF0aCAnJXMnIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKK30KKworU3RyaW5nIERh
dGFiYXNlUHJvY2Vzczo6YWJzb2x1dGVJbmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVs
YXRpdmVQYXRoKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKQoreworICAgIHJldHVybiBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQobV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHJlbGF0aXZl
UGF0aCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6
dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlVGFza011dGV4KTsKKworICAg
IG1fZGF0YWJhc2VUYXNrcy5hcHBlbmQoc3RkOjptb3ZlKHRhc2spKTsKKworICAgIG1fcXVldWUt
PmRpc3BhdGNoKGJpbmQoJkRhdGFiYXNlUHJvY2Vzczo6cGVyZm9ybU5leHREYXRhYmFzZVRhc2ss
IHRoaXMpKTsKK30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OnBlcmZvcm1OZXh0RGF0YWJhc2VU
YXNrKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBc3luY1Rhc2s+IHRhc2s7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9kYXRhYmFzZVRhc2tNdXRleCk7CisgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZVRhc2tzLmlz
RW1wdHkoKSk7CisgICAgICAgIHRhc2sgPSBtX2RhdGFiYXNlVGFza3MudGFrZUZpcnN0KCk7Cisg
ICAgfQorCisgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKIH0KIAogdm9pZCBEYXRhYmFzZVByb2Nl
c3M6OmNyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggODM3N2E0Yy4u
ZTNjZTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFi
YXNlUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFz
ZVByb2Nlc3MuaApAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBXb3JrUXVldWU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCitjbGFzcyBBc3luY1Rhc2s7CiBjbGFzcyBEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb247CiBjbGFzcyBVbmlxdWVJREJEYXRhYmFzZTsKIApAQCAtNTAsNyArNTEsMTAg
QEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2U+IGdldE9yQ3JlYXRl
VW5pcXVlSURCRGF0YWJhc2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAg
ICAgdm9pZCByZW1vdmVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZSYp
OwogCi0gICAgV29ya1F1ZXVlJiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8V29y
a1F1ZXVlJj4obV9xdWV1ZS5nZXQoKSk7IH0KKyAgICB2b2lkIGVuc3VyZUluZGV4ZWREYXRhYmFz
ZVJlbGF0aXZlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgYWJzb2x1dGVJ
bmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKGNvbnN0IFN0cmluZyYp
OworCisgICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+
KTsKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZVByb2Nlc3MoKTsKQEAgLTcyLDYgKzc2LDEwIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKGNvbnN0IERhdGFi
YXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIHZvaWQgY3JlYXRlRGF0YWJhc2VU
b1dlYlByb2Nlc3NDb25uZWN0aW9uKCk7CiAKKyAgICAvLyBGb3IgZXhlY3V0aW9uIG9uIHdvcmsg
cXVldWUgdGhyZWFkIG9ubHkKKyAgICB2b2lkIHBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKCk7Cisg
ICAgdm9pZCBlbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYpOworCiAgICAgVmVjdG9yPFJl
ZlB0cjxEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24+PiBtX2RhdGFiYXNlVG9XZWJQcm9j
ZXNzQ29ubmVjdGlvbnM7CiAKICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwpAQCAtNzksNiAr
ODcsOSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsK
IAogICAgIEhhc2hNYXA8VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLCBSZWZQdHI8VW5pcXVl
SURCRGF0YWJhc2U+PiBtX2lkYkRhdGFiYXNlczsKKworICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0
cjxBc3luY1Rhc2s+PiBtX2RhdGFiYXNlVGFza3M7CisgICAgTXV0ZXggbV9kYXRhYmFzZVRhc2tN
dXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcAppbmRleCBiYzcyNDVjLi5mZTlmYTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cApAQCAtMjksOCArMjksMTIgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5B
QkxFKERBVEFCQVNFX1BST0NFU1MpCiAKICNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKKyNpbmNs
dWRlICJBc3luY1Rhc2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3MuaCIKICNpbmNsdWRl
ICJEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKKyNpbmNsdWRlICJXZWJDcm9zc1RocmVhZENvcGll
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SURCRGF0YWJhc2VNZXRhZGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAg
LTQwLDE0ICs0NCwzOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogVW5pcXVlSURCRGF0YWJhc2U6
OlVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICwgbV9wcm9jZXNz
aW5nRGF0YWJhc2VRdWV1ZVJlcXVlc3RzKGZhbHNlKQogeworICAgIG1faW5NZW1vcnkgPSAhaWRl
bnRpZmllci5vcGVuaW5nT3JpZ2luKCkuY2FuU2hhcmVEYXRhYmFzZXMoaWRlbnRpZmllci5tYWlu
RnJhbWVPcmlnaW4oKSk7CisgICAgaWYgKG1faW5NZW1vcnkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEVhY2ggdW5pcXVlIEluZGV4ZWQgRGF0YWJhc2UgZXhpc3RzIGluIGEgZGlyZWN0b3J5
IG5hbWVkIGZvciB0aGUgZGF0YWJhc2UsIHdoaWNoIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSByZXBy
ZXNlbnRpbmcgaXRzIG9wZW5pbmcgb3JpZ2luLgorICAgIG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVj
dG9yeSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChpZGVudGlmaWVyLm9wZW5pbmdPcmlnaW4o
KS5kYXRhYmFzZUZpbGVuYW1lSWRlbnRpZmllcigpLCBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgp
KTsKKworICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuZW5zdXJlSW5kZXhlZERhdGFiYXNl
UmVsYXRpdmVQYXRoRXhpc3RzKG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeSk7CiB9CiAKIFVu
aXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UoKQogewogfQogCitTdHJpbmcgVW5p
cXVlSURCRGF0YWJhc2U6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkKK3sKKyAgICBBU1NFUlQo
IW1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKS5pc051bGwoKSk7CisKKyAgICBpZiAobV9pZGVu
dGlmaWVyLmRhdGFiYXNlTmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICIlMDAiOwor
CisgICAgU3RyaW5nIGZpbGVuYW1lID0gZW5jb2RlRm9yRmlsZU5hbWUobV9pZGVudGlmaWVyLmRh
dGFiYXNlTmFtZSgpKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gIi4iKQorICAgICAgICByZXR1cm4g
IiUyRSI7CisKKyAgICBpZiAoZmlsZW5hbWUgPT0gIi4uIikKKyAgICAgICAgcmV0dXJuICIlMkUl
MkUiOworCisgICAgcmV0dXJuIGZpbGVuYW1lOworfQorCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpyZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYgY29ubmVj
dGlvbikKIHsKICAgICBBU1NFUlQoIW1fY29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24p
KTsKQEAgLTYzLDY2ICs5MSw5MiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp1bnJlZ2lzdGVy
Q29ubmVjdGlvbihEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJiBjb25uZQogICAgICAgICBE
YXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZURhdGFiYXNlUXVldWVSZXF1ZXN0
KFBhc3NSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0KQordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZChi
b29sLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsK
LSAgICBBU1NFUlQocmVxdWVzdCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IC8vIElmIHRoZSBiYWNraW5nIHN0b3JlIGlzIGFscmVhZHkgb3BlbiBhbmQgd2UgYWxyZWFkeSBo
YXZlIHRoZSBtZXRhZGF0YSByZWFkeSB0byBnbywgcmV0dXJuIGl0IG5vdy4KKyAgICBpZiAobV9t
ZXRhZGF0YSkgeworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2sodHJ1ZSwgKm1fbWV0YWRhdGEp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3Qg
dW5hbnN3ZXJlZCBtZXRhZGF0YSByZXF1ZXN0LCBwb3N0IGEgdGFzayB0byBvcGVuIHRoZSBiYWNr
aW5nIHN0b3JlIGFuZCBnZXQgbWV0YWRhdGEuCisgICAgaWYgKG1fcGVuZGluZ01ldGFkYXRhUmVx
dWVzdHMuaXNFbXB0eSgpKQorICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQXN5bmNUYXNrKHRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSwgbV9pZGVudGlmaWVyLCBhYnNvbHV0ZURhdGFi
YXNlRGlyZWN0b3J5KCkpKTsKIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlUXVl
dWVSZXF1ZXN0c011dGV4KTsKLSAgICBtX2RhdGFiYXNlUXVldWVSZXF1ZXN0cy5hcHBlbmQocmVx
dWVzdCk7CisgICAgLy8gVGhlbiByZW1lbWJlciB0aGlzIG1ldGFkYXRhIHJlcXVlc3QgdG8gYmUg
YW5zd2VyZWQgbGF0ZXIuCisgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5j
UmVxdWVzdEltcGw8Pjo6Y3JlYXRlKFtjb21wbGV0aW9uQ2FsbGJhY2ssIHRoaXNdKCkgeworICAg
ICAgICBjb21wbGV0aW9uQ2FsbGJhY2soISFtX21ldGFkYXRhLCBtX21ldGFkYXRhID8gKm1fbWV0
YWRhdGEgOiBJREJEYXRhYmFzZU1ldGFkYXRhKCkpOworICAgIH0sIFtjb21wbGV0aW9uQ2FsbGJh
Y2tdKCkgeworICAgICAgICAvLyBUaGUgYm9vbGVhbiBmbGFnIHRvIHRoZSBjb21wbGV0aW9uIGNh
bGxiYWNrIHJlcHJlc2VudHMgd2hldGhlciB0aGUKKyAgICAgICAgLy8gYXR0ZW1wdCB0byBnZXQv
ZXN0YWJsaXNoIG1ldGFkYXRhIHN1Y2NlZWRlZCBvciBmYWlsZWQuCisgICAgICAgIC8vIFNpbmNl
IHdlJ3JlIGFib3J0aW5nIHRoZSBhdHRlbXB0LCBpdCBmYWlsZWQsIHNvIHdlIGFsd2F5cyBwYXNz
IGluIGZhbHNlLgorICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soZmFsc2UsIElEQkRhdGFiYXNl
TWV0YWRhdGEoKSk7CisgICAgfSk7CisKKyAgICBtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3RzLmFw
cGVuZChyZXF1ZXN0LnJlbGVhc2UoKSk7Cit9CiAKLSAgICBpZiAobV9wcm9jZXNzaW5nRGF0YWJh
c2VRdWV1ZVJlcXVlc3RzKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZUFuZFJlYWRNZXRhZGF0YShjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpCit7CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisKKyAgICBpZiAo
bV9pbk1lbW9yeSkgeworICAgICAgICBMT0dfRVJST1IoIlN1cHBvcnQgZm9yIGluLW1lbW9yeSBk
YXRhYmFzZXMgbm90IHlldCBpbXBsZW1lbnRlZCIpOwogICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9iYWNraW5nU3RvcmUgPSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0
ZTo6Y3JlYXRlKGlkZW50aWZpZXIsIGRhdGFiYXNlRGlyZWN0b3J5KTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gbWV0YWRhdGEgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0
T3JFc3RhYmxpc2hNZXRhZGF0YSgpOwogCi0gICAgbV9wcm9jZXNzaW5nRGF0YWJhc2VRdWV1ZVJl
cXVlc3RzID0gdHJ1ZTsKLSAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnF1ZXVlKCkuZGlz
cGF0Y2goYmluZCgmVW5pcXVlSURCRGF0YWJhc2U6OnByb2Nlc3NEYXRhYmFzZVJlcXVlc3RRdWV1
ZSwgdGhpcykpOworICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2sodGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhLCBt
ZXRhZGF0YSA/ICptZXRhZGF0YSA6IElEQkRhdGFiYXNlTWV0YWRhdGEoKSwgISFtZXRhZGF0YSkp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwcm9jZXNzRGF0YWJhc2VSZXF1ZXN0UXVl
dWUoKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRN
ZXRhZGF0YShjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9vbCBzdWNjZXNz
KQogewotICAgIEFTU0VSVChtX3Byb2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHMpOwotCi0g
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdDsK
LSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VRdWV1
ZVJlcXVlc3RzTXV0ZXgpOwotICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2VRdWV1ZVJlcXVlc3Rz
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1fcHJvY2Vzc2luZ0RhdGFiYXNlUXVldWVS
ZXF1ZXN0cyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJlcXVlc3QgPSBtX2RhdGFiYXNlUXVldWVSZXF1ZXN0cy50YWtlRmlyc3Qo
KTsKLSAgICAgICAgfQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFt
X21ldGFkYXRhKTsKIAorICAgIGlmIChzdWNjZXNzKQorICAgICAgICBtX21ldGFkYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPihtZXRhZGF0YSk7CisKKyAgICB3aGls
ZSAoIW1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0
cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3RzLnRha2VG
aXJzdCgpOwogICAgICAgICByZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3QoKTsKICAgICB9CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0
YShzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpPiBj
b21wbGV0aW9uQ2FsbGJhY2spCitTdHJpbmcgVW5pcXVlSURCRGF0YWJhc2U6OmFic29sdXRlRGF0
YWJhc2VEaXJlY3RvcnkoKSBjb25zdAogewotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVl
c3QgPSBBc3luY1JlcXVlc3RJbXBsPD46OmNyZWF0ZShbY29tcGxldGlvbkNhbGxiYWNrLCB0aGlz
XSgpIHsKLSAgICAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICAgICAgYm9v
bCBzdWNjZXNzID0gZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhSW50ZXJuYWwobWV0
YWRhdGEpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIERhdGFiYXNl
UHJvY2Vzczo6c2hhcmVkKCkuYWJzb2x1dGVJbmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNl
UmVsYXRpdmVQYXRoKG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeSk7Cit9CiAKLSAgICAgICAg
UnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChbbWV0YWRhdGEsIHN1Y2Nlc3MsIGNvbXBsZXRpb25D
YWxsYmFja10oKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soc3VjY2VzcywgbWV0
YWRhdGEpOwotICAgICAgICB9KTsKLSAgICB9LCBbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRjaChbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsK
LSAgICAgICAgICAgIC8vIFRoZSBib29sZWFuIGZsYWcgdG8gdGhlIGNvbXBsZXRpb24gY2FsbGJh
Y2sgcmVwcmVzZW50cyB3aGV0aGVyIHRoZSBhdHRlbXB0IHRvIGdldC9lc3RhYmxpc2ggbWV0YWRh
dGEKLSAgICAgICAgICAgIC8vIHN1Y2NlZWRlZCBvciBmYWlsZWQuCi0gICAgICAgICAgICAvLyBT
aW5jZSB3ZSdyZSBhYm9ydGluZyB0aGUgYXR0ZW1wdCwgaXQgZmFpbGVkLCBzbyB3ZSBhbHdheXMg
cGFzcyBpbiBmYWxzZS4KLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhmYWxzZSwgSURC
RGF0YWJhc2VNZXRhZGF0YSgpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Cit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwb3N0TWFpblRocmVhZFRhc2soc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4g
dGFzaykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX21haW5UaHJlYWRUYXNrTXV0ZXgpOworCisgICAgbV9tYWluVGhyZWFkVGFza3Mu
YXBwZW5kKHN0ZDo6bW92ZSh0YXNrKSk7CiAKLSAgICBlbnF1ZXVlRGF0YWJhc2VRdWV1ZVJlcXVl
c3QocmVxdWVzdC5yZWxlYXNlKCkpOworICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmlu
ZCgmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1OZXh0TWFpblRocmVhZFRhc2ssIHRoaXMpKTsK
IH0KIAotYm9vbCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1l
dGFkYXRhSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtTmV4dE1haW5UaHJlYWRUYXNrKCkKIHsKLSAgICAv
LyBGSVhNRTogVGhpcyBtZXRob2QgaXMgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBieSBtZXNzYWdpbmcg
ZnJvbSB0aGUgV2ViUHJvY2VzcywgYW5kIGNhbGxzIGJhY2sgd2l0aCBkdW1teSBkYXRhLgotICAg
IC8vIE5lZWRzIHJlYWwgaW1wbGVtZW50YXRpb24uCi0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiB0YXNrOworICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbWFpblRocmVhZFRhc2tNdXRleCk7CisgICAgICAgIEFTU0VSVCghbV9t
YWluVGhyZWFkVGFza3MuaXNFbXB0eSgpKTsKKyAgICAgICAgdGFzayA9IG1fbWFpblRocmVhZFRh
c2tzLnRha2VGaXJzdCgpOworICAgIH0KKworICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDNkZTAx
MDQuLmI4YzQ5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQzLDcgKzQzLDkgQEAg
c3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
QXN5bmNSZXF1ZXN0OworY2xhc3MgQXN5bmNUYXNrOwogY2xhc3MgRGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbjsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlOwogCiBzdHJ1
Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogCkBAIC02OCwxOCArNzAsMzQgQEAgcHJpdmF0ZToKIAog
ICAgIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAKKyAgICBib29s
IG1faW5NZW1vcnk7CisgICAgU3RyaW5nIG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeTsKKwog
ICAgIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+PiBtX2Nvbm5l
Y3Rpb25zOwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX2Rh
dGFiYXNlUmVxdWVzdHM7CiAKLSAgICB2b2lkIGVucXVldWVEYXRhYmFzZVF1ZXVlUmVxdWVzdChQ
YXNzUmVmUHRyPEFzeW5jUmVxdWVzdD4pOworICAgIFN0cmluZyBhYnNvbHV0ZURhdGFiYXNlRGly
ZWN0b3J5KCkgY29uc3Q7CisKKyAgICB2b2lkIHBvc3RNYWluVGhyZWFkVGFzayhzdGQ6OnVuaXF1
ZV9wdHI8QXN5bmNUYXNrPik7CisKKyAgICAvLyBNZXRob2QgdGhhdCBhdHRlbXB0cyB0byBtYWtl
IGxlZ2FsIGZpbGVuYW1lcyBmcm9tIGFsbCBsZWdhbCBkYXRhYmFzZSBuYW1lcworICAgIFN0cmlu
ZyBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpOwogCiAgICAgLy8gVG8gYmUgY2FsbGVkIGZyb20g
dGhlIGRhdGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQgb25seQotICAgIHZvaWQgcHJvY2Vzc0RhdGFi
YXNlUmVxdWVzdFF1ZXVlKCk7Ci0gICAgYm9vbCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0
YWRhdGFJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJik7CisgICAg
dm9pZCBvcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOworCisgICAg
Ly8gQ2FsbGJhY2tzIGZyb20gdGhlIGRhdGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQsIHRvIGJlIHBl
cmZvcm1lZCBvbiB0aGUgbWFpbiB0aHJlYWQgb25seQorICAgIHZvaWQgcGVyZm9ybU5leHRNYWlu
VGhyZWFkVGFzaygpOworICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0
YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKTsKKwor
ICAgIERlcXVlPFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3Rz
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IG1f
bWV0YWRhdGE7CisKKyAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmU+IG1f
YmFja2luZ1N0b3JlOwogCi0gICAgTXV0ZXggbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleDsK
LSAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHM7
Ci0gICAgYm9vbCBtX3Byb2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHM7CisgICAgRGVxdWU8
c3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4+IG1fbWFpblRocmVhZFRhc2tzOworICAgIE11dGV4
IG1fbWFpblRocmVhZFRhc2tNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjhkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVfaAorI2RlZmluZSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNF
X1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNv
dW50ZWQ8VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmU+IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZSgpIHsgfQorCisgICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZ2V0T3JFc3RhYmxp
c2hNZXRhZGF0YSgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQor
I2VuZGlmIC8vIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJ
ZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAppbmRleCBmZjhiZDdlLi4xOThmMDE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwCkBAIC03NSw2
ICs3NSwxNyBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNOdWxsKCkgY29u
c3QKICAgICByZXR1cm4gbV9kYXRhYmFzZU5hbWUuaXNOdWxsKCk7CiB9CiAKK1VuaXF1ZUlEQkRh
dGFiYXNlSWRlbnRpZmllciBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6Omlzb2xhdGVkQ29w
eSgpIGNvbnN0Cit7CisgICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIHJlc3VsdDsKKwor
ICAgIHJlc3VsdC5tX2RhdGFiYXNlTmFtZSA9IG1fZGF0YWJhc2VOYW1lLmlzb2xhdGVkQ29weSgp
OworICAgIHJlc3VsdC5tX29wZW5pbmdPcmlnaW4gPSBtX29wZW5pbmdPcmlnaW4uaXNvbGF0ZWRD
b3B5KCk7CisgICAgcmVzdWx0Lm1fbWFpbkZyYW1lT3JpZ2luID0gbV9tYWluRnJhbWVPcmlnaW4u
aXNvbGF0ZWRDb3B5KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIG9wZXJhdG9y
PT0oY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBhLCBjb25zdCBVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXImIGIpCiB7CiAgICAgaWYgKCZhID09ICZiKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKaW5kZXggYmViY2RjNC4uZGJmOWRhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oCkBAIC01MCw2ICs1MCw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCisgICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyIGlzb2xhdGVkQ29weSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2RhdGFi
YXNlTmFtZTsKICAgICBTZWN1cml0eU9yaWdpbkRhdGEgbV9vcGVuaW5nT3JpZ2luOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTY1ZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTAs
MCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUgPFdl
YkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VNZXRhZGF0
YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQ3VycmVu
dCB2ZXJzaW9uIG9mIHRoZSBtZXRhZGF0YSBzY2hlbWEgYmVpbmcgdXNlZCBpbiB0aGUgbWV0YWRh
dGEgZGF0YWJhc2UuCitzdGF0aWMgY29uc3QgaW50IGN1cnJlbnRNZXRhZGF0YVZlcnNpb24gPSAx
OworCitVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6VW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQorICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkoZGF0
YWJhc2VEaXJlY3RvcnkpCit7CisgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgaXMgbWVhbnQgdG8g
YmUgY3JlYXRlZCBhbmQgdXNlZCBlbnRpcmVseSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgorICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6
OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YURCKTsKKyAgICBBU1NFUlQobV9tZXRh
ZGF0YURCLT5pc09wZW4oKSk7CisKKyAgICBpZiAoIW1fbWV0YWRhdGFEQi0+ZXhlY3V0ZUNvbW1h
bmQoIkNSRUFURSBUQUJMRSBJREJEYXRhYmFzZUluZm8gKGtleSBURVhUIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIFRFWFQgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
Y3JlYXRlIElEQkRhdGFiYXNlSW5mbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX21l
dGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIs
ICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywg
Pyk7Iik7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAg
ICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxSZXN1
bHRPaworICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVy
c2lvbiBpbnRvIElEQkRhdGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX21ldGFkYXRhREIt
Pmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAg
IG1fbWV0YWRhdGFEQiA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0
YWRhdGFEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZU5h
bWUnLCA/KTsiKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAg
ICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkp
ICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERv
bmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkYXRhYmFzZSBu
YW1lIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fbWV0YWRhdGFEQi0+
bGFzdEVycm9yKCksIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAg
bV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRl
ZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3Vw
cG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KKyAgICAgICAgLy8gVGhl
cmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgorICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUlu
Zm8gVkFMVUVTICgnRGF0YWJhc2VWZXJzaW9uJywgPyk7Iik7CisgICAgICAgIGlmIChzcWwucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgU3Ry
aW5nOjpudW1iZXIoMCkpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgp
ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGlu
c2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVz
IiwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3IoKSwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgICAgICBtX21ldGFkYXRhREIgPSBudWxscHRyOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGluaXRpYWwgbWV0
YWRhdGEgbWF0Y2hlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgd2UganVzdCBwdXQgaW50byB0aGUgbWV0
YWRhdGEgZGF0YWJhc2UuCisgICAgYXV0byBtZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8SURC
RGF0YWJhc2VNZXRhZGF0YT4oKTsKKyAgICBtZXRhZGF0YS0+bmFtZSA9IG1faWRlbnRpZmllci5k
YXRhYmFzZU5hbWUoKTsKKyAgICBtZXRhZGF0YS0+dmVyc2lvbiA9IDA7CisKKyAgICByZXR1cm4g
bWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEo
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX21ldGFkYXRh
REIpOworCisgICAgaWYgKCFtX21ldGFkYXRhREItPnRhYmxlRXhpc3RzKCJJREJEYXRhYmFzZUlu
Zm8iKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG1ldGFkYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPigpOworICAgIHsKKyAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0
YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdNZXRhZGF0YVZlcnNpb24nOyIpOworICAgICAgICBpZiAo
c3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBtZXRhZGF0YS0+dmVyc2lvbiA9IHNxbC5nZXRDb2x1bW5JbnQoMCk7CisgICAgfQorICAgIHsK
KyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVl
IEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOworICAg
ICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBtZXRhZGF0YS0+bmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBpZiAobWV0YWRhdGEtPm5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIG1ldGFkYXRhIGRhdGFi
YXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVzJykiLCBtZXRh
ZGF0YS0+bmFtZS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAg
IH0KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIlNF
TEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJz
aW9uJzsiKTsKKyAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSBzcWwuZ2V0Q29s
dW1uVGV4dCgwKTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgbWV0YWRhdGEtPnZlcnNpb24g
PSBzdHJpbmdWZXJzaW9uLnRvVUludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmICghb2spIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBk
b2VzIG5vdCBjbGVhbmx5IGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVy
c2lvbiIsIHN0cmluZ1ZlcnNpb24udXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIHdlIHNhdmUg
T2JqZWN0U3RvcmVzIGFuZCBpbmRleGVzIHdlIG5lZWQgdG8gZXh0cmFjdCB0aGVpciBtZXRhZGF0
YSwgYWxzby4KKyAgICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVEYXRhYmFzZT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6
Om9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBhdXRvIHNxbGl0ZURhdGFiYXNlID0gc3RkOjpt
YWtlX3VuaXF1ZTxTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICBpZiAoIXNxbGl0ZURhdGFiYXNlLT5v
cGVuKHBhdGgpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gU1FMaXRlIGRh
dGFiYXNlIGF0IHBhdGggJyVzJyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBzcWxpdGVEYXRhYmFzZTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjpnZXRPckVzdGFibGlzaE1ldGFkYXRhKCkKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKworICAgIFN0cmluZyBtZXRhZGF0YURCRmlsZW5hbWUgPSBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9hYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5LCAiSURCTWV0YWRh
dGEuc3FsaXRlMyIpOworICAgIG1fbWV0YWRhdGFEQiA9IG9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0
aChtZXRhZGF0YURCRmlsZW5hbWUpOworICAgIGlmICghbV9tZXRhZGF0YURCKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRh
PiBtZXRhZGF0YSA9IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CisgICAgaWYgKCFtZXRhZGF0
YSkKKyAgICAgICAgbWV0YWRhdGEgPSBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSgp
OworCisgICAgaWYgKCFtZXRhZGF0YSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0
YWJsaXNoIElEQiBkYXRhYmFzZSBhdCBwYXRoICclcyciLCBtZXRhZGF0YURCRmlsZW5hbWUudXRm
OCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShE
QVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWJmNmM5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVfaAorI2RlZmluZSBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5o
IiAKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworc3RydWN0IElEQkRhdGFi
YXNlTWV0YWRhdGE7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSBGSU5BTCA6IHB1YmxpYyBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlKGlkZW50aWZpZXIsIGRhdGFiYXNlRGlyZWN0b3J5KSk7CisgICAgfQorCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZ2V0
T3JFc3RhYmxpc2hNZXRhZGF0YSgpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
ZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBvcGVuU1FMaXRlRGF0YWJhc2VBdFBhdGgo
Y29uc3QgU3RyaW5nJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNl
TWV0YWRhdGE+IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1l
dGFkYXRhKCk7CisKKyAgICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVy
OworICAgIFN0cmluZyBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3Rvcnk7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fbWV0YWRhdGFEQjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorI2VuZGlmIC8vIFVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9B
c3luY1Rhc2suaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Bc3luY1Rhc2suaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzcxNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jVGFzay5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBc3luY1Rhc2tfaAorI2RlZmluZSBBc3luY1Rhc2tfaAorCisjaW5jbHVk
ZSA8V2ViQ29yZS9Dcm9zc1RocmVhZENvcGllci5oPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBBc3luY1Rhc2sgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFzeW5jVGFzayk7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QXN5bmNUYXNrKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKSA9IDA7CisKK3Byb3RlY3RlZDoK
KyAgICBleHBsaWNpdCBBc3luY1Rhc2soKSB7IH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitjbGFzcyBBc3luY1Rhc2tJbXBsIEZJTkFMIDogcHVi
bGljIEFzeW5jVGFzayB7CitwdWJsaWM6CisgICAgQXN5bmNUYXNrSW1wbChUKiBjb25zdCBjYWxs
ZWUsIHZvaWQgKFQ6OiptZXRob2QpKEFyZ3VtZW50cy4uLiksIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIG1fdGFza0Z1bmN0aW9uID0gW2NhbGxlZSwgbWV0aG9kLCBh
cmd1bWVudHMuLi5dKCkgeworICAgICAgICAgICAgKGNhbGxlZS0+Km1ldGhvZCkoYXJndW1lbnRz
Li4uKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Bc3luY1Rhc2tJbXBsKCkK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygp
IE9WRVJSSURFCisgICAgeworICAgICAgICBtX3Rhc2tGdW5jdGlvbigpOworICAgIH0KKworICAg
IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3Rhc2tGdW5jdGlvbjsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiBjcmVhdGVBc3luY1Rhc2soCisg
ICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpCit7CisgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNUYXNrSW1wbDxUPj4oY2FsbGVlLCBtZXRob2QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorc3Rk
Ojp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gY3JlYXRlQXN5bmNUYXNrKAorICAgIFQqIGNvbnN0IGNh
bGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0
ZXIxKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFzeW5jVGFza0ltcGw8VCwgTVAx
Pj4oCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBXZWJDb3JlOjpD
cm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5h
bWUgTVAyPgorc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gY3JlYXRlQXN5bmNUYXNrKAorICAg
IFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiksCisgICAg
Y29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNUYXNrSW1wbDxULCBNUDEsIE1QMj4+KAorICAg
ICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgV2ViQ29yZTo6Q3Jvc3NUaHJl
YWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBXZWJDb3JlOjpDcm9zc1Ro
cmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMikpOworCit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gQXN5bmNUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKaW5kZXggZGFhYzZmYi4uNGQ4MTg0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNjksNiArNzAsMzAg
QEAgYm9vbCBTZWN1cml0eU9yaWdpbkRhdGE6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXImIGRlY29kZXIsIFNlY3VyaXR5T3JpZ2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorU3RyaW5n
IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZGF0YWJhc2VGaWxlbmFtZUlkZW50aWZpZXIoKSBjb25zdAor
eworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKHByb3RvY29sLCBob3N0LCBwb3J0KTsKKyAgICByZXR1cm4gc2VjdXJpdHlP
cmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOworfQorCitib29sIFNlY3VyaXR5T3JpZ2luRGF0
YTo6Y2FuU2hhcmVEYXRhYmFzZXMoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvdGhlcikgY29u
c3QKK3sKKyAgICAvLyBGb3Igbm93LCBhbiBvcmlnaW4ncyBkYXRhYmFzZSBhY2Nlc3MgaXMgcHJl
ZGljYXRlZCBvbiBlcXVhbGl0eSB3aXRoIHRoZSBvdGhlciBvcmlnaW4uCisgICAgLy8gV2UgbWln
aHQgbmVlZCB0byBtYWtlIHRoaXMgbW9yZSBudWFuY2VkIGxhdGVyLgorICAgIHJldHVybiAqdGhp
cyA9PSBvdGhlcjsKK30KKworU2VjdXJpdHlPcmlnaW5EYXRhIFNlY3VyaXR5T3JpZ2luRGF0YTo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBTZWN1cml0eU9yaWdpbkRhdGEgcmVzdWx0Owor
CisgICAgcmVzdWx0LnByb3RvY29sID0gcHJvdG9jb2wuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVz
dWx0Lmhvc3QgPSBob3N0Lmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5wb3J0ID0gcG9ydDsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgcGVyZm9ybUFQSUNhbGxiYWNrV2l0aFNl
Y3VyaXR5T3JpZ2luRGF0YVZlY3Rvcihjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYg
b3JpZ2luRGF0YXMsIEFycmF5Q2FsbGJhY2sqIGNhbGxiYWNrKQogewogICAgIGlmICghY2FsbGJh
Y2spIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRh
dGEuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaAppbmRleCBj
M2Y4N2EwLi5kOWZlMzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VjdXJp
dHlPcmlnaW5EYXRhLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2lu
RGF0YS5oCkBAIC00NiwxMiArNDYsMjAgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAg
ICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFNlY3VyaXR5T3JpZ2lu
RGF0YSYpOwogCisgICAgLy8gUmV0dXJucyBhIHNlcmlhbGl6ZWQgc3RyaW5nIHRoYXQgaXMgYXBw
cm9wcmlhdGUgZm9yIHVzZSBhcyBhIHVuaXF1ZSBmaWxlbmFtZQorICAgIFN0cmluZyBkYXRhYmFz
ZUZpbGVuYW1lSWRlbnRpZmllcigpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
aXMgb3JpZ2luIGNhbiB1c2UgdGhlIHNhbWUgZGF0YWJhc2VzIGFzIHRoZSBnaXZlbiBvcmlnaW4u
CisgICAgYm9vbCBjYW5TaGFyZURhdGFiYXNlcyhjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmKSBj
b25zdDsKKwogICAgIC8vIEZJWE1FIDxyZGFyOi8vOTAxODM4Nj46IFdlIHNob3VsZCBiZSBzZW5k
aW5nIG1vcmUgc3RhdGUgYWNyb3NzIHRoZSB3aXJlIHRoYW4ganVzdCB0aGUgcHJvdG9jb2wsCiAg
ICAgLy8gaG9zdCwgYW5kIHBvcnQuCiAKICAgICBTdHJpbmcgcHJvdG9jb2w7CiAgICAgU3RyaW5n
IGhvc3Q7CiAgICAgaW50IHBvcnQ7CisKKyAgICBTZWN1cml0eU9yaWdpbkRhdGEgaXNvbGF0ZWRD
b3B5KCkgY29uc3Q7CiB9OwogCiB2b2lkIHBlcmZvcm1BUElDYWxsYmFja1dpdGhTZWN1cml0eU9y
aWdpbkRhdGFWZWN0b3IoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBBcnJheUNh
bGxiYWNrKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJl
YWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFjNTYxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNw
cApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJDcm9zc1RocmVhZENvcGllci5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIGZhbHNlLCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI+OjpUeXBl
IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllcj46OmNvcHkoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQoreworICAgIHJldHVybiBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzYTJkYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5oCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNyb3NzVGhyZWFkQ29waWVyX2gKKyNkZWZpbmUg
V2ViQ3Jvc3NUaHJlYWRDb3BpZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc1RocmVhZENv
cGllci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJL
aXQgeworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3RlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxz
ZSwgZmFsc2UsIFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyPiB7CisgICAgdHlw
ZWRlZiBXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBUeXBlOworICAgIHN0YXRp
YyBUeXBlIGNvcHkoY29uc3QgV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorI2VuZGlmIC8vIFdlYkNyb3NzVGhyZWFkQ29waWVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZTAxNWM5
Li5lODMxNDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01NzUsOSArNTc1LDEzIEBACiAJCTUxNUU3NzMzMTg0MDJENTEwMDA3
MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1RTc3MzExODQwMkQ1MTAwMDcyMDNGIC8q
IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAgKi87IH07CiAJCTUxNUU3NzM0MTg0MDJE
NTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUU3NzMyMTg0MDJENTEwMDA3MjAz
RiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLzsgfTsKIAkJNTE2MEJGRTExMzM4
MURGOTAwOTE4OTk5IC8qIExvZ2dpbmcubWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MEJGRTAxMzM4MURGOTAwOTE4OTk5IC8qIExvZ2dpbmcu
bWFjLm1tICovOyB9OworCQk1MTYzMTE4NzE4NTg0NDY2MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJl
YWRDb3BpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNjMxMTg2MTg1ODQ0NjYwMDUzNDY0NyAvKiBXZWJDcm9zc1RocmVhZENvcGllci5oICovOyB9
OwogCQk1MTYzMTk5MjE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxOTkx
MTYyODk4MEEwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tICovOyB9OwogCQk1
MTYzMTk5NDE2Mjg5QTYwMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0M5
MzQxNjI4MDY0ODAwMzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJNTE2MzE5OTUxNjI4OUE2MzAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUND
OTM1MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggKi87IH07CisJ
CTUxNjU0RUZEMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTY1NEVGQjE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuY3BwICovOyB9OworCQk1MTY1NEVGRTE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjU0RUZDMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oICovOyB9OworCQk1MTY1NEYwMDE4NEVGMzRB
MDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjU0RUZGMTg0RUYzNEEwMDdEQzgz
NyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oICovOyB9OwogCQk1MTY3RUVBMDE3
MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2N0VFOUUxNzAzNzdCRjAwNzY4MUNBIC8qIERp
c2tDYWNoZU1vbml0b3IuaCAqLzsgfTsKIAkJNTE2N0VFQTExNzAzNzdCRjAwNzY4MUNBIC8qIERp
c2tDYWNoZU1vbml0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTY3RUU5RjE3MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5tbSAq
LzsgfTsKIAkJNTE2QTRBNUQxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZBNEE1QjEyMEEyQ0NEMDBD
MDVCN0YgLyogV2ViRXJyb3IuaCAqLzsgfTsKQEAgLTYzNyw2ICs2NDEsOCBAQAogCQk1MUIxNUE4
NTEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjE1QTgzMTM4NDNBMzkwMDMyMUFE
OCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICovOyB9OwogCQk1MUIzMDA1MDEyNTI5RDBFMDAw
QjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJh
Y2tGb3J3YXJkTGlzdENGLmNwcCAqLzsgfTsKIAkJNTFCMzAwNTExMjUyOUQwRTAwMEI1Q0EwIC8q
IFdlYlBhZ2VQcm94eUNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAg
Ki87IH07CisJCTUxQkEyNDQ0MTg1OEVFMzAwMEVBMjgxMSAvKiBBc3luY1Rhc2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQkEyNDQzMTg1OEVFMzAw
MEVBMjgxMSAvKiBBc3luY1Rhc2suaCAqLzsgfTsKKwkJNTFCQTI0NDYxODU4RjU1RDAwRUEyODEx
IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQkEyNDQ1MTg1OEY0MTUwMEVBMjgxMSAvKiBXZWJDcm9zc1Ro
cmVhZENvcGllci5jcHAgKi87IH07CiAJCTUxQzk2MTE4MTgzRDI5NDcwMEQyMDAyRSAvKiBXZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzk2MTE2MTgzRDI5NDcwMEQyMDAyRSAvKiBX
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTFDOTYx
MTkxODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDOTYxMTcxODNE
Mjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9Owog
CQk1MUNCQkEwRjE2NTIxOUI2MDA1QkU4RkQgLyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFD
QkJBMEQxNjUyMTlCNjAwNUJFOEZEIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNw
cCAqLzsgfTsKQEAgLTIxNDEsNyArMjE0NywxMSBAQAogCQk1MTVFNzczMTE4NDAyRDUxMDAwNzIw
M0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUU3NzMyMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2dpbmcubWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MTYzMTE4NjE4NTg0NDY2MDA1MzQ2NDcgLyogV2ViQ3Jv
c3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ3Jv
c3NUaHJlYWRDb3BpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MzE5OTEx
NjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tOyBw
YXRoID0gbWFjL05ldHdvcmtQcm9jZXNzUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxNjU0RUZCMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxNjU0RUZDMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTY1NEVGRjE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE2N0VFOUUxNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlza0NhY2hlTW9uaXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTY3RUU5RjE3MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9u
aXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc2tDYWNo
ZU1vbml0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNkE0QTVCMTIwQTJD
Q0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwNyw2ICsyMjE3
LDggQEAKIAkJNTFCMTVBODMxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVudmlyb25tZW50VXRpbGl0aWVz
Lmg7IHBhdGggPSB1bml4L0Vudmlyb25tZW50VXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExp
c3RDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHA7IHBhdGggPSBjZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQ
YWdlUHJveHlDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQ
YWdlUHJveHlDRi5jcHA7IHBhdGggPSBjZi9XZWJQYWdlUHJveHlDRi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxQkEyNDQzMTg1OEVFMzAwMEVBMjgxMSAvKiBBc3luY1Rhc2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXN5bmNUYXNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQkEyNDQ1MTg1OEY0MTUwMEVBMjgxMSAvKiBXZWJDcm9z
c1RocmVhZENvcGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDcm9zc1RocmVhZENvcGll
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzk2MTE1MTgzQzk1RkYwMEQy
MDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYklEQlNl
cnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQzk2MTE2MTgzRDI5NDcwMEQyMDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYklE
QlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MUM5NjExNzE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVj
dGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYklEQlNl
cnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzQ0MCw2ICszNDUyLDcgQEAKIAkJCQlBN0Q3OTJENDE3NjdDQjA5MDA4ODFDQkUgLyogQWN0aXZp
dHlBc3NlcnRpb24uaCAqLywKIAkJCQk1MTVFNzcyNTE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNS
ZXF1ZXN0LmNwcCAqLywKIAkJCQk1MTVFNzcyNjE4M0RENkY2MDAwNzIwM0YgLyogQXN5bmNSZXF1
ZXN0LmggKi8sCisJCQkJNTFCQTI0NDMxODU4RUUzMDAwRUEyODExIC8qIEFzeW5jVGFzay5oICov
LAogCQkJCTRGNjAxNDMwMTU1QzVBMzIwMDFGQkRFMCAvKiBCbG9ja2luZ1Jlc3BvbnNlTWFwLmgg
Ki8sCiAJCQkJQkNGMTg2MzcxNjdEMDcxRTAwQTFBODVBIC8qIENhY2hlTW9kZWwuY3BwICovLAog
CQkJCUJDMzA2NUY5MTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggKi8sCkBAIC0zNTE5
LDYgKzM1MzIsOCBAQAogCQkJCTUxMEZCQjk5MTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0
TWVudUl0ZW1EYXRhLmggKi8sCiAJCQkJOTM5QUU3NjUxMzE2RTk5QzAwQUUwNkE2IC8qIFdlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAgKi8sCiAJCQkJQkMxREQ3QjExMTREQzM5NjAwNUFEQUYzIC8q
IFdlYkNvcmVBcmd1bWVudENvZGVycy5oICovLAorCQkJCTUxQkEyNDQ1MTg1OEY0MTUwMEVBMjgx
MSAvKiBXZWJDcm9zc1RocmVhZENvcGllci5jcHAgKi8sCisJCQkJNTE2MzExODYxODU4NDQ2NjAw
NTM0NjQ3IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmggKi8sCiAJCQkJNTE1NzhCODIxMjA5RUNF
RjAwQTM3QzRBIC8qIFdlYkRhdGEuaCAqLywKIAkJCQlCQzU3NTYxMjEyNkUwMTM4MDA2RjBGMTIg
LyogV2ViRXJyb3IuY3BwICovLAogCQkJCTUxNkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJF
cnJvci5oICovLApAQCAtNDA0MSw2ICs0MDU2LDE1IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTE2NTRFRjAxODRFRjI0MTAwN0RDODM3IC8q
IHNxbGl0ZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NTE2NTRFRkIxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlLmNwcCAqLywKKwkJCQk1MTY1NEVGQzE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gc3FsaXRl
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNTE3REQ1QkIxODBEQTdDNDAw
ODE2NjBCIC8qIERhdGFiYXNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC00MTY1LDExICs0MTg5LDEzIEBACiAJCTUxRTM1MUY5MTgwRjVDRjYwMEU1M0JF
OSAvKiBJbmRleGVkREIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTUxNjU0RUYwMTg0RUYyNDEwMDdEQzgzNyAvKiBzcWxpdGUgKi8sCiAJCQkJNTFEMEQ0
MkUxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwICov
LAogCQkJCTUxRDBENDJGMTgzQjM0MTMwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uLmggKi8sCiAJCQkJNTFEMEQ0MzAxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gKi8sCiAJCQkJNTE1RTc3MkQxODQwMTU4MDAw
MDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlLmNwcCAqLywKIAkJCQk1MTVFNzcyRTE4NDAxNTgw
MDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuaCAqLywKKwkJCQk1MTY1NEVGRjE4NEVGMzRB
MDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk1MTVF
NzczMTE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCAq
LywKIAkJCQk1MTVFNzczMjE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyLmggKi8sCiAJCQkpOwpAQCAtNTYyNSw2ICs1NjUxLDcgQEAKIAkJCQlCQzAzMkRBOTEw
RjQzN0QxMDA1OEMxNUEgLyogQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VFOTY2
RDExMkZBRjU3MDA2QkNDMjQgLyogQXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFB
MzE3MzIxMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICov
LAorCQkJCTUxQkEyNDQ0MTg1OEVFMzAwMEVBMjgxMSAvKiBBc3luY1Rhc2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxMkY1ODk3MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ0NUI5RjE4NEQ1RkI1MDA0QjM0MTQg
LyogV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
MkY1ODk5MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNTcxMiw2ICs1NzM5LDcgQEAKIAkJCQlCQzgxNDdBOTEyRjY0
Q0RBMDA3QjJDMzIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUG9saWN5Q2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0E4QzZCMDExRTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
VUlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOUUzMjg5MTgyMTYzNjkwMEY1RDA0QyAv
KiBXS1JlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY1NEVGRTE4
NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMzNFMEQxMTI0MDhFODYwMDM2MEYzRiAvKiBJbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE0REY3NzEyMEI1Qjc5MDA4
MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNCMEIwREUxMjMwNUE4QzAwQjEzNDFFIC8qIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VDb2Rl
cnMuaCBpbiBIZWFkZXJzICovLApAQCAtNTc2Myw2ICs1NzkxLDcgQEAKIAkJCQkxQUI0NzRFMDE4
NEQ0NDZBMDA1MUI2MjIgLyogV0tCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTJEODQ4QjEyN0Y2QTQ5MDAxRUI5NjIgLyogTlBJZGVudGlmaWVyRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFFNDk3NjgxMUZGNjU4RTAwNDhCNDY0IC8qIE5QSlNPYmplY3Qu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUxNjMxMTg3MTg1ODQ0NjYwMDUzNDY0NyAvKiBXZWJDcm9z
c1RocmVhZENvcGllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0RTIxODRENDQ4MDAwNTFC
NjIyIC8qIFdLQnVuZGxlUGFnZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4
MkE1MTI3RjRFQUIwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUEyRDg0M0ExMjdGNjVENTAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJl
Y2VpdmVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNTkyMiw2ICs1OTUxLDcgQEAKIAkJ
CQlCQ0FDMTExRjEyQzkyQzFGMDBCMDhFRUUgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2MkE3NkI5MTJCMUIyNUYwMDA1RjFCNiAvKiBXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI3RDcy
QzEyODhDQUFEMDBDRkQwOEMgLyogV2ViRG93bmxvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUxNjU0RjAwMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEN0IxMEY0Mzc4RDAwNThDMTVBIC8qIFdl
YkRyYWdDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTBFRjlGMTIzMzI2NDIwMDdEM0NG
QiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkQ3RDEw
RjQzNzhEMDA1OEMxNUEgLyogV2ViRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTcx
OTksNiArNzIyOSw3IEBACiAJCQkJMUE0NEI5NTcxNkI3MzdBQTAwQjdCQkQ4IC8qIFN0b3JhZ2VO
YW1lc3BhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRkY0OTAwMTgzM0RFNzgwMDlB
QjE1QSAvKiBXS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3
REQ1QkUxODBEQTdEMzAwODE2NjBCIC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxNjU0RUZEMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTZCRDg1RTE1MDE5
QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMVpa
NDE3RUYxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUUzNTFGRjE4MEY1RDBGMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9jZXNz
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzUwOSw2ICs3NTQwLDcgQEAKIAkJCQkxQUM3NTM3QjE4
M0E5RkRCMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzQwNzYwNzEyNEZGMDI3MDA2OEYyMEEgLyogV0tUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDRDVFQkJFMTc0NkIwNEMwMDBDMUM0NSAvKiBXS1R5cGVSZWZXcmFwcGVyLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTFCQTI0NDYxODU4RjU1RDAwRUEyODExIC8qIFdlYkNyb3NzVGhyZWFkQ29w
aWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjA5MTI0RkYwMjcwMDY4RjIwQSAvKiBX
S1VSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzYxQjEyNEZGMDM3MDA2OEYyMEEgLyog
V0tVUkxDRi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NjBCMTI0RkYwMjcwMDY4RjIwQSAv
KiBXS1VSTFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219019</attachid>
            <date>2013-12-11 17:05:44 -0800</date>
            <delta_ts>2013-12-12 10:33:09 -0800</delta_ts>
            <desc>Patch v4 - More code is better, right?</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>88391</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzY3ODM5MS4uMDQzZWMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMi0xMSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzIEluZGV4ZWREQjogRXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBFeHBvcnQgdG9VSW50NjRTdHJpY3QoKS4KKwogMjAxMy0xMi0xMCAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIEhh
c2hNYXAgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhbiBpbml0aWFsaXplciBsaXN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaAppbmRleCAzYzQyNGI0Li5iM2Q4NDA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKQEAgLTM2OCw3ICszNjgsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIGludCB0b0ludFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0Owog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB1bnNpZ25lZCB0b1VJbnRTdHJpY3QoYm9vbCogb2sg
PSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50
NjRfdCB0b0ludDY0U3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7Ci0g
ICAgdWludDY0X3QgdG9VSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBj
b25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdWludDY0X3QgdG9VSW50NjRTdHJpY3Qo
Ym9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBpbnRwdHJfdCB0b0ludFB0
clN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogCiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBjYTdjNDgzLi4yMGQzM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
Nzk5LDYgKzc5OSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3Bw
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZhMzllOS4uZDVhYjViMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEzLTEyLTExICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBEYXRhYmFzZVByb2Nlc3MgSW5kZXhlZERCOiBF
c3RhYmxpc2ggYSBtZXRhZGF0YSBiYWNraW5nIHN0b3JlIG9uIGRpc2sKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTI1OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlYWNoIENyb3NzVGhyZWFkQ29waWVy
IGhvdyB0byBoYW5kbGUgSURCRGF0YWJhc2VNZXRhZGF0YS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVkQ29w
eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhOjppc29sYXRlZENvcHkpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNvcHkpOiBBZGQgYW4gSURCRGF0YWJhc2VNZXRhZGF0
YSBzcGVjaWFsaXphdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5o
OgorCiAyMDEzLTEyLTExICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBbQ1NTIFNoYXBlc10gSGlnaGxpZ2h0IG1hcmdpbi1zaGFwZSBm
b3Igc2hhcGUtb3V0c2lkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDk5Zjdh
Yi4uNDFkM2E3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xODI3LDYgKzE4
MjcsNyBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmggXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0
YWRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VN
ZXRhZGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxNzg4NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlTWV0YWRhdGEuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURCRGF0YWJh
c2VNZXRhZGF0YSBJREJEYXRhYmFzZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAorewor
ICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgcmVzdWx0OworICAgIHJlc3VsdC5pZCA9IGlkOworICAg
IHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICByZXN1bHQubWF4T2JqZWN0U3RvcmVJZCA9
IG1heE9iamVjdFN0b3JlSWQ7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5
KCk7CisKKyAgICBPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG9iamVjdFN0b3Jl
cy5iZWdpbigpOworICAgIE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmpl
Y3RTdG9yZXMuZW5kKCk7CisgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCisgICAgICAgIHJlc3Vs
dC5vYmplY3RTdG9yZXMuc2V0KGktPmtleSwgaS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAoreworICAgIElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEgcmVzdWx0OworICAgIHJlc3VsdC5pZCA9IGlkOworICAgIHJlc3VsdC5hdXRvSW5j
cmVtZW50ID0gYXV0b0luY3JlbWVudDsKKyAgICByZXN1bHQubWF4SW5kZXhJZCA9IG1heEluZGV4
SWQ7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0
LmtleVBhdGggPSBrZXlQYXRoLmlzb2xhdGVkQ29weSgpOworCisgICAgSW5kZXhNYXA6OmNvbnN0
X2l0ZXJhdG9yIGkgPSBpbmRleGVzLmJlZ2luKCk7CisgICAgSW5kZXhNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGluZGV4ZXMuZW5kKCk7CisgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCisgICAg
ICAgIHJlc3VsdC5pbmRleGVzLnNldChpLT5rZXksIGktPnZhbHVlLmlzb2xhdGVkQ29weSgpKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0lEQkluZGV4TWV0YWRhdGEgSURCSW5kZXhNZXRh
ZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJJbmRleE1ldGFkYXRhIHJlc3Vs
dDsKKyAgICByZXN1bHQuaWQgPSBpZDsKKyAgICByZXN1bHQudW5pcXVlID0gdW5pcXVlOworICAg
IHJlc3VsdC5tdWx0aUVudHJ5ID0gbXVsdGlFbnRyeTsKKworICAgIHJlc3VsdC5uYW1lID0gbmFt
ZS5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQua2V5UGF0aCA9IGtleVBhdGguaXNvbGF0ZWRD
b3B5KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaAppbmRleCBj
ZGE1NjRkLi5kZGE1M2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oCkBAIC01Myw2ICs1Myw4IEBAIHN0cnVjdCBJ
REJJbmRleE1ldGFkYXRhIHsKICAgICBib29sIHVuaXF1ZTsKICAgICBib29sIG11bHRpRW50cnk7
CiAKKyAgICBJREJJbmRleE1ldGFkYXRhIGlzb2xhdGVkQ29weSgpIGNvbnN0OworCiAgICAgc3Rh
dGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7CiB9OwogCkBAIC03Nyw2ICs3OSw3IEBA
IHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50
NjRfdCwgSURCSW5kZXhNZXRhZGF0YT4gSW5kZXhNYXA7CiAgICAgSW5kZXhNYXAgaW5kZXhlczsK
IAorICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiB9Owog
CiBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7CkBAIC0xMjAsNiArMTIzLDggQEAgc3RydWN0
IElEQkRhdGFiYXNlTWV0YWRhdGEgewogICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKIAog
ICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKworICAgIElEQkRhdGFiYXNlTWV0YWRh
dGEgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDdkOGM4ZDIuLjE5YzVhNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBA
IC0yNDgsNiArMjQ4LDE4IEBAIGJvb2wgSURCS2V5UGF0aDo6b3BlcmF0b3I9PShjb25zdCBJREJL
ZXlQYXRoJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0lEQktleVBhdGgg
SURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJLZXlQYXRoIHJlc3Vs
dDsKKyAgICByZXN1bHQubV90eXBlID0gbV90eXBlOworICAgIHJlc3VsdC5tX3N0cmluZyA9IG1f
c3RyaW5nLmlzb2xhdGVkQ29weSgpOworCisgICAgcmVzdWx0Lm1fYXJyYXkucmVzZXJ2ZUNhcGFj
aXR5KG1fYXJyYXkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJyYXku
c2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5tX2FycmF5LmFwcGVuZChtX2FycmF5W2ldLmlz
b2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oCmluZGV4IDNkMDAxODIuLjEzNWY2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJREJLZXlQYXRo
JiBvdGhlcikgY29uc3Q7CiAKKyAgICBJREJLZXlQYXRoIGlzb2xhdGVkQ29weSgpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmluZyBtX3N0cmluZzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KaW5kZXggMzEzZGE3YS4uY2Q1NjJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
QEAgLTM2NCw5ICszNjQsMTEgQEAgX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2Vs
bGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjMyZGlkQ2FuY2VsQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VFUktOU18yM0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRQogX19aTjdX
ZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjZjYW5jZWxFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRh
YmFzZTExdGFibGVFeGlzdHNFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNFNRTGl0ZURh
dGFiYXNlMTJsYXN0RXJyb3JNc2dFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTE0ZXhl
Y3V0ZUNvbW1hbmRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNl
NG9wZW5FUktOM1dURjZTdHJpbmdFYgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTVjbG9z
ZUV2CitfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNlOWxhc3RFcnJvckV2CiBfX1pON1dlYkNv
cmUxNFNRTGl0ZURhdGFiYXNlQzFFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZUQxRXYK
IF9fWk43V2ViQ29yZTE0U2NoZW1lUmVnaXN0cnkyNHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbEVS
S04zV1RGNlN0cmluZ0UKQEAgLTU3MSwxMiArNTczLDE0IEBAIF9fWk43V2ViQ29yZTE1UHJvdGVj
dGlvblNwYWNlQzFFdgogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QyMWh0dHBQaXBlbGlu
aW5nRW5hYmxlZEV2CiBfX1pON1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDI0c2V0SFRUUFBpcGVs
aW5pbmdFbmFibGVkRWIKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTJnZXRDb2x1bW5J
bnRFaQorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxMmlzQ29sdW1uTnVsbEVpCiBfX1pO
N1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDEzZ2V0Q29sdW1uVGV4dEVpCiBfX1pON1dlYkNvcmUx
NVNRTGl0ZVN0YXRlbWVudDE0ZXhlY3V0ZUNvbW1hbmRFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVT
dGF0ZW1lbnQyMWdldENvbHVtbkJsb2JBc1N0cmluZ0VpCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0
YXRlbWVudDIyaXNDb2x1bW5EZWNsYXJlZEFzQmxvYkVpCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0
YXRlbWVudDRzdGVwRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50NXJlc2V0RXYKK19f
Wk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50N2JpbmRJbnRFaWkKIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50N3ByZXBhcmVFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ4Ymlu
ZEJsb2JFaVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ4Ymlu
ZFRleHRFaVJLTjNXVEY2U3RyaW5nRQpAQCAtNjkxLDYgKzY5NSw3IEBAIF9fWk43V2ViQ29yZTE3
U1FMaXRlVHJhbnNhY3Rpb25EMUV2CiBfX1pON1dlYkNvcmUxN1N1YnJlc291cmNlTG9hZGVyNmNy
ZWF0ZUVQTlNfNUZyYW1lRVBOU18xNENhY2hlZFJlc291cmNlRVJLTlNfMTVSZXNvdXJjZVJlcXVl
c3RFUktOU18yMVJlc291cmNlTG9hZGVyT3B0aW9uc0UKIF9fWk43V2ViQ29yZTE3Y2FjaGVET01T
dHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE4zSlNDOVN0cnVjdHVyZUVQS05TMl85
Q2xhc3NJbmZvRQogX19aTjdXZWJDb3JlMTdkcmF3TGF5ZXJDb250ZW50c0VQOUNHQ29udGV4dFBO
U18xNVBsYXRmb3JtQ0FMYXllckVSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG01RU5TNF8x
NUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMTdlbmNvZGVGb3JGaWxlTmFtZUVSS04z
V1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJD
b3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdz
ZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVT
NV9SS04zV1RGNlN0cmluZ0UKQEAgLTc4NSw2ICs3OTAsOCBAQCBfX1pON1dlYkNvcmUyMHByZXZp
b3VzTGluZVBvc2l0aW9uRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FaU5TXzEyRWRpdGFibGVUeXBl
RQogX19aTjdXZWJDb3JlMjBwcm90b2NvbElzSmF2YVNjcmlwdEVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTIwdG9VSW50MzJFbmZvcmNlUmFuZ2VFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pT
VmFsdWVFCiBfX1pON1dlYkNvcmUyMUJhY2tGb3J3YXJkQ29udHJvbGxlcjExaXRlbUF0SW5kZXhF
aQorX19aTjdXZWJDb3JlMjFDcm9zc1RocmVhZENvcGllckJhc2VJTGIwRUxiMEVOM1dURjZTdHJp
bmdFRTRjb3B5RVJLUzJfCitfX1pON1dlYkNvcmUyMUNyb3NzVGhyZWFkQ29waWVyQmFzZUlMYjBF
TGIwRU5TXzE5SURCRGF0YWJhc2VNZXRhZGF0YUVFNGNvcHlFUktTMV8KIF9fWk43V2ViQ29yZTIx
TWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3RhbGxFdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3Rv
cmFnZVNlc3Npb24yMWRlZmF1bHRTdG9yYWdlU2Vzc2lvbkV2CiBfX1pON1dlYkNvcmUyMU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjI1c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbkV2CkBAIC0xNTkwLDYg
KzE1OTcsNyBAQCBfX1pOSzdXZWJDb3JlMThSZW5kZXJMYXllckJhY2tpbmcyMGNvbXBvc2l0aW5n
TGF5ZXJUeXBlRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIxMWlzU3VzcGVu
ZGVkRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0aXZl
QW5pbWF0aW9uc0VQTlNfOERvY3VtZW50RQogX19aTks3V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJv
bGxlcjMzYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkRXYKK19fWk5LN1dlYkNvcmUx
OUlEQkRhdGFiYXNlTWV0YWRhdGExMmlzb2xhdGVkQ29weUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMTJnZXRIaWdobGlnaHRFUE5TXzlIaWdobGlnaHRFCiBfX1pOSzdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjlidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZUV2
CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTBodHRwTWV0aG9kRXYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3
ZGNjOTBjLi40ZTlmMDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCQkyRTQzNDY1NDBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQyMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJU
aHJlYWQuY3BwICovOyB9OwogCQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQz
NDY0MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU0MzQ2NTgwRjU0NkE5OTAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NjU2MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENv
cGllci5jcHAgKi87IH07Ci0JCTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVh
ZENvcGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ2NTcwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IH07CisJ
CTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NTcwRjU0NkE5OTAw
QjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU3NTgyRUUxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmls
ZVJlYWRlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRTc1ODJFRDEyNzY0RjI2MDA2MjYyOEIgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cCAqLzsgfTsKIAkJMkU3NTg0MUQxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0
MUExMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwICovOyB9OwogCQkyRTc1
ODQxRTEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhC
IC8qIEZpbGVSZWFkZXJMb2FkZXIuaCAqLzsgfTsKQEAgLTE3NTEsNiArMTc1MSw3IEBACiAJCTUx
NjBGNDk4MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBGNDk3MEIwQUE3NUYwMEMxRDJB
RiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLzsgfTsKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZF
IC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5j
cHAgKi87IH07CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjMx
MUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE2MzExN0QxODUxMjQyQjAwNTM0NjQ3IC8q
IElEQkRhdGFiYXNlTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE2MzExN0MxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRhdGFiYXNlTWV0
YWRhdGEuY3BwICovOyB9OwogCQk1MTY0RUQ0MzE4MzIwOEM3MDBFQThGRjEgLyogSURCU2VydmVy
Q29ubmVjdGlvbkxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NEVENDExODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCLmNwcCAqLzsgfTsKIAkJNTE2NEVENDQxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNl
cnZlckNvbm5lY3Rpb25MZXZlbERCLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTY0RUQ0MjE4MzIwOEM3MDBFQThGRjEgLyogSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREIuaCAqLzsgfTsKIAkJNTE2NjBBQjYxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkJh
Y2tpbmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NjBBQjAxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZUxl
dmVsREIuY3BwICovOyB9OwpAQCAtODUwMSw2ICs4NTAyLDcgQEAKIAkJNTE2MEY0OTcwQjBBQTc1
RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gSGlzdG9yeUl0ZW1NYWMubW07IHBhdGggPSBtYWMvSGlzdG9yeUl0ZW1N
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjJDN0YyMTFGNzdFRkEwMDYx
MkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRh
ZGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFz
ZU1ldGFkYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDExODMy
MDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDIxODMyMDhDNzAwRUE4RkYx
IC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNjYwQUIwMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVM
ZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkJhY2tp
bmdTdG9yZUxldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxNDIs
NiArMTcxNDQsNyBAQAogCQkJCTUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFz
ZUVycm9yLmggKi8sCiAJCQkJNTFENzE5ODQxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
RXhjZXB0aW9uLmNwcCAqLywKIAkJCQk1MUQ3MTk4NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0
YWJhc2VFeGNlcHRpb24uaCAqLywKKwkJCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURC
RGF0YWJhc2VNZXRhZGF0YS5jcHAgKi8sCiAJCQkJNTFDOTYxMUExODNEMkI4MDAwRDIwMDJFIC8q
IElEQkRhdGFiYXNlTWV0YWRhdGEuaCAqLywKIAkJCQk1MUQ3MTk4NjE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk1MUQ3MTk4NzE4MTEwNkRGMDAxNkRD
NTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8sCkBAIC0yODIyOCw2ICsyODIzMSw3IEBACiAJ
CQkJQjJDM0RBM0QwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkFGRkM5OTBEMDBBNURGMDAzMDA3NEQgLyogVGV4dENvZGVjTWFjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTNGMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTYzMTE3RDE4NTEyNDJCMDA1
MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMz
REE0MTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFGRjhGNkMxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0
Q29kZWNVVEY4LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmluZGV4IDVlOGJhNzkuLjY1ZGY0N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTQwLDYgKzQwLDEw
IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2luY2x1ZGUgIklEQkRh
dGFiYXNlTWV0YWRhdGEuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFVSTD46OlR5cGUgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBmYWxzZSwgVVJMPjo6Y29weShjb25zdCBVUkwmIHVybCkKQEAgLTY3LDYg
KzcxLDE1IEBAIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlUmVz
cG9uc2U+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzCiAgICAgcmV0dXJuIHJlc3BvbnNlLmNv
cHlEYXRhKCk7CiB9CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworQ3Jvc3NUaHJl
YWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YT46OlR5cGUgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YT46OmNv
cHkoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCit7CisgICAgcmV0dXJuIG1l
dGFkYXRhLmlzb2xhdGVkQ29weSgpOworfQorCisjZW5kaWYKKwogLy8gVGVzdCBDcm9zc1RocmVh
ZENvcGllciB1c2luZyBDT01QSUxFX0FTU0VSVC4KIAogLy8gVmVyaWZ5IHRoYXQgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQgb2JqZWN0cyBnZXQgaGFuZGxlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAppbmRleCBjNzdjOTFiLi5mNGM5M2Q1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTE0NSw2
ICsxNDUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgVHlwZSBjb3B5
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB9OwogCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisgICAgc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7CisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VN
ZXRhZGF0YT4geworICAgICAgICB0eXBlZGVmIElEQkRhdGFiYXNlTWV0YWRhdGEgVHlwZTsKKyAg
ICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CisgICAg
fTsKKyNlbmRpZgorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdHJ1Y3QgQ3Jvc3NU
aHJlYWRDb3BpZXIgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPENyb3NzVGhyZWFkQ29w
aWVyQmFzZUhlbHBlcjo6SXNDb252ZXJ0aWJsZVRvSW50ZWdlcjxUPjo6dmFsdWUsIENyb3NzVGhy
ZWFkQ29waWVyQmFzZUhlbHBlcjo6SXNUaHJlYWRTYWZlUmVmQ291bnRlZFBvaW50ZXI8VD46OnZh
bHVlLCBUPiB7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5OGRhNWMyLi4zMTdmODZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTMtMTItMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCisgICAgICAgIERhdGFiYXNlUHJvY2VzcyBJbmRleGVkREI6IEVzdGFibGlz
aCBhIG1ldGFkYXRhIGJhY2tpbmcgc3RvcmUgb24gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIERhdGFiYXNlUHJvY2VzcyBhbHJlYWR5IGhh
cyBhbiAiSW5kZXhlZCBEYXRhYmFzZSBwYXRoIi4KKyAgICAgICAgRWFjaCBTZWN1cml0eU9yaWdp
biB3aXRoIGluZGV4ZWQgZGF0YWJhc2VzIHdpbGwgaGF2ZSBhIHN1YmRpcmVjdG9yeSB1bmRlciB0
aGUgcGF0aC4KKyAgICAgICAgRWFjaCBpbmRleGVkIGRhdGFiYXNlIHdpbGwgaGF2ZSBhIHN1YmRp
cmVjdG9yeSB1bmRlciBpdHMgU2VjdXJpdHlPcmlnaW4ncyBwYXRoLgorICAgICAgICBJbnNpZGUg
dGhhdCBkaXJlY3Rvcnkgd2lsbCBleGlzdCAoMSkgbWV0YWRhdGEgZGF0YWJhc2UsIGFuZCAwLU4g
T2JqZWN0U3RvcmUgZGF0YWJhc2VzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXN0YWJsaXNoZXMg
dGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIHRoZSAoMSkgbWV0YWRhdGEgZGF0YWJhc2UuCisK
KyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjppbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKTogQXN5
bmNocm9ub3VzbHkgZW5zdXJlIHRoZSBpbmRleGVkIGRhdGFiYXNlIGRpcmVjdG9yeSBleGlzdHMu
CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6ZW5zdXJlSW5kZXhlZERhdGFiYXNl
UmVsYXRpdmVQYXRoRXhpc3RzKTogQWxsb3cgYW55b25lIHRvIG1ha2UgbmVjZXNzYXJ5IGRpcmVj
dG9yaWVzIHJlbGF0aXZlIHRvCisgICAgICAgICAgdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0
b3J5LgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMp
OgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmFic29sdXRlSW5kZXhlZERhdGFi
YXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aCk6IEluc3RlYWQgb2YgZXhwb3NpbmcgdGhl
IGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5LCAKKyAgICAgICAgICBnaXZlIERhdGFiYXNlUHJv
Y2VzcyBhIG1ldGhvZCB0byBhbGxvdyBvdGhlcnMgdG8gY29tcHV0ZSBhIHBhdGggcmVsYXRpdmUg
dG8gdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5LgorICAgICAgICAoV2ViS2l0OjpEYXRh
YmFzZVByb2Nlc3M6OnBvc3REYXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFz
ZVByb2Nlc3M6OnBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKiBEYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmg6CisKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0
OjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNl
TWV0YWRhdGEpOgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlx
dWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaWxl
bmFtZUZvckRhdGFiYXNlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpV
bmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSk6IFRvIGJl
IHJ1biBvbiB0aGUgZGF0YWJhc2Ugd29yayBxdWV1ZSwgZXN0YWJsaXNoZXMgYSBiYWNraW5nIHN0
b3JlCisgICAgICAgICAgYW5kIGV4dHJhY3RzIG1ldGFkYXRhIGZyb20gaXQuCisgICAgICAgIChX
ZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFk
YXRhKTogQ2FsbGJhY2sgb25jZSBtZXRhZGF0YSBmcm9tIHRoZSBiYWNraW5nIHN0b3JlIGlzIHJl
YWR5IGZvciB1c2UuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0
ZURhdGFiYXNlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6
OnBvc3RNYWluVGhyZWFkVGFzayk6IEFkZCBhIG1haW4gdGhyZWFkIHRhc2sgcXVldWUgZm9yIHRo
aXMgZGF0YWJhc2UuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
TmV4dE1haW5UaHJlYWRUYXNrKToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKKyAgICAgICAgQWRkIGEgdmlydHVhbCBiYWNraW5nIHN0
b3JlIGludGVyZmFjZToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlOjp+VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUpOgorCisg
ICAgICAgIEFkZCBhIFNRTGl0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGludGVyZmFjZToKKyAg
ICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0aW5n
TWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZTo6b3BlblNRTGl0ZURhdGFiYXNlQXRQYXRoKToKKyAgICAgICAgKFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmdldE9yRXN0YWJsaXNoTWV0YWRhdGEp
OgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmg6CisKKyAgICAgICAgQWRkIGEgZ2VuZXJhbCBwdXJw
b3NlIGFzeW5jaHJvbm91cyB0YXNrIHRoYXQgZG9lcyBjcm9zcyB0aHJlYWQgY29weWluZzoKKyAg
ICAgICAgKiBTaGFyZWQvQXN5bmNUYXNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpBc3lu
Y1Rhc2s6On5Bc3luY1Rhc2spOgorICAgICAgICAoV2ViS2l0OjpBc3luY1Rhc2s6OkFzeW5jVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZUFzeW5jVGFzayk6CisKKyAgICAgICAgQWRkIG1v
cmUgaXNvbGF0ZWQgY29waWVycyBhbmQgaW50cm9kdWNlIFdlYktpdCBDcm9zc1RocmVhZENvcGll
ciBzcGVjaWFsaXphdGlvbnM6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9V
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXI6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaDoKKworICAgICAg
ICAqIFNoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTZWN1
cml0eU9yaWdpbkRhdGE6OmRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YktpdDo6U2VjdXJpdHlPcmlnaW5EYXRhOjpjYW5TaGFyZURhdGFiYXNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0YTo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBTaGFy
ZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmg6CisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ3Jvc3NUaHJl
YWRDb3BpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Ojpjb3B5KToKKyAgICAgICAgKiBTaGFy
ZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKworICAgICAgICBBZGQgYSBoZWxwZXIgY2xhc3Mg
dG8gYWxsb3cgdGhlIFVJUHJvY2VzcyB0byBlYXNpbHkgcGVyZm9ybSBiYXNpYyBmaWxlc3lzdGVt
IG9wZXJhdGlvbnMgb24gYSBiYWNrZ3JvdW5kIHF1ZXVlOgorICAgICAgICAqIFNoYXJlZC9GaWxl
U3lzdGVtSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmlsZVN5c3RlbUhlbHBlcjo6Rmls
ZVN5c3RlbUhlbHBlcik6CisgICAgICAgIChXZWJLaXQ6OkZpbGVTeXN0ZW1IZWxwZXI6OnNoYXJl
ZEhlbHBlcik6CisgICAgICAgIChXZWJLaXQ6OkZpbGVTeXN0ZW1IZWxwZXI6OmVuc3VyZURpcmVj
dG9yeUV4aXN0cyk6CisgICAgICAgIChXZWJLaXQ6OkZpbGVTeXN0ZW1IZWxwZXI6OmVuc3VyZURp
cmVjdG9yeUV4aXN0c0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6RmlsZVN5c3RlbUhlbHBl
cjo6cG9zdFRhc2spOgorICAgICAgICAoV2ViS2l0OjpGaWxlU3lzdGVtSGVscGVyOjpwZXJmb3Jt
TmV4dFRhc2spOgorICAgICAgICAqIFNoYXJlZC9GaWxlU3lzdGVtSGVscGVyLmg6CisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
eHQ6OmVuc3VyZURhdGFiYXNlUHJvY2Vzcyk6IE1ha2Ugc3VyZSB0aGUgZGF0YWJhc2UgZGlyZWN0
b3J5IGV4aXN0cyBiZWZvcmUgdGVsbGluZyB0aGUKKyAgICAgICAgICBEYXRhYmFzZVByb2Nlc3Mg
d2hhdCBpdCBpcy4KKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKwogMjAxMy0xMi0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSBwbGF0Zm9ybSBzcGVjaWZpYyBndW5rIGZyb20gV2ViVVJMUmVxdWVz
dCBhbmQgV2ViVVJMUmVzcG9uc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKaW5kZXggYjFiZGM3Yy4uYTAzNmZlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKQEAg
LTI4LDEwICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCiAKKyNpbmNs
dWRlICJBc3luY1Rhc2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiVW5pcXVl
SURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKQEAgLTk2LDYgKzEwMSw1MyBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzczo6
aW5pdGlhbGl6ZURhdGFiYXNlUHJvY2Vzcyhjb25zdCBEYXRhYmFzZVByb2Nlc3NDcmVhdGlvblBh
cgogICAgIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcGFyYW1ldGVycy5pbmRleGVkRGF0
YWJhc2VEaXJlY3Rvcnk7CiB9CiAKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjplbnN1cmVJbmRleGVk
RGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQXN5bmNUYXNrKHRoaXMsICZEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGFi
c29sdXRlSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChyZWxhdGl2
ZVBhdGgpKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBtYWtlIGFsbCBkaXJlY3RvcmllcyBmb3IgcGF0aCAnJXMnIiwgcGF0aC51dGY4KCkuZGF0
YSgpKTsKK30KKworU3RyaW5nIERhdGFiYXNlUHJvY2Vzczo6YWJzb2x1dGVJbmRleGVkRGF0YWJh
c2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRo
KQoreworICAgIC8vIEZJWE1FOiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoKSB3YXMgb3JpZ2lu
YWxseSBkZXNpZ25lZCB0byBhcHBlbmQgaW5kaXZpZHVhbCBhdG9taWMgY29tcG9uZW50cy4KKyAg
ICAvLyBXZSBkb24ndCBoYXZlIGEgZnVuY3Rpb24gZGVzaWduZWQgdG8gYXBwZW5kIGEgbXVsdGkt
Y29tcG9uZW50IHN1YnBhdGgsIGJ1dCB3ZSBzaG91bGQuCisgICAgcmV0dXJuIHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcmVsYXRpdmVQYXRoKTsK
K30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OnBvc3REYXRhYmFzZVRhc2soc3RkOjp1bmlxdWVf
cHRyPEFzeW5jVGFzaz4gdGFzaykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VUYXNrTXV0ZXgpOworCisgICAgbV9kYXRh
YmFzZVRhc2tzLmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOworCisgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goYmluZCgmRGF0YWJhc2VQcm9jZXNzOjpwZXJmb3JtTmV4dERhdGFiYXNlVGFzaywgdGhpcykp
OworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6cGVyZm9ybU5leHREYXRhYmFzZVRhc2soKQor
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEFz
eW5jVGFzaz4gdGFzazsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFi
YXNlVGFza011dGV4KTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlVGFza3MuaXNFbXB0eSgp
KTsKKyAgICAgICAgdGFzayA9IG1fZGF0YWJhc2VUYXNrcy50YWtlRmlyc3QoKTsKKyAgICB9CisK
KyAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworfQorCiB2b2lkIERhdGFiYXNlUHJvY2Vzczo6Y3Jl
YXRlRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uKCkKIHsKICNpZiBQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9j
ZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgK
aW5kZXggODM3N2E0Yy4uZTNjZTExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaApAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBXb3JrUXVl
dWU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBBc3luY1Rhc2s7CiBjbGFzcyBEYXRh
YmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb247CiBjbGFzcyBVbmlxdWVJREJEYXRhYmFzZTsKIApA
QCAtNTAsNyArNTEsMTAgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8VW5pcXVlSURCRGF0YWJh
c2U+IGdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJik7CiAgICAgdm9pZCByZW1vdmVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlx
dWVJREJEYXRhYmFzZSYpOwogCi0gICAgV29ya1F1ZXVlJiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8V29ya1F1ZXVlJj4obV9xdWV1ZS5nZXQoKSk7IH0KKyAgICB2b2lkIGVuc3Vy
ZUluZGV4ZWREYXRhYmFzZVJlbGF0aXZlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmKTsKKyAgICBT
dHJpbmcgYWJzb2x1dGVJbmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRo
KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVl
X3B0cjxBc3luY1Rhc2s+KTsKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZVByb2Nlc3MoKTsKQEAg
LTcyLDYgKzc2LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplRGF0YWJhc2VQcm9j
ZXNzKGNvbnN0IERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwogICAgIHZvaWQg
Y3JlYXRlRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uKCk7CiAKKyAgICAvLyBGb3IgZXhl
Y3V0aW9uIG9uIHdvcmsgcXVldWUgdGhyZWFkIG9ubHkKKyAgICB2b2lkIHBlcmZvcm1OZXh0RGF0
YWJhc2VUYXNrKCk7CisgICAgdm9pZCBlbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYpOwor
CiAgICAgVmVjdG9yPFJlZlB0cjxEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24+PiBtX2Rh
dGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbnM7CiAKICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1
ZXVlOwpAQCAtNzksNiArODcsOSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2luZGV4ZWREYXRh
YmFzZURpcmVjdG9yeTsKIAogICAgIEhhc2hNYXA8VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
LCBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX2lkYkRhdGFiYXNlczsKKworICAgIERlcXVl
PHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+PiBtX2RhdGFiYXNlVGFza3M7CisgICAgTXV0ZXgg
bV9kYXRhYmFzZVRhc2tNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJE
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBiYzcyNDVjLi4yYjJlYzNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcApAQCAtMjksOCArMjksMTIgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCiAKICNpbmNsdWRlICJBc3luY1Jl
cXVlc3QuaCIKKyNpbmNsdWRlICJBc3luY1Rhc2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nl
c3MuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgiCisjaW5jbHVk
ZSAiVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKKyNpbmNsdWRlICJXZWJD
cm9zc1RocmVhZENvcGllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VNZXRhZGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAKQEAgLTQwLDEyICs0NCw0NCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogVW5p
cXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllciYgaWRlbnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQot
ICAgICwgbV9wcm9jZXNzaW5nRGF0YWJhc2VRdWV1ZVJlcXVlc3RzKGZhbHNlKQorICAgICwgbV9h
Y2NlcHRpbmdOZXdSZXF1ZXN0cyh0cnVlKQorICAgICwgbV9kaWRHZXRNZXRhZGF0YUZyb21CYWNr
aW5nU3RvcmUoZmFsc2UpCiB7CisgICAgbV9pbk1lbW9yeSA9ICFpZGVudGlmaWVyLm9wZW5pbmdP
cmlnaW4oKS5jYW5TaGFyZURhdGFiYXNlcyhpZGVudGlmaWVyLm1haW5GcmFtZU9yaWdpbigpKTsK
KyAgICBpZiAobV9pbk1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRWFjaCB1bmlx
dWUgSW5kZXhlZCBEYXRhYmFzZSBleGlzdHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZm9yIHRoZSBk
YXRhYmFzZSwgd2hpY2ggZXhpc3RzIGluIGEgZGlyZWN0b3J5IHJlcHJlc2VudGluZyBpdHMgb3Bl
bmluZyBvcmlnaW4uCisgICAgbV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5ID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGlkZW50aWZpZXIub3BlbmluZ09yaWdpbigpLmRhdGFiYXNlRmlsZW5h
bWVJZGVudGlmaWVyKCksIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkpOworCisgICAgRGF0YWJh
c2VQcm9jZXNzOjpzaGFyZWQoKS5lbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlz
dHMobV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsKIH0KIAogVW5pcXVlSURCRGF0YWJhc2U6
On5VbmlxdWVJREJEYXRhYmFzZSgpCiB7CisgICAgbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyA9IGZh
bHNlOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3RzLmlzRW1wdHkoKSkg
eworICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3RzLnRha2VG
aXJzdCgpOworICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0QWJvcnRlZCgpOworICAgIH0KK30KKwor
U3RyaW5nIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpCit7Cisg
ICAgQVNTRVJUKCFtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkuaXNOdWxsKCkpOworCisgICAg
aWYgKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAiJTAwIjsKKworICAgIFN0cmluZyBmaWxlbmFtZSA9IGVuY29kZUZvckZpbGVOYW1lKG1faWRl
bnRpZmllci5kYXRhYmFzZU5hbWUoKSk7CisgICAgaWYgKGZpbGVuYW1lID09ICIuIikKKyAgICAg
ICAgcmV0dXJuICIlMkUiOworCisgICAgaWYgKGZpbGVuYW1lID09ICIuLiIpCisgICAgICAgIHJl
dHVybiAiJTJFJTJFIjsKKworICAgIHJldHVybiBmaWxlbmFtZTsKIH0KIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24pCkBAIC02Myw2NiArOTksMTAzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnVucmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNv
bm5lCiAgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlVW5pcXVlSURCRGF0
YWJhc2UoKnRoaXMpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjplbnF1ZXVlRGF0YWJh
c2VRdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoc3RkOjpm
dW5jdGlvbjx2b2lkKGJvb2wsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKT4gY29tcGxldGlv
bkNhbGxiYWNrKQogewotICAgIEFTU0VSVChyZXF1ZXN0KTsKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7CisgICAgICAgIGNv
bXBsZXRpb25DYWxsYmFjayhmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgcmV0cmlldmVkIG1ldGFk
YXRhIGZyb20gdGhlIGJhY2tpbmcgc3RvcmUsIHJldHVybiBpdCBub3cuCisgICAgaWYgKG1fZGlk
R2V0TWV0YWRhdGFGcm9tQmFja2luZ1N0b3JlKSB7CisgICAgICAgIGlmIChtX21ldGFkYXRhKQor
ICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKHRydWUsICptX21ldGFkYXRhKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKGZhbHNlLCBJREJEYXRhYmFz
ZU1ldGFkYXRhKCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGlz
IGlzIHRoZSBmaXJzdCB1bmFuc3dlcmVkIG1ldGFkYXRhIHJlcXVlc3QsIHBvc3QgYSB0YXNrIHRv
IG9wZW4gdGhlIGJhY2tpbmcgc3RvcmUgYW5kIGdldCBtZXRhZGF0YS4KKyAgICBpZiAobV9wZW5k
aW5nTWV0YWRhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6
c2hhcmVkKCkucG9zdERhdGFiYXNlVGFzayhjcmVhdGVBc3luY1Rhc2sodGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhLCBtX2lkZW50aWZpZXIs
IGFic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkoKSkpOworCisgICAgLy8gVGhlbiByZW1lbWJlciB0
aGlzIG1ldGFkYXRhIHJlcXVlc3QgdG8gYmUgYW5zd2VyZWQgbGF0ZXIuCisgICAgUmVmUHRyPEFz
eW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Pjo6Y3JlYXRlKFtjb21wbGV0
aW9uQ2FsbGJhY2ssIHRoaXNdKCkgeworICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soISFtX21l
dGFkYXRhLCBtX21ldGFkYXRhID8gKm1fbWV0YWRhdGEgOiBJREJEYXRhYmFzZU1ldGFkYXRhKCkp
OworICAgIH0sIFtjb21wbGV0aW9uQ2FsbGJhY2tdKCkgeworICAgICAgICAvLyBUaGUgYm9vbGVh
biBmbGFnIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIHJlcHJlc2VudHMgd2hldGhlciB0aGUK
KyAgICAgICAgLy8gYXR0ZW1wdCB0byBnZXQvZXN0YWJsaXNoIG1ldGFkYXRhIHN1Y2NlZWRlZCBv
ciBmYWlsZWQuCisgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFib3J0aW5nIHRoZSBhdHRlbXB0LCBp
dCBmYWlsZWQsIHNvIHdlIGFsd2F5cyBwYXNzIGluIGZhbHNlLgorICAgICAgICBjb21wbGV0aW9u
Q2FsbGJhY2soZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSk7CisgICAgfSk7CisKKyAgICBt
X3BlbmRpbmdNZXRhZGF0YVJlcXVlc3RzLmFwcGVuZChyZXF1ZXN0LnJlbGVhc2UoKSk7Cit9CiAK
LSAgICBNdXRleExvY2tlciBsb2NrZXIobV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleCk7Ci0g
ICAgbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpOwordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YShjb25zdCBVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VE
aXJlY3RvcnkpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFt
X2JhY2tpbmdTdG9yZSk7CiAKLSAgICBpZiAobV9wcm9jZXNzaW5nRGF0YWJhc2VRdWV1ZVJlcXVl
c3RzKQorICAgIGlmIChtX2luTWVtb3J5KSB7CisgICAgICAgIExPR19FUlJPUigiU3VwcG9ydCBm
b3IgaW4tbWVtb3J5IGRhdGFiYXNlcyBub3QgeWV0IGltcGxlbWVudGVkIik7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlOjpjcmVhdGUoaWRlbnRpZmllciwgZGF0YWJhc2VEaXJlY3RvcnkpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBtZXRhZGF0YSA9IG1fYmFj
a2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaE1ldGFkYXRhKCk7CiAKLSAgICBtX3Byb2Nlc3NpbmdE
YXRhYmFzZVF1ZXVlUmVxdWVzdHMgPSB0cnVlOwotICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVk
KCkucXVldWUoKS5kaXNwYXRjaChiaW5kKCZVbmlxdWVJREJEYXRhYmFzZTo6cHJvY2Vzc0RhdGFi
YXNlUmVxdWVzdFF1ZXVlLCB0aGlzKSk7CisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUFz
eW5jVGFzayh0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmVBbmRS
ZWFkTWV0YWRhdGEsIG1ldGFkYXRhID8gKm1ldGFkYXRhIDogSURCRGF0YWJhc2VNZXRhZGF0YSgp
LCAhIW1ldGFkYXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnByb2Nlc3NEYXRh
YmFzZVJlcXVlc3RRdWV1ZSgpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2lu
Z1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRh
LCBib29sIHN1Y2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc2luZ0RhdGFiYXNlUXVldWVS
ZXF1ZXN0cyk7Ci0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBSZWZQdHI8QXN5bmNSZXF1
ZXN0PiByZXF1ZXN0OwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleCk7Ci0gICAgICAgICAgICBpZiAobV9kYXRhYmFz
ZVF1ZXVlUmVxdWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9wcm9jZXNzaW5n
RGF0YWJhc2VRdWV1ZVJlcXVlc3RzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVxdWVzdCA9IG1fZGF0YWJhc2VRdWV1ZVJlcXVl
c3RzLnRha2VGaXJzdCgpOwotICAgICAgICB9CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQoIW1fbWV0YWRhdGEpOworCisgICAgbV9kaWRHZXRNZXRhZGF0YUZyb21CYWNr
aW5nU3RvcmUgPSB0cnVlOwogCisgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIG1fbWV0YWRhdGEg
PSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlTWV0YWRhdGE+KG1ldGFkYXRhKTsKKworICAg
IHdoaWxlICghbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
UmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMu
dGFrZUZpcnN0KCk7CiAgICAgICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdCgpOwogICAgIH0K
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1l
dGFkYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZChib29sLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRh
Jik+IGNvbXBsZXRpb25DYWxsYmFjaykKK1N0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6YWJzb2x1
dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4g
cmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Pjo6Y3JlYXRlKFtjb21wbGV0aW9uQ2FsbGJhY2ss
IHRoaXNdKCkgewotICAgICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhOwotICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGFJbnRlcm5h
bChtZXRhZGF0YSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gRGF0
YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5hYnNvbHV0ZUluZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0
YWJhc2VSZWxhdGl2ZVBhdGgobV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsKK30KIAotICAg
ICAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKFttZXRhZGF0YSwgc3VjY2VzcywgY29tcGxl
dGlvbkNhbGxiYWNrXSgpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhzdWNjZXNz
LCBtZXRhZGF0YSk7Ci0gICAgICAgIH0pOwotICAgIH0sIFtjb21wbGV0aW9uQ2FsbGJhY2tdKCkg
ewotICAgICAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKFtjb21wbGV0aW9uQ2FsbGJhY2td
KCkgewotICAgICAgICAgICAgLy8gVGhlIGJvb2xlYW4gZmxhZyB0byB0aGUgY29tcGxldGlvbiBj
YWxsYmFjayByZXByZXNlbnRzIHdoZXRoZXIgdGhlIGF0dGVtcHQgdG8gZ2V0L2VzdGFibGlzaCBt
ZXRhZGF0YQotICAgICAgICAgICAgLy8gc3VjY2VlZGVkIG9yIGZhaWxlZC4KLSAgICAgICAgICAg
IC8vIFNpbmNlIHdlJ3JlIGFib3J0aW5nIHRoZSBhdHRlbXB0LCBpdCBmYWlsZWQsIHNvIHdlIGFs
d2F5cyBwYXNzIGluIGZhbHNlLgotICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKGZhbHNl
LCBJREJEYXRhYmFzZU1ldGFkYXRhKCkpOwotICAgICAgICB9KTsKLSAgICB9KTsKK3ZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBvc3RNYWluVGhyZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNU
YXNrPiB0YXNrKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgZW5xdWV1
ZURhdGFiYXNlUXVldWVSZXF1ZXN0KHJlcXVlc3QucmVsZWFzZSgpKTsKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9tYWluVGhyZWFkVGFza011dGV4KTsKKworICAgIG1fbWFpblRocmVhZFRhc2tz
LmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOworCisgICAgUnVuTG9vcDo6bWFpbigpLT5kaXNwYXRj
aChiaW5kKCZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHRNYWluVGhyZWFkVGFzaywgdGhp
cykpOwogfQogCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRPckVzdGFibGlzaElEQkRhdGFi
YXNlTWV0YWRhdGFJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJikK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1OZXh0TWFpblRocmVhZFRhc2soKQogewot
ICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBzdWNjZXNzZnVsbHkgY2FsbGVkIGJ5IG1lc3Nh
Z2luZyBmcm9tIHRoZSBXZWJQcm9jZXNzLCBhbmQgY2FsbHMgYmFjayB3aXRoIGR1bW15IGRhdGEu
Ci0gICAgLy8gTmVlZHMgcmVhbCBpbXBsZW1lbnRhdGlvbi4KLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2s7CisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9tYWluVGhyZWFkVGFza011dGV4KTsKKyAgICAgICAgQVNTRVJU
KCFtX21haW5UaHJlYWRUYXNrcy5pc0VtcHR5KCkpOworICAgICAgICB0YXNrID0gbV9tYWluVGhy
ZWFkVGFza3MudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgdGFzay0+cGVyZm9ybVRhc2soKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXgg
M2RlMDEwNC4uNTA3YTE5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtNDMsNyArNDMs
OSBAQCBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBBc3luY1JlcXVlc3Q7CitjbGFzcyBBc3luY1Rhc2s7CiBjbGFzcyBEYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uOworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmU7CiAK
IHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiAKQEAgLTY4LDE4ICs3MCwzNiBAQCBwcml2YXRl
OgogCiAgICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIAorICAg
IGJvb2wgbV9pbk1lbW9yeTsKKyAgICBTdHJpbmcgbV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5
OworCiAgICAgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4+IG1f
Y29ubmVjdGlvbnM7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEFzeW5jUmVxdWVzdD4+
IG1fZGF0YWJhc2VSZXF1ZXN0czsKIAotICAgIHZvaWQgZW5xdWV1ZURhdGFiYXNlUXVldWVSZXF1
ZXN0KFBhc3NSZWZQdHI8QXN5bmNSZXF1ZXN0Pik7CisgICAgU3RyaW5nIGFic29sdXRlRGF0YWJh
c2VEaXJlY3RvcnkoKSBjb25zdDsKKworICAgIHZvaWQgcG9zdE1haW5UaHJlYWRUYXNrKHN0ZDo6
dW5pcXVlX3B0cjxBc3luY1Rhc2s+KTsKKworICAgIC8vIE1ldGhvZCB0aGF0IGF0dGVtcHRzIHRv
IG1ha2UgbGVnYWwgZmlsZW5hbWVzIGZyb20gYWxsIGxlZ2FsIGRhdGFiYXNlIG5hbWVzCisgICAg
U3RyaW5nIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCk7CiAKICAgICAvLyBUbyBiZSBjYWxsZWQg
ZnJvbSB0aGUgZGF0YWJhc2Ugd29ya3F1ZXVlIHRocmVhZCBvbmx5Ci0gICAgdm9pZCBwcm9jZXNz
RGF0YWJhc2VSZXF1ZXN0UXVldWUoKTsKLSAgICBib29sIGdldE9yRXN0YWJsaXNoSURCRGF0YWJh
c2VNZXRhZGF0YUludGVybmFsKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmKTsK
KyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoY29uc3QgVW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSk7CisK
KyAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgZGF0YWJhc2Ugd29ya3F1ZXVlIHRocmVhZCwgdG8g
YmUgcGVyZm9ybWVkIG9uIHRoZSBtYWluIHRocmVhZCBvbmx5CisgICAgdm9pZCBwZXJmb3JtTmV4
dE1haW5UaHJlYWRUYXNrKCk7CisgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1l
dGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmLCBib29sIHN1Y2Nlc3Mp
OworCisgICAgRGVxdWU8UmVmUHRyPEFzeW5jUmVxdWVzdD4+IG1fcGVuZGluZ01ldGFkYXRhUmVx
dWVzdHM7CisgICAgYm9vbCBtX2FjY2VwdGluZ05ld1JlcXVlc3RzOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IG1fbWV0YWRhdGE7CisgICAgYm9v
bCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZTsKKworICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAKLSAgICBNdXRleCBtX2Rh
dGFiYXNlUXVldWVSZXF1ZXN0c011dGV4OwotICAgIERlcXVlPFJlZlB0cjxBc3luY1JlcXVlc3Q+
PiBtX2RhdGFiYXNlUXVldWVSZXF1ZXN0czsKLSAgICBib29sIG1fcHJvY2Vzc2luZ0RhdGFiYXNl
UXVldWVSZXF1ZXN0czsKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPj4gbV9t
YWluVGhyZWFkVGFza3M7CisgICAgTXV0ZXggbV9tYWluVGhyZWFkVGFza011dGV4OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiOGQwMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZV9oCisjZGVmaW5l
IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBJREJEYXRhYmFzZU1ldGFk
YXRhOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZT4geworcHVibGljOgorICAgIHZpcnR1YWwgflVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRh
YmFzZU1ldGFkYXRhPiBnZXRPckVzdGFibGlzaE1ldGFkYXRhKCkgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisjZW5kaWYgLy8gVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3Bw
CmluZGV4IGZmOGJkN2UuLjE5OGYwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllci5jcHAKQEAgLTc1LDYgKzc1LDE3IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJh
c2VJZGVudGlmaWVyOjppc051bGwoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGFiYXNlTmFtZS5p
c051bGwoKTsKIH0KIAorVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllcjo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBVbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXIgcmVzdWx0OworCisgICAgcmVzdWx0Lm1fZGF0YWJhc2VOYW1lID0gbV9k
YXRhYmFzZU5hbWUuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0Lm1fb3BlbmluZ09yaWdpbiA9
IG1fb3BlbmluZ09yaWdpbi5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQubV9tYWluRnJhbWVP
cmlnaW4gPSBtX21haW5GcmFtZU9yaWdpbi5pc29sYXRlZENvcHkoKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXImIGEsIGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgYikKIHsKICAgICBp
ZiAoJmEgPT0gJmIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaApp
bmRleCBiZWJjZGM0Li5kYmY5ZGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJ
ZGVudGlmaWVyLmgKQEAgLTUwLDYgKzUwLDggQEAgcHVibGljOgogICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKKyAg
ICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CisKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VOYW1lOwogICAgIFNlY3VyaXR5T3JpZ2luRGF0
YSBtX29wZW5pbmdPcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9V
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMDA1NjVmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlLmNwcApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVE
YXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCisvLyBDdXJyZW50IHZlcnNpb24gb2YgdGhlIG1ldGFkYXRhIHNjaGVt
YSBiZWluZyB1c2VkIGluIHRoZSBtZXRhZGF0YSBkYXRhYmFzZS4KK3N0YXRpYyBjb25zdCBpbnQg
Y3VycmVudE1ldGFkYXRhVmVyc2lvbiA9IDE7CisKK1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlOjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShjb25zdCBVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnkpCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fYWJz
b2x1dGVEYXRhYmFzZURpcmVjdG9yeShkYXRhYmFzZURpcmVjdG9yeSkKK3sKKyAgICAvLyBUaGUg
YmFja2luZyBzdG9yZSBpcyBtZWFudCB0byBiZSBjcmVhdGVkIGFuZCB1c2VkIGVudGlyZWx5IG9u
IGEgYmFja2dyb3VuZCB0aHJlYWQuCisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRh
dGEoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX21ldGFk
YXRhREIpOworICAgIEFTU0VSVChtX21ldGFkYXRhREItPmlzT3BlbigpKTsKKworICAgIGlmICgh
bV9tZXRhZGF0YURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElEQkRhdGFiYXNlSW5m
byAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1Qg
UkVQTEFDRSwgdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSURCRGF0YWJhc2VJbmZvIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yKCksIG1fbWV0YWRh
dGFEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBtX21ldGFkYXRhREIgPSBudWxscHRyOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBW
QUxVRVMgKCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRN
ZXRhZGF0YVZlcnNpb24pICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgp
ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGlu
c2VydCBkYXRhYmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxl
ICglaSkgLSAlcyIsIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yKCksIG1fbWV0YWRhdGFEQi0+bGFz
dEVycm9yTXNnKCkpOworICAgICAgICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJh
c2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyIpOworICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIG1f
aWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8
IHNxbC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUg
KCVpKSAtICVzIiwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3IoKSwgbV9tZXRhZGF0YURCLT5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgICAgICBtX21ldGFkYXRhREIgPSBudWxscHRyOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICAv
LyBEYXRhYmFzZSB2ZXJzaW9ucyBhcmUgZGVmaW5lZCB0byBiZSBhIHVpbjY0X3QgaW4gdGhlIHNw
ZWMgYnV0IHNxbGl0ZTMgZG9lc24ndCBzdXBwb3J0IG5hdGl2ZSBiaW5kaW5nIG9mIHVuc2lnbmVk
IGludGVnZXJzLgorICAgICAgICAvLyBUaGVyZWZvcmUgd2UnbGwgc3RvcmUgdGhlIHZlcnNpb24g
YXMgYSBTdHJpbmcuCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwg
IklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/
KTsiKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAg
ICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMUmVzdWx0T2sK
KyAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRlZmF1bHQgdmVyc2lvbiBpbnRvIElEQkRh
dGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX21ldGFkYXRhREItPmxhc3RFcnJvcigpLCBt
X21ldGFkYXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1fbWV0YWRhdGFEQiA9
IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFRoaXMgaW5pdGlhbCBtZXRhZGF0YSBtYXRjaGVzIHRoZSBkZWZhdWx0IHZhbHVl
cyB3ZSBqdXN0IHB1dCBpbnRvIHRoZSBtZXRhZGF0YSBkYXRhYmFzZS4KKyAgICBhdXRvIG1ldGFk
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPigpOworICAgIG1ldGFk
YXRhLT5uYW1lID0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpOworICAgIG1ldGFkYXRhLT52
ZXJzaW9uID0gMDsKKworICAgIHJldHVybiBtZXRhZGF0YTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
OjpleHRyYWN0RXhpc3RpbmdNZXRhZGF0YSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisgICAgQVNTRVJUKG1fbWV0YWRhdGFEQik7CisKKyAgICBpZiAoIW1fbWV0YWRhdGFEQi0+
dGFibGVFeGlzdHMoIklEQkRhdGFiYXNlSW5mbyIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gbWV0YWRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlTWV0YWRh
dGE+KCk7CisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIs
ICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ01ldGFkYXRh
VmVyc2lvbic7Iik7CisgICAgICAgIGlmIChzcWwuaXNDb2x1bW5OdWxsKDApKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIG1ldGFkYXRhLT52ZXJzaW9uID0gc3FsLmdldENv
bHVtbkludCgwKTsKKyAgICB9CisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X21ldGFkYXRhREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5
ID0gJ0RhdGFiYXNlTmFtZSc7Iik7CisgICAgICAgIGlmIChzcWwuaXNDb2x1bW5OdWxsKDApKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIG1ldGFkYXRhLT5uYW1lID0gc3Fs
LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGlmIChtZXRhZGF0YS0+bmFtZSAhPSBtX2lkZW50
aWZpZXIuZGF0YWJhc2VOYW1lKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRGF0YWJhc2Ug
bmFtZSBpbiB0aGUgbWV0YWRhdGEgZGF0YWJhc2UgKCclcycpIGRvZXMgbm90IG1hdGNoIHRoZSBl
eHBlY3RlZCBuYW1lICgnJXMnKSIsIG1ldGFkYXRhLT5uYW1lLnV0ZjgoKS5kYXRhKCksIG1faWRl
bnRpZmllci5kYXRhYmFzZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZv
IFdIRVJFIGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyIpOworICAgICAgICBpZiAoc3FsLmlzQ29s
dW1uTnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBTdHJpbmcg
c3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBib29sIG9rOwor
ICAgICAgICBtZXRhZGF0YS0+dmVyc2lvbiA9IHN0cmluZ1ZlcnNpb24udG9VSW50NjRTdHJpY3Qo
Jm9rKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFz
ZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRvZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1
bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJzaW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gRklYTUU6IE9uY2Ugd2Ugc2F2ZSBPYmplY3RTdG9yZXMgYW5kIGluZGV4ZXMgd2UgbmVl
ZCB0byBleHRyYWN0IHRoZWlyIG1ldGFkYXRhLCBhbHNvLgorICAgIHJldHVybiBtZXRhZGF0YTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6b3BlblNRTGl0ZURhdGFiYXNlQXRQYXRoKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGF1
dG8gc3FsaXRlRGF0YWJhc2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZURhdGFiYXNlPigpOwor
ICAgIGlmICghc3FsaXRlRGF0YWJhc2UtPm9wZW4ocGF0aCkpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gb3BlbiBTUUxpdGUgZGF0YWJhc2UgYXQgcGF0aCAnJXMnIiwgcGF0aC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IHNxbGl0ZURhdGFiYXNlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0
YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmdldE9yRXN0YWJsaXNoTWV0
YWRhdGEoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgU3RyaW5nIG1l
dGFkYXRhREJGaWxlbmFtZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Fic29sdXRlRGF0
YWJhc2VEaXJlY3RvcnksICJJREJNZXRhZGF0YS5zcWxpdGUzIik7CisgICAgbV9tZXRhZGF0YURC
ID0gb3BlblNRTGl0ZURhdGFiYXNlQXRQYXRoKG1ldGFkYXRhREJGaWxlbmFtZSk7CisgICAgaWYg
KCFtX21ldGFkYXRhREIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IG1ldGFkYXRhID0gZXh0cmFjdEV4aXN0aW5nTWV0
YWRhdGEoKTsKKyAgICBpZiAoIW1ldGFkYXRhKQorICAgICAgICBtZXRhZGF0YSA9IGNyZWF0ZUFu
ZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKCk7CisKKyAgICBpZiAoIW1ldGFkYXRhKQorICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggSURCIGRhdGFiYXNlIGF0IHBhdGggJyVz
JyIsIG1ldGFkYXRhREJGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBtZXRh
ZGF0YTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY2Yzk1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUv
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaApAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZV9o
CisjZGVmaW5lIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlX2gKKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlLmgiIAorI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU1FMaXRl
RGF0YWJhc2U7CitzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlIEZJTkFM
IDogcHVibGljIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNv
bnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZURpcmVjdG9yeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUoaWRlbnRpZmllciwgZGF0YWJhc2VE
aXJlY3RvcnkpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpJREJEYXRhYmFzZU1ldGFkYXRhPiBnZXRPckVzdGFibGlzaE1ldGFkYXRhKCkgT1ZFUlJJREU7
CisKK3ByaXZhdGU6CisgICAgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUoY29u
c3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURp
cmVjdG9yeSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+
IG9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZXh0cmFjdEV4aXN0aW5nTWV0YWRh
dGEoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4g
Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKTsKKworICAgIFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgU3RyaW5nIG1fYWJzb2x1dGVEYXRhYmFz
ZURpcmVjdG9yeTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZT4gbV9tZXRhZGF0YURCOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisj
ZW5kaWYgLy8gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jVGFzay5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0FzeW5jVGFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzE2
ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNUYXNrLmgK
QEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFzeW5jVGFza19oCisjZGVm
aW5lIEFzeW5jVGFza19oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzVGhyZWFkQ29waWVyLmg+
CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEFz
eW5jVGFzayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXN5bmNUYXNrKTsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5Bc3luY1Rhc2soKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
VGFzaygpID0gMDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IEFzeW5jVGFzaygpIHsgfQor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK2NsYXNz
IEFzeW5jVGFza0ltcGwgRklOQUwgOiBwdWJsaWMgQXN5bmNUYXNrIHsKK3B1YmxpYzoKKyAgICBB
c3luY1Rhc2tJbXBsKFQqIGNvbnN0IGNhbGxlZSwgdm9pZCAoVDo6Km1ldGhvZCkoQXJndW1lbnRz
Li4uKSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbV90YXNrRnVu
Y3Rpb24gPSBbY2FsbGVlLCBtZXRob2QsIGFyZ3VtZW50cy4uLl0oKSB7CisgICAgICAgICAgICAo
Y2FsbGVlLT4qbWV0aG9kKShhcmd1bWVudHMuLi4pOworICAgICAgICB9OworICAgIH0KKworICAg
IHZpcnR1YWwgfkFzeW5jVGFza0ltcGwoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fdGFz
a0Z1bmN0aW9uKCk7CisgICAgfQorCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fdGFza0Z1
bmN0aW9uOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6dW5pcXVlX3B0cjxBc3lu
Y1Rhc2s+IGNyZWF0ZUFzeW5jVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAo
VDo6Km1ldGhvZCkoKSkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBc3luY1Rhc2tJ
bXBsPFQ+PihjYWxsZWUsIG1ldGhvZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDE+CitzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiBjcmVhdGVB
c3luY1Rhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1Q
MSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8QXN5bmNUYXNrSW1wbDxULCBNUDE+PigKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBt
ZXRob2QsCisgICAgICAgIFdlYkNvcmU6OkNyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJh
bWV0ZXIxKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFt
ZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNU
YXNrPiBjcmVhdGVBc3luY1Rhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6
OiptZXRob2QpKE1QMSwgTVAyKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25z
dCBQMiYgcGFyYW1ldGVyMikKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBc3luY1Rh
c2tJbXBsPFQsIE1QMSwgTVAyPj4oCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAor
ICAgICAgICBXZWJDb3JlOjpDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSks
CisgICAgICAgIFdlYkNvcmU6OkNyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIy
KSk7CisKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBBc3luY1Rhc2tf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWQ0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRmlsZVN5c3RlbUhlbHBlci5jcHAKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtSGVs
cGVyLmgiCisKKyNpbmNsdWRlICJBc3luY1Rhc2suaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitGaWxlU3lzdGVtSGVscGVyOjpGaWxlU3lz
dGVtSGVscGVyKCkKKyAgICA6IG1fcXVldWUoYWRvcHRSZWYoKldvcmtRdWV1ZTo6Y3JlYXRlKCJG
aWxlU3lzdGVtSGVscGVyIikubGVha1JlZigpKSkKK3sKK30KKworRmlsZVN5c3RlbUhlbHBlciog
RmlsZVN5c3RlbUhlbHBlcjo6c2hhcmVkSGVscGVyKCkKK3sKKyAgICBzdGF0aWMgRmlsZVN5c3Rl
bUhlbHBlciogaGVscGVyID0gbmV3IEZpbGVTeXN0ZW1IZWxwZXI7CisgICAgcmV0dXJuIGhlbHBl
cjsKK30KKwordm9pZCBGaWxlU3lzdGVtSGVscGVyOjplbnN1cmVEaXJlY3RvcnlFeGlzdHMoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIHNoYXJlZEhlbHBlcigpLT5wb3N0VGFzayhjcmVhdGVBc3luY1Rhc2soc2hhcmVkSGVscGVy
KCksICZGaWxlU3lzdGVtSGVscGVyOjplbnN1cmVEaXJlY3RvcnlFeGlzdHNJbnRlcm5hbCwgZGly
ZWN0b3J5KSk7Cit9CisKK3ZvaWQgRmlsZVN5c3RlbUhlbHBlcjo6ZW5zdXJlRGlyZWN0b3J5RXhp
c3RzSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhkaXJlY3RvcnkpKQor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGFsbCBkaXJlY3RvcmllcyBmb3IgcGF0
aCAnJXMnIiwgZGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEZpbGVTeXN0ZW1I
ZWxwZXI6OnBvc3RUYXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2spCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rhc2tN
dXRleCk7CisKKyAgICBtX3Rhc2tzLmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOworCisgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goYmluZCgmRmlsZVN5c3RlbUhlbHBlcjo6cGVyZm9ybU5leHRUYXNrLCB0
aGlzKSk7Cit9CisKK3ZvaWQgRmlsZVN5c3RlbUhlbHBlcjo6cGVyZm9ybU5leHRUYXNrKCkKK3sK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3lu
Y1Rhc2s+IHRhc2s7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90YXNrTXV0
ZXgpOworICAgICAgICBBU1NFUlQoIW1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICAgICAgdGFzayA9
IG1fdGFza3MudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgdGFzay0+cGVyZm9ybVRhc2soKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRmlsZVN5c3RlbUhlbHBlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0
ZW1IZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ2MmY1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIu
aApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxlU3lzdGVtSGVscGVy
X2gKKyNkZWZpbmUgRmlsZVN5c3RlbUhlbHBlcl9oCisKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIK
KyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEFzeW5jVGFzazsKKworY2xhc3MgRmlsZVN5
c3RlbUhlbHBlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgZW5zdXJlRGlyZWN0b3J5RXhp
c3RzKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIEZpbGVTeXN0ZW1IZWxwZXIoKTsK
KworICAgIHN0YXRpYyBGaWxlU3lzdGVtSGVscGVyKiBzaGFyZWRIZWxwZXIoKTsKKworICAgIC8v
IFRvIGJlIGNhbGxlZCBvbmx5IGZyb20gdGhlIG1haW4gdGhyZWFkCisgICAgdm9pZCBwb3N0VGFz
ayhzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPik7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgb25s
eSBmcm9tIHRoZSBmaWxlIHN5c3RlbSBoZWxwZXIgd29yayBxdWV1ZQorICAgIHZvaWQgcGVyZm9y
bU5leHRUYXNrKCk7CisgICAgdm9pZCBlbnN1cmVEaXJlY3RvcnlFeGlzdHNJbnRlcm5hbChjb25z
dCBTdHJpbmcmKTsKKworICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisKKyAgICBEZXF1ZTxz
dGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPj4gbV90YXNrczsKKyAgICBNdXRleCBtX3Rhc2tNdXRl
eDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRmlsZVN5c3RlbUhl
bHBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VjdXJpdHlPcmlnaW5E
YXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCmlu
ZGV4IGRhYWM2ZmIuLjRkODE4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9T
ZWN1cml0eU9yaWdpbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0
eU9yaWdpbkRhdGEuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJTZWN1cml0
eU9yaWdpbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKQEAgLTY5LDYgKzcwLDMwIEBAIGJvb2wgU2VjdXJpdHlPcmlnaW5EYXRh
OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTZWN1cml0eU9yaWdp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1N0cmluZyBTZWN1cml0eU9yaWdpbkRhdGE6OmRhdGFi
YXNlRmlsZW5hbWVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShwcm90b2NvbCwgaG9z
dCwgcG9ydCk7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KTsKK30KKworYm9vbCBTZWN1cml0eU9yaWdpbkRhdGE6OmNhblNoYXJlRGF0YWJhc2VzKGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gRm9yIG5vdywgYW4g
b3JpZ2luJ3MgZGF0YWJhc2UgYWNjZXNzIGlzIHByZWRpY2F0ZWQgb24gZXF1YWxpdHkgd2l0aCB0
aGUgb3RoZXIgb3JpZ2luLgorICAgIC8vIFdlIG1pZ2h0IG5lZWQgdG8gbWFrZSB0aGlzIG1vcmUg
bnVhbmNlZCBsYXRlci4KKyAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXI7Cit9CisKK1NlY3VyaXR5
T3JpZ2luRGF0YSBTZWN1cml0eU9yaWdpbkRhdGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7Cisg
ICAgU2VjdXJpdHlPcmlnaW5EYXRhIHJlc3VsdDsKKworICAgIHJlc3VsdC5wcm90b2NvbCA9IHBy
b3RvY29sLmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5ob3N0ID0gaG9zdC5pc29sYXRlZENv
cHkoKTsKKyAgICByZXN1bHQucG9ydCA9IHBvcnQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiB2b2lkIHBlcmZvcm1BUElDYWxsYmFja1dpdGhTZWN1cml0eU9yaWdpbkRhdGFWZWN0b3IoY29u
c3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFzLCBBcnJheUNhbGxiYWNr
KiBjYWxsYmFjaykKIHsKICAgICBpZiAoIWNhbGxiYWNrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmgKaW5kZXggYzNmODdhMC4uYTBhNjI4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaApAQCAtNDYsMTIgKzQ2LDIwIEBA
IHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFy
Z3VtZW50RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpB
cmd1bWVudERlY29kZXImLCBTZWN1cml0eU9yaWdpbkRhdGEmKTsKIAorICAgIC8vIFJldHVybnMg
YSBzdHJpbmcgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdXNlIGFzIGEgdW5pcXVlIGZpbGVuYW1l
CisgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhpcyBvcmlnaW4gY2FuIHVzZSB0aGUgc2FtZSBkYXRhYmFzZXMg
YXMgdGhlIGdpdmVuIG9yaWdpbi4KKyAgICBib29sIGNhblNoYXJlRGF0YWJhc2VzKGNvbnN0IFNl
Y3VyaXR5T3JpZ2luRGF0YSYpIGNvbnN0OworCiAgICAgLy8gRklYTUUgPHJkYXI6Ly85MDE4Mzg2
PjogV2Ugc2hvdWxkIGJlIHNlbmRpbmcgbW9yZSBzdGF0ZSBhY3Jvc3MgdGhlIHdpcmUgdGhhbiBq
dXN0IHRoZSBwcm90b2NvbCwKICAgICAvLyBob3N0LCBhbmQgcG9ydC4KIAogICAgIFN0cmluZyBw
cm90b2NvbDsKICAgICBTdHJpbmcgaG9zdDsKICAgICBpbnQgcG9ydDsKKworICAgIFNlY3VyaXR5
T3JpZ2luRGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKIH07CiAKIHZvaWQgcGVyZm9ybUFQSUNh
bGxiYWNrV2l0aFNlY3VyaXR5T3JpZ2luRGF0YVZlY3Rvcihjb25zdCBWZWN0b3I8U2VjdXJpdHlP
cmlnaW5EYXRhPiYsIEFycmF5Q2FsbGJhY2sqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjUxNTc2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNyb3NzVGhyZWFkQ29waWVyLmgiCisKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBDcm9zc1RocmVhZENvcGllckJhc2U8
ZmFsc2UsIGZhbHNlLCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI+Ojpjb3B5KGNvbnN0IFVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gaWRl
bnRpZmllci5pc29sYXRlZENvcHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDcm9zc1RocmVhZENvcGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmJmZWRhNDZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViQ3Jvc3NUaHJlYWRDb3BpZXJfaAorI2RlZmluZSBXZWJDcm9zc1RocmVhZENvcGllcl9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzVGhyZWFkQ29waWVyLmg+CisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgV2ViS2l0OjpVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXI+IHsKKyAgICBzdGF0aWMgV2ViS2l0OjpVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXIgY29weShjb25zdCBXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllciYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisjZW5kaWYgLy8gV2ViQ3Jvc3NUaHJlYWRDb3BpZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCmluZGV4IGNhNmI4YTQuLjA0ZDIy
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIK
ICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVt
SGVscGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGFibGVEaWN0aW9u
YXJ5LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtNDI1LDYgKzQyNiw4IEBA
IHZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlRGF0YWJhc2VQcm9jZXNzKCkKICAgICAvLyBJbiB0aGUg
bWVhbnRpbWUsIGFuIGVudGl0eSBuYW1lIHByZWZpeGVkIHdpdGggdGhyZWUgdW5kZXJzY29yZXMg
d2lsbCBub3QgY29uZmxpY3Qgd2l0aCBhbnkgV2ViU1FMIGVudGl0aWVzLgogICAgIHBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRh
dGFiYXNlRGlyZWN0b3J5KCksICJfX19JbmRleGVkREIiKTsKIAorICAgIEZpbGVTeXN0ZW1IZWxw
ZXI6OmVuc3VyZURpcmVjdG9yeUV4aXN0cyhwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSk7CisKICAgICBtX2RhdGFiYXNlUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6RGF0YWJhc2VQ
cm9jZXNzOjpJbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGYxMDVjNjUuLjM5ZWJlNzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NjIsNiArNTYyLDggQEAKIAkJNTEzQTE2M0Qx
NjMwODhGNjAwNUQ3RDIyIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzQTE2M0IxNjMwODhGNjAw
NUQ3RDIyIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk1MTNBMTY0
QzE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzQTE2NDkxNjMw
QTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLzsgfTsK
IAkJNTEzQTE2NEQxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTNB
MTY0QTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAq
LzsgfTsKKwkJNTE0NkEzMzcxODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVTeXN0ZW1IZWxwZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0NkEzMzUx
ODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVTeXN0ZW1IZWxwZXIuY3BwICovOyB9OworCQk1MTQ2QTMz
ODE4NTkzOTI2MDA2RTY4NjcgLyogRmlsZVN5c3RlbUhlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0NkEzMzYxODU5MzkyNjAwNkU2ODY3IC8q
IEZpbGVTeXN0ZW1IZWxwZXIuaCAqLzsgfTsKIAkJNTE0QkRFRDMxNkM5OEVERDAwRTRFMjVFIC8q
IFN0YXRpc3RpY3NSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTRCREVEMjE2Qzk4RUREMDBFNEUyNUUgLyogU3RhdGlzdGljc1JlcXVlc3Qu
aCAqLzsgfTsKIAkJNTE1MzU2OUMxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVu
dUNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTUzNTY5QTEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmNw
cCAqLzsgfTsKIAkJNTE1MzU2OUQxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVu
dUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE1MzU2OUIxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5oICov
OyB9OwpAQCAtNTc1LDkgKzU3NywxMyBAQAogCQk1MTVFNzczMzE4NDAyRDUxMDAwNzIwM0YgLyog
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIuY3BwICovOyB9OwogCQk1MTVFNzczNDE4NDAyRDUxMDAwNzIw
M0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFNzczMjE4NDAyRDUxMDAwNzIwM0YgLyogVW5p
cXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggKi87IH07CiAJCTUxNjBCRkUxMTMzODFERjkwMDkx
ODk5OSAvKiBMb2dnaW5nLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1hYy5tbSAq
LzsgfTsKKwkJNTE2MzExODcxODU4NDQ2NjAwNTM0NjQ3IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYzMTE4
NjE4NTg0NDY2MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLzsgfTsKIAkJNTE2
MzE5OTIxNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYzMTk5MTE2Mjg5ODBB
MDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKIAkJNTE2MzE5OTQx
NjI4OUE2MDAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNDOTM0MTYyODA2
NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJ
CTUxNjMxOTk1MTYyODlBNjMwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQzkzNTE2Mjgw
NjQ4MDAzNDI1NTAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oICovOyB9OworCQk1MTY1NEVG
RDE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NTRF
RkIxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcCAqLzsgfTsKKwkJNTE2NTRFRkUxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTY1NEVGQzE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuaCAqLzsgfTsKKwkJNTE2NTRGMDAxODRFRjM0QTAwN0RDODM3
IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY1NEVGRjE4NEVGMzRBMDA3REM4MzcgLyogVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCAqLzsgfTsKIAkJNTE2N0VFQTAxNzAzNzdCRjAw
NzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjdFRTlFMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVN
b25pdG9yLmggKi87IH07CiAJCTUxNjdFRUExMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVN
b25pdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2N0VFOUYxNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0gKi87IH07CiAJ
CTUxNkE0QTVEMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8q
IFdlYkVycm9yLmggKi87IH07CkBAIC02MzcsNiArNjQzLDggQEAKIAkJNTFCMTVBODUxMzg0M0Ez
OTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52
aXJvbm1lbnRVdGlsaXRpZXMuaCAqLzsgfTsKIAkJNTFCMzAwNTAxMjUyOUQwRTAwMEI1Q0EwIC8q
IFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2Fy
ZExpc3RDRi5jcHAgKi87IH07CiAJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdl
UHJveHlDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3BwICovOyB9Owor
CQk1MUJBMjQ0NDE4NThFRTMwMDBFQTI4MTEgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJBMjQ0MzE4NThFRTMwMDBFQTI4MTEg
LyogQXN5bmNUYXNrLmggKi87IH07CisJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJD
cm9zc1RocmVhZENvcGllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUJBMjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3Bp
ZXIuY3BwICovOyB9OwogCQk1MUM5NjExODE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVy
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUM5NjExNjE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2Vy
dmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxQzk2MTE5MTgzRDI5
NDcwMEQyMDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzk2MTE3MTgzRDI5NDcwMEQy
MDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFDQkJB
MEYxNjUyMTlCNjAwNUJFOEZEIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0JCQTBEMTY1
MjE5QjYwMDVCRThGRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAgKi87IH07
CkBAIC0yMTI2LDYgKzIxMzQsOCBAQAogCQk1MTNBMTY0OTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTNBMTY0QTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxM0ExNjRCMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTQ2QTMzNTE4NTkzOTI2MDA2RTY4NjcgLyogRmlsZVN5c3RlbUhlbHBlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3lzdGVtSGVscGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE0NkEzMzYxODU5MzkyNjAwNkU2ODY3
IC8qIEZpbGVTeXN0ZW1IZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmlsZVN5c3RlbUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRCREVE
MjE2Qzk4RUREMDBFNEUyNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlzdGljc1JlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE1MzU2OUExMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVu
dUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdl
Q29udGV4dE1lbnVDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTUz
NTY5QjEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEzOSw3ICsyMTQ5LDExIEBACiAJCTUxNUU3
NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1RTc3MzIxODQwMkQ1
MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MEJGRTAxMzM4MURGOTAwOTE4OTk5IC8qIExvZ2dp
bmcubWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9nZ2lu
Zy5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjMxMTg2MTg1ODQ0NjYw
MDUzNDY0NyAvKiBXZWJDcm9zc1RocmVhZENvcGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDcm9zc1RocmVhZENvcGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTYzMTk5MTE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9j
ZXNzUHJveHlNYWMubW07IHBhdGggPSBtYWMvTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NTRFRkIxODRFRjMzRjAwN0RDODM3IC8qIFVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NTRFRkMxODRFRjMzRjAwN0RDODM3
IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjU0RUZGMTg0RUYzNEEwMDdEQzgzNyAv
KiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTY3RUU5RTE3MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9u
aXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNrQ2FjaGVNb25pdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjdFRTlGMTcwMzc3QkYwMDc2ODFD
QSAvKiBEaXNrQ2FjaGVNb25pdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRGlza0NhY2hlTW9uaXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjA1LDYgKzIyMTksOCBAQAogCQk1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52
aXJvbm1lbnRVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW52
aXJvbm1lbnRVdGlsaXRpZXMuaDsgcGF0aCA9IHVuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8q
IFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDsgcGF0aCA9IGNmL1dlYkJhY2tGb3J3YXJk
TGlzdENGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEYxMjUyOUQw
RTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdlYlBhZ2VQcm94eUNGLmNwcDsgcGF0aCA9IGNmL1dlYlBhZ2VQcm94eUNG
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFCQTI0NDMxODU4RUUzMDAwRUEy
ODExIC8qIEFzeW5jVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3lu
Y1Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFCQTI0NDUxODU4RjQxNTAw
RUEyODExIC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YkNyb3NzVGhyZWFkQ29waWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFD
OTYxMTUxODNDOTVGRjAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFDOTYxMTYxODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZl
ckNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzk2MTE3MTgzRDI5NDcwMEQyMDAyRSAvKiBX
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNDM2LDYgKzM0NTIsNyBAQAogCQkJCUE3RDc5MkQ0MTc2N0NCMDkw
MDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5oICovLAogCQkJCTUxNUU3NzI1MTgzREQ2RjYw
MDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuY3BwICovLAogCQkJCTUxNUU3NzI2MTgzREQ2RjYwMDA3
MjAzRiAvKiBBc3luY1JlcXVlc3QuaCAqLywKKwkJCQk1MUJBMjQ0MzE4NThFRTMwMDBFQTI4MTEg
LyogQXN5bmNUYXNrLmggKi8sCiAJCQkJNEY2MDE0MzAxNTVDNUEzMjAwMUZCREUwIC8qIEJsb2Nr
aW5nUmVzcG9uc2VNYXAuaCAqLywKIAkJCQlCQ0YxODYzNzE2N0QwNzFFMDBBMUE4NUEgLyogQ2Fj
aGVNb2RlbC5jcHAgKi8sCiAJCQkJQkMzMDY1RjkxMjU5MzQ0RTAwRTcxMjc4IC8qIENhY2hlTW9k
ZWwuaCAqLywKQEAgLTM0NTMsNiArMzQ3MCw4IEBACiAJCQkJMEZCNjU5MjIxMjA4QjREQjAwNDQ4
MTZDIC8qIERyYXdpbmdBcmVhSW5mby5oICovLAogCQkJCThDRkVDRTkzMTQ5MEYxNDAwMDJBQUEz
MiAvKiBFZGl0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJMUFBNDFBQjQxMkMwMkVDNDAwMkJFNjdCIC8q
IEVkaXRvclN0YXRlLmggKi8sCisJCQkJNTE0NkEzMzUxODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVT
eXN0ZW1IZWxwZXIuY3BwICovLAorCQkJCTUxNDZBMzM2MTg1OTM5MjYwMDZFNjg2NyAvKiBGaWxl
U3lzdGVtSGVscGVyLmggKi8sCiAJCQkJNzUyQTgwNzYxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRl
ckl0ZXJhdG9yLmggKi8sCiAJCQkJQkNFODFEOEExMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZv
LmNwcCAqLywKIAkJCQlCQ0U4MUQ4QjEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uaCAqLywK
QEAgLTM1MTUsNiArMzUzNCw4IEBACiAJCQkJNTEwRkJCOTkxMjg4Qzk1RTAwQUZGREY0IC8qIFdl
YkNvbnRleHRNZW51SXRlbURhdGEuaCAqLywKIAkJCQk5MzlBRTc2NTEzMTZFOTlDMDBBRTA2QTYg
LyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLywKIAkJCQlCQzFERDdCMTExNERDMzk2MDA1
QURBRjMgLyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggKi8sCisJCQkJNTFCQTI0NDUxODU4RjQx
NTAwRUEyODExIC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCAqLywKKwkJCQk1MTYzMTE4NjE4
NTg0NDY2MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLywKIAkJCQk1MTU3OEI4
MjEyMDlFQ0VGMDBBMzdDNEEgLyogV2ViRGF0YS5oICovLAogCQkJCUJDNTc1NjEyMTI2RTAxMzgw
MDZGMEYxMiAvKiBXZWJFcnJvci5jcHAgKi8sCiAJCQkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdG
IC8qIFdlYkVycm9yLmggKi8sCkBAIC00MDM3LDYgKzQwNTgsMTUgQEAKIAkJCW5hbWUgPSBtYWM7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1MTY1NEVGMDE4NEVGMjQxMDA3
REM4MzcgLyogc3FsaXRlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk1MTY1NEVGQjE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGUuY3BwICovLAorCQkJCTUxNjU0RUZDMTg0RUYzM0YwMDdEQzgzNyAvKiBV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBzcWxpdGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1MTdERDVCQjE4
MERBN0M0MDA4MTY2MEIgLyogRGF0YWJhc2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTQxNjEsMTEgKzQxOTEsMTMgQEAKIAkJNTFFMzUxRjkxODBGNUNG
NjAwRTUzQkU5IC8qIEluZGV4ZWREQiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNTE2NTRFRjAxODRFRjI0MTAwN0RDODM3IC8qIHNxbGl0ZSAqLywKIAkJ
CQk1MUQwRDQyRTE4M0IzNDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bi5jcHAgKi8sCiAJCQkJNTFEMEQ0MkYxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb24uaCAqLywKIAkJCQk1MUQwRDQzMDE4M0IzNDEzMDA5NzA0MUQgLyogRGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLywKIAkJCQk1MTVFNzcyRDE4
NDAxNTgwMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuY3BwICovLAogCQkJCTUxNUU3NzJF
MTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZS5oICovLAorCQkJCTUxNjU0RUZG
MTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oICovLAog
CQkJCTUxNUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXIuY3BwICovLAogCQkJCTUxNUU3NzMyMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXIuaCAqLywKIAkJCSk7CkBAIC01NjE5LDYgKzU2NTEsNyBAQAogCQkJCUJD
MDMyREE5MTBGNDM3RDEwMDU4QzE1QSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRUU5NjZEMTEyRkFGNTcwMDZCQ0MyNCAvKiBBdHRhY2htZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMUEzMTczMjEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTFCQTI0NDQxODU4RUUzMDAwRUEyODExIC8qIEFzeW5jVGFzay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTEyRjU4OTcxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDQ1QjlGMTg0RDVGQjUw
MDRCMzQxNCAvKiBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEyRjU4OTkxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uRGVjaXNpb25M
aXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC01Njg4LDYgKzU3MjEsNyBAQAogCQkJCUJDNjQ2
OTcwMTFEQkU2MDMwMDY0NTVCMCAvKiBBUElBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNC
Q0IwQ0IxMjE1RTMyMTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMjA0RUUzMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTE0NkEzMzgxODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVTeXN0ZW1I
ZWxwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUVFQkEyMTI3NzYxRDAwMDMzMjJCOCAvKiBJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RUVC
QTQxMjc3NjFENjAwMzMyMkI4IC8qIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRTdEQzUxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVjdGVk
QnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTU3MDYsNiArNTc0MCw3IEBACiAJCQkJ
QkM4MTQ3QTkxMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGljeUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QjAxMUUzQzA4NzAwODEyRkI3IC8qIEluamVj
dGVkQnVuZGxlUGFnZVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTlFMzI4OTE4MjE2
MzY5MDBGNUQwNEMgLyogV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTE2NTRFRkUxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMzRTBEMTEyNDA4RTg2MDAzNjBGM0Yg
LyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNERG
NzcxMjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDQjBCMERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVz
ZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTU3NTcsNiArNTc5Miw3IEBACiAJ
CQkJMUFCNDc0RTAxODRENDQ2QTAwNTFCNjIyIC8qIFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDg0OEIxMjdGNkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRp
ZmllckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTQ5NzY4MTFGRjY1OEUwMDQ4QjQ2NCAv
KiBOUEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTYzMTE4NzE4NTg0NDY2MDA1MzQ2
NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEUy
MTg0RDQ0ODAwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTJEODJBNTEyN0Y0RUFCMDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4NDNBMTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9i
amVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTU5MTYsNiAr
NTk1Miw3IEBACiAJCQkJQkNBQzExMUYxMkM5MkMxRjAwQjA4RUVFIC8qIFdlYkRhdGFiYXNlTWFu
YWdlclByb3h5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjJBNzZCOTEyQjFCMjVGMDAw
NUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFCN0Q3MkMxMjg4Q0FBRDAwQ0ZEMDhDIC8qIFdlYkRvd25sb2FkQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MTY1NEYwMDE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyRDdCMTBGNDM3OEQw
MDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EwRUY5RjEy
MzMyNjQyMDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMwMzJEN0QxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkVkaXRvckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC03MTkzLDYgKzcyMzAsNyBAQAogCQkJCTFBNDRCOTU3MTZCNzM3QUEwMEI3QkJE
OCAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZGNDkw
MDE4MzNERTc4MDA5QUIxNUEgLyogV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxN0RENUJFMTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nlc3NQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY1NEVGRDE4NEVGMzNGMDA3REM4MzcgLyogVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Mjk2QkQ4NUUxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTFaWjQxN0VGMTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMzUxRkYxODBGNUQwRjAwRTUzQkU5IC8qIERh
dGFiYXNlUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMTYsNiArNzM1NCw3IEBACiAJ
CQkJMzNEM0EzQzExMzM5NjBCMDAwNzA5QkU0IC8qIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMzRDNBM0M4MTMzOTYxNzkwMDcwOUJFNCAvKiBXZWJNZWRpYUNh
Y2hlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzM0QzQTNC
QTEzMzk2MDYyMDA3MDlCRTQgLyogV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MTQ2QTMzNzE4NTkzOTI2MDA2RTY4NjcgLyogRmlsZVN5c3RlbUhlbHBl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzM0QzQTNDQTEzMzk2MTc5MDA3MDlCRTQgLyogV2Vi
TWVkaWFDYWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MDk4NTRFQzEyQkM0RTE3MDAwQUQwODAgLyogV2ViTWVtb3J5U2FtcGxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MDk4NTRFRTEyQkM0RTE4MDAwQUQwODAgLyogV2ViTWVtb3J5U2Ft
cGxlci5tYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTc1MDEsNiArNzU0MCw3IEBACiAJCQkJMUFD
NzUzN0IxODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM0MDc2MDcxMjRGRjAyNzAwNjhGMjBBIC8qIFdLVHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0Q1RUJCRTE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSBp
biBTb3VyY2VzICovLAorCQkJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1Ro
cmVhZENvcGllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzYwOTEyNEZGMDI3MDA2OEYy
MEEgLyogV0tVUkwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MUIxMjRGRjAzNzAwNjhG
MjBBIC8qIFdLVVJMQ0YubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzYwQjEyNEZGMDI3MDA2
OEYyMEEgLyogV0tVUkxSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219094</attachid>
            <date>2013-12-12 10:33:09 -0800</date>
            <delta_ts>2013-12-12 11:09:10 -0800</delta_ts>
            <desc>Patch v5 - Landing candidate</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>91349</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzY3ODM5MS4uZTk3NDcxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMi0xMiAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzIEluZGV4ZWREQjogRXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBFeHBvcnQgdG9VSW50NjRTdHJpY3QoKS4KKwogMjAxMy0xMi0xMCAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIEhh
c2hNYXAgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhbiBpbml0aWFsaXplciBsaXN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaAppbmRleCAzYzQyNGI0Li5iM2Q4NDA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKQEAgLTM2OCw3ICszNjgsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIGludCB0b0ludFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0Owog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB1bnNpZ25lZCB0b1VJbnRTdHJpY3QoYm9vbCogb2sg
PSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50
NjRfdCB0b0ludDY0U3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7Ci0g
ICAgdWludDY0X3QgdG9VSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBj
b25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdWludDY0X3QgdG9VSW50NjRTdHJpY3Qo
Ym9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBpbnRwdHJfdCB0b0ludFB0
clN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogCiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBjYTdjNDgzLi4yMGQzM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
Nzk5LDYgKzc5OSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3Bw
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZhMzllOS4uMWJmZTc2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEzLTEyLTEyICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBEYXRhYmFzZVByb2Nlc3MgSW5kZXhlZERCOiBF
c3RhYmxpc2ggYSBtZXRhZGF0YSBiYWNraW5nIHN0b3JlIG9uIGRpc2sKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTI1OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlYWNoIENyb3NzVGhyZWFkQ29waWVy
IGhvdyB0byBoYW5kbGUgSURCRGF0YWJhc2VNZXRhZGF0YS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVkQ29w
eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhOjppc29sYXRlZENvcHkpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNvcHkpOiBBZGQgYW4gSURCRGF0YWJhc2VNZXRhZGF0
YSBzcGVjaWFsaXphdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5o
OgorCiAyMDEzLTEyLTExICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBbQ1NTIFNoYXBlc10gSGlnaGxpZ2h0IG1hcmdpbi1zaGFwZSBm
b3Igc2hhcGUtb3V0c2lkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDk5Zjdh
Yi4uNDFkM2E3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xODI3LDYgKzE4
MjcsNyBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmggXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0
YWRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VN
ZXRhZGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxNzg4NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlTWV0YWRhdGEuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURCRGF0YWJh
c2VNZXRhZGF0YSBJREJEYXRhYmFzZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAorewor
ICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgcmVzdWx0OworICAgIHJlc3VsdC5pZCA9IGlkOworICAg
IHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICByZXN1bHQubWF4T2JqZWN0U3RvcmVJZCA9
IG1heE9iamVjdFN0b3JlSWQ7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5
KCk7CisKKyAgICBPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG9iamVjdFN0b3Jl
cy5iZWdpbigpOworICAgIE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmpl
Y3RTdG9yZXMuZW5kKCk7CisgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCisgICAgICAgIHJlc3Vs
dC5vYmplY3RTdG9yZXMuc2V0KGktPmtleSwgaS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAoreworICAgIElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEgcmVzdWx0OworICAgIHJlc3VsdC5pZCA9IGlkOworICAgIHJlc3VsdC5hdXRvSW5j
cmVtZW50ID0gYXV0b0luY3JlbWVudDsKKyAgICByZXN1bHQubWF4SW5kZXhJZCA9IG1heEluZGV4
SWQ7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0
LmtleVBhdGggPSBrZXlQYXRoLmlzb2xhdGVkQ29weSgpOworCisgICAgSW5kZXhNYXA6OmNvbnN0
X2l0ZXJhdG9yIGkgPSBpbmRleGVzLmJlZ2luKCk7CisgICAgSW5kZXhNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGluZGV4ZXMuZW5kKCk7CisgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCisgICAg
ICAgIHJlc3VsdC5pbmRleGVzLnNldChpLT5rZXksIGktPnZhbHVlLmlzb2xhdGVkQ29weSgpKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0lEQkluZGV4TWV0YWRhdGEgSURCSW5kZXhNZXRh
ZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJJbmRleE1ldGFkYXRhIHJlc3Vs
dDsKKyAgICByZXN1bHQuaWQgPSBpZDsKKyAgICByZXN1bHQudW5pcXVlID0gdW5pcXVlOworICAg
IHJlc3VsdC5tdWx0aUVudHJ5ID0gbXVsdGlFbnRyeTsKKworICAgIHJlc3VsdC5uYW1lID0gbmFt
ZS5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQua2V5UGF0aCA9IGtleVBhdGguaXNvbGF0ZWRD
b3B5KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaAppbmRleCBj
ZGE1NjRkLi5kZGE1M2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oCkBAIC01Myw2ICs1Myw4IEBAIHN0cnVjdCBJ
REJJbmRleE1ldGFkYXRhIHsKICAgICBib29sIHVuaXF1ZTsKICAgICBib29sIG11bHRpRW50cnk7
CiAKKyAgICBJREJJbmRleE1ldGFkYXRhIGlzb2xhdGVkQ29weSgpIGNvbnN0OworCiAgICAgc3Rh
dGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7CiB9OwogCkBAIC03Nyw2ICs3OSw3IEBA
IHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50
NjRfdCwgSURCSW5kZXhNZXRhZGF0YT4gSW5kZXhNYXA7CiAgICAgSW5kZXhNYXAgaW5kZXhlczsK
IAorICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiB9Owog
CiBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7CkBAIC0xMjAsNiArMTIzLDggQEAgc3RydWN0
IElEQkRhdGFiYXNlTWV0YWRhdGEgewogICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKIAog
ICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKworICAgIElEQkRhdGFiYXNlTWV0YWRh
dGEgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDdkOGM4ZDIuLjE5YzVhNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBA
IC0yNDgsNiArMjQ4LDE4IEBAIGJvb2wgSURCS2V5UGF0aDo6b3BlcmF0b3I9PShjb25zdCBJREJL
ZXlQYXRoJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0lEQktleVBhdGgg
SURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJLZXlQYXRoIHJlc3Vs
dDsKKyAgICByZXN1bHQubV90eXBlID0gbV90eXBlOworICAgIHJlc3VsdC5tX3N0cmluZyA9IG1f
c3RyaW5nLmlzb2xhdGVkQ29weSgpOworCisgICAgcmVzdWx0Lm1fYXJyYXkucmVzZXJ2ZUNhcGFj
aXR5KG1fYXJyYXkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJyYXku
c2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5tX2FycmF5LmFwcGVuZChtX2FycmF5W2ldLmlz
b2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oCmluZGV4IDNkMDAxODIuLjEzNWY2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJREJLZXlQYXRo
JiBvdGhlcikgY29uc3Q7CiAKKyAgICBJREJLZXlQYXRoIGlzb2xhdGVkQ29weSgpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmluZyBtX3N0cmluZzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KaW5kZXggMzEzZGE3YS4uY2Q1NjJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
QEAgLTM2NCw5ICszNjQsMTEgQEAgX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2Vs
bGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjMyZGlkQ2FuY2VsQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VFUktOU18yM0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRQogX19aTjdX
ZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjZjYW5jZWxFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRh
YmFzZTExdGFibGVFeGlzdHNFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNFNRTGl0ZURh
dGFiYXNlMTJsYXN0RXJyb3JNc2dFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTE0ZXhl
Y3V0ZUNvbW1hbmRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNl
NG9wZW5FUktOM1dURjZTdHJpbmdFYgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTVjbG9z
ZUV2CitfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNlOWxhc3RFcnJvckV2CiBfX1pON1dlYkNv
cmUxNFNRTGl0ZURhdGFiYXNlQzFFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZUQxRXYK
IF9fWk43V2ViQ29yZTE0U2NoZW1lUmVnaXN0cnkyNHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbEVS
S04zV1RGNlN0cmluZ0UKQEAgLTU3MSwxMiArNTczLDE0IEBAIF9fWk43V2ViQ29yZTE1UHJvdGVj
dGlvblNwYWNlQzFFdgogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QyMWh0dHBQaXBlbGlu
aW5nRW5hYmxlZEV2CiBfX1pON1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDI0c2V0SFRUUFBpcGVs
aW5pbmdFbmFibGVkRWIKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTJnZXRDb2x1bW5J
bnRFaQorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxMmlzQ29sdW1uTnVsbEVpCiBfX1pO
N1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDEzZ2V0Q29sdW1uVGV4dEVpCiBfX1pON1dlYkNvcmUx
NVNRTGl0ZVN0YXRlbWVudDE0ZXhlY3V0ZUNvbW1hbmRFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVT
dGF0ZW1lbnQyMWdldENvbHVtbkJsb2JBc1N0cmluZ0VpCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0
YXRlbWVudDIyaXNDb2x1bW5EZWNsYXJlZEFzQmxvYkVpCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0
YXRlbWVudDRzdGVwRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50NXJlc2V0RXYKK19f
Wk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50N2JpbmRJbnRFaWkKIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50N3ByZXBhcmVFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ4Ymlu
ZEJsb2JFaVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ4Ymlu
ZFRleHRFaVJLTjNXVEY2U3RyaW5nRQpAQCAtNjkxLDYgKzY5NSw3IEBAIF9fWk43V2ViQ29yZTE3
U1FMaXRlVHJhbnNhY3Rpb25EMUV2CiBfX1pON1dlYkNvcmUxN1N1YnJlc291cmNlTG9hZGVyNmNy
ZWF0ZUVQTlNfNUZyYW1lRVBOU18xNENhY2hlZFJlc291cmNlRVJLTlNfMTVSZXNvdXJjZVJlcXVl
c3RFUktOU18yMVJlc291cmNlTG9hZGVyT3B0aW9uc0UKIF9fWk43V2ViQ29yZTE3Y2FjaGVET01T
dHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE4zSlNDOVN0cnVjdHVyZUVQS05TMl85
Q2xhc3NJbmZvRQogX19aTjdXZWJDb3JlMTdkcmF3TGF5ZXJDb250ZW50c0VQOUNHQ29udGV4dFBO
U18xNVBsYXRmb3JtQ0FMYXllckVSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG01RU5TNF8x
NUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMTdlbmNvZGVGb3JGaWxlTmFtZUVSS04z
V1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJD
b3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdz
ZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVT
NV9SS04zV1RGNlN0cmluZ0UKQEAgLTc4NSw2ICs3OTAsOCBAQCBfX1pON1dlYkNvcmUyMHByZXZp
b3VzTGluZVBvc2l0aW9uRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FaU5TXzEyRWRpdGFibGVUeXBl
RQogX19aTjdXZWJDb3JlMjBwcm90b2NvbElzSmF2YVNjcmlwdEVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTIwdG9VSW50MzJFbmZvcmNlUmFuZ2VFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pT
VmFsdWVFCiBfX1pON1dlYkNvcmUyMUJhY2tGb3J3YXJkQ29udHJvbGxlcjExaXRlbUF0SW5kZXhF
aQorX19aTjdXZWJDb3JlMjFDcm9zc1RocmVhZENvcGllckJhc2VJTGIwRUxiMEVOM1dURjZTdHJp
bmdFRTRjb3B5RVJLUzJfCitfX1pON1dlYkNvcmUyMUNyb3NzVGhyZWFkQ29waWVyQmFzZUlMYjBF
TGIwRU5TXzE5SURCRGF0YWJhc2VNZXRhZGF0YUVFNGNvcHlFUktTMV8KIF9fWk43V2ViQ29yZTIx
TWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3RhbGxFdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3Rv
cmFnZVNlc3Npb24yMWRlZmF1bHRTdG9yYWdlU2Vzc2lvbkV2CiBfX1pON1dlYkNvcmUyMU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjI1c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbkV2CkBAIC0xNTkwLDYg
KzE1OTcsNyBAQCBfX1pOSzdXZWJDb3JlMThSZW5kZXJMYXllckJhY2tpbmcyMGNvbXBvc2l0aW5n
TGF5ZXJUeXBlRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIxMWlzU3VzcGVu
ZGVkRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0aXZl
QW5pbWF0aW9uc0VQTlNfOERvY3VtZW50RQogX19aTks3V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJv
bGxlcjMzYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkRXYKK19fWk5LN1dlYkNvcmUx
OUlEQkRhdGFiYXNlTWV0YWRhdGExMmlzb2xhdGVkQ29weUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMTJnZXRIaWdobGlnaHRFUE5TXzlIaWdobGlnaHRFCiBfX1pOSzdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjlidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZUV2
CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTBodHRwTWV0aG9kRXYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3
ZGNjOTBjLi40ZTlmMDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCQkyRTQzNDY1NDBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQyMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJU
aHJlYWQuY3BwICovOyB9OwogCQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQz
NDY0MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU0MzQ2NTgwRjU0NkE5OTAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NjU2MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENv
cGllci5jcHAgKi87IH07Ci0JCTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVh
ZENvcGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ2NTcwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IH07CisJ
CTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NTcwRjU0NkE5OTAw
QjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU3NTgyRUUxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmls
ZVJlYWRlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRTc1ODJFRDEyNzY0RjI2MDA2MjYyOEIgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cCAqLzsgfTsKIAkJMkU3NTg0MUQxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0
MUExMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwICovOyB9OwogCQkyRTc1
ODQxRTEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhC
IC8qIEZpbGVSZWFkZXJMb2FkZXIuaCAqLzsgfTsKQEAgLTE3NTEsNiArMTc1MSw3IEBACiAJCTUx
NjBGNDk4MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBGNDk3MEIwQUE3NUYwMEMxRDJB
RiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLzsgfTsKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZF
IC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5j
cHAgKi87IH07CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjMx
MUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE2MzExN0QxODUxMjQyQjAwNTM0NjQ3IC8q
IElEQkRhdGFiYXNlTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE2MzExN0MxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRhdGFiYXNlTWV0
YWRhdGEuY3BwICovOyB9OwogCQk1MTY0RUQ0MzE4MzIwOEM3MDBFQThGRjEgLyogSURCU2VydmVy
Q29ubmVjdGlvbkxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NEVENDExODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCLmNwcCAqLzsgfTsKIAkJNTE2NEVENDQxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNl
cnZlckNvbm5lY3Rpb25MZXZlbERCLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTY0RUQ0MjE4MzIwOEM3MDBFQThGRjEgLyogSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREIuaCAqLzsgfTsKIAkJNTE2NjBBQjYxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkJh
Y2tpbmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NjBBQjAxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZUxl
dmVsREIuY3BwICovOyB9OwpAQCAtODUwMSw2ICs4NTAyLDcgQEAKIAkJNTE2MEY0OTcwQjBBQTc1
RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gSGlzdG9yeUl0ZW1NYWMubW07IHBhdGggPSBtYWMvSGlzdG9yeUl0ZW1N
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjJDN0YyMTFGNzdFRkEwMDYx
MkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRh
ZGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFz
ZU1ldGFkYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDExODMy
MDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDIxODMyMDhDNzAwRUE4RkYx
IC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNjYwQUIwMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVM
ZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkJhY2tp
bmdTdG9yZUxldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxNDIs
NiArMTcxNDQsNyBAQAogCQkJCTUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFz
ZUVycm9yLmggKi8sCiAJCQkJNTFENzE5ODQxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
RXhjZXB0aW9uLmNwcCAqLywKIAkJCQk1MUQ3MTk4NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0
YWJhc2VFeGNlcHRpb24uaCAqLywKKwkJCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURC
RGF0YWJhc2VNZXRhZGF0YS5jcHAgKi8sCiAJCQkJNTFDOTYxMUExODNEMkI4MDAwRDIwMDJFIC8q
IElEQkRhdGFiYXNlTWV0YWRhdGEuaCAqLywKIAkJCQk1MUQ3MTk4NjE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk1MUQ3MTk4NzE4MTEwNkRGMDAxNkRD
NTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8sCkBAIC0yODIyOCw2ICsyODIzMSw3IEBACiAJ
CQkJQjJDM0RBM0QwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkFGRkM5OTBEMDBBNURGMDAzMDA3NEQgLyogVGV4dENvZGVjTWFjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTNGMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTYzMTE3RDE4NTEyNDJCMDA1
MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMz
REE0MTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFGRjhGNkMxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0
Q29kZWNVVEY4LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmluZGV4IDVlOGJhNzkuLjY1ZGY0N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTQwLDYgKzQwLDEw
IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2luY2x1ZGUgIklEQkRh
dGFiYXNlTWV0YWRhdGEuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFVSTD46OlR5cGUgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBmYWxzZSwgVVJMPjo6Y29weShjb25zdCBVUkwmIHVybCkKQEAgLTY3LDYg
KzcxLDE1IEBAIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlUmVz
cG9uc2U+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzCiAgICAgcmV0dXJuIHJlc3BvbnNlLmNv
cHlEYXRhKCk7CiB9CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworQ3Jvc3NUaHJl
YWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YT46OlR5cGUgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YT46OmNv
cHkoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCit7CisgICAgcmV0dXJuIG1l
dGFkYXRhLmlzb2xhdGVkQ29weSgpOworfQorCisjZW5kaWYKKwogLy8gVGVzdCBDcm9zc1RocmVh
ZENvcGllciB1c2luZyBDT01QSUxFX0FTU0VSVC4KIAogLy8gVmVyaWZ5IHRoYXQgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQgb2JqZWN0cyBnZXQgaGFuZGxlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAppbmRleCBjNzdjOTFiLi5mNGM5M2Q1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTE0NSw2
ICsxNDUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgVHlwZSBjb3B5
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB9OwogCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisgICAgc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7CisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VN
ZXRhZGF0YT4geworICAgICAgICB0eXBlZGVmIElEQkRhdGFiYXNlTWV0YWRhdGEgVHlwZTsKKyAg
ICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CisgICAg
fTsKKyNlbmRpZgorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdHJ1Y3QgQ3Jvc3NU
aHJlYWRDb3BpZXIgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPENyb3NzVGhyZWFkQ29w
aWVyQmFzZUhlbHBlcjo6SXNDb252ZXJ0aWJsZVRvSW50ZWdlcjxUPjo6dmFsdWUsIENyb3NzVGhy
ZWFkQ29waWVyQmFzZUhlbHBlcjo6SXNUaHJlYWRTYWZlUmVmQ291bnRlZFBvaW50ZXI8VD46OnZh
bHVlLCBUPiB7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5OGRhNWMyLi4yMzMzY2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsOTcgQEAKKzIwMTMtMTItMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCisgICAgICAgIERhdGFiYXNlUHJvY2VzcyBJbmRleGVkREI6IEVzdGFibGlz
aCBhIG1ldGFkYXRhIGJhY2tpbmcgc3RvcmUgb24gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIERhdGFiYXNlUHJvY2VzcyBhbHJlYWR5IGhh
cyBhbiAiSW5kZXhlZCBEYXRhYmFzZSBwYXRoIi4KKyAgICAgICAgRWFjaCBTZWN1cml0eU9yaWdp
biB3aXRoIGluZGV4ZWQgZGF0YWJhc2VzIHdpbGwgaGF2ZSBhIHN1YmRpcmVjdG9yeSB1bmRlciB0
aGUgcGF0aC4KKyAgICAgICAgRWFjaCBpbmRleGVkIGRhdGFiYXNlIHdpbGwgaGF2ZSBhIHN1YmRp
cmVjdG9yeSB1bmRlciBpdHMgU2VjdXJpdHlPcmlnaW4ncyBwYXRoLgorICAgICAgICBJbnNpZGUg
dGhhdCBkaXJlY3Rvcnkgd2lsbCBleGlzdCAoMSkgbWV0YWRhdGEgZGF0YWJhc2UsIGFuZCAwLU4g
T2JqZWN0U3RvcmUgZGF0YWJhc2VzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXN0YWJsaXNoZXMg
dGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIHRoZSAoMSkgbWV0YWRhdGEgZGF0YWJhc2UuCisK
KyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjppbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKTogQXN5
bmNocm9ub3VzbHkgZW5zdXJlIHRoZSBpbmRleGVkIGRhdGFiYXNlIGRpcmVjdG9yeSBleGlzdHMu
CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6ZW5zdXJlSW5kZXhlZERhdGFiYXNl
UmVsYXRpdmVQYXRoRXhpc3RzKTogQWxsb3cgYW55b25lIHRvIG1ha2UgbmVjZXNzYXJ5IGRpcmVj
dG9yaWVzIHJlbGF0aXZlIHRvCisgICAgICAgICAgdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0
b3J5LgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMp
OgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmFic29sdXRlSW5kZXhlZERhdGFi
YXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aCk6IEluc3RlYWQgb2YgZXhwb3NpbmcgdGhl
IGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5LCAKKyAgICAgICAgICBnaXZlIERhdGFiYXNlUHJv
Y2VzcyBhIG1ldGhvZCB0byBhbGxvdyBvdGhlcnMgdG8gY29tcHV0ZSBhIHBhdGggcmVsYXRpdmUg
dG8gdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5LgorICAgICAgICAoV2ViS2l0OjpEYXRh
YmFzZVByb2Nlc3M6OnBvc3REYXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFz
ZVByb2Nlc3M6OnBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKiBEYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vz
czo6cXVldWUpOgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKToKKwor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZmlsZW5hbWVGb3JEYXRhYmFz
ZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd24pOiBN
ZXRob2QgdG8gY2xlYW5seSBzaHV0ZG93biBhIGRhdGFiYXNlLCBlbXB0eWluZyBpdHMgdGFzayBh
bmQgcmVxdWVzdCBxdWV1ZXMuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpn
ZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpVbmlx
dWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSk6IFRvIGJlIHJ1
biBvbiB0aGUgZGF0YWJhc2Ugd29yayBxdWV1ZSwgZXN0YWJsaXNoZXMgYSBiYWNraW5nIHN0b3Jl
CisgICAgICAgICAgYW5kIGV4dHJhY3RzIG1ldGFkYXRhIGZyb20gaXQuCisgICAgICAgIChXZWJL
aXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRh
KTogQ2FsbGJhY2sgb25jZSBtZXRhZGF0YSBmcm9tIHRoZSBiYWNraW5nIHN0b3JlIGlzIHJlYWR5
IGZvciB1c2UuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0ZURh
dGFiYXNlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnBv
c3RNYWluVGhyZWFkVGFzayk6IEFkZCBhIG1haW4gdGhyZWFkIHRhc2sgZm9yIHRoaXMgZGF0YWJh
c2UuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtTmV4dE1haW5U
aHJlYWRUYXNrKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRh
YmFzZVRhc2spOiBBZGQgYSBkYXRhYmFzZSBxdWV1ZSB0YXNrIGZvciB0aGlzIGRhdGFiYXNlLgor
ICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHREYXRhYmFzZVRh
c2spOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJh
c2UuaDoKKworICAgICAgICBBZGQgYSB2aXJ0dWFsIGJhY2tpbmcgc3RvcmUgaW50ZXJmYWNlOgor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmU6On5VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZSk6CisKKyAgICAgICAgQWRkIGEgU1FM
aXRlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgaW50ZXJmYWNlOgorICAgICAgICAqIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGVB
bmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpleHRyYWN0RXhpc3RpbmdNZXRhZGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpvcGVuU1FM
aXRlRGF0YWJhc2VBdFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hNZXRhZGF0YSk6CisgICAgICAgICogRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuaDoKKworICAgICAgICBBZGQgYSBnZW5lcmFsIHB1cnBvc2UgYXN5bmNocm9ub3Vz
IHRhc2sgdGhhdCBkb2VzIGNyb3NzIHRocmVhZCBjb3B5aW5nOgorICAgICAgICAqIFNoYXJlZC9B
c3luY1Rhc2suaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFzeW5jVGFzazo6fkFzeW5jVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jVGFzazo6QXN5bmNUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6Y3JlYXRlQXN5bmNUYXNrKToKKworICAgICAgICBBZGQgbW9yZSBpc29sYXRlZCBjb3Bp
ZXJzIGFuZCBpbnRyb2R1Y2UgV2ViS2l0IENyb3NzVGhyZWFkQ29waWVyIHNwZWNpYWxpemF0aW9u
czoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
Zmllcjo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oOgorCisgICAgICAgICogU2hhcmVkL1NlY3Vy
aXR5T3JpZ2luRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0YTo6
ZGF0YWJhc2VGaWxlbmFtZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpTZWN1cml0eU9y
aWdpbkRhdGE6OmNhblNoYXJlRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYktpdDo6U2VjdXJpdHlP
cmlnaW5EYXRhOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIFNoYXJlZC9TZWN1cml0eU9yaWdp
bkRhdGEuaDoKKworICAgICAgICAqIFNoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjo6OmNvcHkpOgorICAgICAgICAqIFNoYXJlZC9XZWJDcm9zc1RocmVh
ZENvcGllci5oOgorCisgICAgICAgIEFkZCBhIGhlbHBlciBjbGFzcyB0byBhbGxvdyB0aGUgVUlQ
cm9jZXNzIHRvIGVhc2lseSBwZXJmb3JtIGJhc2ljIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBvbiBh
IGJhY2tncm91bmQgcXVldWU6CisgICAgICAgICogU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpGaWxlU3lzdGVtSGVscGVyOjpGaWxlU3lzdGVtSGVscGVyKToK
KyAgICAgICAgKFdlYktpdDo6RmlsZVN5c3RlbUhlbHBlcjo6c2hhcmVkSGVscGVyKToKKyAgICAg
ICAgKFdlYktpdDo6RmlsZVN5c3RlbUhlbHBlcjo6ZW5zdXJlRGlyZWN0b3J5RXhpc3RzKToKKyAg
ICAgICAgKFdlYktpdDo6RmlsZVN5c3RlbUhlbHBlcjo6ZW5zdXJlRGlyZWN0b3J5RXhpc3RzSW50
ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpGaWxlU3lzdGVtSGVscGVyOjpwb3N0VGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6OkZpbGVTeXN0ZW1IZWxwZXI6OnBlcmZvcm1OZXh0VGFzayk6CisgICAg
ICAgICogU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6ZW5zdXJlRGF0YWJh
c2VQcm9jZXNzKTogTWFrZSBzdXJlIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9y
ZSB0ZWxsaW5nIHRoZQorICAgICAgICAgIERhdGFiYXNlUHJvY2VzcyB3aGF0IGl0IGlzLgorCisg
ICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEzLTEyLTEx
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHBsYXRmb3JtIHNwZWNpZmljIGd1bmsgZnJvbSBXZWJVUkxSZXF1ZXN0IGFuZCBXZWJVUkxSZXNw
b25zZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNl
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9j
ZXNzLmNwcAppbmRleCBiMWJkYzdjLi5kNjIzOWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAtMjgsMTAgKzI4LDE1IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkFzeW5jVGFzay5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1
ZGUgIkRhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRv
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApA
QCAtODcsNyArOTIsNiBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzczo6cmVtb3ZlVW5pcXVlSURCRGF0
YWJhc2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlKQogICAgIGNvbnN0IFVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciA9IGRhdGFiYXNlLmlkZW50aWZpZXIo
KTsKICAgICBBU1NFUlQobV9pZGJEYXRhYmFzZXMuY29udGFpbnMoaWRlbnRpZmllcikpOwogCi0g
ICAgLy8gRklYTUU6IFBlcmZvcm0gbmVjZXNzYXJ5IHNodXQgZG93biBvZiB0aGUgdW5pcXVlIGRh
dGFiYXNlIGJlZm9yZSBpdCBpcyBhY3R1YWxseSBkZXN0cm95ZWQuCiAgICAgbV9pZGJEYXRhYmFz
ZXMucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCkBAIC05Niw2ICsxMDAsNTMgQEAgdm9pZCBEYXRh
YmFzZVByb2Nlc3M6OmluaXRpYWxpemVEYXRhYmFzZVByb2Nlc3MoY29uc3QgRGF0YWJhc2VQcm9j
ZXNzQ3JlYXRpb25QYXIKICAgICBtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IHBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogfQogCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6
ZW5zdXJlSW5kZXhlZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcmVs
YXRpdmVQYXRoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBwb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUFzeW5jVGFzayh0aGlzLCAmRGF0YWJhc2VQcm9jZXNzOjplbnN1cmVQ
YXRoRXhpc3RzLCBhYnNvbHV0ZUluZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2
ZVBhdGgocmVsYXRpdmVQYXRoKSkpOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6ZW5zdXJl
UGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKSkKKyAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBhbGwgZGlyZWN0b3JpZXMgZm9yIHBhdGggJyVzJyIsIHBh
dGgudXRmOCgpLmRhdGEoKSk7Cit9CisKK1N0cmluZyBEYXRhYmFzZVByb2Nlc3M6OmFic29sdXRl
SW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcm
IHJlbGF0aXZlUGF0aCkKK3sKKyAgICAvLyBGSVhNRTogcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KCkgd2FzIG9yaWdpbmFsbHkgZGVzaWduZWQgdG8gYXBwZW5kIGluZGl2aWR1YWwgYXRvbWljIGNv
bXBvbmVudHMuCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGZ1bmN0aW9uIGRlc2lnbmVkIHRvIGFw
cGVuZCBhIG11bHRpLWNvbXBvbmVudCBzdWJwYXRoLCBidXQgd2Ugc2hvdWxkLgorICAgIHJldHVy
biBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHJl
bGF0aXZlUGF0aCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpwb3N0RGF0YWJhc2VUYXNr
KHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2spCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlVGFza011dGV4KTsK
KworICAgIG1fZGF0YWJhc2VUYXNrcy5hcHBlbmQoc3RkOjptb3ZlKHRhc2spKTsKKworICAgIG1f
cXVldWUtPmRpc3BhdGNoKGJpbmQoJkRhdGFiYXNlUHJvY2Vzczo6cGVyZm9ybU5leHREYXRhYmFz
ZVRhc2ssIHRoaXMpKTsKK30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OnBlcmZvcm1OZXh0RGF0
YWJhc2VUYXNrKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2s7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9kYXRhYmFzZVRhc2tNdXRleCk7CisgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZVRh
c2tzLmlzRW1wdHkoKSk7CisgICAgICAgIHRhc2sgPSBtX2RhdGFiYXNlVGFza3MudGFrZUZpcnN0
KCk7CisgICAgfQorCisgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKK30KKwogdm9pZCBEYXRhYmFz
ZVByb2Nlc3M6OmNyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbigpCiB7CiAjaWYg
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0RhdGFiYXNlUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFi
YXNlUHJvY2Vzcy5oCmluZGV4IDgzNzdhNGMuLjI0NzU2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKQEAgLTM1LDYgKzM1LDcgQEAg
Y2xhc3MgV29ya1F1ZXVlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgQXN5bmNUYXNr
OwogY2xhc3MgRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOwogY2xhc3MgVW5pcXVlSURC
RGF0YWJhc2U7CiAKQEAgLTUwLDcgKzUxLDEwIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFVu
aXF1ZUlEQkRhdGFiYXNlPiBnZXRPckNyZWF0ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogICAgIHZvaWQgcmVtb3ZlVW5pcXVlSURCRGF0YWJh
c2UoY29uc3QgVW5pcXVlSURCRGF0YWJhc2UmKTsKIAotICAgIFdvcmtRdWV1ZSYgcXVldWUoKSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PFdvcmtRdWV1ZSY+KG1fcXVldWUuZ2V0KCkpOyB9Cisg
ICAgdm9pZCBlbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMoY29uc3QgU3Ry
aW5nJik7CisgICAgU3RyaW5nIGFic29sdXRlSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFz
ZVJlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcmKTsKKworICAgIFdvcmtRdWV1ZSYgcXVldWUoKSB7
IHJldHVybiBtX3F1ZXVlLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VQcm9jZXNz
KCk7CkBAIC03Miw2ICs3NiwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZURhdGFi
YXNlUHJvY2Vzcyhjb25zdCBEYXRhYmFzZVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKICAg
ICB2b2lkIGNyZWF0ZURhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbigpOwogCisgICAgdm9p
ZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+KTsKKworICAgIC8v
IEZvciBleGVjdXRpb24gb24gd29yayBxdWV1ZSB0aHJlYWQgb25seQorICAgIHZvaWQgcGVyZm9y
bU5leHREYXRhYmFzZVRhc2soKTsKKyAgICB2b2lkIGVuc3VyZVBhdGhFeGlzdHMoY29uc3QgU3Ry
aW5nJik7CisKICAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlv
bj4+IG1fZGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uczsKIAogICAgIFJlZjxXb3JrUXVl
dWU+IG1fcXVldWU7CkBAIC03OSw2ICs4OSw5IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1faW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogCiAgICAgSGFzaE1hcDxVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXIsIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1faWRiRGF0YWJhc2VzOworCisg
ICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4+IG1fZGF0YWJhc2VUYXNrczsKKyAg
ICBNdXRleCBtX2RhdGFiYXNlVGFza011dGV4OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGJjNzI0NWMuLmY2ZTUwNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0yOSw4ICsyOSwxMiBAQAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAogI2luY2x1ZGUg
IkFzeW5jUmVxdWVzdC5oIgorI2luY2x1ZGUgIkFzeW5jVGFzay5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaCIK
KyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oIgorI2luY2x1
ZGUgIldlYkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVt
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRhLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIApAQCAtNDAsMTIgKzQ0LDQwIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UoY29uc3QgVW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCi0gICAgLCBtX3Byb2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHMoZmFsc2UpCisg
ICAgLCBtX2FjY2VwdGluZ05ld1JlcXVlc3RzKHRydWUpCisgICAgLCBtX2RpZEdldE1ldGFkYXRh
RnJvbUJhY2tpbmdTdG9yZShmYWxzZSkKIHsKKyAgICBtX2luTWVtb3J5ID0gIWlkZW50aWZpZXIu
b3BlbmluZ09yaWdpbigpLmNhblNoYXJlRGF0YWJhc2VzKGlkZW50aWZpZXIubWFpbkZyYW1lT3Jp
Z2luKCkpOworICAgIGlmIChtX2luTWVtb3J5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBF
YWNoIHVuaXF1ZSBJbmRleGVkIERhdGFiYXNlIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSBuYW1lZCBm
b3IgdGhlIGRhdGFiYXNlLCB3aGljaCBleGlzdHMgaW4gYSBkaXJlY3RvcnkgcmVwcmVzZW50aW5n
IGl0cyBvcGVuaW5nIG9yaWdpbi4KKyAgICBtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkgPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoaWRlbnRpZmllci5vcGVuaW5nT3JpZ2luKCkuZGF0YWJh
c2VGaWxlbmFtZUlkZW50aWZpZXIoKSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSk7CisKKyAg
ICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLmVuc3VyZUluZGV4ZWREYXRhYmFzZVJlbGF0aXZl
UGF0aEV4aXN0cyhtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkpOwogfQogCiBVbmlxdWVJREJE
YXRhYmFzZTo6flVuaXF1ZUlEQkRhdGFiYXNlKCkKIHsKKyAgICBBU1NFUlQoIW1fYWNjZXB0aW5n
TmV3UmVxdWVzdHMpOworICAgIEFTU0VSVChtX3BlbmRpbmdNZXRhZGF0YVJlcXVlc3RzLmlzRW1w
dHkoKSk7Cit9CisKK1N0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6ZmlsZW5hbWVGb3JEYXRhYmFz
ZU5hbWUoKQoreworICAgIEFTU0VSVCghbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLmlzTnVs
bCgpKTsKKworICAgIGlmIChtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gIiUwMCI7CisKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSBlbmNvZGVGb3JG
aWxlTmFtZShtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkpOworICAgIGlmIChmaWxlbmFtZSA9
PSAiLiIpCisgICAgICAgIHJldHVybiAiJTJFIjsKKworICAgIGlmIChmaWxlbmFtZSA9PSAiLi4i
KQorICAgICAgICByZXR1cm4gIiUyRSUyRSI7CisKKyAgICByZXR1cm4gZmlsZW5hbWU7CiB9CiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlZ2lzdGVyQ29ubmVjdGlvbihEYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpAQCAtNTksNzAgKzkxLDE3NCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjp1bnJlZ2lzdGVyQ29ubmVjdGlvbihEYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uJiBjb25uZQogICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25zLmNvbnRhaW5zKCZjb25u
ZWN0aW9uKSk7CiAgICAgbV9jb25uZWN0aW9ucy5yZW1vdmUoJmNvbm5lY3Rpb24pOwogCi0gICAg
aWYgKG1fY29ubmVjdGlvbnMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Nvbm5lY3Rpb25zLmlzRW1w
dHkoKSkgeworICAgICAgICBzaHV0ZG93bigpOwogICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNo
YXJlZCgpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyA9IGZhbHNlOworCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9kYXRhYmFzZVRhc2tNdXRleCk7CisgICAgICAgIG1f
ZGF0YWJhc2VUYXNrcy5jbGVhcigpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fbWFpblRocmVhZFRhc2tNdXRleCk7CisgICAgICAgIG1fbWFpblRocmVhZFRh
c2tzLmNsZWFyKCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtX3BlbmRpbmdNZXRhZGF0YVJlcXVl
c3RzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX3BlbmRpbmdNZXRhZGF0
YVJlcXVlc3RzLnRha2VGaXJzdCgpOworICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0QWJvcnRlZCgp
OworICAgIH0KIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZW5xdWV1ZURhdGFiYXNlUXVl
dWVSZXF1ZXN0KFBhc3NSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0KQordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rp
b248dm9pZChib29sLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik+IGNvbXBsZXRpb25DYWxs
YmFjaykKIHsKLSAgICBBU1NFUlQocmVxdWVzdCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgeworICAgICAgICBjb21wbGV0
aW9uQ2FsbGJhY2soZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHJldHJpZXZlZCBtZXRhZGF0YSBm
cm9tIHRoZSBiYWNraW5nIHN0b3JlLCByZXR1cm4gaXQgbm93LgorICAgIGlmIChtX2RpZEdldE1l
dGFkYXRhRnJvbUJhY2tpbmdTdG9yZSkgeworICAgICAgICBpZiAobV9tZXRhZGF0YSkKKyAgICAg
ICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayh0cnVlLCAqbV9tZXRhZGF0YSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhmYWxzZSwgSURCRGF0YWJhc2VNZXRh
ZGF0YSgpKTsKIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlUXVldWVSZXF1ZXN0
c011dGV4KTsKLSAgICBtX2RhdGFiYXNlUXVldWVSZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB1bmFu
c3dlcmVkIG1ldGFkYXRhIHJlcXVlc3QsIHBvc3QgYSB0YXNrIHRvIG9wZW4gdGhlIGJhY2tpbmcg
c3RvcmUgYW5kIGdldCBtZXRhZGF0YS4KKyAgICBpZiAobV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0
cy5pc0VtcHR5KCkpCisgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQXN5bmNUYXNrKHRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSwg
bV9pZGVudGlmaWVyLCBhYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KCkpKTsKKworICAgIC8vIFRo
ZW4gcmVtZW1iZXIgdGhpcyBtZXRhZGF0YSByZXF1ZXN0IHRvIGJlIGFuc3dlcmVkIGxhdGVyLgor
ICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPD46OmNy
ZWF0ZShbY29tcGxldGlvbkNhbGxiYWNrLCB0aGlzXSgpIHsKKyAgICAgICAgY29tcGxldGlvbkNh
bGxiYWNrKCEhbV9tZXRhZGF0YSwgbV9tZXRhZGF0YSA/ICptX21ldGFkYXRhIDogSURCRGF0YWJh
c2VNZXRhZGF0YSgpKTsKKyAgICB9LCBbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKKyAgICAgICAg
Ly8gVGhlIGJvb2xlYW4gZmxhZyB0byB0aGUgY29tcGxldGlvbiBjYWxsYmFjayByZXByZXNlbnRz
IHdoZXRoZXIgdGhlCisgICAgICAgIC8vIGF0dGVtcHQgdG8gZ2V0L2VzdGFibGlzaCBtZXRhZGF0
YSBzdWNjZWVkZWQgb3IgZmFpbGVkLgorICAgICAgICAvLyBTaW5jZSB3ZSdyZSBhYm9ydGluZyB0
aGUgYXR0ZW1wdCwgaXQgZmFpbGVkLCBzbyB3ZSBhbHdheXMgcGFzcyBpbiBmYWxzZS4KKyAgICAg
ICAgY29tcGxldGlvbkNhbGxiYWNrKGZhbHNlLCBJREJEYXRhYmFzZU1ldGFkYXRhKCkpOworICAg
IH0pOworCisgICAgbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5hcHBlbmQocmVxdWVzdC5yZWxl
YXNlKCkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlQW5k
UmVhZE1ldGFkYXRhKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKIAotICAgIGlmIChtX3By
b2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHMpCisgICAgaWYgKG1faW5NZW1vcnkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJTdXBwb3J0IGZvciBpbi1tZW1vcnkgZGF0YWJhc2VzIG5vdCB5ZXQg
aW1wbGVtZW50ZWQiKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2luZ1N0
b3JlID0gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZShpZGVudGlm
aWVyLCBkYXRhYmFzZURpcmVjdG9yeSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNl
TWV0YWRhdGE+IG1ldGFkYXRhID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoTWV0YWRh
dGEoKTsKIAotICAgIG1fcHJvY2Vzc2luZ0RhdGFiYXNlUXVldWVSZXF1ZXN0cyA9IHRydWU7Ci0g
ICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5xdWV1ZSgpLmRpc3BhdGNoKGJpbmQoJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwcm9jZXNzRGF0YWJhc2VSZXF1ZXN0UXVldWUsIHRoaXMpKTsKKyAgICBw
b3N0TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKHRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSwgbWV0YWRhdGEgPyAqbWV0YWRh
dGEgOiBJREJEYXRhYmFzZU1ldGFkYXRhKCksICEhbWV0YWRhdGEpKTsKIH0KIAotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cHJvY2Vzc0RhdGFiYXNlUmVxdWVzdFF1ZXVlKCkKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoY29uc3QgSURC
RGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGJvb2wgc3VjY2VzcykKIHsKLSAgICBBU1NFUlQo
bV9wcm9jZXNzaW5nRGF0YWJhc2VRdWV1ZVJlcXVlc3RzKTsKLQotICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3Q7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFiYXNlUXVldWVSZXF1ZXN0c011dGV4KTsK
LSAgICAgICAgICAgIGlmIChtX2RhdGFiYXNlUXVldWVSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgICAgICBtX3Byb2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHMgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXF1
ZXN0ID0gbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIH0KKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9tZXRhZGF0YSk7CisKKyAg
ICBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZSA9IHRydWU7CisKKyAgICBpZiAoc3Vj
Y2VzcykKKyAgICAgICAgbV9tZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VN
ZXRhZGF0YT4obWV0YWRhdGEpOwogCisgICAgd2hpbGUgKCFtX3BlbmRpbmdNZXRhZGF0YVJlcXVl
c3RzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0g
bV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy50YWtlRmlyc3QoKTsKICAgICAgICAgcmVxdWVzdC0+
Y29tcGxldGVSZXF1ZXN0KCk7CiAgICAgfQogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpn
ZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2ws
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKT4gY29tcGxldGlvbkNhbGxiYWNrKQorU3RyaW5n
IFVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKIHsK
LSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDw+Ojpj
cmVhdGUoW2NvbXBsZXRpb25DYWxsYmFjaywgdGhpc10oKSB7Ci0gICAgICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGdldE9yRXN0YWJsaXNo
SURCRGF0YWJhc2VNZXRhZGF0YUludGVybmFsKG1ldGFkYXRhKTsKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIHJldHVybiBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLmFic29sdXRl
SW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChtX2RhdGFiYXNlUmVs
YXRpdmVEaXJlY3RvcnkpOworfQogCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2go
W21ldGFkYXRhLCBzdWNjZXNzLCBjb21wbGV0aW9uQ2FsbGJhY2tdKCkgewotICAgICAgICAgICAg
Y29tcGxldGlvbkNhbGxiYWNrKHN1Y2Nlc3MsIG1ldGFkYXRhKTsKLSAgICAgICAgfSk7Ci0gICAg
fSwgW2NvbXBsZXRpb25DYWxsYmFja10oKSB7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS0+ZGlz
cGF0Y2goW2NvbXBsZXRpb25DYWxsYmFja10oKSB7Ci0gICAgICAgICAgICAvLyBUaGUgYm9vbGVh
biBmbGFnIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIHJlcHJlc2VudHMgd2hldGhlciB0aGUg
YXR0ZW1wdCB0byBnZXQvZXN0YWJsaXNoIG1ldGFkYXRhCi0gICAgICAgICAgICAvLyBzdWNjZWVk
ZWQgb3IgZmFpbGVkLgotICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWJvcnRpbmcgdGhlIGF0
dGVtcHQsIGl0IGZhaWxlZCwgc28gd2UgYWx3YXlzIHBhc3MgaW4gZmFsc2UuCi0gICAgICAgICAg
ICBjb21wbGV0aW9uQ2FsbGJhY2soZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSk7Ci0gICAg
ICAgIH0pOwotICAgIH0pOwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdE1haW5UaHJlYWRU
YXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2spCit7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpCisgICAgICAg
IHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX21haW5UaHJlYWRUYXNrTXV0ZXgp
OworCisgICAgbV9tYWluVGhyZWFkVGFza3MuYXBwZW5kKHN0ZDo6bW92ZSh0YXNrKSk7CisKKyAg
ICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKGJpbmQoJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtTmV4dE1haW5UaHJlYWRUYXNrLCB0aGlzKSk7Cit9CiAKLSAgICBlbnF1ZXVlRGF0YWJhc2VR
dWV1ZVJlcXVlc3QocmVxdWVzdC5yZWxlYXNlKCkpOwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybU5leHRNYWluVGhyZWFkVGFzaygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2s7CisgICAgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9tYWluVGhyZWFkVGFza011dGV4KTsKKyAgICAgICAgQVNT
RVJUKCFtX21haW5UaHJlYWRUYXNrcy5pc0VtcHR5KCkpOworICAgICAgICB0YXNrID0gbV9tYWlu
VGhyZWFkVGFza3MudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgdGFzay0+cGVyZm9ybVRhc2so
KTsKIH0KIAotYm9vbCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFz
ZU1ldGFkYXRhSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxB
c3luY1Rhc2s+IHRhc2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
ICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VUYXNrTXV0ZXgpOworCisgICAgbV9kYXRhYmFzZVRhc2tz
LmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOworCisgICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQo
KS5xdWV1ZSgpLmRpc3BhdGNoKGJpbmQoJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtTmV4dERh
dGFiYXNlVGFzaywgdGhpcykpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
TmV4dERhdGFiYXNlVGFzaygpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIHN1Y2Nl
c3NmdWxseSBjYWxsZWQgYnkgbWVzc2FnaW5nIGZyb20gdGhlIFdlYlByb2Nlc3MsIGFuZCBjYWxs
cyBiYWNrIHdpdGggZHVtbXkgZGF0YS4KLSAgICAvLyBOZWVkcyByZWFsIGltcGxlbWVudGF0aW9u
LgogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIHJldHVybiBmYWxzZTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2s7CisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9kYXRhYmFzZVRhc2tNdXRleCk7CisKKyAgICAgICAgLy8gVGhpcyBkYXRh
YmFzZSBtaWdodCBiZSBzaHV0dGluZyBkb3duIG9uIHRoZSBtYWluIHRocmVhZCwgaW4gd2hpY2gg
Y2FzZSB0aGUgdGFzayBxdWV1ZSBtaWdodCBiZSBlbXB0eS4KKyAgICAgICAgaWYgKG1fZGF0YWJh
c2VUYXNrcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGFzayA9
IG1fZGF0YWJhc2VUYXNrcy50YWtlRmlyc3QoKTsKKworICAgICAgICAvLyBJdCBpcyBwb3NzaWJs
ZSB0aGF0IHRoaXMgZGF0YWJhc2UgbWlnaHQgYmUgc2h1dHRpbmcgZG93biBvbiB0aGUgbWFpbiB0
aHJlYWQuCisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVsZWFz
aW5nIG1fZGF0YWJhc2VUYXNrTXV0ZXgsIHRoaXMgZGF0YWJhc2UgbWlnaHQgZ2V0IGRlbGV0ZWQu
CisgICAgICAgIC8vIFdlIHRha2UgYSByZWYoKSB0byBtYWtlIHN1cmUgdGhlIGRhdGFiYXNlIGlz
IHN0aWxsIGxpdmUgd2hpbGUgdGhpcyBsYXN0IHRhc2sgaXMgcGVyZm9ybWVkLgorICAgICAgICBy
ZWYoKTsKKyAgICB9CisKKyAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworCisgICAgLy8gVG8gYmFs
YW5jZSBvdXQgdGhlIHJlZigpIHRha2VuIGFib3ZlLgorICAgIGRlcmVmKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDNkZTAxMDQuLmYx
MzFkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVk
REIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQzLDExICs0MywxMyBAQCBzdHJ1
Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBBc3lu
Y1JlcXVlc3Q7CitjbGFzcyBBc3luY1Rhc2s7CiBjbGFzcyBEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uOworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmU7CiAKIHN0cnVjdCBT
ZWN1cml0eU9yaWdpbkRhdGE7CiAKLWNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8VW5pcXVlSURCRGF0YWJhc2U+IHsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFVuaXF1ZUlEQkRhdGFiYXNlPiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2U+IGNyZWF0ZShjb25zdCBV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiAgICAgewpAQCAtNjgsMTgg
KzcwLDQyIEBAIHByaXZhdGU6CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9p
ZGVudGlmaWVyOwogCisgICAgYm9vbCBtX2luTWVtb3J5OworICAgIFN0cmluZyBtX2RhdGFiYXNl
UmVsYXRpdmVEaXJlY3Rvcnk7CisKICAgICBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uPj4gbV9jb25uZWN0aW9uczsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8QXN5bmNSZXF1ZXN0Pj4gbV9kYXRhYmFzZVJlcXVlc3RzOwogCi0gICAgdm9pZCBlbnF1ZXVl
RGF0YWJhc2VRdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxBc3luY1JlcXVlc3Q+KTsKKyAgICBTdHJp
bmcgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OworCisgICAgdm9pZCBwb3N0RGF0
YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+KTsKKyAgICB2b2lkIHNodXRkb3du
KCk7CisKKyAgICAvLyBNZXRob2QgdGhhdCBhdHRlbXB0cyB0byBtYWtlIGxlZ2FsIGZpbGVuYW1l
cyBmcm9tIGFsbCBsZWdhbCBkYXRhYmFzZSBuYW1lcworICAgIFN0cmluZyBmaWxlbmFtZUZvckRh
dGFiYXNlTmFtZSgpOwogCiAgICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGRhdGFiYXNlIHdv
cmtxdWV1ZSB0aHJlYWQgb25seQotICAgIHZvaWQgcHJvY2Vzc0RhdGFiYXNlUmVxdWVzdFF1ZXVl
KCk7Ci0gICAgYm9vbCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGFJbnRlcm5hbChj
b25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJik7CisgICAgdm9pZCBwZXJmb3JtTmV4
dERhdGFiYXNlVGFzaygpOworICAgIHZvaWQgcG9zdE1haW5UaHJlYWRUYXNrKHN0ZDo6dW5pcXVl
X3B0cjxBc3luY1Rhc2s+KTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRh
dGEoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZURpcmVjdG9yeSk7CisKKyAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgZGF0YWJhc2Ugd29y
a3F1ZXVlIHRocmVhZCwgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBtYWluIHRocmVhZCBvbmx5Cisg
ICAgdm9pZCBwZXJmb3JtTmV4dE1haW5UaHJlYWRUYXNrKCk7CisgICAgdm9pZCBkaWRPcGVuQmFj
a2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRh
dGEmLCBib29sIHN1Y2Nlc3MpOworCisgICAgRGVxdWU8UmVmUHRyPEFzeW5jUmVxdWVzdD4+IG1f
cGVuZGluZ01ldGFkYXRhUmVxdWVzdHM7CisgICAgYm9vbCBtX2FjY2VwdGluZ05ld1JlcXVlc3Rz
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IG1f
bWV0YWRhdGE7CisgICAgYm9vbCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZTsKKwor
ICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7
CisKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPj4gbV9kYXRhYmFzZVRhc2tz
OworICAgIE11dGV4IG1fZGF0YWJhc2VUYXNrTXV0ZXg7CiAKLSAgICBNdXRleCBtX2RhdGFiYXNl
UXVldWVSZXF1ZXN0c011dGV4OwotICAgIERlcXVlPFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX2Rh
dGFiYXNlUXVldWVSZXF1ZXN0czsKLSAgICBib29sIG1fcHJvY2Vzc2luZ0RhdGFiYXNlUXVldWVS
ZXF1ZXN0czsKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPj4gbV9tYWluVGhy
ZWFkVGFza3M7CisgICAgTXV0ZXggbV9tYWluVGhyZWFkVGFza011dGV4OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiOGQwMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZV9oCisjZGVmaW5lIFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4g
eworcHVibGljOgorICAgIHZpcnR1YWwgflVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1l
dGFkYXRhPiBnZXRPckVzdGFibGlzaE1ldGFkYXRhKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCisjZW5kaWYgLy8gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwCmluZGV4
IGZmOGJkN2UuLjE5OGYwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllci5jcHAKQEAgLTc1LDYgKzc1LDE3IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyOjppc051bGwoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGFiYXNlTmFtZS5pc051bGwo
KTsKIH0KIAorVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIFVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllcjo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXIgcmVzdWx0OworCisgICAgcmVzdWx0Lm1fZGF0YWJhc2VOYW1lID0gbV9kYXRhYmFz
ZU5hbWUuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0Lm1fb3BlbmluZ09yaWdpbiA9IG1fb3Bl
bmluZ09yaWdpbi5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQubV9tYWluRnJhbWVPcmlnaW4g
PSBtX21haW5GcmFtZU9yaWdpbi5pc29sYXRlZENvcHkoKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIm
IGEsIGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgYikKIHsKICAgICBpZiAoJmEg
PT0gJmIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaAppbmRleCBi
ZWJjZGM0Li5kYmY5ZGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyLmgKQEAgLTUwLDYgKzUwLDggQEAgcHVibGljOgogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKKyAgICBVbmlx
dWVJREJEYXRhYmFzZUlkZW50aWZpZXIgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VOYW1lOwogICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBtX29w
ZW5pbmdPcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDA1NjVmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmNwcApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5o
IgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9D
RVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JREJEYXRhYmFzZU1ldGFkYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisvLyBDdXJyZW50IHZlcnNpb24gb2YgdGhlIG1ldGFkYXRhIHNjaGVtYSBiZWlu
ZyB1c2VkIGluIHRoZSBtZXRhZGF0YSBkYXRhYmFzZS4KK3N0YXRpYyBjb25zdCBpbnQgY3VycmVu
dE1ldGFkYXRhVmVyc2lvbiA9IDE7CisKK1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlOjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZShjb25zdCBVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJl
Y3RvcnkpCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fYWJzb2x1dGVE
YXRhYmFzZURpcmVjdG9yeShkYXRhYmFzZURpcmVjdG9yeSkKK3sKKyAgICAvLyBUaGUgYmFja2lu
ZyBzdG9yZSBpcyBtZWFudCB0byBiZSBjcmVhdGVkIGFuZCB1c2VkIGVudGlyZWx5IG9uIGEgYmFj
a2dyb3VuZCB0aHJlYWQuCisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKQor
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX21ldGFkYXRhREIp
OworICAgIEFTU0VSVChtX21ldGFkYXRhREItPmlzT3BlbigpKTsKKworICAgIGlmICghbV9tZXRh
ZGF0YURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElEQkRhdGFiYXNlSW5mbyAoa2V5
IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFD
RSwgdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSURCRGF0YWJhc2VJbmZvIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yKCksIG1fbWV0YWRhdGFEQi0+
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBtX21ldGFkYXRhREIgPSBudWxscHRyOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzcWwoKm1fbWV0YWRhdGFEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMg
KCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50KDEsIGN1cnJlbnRNZXRhZGF0
YVZlcnNpb24pICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNR
TFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBk
YXRhYmFzZSBtZXRhZGF0YSB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxlICglaSkg
LSAlcyIsIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yKCksIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiSU5TRVJUIElOVE8gSURCRGF0YWJhc2VJbmZv
IFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyIpOworICAgICAgICBpZiAoc3FsLnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIG1faWRlbnRp
Zmllci5kYXRhYmFzZU5hbWUoKSkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5z
dGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgaW5zZXJ0IGRhdGFiYXNlIG5hbWUgaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAt
ICVzIiwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3IoKSwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICBtX21ldGFkYXRhREIgPSBudWxscHRyOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICAvLyBEYXRh
YmFzZSB2ZXJzaW9ucyBhcmUgZGVmaW5lZCB0byBiZSBhIHVpbjY0X3QgaW4gdGhlIHNwZWMgYnV0
IHNxbGl0ZTMgZG9lc24ndCBzdXBwb3J0IG5hdGl2ZSBiaW5kaW5nIG9mIHVuc2lnbmVkIGludGVn
ZXJzLgorICAgICAgICAvLyBUaGVyZWZvcmUgd2UnbGwgc3RvcmUgdGhlIHZlcnNpb24gYXMgYSBT
dHJpbmcuCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIklOU0VS
VCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZVZlcnNpb24nLCA/KTsiKTsK
KyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8
IHNxbC5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcigwKSkgIT0gU1FMUmVzdWx0T2sKKyAgICAg
ICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgaW5zZXJ0IGRlZmF1bHQgdmVyc2lvbiBpbnRvIElEQkRhdGFiYXNl
SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX21ldGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21ldGFk
YXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIG1fbWV0YWRhdGFEQiA9IG51bGxw
dHI7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFRoaXMgaW5pdGlhbCBtZXRhZGF0YSBtYXRjaGVzIHRoZSBkZWZhdWx0IHZhbHVlcyB3ZSBq
dXN0IHB1dCBpbnRvIHRoZSBtZXRhZGF0YSBkYXRhYmFzZS4KKyAgICBhdXRvIG1ldGFkYXRhID0g
c3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPigpOworICAgIG1ldGFkYXRhLT5u
YW1lID0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpOworICAgIG1ldGFkYXRhLT52ZXJzaW9u
ID0gMDsKKworICAgIHJldHVybiBtZXRhZGF0YTsKK30KKworc3RkOjp1bmlxdWVfcHRyPElEQkRh
dGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpleHRy
YWN0RXhpc3RpbmdNZXRhZGF0YSgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cisg
ICAgQVNTRVJUKG1fbWV0YWRhdGFEQik7CisKKyAgICBpZiAoIW1fbWV0YWRhdGFEQi0+dGFibGVF
eGlzdHMoIklEQkRhdGFiYXNlSW5mbyIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gbWV0YWRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlTWV0YWRhdGE+KCk7
CisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIsICJTRUxF
Q1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ01ldGFkYXRhVmVyc2lv
bic7Iik7CisgICAgICAgIGlmIChzcWwuaXNDb2x1bW5OdWxsKDApKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIG1ldGFkYXRhLT52ZXJzaW9uID0gc3FsLmdldENvbHVtbklu
dCgwKTsKKyAgICB9CisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21ldGFk
YXRhREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0gJ0Rh
dGFiYXNlTmFtZSc7Iik7CisgICAgICAgIGlmIChzcWwuaXNDb2x1bW5OdWxsKDApKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIG1ldGFkYXRhLT5uYW1lID0gc3FsLmdldENv
bHVtblRleHQoMCk7CisgICAgICAgIGlmIChtZXRhZGF0YS0+bmFtZSAhPSBtX2lkZW50aWZpZXIu
ZGF0YWJhc2VOYW1lKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRGF0YWJhc2UgbmFtZSBp
biB0aGUgbWV0YWRhdGEgZGF0YWJhc2UgKCclcycpIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3Rl
ZCBuYW1lICgnJXMnKSIsIG1ldGFkYXRhLT5uYW1lLnV0ZjgoKS5kYXRhKCksIG1faWRlbnRpZmll
ci5kYXRhYmFzZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNx
bCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJF
IGtleSA9ICdEYXRhYmFzZVZlcnNpb24nOyIpOworICAgICAgICBpZiAoc3FsLmlzQ29sdW1uTnVs
bCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBTdHJpbmcgc3RyaW5n
VmVyc2lvbiA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBib29sIG9rOworICAgICAg
ICBtZXRhZGF0YS0+dmVyc2lvbiA9IHN0cmluZ1ZlcnNpb24udG9VSW50NjRTdHJpY3QoJm9rKTsK
KyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJEYXRhYmFzZSB2ZXJz
aW9uIG9uIGRpc2sgKCclcycpIGRvZXMgbm90IGNsZWFubHkgY29udmVydCB0byBhbiB1bnNpZ25l
ZCA2NC1iaXQgaW50ZWdlciB2ZXJzaW9uIiwgc3RyaW5nVmVyc2lvbi51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
RklYTUU6IE9uY2Ugd2Ugc2F2ZSBPYmplY3RTdG9yZXMgYW5kIGluZGV4ZXMgd2UgbmVlZCB0byBl
eHRyYWN0IHRoZWlyIG1ldGFkYXRhLCBhbHNvLgorICAgIHJldHVybiBtZXRhZGF0YTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZTo6b3BlblNRTGl0ZURhdGFiYXNlQXRQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGF1dG8gc3Fs
aXRlRGF0YWJhc2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZURhdGFiYXNlPigpOworICAgIGlm
ICghc3FsaXRlRGF0YWJhc2UtPm9wZW4ocGF0aCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gb3BlbiBTUUxpdGUgZGF0YWJhc2UgYXQgcGF0aCAnJXMnIiwgcGF0aC51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHNxbGl0
ZURhdGFiYXNlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmdldE9yRXN0YWJsaXNoTWV0YWRhdGEo
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgU3RyaW5nIG1ldGFkYXRh
REJGaWxlbmFtZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Fic29sdXRlRGF0YWJhc2VE
aXJlY3RvcnksICJJREJNZXRhZGF0YS5zcWxpdGUzIik7CisgICAgbV9tZXRhZGF0YURCID0gb3Bl
blNRTGl0ZURhdGFiYXNlQXRQYXRoKG1ldGFkYXRhREJGaWxlbmFtZSk7CisgICAgaWYgKCFtX21l
dGFkYXRhREIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PElEQkRhdGFiYXNlTWV0YWRhdGE+IG1ldGFkYXRhID0gZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEo
KTsKKyAgICBpZiAoIW1ldGFkYXRhKQorICAgICAgICBtZXRhZGF0YSA9IGNyZWF0ZUFuZFBvcHVs
YXRlSW5pdGlhbE1ldGFkYXRhKCk7CisKKyAgICBpZiAoIW1ldGFkYXRhKQorICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBlc3RhYmxpc2ggSURCIGRhdGFiYXNlIGF0IHBhdGggJyVzJyIsIG1l
dGFkYXRhREJGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBtZXRhZGF0YTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY2Yzk1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaApAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZV9oCisjZGVm
aW5lIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlX2gKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUg
IlVuaXF1ZUlEQkRhdGFiYXNlLmgiIAorI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU1FMaXRlRGF0YWJh
c2U7CitzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlIEZJTkFMIDogcHVi
bGljIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IFVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZURpcmVjdG9yeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUoaWRlbnRpZmllciwgZGF0YWJhc2VEaXJlY3Rv
cnkpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJE
YXRhYmFzZU1ldGFkYXRhPiBnZXRPckVzdGFibGlzaE1ldGFkYXRhKCkgT1ZFUlJJREU7CisKK3By
aXZhdGU6CisgICAgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUoY29uc3QgVW5p
cXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9y
eSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG9wZW5T
UUxpdGVEYXRhYmFzZUF0UGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEoKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gY3JlYXRl
QW5kUG9wdWxhdGVJbml0aWFsTWV0YWRhdGEoKTsKKworICAgIFVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllciBtX2lkZW50aWZpZXI7CisgICAgU3RyaW5nIG1fYWJzb2x1dGVEYXRhYmFzZURpcmVj
dG9yeTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZT4gbV9t
ZXRhZGF0YURCOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisjZW5kaWYg
Ly8gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jVGFzay5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Fz
eW5jVGFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzE2ZTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNUYXNrLmgKQEAgLTAs
MCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFzeW5jVGFza19oCisjZGVmaW5lIEFz
eW5jVGFza19oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Nyb3NzVGhyZWFkQ29waWVyLmg+CisjaW5j
bHVkZSA8ZnVuY3Rpb25hbD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEFzeW5jVGFz
ayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXN5bmNUYXNrKTsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5Bc3luY1Rhc2soKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygp
ID0gMDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IEFzeW5jVGFzaygpIHsgfQorfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK2NsYXNzIEFzeW5j
VGFza0ltcGwgRklOQUwgOiBwdWJsaWMgQXN5bmNUYXNrIHsKK3B1YmxpYzoKKyAgICBBc3luY1Rh
c2tJbXBsKFQqIGNvbnN0IGNhbGxlZSwgdm9pZCAoVDo6Km1ldGhvZCkoQXJndW1lbnRzLi4uKSwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbV90YXNrRnVuY3Rpb24g
PSBbY2FsbGVlLCBtZXRob2QsIGFyZ3VtZW50cy4uLl0oKSB7CisgICAgICAgICAgICAoY2FsbGVl
LT4qbWV0aG9kKShhcmd1bWVudHMuLi4pOworICAgICAgICB9OworICAgIH0KKworICAgIHZpcnR1
YWwgfkFzeW5jVGFza0ltcGwoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1UYXNrKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1fdGFza0Z1bmN0
aW9uKCk7CisgICAgfQorCisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fdGFza0Z1bmN0aW9u
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+
IGNyZWF0ZUFzeW5jVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1l
dGhvZCkoKSkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBc3luY1Rhc2tJbXBsPFQ+
PihjYWxsZWUsIG1ldGhvZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDE+CitzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiBjcmVhdGVBc3luY1Rh
c2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSksCisg
ICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
QXN5bmNUYXNrSW1wbDxULCBNUDE+PigKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2Qs
CisgICAgICAgIFdlYkNvcmU6OkNyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIx
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEs
IHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+CitzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiBj
cmVhdGVBc3luY1Rhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRo
b2QpKE1QMSwgTVAyKSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYg
cGFyYW1ldGVyMikKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBc3luY1Rhc2tJbXBs
PFQsIE1QMSwgTVAyPj4oCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAg
ICBXZWJDb3JlOjpDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAg
ICAgIFdlYkNvcmU6OkNyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7CisK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBBc3luY1Rhc2tfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmJkMWQ0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRmlsZVN5c3RlbUhlbHBlci5jcHAKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtSGVscGVyLmgi
CisKKyNpbmNsdWRlICJBc3luY1Rhc2suaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitGaWxlU3lzdGVtSGVscGVyOjpGaWxlU3lzdGVtSGVs
cGVyKCkKKyAgICA6IG1fcXVldWUoYWRvcHRSZWYoKldvcmtRdWV1ZTo6Y3JlYXRlKCJGaWxlU3lz
dGVtSGVscGVyIikubGVha1JlZigpKSkKK3sKK30KKworRmlsZVN5c3RlbUhlbHBlciogRmlsZVN5
c3RlbUhlbHBlcjo6c2hhcmVkSGVscGVyKCkKK3sKKyAgICBzdGF0aWMgRmlsZVN5c3RlbUhlbHBl
ciogaGVscGVyID0gbmV3IEZpbGVTeXN0ZW1IZWxwZXI7CisgICAgcmV0dXJuIGhlbHBlcjsKK30K
Kwordm9pZCBGaWxlU3lzdGVtSGVscGVyOjplbnN1cmVEaXJlY3RvcnlFeGlzdHMoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnkpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHNo
YXJlZEhlbHBlcigpLT5wb3N0VGFzayhjcmVhdGVBc3luY1Rhc2soc2hhcmVkSGVscGVyKCksICZG
aWxlU3lzdGVtSGVscGVyOjplbnN1cmVEaXJlY3RvcnlFeGlzdHNJbnRlcm5hbCwgZGlyZWN0b3J5
KSk7Cit9CisKK3ZvaWQgRmlsZVN5c3RlbUhlbHBlcjo6ZW5zdXJlRGlyZWN0b3J5RXhpc3RzSW50
ZXJuYWwoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhkaXJlY3RvcnkpKQorICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGFsbCBkaXJlY3RvcmllcyBmb3IgcGF0aCAnJXMn
IiwgZGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEZpbGVTeXN0ZW1IZWxwZXI6
OnBvc3RUYXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2spCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rhc2tNdXRleCk7
CisKKyAgICBtX3Rhc2tzLmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOworCisgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goYmluZCgmRmlsZVN5c3RlbUhlbHBlcjo6cGVyZm9ybU5leHRUYXNrLCB0aGlzKSk7
Cit9CisKK3ZvaWQgRmlsZVN5c3RlbUhlbHBlcjo6cGVyZm9ybU5leHRUYXNrKCkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+
IHRhc2s7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90YXNrTXV0ZXgpOwor
ICAgICAgICBBU1NFUlQoIW1fdGFza3MuaXNFbXB0eSgpKTsKKyAgICAgICAgdGFzayA9IG1fdGFz
a3MudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RmlsZVN5c3RlbUhlbHBlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0ZW1IZWxw
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQ2MmY1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0ZpbGVTeXN0ZW1IZWxwZXIuaApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGaWxlU3lzdGVtSGVscGVyX2gKKyNk
ZWZpbmUgRmlsZVN5c3RlbUhlbHBlcl9oCisKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEFzeW5jVGFzazsKKworY2xhc3MgRmlsZVN5c3RlbUhl
bHBlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgZW5zdXJlRGlyZWN0b3J5RXhpc3RzKGNv
bnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIEZpbGVTeXN0ZW1IZWxwZXIoKTsKKworICAg
IHN0YXRpYyBGaWxlU3lzdGVtSGVscGVyKiBzaGFyZWRIZWxwZXIoKTsKKworICAgIC8vIFRvIGJl
IGNhbGxlZCBvbmx5IGZyb20gdGhlIG1haW4gdGhyZWFkCisgICAgdm9pZCBwb3N0VGFzayhzdGQ6
OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPik7CisKKyAgICAvLyBUbyBiZSBjYWxsZWQgb25seSBmcm9t
IHRoZSBmaWxlIHN5c3RlbSBoZWxwZXIgd29yayBxdWV1ZQorICAgIHZvaWQgcGVyZm9ybU5leHRU
YXNrKCk7CisgICAgdm9pZCBlbnN1cmVEaXJlY3RvcnlFeGlzdHNJbnRlcm5hbChjb25zdCBTdHJp
bmcmKTsKKworICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7CisKKyAgICBEZXF1ZTxzdGQ6OnVu
aXF1ZV9wdHI8QXN5bmNUYXNrPj4gbV90YXNrczsKKyAgICBNdXRleCBtX3Rhc2tNdXRleDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRmlsZVN5c3RlbUhlbHBlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCmluZGV4IGRh
YWM2ZmIuLjRkODE4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0
eU9yaWdpbkRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdp
bkRhdGEuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdp
bi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKQEAgLTY5LDYgKzcwLDMwIEBAIGJvb2wgU2VjdXJpdHlPcmlnaW5EYXRhOjpkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTZWN1cml0eU9yaWdpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK1N0cmluZyBTZWN1cml0eU9yaWdpbkRhdGE6OmRhdGFiYXNlRmls
ZW5hbWVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShwcm90b2NvbCwgaG9zdCwgcG9y
dCk7CisgICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKTsKK30K
KworYm9vbCBTZWN1cml0eU9yaWdpbkRhdGE6OmNhblNoYXJlRGF0YWJhc2VzKGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgLy8gRm9yIG5vdywgYW4gb3JpZ2lu
J3MgZGF0YWJhc2UgYWNjZXNzIGlzIHByZWRpY2F0ZWQgb24gZXF1YWxpdHkgd2l0aCB0aGUgb3Ro
ZXIgb3JpZ2luLgorICAgIC8vIFdlIG1pZ2h0IG5lZWQgdG8gbWFrZSB0aGlzIG1vcmUgbnVhbmNl
ZCBsYXRlci4KKyAgICByZXR1cm4gKnRoaXMgPT0gb3RoZXI7Cit9CisKK1NlY3VyaXR5T3JpZ2lu
RGF0YSBTZWN1cml0eU9yaWdpbkRhdGE6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgU2Vj
dXJpdHlPcmlnaW5EYXRhIHJlc3VsdDsKKworICAgIHJlc3VsdC5wcm90b2NvbCA9IHByb3RvY29s
Lmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5ob3N0ID0gaG9zdC5pc29sYXRlZENvcHkoKTsK
KyAgICByZXN1bHQucG9ydCA9IHBvcnQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lk
IHBlcmZvcm1BUElDYWxsYmFja1dpdGhTZWN1cml0eU9yaWdpbkRhdGFWZWN0b3IoY29uc3QgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFzLCBBcnJheUNhbGxiYWNrKiBjYWxs
YmFjaykKIHsKICAgICBpZiAoIWNhbGxiYWNrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU2VjdXJpdHlPcmlnaW5EYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vj
dXJpdHlPcmlnaW5EYXRhLmgKaW5kZXggYzNmODdhMC4uYTBhNjI4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaApAQCAtNDYsMTIgKzQ2LDIwIEBAIHN0cnVj
dCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXImLCBTZWN1cml0eU9yaWdpbkRhdGEmKTsKIAorICAgIC8vIFJldHVybnMgYSBzdHJp
bmcgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdXNlIGFzIGEgdW5pcXVlIGZpbGVuYW1lCisgICAg
U3RyaW5nIGRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhpcyBvcmlnaW4gY2FuIHVzZSB0aGUgc2FtZSBkYXRhYmFzZXMgYXMgdGhl
IGdpdmVuIG9yaWdpbi4KKyAgICBib29sIGNhblNoYXJlRGF0YWJhc2VzKGNvbnN0IFNlY3VyaXR5
T3JpZ2luRGF0YSYpIGNvbnN0OworCiAgICAgLy8gRklYTUUgPHJkYXI6Ly85MDE4Mzg2PjogV2Ug
c2hvdWxkIGJlIHNlbmRpbmcgbW9yZSBzdGF0ZSBhY3Jvc3MgdGhlIHdpcmUgdGhhbiBqdXN0IHRo
ZSBwcm90b2NvbCwKICAgICAvLyBob3N0LCBhbmQgcG9ydC4KIAogICAgIFN0cmluZyBwcm90b2Nv
bDsKICAgICBTdHJpbmcgaG9zdDsKICAgICBpbnQgcG9ydDsKKworICAgIFNlY3VyaXR5T3JpZ2lu
RGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKIH07CiAKIHZvaWQgcGVyZm9ybUFQSUNhbGxiYWNr
V2l0aFNlY3VyaXR5T3JpZ2luRGF0YVZlY3Rvcihjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5E
YXRhPiYsIEFycmF5Q2FsbGJhY2sqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUx
NTc2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkNyb3NzVGhyZWFkQ29waWVyLmgiCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IGZhbHNlLCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI+Ojpjb3B5KGNvbnN0IFVuaXF1ZUlE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gaWRlbnRpZmll
ci5pc29sYXRlZENvcHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
cm9zc1RocmVhZENvcGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJm
ZWRhNDZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3Nz
VGhyZWFkQ29waWVyLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
Q3Jvc3NUaHJlYWRDb3BpZXJfaAorI2RlZmluZSBXZWJDcm9zc1RocmVhZENvcGllcl9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0Nyb3NzVGhyZWFkQ29waWVyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBVbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgV2ViS2l0OjpVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXI+IHsKKyAgICBzdGF0aWMgV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXIgY29weShjb25zdCBXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmll
ciYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisjZW5kaWYgLy8gV2ViQ3Jvc3NUaHJlYWRDb3BpZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCmluZGV4IGNhNmI4YTQuLjA0ZDIyNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKICNpbmNs
dWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtSGVscGVy
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk11dGFibGVEaWN0aW9uYXJ5Lmgi
CiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtNDI1LDYgKzQyNiw4IEBAIHZvaWQg
V2ViQ29udGV4dDo6ZW5zdXJlRGF0YWJhc2VQcm9jZXNzKCkKICAgICAvLyBJbiB0aGUgbWVhbnRp
bWUsIGFuIGVudGl0eSBuYW1lIHByZWZpeGVkIHdpdGggdGhyZWUgdW5kZXJzY29yZXMgd2lsbCBu
b3QgY29uZmxpY3Qgd2l0aCBhbnkgV2ViU1FMIGVudGl0aWVzLgogICAgIHBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRhdGFiYXNl
RGlyZWN0b3J5KCksICJfX19JbmRleGVkREIiKTsKIAorICAgIEZpbGVTeXN0ZW1IZWxwZXI6OmVu
c3VyZURpcmVjdG9yeUV4aXN0cyhwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7
CisKICAgICBtX2RhdGFiYXNlUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNz
OjpJbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYx
MDVjNjUuLjM5ZWJlNzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NjIsNiArNTYyLDggQEAKIAkJNTEzQTE2M0QxNjMwODhG
NjAwNUQ3RDIyIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzQTE2M0IxNjMwODhGNjAwNUQ3RDIy
IC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk1MTNBMTY0QzE2MzBB
OUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzQTE2NDkxNjMwQTlCRjAw
NUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLzsgfTsKIAkJNTEz
QTE2NEQxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTNBMTY0QTE2
MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLzsgfTsK
KwkJNTE0NkEzMzcxODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVTeXN0ZW1IZWxwZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0NkEzMzUxODU5Mzky
NjAwNkU2ODY3IC8qIEZpbGVTeXN0ZW1IZWxwZXIuY3BwICovOyB9OworCQk1MTQ2QTMzODE4NTkz
OTI2MDA2RTY4NjcgLyogRmlsZVN5c3RlbUhlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0NkEzMzYxODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVT
eXN0ZW1IZWxwZXIuaCAqLzsgfTsKIAkJNTE0QkRFRDMxNkM5OEVERDAwRTRFMjVFIC8qIFN0YXRp
c3RpY3NSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTRCREVEMjE2Qzk4RUREMDBFNEUyNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuaCAqLzsg
fTsKIAkJNTE1MzU2OUMxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUz
NTY5QTEyOTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcCAqLzsg
fTsKIAkJNTE1MzU2OUQxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MzU2
OUIxMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5oICovOyB9OwpA
QCAtNTc1LDkgKzU3NywxMyBAQAogCQk1MTVFNzczMzE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXIuY3BwICovOyB9OwogCQk1MTVFNzczNDE4NDAyRDUxMDAwNzIwM0YgLyog
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFNzczMjE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyLmggKi87IH07CiAJCTUxNjBCRkUxMTMzODFERjkwMDkxODk5OSAv
KiBMb2dnaW5nLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1hYy5tbSAqLzsgfTsK
KwkJNTE2MzExODcxODU4NDQ2NjAwNTM0NjQ3IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYzMTE4NjE4NTg0
NDY2MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLzsgfTsKIAkJNTE2MzE5OTIx
NjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYzMTk5MTE2Mjg5ODBBMDBFMjJG
MDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKIAkJNTE2MzE5OTQxNjI4OUE2
MDAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNDOTM0MTYyODA2NDgwMDM0
MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxNjMx
OTk1MTYyODlBNjMwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQzkzNTE2MjgwNjQ4MDAz
NDI1NTAgLyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oICovOyB9OworCQk1MTY1NEVGRDE4NEVG
MzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NTRFRkIxODRF
RjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCAq
LzsgfTsKKwkJNTE2NTRFRkUxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTY1NEVGQzE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGUuaCAqLzsgfTsKKwkJNTE2NTRGMDAxODRFRjM0QTAwN0RDODM3IC8qIFVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY1NEVGRjE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmUuaCAqLzsgfTsKIAkJNTE2N0VFQTAxNzAzNzdCRjAwNzY4MUNB
IC8qIERpc2tDYWNoZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjdFRTlFMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9y
LmggKi87IH07CiAJCTUxNjdFRUExMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9y
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2N0VF
OUYxNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0gKi87IH07CiAJCTUxNkE0
QTVEMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVy
cm9yLmggKi87IH07CkBAIC02MzcsNiArNjQzLDggQEAKIAkJNTFCMTVBODUxMzg0M0EzOTAwMzIx
QUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1l
bnRVdGlsaXRpZXMuaCAqLzsgfTsKIAkJNTFCMzAwNTAxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJh
Y2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RD
Ri5jcHAgKi87IH07CiAJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlD
Ri5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIz
MDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3BwICovOyB9OworCQk1MUJB
MjQ0NDE4NThFRTMwMDBFQTI4MTEgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJBMjQ0MzE4NThFRTMwMDBFQTI4MTEgLyogQXN5
bmNUYXNrLmggKi87IH07CisJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1Ro
cmVhZENvcGllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUJBMjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3Bw
ICovOyB9OwogCQk1MUM5NjExODE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVj
dGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUM5NjExNjE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29u
bmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxQzk2MTE5MTgzRDI5NDcwMEQy
MDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzk2MTE3MTgzRDI5NDcwMEQyMDAyRSAv
KiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFDQkJBMEYxNjUy
MTlCNjAwNUJFOEZEIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0JCQTBEMTY1MjE5QjYw
MDVCRThGRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAgKi87IH07CkBAIC0y
MTI2LDYgKzIxMzQsOCBAQAogCQk1MTNBMTY0OTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTNBMTY0QTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
M0ExNjRCMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MTQ2QTMzNTE4NTkzOTI2MDA2RTY4NjcgLyogRmlsZVN5c3RlbUhlbHBlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3lzdGVtSGVscGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE0NkEzMzYxODU5MzkyNjAwNkU2ODY3IC8qIEZp
bGVTeXN0ZW1IZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN5
c3RlbUhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRCREVEMjE2Qzk4
RUREMDBFNEUyNUUgLyogU3RhdGlzdGljc1JlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RhdGlzdGljc1JlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE1MzU2OUExMjkxQjFEMjAwMDc0OURDIC8qIFdlYlBhZ2VDb250ZXh0TWVudUNsaWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlQ29udGV4
dE1lbnVDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTUzNTY5QjEy
OTFCMUQyMDAwNzQ5REMgLyogV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VDb250ZXh0TWVudUNsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEzOSw3ICsyMTQ5LDExIEBACiAJCTUxNUU3NzMxMTg0
MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1RTc3MzIxODQwMkQ1MTAwMDcy
MDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MEJGRTAxMzM4MURGOTAwOTE4OTk5IC8qIExvZ2dpbmcubWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9nZ2luZy5tYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjMxMTg2MTg1ODQ0NjYwMDUzNDY0
NyAvKiBXZWJDcm9zc1RocmVhZENvcGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDcm9zc1RocmVhZENvcGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTYzMTk5MTE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzUHJv
eHlNYWMubW07IHBhdGggPSBtYWMvTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NTRFRkIxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NTRFRkMxODRFRjMzRjAwN0RDODM3IC8qIFVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjU0RUZGMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTY3RUU5RTE3MDM3N0JGMDA3NjgxQ0EgLyogRGlza0NhY2hlTW9uaXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNrQ2FjaGVNb25pdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjdFRTlGMTcwMzc3QkYwMDc2ODFDQSAvKiBE
aXNrQ2FjaGVNb25pdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRGlza0NhY2hlTW9uaXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2
QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MjA1LDYgKzIyMTksOCBAQAogCQk1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1l
bnRVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW52aXJvbm1l
bnRVdGlsaXRpZXMuaDsgcGF0aCA9IHVuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJh
Y2tGb3J3YXJkTGlzdENGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDsgcGF0aCA9IGNmL1dlYkJhY2tGb3J3YXJkTGlzdENG
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEYxMjUyOUQwRTAwMEI1
Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYlBhZ2VQcm94eUNGLmNwcDsgcGF0aCA9IGNmL1dlYlBhZ2VQcm94eUNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFCQTI0NDMxODU4RUUzMDAwRUEyODExIC8q
IEFzeW5jVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3luY1Rhc2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFCQTI0NDUxODU4RjQxNTAwRUEyODEx
IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNyb3Nz
VGhyZWFkQ29waWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDOTYxMTUx
ODNDOTVGRjAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFDOTYxMTYxODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzk2MTE3MTgzRDI5NDcwMEQyMDAyRSAvKiBXZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNDM2LDYgKzM0NTIsNyBAQAogCQkJCUE3RDc5MkQ0MTc2N0NCMDkwMDg4MUNC
RSAvKiBBY3Rpdml0eUFzc2VydGlvbi5oICovLAogCQkJCTUxNUU3NzI1MTgzREQ2RjYwMDA3MjAz
RiAvKiBBc3luY1JlcXVlc3QuY3BwICovLAogCQkJCTUxNUU3NzI2MTgzREQ2RjYwMDA3MjAzRiAv
KiBBc3luY1JlcXVlc3QuaCAqLywKKwkJCQk1MUJBMjQ0MzE4NThFRTMwMDBFQTI4MTEgLyogQXN5
bmNUYXNrLmggKi8sCiAJCQkJNEY2MDE0MzAxNTVDNUEzMjAwMUZCREUwIC8qIEJsb2NraW5nUmVz
cG9uc2VNYXAuaCAqLywKIAkJCQlCQ0YxODYzNzE2N0QwNzFFMDBBMUE4NUEgLyogQ2FjaGVNb2Rl
bC5jcHAgKi8sCiAJCQkJQkMzMDY1RjkxMjU5MzQ0RTAwRTcxMjc4IC8qIENhY2hlTW9kZWwuaCAq
LywKQEAgLTM0NTMsNiArMzQ3MCw4IEBACiAJCQkJMEZCNjU5MjIxMjA4QjREQjAwNDQ4MTZDIC8q
IERyYXdpbmdBcmVhSW5mby5oICovLAogCQkJCThDRkVDRTkzMTQ5MEYxNDAwMDJBQUEzMiAvKiBF
ZGl0b3JTdGF0ZS5jcHAgKi8sCiAJCQkJMUFBNDFBQjQxMkMwMkVDNDAwMkJFNjdCIC8qIEVkaXRv
clN0YXRlLmggKi8sCisJCQkJNTE0NkEzMzUxODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVTeXN0ZW1I
ZWxwZXIuY3BwICovLAorCQkJCTUxNDZBMzM2MTg1OTM5MjYwMDZFNjg2NyAvKiBGaWxlU3lzdGVt
SGVscGVyLmggKi8sCiAJCQkJNzUyQTgwNzYxODNENkRBNzAwM0Q2NTlFIC8qIEZpbHRlckl0ZXJh
dG9yLmggKi8sCiAJCQkJQkNFODFEOEExMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmNwcCAq
LywKIAkJCQlCQ0U4MUQ4QjEzMTlGN0VGMDAyNDE5MTAgLyogRm9udEluZm8uaCAqLywKQEAgLTM1
MTUsNiArMzUzNCw4IEBACiAJCQkJNTEwRkJCOTkxMjg4Qzk1RTAwQUZGREY0IC8qIFdlYkNvbnRl
eHRNZW51SXRlbURhdGEuaCAqLywKIAkJCQk5MzlBRTc2NTEzMTZFOTlDMDBBRTA2QTYgLyogV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcCAqLywKIAkJCQlCQzFERDdCMTExNERDMzk2MDA1QURBRjMg
LyogV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggKi8sCisJCQkJNTFCQTI0NDUxODU4RjQxNTAwRUEy
ODExIC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCAqLywKKwkJCQk1MTYzMTE4NjE4NTg0NDY2
MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLywKIAkJCQk1MTU3OEI4MjEyMDlF
Q0VGMDBBMzdDNEEgLyogV2ViRGF0YS5oICovLAogCQkJCUJDNTc1NjEyMTI2RTAxMzgwMDZGMEYx
MiAvKiBXZWJFcnJvci5jcHAgKi8sCiAJCQkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdl
YkVycm9yLmggKi8sCkBAIC00MDM3LDYgKzQwNTgsMTUgQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1MTY1NEVGMDE4NEVGMjQxMDA3REM4Mzcg
Lyogc3FsaXRlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1MTY1NEVGQjE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuY3BwICovLAorCQkJCTUxNjU0RUZDMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oICovLAorCQkJKTsKKwkJCXBhdGggPSBzcWxp
dGU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1MTdERDVCQjE4MERBN0M0
MDA4MTY2MEIgLyogRGF0YWJhc2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKQEAgLTQxNjEsMTEgKzQxOTEsMTMgQEAKIAkJNTFFMzUxRjkxODBGNUNGNjAwRTUz
QkU5IC8qIEluZGV4ZWREQiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJNTE2NTRFRjAxODRFRjI0MTAwN0RDODM3IC8qIHNxbGl0ZSAqLywKIAkJCQk1MUQw
RDQyRTE4M0IzNDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAg
Ki8sCiAJCQkJNTFEMEQ0MkYxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24uaCAqLywKIAkJCQk1MUQwRDQzMDE4M0IzNDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLywKIAkJCQk1MTVFNzcyRDE4NDAxNTgw
MDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2UuY3BwICovLAogCQkJCTUxNUU3NzJFMTg0MDE1
ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZS5oICovLAorCQkJCTUxNjU0RUZGMTg0RUYz
NEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTUx
NUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3Bw
ICovLAogCQkJCTUxNUU3NzMyMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXIuaCAqLywKIAkJCSk7CkBAIC01NjE5LDYgKzU2NTEsNyBAQAogCQkJCUJDMDMyREE5
MTBGNDM3RDEwMDU4QzE1QSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUU5
NjZEMTEyRkFGNTcwMDZCQ0MyNCAvKiBBdHRhY2htZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUEzMTczMjEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTFCQTI0NDQxODU4RUUzMDAwRUEyODExIC8qIEFzeW5jVGFzay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTEyRjU4OTcxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDQ1QjlGMTg0RDVGQjUwMDRCMzQx
NCAvKiBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEyRjU4OTkxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5l
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC01Njg4LDYgKzU3MjEsNyBAQAogCQkJCUJDNjQ2OTcwMTFE
QkU2MDMwMDY0NTVCMCAvKiBBUElBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQ0IwQ0Ix
MjE1RTMyMTAwREU1OUNBIC8qIEltbXV0YWJsZURpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMjA0RUUzMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTE0NkEzMzgxODU5MzkyNjAwNkU2ODY3IC8qIEZpbGVTeXN0ZW1IZWxwZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUVFQkEyMTI3NzYxRDAwMDMzMjJCOCAvKiBJbmplY3Rl
ZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RUVCQTQxMjc3
NjFENjAwMzMyMkI4IC8qIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFRTdEQzUxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVjdGVkQnVuZGxl
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTU3MDYsNiArNTc0MCw3IEBACiAJCQkJQkM4MTQ3
QTkxMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFnZVBvbGljeUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QjAxMUUzQzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVu
ZGxlUGFnZVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTlFMzI4OTE4MjE2MzY5MDBG
NUQwNEMgLyogV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2
NTRFRkUxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMzRTBEMTEyNDA4RTg2MDAzNjBGM0YgLyogSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNERGNzcxMjBC
NUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQjBCMERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVzZXJNZXNz
YWdlQ29kZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTU3NTcsNiArNTc5Miw3IEBACiAJCQkJMUFC
NDc0RTAxODRENDQ2QTAwNTFCNjIyIC8qIFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUEyRDg0OEIxMjdGNkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmllckRh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTQ5NzY4MTFGRjY1OEUwMDQ4QjQ2NCAvKiBOUEpT
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTYzMTE4NzE4NTg0NDY2MDA1MzQ2NDcgLyog
V2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEUyMTg0RDQ0
ODAwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTJEODJBNTEyN0Y0RUFCMDAxRUI5NjIgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMkQ4NDNBMTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1l
c3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTU5MTYsNiArNTk1Miw3
IEBACiAJCQkJQkNBQzExMUYxMkM5MkMxRjAwQjA4RUVFIC8qIFdlYkRhdGFiYXNlTWFuYWdlclBy
b3h5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjJBNzZCOTEyQjFCMjVGMDAwNUYxQjYg
LyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFCN0Q3MkMxMjg4Q0FBRDAwQ0ZEMDhDIC8qIFdlYkRvd25sb2FkQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MTY1NEYwMDE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyRDdCMTBGNDM3OEQwMDU4QzE1
QSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EwRUY5RjEyMzMyNjQy
MDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMw
MzJEN0QxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MTkzLDYgKzcyMzAsNyBAQAogCQkJCTFBNDRCOTU3MTZCNzM3QUEwMEI3QkJEOCAvKiBT
dG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZGNDkwMDE4MzNE
RTc4MDA5QUIxNUEgLyogV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxN0RENUJFMTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTY1NEVGRDE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2QkQ4
NUUxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFaWjQxN0VGMTJDMDBEODcwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMzUxRkYxODBGNUQwRjAwRTUzQkU5IC8qIERhdGFiYXNl
UHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTczMTYsNiArNzM1NCw3IEBACiAJCQkJMzNE
M0EzQzExMzM5NjBCMDAwNzA5QkU0IC8qIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMzRDNBM0M4MTMzOTYxNzkwMDcwOUJFNCAvKiBXZWJNZWRpYUNhY2hlTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzM0QzQTNCQTEzMzk2
MDYyMDA3MDlCRTQgLyogV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk1MTQ2QTMzNzE4NTkzOTI2MDA2RTY4NjcgLyogRmlsZVN5c3RlbUhlbHBlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzM0QzQTNDQTEzMzk2MTc5MDA3MDlCRTQgLyogV2ViTWVkaWFD
YWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MDk4NTRFQzEyQkM0RTE3MDAwQUQwODAgLyogV2ViTWVtb3J5U2FtcGxlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5MDk4NTRFRTEyQkM0RTE4MDAwQUQwODAgLyogV2ViTWVtb3J5U2FtcGxlci5t
YWMubW0gaW4gU291cmNlcyAqLywKQEAgLTc1MDEsNiArNzU0MCw3IEBACiAJCQkJMUFDNzUzN0Ix
ODNBOUZEQjAwNzJDQjE1IC8qIFBhZ2VMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0MDc2MDcxMjRGRjAyNzAwNjhGMjBBIC8qIFdLVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0Q1RUJCRTE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1RocmVhZENv
cGllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzYwOTEyNEZGMDI3MDA2OEYyMEEgLyog
V0tVUkwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MUIxMjRGRjAzNzAwNjhGMjBBIC8q
IFdLVVJMQ0YubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzQwNzYwQjEyNEZGMDI3MDA2OEYyMEEg
LyogV0tVUkxSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219099</attachid>
            <date>2013-12-12 11:09:10 -0800</date>
            <delta_ts>2013-12-12 13:42:14 -0800</delta_ts>
            <desc>Patch v6 - Move database directory creation back into the database process.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>79415</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzY3ODM5MS4uZTk3NDcxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMi0xMiAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGF0YWJhc2VQcm9j
ZXNzIEluZGV4ZWREQjogRXN0YWJsaXNoIGEgbWV0YWRhdGEgYmFja2luZyBzdG9yZSBvbiBkaXNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjUyNTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1dURlN0cmluZy5oOiBFeHBvcnQgdG9VSW50NjRTdHJpY3QoKS4KKwogMjAxMy0xMi0xMCAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIEhh
c2hNYXAgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhbiBpbml0aWFsaXplciBsaXN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuaAppbmRleCAzYzQyNGI0Li5iM2Q4NDA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3Ry
aW5nLmgKQEAgLTM2OCw3ICszNjgsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIGludCB0b0ludFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0Owog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB1bnNpZ25lZCB0b1VJbnRTdHJpY3QoYm9vbCogb2sg
PSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgaW50
NjRfdCB0b0ludDY0U3RyaWN0KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7Ci0g
ICAgdWludDY0X3QgdG9VSW50NjRTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBj
b25zdDsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgdWludDY0X3QgdG9VSW50NjRTdHJpY3Qo
Ym9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgICBpbnRwdHJfdCB0b0ludFB0
clN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogCiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGludCB0b0ludChib29sKiBvayA9IDApIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBjYTdjNDgzLi4yMGQzM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
Nzk5LDYgKzc5OSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhj
ZXB0aW9uLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3Bw
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcAogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDZhMzllOS4uMWJmZTc2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEzLTEyLTEyICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBEYXRhYmFzZVByb2Nlc3MgSW5kZXhlZERCOiBF
c3RhYmxpc2ggYSBtZXRhZGF0YSBiYWNraW5nIHN0b3JlIG9uIGRpc2sKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTI1OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlYWNoIENyb3NzVGhyZWFkQ29waWVy
IGhvdyB0byBoYW5kbGUgSURCRGF0YWJhc2VNZXRhZGF0YS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6Omlzb2xhdGVkQ29w
eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhOjppc29sYXRlZENvcHkpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNvcHkpOiBBZGQgYW4gSURCRGF0YWJhc2VNZXRhZGF0
YSBzcGVjaWFsaXphdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5o
OgorCiAyMDEzLTEyLTExICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBbQ1NTIFNoYXBlc10gSGlnaGxpZ2h0IG1hcmdpbi1zaGFwZSBm
b3Igc2hhcGUtb3V0c2lkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDk5Zjdh
Yi4uNDFkM2E3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xODI3LDYgKzE4
MjcsNyBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmggXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0
YWRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VN
ZXRhZGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxNzg4NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlTWV0YWRhdGEuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSURCRGF0YWJh
c2VNZXRhZGF0YSBJREJEYXRhYmFzZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAorewor
ICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgcmVzdWx0OworICAgIHJlc3VsdC5pZCA9IGlkOworICAg
IHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICByZXN1bHQubWF4T2JqZWN0U3RvcmVJZCA9
IG1heE9iamVjdFN0b3JlSWQ7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5
KCk7CisKKyAgICBPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG9iamVjdFN0b3Jl
cy5iZWdpbigpOworICAgIE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmpl
Y3RTdG9yZXMuZW5kKCk7CisgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCisgICAgICAgIHJlc3Vs
dC5vYmplY3RTdG9yZXMuc2V0KGktPmtleSwgaS0+dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAoreworICAgIElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEgcmVzdWx0OworICAgIHJlc3VsdC5pZCA9IGlkOworICAgIHJlc3VsdC5hdXRvSW5j
cmVtZW50ID0gYXV0b0luY3JlbWVudDsKKyAgICByZXN1bHQubWF4SW5kZXhJZCA9IG1heEluZGV4
SWQ7CisKKyAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVzdWx0
LmtleVBhdGggPSBrZXlQYXRoLmlzb2xhdGVkQ29weSgpOworCisgICAgSW5kZXhNYXA6OmNvbnN0
X2l0ZXJhdG9yIGkgPSBpbmRleGVzLmJlZ2luKCk7CisgICAgSW5kZXhNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGluZGV4ZXMuZW5kKCk7CisgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCisgICAg
ICAgIHJlc3VsdC5pbmRleGVzLnNldChpLT5rZXksIGktPnZhbHVlLmlzb2xhdGVkQ29weSgpKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0lEQkluZGV4TWV0YWRhdGEgSURCSW5kZXhNZXRh
ZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJJbmRleE1ldGFkYXRhIHJlc3Vs
dDsKKyAgICByZXN1bHQuaWQgPSBpZDsKKyAgICByZXN1bHQudW5pcXVlID0gdW5pcXVlOworICAg
IHJlc3VsdC5tdWx0aUVudHJ5ID0gbXVsdGlFbnRyeTsKKworICAgIHJlc3VsdC5uYW1lID0gbmFt
ZS5pc29sYXRlZENvcHkoKTsKKyAgICByZXN1bHQua2V5UGF0aCA9IGtleVBhdGguaXNvbGF0ZWRD
b3B5KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlTWV0YWRhdGEuaAppbmRleCBj
ZGE1NjRkLi5kZGE1M2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oCkBAIC01Myw2ICs1Myw4IEBAIHN0cnVjdCBJ
REJJbmRleE1ldGFkYXRhIHsKICAgICBib29sIHVuaXF1ZTsKICAgICBib29sIG11bHRpRW50cnk7
CiAKKyAgICBJREJJbmRleE1ldGFkYXRhIGlzb2xhdGVkQ29weSgpIGNvbnN0OworCiAgICAgc3Rh
dGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7CiB9OwogCkBAIC03Nyw2ICs3OSw3IEBA
IHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50
NjRfdCwgSURCSW5kZXhNZXRhZGF0YT4gSW5kZXhNYXA7CiAgICAgSW5kZXhNYXAgaW5kZXhlczsK
IAorICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiB9Owog
CiBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7CkBAIC0xMjAsNiArMTIzLDggQEAgc3RydWN0
IElEQkRhdGFiYXNlTWV0YWRhdGEgewogICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZDsKIAog
ICAgIE9iamVjdFN0b3JlTWFwIG9iamVjdFN0b3JlczsKKworICAgIElEQkRhdGFiYXNlTWV0YWRh
dGEgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDdkOGM4ZDIuLjE5YzVhNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBA
IC0yNDgsNiArMjQ4LDE4IEBAIGJvb2wgSURCS2V5UGF0aDo6b3BlcmF0b3I9PShjb25zdCBJREJL
ZXlQYXRoJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0lEQktleVBhdGgg
SURCS2V5UGF0aDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBJREJLZXlQYXRoIHJlc3Vs
dDsKKyAgICByZXN1bHQubV90eXBlID0gbV90eXBlOworICAgIHJlc3VsdC5tX3N0cmluZyA9IG1f
c3RyaW5nLmlzb2xhdGVkQ29weSgpOworCisgICAgcmVzdWx0Lm1fYXJyYXkucmVzZXJ2ZUNhcGFj
aXR5KG1fYXJyYXkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJyYXku
c2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5tX2FycmF5LmFwcGVuZChtX2FycmF5W2ldLmlz
b2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oCmluZGV4IDNkMDAxODIuLjEzNWY2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJREJLZXlQYXRo
JiBvdGhlcikgY29uc3Q7CiAKKyAgICBJREJLZXlQYXRoIGlzb2xhdGVkQ29weSgpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmluZyBtX3N0cmluZzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KaW5kZXggMzEzZGE3YS4uY2Q1NjJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
QEAgLTM2NCw5ICszNjQsMTEgQEAgX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2Vs
bGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjMyZGlkQ2FuY2VsQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VFUktOU18yM0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRQogX19aTjdX
ZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjZjYW5jZWxFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRh
YmFzZTExdGFibGVFeGlzdHNFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUxNFNRTGl0ZURh
dGFiYXNlMTJsYXN0RXJyb3JNc2dFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTE0ZXhl
Y3V0ZUNvbW1hbmRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNl
NG9wZW5FUktOM1dURjZTdHJpbmdFYgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZTVjbG9z
ZUV2CitfX1pON1dlYkNvcmUxNFNRTGl0ZURhdGFiYXNlOWxhc3RFcnJvckV2CiBfX1pON1dlYkNv
cmUxNFNRTGl0ZURhdGFiYXNlQzFFdgogX19aTjdXZWJDb3JlMTRTUUxpdGVEYXRhYmFzZUQxRXYK
IF9fWk43V2ViQ29yZTE0U2NoZW1lUmVnaXN0cnkyNHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbEVS
S04zV1RGNlN0cmluZ0UKQEAgLTU3MSwxMiArNTczLDE0IEBAIF9fWk43V2ViQ29yZTE1UHJvdGVj
dGlvblNwYWNlQzFFdgogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QyMWh0dHBQaXBlbGlu
aW5nRW5hYmxlZEV2CiBfX1pON1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDI0c2V0SFRUUFBpcGVs
aW5pbmdFbmFibGVkRWIKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTJnZXRDb2x1bW5J
bnRFaQorX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxMmlzQ29sdW1uTnVsbEVpCiBfX1pO
N1dlYkNvcmUxNVNRTGl0ZVN0YXRlbWVudDEzZ2V0Q29sdW1uVGV4dEVpCiBfX1pON1dlYkNvcmUx
NVNRTGl0ZVN0YXRlbWVudDE0ZXhlY3V0ZUNvbW1hbmRFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVT
dGF0ZW1lbnQyMWdldENvbHVtbkJsb2JBc1N0cmluZ0VpCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0
YXRlbWVudDIyaXNDb2x1bW5EZWNsYXJlZEFzQmxvYkVpCiBfX1pON1dlYkNvcmUxNVNRTGl0ZVN0
YXRlbWVudDRzdGVwRXYKIF9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50NXJlc2V0RXYKK19f
Wk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50N2JpbmRJbnRFaWkKIF9fWk43V2ViQ29yZTE1U1FM
aXRlU3RhdGVtZW50N3ByZXBhcmVFdgogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ4Ymlu
ZEJsb2JFaVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQ4Ymlu
ZFRleHRFaVJLTjNXVEY2U3RyaW5nRQpAQCAtNjkxLDYgKzY5NSw3IEBAIF9fWk43V2ViQ29yZTE3
U1FMaXRlVHJhbnNhY3Rpb25EMUV2CiBfX1pON1dlYkNvcmUxN1N1YnJlc291cmNlTG9hZGVyNmNy
ZWF0ZUVQTlNfNUZyYW1lRVBOU18xNENhY2hlZFJlc291cmNlRVJLTlNfMTVSZXNvdXJjZVJlcXVl
c3RFUktOU18yMVJlc291cmNlTG9hZGVyT3B0aW9uc0UKIF9fWk43V2ViQ29yZTE3Y2FjaGVET01T
dHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE4zSlNDOVN0cnVjdHVyZUVQS05TMl85
Q2xhc3NJbmZvRQogX19aTjdXZWJDb3JlMTdkcmF3TGF5ZXJDb250ZW50c0VQOUNHQ29udGV4dFBO
U18xNVBsYXRmb3JtQ0FMYXllckVSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG01RU5TNF8x
NUNyYXNoT25PdmVyZmxvd0VFRQorX19aTjdXZWJDb3JlMTdlbmNvZGVGb3JGaWxlTmFtZUVSS04z
V1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJD
b3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdz
ZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVT
NV9SS04zV1RGNlN0cmluZ0UKQEAgLTc4NSw2ICs3OTAsOCBAQCBfX1pON1dlYkNvcmUyMHByZXZp
b3VzTGluZVBvc2l0aW9uRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FaU5TXzEyRWRpdGFibGVUeXBl
RQogX19aTjdXZWJDb3JlMjBwcm90b2NvbElzSmF2YVNjcmlwdEVSS04zV1RGNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTIwdG9VSW50MzJFbmZvcmNlUmFuZ2VFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pT
VmFsdWVFCiBfX1pON1dlYkNvcmUyMUJhY2tGb3J3YXJkQ29udHJvbGxlcjExaXRlbUF0SW5kZXhF
aQorX19aTjdXZWJDb3JlMjFDcm9zc1RocmVhZENvcGllckJhc2VJTGIwRUxiMEVOM1dURjZTdHJp
bmdFRTRjb3B5RVJLUzJfCitfX1pON1dlYkNvcmUyMUNyb3NzVGhyZWFkQ29waWVyQmFzZUlMYjBF
TGIwRU5TXzE5SURCRGF0YWJhc2VNZXRhZGF0YUVFNGNvcHlFUktTMV8KIF9fWk43V2ViQ29yZTIx
TWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3RhbGxFdgogX19aTjdXZWJDb3JlMjFOZXR3b3JrU3Rv
cmFnZVNlc3Npb24yMWRlZmF1bHRTdG9yYWdlU2Vzc2lvbkV2CiBfX1pON1dlYkNvcmUyMU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjI1c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbkV2CkBAIC0xNTkwLDYg
KzE1OTcsNyBAQCBfX1pOSzdXZWJDb3JlMThSZW5kZXJMYXllckJhY2tpbmcyMGNvbXBvc2l0aW5n
TGF5ZXJUeXBlRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIxMWlzU3VzcGVu
ZGVkRXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0aXZl
QW5pbWF0aW9uc0VQTlNfOERvY3VtZW50RQogX19aTks3V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJv
bGxlcjMzYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkRXYKK19fWk5LN1dlYkNvcmUx
OUlEQkRhdGFiYXNlTWV0YWRhdGExMmlzb2xhdGVkQ29weUV2CiBfX1pOSzdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMTJnZXRIaWdobGlnaHRFUE5TXzlIaWdobGlnaHRFCiBfX1pOSzdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjlidWlsZE9iamVjdEZvckhpZ2hsaWdodGVkTm9kZUV2
CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTBodHRwTWV0aG9kRXYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3
ZGNjOTBjLi40ZTlmMDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCQkyRTQzNDY1NDBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjQyMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJU
aHJlYWQuY3BwICovOyB9OwogCQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQz
NDY0MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU0MzQ2NTgwRjU0NkE5OTAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFNDM0NjU2MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENv
cGllci5jcHAgKi87IH07Ci0JCTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVh
ZENvcGllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU0MzQ2NTcwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IH07CisJ
CTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NTcwRjU0NkE5OTAw
QjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU3NTgyRUUxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmls
ZVJlYWRlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRTc1ODJFRDEyNzY0RjI2MDA2MjYyOEIgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cCAqLzsgfTsKIAkJMkU3NTg0MUQxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0
MUExMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwICovOyB9OwogCQkyRTc1
ODQxRTEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhC
IC8qIEZpbGVSZWFkZXJMb2FkZXIuaCAqLzsgfTsKQEAgLTE3NTEsNiArMTc1MSw3IEBACiAJCTUx
NjBGNDk4MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBGNDk3MEIwQUE3NUYwMEMxRDJB
RiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLzsgfTsKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZF
IC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5j
cHAgKi87IH07CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjMx
MUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE2MzExN0QxODUxMjQyQjAwNTM0NjQ3IC8q
IElEQkRhdGFiYXNlTWV0YWRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE2MzExN0MxODUxMjQyQjAwNTM0NjQ3IC8qIElEQkRhdGFiYXNlTWV0
YWRhdGEuY3BwICovOyB9OwogCQk1MTY0RUQ0MzE4MzIwOEM3MDBFQThGRjEgLyogSURCU2VydmVy
Q29ubmVjdGlvbkxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NEVENDExODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCLmNwcCAqLzsgfTsKIAkJNTE2NEVENDQxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNl
cnZlckNvbm5lY3Rpb25MZXZlbERCLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTY0RUQ0MjE4MzIwOEM3MDBFQThGRjEgLyogSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREIuaCAqLzsgfTsKIAkJNTE2NjBBQjYxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkJh
Y2tpbmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NjBBQjAxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZUxl
dmVsREIuY3BwICovOyB9OwpAQCAtODUwMSw2ICs4NTAyLDcgQEAKIAkJNTE2MEY0OTcwQjBBQTc1
RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gSGlzdG9yeUl0ZW1NYWMubW07IHBhdGggPSBtYWMvSGlzdG9yeUl0ZW1N
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjJDN0YyMTFGNzdFRkEwMDYx
MkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRh
ZGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFz
ZU1ldGFkYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDExODMy
MDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NEVENDIxODMyMDhDNzAwRUE4RkYx
IC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNjYwQUIwMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVM
ZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkJhY2tp
bmdTdG9yZUxldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxNDIs
NiArMTcxNDQsNyBAQAogCQkJCTUxRDcxOTgzMTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFz
ZUVycm9yLmggKi8sCiAJCQkJNTFENzE5ODQxODExMDZERjAwMTZEQzUxIC8qIElEQkRhdGFiYXNl
RXhjZXB0aW9uLmNwcCAqLywKIAkJCQk1MUQ3MTk4NTE4MTEwNkRGMDAxNkRDNTEgLyogSURCRGF0
YWJhc2VFeGNlcHRpb24uaCAqLywKKwkJCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURC
RGF0YWJhc2VNZXRhZGF0YS5jcHAgKi8sCiAJCQkJNTFDOTYxMUExODNEMkI4MDAwRDIwMDJFIC8q
IElEQkRhdGFiYXNlTWV0YWRhdGEuaCAqLywKIAkJCQk1MUQ3MTk4NjE4MTEwNkRGMDAxNkRDNTEg
LyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCAqLywKIAkJCQk1MUQ3MTk4NzE4MTEwNkRGMDAxNkRD
NTEgLyogSURCRXZlbnREaXNwYXRjaGVyLmggKi8sCkBAIC0yODIyOCw2ICsyODIzMSw3IEBACiAJ
CQkJQjJDM0RBM0QwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkFGRkM5OTBEMDBBNURGMDAzMDA3NEQgLyogVGV4dENvZGVjTWFjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTNGMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29k
ZWNVc2VyRGVmaW5lZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTYzMTE3RDE4NTEyNDJCMDA1
MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMz
REE0MTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjVVRGMTYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTFGRjhGNkMxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0
Q29kZWNVVEY4LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmluZGV4IDVlOGJhNzkuLjY1ZGY0N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTQwLDYgKzQwLDEw
IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2luY2x1ZGUgIklEQkRh
dGFiYXNlTWV0YWRhdGEuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFVSTD46OlR5cGUgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBmYWxzZSwgVVJMPjo6Y29weShjb25zdCBVUkwmIHVybCkKQEAgLTY3LDYg
KzcxLDE1IEBAIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFJlc291cmNlUmVz
cG9uc2U+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzCiAgICAgcmV0dXJuIHJlc3BvbnNlLmNv
cHlEYXRhKCk7CiB9CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworQ3Jvc3NUaHJl
YWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YT46OlR5cGUgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YT46OmNv
cHkoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCit7CisgICAgcmV0dXJuIG1l
dGFkYXRhLmlzb2xhdGVkQ29weSgpOworfQorCisjZW5kaWYKKwogLy8gVGVzdCBDcm9zc1RocmVh
ZENvcGllciB1c2luZyBDT01QSUxFX0FTU0VSVC4KIAogLy8gVmVyaWZ5IHRoYXQgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQgb2JqZWN0cyBnZXQgaGFuZGxlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAppbmRleCBjNzdjOTFiLi5mNGM5M2Q1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTE0NSw2
ICsxNDUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgVHlwZSBjb3B5
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB9OwogCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisgICAgc3RydWN0IElEQkRhdGFiYXNlTWV0YWRhdGE7CisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VN
ZXRhZGF0YT4geworICAgICAgICB0eXBlZGVmIElEQkRhdGFiYXNlTWV0YWRhdGEgVHlwZTsKKyAg
ICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CisgICAg
fTsKKyNlbmRpZgorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdHJ1Y3QgQ3Jvc3NU
aHJlYWRDb3BpZXIgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPENyb3NzVGhyZWFkQ29w
aWVyQmFzZUhlbHBlcjo6SXNDb252ZXJ0aWJsZVRvSW50ZWdlcjxUPjo6dmFsdWUsIENyb3NzVGhy
ZWFkQ29waWVyQmFzZUhlbHBlcjo6SXNUaHJlYWRTYWZlUmVmQ291bnRlZFBvaW50ZXI8VD46OnZh
bHVlLCBUPiB7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5OGRhNWMyLi4yZjgwMzU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTMtMTItMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCisgICAgICAgIERhdGFiYXNlUHJvY2VzcyBJbmRleGVkREI6IEVzdGFibGlz
aCBhIG1ldGFkYXRhIGJhY2tpbmcgc3RvcmUgb24gZGlzaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MjU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIERhdGFiYXNlUHJvY2VzcyBhbHJlYWR5IGhh
cyBhbiAiSW5kZXhlZCBEYXRhYmFzZSBwYXRoIi4KKyAgICAgICAgRWFjaCBTZWN1cml0eU9yaWdp
biB3aXRoIGluZGV4ZWQgZGF0YWJhc2VzIHdpbGwgaGF2ZSBhIHN1YmRpcmVjdG9yeSB1bmRlciB0
aGUgcGF0aC4KKyAgICAgICAgRWFjaCBpbmRleGVkIGRhdGFiYXNlIHdpbGwgaGF2ZSBhIHN1YmRp
cmVjdG9yeSB1bmRlciBpdHMgU2VjdXJpdHlPcmlnaW4ncyBwYXRoLgorICAgICAgICBJbnNpZGUg
dGhhdCBkaXJlY3Rvcnkgd2lsbCBleGlzdCAoMSkgbWV0YWRhdGEgZGF0YWJhc2UsIGFuZCAwLU4g
T2JqZWN0U3RvcmUgZGF0YWJhc2VzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXN0YWJsaXNoZXMg
dGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIHRoZSAoMSkgbWV0YWRhdGEgZGF0YWJhc2UuCisK
KyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjppbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKTogQXN5
bmNocm9ub3VzbHkgZW5zdXJlIHRoZSBpbmRleGVkIGRhdGFiYXNlIGRpcmVjdG9yeSBleGlzdHMu
CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6ZW5zdXJlSW5kZXhlZERhdGFiYXNl
UmVsYXRpdmVQYXRoRXhpc3RzKTogQWxsb3cgYW55b25lIHRvIG1ha2UgbmVjZXNzYXJ5IGRpcmVj
dG9yaWVzIHJlbGF0aXZlIHRvCisgICAgICAgICAgdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0
b3J5LgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMp
OgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmFic29sdXRlSW5kZXhlZERhdGFi
YXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aCk6IEluc3RlYWQgb2YgZXhwb3NpbmcgdGhl
IGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5LCAKKyAgICAgICAgICBnaXZlIERhdGFiYXNlUHJv
Y2VzcyBhIG1ldGhvZCB0byBhbGxvdyBvdGhlcnMgdG8gY29tcHV0ZSBhIHBhdGggcmVsYXRpdmUg
dG8gdGhlIGluZGV4ZWQgZGF0YWJhc2UgZGlyZWN0b3J5LgorICAgICAgICAoV2ViS2l0OjpEYXRh
YmFzZVByb2Nlc3M6OnBvc3REYXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFz
ZVByb2Nlc3M6OnBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKiBEYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vz
czo6cXVldWUpOgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKToKKwor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2Up
OgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6ZmlsZW5hbWVGb3JEYXRhYmFz
ZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd24pOiBN
ZXRob2QgdG8gY2xlYW5seSBzaHV0ZG93biBhIGRhdGFiYXNlLCBlbXB0eWluZyBpdHMgdGFzayBh
bmQgcmVxdWVzdCBxdWV1ZXMuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpn
ZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpVbmlx
dWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSk6IFRvIGJlIHJ1
biBvbiB0aGUgZGF0YWJhc2Ugd29yayBxdWV1ZSwgZXN0YWJsaXNoZXMgYSBiYWNraW5nIHN0b3Jl
CisgICAgICAgICAgYW5kIGV4dHJhY3RzIG1ldGFkYXRhIGZyb20gaXQuCisgICAgICAgIChXZWJL
aXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRh
KTogQ2FsbGJhY2sgb25jZSBtZXRhZGF0YSBmcm9tIHRoZSBiYWNraW5nIHN0b3JlIGlzIHJlYWR5
IGZvciB1c2UuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0ZURh
dGFiYXNlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnBv
c3RNYWluVGhyZWFkVGFzayk6IEFkZCBhIG1haW4gdGhyZWFkIHRhc2sgZm9yIHRoaXMgZGF0YWJh
c2UuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtTmV4dE1haW5U
aHJlYWRUYXNrKToKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRh
YmFzZVRhc2spOiBBZGQgYSBkYXRhYmFzZSBxdWV1ZSB0YXNrIGZvciB0aGlzIGRhdGFiYXNlLgor
ICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHREYXRhYmFzZVRh
c2spOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJh
c2UuaDoKKworICAgICAgICBBZGQgYSB2aXJ0dWFsIGJhY2tpbmcgc3RvcmUgaW50ZXJmYWNlOgor
ICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmU6On5VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZSk6CisKKyAgICAgICAgQWRkIGEgU1FM
aXRlIGltcGxlbWVudGF0aW9uIG9mIHRoYXQgaW50ZXJmYWNlOgorICAgICAgICAqIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjpVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGVB
bmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpleHRyYWN0RXhpc3RpbmdNZXRhZGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpvcGVuU1FM
aXRlRGF0YWJhc2VBdFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hNZXRhZGF0YSk6CisgICAgICAgICogRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuaDoKKworICAgICAgICBBZGQgYSBnZW5lcmFsIHB1cnBvc2UgYXN5bmNocm9ub3Vz
IHRhc2sgdGhhdCBkb2VzIGNyb3NzIHRocmVhZCBjb3B5aW5nOgorICAgICAgICAqIFNoYXJlZC9B
c3luY1Rhc2suaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkFzeW5jVGFzazo6fkFzeW5jVGFz
ayk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jVGFzazo6QXN5bmNUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6Y3JlYXRlQXN5bmNUYXNrKToKKworICAgICAgICBBZGQgbW9yZSBpc29sYXRlZCBjb3Bp
ZXJzIGFuZCBpbnRyb2R1Y2UgV2ViS2l0IENyb3NzVGhyZWFkQ29waWVyIHNwZWNpYWxpemF0aW9u
czoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
Zmllcjo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oOgorCisgICAgICAgICogU2hhcmVkL1NlY3Vy
aXR5T3JpZ2luRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNlY3VyaXR5T3JpZ2luRGF0YTo6
ZGF0YWJhc2VGaWxlbmFtZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpTZWN1cml0eU9y
aWdpbkRhdGE6OmNhblNoYXJlRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYktpdDo6U2VjdXJpdHlP
cmlnaW5EYXRhOjppc29sYXRlZENvcHkpOgorICAgICAgICAqIFNoYXJlZC9TZWN1cml0eU9yaWdp
bkRhdGEuaDoKKworICAgICAgICAqIFNoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjo6OmNvcHkpOgorICAgICAgICAqIFNoYXJlZC9XZWJDcm9zc1RocmVh
ZENvcGllci5oOgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCiAyMDEzLTEyLTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIHBsYXRmb3JtIHNwZWNpZmljIGd1bmsgZnJvbSBXZWJVUkxSZXF1ZXN0
IGFuZCBXZWJVUkxSZXNwb25zZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvRGF0YWJhc2VQcm9jZXNzLmNwcAppbmRleCBiMWJkYzdjLi45MWVkZmMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAt
MjgsMTAgKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAorI2luY2x1
ZGUgIkFzeW5jVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJVbmlxdWVJ
REJEYXRhYmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIApAQCAtODcsMTMgKzkyLDU5IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpy
ZW1vdmVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2Up
CiAgICAgY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyID0gZGF0
YWJhc2UuaWRlbnRpZmllcigpOwogICAgIEFTU0VSVChtX2lkYkRhdGFiYXNlcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAKLSAgICAvLyBGSVhNRTogUGVyZm9ybSBuZWNlc3Nhcnkgc2h1dCBkb3du
IG9mIHRoZSB1bmlxdWUgZGF0YWJhc2UgYmVmb3JlIGl0IGlzIGFjdHVhbGx5IGRlc3Ryb3llZC4K
ICAgICBtX2lkYkRhdGFiYXNlcy5yZW1vdmUoaWRlbnRpZmllcik7CiB9CiAKIHZvaWQgRGF0YWJh
c2VQcm9jZXNzOjppbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKGNvbnN0IERhdGFiYXNlUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICBtX2luZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSA9IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OworCisgICAg
ZW5zdXJlSW5kZXhlZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhpc3RzKFN0cmluZ0ltcGw6OmVtcHR5
KCkpOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6ZW5zdXJlSW5kZXhlZERhdGFiYXNlUmVs
YXRpdmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKQoreworICAgIHBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQXN5bmNUYXNrKHRoaXMsICZEYXRhYmFzZVByb2Nlc3M6OmVuc3Vy
ZVBhdGhFeGlzdHMsIGFic29sdXRlSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0
aXZlUGF0aChyZWxhdGl2ZVBhdGgpKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjplbnN1
cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpKQorICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGFsbCBkaXJlY3RvcmllcyBmb3IgcGF0aCAnJXMnIiwg
cGF0aC51dGY4KCkuZGF0YSgpKTsKK30KKworU3RyaW5nIERhdGFiYXNlUHJvY2Vzczo6YWJzb2x1
dGVJbmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmVQYXRoKQoreworICAgIC8vIEZJWE1FOiBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoKSB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCB0byBhcHBlbmQgaW5kaXZpZHVhbCBhdG9taWMg
Y29tcG9uZW50cy4KKyAgICAvLyBXZSBkb24ndCBoYXZlIGEgZnVuY3Rpb24gZGVzaWduZWQgdG8g
YXBwZW5kIGEgbXVsdGktY29tcG9uZW50IHN1YnBhdGgsIGJ1dCB3ZSBzaG91bGQuCisgICAgcmV0
dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwg
cmVsYXRpdmVQYXRoKTsKK30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OnBvc3REYXRhYmFzZVRh
c2soc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gdGFzaykKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJhc2VUYXNrTXV0ZXgp
OworCisgICAgbV9kYXRhYmFzZVRhc2tzLmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOworCisgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goYmluZCgmRGF0YWJhc2VQcm9jZXNzOjpwZXJmb3JtTmV4dERhdGFi
YXNlVGFzaywgdGhpcykpOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6cGVyZm9ybU5leHRE
YXRhYmFzZVRhc2soKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gdGFzazsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2RhdGFiYXNlVGFza011dGV4KTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNl
VGFza3MuaXNFbXB0eSgpKTsKKyAgICAgICAgdGFzayA9IG1fZGF0YWJhc2VUYXNrcy50YWtlRmly
c3QoKTsKKyAgICB9CisKKyAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwogfQogCiB2b2lkIERhdGFi
YXNlUHJvY2Vzczo6Y3JlYXRlRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaCBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaAppbmRleCA4
Mzc3YTRjLi4yNDc1NjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvRGF0YWJhc2VQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0RhdGFiYXNlUHJvY2Vzcy5oCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIFdvcmtRdWV1ZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIEFzeW5jVGFzazsKIGNsYXNzIERhdGFiYXNlVG9X
ZWJQcm9jZXNzQ29ubmVjdGlvbjsKIGNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlOwogCkBAIC01MCw3
ICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4gZ2V0
T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXImKTsKICAgICB2b2lkIHJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRh
dGFiYXNlJik7CiAKLSAgICBXb3JrUXVldWUmIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxXb3JrUXVldWUmPihtX3F1ZXVlLmdldCgpKTsgfQorICAgIHZvaWQgZW5zdXJlSW5kZXhl
ZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBh
YnNvbHV0ZUluZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgoY29uc3Qg
U3RyaW5nJik7CisKKyAgICBXb3JrUXVldWUmIHF1ZXVlKCkgeyByZXR1cm4gbV9xdWV1ZS5nZXQo
KTsgfQogCiBwcml2YXRlOgogICAgIERhdGFiYXNlUHJvY2VzcygpOwpAQCAtNzIsNiArNzYsMTIg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVEYXRhYmFzZVByb2Nlc3MoY29uc3QgRGF0
YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAgdm9pZCBjcmVhdGVEYXRhYmFz
ZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKIAorICAgIHZvaWQgcG9zdERhdGFiYXNlVGFzayhz
dGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPik7CisKKyAgICAvLyBGb3IgZXhlY3V0aW9uIG9uIHdv
cmsgcXVldWUgdGhyZWFkIG9ubHkKKyAgICB2b2lkIHBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKCk7
CisgICAgdm9pZCBlbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYpOworCiAgICAgVmVjdG9y
PFJlZlB0cjxEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24+PiBtX2RhdGFiYXNlVG9XZWJQ
cm9jZXNzQ29ubmVjdGlvbnM7CiAKICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVlOwpAQCAtNzks
NiArODksOSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9y
eTsKIAogICAgIEhhc2hNYXA8VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLCBSZWZQdHI8VW5p
cXVlSURCRGF0YWJhc2U+PiBtX2lkYkRhdGFiYXNlczsKKworICAgIERlcXVlPHN0ZDo6dW5pcXVl
X3B0cjxBc3luY1Rhc2s+PiBtX2RhdGFiYXNlVGFza3M7CisgICAgTXV0ZXggbV9kYXRhYmFzZVRh
c2tNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFi
YXNlLmNwcAppbmRleCBiYzcyNDVjLi5mNmU1MDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcApAQCAtMjksOCArMjksMTIgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCiAKICNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKKyNp
bmNsdWRlICJBc3luY1Rhc2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3MuaCIKICNpbmNs
dWRlICJEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKKyNpbmNsdWRlICJXZWJDcm9zc1RocmVhZENv
cGllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSURCRGF0YWJhc2VNZXRhZGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAK
QEAgLTQwLDEyICs0NCw0MCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogVW5pcXVlSURCRGF0YWJh
c2U6OlVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYg
aWRlbnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICwgbV9wcm9j
ZXNzaW5nRGF0YWJhc2VRdWV1ZVJlcXVlc3RzKGZhbHNlKQorICAgICwgbV9hY2NlcHRpbmdOZXdS
ZXF1ZXN0cyh0cnVlKQorICAgICwgbV9kaWRHZXRNZXRhZGF0YUZyb21CYWNraW5nU3RvcmUoZmFs
c2UpCiB7CisgICAgbV9pbk1lbW9yeSA9ICFpZGVudGlmaWVyLm9wZW5pbmdPcmlnaW4oKS5jYW5T
aGFyZURhdGFiYXNlcyhpZGVudGlmaWVyLm1haW5GcmFtZU9yaWdpbigpKTsKKyAgICBpZiAobV9p
bk1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRWFjaCB1bmlxdWUgSW5kZXhlZCBE
YXRhYmFzZSBleGlzdHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZm9yIHRoZSBkYXRhYmFzZSwgd2hp
Y2ggZXhpc3RzIGluIGEgZGlyZWN0b3J5IHJlcHJlc2VudGluZyBpdHMgb3BlbmluZyBvcmlnaW4u
CisgICAgbV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KGlkZW50aWZpZXIub3BlbmluZ09yaWdpbigpLmRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVy
KCksIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkpOworCisgICAgRGF0YWJhc2VQcm9jZXNzOjpz
aGFyZWQoKS5lbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMobV9kYXRhYmFz
ZVJlbGF0aXZlRGlyZWN0b3J5KTsKIH0KIAogVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJE
YXRhYmFzZSgpCiB7CisgICAgQVNTRVJUKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKTsKKyAgICBB
U1NFUlQobV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpOworfQorCitTdHJpbmcg
VW5pcXVlSURCRGF0YWJhc2U6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkKK3sKKyAgICBBU1NF
UlQoIW1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKS5pc051bGwoKSk7CisKKyAgICBpZiAobV9p
ZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICIlMDAi
OworCisgICAgU3RyaW5nIGZpbGVuYW1lID0gZW5jb2RlRm9yRmlsZU5hbWUobV9pZGVudGlmaWVy
LmRhdGFiYXNlTmFtZSgpKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gIi4iKQorICAgICAgICByZXR1
cm4gIiUyRSI7CisKKyAgICBpZiAoZmlsZW5hbWUgPT0gIi4uIikKKyAgICAgICAgcmV0dXJuICIl
MkUlMkUiOworCisgICAgcmV0dXJuIGZpbGVuYW1lOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYgY29u
bmVjdGlvbikKQEAgLTU5LDcwICs5MSwxNzQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6dW5y
ZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYgY29ubmUKICAg
ICBBU1NFUlQobV9jb25uZWN0aW9ucy5jb250YWlucygmY29ubmVjdGlvbikpOwogICAgIG1fY29u
bmVjdGlvbnMucmVtb3ZlKCZjb25uZWN0aW9uKTsKIAotICAgIGlmIChtX2Nvbm5lY3Rpb25zLmlz
RW1wdHkoKSkKKyAgICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc2h1
dGRvd24oKTsKICAgICAgICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVVbmlxdWVJ
REJEYXRhYmFzZSgqdGhpcyk7CisgICAgfQorfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpz
aHV0ZG93bigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIG1fYWNjZXB0
aW5nTmV3UmVxdWVzdHMgPSBmYWxzZTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZGF0YWJhc2VUYXNrTXV0ZXgpOworICAgICAgICBtX2RhdGFiYXNlVGFza3MuY2xlYXIo
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX21haW5UaHJl
YWRUYXNrTXV0ZXgpOworICAgICAgICBtX21haW5UaHJlYWRUYXNrcy5jbGVhcigpOworICAgIH0K
KworICAgIHdoaWxlICghbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy50YWtlRmlyc3Qo
KTsKKyAgICAgICAgcmVxdWVzdC0+cmVxdWVzdEFib3J0ZWQoKTsKKyAgICB9CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmVucXVldWVEYXRhYmFzZVF1ZXVlUmVxdWVzdChQYXNzUmVmUHRy
PEFzeW5jUmVxdWVzdD4gcmVxdWVzdCkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldE9yRXN0
YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQoYm9vbCwgY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQVNTRVJU
KHJlcXVlc3QpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fYWNj
ZXB0aW5nTmV3UmVxdWVzdHMpIHsKKyAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKGZhbHNlLCBJ
REJEYXRhYmFzZU1ldGFkYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
SWYgd2UndmUgYWxyZWFkeSByZXRyaWV2ZWQgbWV0YWRhdGEgZnJvbSB0aGUgYmFja2luZyBzdG9y
ZSwgcmV0dXJuIGl0IG5vdy4KKyAgICBpZiAobV9kaWRHZXRNZXRhZGF0YUZyb21CYWNraW5nU3Rv
cmUpIHsKKyAgICAgICAgaWYgKG1fbWV0YWRhdGEpCisgICAgICAgICAgICBjb21wbGV0aW9uQ2Fs
bGJhY2sodHJ1ZSwgKm1fbWV0YWRhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
bGV0aW9uQ2FsbGJhY2soZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSk7CiAKLSAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleCk7Ci0gICAgbV9kYXRh
YmFzZVF1ZXVlUmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdW5hbnN3ZXJlZCBtZXRhZGF0YSByZXF1
ZXN0LCBwb3N0IGEgdGFzayB0byBvcGVuIHRoZSBiYWNraW5nIHN0b3JlIGFuZCBnZXQgbWV0YWRh
dGEuCisgICAgaWYgKG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMuaXNFbXB0eSgpKQorICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUFzeW5jVGFzayh0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEsIG1faWRlbnRpZmllciwgYWJzb2x1
dGVEYXRhYmFzZURpcmVjdG9yeSgpKSk7CisKKyAgICAvLyBUaGVuIHJlbWVtYmVyIHRoaXMgbWV0
YWRhdGEgcmVxdWVzdCB0byBiZSBhbnN3ZXJlZCBsYXRlci4KKyAgICBSZWZQdHI8QXN5bmNSZXF1
ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDw+OjpjcmVhdGUoW2NvbXBsZXRpb25DYWxs
YmFjaywgdGhpc10oKSB7CisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayghIW1fbWV0YWRhdGEs
IG1fbWV0YWRhdGEgPyAqbV9tZXRhZGF0YSA6IElEQkRhdGFiYXNlTWV0YWRhdGEoKSk7CisgICAg
fSwgW2NvbXBsZXRpb25DYWxsYmFja10oKSB7CisgICAgICAgIC8vIFRoZSBib29sZWFuIGZsYWcg
dG8gdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgcmVwcmVzZW50cyB3aGV0aGVyIHRoZQorICAgICAg
ICAvLyBhdHRlbXB0IHRvIGdldC9lc3RhYmxpc2ggbWV0YWRhdGEgc3VjY2VlZGVkIG9yIGZhaWxl
ZC4KKyAgICAgICAgLy8gU2luY2Ugd2UncmUgYWJvcnRpbmcgdGhlIGF0dGVtcHQsIGl0IGZhaWxl
ZCwgc28gd2UgYWx3YXlzIHBhc3MgaW4gZmFsc2UuCisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFj
ayhmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YSgpKTsKKyAgICB9KTsKKworICAgIG1fcGVuZGlu
Z01ldGFkYXRhUmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QucmVsZWFzZSgpKTsKK30KKwordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YShjb25zdCBV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VEaXJlY3RvcnkpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNT
RVJUKCFtX2JhY2tpbmdTdG9yZSk7CiAKLSAgICBpZiAobV9wcm9jZXNzaW5nRGF0YWJhc2VRdWV1
ZVJlcXVlc3RzKQorICAgIGlmIChtX2luTWVtb3J5KSB7CisgICAgICAgIExPR19FUlJPUigiU3Vw
cG9ydCBmb3IgaW4tbWVtb3J5IGRhdGFiYXNlcyBub3QgeWV0IGltcGxlbWVudGVkIik7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JhY2tpbmdTdG9yZSA9IFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGUoaWRlbnRpZmllciwgZGF0YWJhc2VEaXJlY3Rv
cnkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBtZXRhZGF0YSA9
IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaE1ldGFkYXRhKCk7CiAKLSAgICBtX3Byb2Nl
c3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHMgPSB0cnVlOwotICAgIERhdGFiYXNlUHJvY2Vzczo6
c2hhcmVkKCkucXVldWUoKS5kaXNwYXRjaChiaW5kKCZVbmlxdWVJREJEYXRhYmFzZTo6cHJvY2Vz
c0RhdGFiYXNlUmVxdWVzdFF1ZXVlLCB0aGlzKSk7CisgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNy
ZWF0ZUFzeW5jVGFzayh0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmVBbmRSZWFkTWV0YWRhdGEsIG1ldGFkYXRhID8gKm1ldGFkYXRhIDogSURCRGF0YWJhc2VNZXRh
ZGF0YSgpLCAhIW1ldGFkYXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnByb2Nl
c3NEYXRhYmFzZVJlcXVlc3RRdWV1ZSgpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1l
dGFkYXRhLCBib29sIHN1Y2Nlc3MpCiB7Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc2luZ0RhdGFiYXNl
UXVldWVSZXF1ZXN0cyk7Ci0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBSZWZQdHI8QXN5
bmNSZXF1ZXN0PiByZXF1ZXN0OwotICAgICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleCk7Ci0gICAgICAgICAgICBpZiAobV9k
YXRhYmFzZVF1ZXVlUmVxdWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9wcm9j
ZXNzaW5nRGF0YWJhc2VRdWV1ZVJlcXVlc3RzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVxdWVzdCA9IG1fZGF0YWJhc2VRdWV1
ZVJlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICB9CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQoIW1fbWV0YWRhdGEpOworCisgICAgbV9kaWRHZXRNZXRhZGF0YUZy
b21CYWNraW5nU3RvcmUgPSB0cnVlOworCisgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIG1fbWV0
YWRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlTWV0YWRhdGE+KG1ldGFkYXRhKTsK
IAorICAgIHdoaWxlICghbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ01ldGFkYXRhUmVx
dWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdCgpOwog
ICAgIH0KIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRh
YmFzZU1ldGFkYXRhKHN0ZDo6ZnVuY3Rpb248dm9pZChib29sLCBjb25zdCBJREJEYXRhYmFzZU1l
dGFkYXRhJik+IGNvbXBsZXRpb25DYWxsYmFjaykKK1N0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6
YWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEFzeW5jUmVx
dWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Pjo6Y3JlYXRlKFtjb21wbGV0aW9uQ2Fs
bGJhY2ssIHRoaXNdKCkgewotICAgICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhOwot
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGFJ
bnRlcm5hbChtZXRhZGF0YSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1
cm4gRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5hYnNvbHV0ZUluZGV4ZWREYXRhYmFzZVBhdGhG
cm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgobV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsKK30K
IAotICAgICAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKFttZXRhZGF0YSwgc3VjY2Vzcywg
Y29tcGxldGlvbkNhbGxiYWNrXSgpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhz
dWNjZXNzLCBtZXRhZGF0YSk7Ci0gICAgICAgIH0pOwotICAgIH0sIFtjb21wbGV0aW9uQ2FsbGJh
Y2tdKCkgewotICAgICAgICBSdW5Mb29wOjptYWluKCktPmRpc3BhdGNoKFtjb21wbGV0aW9uQ2Fs
bGJhY2tdKCkgewotICAgICAgICAgICAgLy8gVGhlIGJvb2xlYW4gZmxhZyB0byB0aGUgY29tcGxl
dGlvbiBjYWxsYmFjayByZXByZXNlbnRzIHdoZXRoZXIgdGhlIGF0dGVtcHQgdG8gZ2V0L2VzdGFi
bGlzaCBtZXRhZGF0YQotICAgICAgICAgICAgLy8gc3VjY2VlZGVkIG9yIGZhaWxlZC4KLSAgICAg
ICAgICAgIC8vIFNpbmNlIHdlJ3JlIGFib3J0aW5nIHRoZSBhdHRlbXB0LCBpdCBmYWlsZWQsIHNv
IHdlIGFsd2F5cyBwYXNzIGluIGZhbHNlLgotICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNr
KGZhbHNlLCBJREJEYXRhYmFzZU1ldGFkYXRhKCkpOwotICAgICAgICB9KTsKLSAgICB9KTsKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3RNYWluVGhyZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8
QXN5bmNUYXNrPiB0YXNrKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAg
aWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9tYWluVGhyZWFkVGFza011dGV4KTsKKworICAgIG1fbWFpblRocmVh
ZFRhc2tzLmFwcGVuZChzdGQ6Om1vdmUodGFzaykpOworCisgICAgUnVuTG9vcDo6bWFpbigpLT5k
aXNwYXRjaChiaW5kKCZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHRNYWluVGhyZWFkVGFz
aywgdGhpcykpOworfQogCi0gICAgZW5xdWV1ZURhdGFiYXNlUXVldWVSZXF1ZXN0KHJlcXVlc3Qu
cmVsZWFzZSgpKTsKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1OZXh0TWFpblRocmVh
ZFRhc2soKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QXN5bmNUYXNrPiB0YXNrOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbWFpblRocmVhZFRhc2tNdXRleCk7CisgICAgICAgIEFTU0VSVCghbV9tYWluVGhyZWFkVGFz
a3MuaXNFbXB0eSgpKTsKKyAgICAgICAgdGFzayA9IG1fbWFpblRocmVhZFRhc2tzLnRha2VGaXJz
dCgpOworICAgIH0KKworICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CiB9CiAKLWJvb2wgVW5pcXVl
SURCRGF0YWJhc2U6OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YUludGVybmFsKGNv
bnN0IFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGEmKQordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cG9zdERhdGFiYXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiB0YXNrKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVx
dWVzdHMpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RhdGFi
YXNlVGFza011dGV4KTsKKworICAgIG1fZGF0YWJhc2VUYXNrcy5hcHBlbmQoc3RkOjptb3ZlKHRh
c2spKTsKKworICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkucXVldWUoKS5kaXNwYXRjaChi
aW5kKCZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHREYXRhYmFzZVRhc2ssIHRoaXMpKTsK
K30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHREYXRhYmFzZVRhc2soKQog
ewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBzdWNjZXNzZnVsbHkgY2FsbGVkIGJ5IG1l
c3NhZ2luZyBmcm9tIHRoZSBXZWJQcm9jZXNzLCBhbmQgY2FsbHMgYmFjayB3aXRoIGR1bW15IGRh
dGEuCi0gICAgLy8gTmVlZHMgcmVhbCBpbXBsZW1lbnRhdGlvbi4KICAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXN5
bmNUYXNrPiB0YXNrOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZGF0YWJh
c2VUYXNrTXV0ZXgpOworCisgICAgICAgIC8vIFRoaXMgZGF0YWJhc2UgbWlnaHQgYmUgc2h1dHRp
bmcgZG93biBvbiB0aGUgbWFpbiB0aHJlYWQsIGluIHdoaWNoIGNhc2UgdGhlIHRhc2sgcXVldWUg
bWlnaHQgYmUgZW1wdHkuCisgICAgICAgIGlmIChtX2RhdGFiYXNlVGFza3MuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRhc2sgPSBtX2RhdGFiYXNlVGFza3MudGFr
ZUZpcnN0KCk7CisKKyAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGRhdGFiYXNl
IG1pZ2h0IGJlIHNodXR0aW5nIGRvd24gb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAvLyBJ
biB0aGlzIGNhc2UsIGltbWVkaWF0ZWx5IGFmdGVyIHJlbGVhc2luZyBtX2RhdGFiYXNlVGFza011
dGV4LCB0aGlzIGRhdGFiYXNlIG1pZ2h0IGdldCBkZWxldGVkLgorICAgICAgICAvLyBXZSB0YWtl
IGEgcmVmKCkgdG8gbWFrZSBzdXJlIHRoZSBkYXRhYmFzZSBpcyBzdGlsbCBsaXZlIHdoaWxlIHRo
aXMgbGFzdCB0YXNrIGlzIHBlcmZvcm1lZC4KKyAgICAgICAgcmVmKCk7CisgICAgfQorCisgICAg
dGFzay0+cGVyZm9ybVRhc2soKTsKKworICAgIC8vIFRvIGJhbGFuY2Ugb3V0IHRoZSByZWYoKSB0
YWtlbiBhYm92ZS4KKyAgICBkZXJlZigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVl
SURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCAzZGUwMTA0Li5mMTMxZGIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZS5oCkBAIC00MywxMSArNDMsMTMgQEAgc3RydWN0IElEQkRhdGFiYXNlTWV0YWRh
dGE7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQXN5bmNSZXF1ZXN0OworY2xhc3MgQXN5
bmNUYXNrOwogY2xhc3MgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjsKK2NsYXNzIFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlOwogCiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwog
Ci1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPFVuaXF1ZUlEQkRh
dGFiYXNlPiB7CitjbGFzcyBVbmlxdWVJREJEYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxVbmlxdWVJREJEYXRhYmFzZT4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBjcmVhdGUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQogICAgIHsKQEAgLTY4LDE4ICs3MCw0MiBAQCBwcml2YXRlOgog
CiAgICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIAorICAgIGJv
b2wgbV9pbk1lbW9yeTsKKyAgICBTdHJpbmcgbV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5Owor
CiAgICAgSGFzaFNldDxSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4+IG1fY29u
bmVjdGlvbnM7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEFzeW5jUmVxdWVzdD4+IG1f
ZGF0YWJhc2VSZXF1ZXN0czsKIAotICAgIHZvaWQgZW5xdWV1ZURhdGFiYXNlUXVldWVSZXF1ZXN0
KFBhc3NSZWZQdHI8QXN5bmNSZXF1ZXN0Pik7CisgICAgU3RyaW5nIGFic29sdXRlRGF0YWJhc2VE
aXJlY3RvcnkoKSBjb25zdDsKKworICAgIHZvaWQgcG9zdERhdGFiYXNlVGFzayhzdGQ6OnVuaXF1
ZV9wdHI8QXN5bmNUYXNrPik7CisgICAgdm9pZCBzaHV0ZG93bigpOworCisgICAgLy8gTWV0aG9k
IHRoYXQgYXR0ZW1wdHMgdG8gbWFrZSBsZWdhbCBmaWxlbmFtZXMgZnJvbSBhbGwgbGVnYWwgZGF0
YWJhc2UgbmFtZXMKKyAgICBTdHJpbmcgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKTsKIAogICAg
IC8vIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBkYXRhYmFzZSB3b3JrcXVldWUgdGhyZWFkIG9ubHkK
LSAgICB2b2lkIHByb2Nlc3NEYXRhYmFzZVJlcXVlc3RRdWV1ZSgpOwotICAgIGJvb2wgZ2V0T3JF
c3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhSW50ZXJuYWwoY29uc3QgV2ViQ29yZTo6SURCRGF0
YWJhc2VNZXRhZGF0YSYpOworICAgIHZvaWQgcGVyZm9ybU5leHREYXRhYmFzZVRhc2soKTsKKyAg
ICB2b2lkIHBvc3RNYWluVGhyZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPik7Cisg
ICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IFVuaXF1ZUlEQkRh
dGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOworCisg
ICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIGRhdGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQsIHRvIGJl
IHBlcmZvcm1lZCBvbiB0aGUgbWFpbiB0aHJlYWQgb25seQorICAgIHZvaWQgcGVyZm9ybU5leHRN
YWluVGhyZWFkVGFzaygpOworICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRh
ZGF0YShjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKTsK
KworICAgIERlcXVlPFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdNZXRhZGF0YVJlcXVl
c3RzOworICAgIGJvb2wgbV9hY2NlcHRpbmdOZXdSZXF1ZXN0czsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBtX21ldGFkYXRhOworICAgIGJvb2wg
bV9kaWRHZXRNZXRhZGF0YUZyb21CYWNraW5nU3RvcmU7CisKKyAgICBSZWZQdHI8VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworCisgICAgRGVxdWU8c3RkOjp1
bmlxdWVfcHRyPEFzeW5jVGFzaz4+IG1fZGF0YWJhc2VUYXNrczsKKyAgICBNdXRleCBtX2RhdGFi
YXNlVGFza011dGV4OwogCi0gICAgTXV0ZXggbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHNNdXRleDsK
LSAgICBEZXF1ZTxSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9kYXRhYmFzZVF1ZXVlUmVxdWVzdHM7
Ci0gICAgYm9vbCBtX3Byb2Nlc3NpbmdEYXRhYmFzZVF1ZXVlUmVxdWVzdHM7CisgICAgRGVxdWU8
c3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4+IG1fbWFpblRocmVhZFRhc2tzOworICAgIE11dGV4
IG1fbWFpblRocmVhZFRhc2tNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjhkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVfaAorI2RlZmluZSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNF
X1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNv
dW50ZWQ8VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmU+IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZSgpIHsgfQorCisgICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZ2V0T3JFc3RhYmxp
c2hNZXRhZGF0YSgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQor
I2VuZGlmIC8vIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VJ
ZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcAppbmRleCBmZjhiZDdlLi4xOThmMDE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwCkBAIC03NSw2
ICs3NSwxNyBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNOdWxsKCkgY29u
c3QKICAgICByZXR1cm4gbV9kYXRhYmFzZU5hbWUuaXNOdWxsKCk7CiB9CiAKK1VuaXF1ZUlEQkRh
dGFiYXNlSWRlbnRpZmllciBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6Omlzb2xhdGVkQ29w
eSgpIGNvbnN0Cit7CisgICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIHJlc3VsdDsKKwor
ICAgIHJlc3VsdC5tX2RhdGFiYXNlTmFtZSA9IG1fZGF0YWJhc2VOYW1lLmlzb2xhdGVkQ29weSgp
OworICAgIHJlc3VsdC5tX29wZW5pbmdPcmlnaW4gPSBtX29wZW5pbmdPcmlnaW4uaXNvbGF0ZWRD
b3B5KCk7CisgICAgcmVzdWx0Lm1fbWFpbkZyYW1lT3JpZ2luID0gbV9tYWluRnJhbWVPcmlnaW4u
aXNvbGF0ZWRDb3B5KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBib29sIG9wZXJhdG9y
PT0oY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBhLCBjb25zdCBVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXImIGIpCiB7CiAgICAgaWYgKCZhID09ICZiKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFz
ZUlkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKaW5kZXggYmViY2RjNC4uZGJmOWRhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oCkBAIC01MCw2ICs1MCw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCisgICAgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyIGlzb2xhdGVkQ29weSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2RhdGFi
YXNlTmFtZTsKICAgICBTZWN1cml0eU9yaWdpbkRhdGEgbV9vcGVuaW5nT3JpZ2luOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTY1ZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTAs
MCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUgPFdl
YkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VNZXRhZGF0
YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQ3VycmVu
dCB2ZXJzaW9uIG9mIHRoZSBtZXRhZGF0YSBzY2hlbWEgYmVpbmcgdXNlZCBpbiB0aGUgbWV0YWRh
dGEgZGF0YWJhc2UuCitzdGF0aWMgY29uc3QgaW50IGN1cnJlbnRNZXRhZGF0YVZlcnNpb24gPSAx
OworCitVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6VW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQorICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkoZGF0
YWJhc2VEaXJlY3RvcnkpCit7CisgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgaXMgbWVhbnQgdG8g
YmUgY3JlYXRlZCBhbmQgdXNlZCBlbnRpcmVseSBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgorICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
SURCRGF0YWJhc2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6
OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9tZXRhZGF0YURCKTsKKyAgICBBU1NFUlQobV9tZXRh
ZGF0YURCLT5pc09wZW4oKSk7CisKKyAgICBpZiAoIW1fbWV0YWRhdGFEQi0+ZXhlY3V0ZUNvbW1h
bmQoIkNSRUFURSBUQUJMRSBJREJEYXRhYmFzZUluZm8gKGtleSBURVhUIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIFRFWFQgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
Y3JlYXRlIElEQkRhdGFiYXNlSW5mbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX21l
dGFkYXRhREItPmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgbV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIs
ICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8gVkFMVUVTICgnTWV0YWRhdGFWZXJzaW9uJywg
Pyk7Iik7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAg
ICAgICB8fCBzcWwuYmluZEludCgxLCBjdXJyZW50TWV0YWRhdGFWZXJzaW9uKSAhPSBTUUxSZXN1
bHRPaworICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVy
c2lvbiBpbnRvIElEQkRhdGFiYXNlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX21ldGFkYXRhREIt
Pmxhc3RFcnJvcigpLCBtX21ldGFkYXRhREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAg
IG1fbWV0YWRhdGFEQiA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0
YWRhdGFEQiwgIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFzZU5h
bWUnLCA/KTsiKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAg
ICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkp
ICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERv
bmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGluc2VydCBkYXRhYmFzZSBu
YW1lIGludG8gSURCRGF0YWJhc2VJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fbWV0YWRhdGFEQi0+
bGFzdEVycm9yKCksIG1fbWV0YWRhdGFEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAg
bV9tZXRhZGF0YURCID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgLy8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRl
ZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBzcGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3Vw
cG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25lZCBpbnRlZ2Vycy4KKyAgICAgICAgLy8gVGhl
cmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9uIGFzIGEgU3RyaW5nLgorICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX21ldGFkYXRhREIsICJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUlu
Zm8gVkFMVUVTICgnRGF0YWJhc2VWZXJzaW9uJywgPyk7Iik7CisgICAgICAgIGlmIChzcWwucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgU3Ry
aW5nOjpudW1iZXIoMCkpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgp
ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGlu
c2VydCBkZWZhdWx0IHZlcnNpb24gaW50byBJREJEYXRhYmFzZUluZm8gdGFibGUgKCVpKSAtICVz
IiwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3IoKSwgbV9tZXRhZGF0YURCLT5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgICAgICBtX21ldGFkYXRhREIgPSBudWxscHRyOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGluaXRpYWwgbWV0
YWRhdGEgbWF0Y2hlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgd2UganVzdCBwdXQgaW50byB0aGUgbWV0
YWRhdGEgZGF0YWJhc2UuCisgICAgYXV0byBtZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8SURC
RGF0YWJhc2VNZXRhZGF0YT4oKTsKKyAgICBtZXRhZGF0YS0+bmFtZSA9IG1faWRlbnRpZmllci5k
YXRhYmFzZU5hbWUoKTsKKyAgICBtZXRhZGF0YS0+dmVyc2lvbiA9IDA7CisKKyAgICByZXR1cm4g
bWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEo
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX21ldGFkYXRh
REIpOworCisgICAgaWYgKCFtX21ldGFkYXRhREItPnRhYmxlRXhpc3RzKCJJREJEYXRhYmFzZUlu
Zm8iKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG1ldGFkYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPigpOworICAgIHsKKyAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVlIEZST00gSURCRGF0
YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdNZXRhZGF0YVZlcnNpb24nOyIpOworICAgICAgICBpZiAo
c3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICBtZXRhZGF0YS0+dmVyc2lvbiA9IHNxbC5nZXRDb2x1bW5JbnQoMCk7CisgICAgfQorICAgIHsK
KyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9tZXRhZGF0YURCLCAiU0VMRUNUIHZhbHVl
IEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdEYXRhYmFzZU5hbWUnOyIpOworICAg
ICAgICBpZiAoc3FsLmlzQ29sdW1uTnVsbCgwKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBtZXRhZGF0YS0+bmFtZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOworICAgICAg
ICBpZiAobWV0YWRhdGEtPm5hbWUgIT0gbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkRhdGFiYXNlIG5hbWUgaW4gdGhlIG1ldGFkYXRhIGRhdGFi
YXNlICgnJXMnKSBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgbmFtZSAoJyVzJykiLCBtZXRh
ZGF0YS0+bmFtZS51dGY4KCkuZGF0YSgpLCBtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAg
IH0KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fbWV0YWRhdGFEQiwgIlNF
TEVDVCB2YWx1ZSBGUk9NIElEQkRhdGFiYXNlSW5mbyBXSEVSRSBrZXkgPSAnRGF0YWJhc2VWZXJz
aW9uJzsiKTsKKyAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwoMCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZlcnNpb24gPSBzcWwuZ2V0Q29s
dW1uVGV4dCgwKTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgbWV0YWRhdGEtPnZlcnNpb24g
PSBzdHJpbmdWZXJzaW9uLnRvVUludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmICghb2spIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiRGF0YWJhc2UgdmVyc2lvbiBvbiBkaXNrICgnJXMnKSBk
b2VzIG5vdCBjbGVhbmx5IGNvbnZlcnQgdG8gYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmVy
c2lvbiIsIHN0cmluZ1ZlcnNpb24udXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBPbmNlIHdlIHNhdmUg
T2JqZWN0U3RvcmVzIGFuZCBpbmRleGVzIHdlIG5lZWQgdG8gZXh0cmFjdCB0aGVpciBtZXRhZGF0
YSwgYWxzby4KKyAgICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVEYXRhYmFzZT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6
Om9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBhdXRvIHNxbGl0ZURhdGFiYXNlID0gc3RkOjpt
YWtlX3VuaXF1ZTxTUUxpdGVEYXRhYmFzZT4oKTsKKyAgICBpZiAoIXNxbGl0ZURhdGFiYXNlLT5v
cGVuKHBhdGgpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gU1FMaXRlIGRh
dGFiYXNlIGF0IHBhdGggJyVzJyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBzcWxpdGVEYXRhYmFzZTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjpnZXRPckVzdGFibGlzaE1ldGFkYXRhKCkKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKworICAgIFN0cmluZyBtZXRhZGF0YURCRmlsZW5hbWUgPSBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9hYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5LCAiSURCTWV0YWRh
dGEuc3FsaXRlMyIpOworICAgIG1fbWV0YWRhdGFEQiA9IG9wZW5TUUxpdGVEYXRhYmFzZUF0UGF0
aChtZXRhZGF0YURCRmlsZW5hbWUpOworICAgIGlmICghbV9tZXRhZGF0YURCKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRh
PiBtZXRhZGF0YSA9IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CisgICAgaWYgKCFtZXRhZGF0
YSkKKyAgICAgICAgbWV0YWRhdGEgPSBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSgp
OworCisgICAgaWYgKCFtZXRhZGF0YSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0
YWJsaXNoIElEQiBkYXRhYmFzZSBhdCBwYXRoICclcyciLCBtZXRhZGF0YURCRmlsZW5hbWUudXRm
OCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gbWV0YWRhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShE
QVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWJmNmM5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVfaAorI2RlZmluZSBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZV9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCisKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5o
IiAKKyNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworc3RydWN0IElEQkRhdGFi
YXNlTWV0YWRhdGE7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZSBGSU5BTCA6IHB1YmxpYyBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBVbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlKGlkZW50aWZpZXIsIGRhdGFiYXNlRGlyZWN0b3J5KSk7CisgICAgfQorCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZ2V0
T3JFc3RhYmxpc2hNZXRhZGF0YSgpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
ZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBvcGVuU1FMaXRlRGF0YWJhc2VBdFBhdGgo
Y29uc3QgU3RyaW5nJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNl
TWV0YWRhdGE+IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1l
dGFkYXRhKCk7CisKKyAgICBVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVy
OworICAgIFN0cmluZyBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3Rvcnk7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fbWV0YWRhdGFEQjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorI2VuZGlmIC8vIFVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9B
c3luY1Rhc2suaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Bc3luY1Rhc2suaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzcxNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jVGFzay5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBc3luY1Rhc2tfaAorI2RlZmluZSBBc3luY1Rhc2tfaAorCisjaW5jbHVk
ZSA8V2ViQ29yZS9Dcm9zc1RocmVhZENvcGllci5oPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBBc3luY1Rhc2sgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEFzeW5jVGFzayk7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QXN5bmNUYXNrKCkg
eyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKSA9IDA7CisKK3Byb3RlY3RlZDoK
KyAgICBleHBsaWNpdCBBc3luY1Rhc2soKSB7IH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitjbGFzcyBBc3luY1Rhc2tJbXBsIEZJTkFMIDogcHVi
bGljIEFzeW5jVGFzayB7CitwdWJsaWM6CisgICAgQXN5bmNUYXNrSW1wbChUKiBjb25zdCBjYWxs
ZWUsIHZvaWQgKFQ6OiptZXRob2QpKEFyZ3VtZW50cy4uLiksIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIG1fdGFza0Z1bmN0aW9uID0gW2NhbGxlZSwgbWV0aG9kLCBh
cmd1bWVudHMuLi5dKCkgeworICAgICAgICAgICAgKGNhbGxlZS0+Km1ldGhvZCkoYXJndW1lbnRz
Li4uKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Bc3luY1Rhc2tJbXBsKCkK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygp
IE9WRVJSSURFCisgICAgeworICAgICAgICBtX3Rhc2tGdW5jdGlvbigpOworICAgIH0KKworICAg
IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX3Rhc2tGdW5jdGlvbjsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiBjcmVhdGVBc3luY1Rhc2soCisg
ICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpCit7CisgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNUYXNrSW1wbDxUPj4oY2FsbGVlLCBtZXRob2QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgorc3Rk
Ojp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gY3JlYXRlQXN5bmNUYXNrKAorICAgIFQqIGNvbnN0IGNh
bGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0
ZXIxKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFzeW5jVGFza0ltcGw8VCwgTVAx
Pj4oCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBXZWJDb3JlOjpD
cm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5h
bWUgTVAyPgorc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gY3JlYXRlQXN5bmNUYXNrKAorICAg
IFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiksCisgICAg
Y29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIpCit7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNUYXNrSW1wbDxULCBNUDEsIE1QMj4+KAorICAg
ICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgV2ViQ29yZTo6Q3Jvc3NUaHJl
YWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBXZWJDb3JlOjpDcm9zc1Ro
cmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMikpOworCit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gQXN5bmNUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKaW5kZXggZGFhYzZmYi4uNGQ4MTg0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNjksNiArNzAsMzAg
QEAgYm9vbCBTZWN1cml0eU9yaWdpbkRhdGE6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXImIGRlY29kZXIsIFNlY3VyaXR5T3JpZ2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorU3RyaW5n
IFNlY3VyaXR5T3JpZ2luRGF0YTo6ZGF0YWJhc2VGaWxlbmFtZUlkZW50aWZpZXIoKSBjb25zdAor
eworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKHByb3RvY29sLCBob3N0LCBwb3J0KTsKKyAgICByZXR1cm4gc2VjdXJpdHlP
cmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOworfQorCitib29sIFNlY3VyaXR5T3JpZ2luRGF0
YTo6Y2FuU2hhcmVEYXRhYmFzZXMoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvdGhlcikgY29u
c3QKK3sKKyAgICAvLyBGb3Igbm93LCBhbiBvcmlnaW4ncyBkYXRhYmFzZSBhY2Nlc3MgaXMgcHJl
ZGljYXRlZCBvbiBlcXVhbGl0eSB3aXRoIHRoZSBvdGhlciBvcmlnaW4uCisgICAgLy8gV2UgbWln
aHQgbmVlZCB0byBtYWtlIHRoaXMgbW9yZSBudWFuY2VkIGxhdGVyLgorICAgIHJldHVybiAqdGhp
cyA9PSBvdGhlcjsKK30KKworU2VjdXJpdHlPcmlnaW5EYXRhIFNlY3VyaXR5T3JpZ2luRGF0YTo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBTZWN1cml0eU9yaWdpbkRhdGEgcmVzdWx0Owor
CisgICAgcmVzdWx0LnByb3RvY29sID0gcHJvdG9jb2wuaXNvbGF0ZWRDb3B5KCk7CisgICAgcmVz
dWx0Lmhvc3QgPSBob3N0Lmlzb2xhdGVkQ29weSgpOworICAgIHJlc3VsdC5wb3J0ID0gcG9ydDsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgcGVyZm9ybUFQSUNhbGxiYWNrV2l0aFNl
Y3VyaXR5T3JpZ2luRGF0YVZlY3Rvcihjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYg
b3JpZ2luRGF0YXMsIEFycmF5Q2FsbGJhY2sqIGNhbGxiYWNrKQogewogICAgIGlmICghY2FsbGJh
Y2spIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRh
dGEuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZWN1cml0eU9yaWdpbkRhdGEuaAppbmRleCBj
M2Y4N2EwLi5hMGE2Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2VjdXJp
dHlPcmlnaW5EYXRhLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NlY3VyaXR5T3JpZ2lu
RGF0YS5oCkBAIC00NiwxMiArNDYsMjAgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAg
ICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFNlY3VyaXR5T3JpZ2lu
RGF0YSYpOwogCisgICAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIGFwcHJvcHJpYXRlIGZv
ciB1c2UgYXMgYSB1bmlxdWUgZmlsZW5hbWUKKyAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZUlk
ZW50aWZpZXIoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG9yaWdpbiBj
YW4gdXNlIHRoZSBzYW1lIGRhdGFiYXNlcyBhcyB0aGUgZ2l2ZW4gb3JpZ2luLgorICAgIGJvb2wg
Y2FuU2hhcmVEYXRhYmFzZXMoY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJikgY29uc3Q7CisKICAg
ICAvLyBGSVhNRSA8cmRhcjovLzkwMTgzODY+OiBXZSBzaG91bGQgYmUgc2VuZGluZyBtb3JlIHN0
YXRlIGFjcm9zcyB0aGUgd2lyZSB0aGFuIGp1c3QgdGhlIHByb3RvY29sLAogICAgIC8vIGhvc3Qs
IGFuZCBwb3J0LgogCiAgICAgU3RyaW5nIHByb3RvY29sOwogICAgIFN0cmluZyBob3N0OwogICAg
IGludCBwb3J0OworCisgICAgU2VjdXJpdHlPcmlnaW5EYXRhIGlzb2xhdGVkQ29weSgpIGNvbnN0
OwogfTsKIAogdm9pZCBwZXJmb3JtQVBJQ2FsbGJhY2tXaXRoU2VjdXJpdHlPcmlnaW5EYXRhVmVj
dG9yKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiwgQXJyYXlDYWxsYmFjayopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1NzY3ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ3Jv
c3NUaHJlYWRDb3BpZXIuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5j
bHVkZSAiVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFVuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllcj46OmNvcHkoY29uc3QgVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQoreworICAgIHJldHVybiBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGll
ci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlZGE0NmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDcm9zc1RocmVhZENvcGllcl9oCisjZGVm
aW5lIFdlYkNyb3NzVGhyZWFkQ29waWVyX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvQ3Jvc3NUaHJl
YWRDb3BpZXIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8
ZmFsc2UsIGZhbHNlLCBXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcj4geworICAg
IHN0YXRpYyBXZWJLaXQ6OlVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBjb3B5KGNvbnN0IFdl
YktpdDo6VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJik7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNlbmRpZiAv
LyBXZWJDcm9zc1RocmVhZENvcGllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjEwNWM2NS4uNzI2MmFmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTc1
LDkgKzU3NSwxMyBAQAogCQk1MTVFNzczMzE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0
YWJhc2VJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNUU3NzMxMTg0MDJENTEwMDA3MjAzRiAvKiBVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXIuY3BwICovOyB9OwogCQk1MTVFNzczNDE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTVFNzczMjE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJh
c2VJZGVudGlmaWVyLmggKi87IH07CiAJCTUxNjBCRkUxMTMzODFERjkwMDkxODk5OSAvKiBMb2dn
aW5nLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNjBCRkUwMTMzODFERjkwMDkxODk5OSAvKiBMb2dnaW5nLm1hYy5tbSAqLzsgfTsKKwkJNTE2
MzExODcxODU4NDQ2NjAwNTM0NjQ3IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYzMTE4NjE4NTg0NDY2MDA1
MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLzsgfTsKIAkJNTE2MzE5OTIxNjI4OTgw
QTAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNzUHJveHlNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYzMTk5MTE2Mjg5ODBBMDBFMjJGMDAgLyog
TmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKIAkJNTE2MzE5OTQxNjI4OUE2MDAwRTIy
RjAwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNDOTM0MTYyODA2NDgwMDM0MjU1MCAv
KiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxNjMxOTk1MTYy
ODlBNjMwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQzkzNTE2MjgwNjQ4MDAzNDI1NTAg
LyogTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oICovOyB9OworCQk1MTY1NEVGRDE4NEVGMzNGMDA3
REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NTRFRkIxODRFRjMzRjAw
N0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCAqLzsgfTsK
KwkJNTE2NTRFRkUxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTY1NEVGQzE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGUuaCAqLzsgfTsKKwkJNTE2NTRGMDAxODRFRjM0QTAwN0RDODM3IC8qIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTY1NEVGRjE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmUuaCAqLzsgfTsKIAkJNTE2N0VFQTAxNzAzNzdCRjAwNzY4MUNBIC8qIERp
c2tDYWNoZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjdFRTlFMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLmggKi87
IH07CiAJCTUxNjdFRUExMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2N0VFOUYxNzAz
NzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0gKi87IH07CiAJCTUxNkE0QTVEMTIw
QTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmgg
Ki87IH07CkBAIC02MzcsNiArNjQxLDggQEAKIAkJNTFCMTVBODUxMzg0M0EzOTAwMzIxQUQ4IC8q
IEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGls
aXRpZXMuaCAqLzsgfTsKIAkJNTFCMzAwNTAxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3
YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAg
Ki87IH07CiAJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIzMDA0RjEy
NTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3BwICovOyB9OworCQk1MUJBMjQ0NDE4
NThFRTMwMDBFQTI4MTEgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJBMjQ0MzE4NThFRTMwMDBFQTI4MTEgLyogQXN5bmNUYXNr
LmggKi87IH07CisJCTUxQkEyNDQ2MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1RocmVhZENv
cGllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUJBMjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovOyB9
OwogCQk1MUM5NjExODE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUM5NjExNjE4M0QyOTQ3MDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxQzk2MTE5MTgzRDI5NDcwMEQyMDAyRSAv
KiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzk2MTE3MTgzRDI5NDcwMEQyMDAyRSAvKiBXZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFDQkJBMEYxNjUyMTlCNjAw
NUJFOEZEIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0JCQTBEMTY1MjE5QjYwMDVCRThG
RCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAgKi87IH07CkBAIC0yMTM5LDcg
KzIxNDUsMTEgQEAKIAkJNTE1RTc3MzExODQwMkQ1MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTVFNzczMjE4NDAyRDUxMDAwNzIwM0YgLyogVW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwQkZFMDEzMzgx
REY5MDA5MTg5OTkgLyogTG9nZ2luZy5tYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBMb2dnaW5nLm1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE2MzExODYxODU4NDQ2NjAwNTM0NjQ3IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNyb3NzVGhyZWFkQ29waWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjMxOTkxMTYyODk4MEEwMEUyMkYwMCAvKiBO
ZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbTsgcGF0aCA9IG1hYy9OZXR3b3JrUHJv
Y2Vzc1Byb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY1NEVGQjE4
NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY1
NEVGQzE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2NTRF
RkYxODRFRjM0QTAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjdFRTlFMTcwMzc3QkYwMDc2
ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc2tDYWNoZU1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2
N0VFOUYxNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEaXNrQ2FjaGVNb25pdG9yLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJy
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXJyb3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDUsNiArMjIxNSw4IEBACiAJCTUxQjE1QTgzMTM4
NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudFV0aWxpdGllcy5oOyBwYXRoID0gdW5peC9FbnZp
cm9ubWVudFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUIzMDA0
RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOyBwYXRo
ID0gY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUGFnZVByb3h5Q0YuY3BwOyBwYXRo
ID0gY2YvV2ViUGFnZVByb3h5Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MUJBMjQ0MzE4NThFRTMwMDBFQTI4MTEgLyogQXN5bmNUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFzeW5jVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MUJBMjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUM5NjExNTE4M0M5NUZGMDBEMjAwMkUgLyogV2ViSURCU2VydmVy
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUM5NjExNjE4M0QyOTQ3MDBE
MjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVz
c2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDOTYxMTcx
ODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0MzYsNiArMzQ0OCw3IEBACiAJ
CQkJQTdENzkyRDQxNzY3Q0IwOTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNzZXJ0aW9uLmggKi8sCiAJ
CQkJNTE1RTc3MjUxODNERDZGNjAwMDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5jcHAgKi8sCiAJCQkJ
NTE1RTc3MjYxODNERDZGNjAwMDcyMDNGIC8qIEFzeW5jUmVxdWVzdC5oICovLAorCQkJCTUxQkEy
NDQzMTg1OEVFMzAwMEVBMjgxMSAvKiBBc3luY1Rhc2suaCAqLywKIAkJCQk0RjYwMTQzMDE1NUM1
QTMyMDAxRkJERTAgLyogQmxvY2tpbmdSZXNwb25zZU1hcC5oICovLAogCQkJCUJDRjE4NjM3MTY3
RDA3MUUwMEExQTg1QSAvKiBDYWNoZU1vZGVsLmNwcCAqLywKIAkJCQlCQzMwNjVGOTEyNTkzNDRF
MDBFNzEyNzggLyogQ2FjaGVNb2RlbC5oICovLApAQCAtMzUxNSw2ICszNTI4LDggQEAKIAkJCQk1
MTBGQkI5OTEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oICovLAog
CQkJCTkzOUFFNzY1MTMxNkU5OUMwMEFFMDZBNiAvKiBXZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
ICovLAogCQkJCUJDMUREN0IxMTE0REMzOTYwMDVBREFGMyAvKiBXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCAqLywKKwkJCQk1MUJBMjQ0NTE4NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwICovLAorCQkJCTUxNjMxMTg2MTg1ODQ0NjYwMDUzNDY0NyAvKiBXZWJDcm9zc1Ro
cmVhZENvcGllci5oICovLAogCQkJCTUxNTc4QjgyMTIwOUVDRUYwMEEzN0M0QSAvKiBXZWJEYXRh
LmggKi8sCiAJCQkJQkM1NzU2MTIxMjZFMDEzODAwNkYwRjEyIC8qIFdlYkVycm9yLmNwcCAqLywK
IAkJCQk1MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLywKQEAgLTQwMzcs
NiArNDA1MiwxNSBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTUxNjU0RUYwMTg0RUYyNDEwMDdEQzgzNyAvKiBzcWxpdGUgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxNjU0RUZCMTg0RUYzM0YwMDdE
QzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgKi8sCisJCQkJ
NTE2NTRFRkMxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHNxbGl0ZTsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTUxN0RENUJCMTgwREE3QzQwMDgxNjYwQiAvKiBEYXRhYmFzZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNDE2MSwxMSAr
NDE4NSwxMyBAQAogCQk1MUUzNTFGOTE4MEY1Q0Y2MDBFNTNCRTkgLyogSW5kZXhlZERCICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTY1NEVGMDE4NEVG
MjQxMDA3REM4MzcgLyogc3FsaXRlICovLAogCQkJCTUxRDBENDJFMTgzQjM0MTMwMDk3MDQxRCAv
KiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcCAqLywKIAkJCQk1MUQwRDQyRjE4M0Iz
NDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oICovLAogCQkJCTUx
RDBENDMwMTgzQjM0MTMwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLm1l
c3NhZ2VzLmluICovLAogCQkJCTUxNUU3NzJEMTg0MDE1ODAwMDA3MjAzRiAvKiBVbmlxdWVJREJE
YXRhYmFzZS5jcHAgKi8sCiAJCQkJNTE1RTc3MkUxODQwMTU4MDAwMDcyMDNGIC8qIFVuaXF1ZUlE
QkRhdGFiYXNlLmggKi8sCisJCQkJNTE2NTRFRkYxODRFRjM0QTAwN0RDODM3IC8qIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNTE1RTc3MzExODQwMkQ1MTAwMDcyMDNG
IC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJNTE1RTc3MzIxODQw
MkQ1MTAwMDcyMDNGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oICovLAogCQkJKTsK
QEAgLTU2MTksNiArNTY0NSw3IEBACiAJCQkJQkMwMzJEQTkxMEY0MzdEMTAwNThDMTVBIC8qIEFy
Z3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRTk2NkQxMTJGQUY1NzAwNkJDQzI0IC8q
IEF0dGFjaG1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTMxNzMyMTM0Q0VBNkMwMDdDOUE0
RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUJBMjQ0NDE4NThF
RTMwMDBFQTI4MTEgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNTg5NzEy
QTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE0NDVCOUYxODRENUZCNTAwNEIzNDE0IC8qIFdLQ29udGV4dEluamVjdGVk
QnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNTg5OTEyQTg4Mzg4MDA2Mjk1
MzAgLyogQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTU3MDYsNiArNTczMyw3IEBACiAJCQkJQkM4MTQ3QTkxMkY2NENEQTAwN0IyQzMyIC8qIEluamVj
dGVkQnVuZGxlUGFnZVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QjAx
MUUzQzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTlFMzI4OTE4MjE2MzY5MDBGNUQwNEMgLyogV0tSZW1vdGVPYmplY3RSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2NTRFRkUxODRFRjMzRjAwN0RDODM3IC8qIFVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzMzRTBEMTEyNDA4RTg2MDAzNjBGM0YgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxNERGNzcxMjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVu
ZGxlU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjBCMERFMTIzMDVBOEMwMEIx
MzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVycyAqLywK
QEAgLTU3NTcsNiArNTc4NSw3IEBACiAJCQkJMUFCNDc0RTAxODRENDQ2QTAwNTFCNjIyIC8qIFdL
QnVuZGxlUGFnZUVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDg0OEIxMjdG
NkE0OTAwMUVCOTYyIC8qIE5QSWRlbnRpZmllckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
RTQ5NzY4MTFGRjY1OEUwMDQ4QjQ2NCAvKiBOUEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MTYzMTE4NzE4NTg0NDY2MDA1MzQ2NDcgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBQjQ3NEUyMTg0RDQ0ODAwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VG
b3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJEODJBNTEyN0Y0RUFCMDAxRUI5NjIg
LyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4NDNB
MTI3RjY1RDUwMDFFQjk2MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLywKQEAgLTU5MTYsNiArNTk0NSw3IEBACiAJCQkJQkNBQzExMUYxMkM5MkMxRjAw
QjA4RUVFIC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5Q2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNjJBNzZCOTEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCN0Q3MkMxMjg4Q0FBRDAwQ0ZEMDhDIC8q
IFdlYkRvd25sb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY1NEYwMDE4NEVGMzRB
MDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMDMyRDdCMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0EwRUY5RjEyMzMyNjQyMDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEN0QxMEY0Mzc4RDAwNThDMTVBIC8qIFdl
YkVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTkzLDYgKzcyMjMsNyBAQAogCQkJ
CTFBNDRCOTU3MTZCNzM3QUEwMEI3QkJEOCAvKiBTdG9yYWdlTmFtZXNwYWNlSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQUZGNDkwMDE4MzNERTc4MDA5QUIxNUEgLyogV0tEZXByZWNhdGVk
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0RENUJFMTgwREE3RDMwMDgxNjYw
QiAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY1NEVG
RDE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk2QkQ4NUUxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmlu
Z1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFaWjQxN0VGMTJDMDBEODcwMDJCRTY3
QiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMzUx
RkYxODBGNUQwRjAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTc1MDEsNiArNzUzMiw3IEBACiAJCQkJMUFDNzUzN0IxODNBOUZEQjAwNzJDQjE1IC8qIFBh
Z2VMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0MDc2MDcxMjRGRjAyNzAwNjhG
MjBBIC8qIFdLVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0Q1RUJCRTE3NDZCMDRDMDAw
QzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxQkEyNDQ2
MTg1OEY1NUQwMEVBMjgxMSAvKiBXZWJDcm9zc1RocmVhZENvcGllci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzQwNzYwOTEyNEZGMDI3MDA2OEYyMEEgLyogV0tVUkwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM0MDc2MUIxMjRGRjAzNzAwNjhGMjBBIC8qIFdLVVJMQ0YubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQzQwNzYwQjEyNEZGMDI3MDA2OEYyMEEgLyogV0tVUkxSZXF1ZXN0LmNwcCBp
biBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="242688"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>