<?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>79269</bug_id>
          
          <creation_ts>2012-02-22 12:40:56 -0800</creation_ts>
          <short_desc>Separate PageCachePolicy from PageCache action</short_desc>
          <delta_ts>2012-02-29 12:35:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Gavin Peters">gavinp</reporter>
          <assigned_to name="Gavin Peters">gavinp</assigned_to>
          <cc>abarth</cc>
    
    <cc>beidson</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>562267</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-22 12:40:56 -0800</bug_when>
    <thetext>Separate PageCachePolicy from PageCache action</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562282</commentid>
    <comment_count>1</comment_count>
      <attachid>128270</attachid>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-22 12:56:36 -0800</bug_when>
    <thetext>Created attachment 128270
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562291</commentid>
    <comment_count>2</comment_count>
      <attachid>128270</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-22 13:01:01 -0800</bug_when>
    <thetext>Comment on attachment 128270
Patch

Attachment 128270 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11569131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562294</commentid>
    <comment_count>3</comment_count>
      <attachid>128270</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-22 13:04:45 -0800</bug_when>
    <thetext>Comment on attachment 128270
Patch

Attachment 128270 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11561618</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562306</commentid>
    <comment_count>4</comment_count>
      <attachid>128270</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-22 13:12:35 -0800</bug_when>
    <thetext>Comment on attachment 128270
Patch

Attachment 128270 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11556609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562318</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-22 13:23:11 -0800</bug_when>
    <thetext>This isn&apos;t ready for landing, as I haven&apos;t added the build files for the other platforms.

However, here&apos;s my first thoughts on how to do this.

I really didn&apos;t like that PageCache had two implementations of policy.  One was for the debug logging, and one was for making the actual policy decisions.  They were inconsistant in a few areas; notably error pages.  Scary!  I don&apos;t like inconsistency!

So the new code does both, always: the logging compiles to a NOP on non-debug builds.  But, I don&apos;t short circuit the evaluation, even on non-debug builds.  This means we could go deep into a frame hierarchy even if we fail the pagecache early.  Is this cost worth worrying about?  If you think so, I can add it, at the cost of some simplicity in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562358</commentid>
    <comment_count>6</comment_count>
      <attachid>128270</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-02-22 13:56:48 -0800</bug_when>
    <thetext>Comment on attachment 128270
Patch

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

This general strategy seems reasonable to me.

I wish we could make PageCachePolicy less verbose, but I don&apos;t see a good way to do it.  We could always go to idls and perl scripts, but I feel dirty just mentioning that idea.

&gt; Source/WebCore/history/PageCachePolicy.cpp:53
&gt; +
&gt; +PageCachePolicy::FactoryFunction* PageCachePolicy::s_factory = PageCachePolicy::DefaultFactoryFunction;
&gt; +

I&apos;m not enough of a C++ guru to know whether this sort of static initialization is acceptable. My intuition says it is, since PageCachePolicy::DefaultFactoryFunction is a constant and shouldn&apos;t run a constructor, but I&apos;d like to hear from someone more knowledgeable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562365</commentid>
    <comment_count>7</comment_count>
      <attachid>128270</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-22 14:04:58 -0800</bug_when>
    <thetext>Comment on attachment 128270
Patch

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

&gt;&gt; Source/WebCore/history/PageCachePolicy.cpp:53
&gt;&gt; +PageCachePolicy::FactoryFunction* PageCachePolicy::s_factory = PageCachePolicy::DefaultFactoryFunction;
&gt;&gt; +
&gt; 
&gt; I&apos;m not enough of a C++ guru to know whether this sort of static initialization is acceptable. My intuition says it is, since PageCachePolicy::DefaultFactoryFunction is a constant and shouldn&apos;t run a constructor, but I&apos;d like to hear from someone more knowledgeable.

This shouldn&apos;t introduce a static initializer.  The AppleMac build will fail if it does so you don&apos;t need to worry too much about it as long as the file is in the mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562420</commentid>
    <comment_count>8</comment_count>
      <attachid>128295</attachid>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-22 14:55:10 -0800</bug_when>
    <thetext>Created attachment 128295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562421</commentid>
    <comment_count>9</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-22 14:56:00 -0800</bug_when>
    <thetext>This latest patch is still not ready to land, but I added the Mac build files so we could find out about static initializers, courtesy the Mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562425</commentid>
    <comment_count>10</comment_count>
      <attachid>128295</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-22 15:03:31 -0800</bug_when>
    <thetext>Comment on attachment 128295
Patch

Attachment 128295 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11574003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562433</commentid>
    <comment_count>11</comment_count>
      <attachid>128295</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-22 15:12:52 -0800</bug_when>
    <thetext>Comment on attachment 128295
Patch

Attachment 128295 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11574005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562452</commentid>
    <comment_count>12</comment_count>
      <attachid>128295</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-22 15:27:39 -0800</bug_when>
    <thetext>Comment on attachment 128295
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        This refactor separates out pagecache policy from the page cache
&gt; +        itself.  It also adds a factory mechanism, so that ports that want
&gt; +        to have distinct policies can override the default.

Can we skip the factory method until needed?  Generally, the way we handle this is with a static create() function in different CPP files for each port/configuration rather than using the factory pattern directly.

Also, WebKit tends to avoid introducing these sorts of abstract mechanisms until we have at least one use case.  Is the Chromium port planning to use a different PageCachePolicy?  My understanding was that Chromium doesn&apos;t use the PageCache at all.

&gt; Source/WebCore/history/PageCachePolicy.h:53
&gt; +    PageCachePolicy(Page*);

explicit

&gt; Source/WebCore/history/PageCachePolicy.h:54
&gt; +    bool CanCachePage();

WebKit uses lower-case for the initial letter of member functions.

&gt; Source/WebCore/history/PageCachePolicy.h:59
&gt; +protected:

private ?  Are you expecting subclasses?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562453</commentid>
    <comment_count>13</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-22 15:27:51 -0800</bug_when>
    <thetext>(didn&apos;t work; i&apos;m preparing another mac upload now, as well as other sundries, like adding the missing virtual destructor and fixing the includes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563253</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-23 10:53:55 -0800</bug_when>
    <thetext>Chromium doesn&apos;t even use the page cache, so I&apos;m curious why playing in this code has sparked your interest?

Please do not land this without letting me review the final patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563257</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-23 10:57:13 -0800</bug_when>
    <thetext>Please explain what you&apos;re actually trying to do with this code change.

Some (most) of things you are calling &quot;policy&quot; are not policy at all, but technical reasons why we can&apos;t pause a page.

Breaking them out in to some abstract design-patterny &quot;policy factory&quot; doesn&apos;t make the page cache better.  Solving the technical limitations on a case-by-case basis does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567000</commentid>
    <comment_count>16</comment_count>
      <attachid>129314</attachid>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-28 12:58:50 -0800</bug_when>
    <thetext>Created attachment 129314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567009</commentid>
    <comment_count>17</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-28 13:08:09 -0800</bug_when>
    <thetext>beidson, thanks for your interest!  abarth, thanks for your review!

Chromium doesn&apos;t use the page cache now, but we&apos;re considering turning it on.  In the meantime, I want to start gathering statistics from the wild, using Chrome&apos;s histogram mechanism, so I know how often pages are rejected or accepted in page cache in actual back/forward navigation in the wild, and when they are rejected, how many distinguishable causes there are, and what those causes are.  I&apos;m particularly interested in knowing about single-cause but-not-for page cache failure rates, and double-cause but-not-for page cache failures.  How often would relaxing one restriction have gotten us more page cache?

This patch is a refactoring, and it doesn&apos;t add the abovementioned statistics.  What it does do is pull out the logic that decides on page cache out from pagecache.cpp, and unifies the debug and actual logic.  The debug logic had drifted significantly from what was actually being tested.  The debug logic was pretty awful in parts too: check out how those LOG messages are generated in the original...

In parallel I have a patch I&apos;m working on to add histograms in Chrome using a separate PageCachePolicyChromium: this chrome specific PageCachePolicy object won&apos;t actually change Chrome&apos;s use of the PageCache, but it will record the causes of rejections in an uploaded histogram.  The histogram methods are also just generally available in WebCore (see platform/HistogramSupport.h, which compile to NOOPs on non-chrome platforms), but given how many I&apos;m adding, I felt a separate PageCachePolicy object for chrome was justified.

I could also add these tests in #if PLATFORM(CHROMIUM)...?

The newest patch should have more hope (some hope?) of passing on more platforms.  I&apos;m doing testing in parallel, but I wanted to share the upload.

- Per abarth&apos;s review, I&apos;ve removed the factory mechanism.  I have a Chromium factory for this I&apos;ll probably upload soon, and I may re-add it there in the preferred form abarth asked for.

- I fixed some of the tests, in particular I made sure it passed beidson&apos;s latest https page cache tests.  They were good tests that caught some negations.

Questions that I still have:

- Do we want to short-circuit this logic, like the original code does, in the non-debug case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567011</commentid>
    <comment_count>18</comment_count>
      <attachid>129314</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-28 13:11:17 -0800</bug_when>
    <thetext>Comment on attachment 129314
Patch

Attachment 129314 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11710066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567013</commentid>
    <comment_count>19</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-28 13:14:36 -0800</bug_when>
    <thetext>Doh: I only added Mac build rules.  I&apos;ll add the rest of the platforms and re-upload my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567019</commentid>
    <comment_count>20</comment_count>
      <attachid>129314</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-28 13:17:29 -0800</bug_when>
    <thetext>Comment on attachment 129314
Patch

Attachment 129314 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11710069</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567035</commentid>
    <comment_count>21</comment_count>
      <attachid>129318</attachid>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-28 13:32:57 -0800</bug_when>
    <thetext>Created attachment 129318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567040</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-28 13:37:11 -0800</bug_when>
    <thetext>
(In reply to comment #17)
&gt; beidson, thanks for your interest!  abarth, thanks for your review!
&gt; 
&gt; Chromium doesn&apos;t use the page cache now, but we&apos;re considering turning it on.  In the meantime, I want to start gathering statistics from the wild, using Chrome&apos;s histogram mechanism, so I know how often pages are rejected or accepted in page cache in actual back/forward navigation in the wild, and when they are rejected, how many distinguishable causes there are, and what those causes are.  I&apos;m particularly interested in knowing about single-cause but-not-for page cache failure rates, and double-cause but-not-for page cache failures.  How often would relaxing one restriction have gotten us more page cache?

Doing it in Chromium-only would be a mistake for the WebKit project.  All ports that use the PageCache would be interested in this data, and that number of ports is apparently growing.

Please find a way to do this in WebCore.

As for the substance of the patch that&apos;s here now, I hate the name Policy for this, because...

&gt; In parallel I have a patch I&apos;m working on to add histograms in Chrome using a separate PageCachePolicyChromium: 

In WebCore, Policy means 1 of 2 things.
1 - Implementing a policy API callback for the embedding application for some high level operation.  &quot;decidePolicyForMIMEType&quot;, etc.
2 - Implementing a Web Platform policy, such as SecurityPolicy.h/cpp

I don&apos;t think &quot;Policy&quot; is a naming precedent we should apply to a platform layer, when you are now introducing to the PageCache.

Also, where&apos;s the webkit.org bug for that work, as it sounds like you&apos;re doing it at the WebCore layer?

&gt; Questions that I still have:
&gt; 
&gt; - Do we want to short-circuit this logic, like the original code does, in the non-debug case?

Yes.

&gt; This patch is a refactoring,

Refactoring needs to be a zero behavior change.  I will r- patches that don&apos;t short-circuit the logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567041</commentid>
    <comment_count>23</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-28 13:37:44 -0800</bug_when>
    <thetext>(In reply to comment #22)

&gt; I don&apos;t think &quot;Policy&quot; is a naming precedent we should apply to a platform layer, when you are now introducing to the PageCache.

s/when/which/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567048</commentid>
    <comment_count>24</comment_count>
      <attachid>129318</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-02-28 13:45:04 -0800</bug_when>
    <thetext>Comment on attachment 129318
Patch

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

&gt; Source/WebCore/history/PageCachePolicy.cpp:125
&gt; +    framedata.responseDenies = frame-&gt;loader()-&gt;documentLoader()-&gt;response().cacheControlContainsNoCache()

.responseDenies doesn&apos;t really fit as a name.

&gt; Source/WebCore/history/PageCachePolicy.cpp:140
&gt; +    return canCacheFrameImpl(framedata);

It seems entirely unnecessary to break up the gathering of all this data from the decision-making based on the data gathered.  The current code is &quot;one big if-statement&quot; that returns early to avoid lots of extra work, and this approach regresses that.

&gt; Source/WebCore/history/PageCachePolicy.cpp:186
&gt; +bool PageCachePolicy::canCacheFrameImpl(const FrameData&amp; framedata)
&gt; +{
&gt; +    if (!framedata.hasDocumentLoader) {
&gt; +        policyLog(&quot;   -There is no DocumentLoader object&quot;);
&gt; +        return false;
&gt; +    }

These changes to split out the data gathering then intertwine the debug-only logging code and the actual release-build logic accomplishes 3 things:
1 - Makes it harder for the debug logging to get out of sync with the actual logic.  This is good.
2 - Makes it so release builds can&apos;t short circuit during all of that data gathering when the first disqualifying condition is reached.  This is bad.
3 - Makes the code harder to follow.  This is ugly.

I strongly urge you to reconsider your approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567829</commentid>
    <comment_count>25</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2012-02-29 12:35:29 -0800</bug_when>
    <thetext>I&apos;m closing this issue, I&apos;m going to take beidson&apos;s advice and upload patches that use a different approach.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128270</attachid>
            <date>2012-02-22 12:56:36 -0800</date>
            <delta_ts>2012-02-22 14:55:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79269-20120222155635.patch</filename>
            <type>text/plain</type>
            <size>28538</size>
            <attacher name="Gavin Peters">gavinp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU3Y2VhN2Q3NjdhNTI2
YjMzYjMxODYyMjFlMzYxNmQzNDdlMTFjZi4uMjQ4OTgzY2UyNGM4MTEwYWZhZjkzMTlhNDM2NTUw
NWUxY2NlZmMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAyLTIyICBHYXZp
biBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlcGFyYXRlIFBhZ2VD
YWNoZVBvbGljeSBmcm9tIFBhZ2VDYWNoZSBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZWZhY3RvciBzZXBhcmF0ZXMgb3V0IHBhZ2Vj
YWNoZSBwb2xpY3kgZnJvbSB0aGUgcGFnZSBjYWNoZQorICAgICAgICBpdHNlbGYuICBJdCBhbHNv
IGFkZHMgYSBmYWN0b3J5IG1lY2hhbmlzbSwgc28gdGhhdCBwb3J0cyB0aGF0IHdhbnQKKyAgICAg
ICAgdG8gaGF2ZSBkaXN0aW5jdCBwb2xpY2llcyBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzOiBpdCdzIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGU6OmNhbkNhY2hlKToKKyAgICAgICAg
KiBoaXN0b3J5L1BhZ2VDYWNoZS5oOgorICAgICAgICAoUGFnZUNhY2hlKToKKyAgICAgICAgKiBo
aXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xpY3k6OlBhZ2VDYWNoZVBvbGljeSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xpY3k6OkRlZmF1bHRGYWN0b3J5RnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlUG9saWN5OjpHZXRGYWN0b3J5KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6U2V0RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlQ2FjaGVQb2xpY3k6OkNhbkNhY2hlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2FjaGVQb2xpY3k6OlBvbGljeUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xp
Y3k6OkNhbkNhY2hlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlUG9saWN5OjpD
YW5DYWNoZVBhZ2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6Q2Fu
Q2FjaGVGcmFtZUltcGwpOgorICAgICAgICAqIGhpc3RvcnkvUGFnZUNhY2hlUG9saWN5Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQYWdlQ2FjaGVQb2xpY3kpOgorICAg
ICAgICAoRnJhbWVEYXRhKToKKwogMjAxMi0wMi0yMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVuaXRlIFRleHRUcmFjay1yZWxhdGVkIGZpbGVzIHdpdGggdGhl
aXIgZnJpZW5kcyBpbiBXZWJDb3JlL2h0bWwvdHJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2NzQ2
NGRlZDM3NDNmYTAxMGUzMmFkZDQ5YWZkZTA3YTRhNjg4OGJmLi4yOTNjYThlOTFiMjljNTg0NjI1
Zjc5ODY4MTY1MDhhOTY3MThlMDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMjEsNiArMTIxLDcg
QEAKICAgICAgICAgICAgICdoaXN0b3J5L0NhY2hlZFBhZ2UuaCcsCiAgICAgICAgICAgICAnaGlz
dG9yeS9IaXN0b3J5SXRlbS5oJywKICAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5oJywK
KyAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5oJywKICAgICAgICAgICAgICdo
aXN0b3J5L2NmL0hpc3RvcnlQcm9wZXJ0eUxpc3QuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3RvckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYXNl
QWdlbnQuaCcsCkBAIC0yMzAxLDYgKzIzMDIsNyBAQAogICAgICAgICAgICAgJ2hpc3RvcnkvQ2Fj
aGVkUGFnZS5jcHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwJywKICAg
ICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5jcHAnLAorICAgICAgICAgICAgJ2hpc3Rvcnkv
UGFnZUNhY2hlUG9saWN5LmNwcCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9jZi9IaXN0b3J5UHJv
cGVydHlMaXN0LmNwcCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9tYWMvSGlzdG9yeUl0ZW1NYWMu
bW0nLAogICAgICAgICAgICAgJ2hpc3RvcnkvcXQvSGlzdG9yeUl0ZW1RdC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4IGEwZDVkZTRkOTRmNjAwZTdkZDc3NzFhMzY4
OTdiYTM5ZjVkMzE5OGIuLjRiMDNiOTIwODUwNjlhOTRjZGZkNDNjODc0MGNlZTgyZDM5ZmFiMWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAgLTQyLDEwICs0MiwxMSBAQAog
I2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlBhZ2VDYWNoZVBvbGlj
eS5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJTeXN0
ZW1UaW1lLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogCkBAIC01NSwxNzcgKzU2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdGF0aWMgY29uc3QgZG91YmxlIGF1dG9yZWxlYXNlSW50ZXJ2YWwgPSAzOwog
Ci0jaWZuZGVmIE5ERUJVRwotCi1zdGF0aWMgU3RyaW5nJiBwYWdlQ2FjaGVMb2dQcmVmaXgoaW50
IGluZGVudExldmVsKQotewotICAgIHN0YXRpYyBpbnQgcHJldmlvdXNJbmRlbnQgPSAtMTsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgcHJlZml4LCAoKSk7Ci0gICAgCi0gICAgaWYg
KGluZGVudExldmVsICE9IHByZXZpb3VzSW5kZW50KSB7ICAgIAotICAgICAgICBwcmV2aW91c0lu
ZGVudCA9IGluZGVudExldmVsOwotICAgICAgICBwcmVmaXgudHJ1bmNhdGUoMCk7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcHJldmlvdXNJbmRlbnQ7ICsraSkKLSAgICAgICAgICAgIHBy
ZWZpeCArPSAiICAgICI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwcmVmaXg7Ci19Ci0KLXN0
YXRpYyB2b2lkIHBhZ2VDYWNoZUxvZyhjb25zdCBTdHJpbmcmIHByZWZpeCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIExPRyhQYWdlQ2FjaGUsICIlcyVzIiwgcHJlZml4LnV0ZjgoKS5k
YXRhKCksIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci19Ci0gICAgCi0jZGVmaW5lIFBDTE9HKC4u
LikgcGFnZUNhY2hlTG9nKHBhZ2VDYWNoZUxvZ1ByZWZpeChpbmRlbnRMZXZlbCksIG1ha2VTdHJp
bmcoX19WQV9BUkdTX18pKQotICAgIAotc3RhdGljIGJvb2wgbG9nQ2FuQ2FjaGVGcmFtZURlY2lz
aW9uKEZyYW1lKiBmcmFtZSwgaW50IGluZGVudExldmVsKQotewotICAgIC8vIE9ubHkgYm90aGVy
IGxvZ2dpbmcgZm9yIGZyYW1lcyB0aGF0IGhhdmUgYWN0dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNv
bnRlbnQuCi0gICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+c3RhdGVNYWNoaW5lKCktPmNyZWF0aW5n
SW5pdGlhbEVtcHR5RG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEtVUkwg
Y3VycmVudFVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBLVVJMKCk7Ci0gICAgaWYgKGN1cnJl
bnRVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgUENMT0co
IistLS0iKTsKLSAgICBLVVJMIG5ld1VSTCA9IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9uYWxE
b2N1bWVudExvYWRlcigpID8gZnJhbWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9h
ZGVyKCktPnVybCgpIDogS1VSTCgpOwotICAgIGlmICghbmV3VVJMLmlzRW1wdHkoKSkKLSAgICAg
ICAgUENMT0coIiBEZXRlcm1pbmluZyBpZiBmcmFtZSBjYW4gYmUgY2FjaGVkIG5hdmlnYXRpbmcg
ZnJvbSAoIiwgY3VycmVudFVSTC5zdHJpbmcoKSwgIikgdG8gKCIsIG5ld1VSTC5zdHJpbmcoKSwg
Iik6Iik7Ci0gICAgZWxzZQotICAgICAgICBQQ0xPRygiIERldGVybWluaW5nIGlmIHN1YmZyYW1l
IHdpdGggVVJMICgiLCBjdXJyZW50VVJMLnN0cmluZygpLCAiKSBjYW4gYmUgY2FjaGVkOiIpOwot
ICAgIAotICAgIGJvb2wgY2Fubm90Q2FjaGUgPSBmYWxzZTsKLSAgICAKLSAgICBkbyB7Ci0gICAg
ICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKSB7Ci0gICAgICAgICAg
ICBQQ0xPRygiICAgLVRoZXJlIGlzIG5vIERvY3VtZW50TG9hZGVyIG9iamVjdCIpOwotICAgICAg
ICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5Eb2N1
bWVudEVycm9yKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtTWFpbiBkb2N1
bWVudCBoYXMgYW4gZXJyb3IiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRlcigpLT5j
b250YWluc1BsdWdpbnMoKSAmJiAhZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFnZUNhY2hl
U3VwcG9ydHNQbHVnaW5zKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgY29udGFp
bnMgcGx1Z2lucyIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMi
KSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBpcyBIVFRQUyIpOwotICAgICAgICAg
ICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9t
V2luZG93KCkgJiYgZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGhhcyBh
biB1bmxvYWQgZXZlbnQgbGlzdGVuZXIiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKLSAgICAgICAgfQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0gICAgICAgIGlmIChmcmFt
ZS0+ZG9jdW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpKSB7Ci0gICAgICAgICAgICBQQ0xPRygi
ICAgLUZyYW1lIGhhcyBvcGVuIGRhdGFiYXNlIGhhbmRsZXMiKTsKLSAgICAgICAgICAgIGNhbm5v
dENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JL
RVJTKQotICAgICAgICBpZiAoU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2Vy
cyhmcmFtZS0+ZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaGFz
IGFzc29jaWF0ZWQgU2hhcmVkV29ya2VycyIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0
cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT51
c2luZ0dlb2xvY2F0aW9uKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgdXNlcyBH
ZW9sb2NhdGlvbiIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkp
IHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtTm8gY3VycmVudCBoaXN0b3J5IGl0ZW0iKTsKLSAg
ICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJh
bWUtPmxvYWRlcigpLT5xdWlja1JlZGlyZWN0Q29taW5nKCkpIHsKLSAgICAgICAgICAgIFBDTE9H
KCIgICAtUXVpY2sgcmVkaXJlY3QgaXMgY29taW5nIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNo
ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygi
ICAgLURvY3VtZW50TG9hZGVyIGlzIHN0aWxsIGxvYWRpbmcgaW4gQVBJIHNlbnNlIik7Ci0gICAg
ICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSB7Ci0gICAgICAgICAg
ICBQQ0xPRygiICAgLURvY3VtZW50TG9hZGVyIGlzIGluIHRoZSBtaWRkbGUgb2Ygc3RvcHBpbmci
KTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIWZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpKSB7Ci0g
ICAgICAgICAgICBQQ0xPRygiICAgLVRoZSBkb2N1bWVudCBjYW5ub3Qgc3VzcGVjdCBpdHMgYWN0
aXZlIERPTSBPYmplY3RzIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFw
cGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hlSW5QYWdlQ2FjaGUoKSkgewotICAgICAgICAg
ICAgUENMT0coIiAgIC1UaGUgRG9jdW1lbnRMb2FkZXIgdXNlcyBhbiBhcHBsaWNhdGlvbiBjYWNo
ZSIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGlmICghZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y2FuQ2FjaGVQYWdlKCkpIHsKLSAgICAg
ICAgICAgIFBDTE9HKCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fubm90IGJlIGNh
Y2hlZCIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOyAKLSAgICAgICAgfQotICAg
IH0gd2hpbGUgKGZhbHNlKTsKLSAgICAKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50
cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgaWYgKCFsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oY2hpbGQsIGlu
ZGVudExldmVsICsgMSkpCi0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgCi0g
ICAgUENMT0coY2Fubm90Q2FjaGUgPyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFt
ZSBDQU4gYmUgY2FjaGVkIik7Ci0gICAgUENMT0coIistLS0iKTsKLSAgICAKLSAgICByZXR1cm4g
IWNhbm5vdENhY2hlOwotfQotICAgIAotc3RhdGljIHZvaWQgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNp
b24oUGFnZSogcGFnZSkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBtYWluIGZy
YW1lcyB0aGF0IGhhdmUgYWN0dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCi0gICAgaWYg
KHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c3RhdGVNYWNoaW5lKCktPmNyZWF0aW5nSW5p
dGlhbEVtcHR5RG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEtVUkwgY3VycmVudFVS
TCA9IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA/IHBhZ2Ut
Pm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBLVVJMKCk7
Ci0gICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgaW50IGluZGVudExldmVsID0gMDsgICAgCi0gICAgUENMT0coIi0tLS0tLS0tXG4gRGV0ZXJt
aW5pbmcgaWYgcGFnZSBjYW4gYmUgY2FjaGVkOiIpOwotICAgIAotICAgIGJvb2wgY2Fubm90Q2Fj
aGUgPSAhbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKHBhZ2UtPm1haW5GcmFtZSgpLCAxKTsKLSAg
ICAKLSAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRl
cigpLT5sb2FkVHlwZSgpOwotICAgIGlmICghcGFnZS0+YmFja0ZvcndhcmQoKS0+aXNBY3RpdmUo
KSkgewotICAgICAgICBQQ0xPRygiICAgLVRoZSBiYWNrL2ZvcndhcmQgbGlzdCBpcyBkaXNhYmxl
ZCBvciBoYXMgMCBjYXBhY2l0eSIpOwotICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAg
fQotICAgIGlmICghcGFnZS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpKSB7Ci0gICAgICAg
IFBDTE9HKCIgICAtUGFnZSBzZXR0aW5ncyBzYXlzIGIvZiBjYWNoZSBkaXNhYmxlZCIpOwotICAg
ICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgfQotI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5U
QVRJT04pCi0gICAgaWYgKERldmljZU1vdGlvbkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQocGFnZSkp
IHsKLSAgICAgICAgUENMT0coIiAgIC1QYWdlIGlzIHVzaW5nIERldmljZU1vdGlvbiIpOwotICAg
ICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgfQotICAgIGlmIChEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQocGFnZSkpIHsKLSAgICAgICAgUENMT0coIiAgIC1QYWdl
IGlzIHVzaW5nIERldmljZU9yaWVudGF0aW9uIik7Ci0gICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9h
ZCkgewotICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkIik7Ci0gICAgICAg
IGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9h
ZFR5cGVSZWxvYWRGcm9tT3JpZ2luKSB7Ci0gICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlz
OiBSZWxvYWQgZnJvbSBvcmlnaW4iKTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAg
IH0KLSAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVNhbWUpIHsKLSAgICAgICAgUENM
T0coIiAgIC1Mb2FkIHR5cGUgaXM6IFNhbWUiKTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVl
OwotICAgIH0KLSAgICAKLSAgICBQQ0xPRyhjYW5ub3RDYWNoZSA/ICIgUGFnZSBDQU5OT1QgYmUg
Y2FjaGVkXG4tLS0tLS0tLSIgOiAiIFBhZ2UgQ0FOIGJlIGNhY2hlZFxuLS0tLS0tLS0iKTsKLX0K
LQotI2VuZGlmIAotCiBQYWdlQ2FjaGUqIHBhZ2VDYWNoZSgpCiB7CiAgICAgc3RhdGljIFBhZ2VD
YWNoZSogc3RhdGljUGFnZUNhY2hlID0gbmV3IFBhZ2VDYWNoZTsKQEAgLTI0NCw2OCArNzQsMTUg
QEAgUGFnZUNhY2hlOjpQYWdlQ2FjaGUoKQogewogfQogICAgIAotYm9vbCBQYWdlQ2FjaGU6OmNh
bkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqIGZyYW1lKQotewotICAgIGZvciAo
RnJhbWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVQ
YWdlQ29udGFpbmluZ1RoaXNGcmFtZShjaGlsZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIAotICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKTsKLSAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxvYWRlci0+
ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKTsKLSAgICAKLSAgICByZXR1cm4gZG9jdW1lbnRMb2FkZXIKLSAgICAgICAgJiYgZG9jdW1l
bnRMb2FkZXItPm1haW5Eb2N1bWVudEVycm9yKCkuaXNOdWxsKCkKLSAgICAgICAgLy8gRG8gbm90
IGNhY2hlIGVycm9yIHBhZ2VzICh0aGVzZSBjYW4gYmUgcmVjb2duaXplZCBhcyBwYWdlcyB3aXRo
IHN1YnN0aXR1dGUgZGF0YSBvciB1bnJlYWNoYWJsZSBVUkxzKS4KLSAgICAgICAgJiYgIShkb2N1
bWVudExvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkgJiYgIWRvY3VtZW50TG9hZGVy
LT5zdWJzdGl0dXRlRGF0YSgpLmZhaWxpbmdVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgICYmICgh
ZnJhbWVMb2FkZXItPnN1YmZyYW1lTG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpIHx8IGZyYW1l
LT5wYWdlKCktPnNldHRpbmdzKCktPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKQotICAgICAg
ICAmJiAoIWRvY3VtZW50LT51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpIHx8ICghZG9jdW1lbnRM
b2FkZXItPnJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgJiYgIWRvY3Vt
ZW50TG9hZGVyLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKSkKLSAg
ICAgICAgJiYgKCFmcmFtZS0+ZG9tV2luZG93KCkgfHwgIWZyYW1lLT5kb21XaW5kb3coKS0+aGFz
RXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkKLSNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQotICAgICAgICAmJiAhZG9jdW1lbnQtPmhhc09wZW5EYXRhYmFzZXMoKQotI2Vu
ZGlmCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotICAgICAgICAmJiAhU2hhcmVkV29ya2Vy
UmVwb3NpdG9yeTo6aGFzU2hhcmVkV29ya2Vycyhkb2N1bWVudCkKLSNlbmRpZgotICAgICAgICAm
JiAhZG9jdW1lbnQtPnVzaW5nR2VvbG9jYXRpb24oKQotICAgICAgICAmJiBmcmFtZUxvYWRlci0+
aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpCi0gICAgICAgICYmICFmcmFtZUxvYWRlci0+cXVpY2tS
ZWRpcmVjdENvbWluZygpCi0gICAgICAgICYmICFkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nSW5B
UElTZW5zZSgpCi0gICAgICAgICYmICFkb2N1bWVudExvYWRlci0+aXNTdG9wcGluZygpCi0gICAg
ICAgICYmIGRvY3VtZW50LT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCi0gICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaW52ZXN0aWdhdGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0IGhhdmUg
YW4gYXNzb2NpYXRlZAotICAgICAgICAvLyBhcHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6Ly9wcm9i
bGVtLzU5MTc4OTk+IHRyYWNrcyB0aGF0IHdvcmsuCi0gICAgICAgICYmIGRvY3VtZW50TG9hZGVy
LT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkKLSAgICAgICAg
JiYgZnJhbWVMb2FkZXItPmNsaWVudCgpLT5jYW5DYWNoZVBhZ2UoKTsKLX0KLSAgICAKIGJvb2wg
UGFnZUNhY2hlOjpjYW5DYWNoZShQYWdlKiBwYWdlKQogewogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICBsb2dDYW5DYWNoZVBh
Z2VEZWNpc2lvbihwYWdlKTsKLSNlbmRpZgotICAgIAotICAgIC8vIENhY2hlIHRoZSBwYWdlLCBp
ZiBwb3NzaWJsZS4KLSAgICAvLyBEb24ndCB3cml0ZSB0byB0aGUgY2FjaGUgaWYgaW4gdGhlIG1p
ZGRsZSBvZiBhIHJlZGlyZWN0LCBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8KLSAgICAvLyBzdG9yZSB0
aGUgZmluYWwgcGFnZSB3ZSBlbmQgdXAgb24uCi0gICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0
aGUgY2FjaGUgb24gYSByZWxvYWQgb3IgbG9hZFNhbWUsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0
ZQotICAgIC8vIG92ZXIgaXQgYWdhaW4gd2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2UuCi0gICAgRnJh
bWVMb2FkVHlwZSBsb2FkVHlwZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFR5
cGUoKTsKLSAgICAKLSAgICByZXR1cm4gY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShw
YWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgJiYgcGFnZS0+YmFja0ZvcndhcmQoKS0+aXNBY3Rp
dmUoKQotICAgICAgICAmJiBwYWdlLT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkKLSNpZiBF
TkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotICAgICAgICAmJiAhRGV2aWNlTW90aW9uQ29udHJv
bGxlcjo6aXNBY3RpdmVBdChwYWdlKQotICAgICAgICAmJiAhRGV2aWNlT3JpZW50YXRpb25Db250
cm9sbGVyOjppc0FjdGl2ZUF0KHBhZ2UpCi0jZW5kaWYKLSAgICAgICAgJiYgbG9hZFR5cGUgIT0g
RnJhbWVMb2FkVHlwZVJlbG9hZAotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBl
UmVsb2FkRnJvbU9yaWdpbgotICAgICAgICAmJiBsb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlU2Ft
ZTsKKyAgICBQYWdlQ2FjaGVQb2xpY3k6OkZhY3RvcnlGdW5jdGlvbiogcGFnZUNhY2hlUG9saWN5
RmFjdG9yeSA9IFBhZ2VDYWNoZVBvbGljeTo6R2V0RmFjdG9yeSgpOworICAgIE93blB0cjxQYWdl
Q2FjaGVQb2xpY3k+IHBhZ2VDYWNoZVBvbGljeSA9IHBhZ2VDYWNoZVBvbGljeUZhY3RvcnkocGFn
ZSk7CisKKyAgICByZXR1cm4gcGFnZUNhY2hlUG9saWN5LT5DYW5DYWNoZVBhZ2UoKTsKIH0KIAog
dm9pZCBQYWdlQ2FjaGU6OnNldENhcGFjaXR5KGludCBjYXBhY2l0eSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L1BhZ2VDYWNoZS5oCmluZGV4IGFkNTMzM2M2NDM1NmVjYjE5NmQzNGJjOTA5ODc5NTE3MmM4MmJh
YmIuLjUwOTkwMmM4YjE1ZWU0MmM5YmMwNTU2Zjg4ODY3YTJlZmZiZTlkNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9QYWdlQ2FjaGUuaApAQCAtNzEsOCArNzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFBhZ2VDYWNoZSgpOyAvLyBVc2UgcGFnZUNhY2hlKCkgaW5zdGVhZC4KICAgICAg
ICAgflBhZ2VDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJlIG5vYm9keSBh
Y2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmds
ZXRvbnMuCiAgICAgICAgIAotICAgICAgICBzdGF0aWMgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWlu
aW5nVGhpc0ZyYW1lKEZyYW1lKik7Ci0KICAgICAgICAgdm9pZCBhZGRUb0xSVUxpc3QoSGlzdG9y
eUl0ZW0qKTsgLy8gQWRkcyB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KICAgICAgICAgdm9pZCBy
ZW1vdmVGcm9tTFJVTGlzdChIaXN0b3J5SXRlbSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L1BhZ2VDYWNoZVBvbGljeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U0YWE0NTBmMzMxOGQwNTQ4NWZjNTM4
NTZjMTI2NjAzNTYxMmQ2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvUGFnZUNhY2hlUG9saWN5LmNwcApAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGFnZUNhY2hlUG9saWN5LmgiCisKKyNpbmNsdWRlICJBcHBsaWNh
dGlvbkNhY2hlSG9zdC5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkRldmljZU1vdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VPcmllbnRh
dGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhZ2VDYWNo
ZVBvbGljeTo6RmFjdG9yeUZ1bmN0aW9uKiBQYWdlQ2FjaGVQb2xpY3k6OnNfZmFjdG9yeSA9IFBh
Z2VDYWNoZVBvbGljeTo6RGVmYXVsdEZhY3RvcnlGdW5jdGlvbjsKKworUGFnZUNhY2hlUG9saWN5
OjpQYWdlQ2FjaGVQb2xpY3koUGFnZSogcGFnZSkgCisgICAgOiBtX2JhY2tGb3J3YXJkSXNBY3Rp
dmUocGFnZS0+YmFja0ZvcndhcmQoKS0+aXNBY3RpdmUoKSkKKyAgICAsIG1fc2V0dGluZ3NBbGxv
d1BhZ2VDYWNoZShwYWdlLT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkpCisjaWYgRU5BQkxF
KERFVklDRV9PUklFTlRBVElPTikKKyAgICAsIG1fZGV2aWNlTW90aW9uSXNBY3RpdmUoRGV2aWNl
TW90aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKSkKKyAgICAsIG1fZGV2aWNlT3JpZW50
YXRpb25Jc0FjdGl2ZShEZXZpY2VNb3Rpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KHBhZ2UpKQor
I2VuZGlmCisgICAgLCBtX2xvYWRUeXBlKHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bG9h
ZFR5cGUoKSkKKyAgICAsIG1fcGFnZShwYWdlKQorICAgICwgbV9sb2dJbmRlbnRMZXZlbCgwKQor
eworfQorCitQYXNzT3duUHRyPFBhZ2VDYWNoZVBvbGljeT4gUGFnZUNhY2hlUG9saWN5OjpEZWZh
dWx0RmFjdG9yeUZ1bmN0aW9uKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBQYWdlQ2FjaGVQb2xpY3kocGFnZSkpOworfQorCitQYWdlQ2FjaGVQb2xpY3k6OkZhY3RvcnlG
dW5jdGlvbiogUGFnZUNhY2hlUG9saWN5OjpHZXRGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gc19m
YWN0b3J5OworfQorCit2b2lkIFBhZ2VDYWNoZVBvbGljeTo6U2V0RmFjdG9yeShGYWN0b3J5RnVu
Y3Rpb24qIG5ld2ZhY3RvcnkpCit7CisgICAgc19mYWN0b3J5ID0gbmV3ZmFjdG9yeTsKK30KKwor
Ym9vbCBQYWdlQ2FjaGVQb2xpY3k6OkNhbkNhY2hlUGFnZSgpCit7CisgICAgUG9saWN5TG9nKCIt
LS0tLS0tLVxuIERldGVybWluaW5nIGlmIHBhZ2UgY2FuIGJlIGNhY2hlZDoiKTsKKworICAgIGNv
bnN0IGJvb2wgY2FuQ2FjaGVNYWluRnJhbWUgPSBDYW5DYWNoZUZyYW1lKG1fcGFnZS0+bWFpbkZy
YW1lKCkpOworICAgIGNvbnN0IGJvb2wgY2FuQ2FjaGVQYWdlID0gQ2FuQ2FjaGVQYWdlSW1wbCgp
OworCisgICAgaWYgKGNhbkNhY2hlTWFpbkZyYW1lICYmIGNhbkNhY2hlUGFnZSkKKyAgICAgICAg
UG9saWN5TG9nKCIgUGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0tLSIpOworICAgIGVsc2UKKyAg
ICAgICAgUG9saWN5TG9nKCIgUGFnZSBDQU5OT1QgYmUgY2FjaGVkXG4tLS0tLS0tLSIpOworICAg
IHJldHVybiBjYW5DYWNoZU1haW5GcmFtZSAmJiBjYW5DYWNoZVBhZ2U7Cit9CisKK3ZvaWQgUGFn
ZUNhY2hlUG9saWN5OjpQb2xpY3lMb2coY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIExP
RyhQYWdlQ2FjaGUsICIlKnMlcyIsIG1fbG9nSW5kZW50TGV2ZWwqNCwgIiIsIG1lc3NhZ2UudXRm
OCgpLmRhdGEoKSk7Cit9CisKKworYm9vbCBQYWdlQ2FjaGVQb2xpY3k6OkNhbkNhY2hlRnJhbWUo
RnJhbWUqIGZyYW1lKQoreworICAgICsrbV9sb2dJbmRlbnRMZXZlbDsKKworICAgIGZvciAoRnJh
bWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIEtVUkwgY3VycmVudFVSTCA9
IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBLVVJMKCk7CisgICAgICAgIEtVUkwgbmV3VVJMID0gZnJh
bWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVy
KCktPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBLVVJMKCk7CisgICAgICAg
IGlmIChuZXdVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgUG9saWN5TG9nKG1ha2VTdHJpbmco
IiBEZXRlcm1pbmluZyBpZiBzdWJmcmFtZSB3aXRoIFVSTCgiLCBjdXJyZW50VVJMLnN0cmluZygp
LCAiKSBjYW4gYmUgY2FjaGVkOiIpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUG9saWN5
TG9nKG1ha2VTdHJpbmcoIiBEZXRlcm1pbmluZyBpZiBmcmFtZSBjYW4gYmUgY2FjaGVkIG5hdmln
YXRpbmcgZnJvbSAoIiwgY3VycmVudFVSTC5zdHJpbmcoKSwgIikgdG8gKCIsIG5ld1VSTC5zdHJp
bmcoKSwgIik6IikpOworICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAoIUNhbkNh
Y2hlRnJhbWUoY2hpbGQpKSB7CisgICAgICAgICAgICBQb2xpY3lMb2coIiBGcmFtZSBDQU5OT1Qg
YmUgY2FjaGVkIik7CisgICAgICAgICAgICAtLW1fbG9nSW5kZW50TGV2ZWw7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgUG9saWN5TG9nKCIgRnJhbWUgQ0FO
IGJlIGNhY2hlZCIpOworICAgIH0KKworICAgIC0tbV9sb2dJbmRlbnRMZXZlbDsKKyAgICBpZiAo
IWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkgeworICAgICAgICBQb2xpY3lMb2co
IiAtVGhlcmUgaXMgbm8gRG9jdW1lbnRMb2FkZXIgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgRnJhbWVEYXRhIGZyYW1lZGF0YTsKKworICAgIGZyYW1lZGF0YS5p
c0Vycm9yUGFnZSA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+c3Vic3RpdHV0
ZURhdGEoKS5pc1ZhbGlkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5zdWJzdGl0dXRlRGF0YSgpLmZhaWxpbmdVUkwo
KS5pc0VtcHR5KCk7CisgICAgZnJhbWVkYXRhLnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyA9IGZy
YW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpOworICAg
IGZyYW1lZGF0YS5oYXNEb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKTsKKyAgICBpZiAoZnJhbWVkYXRhLmhhc0RvY3VtZW50TG9hZGVyKSB7CisgICAgICAg
IGZyYW1lZGF0YS5tYWluRG9jdW1lbnRFcnJvciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKS0+bWFpbkRvY3VtZW50RXJyb3IoKS5pc051bGwoKTsKKyAgICAgICAgZnJhbWVkYXRh
LmlzTG9hZGluZ0luQVBJU2Vuc2UgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkt
PmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgZnJhbWVkYXRhLmxvYWRlcklzU3RvcHBp
bmcgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKTsKKyAg
ICAgICAgZnJhbWVkYXRhLmFwcENhY2hlRGVuaWVkID0gIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgp
OworICAgIH0KKyAgICBmcmFtZWRhdGEuY29udGFpbnNQbHVnaW5zID0gZnJhbWUtPmxvYWRlcigp
LT5zdWJmcmFtZUxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKTsKKyAgICBmcmFtZWRhdGEucHJv
dG9jb2wgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkucHJvdG9jb2woKTsKKyAgICBmcmFtZWRh
dGEucmVzcG9uc2VEZW5pZXMgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJl
c3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3Bv
bnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCk7CisgICAgZnJhbWVkYXRhLmhhc1Vu
bG9hZExpc3RlbmVyID0gZnJhbWUtPmRvbVdpbmRvdygpICYmIGZyYW1lLT5kb21XaW5kb3coKS0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KTsKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorICAgIGZyYW1lZGF0YS5oYXNPcGVuRGF0YWJhc2UgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+aGFzT3BlbkRhdGFiYXNlcygpOworI2VuZGlmCisjaWYgRU5BQkxFKFNIQVJFRF9X
T1JLRVJTKQorICAgIGZyYW1lZGF0YS5oYXNTaGFyZWRXb3JrZXJzID0gU2hhcmVkV29ya2VyUmVw
b3NpdG9yeTo6aGFzU2hhcmVkV29ya2VycyhmcmFtZS0+ZG9jdW1lbnQoKSk7CisjZW5kaWYKKyAg
ICBmcmFtZWRhdGEudXNlc0dlb2xvY2F0aW9uID0gZnJhbWUtPmRvY3VtZW50KCktPnVzaW5nR2Vv
bG9jYXRpb24oKTsKKyAgICBmcmFtZWRhdGEuaGFzSGlzdG9yeUN1cnJlbnRJdGVtID0gZnJhbWUt
PmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCk7CisgICAgZnJhbWVkYXRhLnF1aWNr
UmVkaXJlY3RDb21pbmcgPSBmcmFtZS0+bG9hZGVyKCktPnF1aWNrUmVkaXJlY3RDb21pbmcoKTsK
KyAgICBmcmFtZWRhdGEuY2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMgPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKTsKKyAgICBmcmFtZWRhdGEuY2FuQ2Fj
aGVQYWdlID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y2FuQ2FjaGVQYWdlKCk7CisKKyAg
ICByZXR1cm4gQ2FuQ2FjaGVGcmFtZUltcGwoZnJhbWVkYXRhKTsKK30KKworLy8gVGhlc2UgKklt
cGwgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgZGVmYXVsdCBwYWdlIGNhY2hlIHBvbGljeS4KK2Jv
b2wgUGFnZUNhY2hlUG9saWN5OjpDYW5DYWNoZVBhZ2VJbXBsKCkKK3sKKyAgICBib29sIGNhbkNh
Y2hlUGFnZSA9IHRydWU7CisKKyAgICBpZiAoIW1fYmFja0ZvcndhcmRJc0FjdGl2ZSkgeworICAg
ICAgICBQb2xpY3lMb2coIiAgIC1UaGUgYmFjay9mb3J3YXJkIGxpc3QgaXMgZGlzYWJsZWQgb3Ig
aGFzIDAgY2FwYWNpdHkuIik7CisgICAgICAgIGNhbkNhY2hlUGFnZSA9IGZhbHNlOworICAgIH0K
KyAgICBpZiAoIW1fc2V0dGluZ3NBbGxvd1BhZ2VDYWNoZSkgeworICAgICAgICBQb2xpY3lMb2co
IiAgIC1QYWdlIHNldHRpbmdzIHNheXMgYi9mIGNhY2hlIGRpc2FibGVkIik7CisgICAgICAgIGNh
bkNhY2hlUGFnZSA9IGZhbHNlOworICAgIH0KKyNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9O
KQorICAgIGlmIChtX2RldmljZU1vdGlvbklzQWN0aXZlKSB7CisgICAgICAgIFBvbGljeUxvZygi
ICAgLVBhZ2UgaXMgdXNpbmcgRGV2aWNlTW90aW9uIik7CisgICAgICAgIGNhbkNhY2hlUGFnZSA9
IGZhbHNlOworICAgIH0KKyAgICBpZiAobV9kZXZpY2VPcmllbnRhdGlvbklzQWN0aXZlKSB7Cisg
ICAgICAgIFBvbGljeUxvZygiICAgLVBhZ2UgaXMgdXNpbmcgRGV2aWNlT3JpZW50YXRpb24iKTsK
KyAgICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisgICAgaWYgKG1f
bG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCkgeworICAgICAgICBQb2xpY3lMb2coIiAg
IC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCIpOworICAgICAgICBjYW5DYWNoZVBhZ2UgPSBmYWxzZTsK
KyAgICB9IGVsc2UgaWYgKG1fbG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21Pcmln
aW4pIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQgZnJvbSBv
cmlnaW4iKTsKKyAgICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfSBlbHNlIGlmICht
X2xvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVTYW1lKSB7CisgICAgICAgIFBvbGljeUxvZygiICAg
LUxvYWQgdHlwZSBpczogU2FtZSIpOworICAgICAgICBjYW5DYWNoZVBhZ2UgPSBmYWxzZTsKKyAg
ICB9CisKKworICAgIHJldHVybiBjYW5DYWNoZVBhZ2U7Cit9CisKK2Jvb2wgUGFnZUNhY2hlUG9s
aWN5OjpDYW5DYWNoZUZyYW1lSW1wbChjb25zdCBGcmFtZURhdGEmIGZyYW1lZGF0YSkKK3sKKyAg
ICBpZiAoIWZyYW1lZGF0YS5oYXNEb2N1bWVudExvYWRlcikgeworICAgICAgICBQb2xpY3lMb2co
IiAgIC1UaGVyZSBpcyBubyBEb2N1bWVudExvYWRlciBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBib29sIGNhbkNhY2hlRnJhbWUgPSB0cnVlOworICAgIGlmIChm
cmFtZWRhdGEubWFpbkRvY3VtZW50RXJyb3IpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtTWFp
biBkb2N1bWVudCBoYXMgYW4gZXJyb3IiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNl
OworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmlzRXJyb3JQYWdlKSB7CisgICAgICAgIFBvbGlj
eUxvZygiICAgLUZyYW1lIGlzIGFuIGVycm9yIHBhZ2UiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFt
ZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmNvbnRhaW5zUGx1Z2lucyAmJiAh
ZnJhbWVkYXRhLnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucykgeworICAgICAgICBQb2xpY3lMb2co
IiAgIC1GcmFtZSBjb250YWlucyBwbHVnaW5zLCBhbmQgdGhlIHBhZ2UgY2FjaGUgc2V0dGluZ3Mg
ZG8gbm90IHN1cHBvcnQgcGx1Z2lucy4iKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNl
OworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLnByb3RvY29sID09ICJodHRwcyIpIHsKKyAgICAg
ICAgUG9saWN5TG9nKCIgICAtRnJhbWUgaXMgSFRUUFMiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFt
ZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLnJlc3BvbnNlRGVuaWVzKSB7Cisg
ICAgICAgIFBvbGljeUxvZygiICAgLUZyYW1lIHJlc3BvbnNlIGNvbnRhaW5zIE5vQ2FjaGUgb3Ig
Tm9TdG9yZSIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChmcmFtZWRhdGEuaGFzVW5sb2FkTGlzdGVuZXIpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAt
RnJhbWUgaGFzIGFuIHVubG9hZCBldmVudCBsaXN0ZW5lciIpOworICAgICAgICBjYW5DYWNoZUZy
YW1lID0gZmFsc2U7CisgICAgfQorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgaWYgKGZy
YW1lZGF0YS5oYXNPcGVuRGF0YWJhc2UpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtRnJhbWUg
aGFzIG9uZSBvciBtb3JlIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIpOworICAgICAgICBjYW5DYWNo
ZUZyYW1lID0gZmFsc2U7CisgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJT
KQorICAgIGlmIChmcmFtZWRhdGEuaGFzU2hhcmVkV29ya2VycykgeworICAgICAgICBQb2xpY3lM
b2coIiAgIC1GcmFtZSBoYXMgYXNzb2NpYXRlZCBTaGFyZWRXb3JrZXJzIik7CisgICAgICAgIGNh
bkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoZnJhbWVkYXRhLnVz
ZXNHZW9sb2NhdGlvbikgeworICAgICAgICBQb2xpY3lMb2coIiAgIC1GcmFtZSB1c2VzIEdlb2xv
Y2F0aW9uIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYg
KGZyYW1lZGF0YS5oYXNIaXN0b3J5Q3VycmVudEl0ZW0pIHsKKyAgICAgICAgUG9saWN5TG9nKCIg
ICAtTm8gY3VycmVudCBoaXN0b3J5IGl0ZW0iKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZh
bHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLnF1aWNrUmVkaXJlY3RDb21pbmcpIHsKKyAg
ICAgICAgUG9saWN5TG9nKCIgICAtUXVpY2sgcmVkaXJlY3QgaXMgY29taW5nIik7CisgICAgICAg
IGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZyYW1lZGF0YS5pc0xvYWRp
bmdJbkFQSVNlbnNlKSB7CisgICAgICAgIFBvbGljeUxvZygiICAgLURvY3VtZW50TG9hZGVyIGlz
IHN0aWxsIGxvYWRpbmcgaW4gQVBJIHNlbnNlIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBm
YWxzZTsKKyAgICB9CisgICAgaWYgKGZyYW1lZGF0YS5sb2FkZXJJc1N0b3BwaW5nKSB7CisgICAg
ICAgIFBvbGljeUxvZygiICAgLURvY3VtZW50TG9hZGVyIGlzIGluIHRoZSBtaWRkbGUgb2Ygc3Rv
cHBpbmciKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
IWZyYW1lZGF0YS5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cykgeworICAgICAgICBQb2xpY3lM
b2coIiAgIC1UaGUgZG9jdW1lbnQgY2Fubm90IHN1c3BlbmQgaXRzIGFjdGl2ZSBET00gT2JqZWN0
cyIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmcmFt
ZWRhdGEuYXBwQ2FjaGVEZW5pZWQpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtVGhlIGFwcGxp
Y2F0aW9uIGNhY2hlIGRlbmllZCB0aGUgcGFnZSBjYWNoZS4iKTsKKyAgICAgICAgY2FuQ2FjaGVG
cmFtZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWZyYW1lZGF0YS5jYW5DYWNoZVBhZ2UpIHsK
KyAgICAgICAgUG9saWN5TG9nKCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fubm90
IGJlIGNhY2hlZCIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiBjYW5DYWNoZUZyYW1lOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5oIGIv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGVQb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjg2
ZjU3ZTRjNjk5NTM0MmY4NzFmMzMzZTQzMWFjYjBmNTQyNzE0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGVQb2xpY3kuaApAQCAtMCwwICsxLDExMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAq
LworCisjaWZuZGVmIFBhZ2VDYWNoZVBvbGljeV9oCisjZGVmaW5lIFBhZ2VDYWNoZVBvbGljeV9o
CisKKyNpbmNsdWRlIDxsb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1l
OworY2xhc3MgUGFnZTsKKworY2xhc3MgUGFnZUNhY2hlUG9saWN5ICB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUGFnZUNhY2hlUG9saWN5KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFBhc3NPd25QdHI8UGFnZUNhY2hlUG9saWN5PiAoRmFj
dG9yeUZ1bmN0aW9uKShQYWdlKik7CisKKyAgICBQYWdlQ2FjaGVQb2xpY3koUGFnZSopOworICAg
IGJvb2wgQ2FuQ2FjaGVQYWdlKCk7CisKKyAgICBzdGF0aWMgdm9pZCBTZXRGYWN0b3J5KEZhY3Rv
cnlGdW5jdGlvbiopOworICAgIHN0YXRpYyBGYWN0b3J5RnVuY3Rpb24qIEdldEZhY3RvcnkoKTsK
KworcHJvdGVjdGVkOgorICAgIHN0cnVjdCBGcmFtZURhdGEgeworICAgICAgICBib29sIGlzRXJy
b3JQYWdlOworICAgICAgICBib29sIHBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2luczsKKyAgICAgICAg
Ym9vbCBoYXNEb2N1bWVudExvYWRlcjsKKyAgICAgICAgYm9vbCBtYWluRG9jdW1lbnRFcnJvcjsK
KyAgICAgICAgYm9vbCBjb250YWluc1BsdWdpbnM7CisgICAgICAgIFN0cmluZyBwcm90b2NvbDsK
KyAgICAgICAgYm9vbCByZXNwb25zZURlbmllczsKKyAgICAgICAgYm9vbCBoYXNVbmxvYWRMaXN0
ZW5lcjsKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorICAgICAgICBib29sIGhhc09wZW5EYXRh
YmFzZTsKKyNlbmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICAgICAgYm9vbCBo
YXNTaGFyZWRXb3JrZXJzOworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgYm9vbCB1c2VzR2VvbG9jYXRpb247CisgICAgICAgIGJvb2wgaGFzSGlzdG9y
eUN1cnJlbnRJdGVtOworICAgICAgICBib29sIHF1aWNrUmVkaXJlY3RDb21pbmc7CisgICAgICAg
IGJvb2wgaXNMb2FkaW5nSW5BUElTZW5zZTsKKyAgICAgICAgYm9vbCBsb2FkZXJJc1N0b3BwaW5n
OworICAgICAgICBib29sIGNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzOworICAgICAgICBib29s
IGFwcENhY2hlRGVuaWVkOworICAgICAgICBib29sIGNhbkNhY2hlUGFnZTsKKyAgICB9OworCisg
ICAgdm9pZCBQb2xpY3lMb2coY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBPdmVycmlkZSB0aGVz
ZSB0d28gZnVuY3Rpb25zIGZvciBhbHRlcm5hdGl2ZSBwb2xpY2llcy4KKyAgICB2aXJ0dWFsIGJv
b2wgQ2FuQ2FjaGVGcmFtZUltcGwoY29uc3QgRnJhbWVEYXRhJik7CisgICAgdmlydHVhbCBib29s
IENhbkNhY2hlUGFnZUltcGwoKTsKKworICAgIC8vIFBhZ2UgbGV2ZWwgcGFyYW1ldGVycworICAg
IGJvb2wgbV9iYWNrRm9yd2FyZElzQWN0aXZlOworICAgIGJvb2wgbV9zZXR0aW5nc0FsbG93UGFn
ZUNhY2hlOworICAgIGJvb2wgbV9zZXR0aW5nc0FsbG93c1BsdWdpbnM7CisjaWYgRU5BQkxFKERF
VklDRV9PUklFTlRBVElPTikKKyAgICBib29sIG1fZGV2aWNlTW90aW9uSXNBY3RpdmU7CisgICAg
Ym9vbCBtX2RldmljZU9yaWVudGF0aW9uSXNBY3RpdmU7CisjZW5kaWYKKyAgICBGcmFtZUxvYWRU
eXBlIG1fbG9hZFR5cGU7Citwcml2YXRlOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhZ2VDYWNo
ZVBvbGljeT4gRGVmYXVsdEZhY3RvcnlGdW5jdGlvbihQYWdlKik7CisgICAgYm9vbCBDYW5DYWNo
ZUZyYW1lKEZyYW1lKik7CisgICAgICAgIAorICAgIHN0YXRpYyBGYWN0b3J5RnVuY3Rpb24qIHNf
ZmFjdG9yeTsKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgaW50IG1fbG9nSW5kZW50TGV2ZWw7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128295</attachid>
            <date>2012-02-22 14:55:10 -0800</date>
            <delta_ts>2012-02-28 12:58:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79269-20120222175509.patch</filename>
            <type>text/plain</type>
            <size>32907</size>
            <attacher name="Gavin Peters">gavinp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU3Y2VhN2Q3NjdhNTI2
YjMzYjMxODYyMjFlMzYxNmQzNDdlMTFjZi4uMjQ4OTgzY2UyNGM4MTEwYWZhZjkzMTlhNDM2NTUw
NWUxY2NlZmMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAyLTIyICBHYXZp
biBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlcGFyYXRlIFBhZ2VD
YWNoZVBvbGljeSBmcm9tIFBhZ2VDYWNoZSBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZWZhY3RvciBzZXBhcmF0ZXMgb3V0IHBhZ2Vj
YWNoZSBwb2xpY3kgZnJvbSB0aGUgcGFnZSBjYWNoZQorICAgICAgICBpdHNlbGYuICBJdCBhbHNv
IGFkZHMgYSBmYWN0b3J5IG1lY2hhbmlzbSwgc28gdGhhdCBwb3J0cyB0aGF0IHdhbnQKKyAgICAg
ICAgdG8gaGF2ZSBkaXN0aW5jdCBwb2xpY2llcyBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzOiBpdCdzIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGU6OmNhbkNhY2hlKToKKyAgICAgICAg
KiBoaXN0b3J5L1BhZ2VDYWNoZS5oOgorICAgICAgICAoUGFnZUNhY2hlKToKKyAgICAgICAgKiBo
aXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xpY3k6OlBhZ2VDYWNoZVBvbGljeSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xpY3k6OkRlZmF1bHRGYWN0b3J5RnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlUG9saWN5OjpHZXRGYWN0b3J5KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6U2V0RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlQ2FjaGVQb2xpY3k6OkNhbkNhY2hlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2FjaGVQb2xpY3k6OlBvbGljeUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xp
Y3k6OkNhbkNhY2hlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlUG9saWN5OjpD
YW5DYWNoZVBhZ2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6Q2Fu
Q2FjaGVGcmFtZUltcGwpOgorICAgICAgICAqIGhpc3RvcnkvUGFnZUNhY2hlUG9saWN5Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQYWdlQ2FjaGVQb2xpY3kpOgorICAg
ICAgICAoRnJhbWVEYXRhKToKKwogMjAxMi0wMi0yMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVuaXRlIFRleHRUcmFjay1yZWxhdGVkIGZpbGVzIHdpdGggdGhl
aXIgZnJpZW5kcyBpbiBXZWJDb3JlL2h0bWwvdHJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2NzQ2
NGRlZDM3NDNmYTAxMGUzMmFkZDQ5YWZkZTA3YTRhNjg4OGJmLi4yOTNjYThlOTFiMjljNTg0NjI1
Zjc5ODY4MTY1MDhhOTY3MThlMDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMjEsNiArMTIxLDcg
QEAKICAgICAgICAgICAgICdoaXN0b3J5L0NhY2hlZFBhZ2UuaCcsCiAgICAgICAgICAgICAnaGlz
dG9yeS9IaXN0b3J5SXRlbS5oJywKICAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5oJywK
KyAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5oJywKICAgICAgICAgICAgICdo
aXN0b3J5L2NmL0hpc3RvcnlQcm9wZXJ0eUxpc3QuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3RvckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYXNl
QWdlbnQuaCcsCkBAIC0yMzAxLDYgKzIzMDIsNyBAQAogICAgICAgICAgICAgJ2hpc3RvcnkvQ2Fj
aGVkUGFnZS5jcHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwJywKICAg
ICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5jcHAnLAorICAgICAgICAgICAgJ2hpc3Rvcnkv
UGFnZUNhY2hlUG9saWN5LmNwcCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9jZi9IaXN0b3J5UHJv
cGVydHlMaXN0LmNwcCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9tYWMvSGlzdG9yeUl0ZW1NYWMu
bW0nLAogICAgICAgICAgICAgJ2hpc3RvcnkvcXQvSGlzdG9yeUl0ZW1RdC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM3
MGQzOWVhZGM4MjNlYjljNDg4YzE2ZGFjODExMTNkZjlhMTk4ZDEuLjU4ZGQ1NDE5YjFhOWVjZTY5
ZmJjMjg4YjY1ZGMxYzFjYjA3NjdiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0NjEsNiArMzQ2MSw4IEBACiAJCTk4NUJC
OTZFMTNBOTQwNTgwMDdBMEI2OSAvKiBMaW5rUmVsQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5ODVCQjk2QzEzQTk0MDU4MDA3QTBCNjkg
LyogTGlua1JlbEF0dHJpYnV0ZS5oICovOyB9OwogCQk5OENFNDMyNjEyOUUwMEJEMDA1ODIxREMg
LyogTGlua0xvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OENFNDMyNTEyOUUwMEJEMDA1ODIxREMgLyogTGlua0xvYWRlci5jcHAgKi87IH07
CiAJCTk4Q0U0MzJBMTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUwMEU1MDA1ODIx
REMgLyogTGlua0xvYWRlci5oICovOyB9OworCQk5OEQ1QjJFNzE0RjVBMDJCMDA5QkJBRkQgLyog
UGFnZUNhY2hlUG9saWN5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk4RDVCMkU1MTRGNUEwMkIwMDlCQkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3kuY3Bw
ICovOyB9OworCQk5OEQ1QjJFODE0RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9saWN5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OEQ1QjJFNjE0
RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9saWN5LmggKi87IH07CiAJCTk4RUIxRjk1MTMx
M0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdElt
cGxlbWVudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOUIwRkIxOTExNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxpZGF0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMEZCMThGMTQwREI1
NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5jcHAgKi87IH07CiAJCTlCMEZCMTkyMTQwREI1
NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwRkIxOTAxNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxp
ZGF0aW9uLmggKi87IH07CkBAIC0xMDMyNyw2ICsxMDMyOSw4IEBACiAJCTk4NUJCOTZDMTNBOTQw
NTgwMDdBMEI2OSAvKiBMaW5rUmVsQXR0cmlidXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpbmtSZWxBdHRyaWJ1dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOThDRTQzMjUxMjlFMDBCRDAwNTgyMURDIC8qIExpbmtMb2FkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGlua0xvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk4Q0U0MzI5MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtMb2FkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOThENUIyRTUxNEY1QTAyQjAwOUJCQUZEIC8qIFBhZ2VDYWNo
ZVBvbGljeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlQ2Fj
aGVQb2xpY3kuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OEQ1QjJFNjE0RjVB
MDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhZ2VDYWNoZVBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUIwRkIxOEYxNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxpZGF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUVFBWYWxpZGF0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwRkIxOTAxNDBEQjU3OTAwMjI1
ODhGIC8qIEhUVFBWYWxpZGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhUVFBWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDgxNyw2
ICsxNDgyMSw4IEBACiAJCQkJNTE3NDFEMEQwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVt
LmggKi8sCiAJCQkJMTQ3N0U3NzQwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAgKi8s
CiAJCQkJMTQ3N0U3NzUwQkY0MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5oICovLAorCQkJCTk4
RDVCMkU1MTRGNUEwMkIwMDlCQkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3kuY3BwICovLAorCQkJCTk4
RDVCMkU2MTRGNUEwMkIwMDlCQkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3kuaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gaGlzdG9yeTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzMzOCw2
ICsyMzM0NCw3IEBACiAJCQkJMzc3NEFCQTUwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0
UmVxdWVzdENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVBMjE0NjgwOTdBMzI5MTAwQjkw
NTBBIC8qIFBhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzdFNzc3MEJGNDEzNEEwMDE1Mjg3
MiAvKiBQYWdlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTk4RDVCMkU4MTRGNUEwMkIwMDlC
QkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODkzMTQ3
RDM1RjkwMDEwQkMwNiAvKiBQYWdlQ29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
MzQ3NDJERDEzNDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjY0NzUsNiArMjY0ODIsNyBAQAogCQkJCTFBMEQ1NzM2MEE1Qzc3RkUwMDdF
REQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1RkVBODY5MDk4
MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzdFNzc2MEJG
NDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOThENUIy
RTcxNEY1QTAyQjAwOUJCQUZEIC8qIFBhZ2VDYWNoZVBvbGljeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGMzgyMDg5MjE0N0QzNUY5MDAxMEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGMzQ3NDJEQzEzNDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2Vy
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8q
IFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvUGFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hl
LmNwcAppbmRleCBhMGQ1ZGU0ZDk0ZjYwMGU3ZGQ3NzcxYTM2ODk3YmEzOWY1ZDMxOThiLi40YjAz
YjkyMDg1MDY5YTk0Y2RmZDQzYzg3NDBjZWU4MmQzOWZhYjFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9y
eS9QYWdlQ2FjaGUuY3BwCkBAIC00MiwxMCArNDIsMTEgQEAKICNpbmNsdWRlICJIaXN0b3J5SXRl
bS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGVQb2xpY3kuaCIKICNpbmNsdWRlICJTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUu
aD4KIApAQCAtNTUsMTc3ICs1Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNv
bnN0IGRvdWJsZSBhdXRvcmVsZWFzZUludGVydmFsID0gMzsKIAotI2lmbmRlZiBOREVCVUcKLQot
c3RhdGljIFN0cmluZyYgcGFnZUNhY2hlTG9nUHJlZml4KGludCBpbmRlbnRMZXZlbCkKLXsKLSAg
ICBzdGF0aWMgaW50IHByZXZpb3VzSW5kZW50ID0gLTE7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIHByZWZpeCwgKCkpOwotICAgIAotICAgIGlmIChpbmRlbnRMZXZlbCAhPSBwcmV2
aW91c0luZGVudCkgeyAgICAKLSAgICAgICAgcHJldmlvdXNJbmRlbnQgPSBpbmRlbnRMZXZlbDsK
LSAgICAgICAgcHJlZml4LnRydW5jYXRlKDApOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHByZXZpb3VzSW5kZW50OyArK2kpCi0gICAgICAgICAgICBwcmVmaXggKz0gIiAgICAiOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1zdGF0aWMgdm9pZCBwYWdlQ2FjaGVM
b2coY29uc3QgU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBM
T0coUGFnZUNhY2hlLCAiJXMlcyIsIHByZWZpeC51dGY4KCkuZGF0YSgpLCBtZXNzYWdlLnV0Zjgo
KS5kYXRhKCkpOwotfQotICAgIAotI2RlZmluZSBQQ0xPRyguLi4pIHBhZ2VDYWNoZUxvZyhwYWdl
Q2FjaGVMb2dQcmVmaXgoaW5kZW50TGV2ZWwpLCBtYWtlU3RyaW5nKF9fVkFfQVJHU19fKSkKLSAg
ICAKLXN0YXRpYyBib29sIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihGcmFtZSogZnJhbWUsIGlu
dCBpbmRlbnRMZXZlbCkKLXsKLSAgICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBmcmFtZXMg
dGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50LgotICAgIGlmIChmcmFt
ZS0+bG9hZGVyKCktPnN0YXRlTWFjaGluZSgpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBLVVJMIGN1cnJlbnRVUkwgPSBmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPnVybCgpIDogS1VSTCgpOwotICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIFBDTE9HKCIrLS0tIik7Ci0gICAgS1VSTCBu
ZXdVUkwgPSBmcmFtZS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSA/IGZy
YW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpLT51cmwoKSA6IEtVUkwo
KTsKLSAgICBpZiAoIW5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5p
bmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCIsIGN1cnJlbnRVUkwu
c3RyaW5nKCksICIpIHRvICgiLCBuZXdVUkwuc3RyaW5nKCksICIpOiIpOwotICAgIGVsc2UKLSAg
ICAgICAgUENMT0coIiBEZXRlcm1pbmluZyBpZiBzdWJmcmFtZSB3aXRoIFVSTCAoIiwgY3VycmVu
dFVSTC5zdHJpbmcoKSwgIikgY2FuIGJlIGNhY2hlZDoiKTsKLSAgICAKLSAgICBib29sIGNhbm5v
dENhY2hlID0gZmFsc2U7Ci0gICAgCi0gICAgZG8gewotICAgICAgICBpZiAoIWZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBp
cyBubyBEb2N1bWVudExvYWRlciBvYmplY3QiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0g
dHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLU1haW4gZG9jdW1lbnQgaGFzIGFuIGVycm9yIik7
Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkgJiYg
IWZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKSB7
Ci0gICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGNvbnRhaW5zIHBsdWdpbnMiKTsKLSAgICAg
ICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikpIHsKLSAgICAgICAgICAgIFBD
TE9HKCIgICAtRnJhbWUgaXMgSFRUUFMiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJhbWUtPmRvbVdpbmRvdygpICYmIGZyYW1lLT5k
b21XaW5kb3coKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkg
ewotICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgYW4gdW5sb2FkIGV2ZW50IGxpc3Rl
bmVyIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmhhc09w
ZW5EYXRhYmFzZXMoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgb3BlbiBk
YXRhYmFzZSBoYW5kbGVzIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAg
ICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLSAgICAgICAgaWYgKFNo
YXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMoZnJhbWUtPmRvY3VtZW50KCkp
KSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGhhcyBhc3NvY2lhdGVkIFNoYXJlZFdv
cmtlcnMiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpKSB7
Ci0gICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIHVzZXMgR2VvbG9jYXRpb24iKTsKLSAgICAg
ICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZyYW1l
LT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKSB7Ci0gICAgICAgICAgICBQQ0xP
RygiICAgLU5vIGN1cnJlbnQgaGlzdG9yeSBpdGVtIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNo
ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+cXVpY2tS
ZWRpcmVjdENvbWluZygpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLVF1aWNrIHJlZGlyZWN0
IGlzIGNvbWluZyIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGlu
Z0luQVBJU2Vuc2UoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBp
cyBzdGlsbCBsb2FkaW5nIGluIEFQSSBzZW5zZSIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVu
dExvYWRlciBpcyBpbiB0aGUgbWlkZGxlIG9mIHN0b3BwaW5nIik7Ci0gICAgICAgICAgICBjYW5u
b3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQo
KS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKSkgewotICAgICAgICAgICAgUENMT0coIiAg
IC1UaGUgZG9jdW1lbnQgY2Fubm90IHN1c3BlY3QgaXRzIGFjdGl2ZSBET00gT2JqZWN0cyIpOwot
ICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgp
LT5jYW5DYWNoZUluUGFnZUNhY2hlKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtVGhlIERv
Y3VtZW50TG9hZGVyIHVzZXMgYW4gYXBwbGljYXRpb24gY2FjaGUiKTsKLSAgICAgICAgICAgIGNh
bm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPmNhbkNhY2hlUGFnZSgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLVRo
ZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNoZWQiKTsKLSAgICAgICAgICAg
IGNhbm5vdENhY2hlID0gdHJ1ZTsgCi0gICAgICAgIH0KLSAgICB9IHdoaWxlIChmYWxzZSk7Ci0g
ICAgCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlm
ICghbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKGNoaWxkLCBpbmRlbnRMZXZlbCArIDEpKQotICAg
ICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgIAotICAgIFBDTE9HKGNhbm5vdENhY2hl
ID8gIiBGcmFtZSBDQU5OT1QgYmUgY2FjaGVkIiA6ICIgRnJhbWUgQ0FOIGJlIGNhY2hlZCIpOwot
ICAgIFBDTE9HKCIrLS0tIik7Ci0gICAgCi0gICAgcmV0dXJuICFjYW5ub3RDYWNoZTsKLX0KLSAg
ICAKLXN0YXRpYyB2b2lkIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKFBhZ2UqIHBhZ2UpCi17Ci0g
ICAgLy8gT25seSBib3RoZXIgbG9nZ2luZyBmb3IgbWFpbiBmcmFtZXMgdGhhdCBoYXZlIGFjdHVh
bGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250ZW50LgotICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS0+
bG9hZGVyKCktPnN0YXRlTWFjaGluZSgpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBLVVJMIGN1cnJlbnRVUkwgPSBwYWdlLT5tYWluRnJhbWUo
KS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgPyBwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgpOwotICAgIGlmIChjdXJyZW50VVJM
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGludCBpbmRlbnRMZXZlbCA9
IDA7ICAgIAotICAgIFBDTE9HKCItLS0tLS0tLVxuIERldGVybWluaW5nIGlmIHBhZ2UgY2FuIGJl
IGNhY2hlZDoiKTsKLSAgICAKLSAgICBib29sIGNhbm5vdENhY2hlID0gIWxvZ0NhbkNhY2hlRnJh
bWVEZWNpc2lvbihwYWdlLT5tYWluRnJhbWUoKSwgMSk7Ci0gICAgCi0gICAgRnJhbWVMb2FkVHlw
ZSBsb2FkVHlwZSA9IHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFR5cGUoKTsKLSAg
ICBpZiAoIXBhZ2UtPmJhY2tGb3J3YXJkKCktPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgUENMT0co
IiAgIC1UaGUgYmFjay9mb3J3YXJkIGxpc3QgaXMgZGlzYWJsZWQgb3IgaGFzIDAgY2FwYWNpdHki
KTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXBhZ2UtPnNl
dHRpbmdzKCktPnVzZXNQYWdlQ2FjaGUoKSkgewotICAgICAgICBQQ0xPRygiICAgLVBhZ2Ugc2V0
dGluZ3Mgc2F5cyBiL2YgY2FjaGUgZGlzYWJsZWQiKTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0
cnVlOwotICAgIH0KLSNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQotICAgIGlmIChEZXZp
Y2VNb3Rpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KHBhZ2UpKSB7Ci0gICAgICAgIFBDTE9HKCIg
ICAtUGFnZSBpcyB1c2luZyBEZXZpY2VNb3Rpb24iKTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0
cnVlOwotICAgIH0KLSAgICBpZiAoRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjppc0FjdGl2
ZUF0KHBhZ2UpKSB7Ci0gICAgICAgIFBDTE9HKCIgICAtUGFnZSBpcyB1c2luZyBEZXZpY2VPcmll
bnRhdGlvbiIpOwotICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0g
ICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWQpIHsKLSAgICAgICAgUENMT0co
IiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCIpOwotICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7
Ci0gICAgfQotICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdp
bikgewotICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkIGZyb20gb3JpZ2lu
Iik7Ci0gICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGxvYWRUeXBl
ID09IEZyYW1lTG9hZFR5cGVTYW1lKSB7Ci0gICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlz
OiBTYW1lIik7Ci0gICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
UENMT0coY2Fubm90Q2FjaGUgPyAiIFBhZ2UgQ0FOTk9UIGJlIGNhY2hlZFxuLS0tLS0tLS0iIDog
IiBQYWdlIENBTiBiZSBjYWNoZWRcbi0tLS0tLS0tIik7Ci19Ci0KLSNlbmRpZiAKLQogUGFnZUNh
Y2hlKiBwYWdlQ2FjaGUoKQogewogICAgIHN0YXRpYyBQYWdlQ2FjaGUqIHN0YXRpY1BhZ2VDYWNo
ZSA9IG5ldyBQYWdlQ2FjaGU7CkBAIC0yNDQsNjggKzc0LDE1IEBAIFBhZ2VDYWNoZTo6UGFnZUNh
Y2hlKCkKIHsKIH0KICAgICAKLWJvb2wgUGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5n
VGhpc0ZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1l
LT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUoY2hpbGQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBG
cmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgRG9jdW1lbnRM
b2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCk7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgCi0gICAgcmV0
dXJuIGRvY3VtZW50TG9hZGVyCi0gICAgICAgICYmIGRvY3VtZW50TG9hZGVyLT5tYWluRG9jdW1l
bnRFcnJvcigpLmlzTnVsbCgpCi0gICAgICAgIC8vIERvIG5vdCBjYWNoZSBlcnJvciBwYWdlcyAo
dGhlc2UgY2FuIGJlIHJlY29nbml6ZWQgYXMgcGFnZXMgd2l0aCBzdWJzdGl0dXRlIGRhdGEgb3Ig
dW5yZWFjaGFibGUgVVJMcykuCi0gICAgICAgICYmICEoZG9jdW1lbnRMb2FkZXItPnN1YnN0aXR1
dGVEYXRhKCkuaXNWYWxpZCgpICYmICFkb2N1bWVudExvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5m
YWlsaW5nVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICAmJiAoIWZyYW1lTG9hZGVyLT5zdWJmcmFt
ZUxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSB8fCBmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygp
LT5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoKSkKLSAgICAgICAgJiYgKCFkb2N1bWVudC0+dXJs
KCkucHJvdG9jb2xJcygiaHR0cHMiKSB8fCAoIWRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmNh
Y2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpICYmICFkb2N1bWVudExvYWRlci0+cmVzcG9uc2Uo
KS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkpCi0gICAgICAgICYmICghZnJhbWUtPmRv
bVdpbmRvdygpIHx8ICFmcmFtZS0+ZG9tV2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50
TmFtZXMoKS51bmxvYWRFdmVudCkpCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAg
JiYgIWRvY3VtZW50LT5oYXNPcGVuRGF0YWJhc2VzKCkKLSNlbmRpZgotI2lmIEVOQUJMRShTSEFS
RURfV09SS0VSUykKLSAgICAgICAgJiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJl
ZFdvcmtlcnMoZG9jdW1lbnQpCi0jZW5kaWYKLSAgICAgICAgJiYgIWRvY3VtZW50LT51c2luZ0dl
b2xvY2F0aW9uKCkKLSAgICAgICAgJiYgZnJhbWVMb2FkZXItPmhpc3RvcnkoKS0+Y3VycmVudEl0
ZW0oKQotICAgICAgICAmJiAhZnJhbWVMb2FkZXItPnF1aWNrUmVkaXJlY3RDb21pbmcoKQotICAg
ICAgICAmJiAhZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ0luQVBJU2Vuc2UoKQotICAgICAgICAm
JiAhZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKQotICAgICAgICAmJiBkb2N1bWVudC0+Y2Fu
U3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGlu
dmVzdGlnYXRpbmcgY2FjaGluZyBmcmFtZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQKLSAgICAg
ICAgLy8gYXBwbGljYXRpb24gY2FjaGUuIDxyZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0cmFja3Mg
dGhhdCB3b3JrLgotICAgICAgICAmJiBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpCi0gICAgICAgICYmIGZyYW1lTG9hZGVyLT5jbGll
bnQoKS0+Y2FuQ2FjaGVQYWdlKCk7Ci19Ci0gICAgCiBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGUo
UGFnZSogcGFnZSkKIHsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24ocGFnZSk7Ci0j
ZW5kaWYKLSAgICAKLSAgICAvLyBDYWNoZSB0aGUgcGFnZSwgaWYgcG9zc2libGUuCi0gICAgLy8g
RG9uJ3Qgd3JpdGUgdG8gdGhlIGNhY2hlIGlmIGluIHRoZSBtaWRkbGUgb2YgYSByZWRpcmVjdCwg
c2luY2Ugd2Ugd2lsbCB3YW50IHRvCi0gICAgLy8gc3RvcmUgdGhlIGZpbmFsIHBhZ2Ugd2UgZW5k
IHVwIG9uLgotICAgIC8vIE5vIHBvaW50IHdyaXRpbmcgdG8gdGhlIGNhY2hlIG9uIGEgcmVsb2Fk
IG9yIGxvYWRTYW1lLCBzaW5jZSB3ZSB3aWxsIGp1c3Qgd3JpdGUKLSAgICAvLyBvdmVyIGl0IGFn
YWluIHdoZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgotICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUg
PSBwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmxvYWRUeXBlKCk7Ci0gICAgCi0gICAgcmV0
dXJuIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUocGFnZS0+bWFpbkZyYW1lKCkpCi0g
ICAgICAgICYmIHBhZ2UtPmJhY2tGb3J3YXJkKCktPmlzQWN0aXZlKCkKLSAgICAgICAgJiYgcGFn
ZS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpCi0jaWYgRU5BQkxFKERFVklDRV9PUklFTlRB
VElPTikKLSAgICAgICAgJiYgIURldmljZU1vdGlvbkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQocGFn
ZSkKLSAgICAgICAgJiYgIURldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChw
YWdlKQotI2VuZGlmCi0gICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZWxvYWQK
LSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4KLSAg
ICAgICAgJiYgbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZVNhbWU7CisgICAgUGFnZUNhY2hlUG9s
aWN5OjpGYWN0b3J5RnVuY3Rpb24qIHBhZ2VDYWNoZVBvbGljeUZhY3RvcnkgPSBQYWdlQ2FjaGVQ
b2xpY3k6OkdldEZhY3RvcnkoKTsKKyAgICBPd25QdHI8UGFnZUNhY2hlUG9saWN5PiBwYWdlQ2Fj
aGVQb2xpY3kgPSBwYWdlQ2FjaGVQb2xpY3lGYWN0b3J5KHBhZ2UpOworCisgICAgcmV0dXJuIHBh
Z2VDYWNoZVBvbGljeS0+Q2FuQ2FjaGVQYWdlKCk7CiB9CiAKIHZvaWQgUGFnZUNhY2hlOjpzZXRD
YXBhY2l0eShpbnQgY2FwYWNpdHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L1BhZ2VDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAppbmRleCBh
ZDUzMzNjNjQzNTZlY2IxOTZkMzRiYzkwOTg3OTUxNzJjODJiYWJiLi41MDk5MDJjOGIxNWVlNDJj
OWJjMDU1NmY4ODg2N2EyZWZmYmU5ZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgK
QEAgLTcxLDggKzcxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQYWdlQ2FjaGUo
KTsgLy8gVXNlIHBhZ2VDYWNoZSgpIGluc3RlYWQuCiAgICAgICAgIH5QYWdlQ2FjaGUoKTsgLy8g
Tm90IGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRl
bGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgogICAgICAgICAKLSAg
ICAgICAgc3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSop
OwotCiAgICAgICAgIHZvaWQgYWRkVG9MUlVMaXN0KEhpc3RvcnlJdGVtKik7IC8vIEFkZHMgdG8g
dGhlIGhlYWQgb2YgdGhlIGxpc3QuCiAgICAgICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxpc3QoSGlz
dG9yeUl0ZW0qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2Fj
aGVQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGVQb2xpY3kuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdlNGFhNDUwZjMzMThkMDU0ODVmYzUzODU2YzEyNjYwMzU2MTJkNjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5j
cHAKQEAgLTAsMCArMSwyNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBh
Z2VDYWNoZVBvbGljeS5oIgorCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKyNp
bmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEZXZpY2VNb3Rpb25D
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYWdlQ2FjaGVQb2xpY3k6OkZhY3RvcnlGdW5j
dGlvbiogUGFnZUNhY2hlUG9saWN5OjpzX2ZhY3RvcnkgPSBQYWdlQ2FjaGVQb2xpY3k6OkRlZmF1
bHRGYWN0b3J5RnVuY3Rpb247CisKK1BhZ2VDYWNoZVBvbGljeTo6UGFnZUNhY2hlUG9saWN5KFBh
Z2UqIHBhZ2UpIAorICAgIDogbV9iYWNrRm9yd2FyZElzQWN0aXZlKHBhZ2UtPmJhY2tGb3J3YXJk
KCktPmlzQWN0aXZlKCkpCisgICAgLCBtX3NldHRpbmdzQWxsb3dQYWdlQ2FjaGUocGFnZS0+c2V0
dGluZ3MoKS0+dXNlc1BhZ2VDYWNoZSgpKQorI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04p
CisgICAgLCBtX2RldmljZU1vdGlvbklzQWN0aXZlKERldmljZU1vdGlvbkNvbnRyb2xsZXI6Omlz
QWN0aXZlQXQocGFnZSkpCisgICAgLCBtX2RldmljZU9yaWVudGF0aW9uSXNBY3RpdmUoRGV2aWNl
TW90aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKSkKKyNlbmRpZgorICAgICwgbV9sb2Fk
VHlwZShwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmxvYWRUeXBlKCkpCisgICAgLCBtX3Bh
Z2UocGFnZSkKKyAgICAsIG1fbG9nSW5kZW50TGV2ZWwoMCkKK3sKK30KKworUGFzc093blB0cjxQ
YWdlQ2FjaGVQb2xpY3k+IFBhZ2VDYWNoZVBvbGljeTo6RGVmYXVsdEZhY3RvcnlGdW5jdGlvbihQ
YWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZUNhY2hlUG9saWN5KHBh
Z2UpKTsKK30KKworUGFnZUNhY2hlUG9saWN5OjpGYWN0b3J5RnVuY3Rpb24qIFBhZ2VDYWNoZVBv
bGljeTo6R2V0RmFjdG9yeSgpCit7CisgICAgcmV0dXJuIHNfZmFjdG9yeTsKK30KKwordm9pZCBQ
YWdlQ2FjaGVQb2xpY3k6OlNldEZhY3RvcnkoRmFjdG9yeUZ1bmN0aW9uKiBuZXdmYWN0b3J5KQor
eworICAgIHNfZmFjdG9yeSA9IG5ld2ZhY3Rvcnk7Cit9CisKK2Jvb2wgUGFnZUNhY2hlUG9saWN5
OjpDYW5DYWNoZVBhZ2UoKQoreworICAgIFBvbGljeUxvZygiLS0tLS0tLS1cbiBEZXRlcm1pbmlu
ZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7CisKKyAgICBjb25zdCBib29sIGNhbkNhY2hlTWFp
bkZyYW1lID0gQ2FuQ2FjaGVGcmFtZShtX3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBjb25zdCBi
b29sIGNhbkNhY2hlUGFnZSA9IENhbkNhY2hlUGFnZUltcGwoKTsKKworICAgIGlmIChjYW5DYWNo
ZU1haW5GcmFtZSAmJiBjYW5DYWNoZVBhZ2UpCisgICAgICAgIFBvbGljeUxvZygiIFBhZ2UgQ0FO
IGJlIGNhY2hlZFxuLS0tLS0tLS0iKTsKKyAgICBlbHNlCisgICAgICAgIFBvbGljeUxvZygiIFBh
Z2UgQ0FOTk9UIGJlIGNhY2hlZFxuLS0tLS0tLS0iKTsKKyAgICByZXR1cm4gY2FuQ2FjaGVNYWlu
RnJhbWUgJiYgY2FuQ2FjaGVQYWdlOworfQorCit2b2lkIFBhZ2VDYWNoZVBvbGljeTo6UG9saWN5
TG9nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBMT0coUGFnZUNhY2hlLCAiJSpzJXMi
LCBtX2xvZ0luZGVudExldmVsKjQsICIiLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOworfQorCisK
K2Jvb2wgUGFnZUNhY2hlUG9saWN5OjpDYW5DYWNoZUZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICArK21fbG9nSW5kZW50TGV2ZWw7CisKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50
cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBLVVJMIGN1cnJlbnRVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgp
IDogS1VSTCgpOworICAgICAgICBLVVJMIG5ld1VSTCA9IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlz
aW9uYWxEb2N1bWVudExvYWRlcigpID8gZnJhbWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3Vt
ZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgpOworICAgICAgICBpZiAobmV3VVJMLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIFBvbGljeUxvZyhtYWtlU3RyaW5nKCIgRGV0ZXJtaW5pbmcgaWYgc3Vi
ZnJhbWUgd2l0aCBVUkwoIiwgY3VycmVudFVSTC5zdHJpbmcoKSwgIikgY2FuIGJlIGNhY2hlZDoi
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFBvbGljeUxvZyhtYWtlU3RyaW5nKCIgRGV0
ZXJtaW5pbmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCIsIGN1cnJl
bnRVUkwuc3RyaW5nKCksICIpIHRvICgiLCBuZXdVUkwuc3RyaW5nKCksICIpOiIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFDYW5DYWNoZUZyYW1lKGNoaWxkKSkgewor
ICAgICAgICAgICAgUG9saWN5TG9nKCIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIpOworICAgICAg
ICAgICAgLS1tX2xvZ0luZGVudExldmVsOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIFBvbGljeUxvZygiIEZyYW1lIENBTiBiZSBjYWNoZWQiKTsKKyAgICB9
CisKKyAgICAtLW1fbG9nSW5kZW50TGV2ZWw7CisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCkpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgLVRoZXJlIGlzIG5vIERvY3Vt
ZW50TG9hZGVyIG9iamVjdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEZy
YW1lRGF0YSBmcmFtZWRhdGE7CisKKyAgICBmcmFtZWRhdGEuaXNFcnJvclBhZ2UgPSBmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKS0+c3Vic3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpOworICAgIGZy
YW1lZGF0YS5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMgPSBmcmFtZS0+cGFnZSgpLT5zZXR0aW5n
cygpLT5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoKTsKKyAgICBmcmFtZWRhdGEuaGFzRG9jdW1l
bnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKGZy
YW1lZGF0YS5oYXNEb2N1bWVudExvYWRlcikgeworICAgICAgICBmcmFtZWRhdGEubWFpbkRvY3Vt
ZW50RXJyb3IgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5Eb2N1bWVu
dEVycm9yKCkuaXNOdWxsKCk7CisgICAgICAgIGZyYW1lZGF0YS5pc0xvYWRpbmdJbkFQSVNlbnNl
ID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNl
KCk7CisgICAgICAgIGZyYW1lZGF0YS5sb2FkZXJJc1N0b3BwaW5nID0gZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCk7CisgICAgICAgIGZyYW1lZGF0YS5hcHBD
YWNoZURlbmllZCA9ICFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0
aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hlSW5QYWdlQ2FjaGUoKTsKKyAgICB9CisgICAgZnJhbWVk
YXRhLmNvbnRhaW5zUGx1Z2lucyA9IGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+
Y29udGFpbnNQbHVnaW5zKCk7CisgICAgZnJhbWVkYXRhLnByb3RvY29sID0gZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnByb3RvY29sKCk7CisgICAgZnJhbWVkYXRhLnJlc3BvbnNlRGVuaWVzID0g
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpLmNhY2hlQ29udHJv
bENvbnRhaW5zTm9DYWNoZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENv
bnRhaW5zTm9TdG9yZSgpOworICAgIGZyYW1lZGF0YS5oYXNVbmxvYWRMaXN0ZW5lciA9IGZyYW1l
LT5kb21XaW5kb3coKSAmJiBmcmFtZS0+ZG9tV2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2
ZW50TmFtZXMoKS51bmxvYWRFdmVudCk7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyAgICBm
cmFtZWRhdGEuaGFzT3BlbkRhdGFiYXNlID0gZnJhbWUtPmRvY3VtZW50KCktPmhhc09wZW5EYXRh
YmFzZXMoKTsKKyNlbmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICBmcmFtZWRh
dGEuaGFzU2hhcmVkV29ya2VycyA9IFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdv
cmtlcnMoZnJhbWUtPmRvY3VtZW50KCkpOworI2VuZGlmCisgICAgZnJhbWVkYXRhLnVzZXNHZW9s
b2NhdGlvbiA9IGZyYW1lLT5kb2N1bWVudCgpLT51c2luZ0dlb2xvY2F0aW9uKCk7CisgICAgZnJh
bWVkYXRhLmhhc0hpc3RvcnlDdXJyZW50SXRlbSA9IGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgp
LT5jdXJyZW50SXRlbSgpOworICAgIGZyYW1lZGF0YS5xdWlja1JlZGlyZWN0Q29taW5nID0gZnJh
bWUtPmxvYWRlcigpLT5xdWlja1JlZGlyZWN0Q29taW5nKCk7CisgICAgZnJhbWVkYXRhLmNhblN1
c3BlbmRBY3RpdmVET01PYmplY3RzID0gZnJhbWUtPmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3Rp
dmVET01PYmplY3RzKCk7CisgICAgZnJhbWVkYXRhLmNhbkNhY2hlUGFnZSA9IGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNhbkNhY2hlUGFnZSgpOworCisgICAgcmV0dXJuIENhbkNhY2hlRnJh
bWVJbXBsKGZyYW1lZGF0YSk7Cit9CisKKy8vIFRoZXNlICpJbXBsIGZ1bmN0aW9ucyBpbXBsZW1l
bnQgdGhlIGRlZmF1bHQgcGFnZSBjYWNoZSBwb2xpY3kuCitib29sIFBhZ2VDYWNoZVBvbGljeTo6
Q2FuQ2FjaGVQYWdlSW1wbCgpCit7CisgICAgYm9vbCBjYW5DYWNoZVBhZ2UgPSB0cnVlOworCisg
ICAgaWYgKCFtX2JhY2tGb3J3YXJkSXNBY3RpdmUpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAt
VGhlIGJhY2svZm9yd2FyZCBsaXN0IGlzIGRpc2FibGVkIG9yIGhhcyAwIGNhcGFjaXR5LiIpOwor
ICAgICAgICBjYW5DYWNoZVBhZ2UgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFtX3NldHRpbmdz
QWxsb3dQYWdlQ2FjaGUpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtUGFnZSBzZXR0aW5ncyBz
YXlzIGIvZiBjYWNoZSBkaXNhYmxlZCIpOworICAgICAgICBjYW5DYWNoZVBhZ2UgPSBmYWxzZTsK
KyAgICB9CisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKKyAgICBpZiAobV9kZXZpY2VN
b3Rpb25Jc0FjdGl2ZSkgeworICAgICAgICBQb2xpY3lMb2coIiAgIC1QYWdlIGlzIHVzaW5nIERl
dmljZU1vdGlvbiIpOworICAgICAgICBjYW5DYWNoZVBhZ2UgPSBmYWxzZTsKKyAgICB9CisgICAg
aWYgKG1fZGV2aWNlT3JpZW50YXRpb25Jc0FjdGl2ZSkgeworICAgICAgICBQb2xpY3lMb2coIiAg
IC1QYWdlIGlzIHVzaW5nIERldmljZU9yaWVudGF0aW9uIik7CisgICAgICAgIGNhbkNhY2hlUGFn
ZSA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorICAgIGlmIChtX2xvYWRUeXBlID09IEZyYW1lTG9h
ZFR5cGVSZWxvYWQpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxv
YWQiKTsKKyAgICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfSBlbHNlIGlmIChtX2xv
YWRUeXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luKSB7CisgICAgICAgIFBvbGlj
eUxvZygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkIGZyb20gb3JpZ2luIik7CisgICAgICAgIGNh
bkNhY2hlUGFnZSA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAobV9sb2FkVHlwZSA9PSBGcmFtZUxv
YWRUeXBlU2FtZSkgeworICAgICAgICBQb2xpY3lMb2coIiAgIC1Mb2FkIHR5cGUgaXM6IFNhbWUi
KTsKKyAgICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfQorCisKKyAgICByZXR1cm4g
Y2FuQ2FjaGVQYWdlOworfQorCitib29sIFBhZ2VDYWNoZVBvbGljeTo6Q2FuQ2FjaGVGcmFtZUlt
cGwoY29uc3QgRnJhbWVEYXRhJiBmcmFtZWRhdGEpCit7CisgICAgaWYgKCFmcmFtZWRhdGEuaGFz
RG9jdW1lbnRMb2FkZXIpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtVGhlcmUgaXMgbm8gRG9j
dW1lbnRMb2FkZXIgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Ym9vbCBjYW5DYWNoZUZyYW1lID0gdHJ1ZTsKKyAgICBpZiAoZnJhbWVkYXRhLm1haW5Eb2N1bWVu
dEVycm9yKSB7CisgICAgICAgIFBvbGljeUxvZygiICAgLU1haW4gZG9jdW1lbnQgaGFzIGFuIGVy
cm9yIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZy
YW1lZGF0YS5pc0Vycm9yUGFnZSkgeworICAgICAgICBQb2xpY3lMb2coIiAgIC1GcmFtZSBpcyBh
biBlcnJvciBwYWdlIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKGZyYW1lZGF0YS5jb250YWluc1BsdWdpbnMgJiYgIWZyYW1lZGF0YS5wYWdlQ2FjaGVT
dXBwb3J0c1BsdWdpbnMpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtRnJhbWUgY29udGFpbnMg
cGx1Z2lucywgYW5kIHRoZSBwYWdlIGNhY2hlIHNldHRpbmdzIGRvIG5vdCBzdXBwb3J0IHBsdWdp
bnMuIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZy
YW1lZGF0YS5wcm90b2NvbCA9PSAiaHR0cHMiKSB7CisgICAgICAgIFBvbGljeUxvZygiICAgLUZy
YW1lIGlzIEhUVFBTIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKGZyYW1lZGF0YS5yZXNwb25zZURlbmllcykgeworICAgICAgICBQb2xpY3lMb2coIiAg
IC1GcmFtZSByZXNwb25zZSBjb250YWlucyBOb0NhY2hlIG9yIE5vU3RvcmUiKTsKKyAgICAgICAg
Y2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmhhc1VubG9h
ZExpc3RlbmVyKSB7CisgICAgICAgIFBvbGljeUxvZygiICAgLUZyYW1lIGhhcyBhbiB1bmxvYWQg
ZXZlbnQgbGlzdGVuZXIiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0K
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorICAgIGlmIChmcmFtZWRhdGEuaGFzT3BlbkRhdGFi
YXNlKSB7CisgICAgICAgIFBvbGljeUxvZygiICAgLUZyYW1lIGhhcyBvbmUgb3IgbW9yZSBvcGVu
IGRhdGFiYXNlIGhhbmRsZXMiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAg
IH0KKyNlbmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICBpZiAoZnJhbWVkYXRh
Lmhhc1NoYXJlZFdvcmtlcnMpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtRnJhbWUgaGFzIGFz
c29jaWF0ZWQgU2hhcmVkV29ya2VycyIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7
CisgICAgfQorI2VuZGlmCisgICAgaWYgKGZyYW1lZGF0YS51c2VzR2VvbG9jYXRpb24pIHsKKyAg
ICAgICAgUG9saWN5TG9nKCIgICAtRnJhbWUgdXNlcyBHZW9sb2NhdGlvbiIpOworICAgICAgICBj
YW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmcmFtZWRhdGEuaGFzSGlzdG9y
eUN1cnJlbnRJdGVtKSB7CisgICAgICAgIFBvbGljeUxvZygiICAgLU5vIGN1cnJlbnQgaGlzdG9y
eSBpdGVtIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYg
KGZyYW1lZGF0YS5xdWlja1JlZGlyZWN0Q29taW5nKSB7CisgICAgICAgIFBvbGljeUxvZygiICAg
LVF1aWNrIHJlZGlyZWN0IGlzIGNvbWluZyIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFs
c2U7CisgICAgfQorICAgIGlmIChmcmFtZWRhdGEuaXNMb2FkaW5nSW5BUElTZW5zZSkgeworICAg
ICAgICBQb2xpY3lMb2coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBzdGlsbCBsb2FkaW5nIGluIEFQ
SSBzZW5zZSIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChmcmFtZWRhdGEubG9hZGVySXNTdG9wcGluZykgeworICAgICAgICBQb2xpY3lMb2coIiAgIC1E
b2N1bWVudExvYWRlciBpcyBpbiB0aGUgbWlkZGxlIG9mIHN0b3BwaW5nIik7CisgICAgICAgIGNh
bkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFmcmFtZWRhdGEuY2FuU3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHMpIHsKKyAgICAgICAgUG9saWN5TG9nKCIgICAtVGhlIGRvY3VtZW50
IGNhbm5vdCBzdXNwZW5kIGl0cyBhY3RpdmUgRE9NIE9iamVjdHMiKTsKKyAgICAgICAgY2FuQ2Fj
aGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmFwcENhY2hlRGVuaWVk
KSB7CisgICAgICAgIFBvbGljeUxvZygiICAgLVRoZSBhcHBsaWNhdGlvbiBjYWNoZSBkZW5pZWQg
dGhlIHBhZ2UgY2FjaGUuIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9
CisgICAgaWYgKCFmcmFtZWRhdGEuY2FuQ2FjaGVQYWdlKSB7CisgICAgICAgIFBvbGljeUxvZygi
ICAgLVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1lIGNhbm5vdCBiZSBjYWNoZWQiKTsKKyAgICAg
ICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gY2FuQ2Fj
aGVGcmFtZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGVQb2xpY3kuaCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvUGFnZUNhY2hlUG9saWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzI4NmY1N2U0YzY5OTUzNDJmODcxZjMz
M2U0MzFhY2IwZjU0MjcxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvUGFnZUNhY2hlUG9saWN5LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBQYWdlQ2Fj
aGVQb2xpY3lfaAorI2RlZmluZSBQYWdlQ2FjaGVQb2xpY3lfaAorCisjaW5jbHVkZSA8bG9hZGVy
L0ZyYW1lTG9hZGVyVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CisKK2Ns
YXNzIFBhZ2VDYWNoZVBvbGljeSAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDYWNo
ZVBvbGljeSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBQYXNzT3duUHRyPFBhZ2VDYWNoZVBvbGljeT4gKEZhY3RvcnlGdW5jdGlvbikoUGFnZSop
OworCisgICAgUGFnZUNhY2hlUG9saWN5KFBhZ2UqKTsKKyAgICBib29sIENhbkNhY2hlUGFnZSgp
OworCisgICAgc3RhdGljIHZvaWQgU2V0RmFjdG9yeShGYWN0b3J5RnVuY3Rpb24qKTsKKyAgICBz
dGF0aWMgRmFjdG9yeUZ1bmN0aW9uKiBHZXRGYWN0b3J5KCk7CisKK3Byb3RlY3RlZDoKKyAgICBz
dHJ1Y3QgRnJhbWVEYXRhIHsKKyAgICAgICAgYm9vbCBpc0Vycm9yUGFnZTsKKyAgICAgICAgYm9v
bCBwYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnM7CisgICAgICAgIGJvb2wgaGFzRG9jdW1lbnRMb2Fk
ZXI7CisgICAgICAgIGJvb2wgbWFpbkRvY3VtZW50RXJyb3I7CisgICAgICAgIGJvb2wgY29udGFp
bnNQbHVnaW5zOworICAgICAgICBTdHJpbmcgcHJvdG9jb2w7CisgICAgICAgIGJvb2wgcmVzcG9u
c2VEZW5pZXM7CisgICAgICAgIGJvb2wgaGFzVW5sb2FkTGlzdGVuZXI7CisjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKKyAgICAgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2U7CisjZW5kaWYKKyNpZiBF
TkFCTEUoU0hBUkVEX1dPUktFUlMpCisgICAgICAgIGJvb2wgaGFzU2hhcmVkV29ya2VyczsKKyNl
bmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGJvb2wgdXNl
c0dlb2xvY2F0aW9uOworICAgICAgICBib29sIGhhc0hpc3RvcnlDdXJyZW50SXRlbTsKKyAgICAg
ICAgYm9vbCBxdWlja1JlZGlyZWN0Q29taW5nOworICAgICAgICBib29sIGlzTG9hZGluZ0luQVBJ
U2Vuc2U7CisgICAgICAgIGJvb2wgbG9hZGVySXNTdG9wcGluZzsKKyAgICAgICAgYm9vbCBjYW5T
dXNwZW5kQWN0aXZlRE9NT2JqZWN0czsKKyAgICAgICAgYm9vbCBhcHBDYWNoZURlbmllZDsKKyAg
ICAgICAgYm9vbCBjYW5DYWNoZVBhZ2U7CisgICAgfTsKKworICAgIHZvaWQgUG9saWN5TG9nKGNv
bnN0IFN0cmluZyYpOworCisgICAgLy8gT3ZlcnJpZGUgdGhlc2UgdHdvIGZ1bmN0aW9ucyBmb3Ig
YWx0ZXJuYXRpdmUgcG9saWNpZXMuCisgICAgdmlydHVhbCBib29sIENhbkNhY2hlRnJhbWVJbXBs
KGNvbnN0IEZyYW1lRGF0YSYpOworICAgIHZpcnR1YWwgYm9vbCBDYW5DYWNoZVBhZ2VJbXBsKCk7
CisKKyAgICAvLyBQYWdlIGxldmVsIHBhcmFtZXRlcnMKKyAgICBib29sIG1fYmFja0ZvcndhcmRJ
c0FjdGl2ZTsKKyAgICBib29sIG1fc2V0dGluZ3NBbGxvd1BhZ2VDYWNoZTsKKyAgICBib29sIG1f
c2V0dGluZ3NBbGxvd3NQbHVnaW5zOworI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCisg
ICAgYm9vbCBtX2RldmljZU1vdGlvbklzQWN0aXZlOworICAgIGJvb2wgbV9kZXZpY2VPcmllbnRh
dGlvbklzQWN0aXZlOworI2VuZGlmCisgICAgRnJhbWVMb2FkVHlwZSBtX2xvYWRUeXBlOworcHJp
dmF0ZToKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlQ2FjaGVQb2xpY3k+IERlZmF1bHRGYWN0
b3J5RnVuY3Rpb24oUGFnZSopOworICAgIGJvb2wgQ2FuQ2FjaGVGcmFtZShGcmFtZSopOworICAg
ICAgICAKKyAgICBzdGF0aWMgRmFjdG9yeUZ1bmN0aW9uKiBzX2ZhY3Rvcnk7CisgICAgUGFnZSog
bV9wYWdlOworICAgIGludCBtX2xvZ0luZGVudExldmVsOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129314</attachid>
            <date>2012-02-28 12:58:50 -0800</date>
            <delta_ts>2012-02-28 13:32:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79269-20120228155848.patch</filename>
            <type>text/plain</type>
            <size>31920</size>
            <attacher name="Gavin Peters">gavinp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4ODI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQyOTZiYTkzYmYxMmRm
NzMwOGU0MmRjMGExYTZkYWYxZjljMTY2OS4uMjU4Y2U1OTZmNzExNWZkYmNkYmZjZDRhOGZlM2Yz
OTMxZmY0Mzk4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAyLTIyICBHYXZp
biBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlcGFyYXRlIFBhZ2VD
YWNoZVBvbGljeSBmcm9tIFBhZ2VDYWNoZSBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZWZhY3RvciBzZXBhcmF0ZXMgb3V0IHBhZ2Vj
YWNoZSBwb2xpY3kgZnJvbSB0aGUgcGFnZSBjYWNoZQorICAgICAgICBpdHNlbGYuICBUaGUgZGVi
dWcgbG9nZ2luZyBpcyB1bmlmaWVkIHdpdGggdGhlIGxvZ2ljICh0aGV5IHdlcmUKKyAgICAgICAg
ZGlmZmVyZW50IGJlZm9yZSEpLCBhbmQgb3RoZXIgY2xlYW51cHMgaW4gZGVidWcgbG9nZ2luZyB0
b28uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBpdCdzIGEgcmVmYWN0b3IuCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGU6OmNhbkNhY2hlKToKKyAg
ICAgICAgKiBoaXN0b3J5L1BhZ2VDYWNoZS5oOgorICAgICAgICAoUGFnZUNhY2hlKToKKyAgICAg
ICAgKiBoaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xpY3k6OlBhZ2VDYWNoZVBvbGljeSk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2FjaGVQb2xpY3k6OkRlZmF1bHRGYWN0b3J5RnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlUG9saWN5OjpHZXRGYWN0b3J5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6U2V0RmFjdG9yeSk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2FjaGVQb2xpY3k6OkNhbkNhY2hlUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlQ2FjaGVQb2xpY3k6OlBvbGljeUxvZyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2Fj
aGVQb2xpY3k6OkNhbkNhY2hlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNhY2hlUG9s
aWN5OjpDYW5DYWNoZVBhZ2VJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGlj
eTo6Q2FuQ2FjaGVGcmFtZUltcGwpOgorICAgICAgICAqIGhpc3RvcnkvUGFnZUNhY2hlUG9saWN5
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQYWdlQ2FjaGVQb2xpY3kp
OgorICAgICAgICAoRnJhbWVEYXRhKToKKwogMjAxMi0wMi0yNCAgRGF2aWQgS2lsemVyICA8ZGRr
aWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSB4Y3J1biB0byBmaW5kIGNvbXBpbGVyIHBh
dGhzIGZvciBHZW5lcmF0ZSBEZXJpdmVkIFNvdXJjZXMgYnVpbGQgcGhhc2Ugc2NyaXB0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggYmYxZTg5NjUxMjFjM2Q0MzA2ZTYzMzVlMWQ5ODVjNjViZmU3OGE1Zi4u
NjlmNGNhYzMxYzkyNmE1YzViYjg2MWUwNWVlN2VlOGYzNTVjOWMyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMTMwLDYgKzEzMCw3IEBACiAgICAgICAgICAgICAnaGlzdG9yeS9DYWNoZWRQYWdlLmgn
LAogICAgICAgICAgICAgJ2hpc3RvcnkvSGlzdG9yeUl0ZW0uaCcsCiAgICAgICAgICAgICAnaGlz
dG9yeS9QYWdlQ2FjaGUuaCcsCisgICAgICAgICAgICAnaGlzdG9yeS9QYWdlQ2FjaGVQb2xpY3ku
aCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9jZi9IaXN0b3J5UHJvcGVydHlMaXN0LmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFzZUFnZW50LmgnLApAQCAtMjMxNiw2ICsyMzE3LDcgQEAKICAgICAg
ICAgICAgICdoaXN0b3J5L0NhY2hlZFBhZ2UuY3BwJywKICAgICAgICAgICAgICdoaXN0b3J5L0hp
c3RvcnlJdGVtLmNwcCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9QYWdlQ2FjaGUuY3BwJywKKyAg
ICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHAnLAogICAgICAgICAgICAgJ2hp
c3RvcnkvY2YvSGlzdG9yeVByb3BlcnR5TGlzdC5jcHAnLAogICAgICAgICAgICAgJ2hpc3Rvcnkv
bWFjL0hpc3RvcnlJdGVtTWFjLm1tJywKICAgICAgICAgICAgICdoaXN0b3J5L3F0L0hpc3RvcnlJ
dGVtUXQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA0NDAxMWZiYzYzOGQwYzFiNDc1YmJhNjZkYjdiNjZlYWFjZWU5ZWNl
Li41ZmZjNjMwZDBmZjUwMjg1MjhmMzA1YTY1MWI2ZTE4NjFlMGRhMDIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDc4LDYg
KzM0NzgsOCBAQAogCQk5ODVCQjk2RTEzQTk0MDU4MDA3QTBCNjkgLyogTGlua1JlbEF0dHJpYnV0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTg1QkI5
NkMxM0E5NDA1ODAwN0EwQjY5IC8qIExpbmtSZWxBdHRyaWJ1dGUuaCAqLzsgfTsKIAkJOThDRTQz
MjYxMjlFMDBCRDAwNTgyMURDIC8qIExpbmtMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThDRTQzMjUxMjlFMDBCRDAwNTgyMURDIC8qIExp
bmtMb2FkZXIuY3BwICovOyB9OwogCQk5OENFNDMyQTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xv
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOThD
RTQzMjkxMjlFMDBFNTAwNTgyMURDIC8qIExpbmtMb2FkZXIuaCAqLzsgfTsKKwkJOThENUIyRTcx
NEY1QTAyQjAwOUJCQUZEIC8qIFBhZ2VDYWNoZVBvbGljeS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OEQ1QjJFNTE0RjVBMDJCMDA5QkJBRkQgLyog
UGFnZUNhY2hlUG9saWN5LmNwcCAqLzsgfTsKKwkJOThENUIyRTgxNEY1QTAyQjAwOUJCQUZEIC8q
IFBhZ2VDYWNoZVBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOThENUIyRTYxNEY1QTAyQjAwOUJCQUZEIC8qIFBhZ2VDYWNoZVBvbGljeS5oICov
OyB9OwogCQk5OEVCMUY5NTEzMTNGRTA1MDBEMEUxRUEgLyogTm90SW1wbGVtZW50ZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4RUIxRjk0MTMxM0ZF
MDUwMEQwRTFFQSAvKiBOb3RJbXBsZW1lbnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMEZCMTkxMTQwREI1NzkwMDIyNTg4RiAvKiBIVFRQ
VmFsaWRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjBGQjE4RjE0MERCNTc5MDAyMjU4OEYgLyogSFRUUFZhbGlkYXRpb24uY3BwICovOyB9
OwogCQk5QjBGQjE5MjE0MERCNTc5MDAyMjU4OEYgLyogSFRUUFZhbGlkYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMEZCMTkwMTQwREI1Nzkw
MDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5oICovOyB9OwpAQCAtMTAzNTgsNiArMTAzNjAsOCBA
QAogCQk5ODVCQjk2QzEzQTk0MDU4MDA3QTBCNjkgLyogTGlua1JlbEF0dHJpYnV0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rUmVsQXR0cmlidXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk4Q0U0MzI1MTI5RTAwQkQwMDU4MjFEQyAvKiBMaW5rTG9h
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtMb2FkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OENFNDMyOTEyOUUwMEU1MDA1ODIx
REMgLyogTGlua0xvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5r
TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk4RDVCMkU1MTRGNUEwMkIw
MDlCQkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3kuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUGFnZUNhY2hlUG9saWN5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOThENUIyRTYxNEY1QTAyQjAwOUJCQUZEIC8qIFBhZ2VDYWNoZVBvbGljeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ2FjaGVQb2xpY3kuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxl
bWVudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMEZCMThGMTQwREI1NzkwMDIyNTg4
RiAvKiBIVFRQVmFsaWRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVFRQVmFsaWRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
MEZCMTkwMTQwREI1NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVFRQVmFsaWRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQ4NDYsNiArMTQ4NTAsOCBAQAogCQkJCTUxNzQxRDBEMEIwNzI1OUEwMEVE
NDQyQyAvKiBIaXN0b3J5SXRlbS5oICovLAogCQkJCTE0NzdFNzc0MEJGNDEzNEEwMDE1Mjg3MiAv
KiBQYWdlQ2FjaGUuY3BwICovLAogCQkJCTE0NzdFNzc1MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdl
Q2FjaGUuaCAqLywKKwkJCQk5OEQ1QjJFNTE0RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9s
aWN5LmNwcCAqLywKKwkJCQk5OEQ1QjJFNjE0RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9s
aWN5LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGhpc3Rvcnk7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjM0MDEsNiArMjM0MDcsNyBAQAogCQkJCTM3NzRBQkE1MEZBMjFFQjQwMEFE
N0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
QTIxNDY4MDk3QTMyOTEwMEI5MDUwQSAvKiBQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc3
RTc3NzBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5
OEQ1QjJFODE0RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9saWN5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGMzgyMDg5MzE0N0QzNUY5MDAxMEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjM0NzQyREQxMzQzNjJGMDAwNTMxQkMyIC8qIFBhZ2VEZWJ1Z2dl
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyog
UGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NTQyLDYgKzI2NTQ5LDcgQEAKIAkJCQkx
QTBENTczNjBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDc3RTc3NjBCRjQxMzRBMDAxNTI4NzIgLyogUGFnZUNhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTk4RDVCMkU3MTRGNUEwMkIwMDlCQkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3ku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM4MjA4OTIxNDdEMzVGOTAwMTBCQzA2IC8qIFBhZ2VD
b25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM0NzQyREMxMzQzNjJGMDAwNTMx
QkMyIC8qIFBhZ2VEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDJCMEJE
MEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKaW5kZXggYTBkNWRlNGQ5NGY2MDBlN2RkNzc3MWEzNjg5
N2JhMzlmNWQzMTk4Yi4uMzM0YTllNWI4OTMwM2NjZTdkYThiZjljNmY5Mzc3ZmJkNWViZWNjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcApAQCAtNDIsMTAgKzQyLDExIEBACiAj
aW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiUGFnZUNhY2hlUG9saWN5
LmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIlN5c3Rl
bVRpbWUuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKQEAgLTU1LDE3NyArNTYsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgYXV0b3JlbGVhc2VJbnRlcnZhbCA9IDM7CiAK
LSNpZm5kZWYgTkRFQlVHCi0KLXN0YXRpYyBTdHJpbmcmIHBhZ2VDYWNoZUxvZ1ByZWZpeChpbnQg
aW5kZW50TGV2ZWwpCi17Ci0gICAgc3RhdGljIGludCBwcmV2aW91c0luZGVudCA9IC0xOwotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBwcmVmaXgsICgpKTsKLSAgICAKLSAgICBpZiAo
aW5kZW50TGV2ZWwgIT0gcHJldmlvdXNJbmRlbnQpIHsgICAgCi0gICAgICAgIHByZXZpb3VzSW5k
ZW50ID0gaW5kZW50TGV2ZWw7Ci0gICAgICAgIHByZWZpeC50cnVuY2F0ZSgwKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBwcmV2aW91c0luZGVudDsgKytpKQotICAgICAgICAgICAgcHJl
Zml4ICs9ICIgICAgIjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotc3Rh
dGljIHZvaWQgcGFnZUNhY2hlTG9nKGNvbnN0IFN0cmluZyYgcHJlZml4LCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi17Ci0gICAgTE9HKFBhZ2VDYWNoZSwgIiVzJXMiLCBwcmVmaXgudXRmOCgpLmRh
dGEoKSwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLX0KLSAgICAKLSNkZWZpbmUgUENMT0coLi4u
KSBwYWdlQ2FjaGVMb2cocGFnZUNhY2hlTG9nUHJlZml4KGluZGVudExldmVsKSwgbWFrZVN0cmlu
ZyhfX1ZBX0FSR1NfXykpCi0gICAgCi1zdGF0aWMgYm9vbCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNp
b24oRnJhbWUqIGZyYW1lLCBpbnQgaW5kZW50TGV2ZWwpCi17Ci0gICAgLy8gT25seSBib3RoZXIg
bG9nZ2luZyBmb3IgZnJhbWVzIHRoYXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29u
dGVudC4KLSAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5zdGF0ZU1hY2hpbmUoKS0+Y3JlYXRpbmdJ
bml0aWFsRW1wdHlEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgS1VSTCBj
dXJyZW50VVJMID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID8gZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwoKSA6IEtVUkwoKTsKLSAgICBpZiAoY3VycmVu
dFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBQQ0xPRygi
Ky0tLSIpOwotICAgIEtVUkwgbmV3VVJMID0gZnJhbWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERv
Y3VtZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsKCkgOiBLVVJMKCk7Ci0gICAgaWYgKCFuZXdVUkwuaXNFbXB0eSgpKQotICAgICAg
ICBQQ0xPRygiIERldGVybWluaW5nIGlmIGZyYW1lIGNhbiBiZSBjYWNoZWQgbmF2aWdhdGluZyBm
cm9tICgiLCBjdXJyZW50VVJMLnN0cmluZygpLCAiKSB0byAoIiwgbmV3VVJMLnN0cmluZygpLCAi
KToiKTsKLSAgICBlbHNlCi0gICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYgc3ViZnJhbWUg
d2l0aCBVUkwgKCIsIGN1cnJlbnRVUkwuc3RyaW5nKCksICIpIGNhbiBiZSBjYWNoZWQ6Iik7Ci0g
ICAgCi0gICAgYm9vbCBjYW5ub3RDYWNoZSA9IGZhbHNlOwotICAgIAotICAgIGRvIHsKLSAgICAg
ICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpIHsKLSAgICAgICAgICAg
IFBDTE9HKCIgICAtVGhlcmUgaXMgbm8gRG9jdW1lbnRMb2FkZXIgb2JqZWN0Iik7Ci0gICAgICAg
ICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpbkRvY3Vt
ZW50RXJyb3IoKS5pc051bGwoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1NYWluIGRvY3Vt
ZW50IGhhcyBhbiBlcnJvciIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmNv
bnRhaW5zUGx1Z2lucygpICYmICFmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wYWdlQ2FjaGVT
dXBwb3J0c1BsdWdpbnMoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBjb250YWlu
cyBwbHVnaW5zIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5wcm90b2NvbElzKCJodHRwcyIp
KSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGlzIEhUVFBTIik7Ci0gICAgICAgICAg
ICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyYW1lLT5kb21X
aW5kb3coKSAmJiBmcmFtZS0+ZG9tV2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFt
ZXMoKS51bmxvYWRFdmVudCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaGFzIGFu
IHVubG9hZCBldmVudCBsaXN0ZW5lciIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVl
OwotICAgICAgICB9Ci0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgaWYgKGZyYW1l
LT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJhc2VzKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIg
ICAtRnJhbWUgaGFzIG9wZW4gZGF0YWJhc2UgaGFuZGxlcyIpOwotICAgICAgICAgICAgY2Fubm90
Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktF
UlMpCi0gICAgICAgIGlmIChTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJz
KGZyYW1lLT5kb2N1bWVudCgpKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMg
YXNzb2NpYXRlZCBTaGFyZWRXb3JrZXJzIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRy
dWU7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnVz
aW5nR2VvbG9jYXRpb24oKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1GcmFtZSB1c2VzIEdl
b2xvY2F0aW9uIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkg
ewotICAgICAgICAgICAgUENMT0coIiAgIC1ObyBjdXJyZW50IGhpc3RvcnkgaXRlbSIpOwotICAg
ICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmFt
ZS0+bG9hZGVyKCktPnF1aWNrUmVkaXJlY3RDb21pbmcoKSkgewotICAgICAgICAgICAgUENMT0co
IiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hl
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpIHsKLSAgICAgICAgICAgIFBDTE9HKCIg
ICAtRG9jdW1lbnRMb2FkZXIgaXMgc3RpbGwgbG9hZGluZyBpbiBBUEkgc2Vuc2UiKTsKLSAgICAg
ICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCkpIHsKLSAgICAgICAgICAg
IFBDTE9HKCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBzdG9wcGluZyIp
OwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICghZnJhbWUtPmRvY3VtZW50KCktPmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkpIHsKLSAg
ICAgICAgICAgIFBDTE9HKCIgICAtVGhlIGRvY3VtZW50IGNhbm5vdCBzdXNwZWN0IGl0cyBhY3Rp
dmUgRE9NIE9iamVjdHMiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNoZSgpKSB7Ci0gICAgICAgICAg
ICBQQ0xPRygiICAgLVRoZSBEb2N1bWVudExvYWRlciB1c2VzIGFuIGFwcGxpY2F0aW9uIGNhY2hl
Iik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jYW5DYWNoZVBhZ2UoKSkgewotICAgICAg
ICAgICAgUENMT0coIiAgIC1UaGUgY2xpZW50IHNheXMgdGhpcyBmcmFtZSBjYW5ub3QgYmUgY2Fj
aGVkIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7IAotICAgICAgICB9Ci0gICAg
fSB3aGlsZSAoZmFsc2UpOwotICAgIAotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUtPnRy
ZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2li
bGluZygpKQotICAgICAgICBpZiAoIWxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihjaGlsZCwgaW5k
ZW50TGV2ZWwgKyAxKSkKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAKLSAg
ICBQQ0xPRyhjYW5ub3RDYWNoZSA/ICIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIgOiAiIEZyYW1l
IENBTiBiZSBjYWNoZWQiKTsKLSAgICBQQ0xPRygiKy0tLSIpOwotICAgIAotICAgIHJldHVybiAh
Y2Fubm90Q2FjaGU7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBsb2dDYW5DYWNoZVBhZ2VEZWNpc2lv
bihQYWdlKiBwYWdlKQotewotICAgIC8vIE9ubHkgYm90aGVyIGxvZ2dpbmcgZm9yIG1haW4gZnJh
bWVzIHRoYXQgaGF2ZSBhY3R1YWxseSBsb2FkZWQgYW5kIGhhdmUgY29udGVudC4KLSAgICBpZiAo
cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5zdGF0ZU1hY2hpbmUoKS0+Y3JlYXRpbmdJbml0
aWFsRW1wdHlEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgS1VSTCBjdXJyZW50VVJM
ID0gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpID8gcGFnZS0+
bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwoKSA6IEtVUkwoKTsK
LSAgICBpZiAoY3VycmVudFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBpbnQgaW5kZW50TGV2ZWwgPSAwOyAgICAKLSAgICBQQ0xPRygiLS0tLS0tLS1cbiBEZXRlcm1p
bmluZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7Ci0gICAgCi0gICAgYm9vbCBjYW5ub3RDYWNo
ZSA9ICFsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24ocGFnZS0+bWFpbkZyYW1lKCksIDEpOwotICAg
IAotICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVy
KCktPmxvYWRUeXBlKCk7Ci0gICAgaWYgKCFwYWdlLT5iYWNrRm9yd2FyZCgpLT5pc0FjdGl2ZSgp
KSB7Ci0gICAgICAgIFBDTE9HKCIgICAtVGhlIGJhY2svZm9yd2FyZCBsaXN0IGlzIGRpc2FibGVk
IG9yIGhhcyAwIGNhcGFjaXR5Iik7Ci0gICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKCFwYWdlLT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkpIHsKLSAgICAgICAg
UENMT0coIiAgIC1QYWdlIHNldHRpbmdzIHNheXMgYi9mIGNhY2hlIGRpc2FibGVkIik7Ci0gICAg
ICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICB9Ci0jaWYgRU5BQkxFKERFVklDRV9PUklFTlRB
VElPTikKLSAgICBpZiAoRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKSkg
ewotICAgICAgICBQQ0xPRygiICAgLVBhZ2UgaXMgdXNpbmcgRGV2aWNlTW90aW9uIik7Ci0gICAg
ICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKERldmljZU9yaWVudGF0aW9u
Q29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKSkgewotICAgICAgICBQQ0xPRygiICAgLVBhZ2Ug
aXMgdXNpbmcgRGV2aWNlT3JpZW50YXRpb24iKTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVl
OwotICAgIH0KLSNlbmRpZgotICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2Fk
KSB7Ci0gICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWxvYWQiKTsKLSAgICAgICAg
Y2Fubm90Q2FjaGUgPSB0cnVlOwotICAgIH0KLSAgICBpZiAobG9hZFR5cGUgPT0gRnJhbWVMb2Fk
VHlwZVJlbG9hZEZyb21PcmlnaW4pIHsKLSAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6
IFJlbG9hZCBmcm9tIG9yaWdpbiIpOwotICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAg
fQotICAgIGlmIChsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU2FtZSkgewotICAgICAgICBQQ0xP
RygiICAgLUxvYWQgdHlwZSBpczogU2FtZSIpOwotICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7
Ci0gICAgfQotICAgIAotICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBQYWdlIENBTk5PVCBiZSBj
YWNoZWRcbi0tLS0tLS0tIiA6ICIgUGFnZSBDQU4gYmUgY2FjaGVkXG4tLS0tLS0tLSIpOwotfQot
Ci0jZW5kaWYgCi0KIFBhZ2VDYWNoZSogcGFnZUNhY2hlKCkKIHsKICAgICBzdGF0aWMgUGFnZUNh
Y2hlKiBzdGF0aWNQYWdlQ2FjaGUgPSBuZXcgUGFnZUNhY2hlOwpAQCAtMjQ0LDY4ICs3NCwxMSBA
QCBQYWdlQ2FjaGU6OlBhZ2VDYWNoZSgpCiB7CiB9CiAgICAgCi1ib29sIFBhZ2VDYWNoZTo6Y2Fu
Q2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCi17Ci0gICAgZm9yIChG
cmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFjYW5DYWNoZVBh
Z2VDb250YWluaW5nVGhpc0ZyYW1lKGNoaWxkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpOwotICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lTG9hZGVyLT5k
b2N1bWVudExvYWRlcigpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVu
dCgpOwotICAgIAotICAgIHJldHVybiBkb2N1bWVudExvYWRlcgotICAgICAgICAmJiBkb2N1bWVu
dExvYWRlci0+bWFpbkRvY3VtZW50RXJyb3IoKS5pc051bGwoKQotICAgICAgICAvLyBEbyBub3Qg
Y2FjaGUgZXJyb3IgcGFnZXMgKHRoZXNlIGNhbiBiZSByZWNvZ25pemVkIGFzIHBhZ2VzIHdpdGgg
c3Vic3RpdHV0ZSBkYXRhIG9yIHVucmVhY2hhYmxlIFVSTHMpLgotICAgICAgICAmJiAhKGRvY3Vt
ZW50TG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKSAmJiAhZG9jdW1lbnRMb2FkZXIt
PnN1YnN0aXR1dGVEYXRhKCkuZmFpbGluZ1VSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAgJiYgKCFm
cmFtZUxvYWRlci0+c3ViZnJhbWVMb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkgfHwgZnJhbWUt
PnBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKCkpCi0gICAgICAg
ICYmICghZG9jdW1lbnQtPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgfHwgKCFkb2N1bWVudExv
YWRlci0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUoKSAmJiAhZG9jdW1l
bnRMb2FkZXItPnJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpKQotICAg
ICAgICAmJiAoIWZyYW1lLT5kb21XaW5kb3coKSB8fCAhZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNF
dmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQotI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCi0gICAgICAgICYmICFkb2N1bWVudC0+aGFzT3BlbkRhdGFiYXNlcygpCi0jZW5k
aWYKLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0gICAgICAgICYmICFTaGFyZWRXb3JrZXJS
ZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGRvY3VtZW50KQotI2VuZGlmCi0gICAgICAgICYm
ICFkb2N1bWVudC0+dXNpbmdHZW9sb2NhdGlvbigpCi0gICAgICAgICYmIGZyYW1lTG9hZGVyLT5o
aXN0b3J5KCktPmN1cnJlbnRJdGVtKCkKLSAgICAgICAgJiYgIWZyYW1lTG9hZGVyLT5xdWlja1Jl
ZGlyZWN0Q29taW5nKCkKLSAgICAgICAgJiYgIWRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdJbkFQ
SVNlbnNlKCkKLSAgICAgICAgJiYgIWRvY3VtZW50TG9hZGVyLT5pc1N0b3BwaW5nKCkKLSAgICAg
ICAgJiYgZG9jdW1lbnQtPmNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzKCkKLSAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0aW5nIGNhY2hpbmcgZnJhbWVzIHRoYXQgaGF2ZSBh
biBhc3NvY2lhdGVkCi0gICAgICAgIC8vIGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3Byb2Js
ZW0vNTkxNzg5OT4gdHJhY2tzIHRoYXQgd29yay4KLSAgICAgICAgJiYgZG9jdW1lbnRMb2FkZXIt
PmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPmNhbkNhY2hlSW5QYWdlQ2FjaGUoKQotICAgICAgICAm
JiBmcmFtZUxvYWRlci0+Y2xpZW50KCktPmNhbkNhY2hlUGFnZSgpOwotfQotICAgIAogYm9vbCBQ
YWdlQ2FjaGU6OmNhbkNhY2hlKFBhZ2UqIHBhZ2UpCiB7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIGxvZ0NhbkNhY2hlUGFn
ZURlY2lzaW9uKHBhZ2UpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gQ2FjaGUgdGhlIHBhZ2UsIGlm
IHBvc3NpYmxlLgotICAgIC8vIERvbid0IHdyaXRlIHRvIHRoZSBjYWNoZSBpZiBpbiB0aGUgbWlk
ZGxlIG9mIGEgcmVkaXJlY3QsIHNpbmNlIHdlIHdpbGwgd2FudCB0bwotICAgIC8vIHN0b3JlIHRo
ZSBmaW5hbCBwYWdlIHdlIGVuZCB1cCBvbi4KLSAgICAvLyBObyBwb2ludCB3cml0aW5nIHRvIHRo
ZSBjYWNoZSBvbiBhIHJlbG9hZCBvciBsb2FkU2FtZSwgc2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRl
Ci0gICAgLy8gb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KLSAgICBGcmFt
ZUxvYWRUeXBlIGxvYWRUeXBlID0gcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5sb2FkVHlw
ZSgpOwotICAgIAotICAgIHJldHVybiBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKHBh
Z2UtPm1haW5GcmFtZSgpKQotICAgICAgICAmJiBwYWdlLT5iYWNrRm9yd2FyZCgpLT5pc0FjdGl2
ZSgpCi0gICAgICAgICYmIHBhZ2UtPnNldHRpbmdzKCktPnVzZXNQYWdlQ2FjaGUoKQotI2lmIEVO
QUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCi0gICAgICAgICYmICFEZXZpY2VNb3Rpb25Db250cm9s
bGVyOjppc0FjdGl2ZUF0KHBhZ2UpCi0gICAgICAgICYmICFEZXZpY2VPcmllbnRhdGlvbkNvbnRy
b2xsZXI6OmlzQWN0aXZlQXQocGFnZSkKLSNlbmRpZgotICAgICAgICAmJiBsb2FkVHlwZSAhPSBG
cmFtZUxvYWRUeXBlUmVsb2FkCi0gICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVS
ZWxvYWRGcm9tT3JpZ2luCi0gICAgICAgICYmIGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVTYW1l
OworICAgIHJldHVybiBQYWdlQ2FjaGVQb2xpY3kocGFnZSkuY2FuQ2FjaGVQYWdlKCk7CiB9CiAK
IHZvaWQgUGFnZUNhY2hlOjpzZXRDYXBhY2l0eShpbnQgY2FwYWNpdHkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9y
eS9QYWdlQ2FjaGUuaAppbmRleCBhZDUzMzNjNjQzNTZlY2IxOTZkMzRiYzkwOTg3OTUxNzJjODJi
YWJiLi41MDk5MDJjOGIxNWVlNDJjOWJjMDU1NmY4ODg2N2EyZWZmYmU5ZDQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvUGFnZUNhY2hlLmgKQEAgLTcxLDggKzcxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBQYWdlQ2FjaGUoKTsgLy8gVXNlIHBhZ2VDYWNoZSgpIGluc3RlYWQuCiAgICAg
ICAgIH5QYWdlQ2FjaGUoKTsgLy8gTm90IGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkg
YWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5n
bGV0b25zLgogICAgICAgICAKLSAgICAgICAgc3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFp
bmluZ1RoaXNGcmFtZShGcmFtZSopOwotCiAgICAgICAgIHZvaWQgYWRkVG9MUlVMaXN0KEhpc3Rv
cnlJdGVtKik7IC8vIEFkZHMgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCiAgICAgICAgIHZvaWQg
cmVtb3ZlRnJvbUxSVUxpc3QoSGlzdG9yeUl0ZW0qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGVQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9y
eS9QYWdlQ2FjaGVQb2xpY3kuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNWY1N2QwMDY2YjYyNGQ5YmVhYThm
ZDQ5MjJlZTlmOGJiZTg3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHAKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VDYWNoZVBvbGljeS5oIgorCisjaW5jbHVkZSAiQXBwbGlj
YXRpb25DYWNoZUhvc3QuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJEZXZpY2VNb3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRGV2aWNlT3JpZW50
YXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5LmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1BhZ2VDYWNoZVBvbGljeTo6UGFnZUNhY2hlUG9saWN5KFBhZ2UqIHBhZ2Up
IAorICAgIDogbV9iYWNrRm9yd2FyZElzQWN0aXZlKHBhZ2UtPmJhY2tGb3J3YXJkKCktPmlzQWN0
aXZlKCkpCisgICAgLCBtX3NldHRpbmdzQWxsb3dQYWdlQ2FjaGUocGFnZS0+c2V0dGluZ3MoKS0+
dXNlc1BhZ2VDYWNoZSgpKQorI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCisgICAgLCBt
X2RldmljZU1vdGlvbklzQWN0aXZlKERldmljZU1vdGlvbkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQo
cGFnZSkpCisgICAgLCBtX2RldmljZU9yaWVudGF0aW9uSXNBY3RpdmUoRGV2aWNlTW90aW9uQ29u
dHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKSkKKyNlbmRpZgorICAgICwgbV9sb2FkVHlwZShwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmxvYWRUeXBlKCkpCisgICAgLCBtX3BhZ2UocGFnZSkK
KyAgICAsIG1fbG9nSW5kZW50TGV2ZWwoMCkKK3sKK30KKworYm9vbCBQYWdlQ2FjaGVQb2xpY3k6
OmNhbkNhY2hlUGFnZSgpCit7CisgICAgcG9saWN5TG9nKCItLS0tLS0tLVxuIERldGVybWluaW5n
IGlmIHBhZ2UgY2FuIGJlIGNhY2hlZDoiKTsKKworICAgIGNvbnN0IGJvb2wgY2FuQ2FjaGVNYWlu
RnJhbWUgPSBjYW5DYWNoZUZyYW1lKG1fcGFnZS0+bWFpbkZyYW1lKCkpOworICAgIGNvbnN0IGJv
b2wgY2FuQ2FjaGVQYWdlID0gY2FuQ2FjaGVQYWdlSW1wbCgpOworCisgICAgaWYgKGNhbkNhY2hl
TWFpbkZyYW1lICYmIGNhbkNhY2hlUGFnZSkKKyAgICAgICAgcG9saWN5TG9nKCIgUGFnZSBDQU4g
YmUgY2FjaGVkXG4tLS0tLS0tLSIpOworICAgIGVsc2UKKyAgICAgICAgcG9saWN5TG9nKCIgUGFn
ZSBDQU5OT1QgYmUgY2FjaGVkXG4tLS0tLS0tLSIpOworICAgIHJldHVybiBjYW5DYWNoZU1haW5G
cmFtZSAmJiBjYW5DYWNoZVBhZ2U7Cit9CisKK3ZvaWQgUGFnZUNhY2hlUG9saWN5Ojpwb2xpY3lM
b2coY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIExPRyhQYWdlQ2FjaGUsICIlKnMlcyIs
IG1fbG9nSW5kZW50TGV2ZWwqNCwgIiIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jv
b2wgUGFnZUNhY2hlUG9saWN5OjpjYW5DYWNoZUZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICAr
K21fbG9nSW5kZW50TGV2ZWw7CisKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVl
KCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBLVVJMIGN1cnJlbnRVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCkgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDog
S1VSTCgpOworICAgICAgICBLVVJMIG5ld1VSTCA9IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9u
YWxEb2N1bWVudExvYWRlcigpID8gZnJhbWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50
TG9hZGVyKCktPnVybCgpIDogS1VSTCgpOworICAgICAgICBpZiAobmV3VVJMLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHBvbGljeUxvZyhtYWtlU3RyaW5nKCIgRGV0ZXJtaW5pbmcgaWYgc3ViZnJh
bWUgd2l0aCBVUkwoIiwgY3VycmVudFVSTC5zdHJpbmcoKSwgIikgY2FuIGJlIGNhY2hlZDoiKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvbGljeUxvZyhtYWtlU3RyaW5nKCIgRGV0ZXJt
aW5pbmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCIsIGN1cnJlbnRV
Ukwuc3RyaW5nKCksICIpIHRvICgiLCBuZXdVUkwuc3RyaW5nKCksICIpOiIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFjYW5DYWNoZUZyYW1lKGNoaWxkKSkgeworICAg
ICAgICAgICAgcG9saWN5TG9nKCIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIpOworICAgICAgICAg
ICAgLS1tX2xvZ0luZGVudExldmVsOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHBvbGljeUxvZygiIEZyYW1lIENBTiBiZSBjYWNoZWQiKTsKKyAgICB9CisK
KyAgICAtLW1fbG9nSW5kZW50TGV2ZWw7CisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCkpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgLVRoZXJlIGlzIG5vIERvY3VtZW50
TG9hZGVyIG9iamVjdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEZyYW1l
RGF0YSBmcmFtZWRhdGE7CisKKyAgICBmcmFtZWRhdGEuaXNFcnJvclBhZ2UgPSBmcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+c3Vic3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpOworICAgIGZyYW1l
ZGF0YS5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMgPSBmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygp
LT5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoKTsKKyAgICBmcmFtZWRhdGEuaGFzRG9jdW1lbnRM
b2FkZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKGZyYW1l
ZGF0YS5oYXNEb2N1bWVudExvYWRlcikgeworICAgICAgICBmcmFtZWRhdGEubWFpbkRvY3VtZW50
RXJyb3IgPSAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluRG9jdW1lbnRF
cnJvcigpLmlzTnVsbCgpOworICAgICAgICBmcmFtZWRhdGEuaXNMb2FkaW5nSW5BUElTZW5zZSA9
IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgp
OworICAgICAgICBmcmFtZWRhdGEubG9hZGVySXNTdG9wcGluZyA9IGZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpOworICAgICAgICBmcmFtZWRhdGEuYXBwQ2Fj
aGVEZW5pZWQgPSAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCk7CisgICAgfQorICAgIGZyYW1lZGF0
YS5jb250YWluc1BsdWdpbnMgPSBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmNv
bnRhaW5zUGx1Z2lucygpOworICAgIGZyYW1lZGF0YS5wcm90b2NvbCA9IGZyYW1lLT5kb2N1bWVu
dCgpLT51cmwoKS5wcm90b2NvbCgpOworICAgIGZyYW1lZGF0YS5yZXNwb25zZURlbmllcyA9IGZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xD
b250YWluc05vQ2FjaGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250
YWluc05vU3RvcmUoKTsKKyAgICBmcmFtZWRhdGEuaGFzVW5sb2FkTGlzdGVuZXIgPSBmcmFtZS0+
ZG9tV2luZG93KCkgJiYgZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVu
dE5hbWVzKCkudW5sb2FkRXZlbnQpOworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgZnJh
bWVkYXRhLmhhc09wZW5EYXRhYmFzZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJh
c2VzKCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisgICAgZnJhbWVkYXRh
Lmhhc1NoYXJlZFdvcmtlcnMgPSBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3Jr
ZXJzKGZyYW1lLT5kb2N1bWVudCgpKTsKKyNlbmRpZgorICAgIGZyYW1lZGF0YS51c2VzR2VvbG9j
YXRpb24gPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpOworICAgIGZyYW1l
ZGF0YS5oYXNIaXN0b3J5Q3VycmVudEl0ZW0gPSBmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+
Y3VycmVudEl0ZW0oKTsKKyAgICBmcmFtZWRhdGEucXVpY2tSZWRpcmVjdENvbWluZyA9IGZyYW1l
LT5sb2FkZXIoKS0+cXVpY2tSZWRpcmVjdENvbWluZygpOworICAgIGZyYW1lZGF0YS5jYW5TdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0cyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZl
RE9NT2JqZWN0cygpOworICAgIGZyYW1lZGF0YS5jYW5DYWNoZVBhZ2UgPSBmcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5jYW5DYWNoZVBhZ2UoKTsKKworICAgIHJldHVybiBjYW5DYWNoZUZyYW1l
SW1wbChmcmFtZWRhdGEpOworfQorCisvLyBUaGVzZSAqSW1wbCBmdW5jdGlvbnMgaW1wbGVtZW50
IHRoZSBkZWZhdWx0IHBhZ2UgY2FjaGUgcG9saWN5LgorYm9vbCBQYWdlQ2FjaGVQb2xpY3k6OmNh
bkNhY2hlUGFnZUltcGwoKQoreworICAgIGJvb2wgY2FuQ2FjaGVQYWdlID0gdHJ1ZTsKKworICAg
IGlmICghbV9iYWNrRm9yd2FyZElzQWN0aXZlKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLVRo
ZSBiYWNrL2ZvcndhcmQgbGlzdCBpcyBkaXNhYmxlZCBvciBoYXMgMCBjYXBhY2l0eS4iKTsKKyAg
ICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfQorICAgIGlmICghbV9zZXR0aW5nc0Fs
bG93UGFnZUNhY2hlKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5
cyBiL2YgY2FjaGUgZGlzYWJsZWQiKTsKKyAgICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7Cisg
ICAgfQorI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCisgICAgaWYgKG1fZGV2aWNlTW90
aW9uSXNBY3RpdmUpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtUGFnZSBpcyB1c2luZyBEZXZp
Y2VNb3Rpb24iKTsKKyAgICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChtX2RldmljZU9yaWVudGF0aW9uSXNBY3RpdmUpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAt
UGFnZSBpcyB1c2luZyBEZXZpY2VPcmllbnRhdGlvbiIpOworICAgICAgICBjYW5DYWNoZVBhZ2Ug
PSBmYWxzZTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAobV9sb2FkVHlwZSA9PSBGcmFtZUxvYWRU
eXBlUmVsb2FkKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLUxvYWQgdHlwZSBpczogUmVsb2Fk
Iik7CisgICAgICAgIGNhbkNhY2hlUGFnZSA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAobV9sb2Fk
VHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgeworICAgICAgICBwb2xpY3lM
b2coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCBmcm9tIG9yaWdpbiIpOworICAgICAgICBjYW5D
YWNoZVBhZ2UgPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG1fbG9hZFR5cGUgPT0gRnJhbWVMb2Fk
VHlwZVNhbWUpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtTG9hZCB0eXBlIGlzOiBTYW1lIik7
CisgICAgICAgIGNhbkNhY2hlUGFnZSA9IGZhbHNlOworICAgIH0KKworCisgICAgcmV0dXJuIGNh
bkNhY2hlUGFnZTsKK30KKworYm9vbCBQYWdlQ2FjaGVQb2xpY3k6OmNhbkNhY2hlRnJhbWVJbXBs
KGNvbnN0IEZyYW1lRGF0YSYgZnJhbWVkYXRhKQoreworICAgIGlmICghZnJhbWVkYXRhLmhhc0Rv
Y3VtZW50TG9hZGVyKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLVRoZXJlIGlzIG5vIERvY3Vt
ZW50TG9hZGVyIG9iamVjdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGJv
b2wgY2FuQ2FjaGVGcmFtZSA9IHRydWU7CisgICAgaWYgKGZyYW1lZGF0YS5tYWluRG9jdW1lbnRF
cnJvcikgeworICAgICAgICBwb2xpY3lMb2coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBhbiBlcnJv
ciIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmcmFt
ZWRhdGEuaXNFcnJvclBhZ2UpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtRnJhbWUgaXMgYW4g
ZXJyb3IgcGFnZSIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAg
IGlmIChmcmFtZWRhdGEuY29udGFpbnNQbHVnaW5zICYmICFmcmFtZWRhdGEucGFnZUNhY2hlU3Vw
cG9ydHNQbHVnaW5zKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLUZyYW1lIGNvbnRhaW5zIHBs
dWdpbnMsIGFuZCB0aGUgcGFnZSBjYWNoZSBzZXR0aW5ncyBkbyBub3Qgc3VwcG9ydCBwbHVnaW5z
LiIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShmcmFtZWRhdGEucHJvdG9jb2wsICJodHRwcyIpICYmIGZyYW1lZGF0YS5y
ZXNwb25zZURlbmllcykgeworICAgICAgICBwb2xpY3lMb2coIiAgIC1GcmFtZSBpcyBIVFRQUywg
YW5kIHRoZSByZXNwb25zZSBjb250YWlucyBOb0NhY2hlIG9yIE5vU3RvcmUiKTsKKyAgICAgICAg
Y2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmhhc1VubG9h
ZExpc3RlbmVyKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLUZyYW1lIGhhcyBhbiB1bmxvYWQg
ZXZlbnQgbGlzdGVuZXIiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0K
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorICAgIGlmIChmcmFtZWRhdGEuaGFzT3BlbkRhdGFi
YXNlKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLUZyYW1lIGhhcyBvbmUgb3IgbW9yZSBvcGVu
IGRhdGFiYXNlIGhhbmRsZXMiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAg
IH0KKyNlbmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICBpZiAoZnJhbWVkYXRh
Lmhhc1NoYXJlZFdvcmtlcnMpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtRnJhbWUgaGFzIGFz
c29jaWF0ZWQgU2hhcmVkV29ya2VycyIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7
CisgICAgfQorI2VuZGlmCisgICAgaWYgKGZyYW1lZGF0YS51c2VzR2VvbG9jYXRpb24pIHsKKyAg
ICAgICAgcG9saWN5TG9nKCIgICAtRnJhbWUgdXNlcyBHZW9sb2NhdGlvbiIpOworICAgICAgICBj
YW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnJhbWVkYXRhLmhhc0hpc3Rv
cnlDdXJyZW50SXRlbSkgeworICAgICAgICBwb2xpY3lMb2coIiAgIC1ObyBjdXJyZW50IGhpc3Rv
cnkgaXRlbSIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChmcmFtZWRhdGEucXVpY2tSZWRpcmVjdENvbWluZykgeworICAgICAgICBwb2xpY3lMb2coIiAg
IC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZh
bHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmlzTG9hZGluZ0luQVBJU2Vuc2UpIHsKKyAg
ICAgICAgcG9saWN5TG9nKCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgc3RpbGwgbG9hZGluZyBpbiBB
UEkgc2Vuc2UiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAgICBp
ZiAoZnJhbWVkYXRhLmxvYWRlcklzU3RvcHBpbmcpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAt
RG9jdW1lbnRMb2FkZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBzdG9wcGluZyIpOworICAgICAgICBj
YW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnJhbWVkYXRhLmNhblN1c3Bl
bmRBY3RpdmVET01PYmplY3RzKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLVRoZSBkb2N1bWVu
dCBjYW5ub3Qgc3VzcGVuZCBpdHMgYWN0aXZlIERPTSBPYmplY3RzIik7CisgICAgICAgIGNhbkNh
Y2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZyYW1lZGF0YS5hcHBDYWNoZURlbmll
ZCkgeworICAgICAgICBwb2xpY3lMb2coIiAgIC1UaGUgYXBwbGljYXRpb24gY2FjaGUgZGVuaWVk
IHRoZSBwYWdlIGNhY2hlLiIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAg
fQorICAgIGlmICghZnJhbWVkYXRhLmNhbkNhY2hlUGFnZSkgeworICAgICAgICBwb2xpY3lMb2co
IiAgIC1UaGUgY2xpZW50IHNheXMgdGhpcyBmcmFtZSBjYW5ub3QgYmUgY2FjaGVkIik7CisgICAg
ICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNhbkNh
Y2hlRnJhbWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlUG9saWN5LmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZVBvbGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiYzE2NzlkZTcwNGY3ZWJmZDc3YjU4
MWJmNGY0YjA3Y2Y2NTEzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZVBvbGljeS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgUGFnZUNh
Y2hlUG9saWN5X2gKKyNkZWZpbmUgUGFnZUNhY2hlUG9saWN5X2gKKworI2luY2x1ZGUgIkZyYW1l
TG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIFBh
Z2VDYWNoZVBvbGljeSAgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDYWNoZVBvbGlj
eSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
UGFnZUNhY2hlUG9saWN5KFBhZ2UqKTsKKworICAgIGJvb2wgY2FuQ2FjaGVQYWdlKCk7Citwcml2
YXRlOgorICAgIHN0cnVjdCBGcmFtZURhdGEgeworICAgICAgICBib29sIGlzRXJyb3JQYWdlOwor
ICAgICAgICBib29sIHBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2luczsKKyAgICAgICAgYm9vbCBoYXNE
b2N1bWVudExvYWRlcjsKKyAgICAgICAgYm9vbCBtYWluRG9jdW1lbnRFcnJvcjsKKyAgICAgICAg
Ym9vbCBjb250YWluc1BsdWdpbnM7CisgICAgICAgIFN0cmluZyBwcm90b2NvbDsKKyAgICAgICAg
Ym9vbCByZXNwb25zZURlbmllczsKKyAgICAgICAgYm9vbCBoYXNVbmxvYWRMaXN0ZW5lcjsKKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorICAgICAgICBib29sIGhhc09wZW5EYXRhYmFzZTsKKyNl
bmRpZgorI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICAgICAgYm9vbCBoYXNTaGFyZWRX
b3JrZXJzOworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgYm9vbCB1c2VzR2VvbG9jYXRpb247CisgICAgICAgIGJvb2wgaGFzSGlzdG9yeUN1cnJlbnRJ
dGVtOworICAgICAgICBib29sIHF1aWNrUmVkaXJlY3RDb21pbmc7CisgICAgICAgIGJvb2wgaXNM
b2FkaW5nSW5BUElTZW5zZTsKKyAgICAgICAgYm9vbCBsb2FkZXJJc1N0b3BwaW5nOworICAgICAg
ICBib29sIGNhblN1c3BlbmRBY3RpdmVET01PYmplY3RzOworICAgICAgICBib29sIGFwcENhY2hl
RGVuaWVkOworICAgICAgICBib29sIGNhbkNhY2hlUGFnZTsKKyAgICB9OworCisgICAgYm9vbCBj
YW5DYWNoZUZyYW1lKEZyYW1lKik7CisgICAgdm9pZCBwb2xpY3lMb2coY29uc3QgU3RyaW5nJik7
CisKKyAgICBib29sIGNhbkNhY2hlRnJhbWVJbXBsKGNvbnN0IEZyYW1lRGF0YSYpOworICAgIGJv
b2wgY2FuQ2FjaGVQYWdlSW1wbCgpOworCisgICAgLy8gUGFnZSBsZXZlbCBwYXJhbWV0ZXJzCisg
ICAgYm9vbCBtX2JhY2tGb3J3YXJkSXNBY3RpdmU7CisgICAgYm9vbCBtX3NldHRpbmdzQWxsb3dQ
YWdlQ2FjaGU7CisgICAgYm9vbCBtX3NldHRpbmdzQWxsb3dzUGx1Z2luczsKKyNpZiBFTkFCTEUo
REVWSUNFX09SSUVOVEFUSU9OKQorICAgIGJvb2wgbV9kZXZpY2VNb3Rpb25Jc0FjdGl2ZTsKKyAg
ICBib29sIG1fZGV2aWNlT3JpZW50YXRpb25Jc0FjdGl2ZTsKKyNlbmRpZgorICAgIEZyYW1lTG9h
ZFR5cGUgbV9sb2FkVHlwZTsKKyAgICAgICAgCisgICAgUGFnZSogbV9wYWdlOworICAgIGludCBt
X2xvZ0luZGVudExldmVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129318</attachid>
            <date>2012-02-28 13:32:57 -0800</date>
            <delta_ts>2012-02-28 13:45:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79269-20120228163254.patch</filename>
            <type>text/plain</type>
            <size>34185</size>
            <attacher name="Gavin Peters">gavinp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4ODI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjQyOTZiYTkzYmYxMmRm
NzMwOGU0MmRjMGExYTZkYWYxZjljMTY2OS4uYTVhZDA0Nzc4ZGE2YmRkN2E2MTI4ZDU4MzU4NDBm
ZTg2YWZmYTRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAyLTI4ICBHYXZp
biBQZXRlcnMgIDxnYXZpbnBAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNlcGFyYXRlIFBhZ2VD
YWNoZVBvbGljeSBmcm9tIFBhZ2VDYWNoZSBhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5MjY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZWZhY3RvciBzZXBhcmF0ZXMgb3V0IHBhZ2Vj
YWNoZSBwb2xpY3kgZnJvbSB0aGUgcGFnZSBjYWNoZQorICAgICAgICBpdHNlbGYuICBUaGUgZGVi
dWcgbG9nZ2luZyBpcyB1bmlmaWVkIHdpdGggdGhlIGxvZ2ljICh0aGV5IHdlcmUKKyAgICAgICAg
ZGlmZmVyZW50IGJlZm9yZSEpLCBhbmQgb3RoZXIgY2xlYW51cHMgaW4gZGVidWcgbG9nZ2luZyB0
b28uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBpdCdzIGEgcmVmYWN0b3IuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoaXN0b3J5L1BhZ2VDYWNoZS5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZTo6Y2FuQ2FjaGUpOgorICAg
ICAgICAqIGhpc3RvcnkvUGFnZUNhY2hlLmg6CisgICAgICAgIChQYWdlQ2FjaGUpOgorICAgICAg
ICAqIGhpc3RvcnkvUGFnZUNhY2hlUG9saWN5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6UGFnZUNhY2hlUG9saWN5KToK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6Y2FuQ2FjaGVQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VDYWNoZVBvbGljeTo6cG9saWN5TG9nKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VDYWNoZVBvbGljeTo6Y2FuQ2FjaGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlQ2FjaGVQb2xpY3k6OmNhbkNhY2hlUGFnZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNhY2hlUG9saWN5OjpjYW5DYWNoZUZyYW1lSW1wbCk6CisgICAgICAgICogaGlzdG9yeS9QYWdl
Q2FjaGVQb2xpY3kuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBhZ2VD
YWNoZVBvbGljeSk6CisgICAgICAgIChGcmFtZURhdGEpOgorCiAyMDEyLTAyLTI0ICBEYXZpZCBL
aWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHhjcnVuIHRvIGZpbmQg
Y29tcGlsZXIgcGF0aHMgZm9yIEdlbmVyYXRlIERlcml2ZWQgU291cmNlcyBidWlsZCBwaGFzZSBz
Y3JpcHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTBlZmM2ZGJhNWQwNjU5OGJjYjg4ZmExN2Y1
N2UzY2I1NjAwZjExZC4uZWQ1ZWI3MjVmYmY4ZmRiMGI5MzdiZWZhYzVlYTc0Mzg5NmY2YTIzZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTcxMyw2ICs3MTMsNyBAQCBTRVQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAogICAgIGhpc3RvcnkvSGlzdG9yeUl0ZW0u
Y3BwCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCisgICAgaGlzdG9yeS9QYWdlQ2FjaGVQb2xp
Y3kuY3BwCiAKICAgICBodG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCiAgICAgaHRtbC9CYXNl
Q2hlY2thYmxlSW5wdXRUeXBlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
MmU4MzU3ODMxNGY0MmY4MjYzNWE1Y2ZmYmZlMGQ2MWY1MTdjNjBkYS4uOTVjNTg4NjlmYTM5ZDM4
NDc5YjM0N2IxYzMyMTQyZTNiOTI1NDVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0xOTU1LDYgKzE5NTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaCBcCiAJU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdl
Q2FjaGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvUGFnZUNhY2hlUG9saWN5LmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1
dHRvbklucHV0VHlwZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0
VHlwZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCmluZGV4IGE2OWYyNmE5MmQ1OGI3ZjEzOGFmZjk4MWMyNTAwZWEzODhiMGUz
ZDYuLjJmNGNhOWU0NmE0M2ZjNjEwZDNiZjU3NDFmYmFmMWQ4MzFiNTc3MWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtNjkxLDYgKzY5MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhpc3RvcnkvSGlzdG9yeUl0
ZW0uY3BwIFwKICAgICBoaXN0b3J5L3F0L0hpc3RvcnlJdGVtUXQuY3BwIFwKICAgICBoaXN0b3J5
L1BhZ2VDYWNoZS5jcHAgXAorICAgIGhpc3RvcnkvUGFnZUNhY2hlUG9saWN5LmNwcCBcCiAgICAg
aHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcCBcCiAgICAgaHRtbC9CYXNlQ2hlY2thYmxlSW5w
dXRUeXBlLmNwcCBcCiAgICAgaHRtbC9CYXNlRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBiZjFlODk2NTEyMWMzZDQzMDZlNjMzNWUxZDk4NWM2NWJmZTc4YTVm
Li42OWY0Y2FjMzFjOTI2YTVjNWJiODYxZTA1ZWU3ZWU4ZjM1NWM5YzJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0xMzAsNiArMTMwLDcgQEAKICAgICAgICAgICAgICdoaXN0b3J5L0NhY2hlZFBhZ2Uu
aCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9IaXN0b3J5SXRlbS5oJywKICAgICAgICAgICAgICdo
aXN0b3J5L1BhZ2VDYWNoZS5oJywKKyAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZVBvbGlj
eS5oJywKICAgICAgICAgICAgICdoaXN0b3J5L2NmL0hpc3RvcnlQcm9wZXJ0eUxpc3QuaCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JCYXNlQWdlbnQuaCcsCkBAIC0yMzE2LDYgKzIzMTcsNyBAQAogICAg
ICAgICAgICAgJ2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAnLAogICAgICAgICAgICAgJ2hpc3Rvcnkv
SGlzdG9yeUl0ZW0uY3BwJywKICAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5jcHAnLAor
ICAgICAgICAgICAgJ2hpc3RvcnkvUGFnZUNhY2hlUG9saWN5LmNwcCcsCiAgICAgICAgICAgICAn
aGlzdG9yeS9jZi9IaXN0b3J5UHJvcGVydHlMaXN0LmNwcCcsCiAgICAgICAgICAgICAnaGlzdG9y
eS9tYWMvSGlzdG9yeUl0ZW1NYWMubW0nLAogICAgICAgICAgICAgJ2hpc3RvcnkvcXQvSGlzdG9y
eUl0ZW1RdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagppbmRleCAxOTEwNmMwZTU2MGE1MTFjMjQzZWVhNWU2ODBmYzFhMmMzMzgyYjJiLi4wMmIy
YTJhN2YwYjhlMWVmNTExNjJhZmU1Y2Q5NzU2YTEyYTdlNTIzIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNzA2ODUsNiArNzA2ODUsMTQgQEAK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGhpc3RvcnlcUGFnZUNhY2hlLmgiCiAJCQkJPgogCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGhpc3RvcnlcUGFnZUNhY2hlUG9s
aWN5LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caGlzdG9yeVxQYWdlQ2FjaGVQb2xpY3kuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCQk8Rmls
dGVyCiAJCQkJTmFtZT0iY2YiCiAJCQkJPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ0MDExZmJjNjM4ZDBjMWI0NzViYmE2NmRi
N2I2NmVhYWNlZTllY2UuLjVmZmM2MzBkMGZmNTAyODUyOGYzMDVhNjUxYjZlMTg2MWUwZGEwMjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTM0NzgsNiArMzQ3OCw4IEBACiAJCTk4NUJCOTZFMTNBOTQwNTgwMDdBMEI2OSAvKiBM
aW5rUmVsQXR0cmlidXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5ODVCQjk2QzEzQTk0MDU4MDA3QTBCNjkgLyogTGlua1JlbEF0dHJpYnV0ZS5oICov
OyB9OwogCQk5OENFNDMyNjEyOUUwMEJEMDA1ODIxREMgLyogTGlua0xvYWRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OENFNDMyNTEyOUUwMEJE
MDA1ODIxREMgLyogTGlua0xvYWRlci5jcHAgKi87IH07CiAJCTk4Q0U0MzJBMTI5RTAwRTUwMDU4
MjFEQyAvKiBMaW5rTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5OENFNDMyOTEyOUUwMEU1MDA1ODIxREMgLyogTGlua0xvYWRlci5oICovOyB9
OworCQk5OEQ1QjJFNzE0RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9saWN5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk4RDVCMkU1MTRGNUEw
MkIwMDlCQkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3kuY3BwICovOyB9OworCQk5OEQ1QjJFODE0RjVB
MDJCMDA5QkJBRkQgLyogUGFnZUNhY2hlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OEQ1QjJFNjE0RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNh
Y2hlUG9saWN5LmggKi87IH07CiAJCTk4RUIxRjk1MTMxM0ZFMDUwMEQwRTFFQSAvKiBOb3RJbXBs
ZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVkLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUIwRkIxOTExNDBEQjU3OTAw
MjI1ODhGIC8qIEhUVFBWYWxpZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCMEZCMThGMTQwREI1NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRh
dGlvbi5jcHAgKi87IH07CiAJCTlCMEZCMTkyMTQwREI1NzkwMDIyNTg4RiAvKiBIVFRQVmFsaWRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIw
RkIxOTAxNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxpZGF0aW9uLmggKi87IH07CkBAIC0xMDM1
OCw2ICsxMDM2MCw4IEBACiAJCTk4NUJCOTZDMTNBOTQwNTgwMDdBMEI2OSAvKiBMaW5rUmVsQXR0
cmlidXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmtSZWxBdHRyaWJ1
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOThDRTQzMjUxMjlFMDBCRDAwNTgy
MURDIC8qIExpbmtMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGlua0xvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk4Q0U0MzI5
MTI5RTAwRTUwMDU4MjFEQyAvKiBMaW5rTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExpbmtMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOThE
NUIyRTUxNEY1QTAyQjAwOUJCQUZEIC8qIFBhZ2VDYWNoZVBvbGljeS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlQ2FjaGVQb2xpY3kuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5OEQ1QjJFNjE0RjVBMDJCMDA5QkJBRkQgLyogUGFnZUNhY2hl
UG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VDYWNoZVBvbGlj
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUx
RUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Tm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwRkIxOEYx
NDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxpZGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUVFBWYWxpZGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUIwRkIxOTAxNDBEQjU3OTAwMjI1ODhGIC8qIEhUVFBWYWxpZGF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUVFBWYWxpZGF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDg0Niw2ICsxNDg1MCw4IEBACiAJCQkJNTE3NDFE
MEQwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggKi8sCiAJCQkJMTQ3N0U3NzQwQkY0
MTM0QTAwMTUyODcyIC8qIFBhZ2VDYWNoZS5jcHAgKi8sCiAJCQkJMTQ3N0U3NzUwQkY0MTM0QTAw
MTUyODcyIC8qIFBhZ2VDYWNoZS5oICovLAorCQkJCTk4RDVCMkU1MTRGNUEwMkIwMDlCQkFGRCAv
KiBQYWdlQ2FjaGVQb2xpY3kuY3BwICovLAorCQkJCTk4RDVCMkU2MTRGNUEwMkIwMDlCQkFGRCAv
KiBQYWdlQ2FjaGVQb2xpY3kuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gaGlzdG9yeTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzQwMSw2ICsyMzQwNyw3IEBACiAJCQkJMzc3NEFC
QTUwRkEyMUVCNDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVBMjE0NjgwOTdBMzI5MTAwQjkwNTBBIC8qIFBhZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0NzdFNzc3MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTk4RDVCMkU4MTRGNUEwMkIwMDlCQkFGRCAvKiBQYWdlQ2FjaGVQb2xpY3ku
aCBpbiBIZWFkZXJzICovLAogCQkJCUYzODIwODkzMTQ3RDM1RjkwMDEwQkMwNiAvKiBQYWdlQ29u
c29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzQ3NDJERDEzNDM2MkYwMDA1MzFCQzIg
LyogUGFnZURlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDJCMEJGMEQ3OUY4
MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLApAQCAtMjY1NDIsNiArMjY1
NDksNyBAQAogCQkJCTFBMEQ1NzM2MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTY1RkVBODY5MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NzdFNzc2MEJGNDEzNEEwMDE1Mjg3MiAvKiBQYWdlQ2Fj
aGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOThENUIyRTcxNEY1QTAyQjAwOUJCQUZEIC8qIFBh
Z2VDYWNoZVBvbGljeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzgyMDg5MjE0N0QzNUY5MDAx
MEJDMDYgLyogUGFnZUNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzQ3NDJE
QzEzNDM2MkYwMDA1MzFCQzIgLyogUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCBhMGQ1ZGU0ZDk0ZjYw
MGU3ZGQ3NzcxYTM2ODk3YmEzOWY1ZDMxOThiLi4zMzRhOWU1Yjg5MzAzY2NlN2RhOGJmOWM2Zjkz
NzdmYmQ1ZWJlY2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCkBAIC00Miwx
MCArNDIsMTEgQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJQ
YWdlQ2FjaGVQb2xpY3kuaCIKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIApAQCAtNTUsMTc3ICs1Niw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGRvdWJsZSBhdXRvcmVsZWFzZUlu
dGVydmFsID0gMzsKIAotI2lmbmRlZiBOREVCVUcKLQotc3RhdGljIFN0cmluZyYgcGFnZUNhY2hl
TG9nUHJlZml4KGludCBpbmRlbnRMZXZlbCkKLXsKLSAgICBzdGF0aWMgaW50IHByZXZpb3VzSW5k
ZW50ID0gLTE7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHByZWZpeCwgKCkpOwot
ICAgIAotICAgIGlmIChpbmRlbnRMZXZlbCAhPSBwcmV2aW91c0luZGVudCkgeyAgICAKLSAgICAg
ICAgcHJldmlvdXNJbmRlbnQgPSBpbmRlbnRMZXZlbDsKLSAgICAgICAgcHJlZml4LnRydW5jYXRl
KDApOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZpb3VzSW5kZW50OyArK2kpCi0g
ICAgICAgICAgICBwcmVmaXggKz0gIiAgICAiOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcHJl
Zml4OwotfQotCi1zdGF0aWMgdm9pZCBwYWdlQ2FjaGVMb2coY29uc3QgU3RyaW5nJiBwcmVmaXgs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBMT0coUGFnZUNhY2hlLCAiJXMlcyIsIHBy
ZWZpeC51dGY4KCkuZGF0YSgpLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotfQotICAgIAotI2Rl
ZmluZSBQQ0xPRyguLi4pIHBhZ2VDYWNoZUxvZyhwYWdlQ2FjaGVMb2dQcmVmaXgoaW5kZW50TGV2
ZWwpLCBtYWtlU3RyaW5nKF9fVkFfQVJHU19fKSkKLSAgICAKLXN0YXRpYyBib29sIGxvZ0NhbkNh
Y2hlRnJhbWVEZWNpc2lvbihGcmFtZSogZnJhbWUsIGludCBpbmRlbnRMZXZlbCkKLXsKLSAgICAv
LyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBmcmFtZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRl
ZCBhbmQgaGF2ZSBjb250ZW50LgotICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPnN0YXRlTWFjaGlu
ZSgpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBLVVJMIGN1cnJlbnRVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVy
KCkgPyBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgpOwot
ICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAotICAgIFBDTE9HKCIrLS0tIik7Ci0gICAgS1VSTCBuZXdVUkwgPSBmcmFtZS0+bG9hZGVyKCkt
PnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9u
YWxEb2N1bWVudExvYWRlcigpLT51cmwoKSA6IEtVUkwoKTsKLSAgICBpZiAoIW5ld1VSTC5pc0Vt
cHR5KCkpCi0gICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYgZnJhbWUgY2FuIGJlIGNhY2hl
ZCBuYXZpZ2F0aW5nIGZyb20gKCIsIGN1cnJlbnRVUkwuc3RyaW5nKCksICIpIHRvICgiLCBuZXdV
Ukwuc3RyaW5nKCksICIpOiIpOwotICAgIGVsc2UKLSAgICAgICAgUENMT0coIiBEZXRlcm1pbmlu
ZyBpZiBzdWJmcmFtZSB3aXRoIFVSTCAoIiwgY3VycmVudFVSTC5zdHJpbmcoKSwgIikgY2FuIGJl
IGNhY2hlZDoiKTsKLSAgICAKLSAgICBib29sIGNhbm5vdENhY2hlID0gZmFsc2U7Ci0gICAgCi0g
ICAgZG8gewotICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkg
ewotICAgICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBpcyBubyBEb2N1bWVudExvYWRlciBvYmpl
Y3QiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygi
ICAgLU1haW4gZG9jdW1lbnQgaGFzIGFuIGVycm9yIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNo
ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJh
bWVMb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkgJiYgIWZyYW1lLT5wYWdlKCktPnNldHRpbmdz
KCktPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAg
LUZyYW1lIGNvbnRhaW5zIHBsdWdpbnMiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnByb3Rv
Y29sSXMoImh0dHBzIikpIHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaXMgSFRUUFMi
KTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoZnJhbWUtPmRvbVdpbmRvdygpICYmIGZyYW1lLT5kb21XaW5kb3coKS0+aGFzRXZlbnRMaXN0
ZW5lcnMoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KSkgewotICAgICAgICAgICAgUENMT0coIiAg
IC1GcmFtZSBoYXMgYW4gdW5sb2FkIGV2ZW50IGxpc3RlbmVyIik7Ci0gICAgICAgICAgICBjYW5u
b3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAg
ICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmhhc09wZW5EYXRhYmFzZXMoKSkgewotICAgICAg
ICAgICAgUENMT0coIiAgIC1GcmFtZSBoYXMgb3BlbiBkYXRhYmFzZSBoYW5kbGVzIik7Ci0gICAg
ICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSNlbmRpZgotI2lmIEVOQUJM
RShTSEFSRURfV09SS0VSUykKLSAgICAgICAgaWYgKFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhh
c1NoYXJlZFdvcmtlcnMoZnJhbWUtPmRvY3VtZW50KCkpKSB7Ci0gICAgICAgICAgICBQQ0xPRygi
ICAgLUZyYW1lIGhhcyBhc3NvY2lhdGVkIFNoYXJlZFdvcmtlcnMiKTsKLSAgICAgICAgICAgIGNh
bm5vdENhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChmcmFtZS0+
ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAg
LUZyYW1lIHVzZXMgR2VvbG9jYXRpb24iKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5j
dXJyZW50SXRlbSgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLU5vIGN1cnJlbnQgaGlzdG9y
eSBpdGVtIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+cXVpY2tSZWRpcmVjdENvbWluZygpKSB7Ci0gICAg
ICAgICAgICBQQ0xPRygiICAgLVF1aWNrIHJlZGlyZWN0IGlzIGNvbWluZyIpOwotICAgICAgICAg
ICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkgewotICAgICAg
ICAgICAgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBzdGlsbCBsb2FkaW5nIGluIEFQSSBz
ZW5zZSIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmcoKSkg
ewotICAgICAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudExvYWRlciBpcyBpbiB0aGUgbWlkZGxl
IG9mIHN0b3BwaW5nIik7Ci0gICAgICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMoKSkgewotICAgICAgICAgICAgUENMT0coIiAgIC1UaGUgZG9jdW1lbnQgY2Fubm90IHN1
c3BlY3QgaXRzIGFjdGl2ZSBET00gT2JqZWN0cyIpOwotICAgICAgICAgICAgY2Fubm90Q2FjaGUg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkp
IHsKLSAgICAgICAgICAgIFBDTE9HKCIgICAtVGhlIERvY3VtZW50TG9hZGVyIHVzZXMgYW4gYXBw
bGljYXRpb24gY2FjaGUiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNhbkNhY2hlUGFn
ZSgpKSB7Ci0gICAgICAgICAgICBQQ0xPRygiICAgLVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1l
IGNhbm5vdCBiZSBjYWNoZWQiKTsKLSAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsgCi0g
ICAgICAgIH0KLSAgICB9IHdoaWxlIChmYWxzZSk7Ci0gICAgCi0gICAgZm9yIChGcmFtZSogY2hp
bGQgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50
cmVlKCktPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmICghbG9nQ2FuQ2FjaGVGcmFtZURlY2lz
aW9uKGNoaWxkLCBpbmRlbnRMZXZlbCArIDEpKQotICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0
cnVlOwotICAgIAotICAgIFBDTE9HKGNhbm5vdENhY2hlID8gIiBGcmFtZSBDQU5OT1QgYmUgY2Fj
aGVkIiA6ICIgRnJhbWUgQ0FOIGJlIGNhY2hlZCIpOwotICAgIFBDTE9HKCIrLS0tIik7Ci0gICAg
Ci0gICAgcmV0dXJuICFjYW5ub3RDYWNoZTsKLX0KLSAgICAKLXN0YXRpYyB2b2lkIGxvZ0NhbkNh
Y2hlUGFnZURlY2lzaW9uKFBhZ2UqIHBhZ2UpCi17Ci0gICAgLy8gT25seSBib3RoZXIgbG9nZ2lu
ZyBmb3IgbWFpbiBmcmFtZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGxvYWRlZCBhbmQgaGF2ZSBjb250
ZW50LgotICAgIGlmIChwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPnN0YXRlTWFjaGluZSgp
LT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBL
VVJMIGN1cnJlbnRVUkwgPSBwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCkgPyBwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVy
bCgpIDogS1VSTCgpOwotICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGludCBpbmRlbnRMZXZlbCA9IDA7ICAgIAotICAgIFBDTE9HKCItLS0t
LS0tLVxuIERldGVybWluaW5nIGlmIHBhZ2UgY2FuIGJlIGNhY2hlZDoiKTsKLSAgICAKLSAgICBi
b29sIGNhbm5vdENhY2hlID0gIWxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihwYWdlLT5tYWluRnJh
bWUoKSwgMSk7Ci0gICAgCi0gICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IHBhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+bG9hZFR5cGUoKTsKLSAgICBpZiAoIXBhZ2UtPmJhY2tGb3J3YXJk
KCktPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgUENMT0coIiAgIC1UaGUgYmFjay9mb3J3YXJkIGxp
c3QgaXMgZGlzYWJsZWQgb3IgaGFzIDAgY2FwYWNpdHkiKTsKLSAgICAgICAgY2Fubm90Q2FjaGUg
PSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXBhZ2UtPnNldHRpbmdzKCktPnVzZXNQYWdlQ2FjaGUo
KSkgewotICAgICAgICBQQ0xPRygiICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5cyBiL2YgY2FjaGUgZGlz
YWJsZWQiKTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgIH0KLSNpZiBFTkFCTEUo
REVWSUNFX09SSUVOVEFUSU9OKQotICAgIGlmIChEZXZpY2VNb3Rpb25Db250cm9sbGVyOjppc0Fj
dGl2ZUF0KHBhZ2UpKSB7Ci0gICAgICAgIFBDTE9HKCIgICAtUGFnZSBpcyB1c2luZyBEZXZpY2VN
b3Rpb24iKTsKLSAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoRGV2
aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KHBhZ2UpKSB7Ci0gICAgICAgIFBD
TE9HKCIgICAtUGFnZSBpcyB1c2luZyBEZXZpY2VPcmllbnRhdGlvbiIpOwotICAgICAgICBjYW5u
b3RDYWNoZSA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKGxvYWRUeXBlID09IEZyYW1l
TG9hZFR5cGVSZWxvYWQpIHsKLSAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9h
ZCIpOwotICAgICAgICBjYW5ub3RDYWNoZSA9IHRydWU7Ci0gICAgfQotICAgIGlmIChsb2FkVHlw
ZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgewotICAgICAgICBQQ0xPRygiICAg
LUxvYWQgdHlwZSBpczogUmVsb2FkIGZyb20gb3JpZ2luIik7Ci0gICAgICAgIGNhbm5vdENhY2hl
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVTYW1lKSB7
Ci0gICAgICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBTYW1lIik7Ci0gICAgICAgIGNhbm5v
dENhY2hlID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgUENMT0coY2Fubm90Q2FjaGUgPyAiIFBh
Z2UgQ0FOTk9UIGJlIGNhY2hlZFxuLS0tLS0tLS0iIDogIiBQYWdlIENBTiBiZSBjYWNoZWRcbi0t
LS0tLS0tIik7Ci19Ci0KLSNlbmRpZiAKLQogUGFnZUNhY2hlKiBwYWdlQ2FjaGUoKQogewogICAg
IHN0YXRpYyBQYWdlQ2FjaGUqIHN0YXRpY1BhZ2VDYWNoZSA9IG5ldyBQYWdlQ2FjaGU7CkBAIC0y
NDQsNjggKzc0LDExIEBAIFBhZ2VDYWNoZTo6UGFnZUNhY2hlKCkKIHsKIH0KICAgICAKLWJvb2wg
UGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1lKiBmcmFtZSkK
LXsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBp
ZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoY2hpbGQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0g
ZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgCi0gICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyCi0gICAg
ICAgICYmIGRvY3VtZW50TG9hZGVyLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgpCi0gICAg
ICAgIC8vIERvIG5vdCBjYWNoZSBlcnJvciBwYWdlcyAodGhlc2UgY2FuIGJlIHJlY29nbml6ZWQg
YXMgcGFnZXMgd2l0aCBzdWJzdGl0dXRlIGRhdGEgb3IgdW5yZWFjaGFibGUgVVJMcykuCi0gICAg
ICAgICYmICEoZG9jdW1lbnRMb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpICYmICFk
b2N1bWVudExvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpKQot
ICAgICAgICAmJiAoIWZyYW1lTG9hZGVyLT5zdWJmcmFtZUxvYWRlcigpLT5jb250YWluc1BsdWdp
bnMoKSB8fCBmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdp
bnMoKSkKLSAgICAgICAgJiYgKCFkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSB8
fCAoIWRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNo
ZSgpICYmICFkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWluc05v
U3RvcmUoKSkpCi0gICAgICAgICYmICghZnJhbWUtPmRvbVdpbmRvdygpIHx8ICFmcmFtZS0+ZG9t
V2luZG93KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCkpCi0j
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgJiYgIWRvY3VtZW50LT5oYXNPcGVuRGF0
YWJhc2VzKCkKLSNlbmRpZgotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLSAgICAgICAgJiYg
IVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMoZG9jdW1lbnQpCi0jZW5k
aWYKLSAgICAgICAgJiYgIWRvY3VtZW50LT51c2luZ0dlb2xvY2F0aW9uKCkKLSAgICAgICAgJiYg
ZnJhbWVMb2FkZXItPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKQotICAgICAgICAmJiAhZnJhbWVM
b2FkZXItPnF1aWNrUmVkaXJlY3RDb21pbmcoKQotICAgICAgICAmJiAhZG9jdW1lbnRMb2FkZXIt
PmlzTG9hZGluZ0luQVBJU2Vuc2UoKQotICAgICAgICAmJiAhZG9jdW1lbnRMb2FkZXItPmlzU3Rv
cHBpbmcoKQotICAgICAgICAmJiBkb2N1bWVudC0+Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMo
KQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGludmVzdGlnYXRpbmcgY2FjaGluZyBmcmFt
ZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQKLSAgICAgICAgLy8gYXBwbGljYXRpb24gY2FjaGUu
IDxyZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0cmFja3MgdGhhdCB3b3JrLgotICAgICAgICAmJiBk
b2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+Y2FuQ2FjaGVJblBhZ2VDYWNo
ZSgpCi0gICAgICAgICYmIGZyYW1lTG9hZGVyLT5jbGllbnQoKS0+Y2FuQ2FjaGVQYWdlKCk7Ci19
Ci0gICAgCiBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGUoUGFnZSogcGFnZSkKIHsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAg
bG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24ocGFnZSk7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBDYWNo
ZSB0aGUgcGFnZSwgaWYgcG9zc2libGUuCi0gICAgLy8gRG9uJ3Qgd3JpdGUgdG8gdGhlIGNhY2hl
IGlmIGluIHRoZSBtaWRkbGUgb2YgYSByZWRpcmVjdCwgc2luY2Ugd2Ugd2lsbCB3YW50IHRvCi0g
ICAgLy8gc3RvcmUgdGhlIGZpbmFsIHBhZ2Ugd2UgZW5kIHVwIG9uLgotICAgIC8vIE5vIHBvaW50
IHdyaXRpbmcgdG8gdGhlIGNhY2hlIG9uIGEgcmVsb2FkIG9yIGxvYWRTYW1lLCBzaW5jZSB3ZSB3
aWxsIGp1c3Qgd3JpdGUKLSAgICAvLyBvdmVyIGl0IGFnYWluIHdoZW4gd2UgbGVhdmUgdGhhdCBw
YWdlLgotICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYWdlLT5tYWluRnJhbWUoKS0+bG9h
ZGVyKCktPmxvYWRUeXBlKCk7Ci0gICAgCi0gICAgcmV0dXJuIGNhbkNhY2hlUGFnZUNvbnRhaW5p
bmdUaGlzRnJhbWUocGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgICYmIHBhZ2UtPmJhY2tGb3J3
YXJkKCktPmlzQWN0aXZlKCkKLSAgICAgICAgJiYgcGFnZS0+c2V0dGluZ3MoKS0+dXNlc1BhZ2VD
YWNoZSgpCi0jaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKLSAgICAgICAgJiYgIURldmlj
ZU1vdGlvbkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQocGFnZSkKLSAgICAgICAgJiYgIURldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKQotI2VuZGlmCi0gICAgICAgICYm
IGxvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGVSZWxvYWQKLSAgICAgICAgJiYgbG9hZFR5cGUgIT0g
RnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4KLSAgICAgICAgJiYgbG9hZFR5cGUgIT0gRnJh
bWVMb2FkVHlwZVNhbWU7CisgICAgcmV0dXJuIFBhZ2VDYWNoZVBvbGljeShwYWdlKS5jYW5DYWNo
ZVBhZ2UoKTsKIH0KIAogdm9pZCBQYWdlQ2FjaGU6OnNldENhcGFjaXR5KGludCBjYXBhY2l0eSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCmluZGV4IGFkNTMzM2M2NDM1NmVjYjE5NmQzNGJj
OTA5ODc5NTE3MmM4MmJhYmIuLjUwOTkwMmM4YjE1ZWU0MmM5YmMwNTU2Zjg4ODY3YTJlZmZiZTlk
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaApAQCAtNzEsOCArNzEsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhZ2VDYWNoZSgpOyAvLyBVc2UgcGFnZUNhY2hlKCkg
aW5zdGVhZC4KICAgICAgICAgflBhZ2VDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFr
ZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBu
b3QgZGVsZXRlIHNpbmdsZXRvbnMuCiAgICAgICAgIAotICAgICAgICBzdGF0aWMgYm9vbCBjYW5D
YWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1lKik7Ci0KICAgICAgICAgdm9pZCBhZGRU
b0xSVUxpc3QoSGlzdG9yeUl0ZW0qKTsgLy8gQWRkcyB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4K
ICAgICAgICAgdm9pZCByZW1vdmVGcm9tTFJVTGlzdChIaXN0b3J5SXRlbSopOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBvbGljeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA5Y2U4ODEx
NjRjODNmMDNkNWEyN2EzNjk5ZDg0NDdiNDBiNjFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlUG9saWN5LmNwcApAQCAtMCwwICsxLDI1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZUNhY2hlUG9saWN5LmgiCisKKyNp
bmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkRldmljZU1vdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFnZUNhY2hlUG9saWN5OjpQYWdlQ2FjaGVQb2xp
Y3koUGFnZSogcGFnZSkgCisgICAgOiBtX2JhY2tGb3J3YXJkSXNBY3RpdmUocGFnZS0+YmFja0Zv
cndhcmQoKS0+aXNBY3RpdmUoKSkKKyAgICAsIG1fc2V0dGluZ3NBbGxvd1BhZ2VDYWNoZShwYWdl
LT5zZXR0aW5ncygpLT51c2VzUGFnZUNhY2hlKCkpCisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRB
VElPTikKKyAgICAsIG1fZGV2aWNlTW90aW9uSXNBY3RpdmUoRGV2aWNlTW90aW9uQ29udHJvbGxl
cjo6aXNBY3RpdmVBdChwYWdlKSkKKyAgICAsIG1fZGV2aWNlT3JpZW50YXRpb25Jc0FjdGl2ZShE
ZXZpY2VNb3Rpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KHBhZ2UpKQorI2VuZGlmCisgICAgLCBt
X2xvYWRUeXBlKHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFR5cGUoKSkKKyAgICAs
IG1fcGFnZShwYWdlKQorICAgICwgbV9sb2dJbmRlbnRMZXZlbCgwKQoreworfQorCitib29sIFBh
Z2VDYWNoZVBvbGljeTo6Y2FuQ2FjaGVQYWdlKCkKK3sKKyAgICBwb2xpY3lMb2coIi0tLS0tLS0t
XG4gRGV0ZXJtaW5pbmcgaWYgcGFnZSBjYW4gYmUgY2FjaGVkOiIpOworCisgICAgY29uc3QgYm9v
bCBjYW5DYWNoZU1haW5GcmFtZSA9IGNhbkNhY2hlRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7
CisgICAgY29uc3QgYm9vbCBjYW5DYWNoZVBhZ2UgPSBjYW5DYWNoZVBhZ2VJbXBsKCk7CisKKyAg
ICBpZiAoY2FuQ2FjaGVNYWluRnJhbWUgJiYgY2FuQ2FjaGVQYWdlKQorICAgICAgICBwb2xpY3lM
b2coIiBQYWdlIENBTiBiZSBjYWNoZWRcbi0tLS0tLS0tIik7CisgICAgZWxzZQorICAgICAgICBw
b2xpY3lMb2coIiBQYWdlIENBTk5PVCBiZSBjYWNoZWRcbi0tLS0tLS0tIik7CisgICAgcmV0dXJu
IGNhbkNhY2hlTWFpbkZyYW1lICYmIGNhbkNhY2hlUGFnZTsKK30KKwordm9pZCBQYWdlQ2FjaGVQ
b2xpY3k6OnBvbGljeUxvZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgVU5VU0VEX1BB
UkFNKG1lc3NhZ2UpOworICAgIExPRyhQYWdlQ2FjaGUsICIlKnMlcyIsIG1fbG9nSW5kZW50TGV2
ZWwqNCwgIiIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgUGFnZUNhY2hlUG9s
aWN5OjpjYW5DYWNoZUZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICArK21fbG9nSW5kZW50TGV2
ZWw7CisKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAg
ICBLVVJMIGN1cnJlbnRVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgPyBm
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDogS1VSTCgpOworICAgICAg
ICBLVVJMIG5ld1VSTCA9IGZyYW1lLT5sb2FkZXIoKS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRl
cigpID8gZnJhbWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVybCgp
IDogS1VSTCgpOworICAgICAgICBpZiAobmV3VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHBv
bGljeUxvZyhtYWtlU3RyaW5nKCIgRGV0ZXJtaW5pbmcgaWYgc3ViZnJhbWUgd2l0aCBVUkwoIiwg
Y3VycmVudFVSTC5zdHJpbmcoKSwgIikgY2FuIGJlIGNhY2hlZDoiKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHBvbGljeUxvZyhtYWtlU3RyaW5nKCIgRGV0ZXJtaW5pbmcgaWYgZnJhbWUg
Y2FuIGJlIGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCIsIGN1cnJlbnRVUkwuc3RyaW5nKCksICIp
IHRvICgiLCBuZXdVUkwuc3RyaW5nKCksICIpOiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgaWYgKCFjYW5DYWNoZUZyYW1lKGNoaWxkKSkgeworICAgICAgICAgICAgcG9saWN5
TG9nKCIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIpOworICAgICAgICAgICAgLS1tX2xvZ0luZGVu
dExldmVsOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHBv
bGljeUxvZygiIEZyYW1lIENBTiBiZSBjYWNoZWQiKTsKKyAgICB9CisKKyAgICAtLW1fbG9nSW5k
ZW50TGV2ZWw7CisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpIHsK
KyAgICAgICAgcG9saWN5TG9nKCIgLVRoZXJlIGlzIG5vIERvY3VtZW50TG9hZGVyIG9iamVjdCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEZyYW1lRGF0YSBmcmFtZWRhdGE7
CisKKyAgICBmcmFtZWRhdGEuaXNFcnJvclBhZ2UgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+c3Vic3RpdHV0
ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpOworICAgIGZyYW1lZGF0YS5wYWdlQ2FjaGVT
dXBwb3J0c1BsdWdpbnMgPSBmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wYWdlQ2FjaGVTdXBw
b3J0c1BsdWdpbnMoKTsKKyAgICBmcmFtZWRhdGEuaGFzRG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgaWYgKGZyYW1lZGF0YS5oYXNEb2N1bWVu
dExvYWRlcikgeworICAgICAgICBmcmFtZWRhdGEubWFpbkRvY3VtZW50RXJyb3IgPSAhZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzTnVsbCgp
OworICAgICAgICBmcmFtZWRhdGEuaXNMb2FkaW5nSW5BUElTZW5zZSA9IGZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpOworICAgICAgICBmcmFt
ZWRhdGEubG9hZGVySXNTdG9wcGluZyA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KS0+aXNTdG9wcGluZygpOworICAgICAgICBmcmFtZWRhdGEuYXBwQ2FjaGVEZW5pZWQgPSAhZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5j
YW5DYWNoZUluUGFnZUNhY2hlKCk7CisgICAgfQorICAgIGZyYW1lZGF0YS5jb250YWluc1BsdWdp
bnMgPSBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygp
OworICAgIGZyYW1lZGF0YS5wcm90b2NvbCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5wcm90
b2NvbCgpOworICAgIGZyYW1lZGF0YS5yZXNwb25zZURlbmllcyA9IGZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKTsK
KyAgICBmcmFtZWRhdGEuaGFzVW5sb2FkTGlzdGVuZXIgPSBmcmFtZS0+ZG9tV2luZG93KCkgJiYg
ZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2Fk
RXZlbnQpOworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgZnJhbWVkYXRhLmhhc09wZW5E
YXRhYmFzZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5oYXNPcGVuRGF0YWJhc2VzKCk7CisjZW5kaWYK
KyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisgICAgZnJhbWVkYXRhLmhhc1NoYXJlZFdvcmtl
cnMgPSBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKGZyYW1lLT5kb2N1
bWVudCgpKTsKKyNlbmRpZgorICAgIGZyYW1lZGF0YS51c2VzR2VvbG9jYXRpb24gPSBmcmFtZS0+
ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpOworICAgIGZyYW1lZGF0YS5oYXNIaXN0b3J5
Q3VycmVudEl0ZW0gPSBmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsK
KyAgICBmcmFtZWRhdGEucXVpY2tSZWRpcmVjdENvbWluZyA9IGZyYW1lLT5sb2FkZXIoKS0+cXVp
Y2tSZWRpcmVjdENvbWluZygpOworICAgIGZyYW1lZGF0YS5jYW5TdXNwZW5kQWN0aXZlRE9NT2Jq
ZWN0cyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpOwor
ICAgIGZyYW1lZGF0YS5jYW5DYWNoZVBhZ2UgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
YW5DYWNoZVBhZ2UoKTsKKworICAgIHJldHVybiBjYW5DYWNoZUZyYW1lSW1wbChmcmFtZWRhdGEp
OworfQorCisvLyBUaGVzZSAqSW1wbCBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBkZWZhdWx0IHBh
Z2UgY2FjaGUgcG9saWN5LgorYm9vbCBQYWdlQ2FjaGVQb2xpY3k6OmNhbkNhY2hlUGFnZUltcGwo
KQoreworICAgIGJvb2wgY2FuQ2FjaGVQYWdlID0gdHJ1ZTsKKworICAgIGlmICghbV9iYWNrRm9y
d2FyZElzQWN0aXZlKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLVRoZSBiYWNrL2ZvcndhcmQg
bGlzdCBpcyBkaXNhYmxlZCBvciBoYXMgMCBjYXBhY2l0eS4iKTsKKyAgICAgICAgY2FuQ2FjaGVQ
YWdlID0gZmFsc2U7CisgICAgfQorICAgIGlmICghbV9zZXR0aW5nc0FsbG93UGFnZUNhY2hlKSB7
CisgICAgICAgIHBvbGljeUxvZygiICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5cyBiL2YgY2FjaGUgZGlz
YWJsZWQiKTsKKyAgICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfQorI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pCisgICAgaWYgKG1fZGV2aWNlTW90aW9uSXNBY3RpdmUpIHsK
KyAgICAgICAgcG9saWN5TG9nKCIgICAtUGFnZSBpcyB1c2luZyBEZXZpY2VNb3Rpb24iKTsKKyAg
ICAgICAgY2FuQ2FjaGVQYWdlID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2RldmljZU9yaWVu
dGF0aW9uSXNBY3RpdmUpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtUGFnZSBpcyB1c2luZyBE
ZXZpY2VPcmllbnRhdGlvbiIpOworICAgICAgICBjYW5DYWNoZVBhZ2UgPSBmYWxzZTsKKyAgICB9
CisjZW5kaWYKKyAgICBpZiAobV9sb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkKSB7Cisg
ICAgICAgIHBvbGljeUxvZygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkIik7CisgICAgICAgIGNh
bkNhY2hlUGFnZSA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAobV9sb2FkVHlwZSA9PSBGcmFtZUxv
YWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgeworICAgICAgICBwb2xpY3lMb2coIiAgIC1Mb2FkIHR5
cGUgaXM6IFJlbG9hZCBmcm9tIG9yaWdpbiIpOworICAgICAgICBjYW5DYWNoZVBhZ2UgPSBmYWxz
ZTsKKyAgICB9IGVsc2UgaWYgKG1fbG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVNhbWUpIHsKKyAg
ICAgICAgcG9saWN5TG9nKCIgICAtTG9hZCB0eXBlIGlzOiBTYW1lIik7CisgICAgICAgIGNhbkNh
Y2hlUGFnZSA9IGZhbHNlOworICAgIH0KKworCisgICAgcmV0dXJuIGNhbkNhY2hlUGFnZTsKK30K
KworYm9vbCBQYWdlQ2FjaGVQb2xpY3k6OmNhbkNhY2hlRnJhbWVJbXBsKGNvbnN0IEZyYW1lRGF0
YSYgZnJhbWVkYXRhKQoreworICAgIGlmICghZnJhbWVkYXRhLmhhc0RvY3VtZW50TG9hZGVyKSB7
CisgICAgICAgIHBvbGljeUxvZygiICAgLVRoZXJlIGlzIG5vIERvY3VtZW50TG9hZGVyIG9iamVj
dCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGJvb2wgY2FuQ2FjaGVGcmFt
ZSA9IHRydWU7CisgICAgaWYgKGZyYW1lZGF0YS5tYWluRG9jdW1lbnRFcnJvcikgeworICAgICAg
ICBwb2xpY3lMb2coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBhbiBlcnJvciIpOworICAgICAgICBj
YW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmcmFtZWRhdGEuaXNFcnJvclBh
Z2UpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtRnJhbWUgaXMgYW4gZXJyb3IgcGFnZSIpOwor
ICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmcmFtZWRhdGEu
Y29udGFpbnNQbHVnaW5zICYmICFmcmFtZWRhdGEucGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKSB7
CisgICAgICAgIHBvbGljeUxvZygiICAgLUZyYW1lIGNvbnRhaW5zIHBsdWdpbnMsIGFuZCB0aGUg
cGFnZSBjYWNoZSBzZXR0aW5ncyBkbyBub3Qgc3VwcG9ydCBwbHVnaW5zLiIpOworICAgICAgICBj
YW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
cmFtZWRhdGEucHJvdG9jb2wsICJodHRwcyIpICYmIGZyYW1lZGF0YS5yZXNwb25zZURlbmllcykg
eworICAgICAgICBwb2xpY3lMb2coIiAgIC1GcmFtZSBpcyBIVFRQUywgYW5kIHRoZSByZXNwb25z
ZSBjb250YWlucyBOb0NhY2hlIG9yIE5vU3RvcmUiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9
IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmhhc1VubG9hZExpc3RlbmVyKSB7Cisg
ICAgICAgIHBvbGljeUxvZygiICAgLUZyYW1lIGhhcyBhbiB1bmxvYWQgZXZlbnQgbGlzdGVuZXIi
KTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorICAgIGlmIChmcmFtZWRhdGEuaGFzT3BlbkRhdGFiYXNlKSB7CisgICAgICAg
IHBvbGljeUxvZygiICAgLUZyYW1lIGhhcyBvbmUgb3IgbW9yZSBvcGVuIGRhdGFiYXNlIGhhbmRs
ZXMiKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorI2lm
IEVOQUJMRShTSEFSRURfV09SS0VSUykKKyAgICBpZiAoZnJhbWVkYXRhLmhhc1NoYXJlZFdvcmtl
cnMpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtRnJhbWUgaGFzIGFzc29jaWF0ZWQgU2hhcmVk
V29ya2VycyIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorI2VuZGlm
CisgICAgaWYgKGZyYW1lZGF0YS51c2VzR2VvbG9jYXRpb24pIHsKKyAgICAgICAgcG9saWN5TG9n
KCIgICAtRnJhbWUgdXNlcyBHZW9sb2NhdGlvbiIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0g
ZmFsc2U7CisgICAgfQorICAgIGlmICghZnJhbWVkYXRhLmhhc0hpc3RvcnlDdXJyZW50SXRlbSkg
eworICAgICAgICBwb2xpY3lMb2coIiAgIC1ObyBjdXJyZW50IGhpc3RvcnkgaXRlbSIpOworICAg
ICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmIChmcmFtZWRhdGEucXVp
Y2tSZWRpcmVjdENvbWluZykgeworICAgICAgICBwb2xpY3lMb2coIiAgIC1RdWljayByZWRpcmVj
dCBpcyBjb21pbmciKTsKKyAgICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAg
ICBpZiAoZnJhbWVkYXRhLmlzTG9hZGluZ0luQVBJU2Vuc2UpIHsKKyAgICAgICAgcG9saWN5TG9n
KCIgICAtRG9jdW1lbnRMb2FkZXIgaXMgc3RpbGwgbG9hZGluZyBpbiBBUEkgc2Vuc2UiKTsKKyAg
ICAgICAgY2FuQ2FjaGVGcmFtZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoZnJhbWVkYXRhLmxv
YWRlcklzU3RvcHBpbmcpIHsKKyAgICAgICAgcG9saWN5TG9nKCIgICAtRG9jdW1lbnRMb2FkZXIg
aXMgaW4gdGhlIG1pZGRsZSBvZiBzdG9wcGluZyIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0g
ZmFsc2U7CisgICAgfQorICAgIGlmICghZnJhbWVkYXRhLmNhblN1c3BlbmRBY3RpdmVET01PYmpl
Y3RzKSB7CisgICAgICAgIHBvbGljeUxvZygiICAgLVRoZSBkb2N1bWVudCBjYW5ub3Qgc3VzcGVu
ZCBpdHMgYWN0aXZlIERPTSBPYmplY3RzIik7CisgICAgICAgIGNhbkNhY2hlRnJhbWUgPSBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKGZyYW1lZGF0YS5hcHBDYWNoZURlbmllZCkgeworICAgICAgICBw
b2xpY3lMb2coIiAgIC1UaGUgYXBwbGljYXRpb24gY2FjaGUgZGVuaWVkIHRoZSBwYWdlIGNhY2hl
LiIpOworICAgICAgICBjYW5DYWNoZUZyYW1lID0gZmFsc2U7CisgICAgfQorICAgIGlmICghZnJh
bWVkYXRhLmNhbkNhY2hlUGFnZSkgeworICAgICAgICBwb2xpY3lMb2coIiAgIC1UaGUgY2xpZW50
IHNheXMgdGhpcyBmcmFtZSBjYW5ub3QgYmUgY2FjaGVkIik7CisgICAgICAgIGNhbkNhY2hlRnJh
bWUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNhbkNhY2hlRnJhbWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvUGFnZUNhY2hlUG9saWN5LmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBv
bGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdiYzE2NzlkZTcwNGY3ZWJmZDc3YjU4MWJmNGY0YjA3Y2Y2NTEz
MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZVBv
bGljeS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgUGFnZUNhY2hlUG9saWN5X2gKKyNk
ZWZpbmUgUGFnZUNhY2hlUG9saWN5X2gKKworI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIFBhZ2VDYWNoZVBvbGljeSAg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDYWNoZVBvbGljeSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUGFnZUNhY2hlUG9saWN5
KFBhZ2UqKTsKKworICAgIGJvb2wgY2FuQ2FjaGVQYWdlKCk7Citwcml2YXRlOgorICAgIHN0cnVj
dCBGcmFtZURhdGEgeworICAgICAgICBib29sIGlzRXJyb3JQYWdlOworICAgICAgICBib29sIHBh
Z2VDYWNoZVN1cHBvcnRzUGx1Z2luczsKKyAgICAgICAgYm9vbCBoYXNEb2N1bWVudExvYWRlcjsK
KyAgICAgICAgYm9vbCBtYWluRG9jdW1lbnRFcnJvcjsKKyAgICAgICAgYm9vbCBjb250YWluc1Bs
dWdpbnM7CisgICAgICAgIFN0cmluZyBwcm90b2NvbDsKKyAgICAgICAgYm9vbCByZXNwb25zZURl
bmllczsKKyAgICAgICAgYm9vbCBoYXNVbmxvYWRMaXN0ZW5lcjsKKyNpZiBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorICAgICAgICBib29sIGhhc09wZW5EYXRhYmFzZTsKKyNlbmRpZgorI2lmIEVOQUJM
RShTSEFSRURfV09SS0VSUykKKyAgICAgICAgYm9vbCBoYXNTaGFyZWRXb3JrZXJzOworI2VuZGlm
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgYm9vbCB1c2VzR2Vv
bG9jYXRpb247CisgICAgICAgIGJvb2wgaGFzSGlzdG9yeUN1cnJlbnRJdGVtOworICAgICAgICBi
b29sIHF1aWNrUmVkaXJlY3RDb21pbmc7CisgICAgICAgIGJvb2wgaXNMb2FkaW5nSW5BUElTZW5z
ZTsKKyAgICAgICAgYm9vbCBsb2FkZXJJc1N0b3BwaW5nOworICAgICAgICBib29sIGNhblN1c3Bl
bmRBY3RpdmVET01PYmplY3RzOworICAgICAgICBib29sIGFwcENhY2hlRGVuaWVkOworICAgICAg
ICBib29sIGNhbkNhY2hlUGFnZTsKKyAgICB9OworCisgICAgYm9vbCBjYW5DYWNoZUZyYW1lKEZy
YW1lKik7CisgICAgdm9pZCBwb2xpY3lMb2coY29uc3QgU3RyaW5nJik7CisKKyAgICBib29sIGNh
bkNhY2hlRnJhbWVJbXBsKGNvbnN0IEZyYW1lRGF0YSYpOworICAgIGJvb2wgY2FuQ2FjaGVQYWdl
SW1wbCgpOworCisgICAgLy8gUGFnZSBsZXZlbCBwYXJhbWV0ZXJzCisgICAgYm9vbCBtX2JhY2tG
b3J3YXJkSXNBY3RpdmU7CisgICAgYm9vbCBtX3NldHRpbmdzQWxsb3dQYWdlQ2FjaGU7CisgICAg
Ym9vbCBtX3NldHRpbmdzQWxsb3dzUGx1Z2luczsKKyNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFU
SU9OKQorICAgIGJvb2wgbV9kZXZpY2VNb3Rpb25Jc0FjdGl2ZTsKKyAgICBib29sIG1fZGV2aWNl
T3JpZW50YXRpb25Jc0FjdGl2ZTsKKyNlbmRpZgorICAgIEZyYW1lTG9hZFR5cGUgbV9sb2FkVHlw
ZTsKKyAgICAgICAgCisgICAgUGFnZSogbV9wYWdlOworICAgIGludCBtX2xvZ0luZGVudExldmVs
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
</data>
<flag name="review"
          id="131980"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>