<?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>54774</bug_id>
          
          <creation_ts>2011-02-18 14:46:11 -0800</creation_ts>
          <short_desc>[fileapi] Implement LocalFileSystem.resolveFileSystemURI</short_desc>
          <delta_ts>2011-02-28 19:28:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ericu</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>kinuko</cc>
    
    <cc>michaeln</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>353845</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-18 14:46:11 -0800</bug_when>
    <thetext>[fileapi] Implement LocalFileSystem.resolveFileSystemURI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353847</commentid>
    <comment_count>1</comment_count>
      <attachid>83014</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-18 14:48:17 -0800</bug_when>
    <thetext>Created attachment 83014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353868</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-18 15:14:39 -0800</bug_when>
    <thetext>Note that patch still needs a bit of code to compare the origin URL to the caller&apos;s security origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353879</commentid>
    <comment_count>3</comment_count>
      <attachid>83025</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-18 15:27:05 -0800</bug_when>
    <thetext>Created attachment 83025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353972</commentid>
    <comment_count>4</comment_count>
      <attachid>83025</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-18 19:01:15 -0800</bug_when>
    <thetext>Comment on attachment 83025
Patch

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

&gt; LayoutTests/fast/filesystem/resources/resolve-uri.js:14
&gt; +    testFailed(&quot;Error occured:&quot; + error.code);

Typo: occurred

&gt; LayoutTests/fast/filesystem/resources/resolve-uri.js:38
&gt; +var jsTestIsAsync = true;

I think it&apos;s worth testing more than one URL.
For example, try one with a directory, try both temporary and persistent, try the root directory, try removing the entry before resolving the URL.
Also, generate some by hand and test a few kinds of malformed URLs, and try directories with and without the trailing slash.

&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:53
&gt; +const char DOMFileSystemBase::kTemporaryPathString[] = &quot;temporary&quot;;

Now that we&apos;ve got these constants defined, we should really use them in toURI as well.

&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:62
&gt; +    if (path.isEmpty() || !path[0] == &apos;/&apos;)

Do you mean:

	path[0] != &apos;/&apos;

?

&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:75
&gt; +    if (path.isEmpty() || !path[0] == &apos;/&apos;)

Same here.

&gt; Source/WebCore/page/DOMWindow.cpp:766
&gt; +    if (!AsyncFileSystem::isAvailable() || !securityOrigin-&gt;canAccessFileSystem() || !securityOrigin-&gt;canRequest(parsedURL)) {

I&apos;m not sure this is strict enough.  Should the fact that the security origin can load from this URL be enough to grant it [writeable] access to the Entry?
Currently we&apos;re talking about not letting any cross-origin requests be made at all, but if we should relax that, we wouldn&apos;t necessarily want to allow this as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354741</commentid>
    <comment_count>5</comment_count>
      <attachid>83025</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-21 12:44:36 -0800</bug_when>
    <thetext>Comment on attachment 83025
Patch

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

This could use a bunch more tests for the URL cracking code.  You&apos;re not testing any of the error cases, as far as I can tell.

&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:68
&gt; +        path = path.substring(sizeof(kTemporaryPathString) - 1);

pls use a constant for this value.

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:75
&gt;&gt; +    if (path.isEmpty() || !path[0] == &apos;/&apos;)
&gt; 
&gt; Same here.

Please test the cases where the URL contains \ instead of / to make sure we&apos;re canonicalizing things properly.

&gt; Source/WebCore/fileapi/DOMFileSystemBase.h:64
&gt; +    static const char kPersistentPathString[];
&gt; +    static const char kTemporaryPathString[];

Another way to do this is to have static functions that return const String&amp; and use DEFINE_STATIC_LOCAL to define the strings.  That way, you get the length for free and it&apos;s easier to use various String methods.

&gt; Source/WebCore/page/DOMWindow.cpp:765
&gt; +    KURL parsedURL(ParsedURLString, uri);

This is unlikely to be correct.  ParsedURLString means that |uri| has already been canonicalized by KURL, but |uri| here can be an arbitrary string.  What is the expected behavior when |uri| is a string like &quot;foo&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355186</commentid>
    <comment_count>6</comment_count>
      <attachid>83025</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-02-22 04:56:39 -0800</bug_when>
    <thetext>Comment on attachment 83025
Patch

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

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.h:64
&gt;&gt; +    static const char kTemporaryPathString[];
&gt; 
&gt; Another way to do this is to have static functions that return const String&amp; and use DEFINE_STATIC_LOCAL to define the strings.  That way, you get the length for free and it&apos;s easier to use various String methods.

If you do this please make sure it&apos;s called only on the document thread (maybe with an assert).  (As most of the DOMFileSystemBase&apos;s methods are called on both main thread and worker thread.)

&gt; Source/WebCore/page/DOMWindow.cpp:778
&gt; +    LocalFileSystem::localFileSystem().readFileSystem(document, type, 0, ResolveURICallbacks::create(successCallback, errorCallback, document, filePath));

(Not a comment for this change) actually probably we should drop the &apos;size&apos; parameter from readFileSystem as it&apos;s supposed to return a read-only file system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355352</commentid>
    <comment_count>7</comment_count>
      <attachid>83025</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-22 09:55:20 -0800</bug_when>
    <thetext>Comment on attachment 83025
Patch

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

&gt;&gt; LayoutTests/fast/filesystem/resources/resolve-uri.js:14
&gt;&gt; +    testFailed(&quot;Error occured:&quot; + error.code);
&gt; 
&gt; Typo: occurred

Fixed.

&gt;&gt; LayoutTests/fast/filesystem/resources/resolve-uri.js:38
&gt;&gt; +var jsTestIsAsync = true;
&gt; 
&gt; I think it&apos;s worth testing more than one URL.
&gt; For example, try one with a directory, try both temporary and persistent, try the root directory, try removing the entry before resolving the URL.
&gt; Also, generate some by hand and test a few kinds of malformed URLs, and try directories with and without the trailing slash.

Sorry the initial upload didn&apos;t include more tests; will add lots more. I mainly need to come up with a bit more framework to make it easy to add new testcases.

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:53
&gt;&gt; +const char DOMFileSystemBase::kTemporaryPathString[] = &quot;temporary&quot;;
&gt; 
&gt; Now that we&apos;ve got these constants defined, we should really use them in toURI as well.

Only not using them there because that usage is moving, in another patch, from one file to the other.  Depending on which lands first, I&apos;ll consolidate, and there won&apos;t be any more references to the bare string.

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:62
&gt;&gt; +    if (path.isEmpty() || !path[0] == &apos;/&apos;)
&gt; 
&gt; Do you mean:
&gt; 
&gt;     path[0] != &apos;/&apos;
&gt; 
&gt; ?

Wow, I did, that&apos;s really bad. I think I&apos;m too used to unittests catching my mistakes.  Fixed.

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:68
&gt;&gt; +        path = path.substring(sizeof(kTemporaryPathString) - 1);
&gt; 
&gt; pls use a constant for this value.

Will do.

&gt;&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:75
&gt;&gt;&gt; +    if (path.isEmpty() || !path[0] == &apos;/&apos;)
&gt;&gt; 
&gt;&gt; Same here.
&gt; 
&gt; Please test the cases where the URL contains \ instead of / to make sure we&apos;re canonicalizing things properly.

Fixed the logical error. And will add this to the list of tests I need to create. The &apos;\&apos; &apos;/&apos; thing worked correctly with GURL, but you&apos;re right that I haven&apos;t checked into KURL&apos;s behavior.

&gt;&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.h:64

&gt;&gt; 
&gt;&gt; Another way to do this is to have static functions that return const String&amp; and use DEFINE_STATIC_LOCAL to define the strings.  That way, you get the length for free and it&apos;s easier to use various String methods.
&gt; 
&gt; If you do this please make sure it&apos;s called only on the document thread (maybe with an assert).  (As most of the DOMFileSystemBase&apos;s methods are called on both main thread and worker thread.)

This will also be used, eventually, from worker threads, so if DEFINE_STATIC_LOCAL isn&apos;t threadsafe it seems I shouldn&apos;t use it at all.

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:765
&gt;&gt; +    KURL parsedURL(ParsedURLString, uri);
&gt; 
&gt; This is unlikely to be correct.  ParsedURLString means that |uri| has already been canonicalized by KURL, but |uri| here can be an arbitrary string.  What is the expected behavior when |uri| is a string like &quot;foo&quot; ?

I guess I was reading KURL&apos;s interface poorly: I was interpreting &quot;ParsedURLString&quot; as &quot;ParseURLString&quot;, an instruction of what to do to the argument rather than a description of that argument. I&apos;d expected that I&apos;d end up with an invalid URL if the string was &quot;foo&quot;.  If it was, e.g., &quot;http://www.google.com/index.html&quot;, DOMFileSystemBase::crackFileSystemURL() will complain about the wrong protocol.

My next patch upload will add lots more tests with random strings.  But do you have a better suggestion for how to tell whether this looks like a valid URL?  Should I see if it begins with &quot;filesystem:&quot; before doing anything else?

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:766
&gt;&gt; +    if (!AsyncFileSystem::isAvailable() || !securityOrigin-&gt;canAccessFileSystem() || !securityOrigin-&gt;canRequest(parsedURL)) {
&gt; 
&gt; I&apos;m not sure this is strict enough.  Should the fact that the security origin can load from this URL be enough to grant it [writeable] access to the Entry?
&gt; Currently we&apos;re talking about not letting any cross-origin requests be made at all, but if we should relax that, we wouldn&apos;t necessarily want to allow this as well.

For now this check is exactly as strict as you suggest: canRequest requires same-origin, so this effectively makes the file only available on the same origin.  I used a call to securityOrigin rather than re-implementing that logic here.  But do you think I should instead duplicate the logic, in case we decide to loosen the canRequest restrictions?  It seems unlikely to me that we&apos;d really loosen canRequest (which is for XHRs), though we might loosen canDisplay (for, e.g., &lt;img&gt; tags).

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:778
&gt;&gt; +    LocalFileSystem::localFileSystem().readFileSystem(document, type, 0, ResolveURICallbacks::create(successCallback, errorCallback, document, filePath));
&gt; 
&gt; (Not a comment for this change) actually probably we should drop the &apos;size&apos; parameter from readFileSystem as it&apos;s supposed to return a read-only file system.

Are there any other callers of readFileSystem? I didn&apos;t see any.  I could just do that in this change...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355629</commentid>
    <comment_count>8</comment_count>
      <attachid>83397</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-22 14:50:04 -0800</bug_when>
    <thetext>Created attachment 83397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355666</commentid>
    <comment_count>9</comment_count>
      <attachid>83404</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-22 15:54:57 -0800</bug_when>
    <thetext>Created attachment 83404
Renamed to resolveLocalFileSystemURI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356657</commentid>
    <comment_count>10</comment_count>
      <attachid>83404</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-02-23 20:58:36 -0800</bug_when>
    <thetext>Comment on attachment 83404
Renamed to resolveLocalFileSystemURI

The FS part is looking good.

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

&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:248
&gt; +    if (m_successCallback) {

I think we do not need m_successCallback check here (and line 225 above).  If the user only provides errorCallback (it doesn&apos;t make sense but technically possible) the current code doesn&apos;t work as expected.
(Or we can skip the entire operation if neither callbacks are given, as it&apos;s read-only operation.)


As for readFileSystem, no I don&apos;t think there&apos;s any other call site. We used to have some code for devtools but the code was reverted due to devtool code refactoring.
If you&apos;re going to upload another patch please feel free to drop the size parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357502</commentid>
    <comment_count>11</comment_count>
      <attachid>83404</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-24 15:56:25 -0800</bug_when>
    <thetext>Comment on attachment 83404
Renamed to resolveLocalFileSystemURI

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

&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:57
&gt; +bool DOMFileSystemBase::crackFileSystemURL(const KURL&amp; url, AsyncFileSystem::Type&amp; type, String&amp; filePath)

We don&apos;t tend to use non-const reference parameters in the filesystem code.  It&apos;s not explicitly banned by the webkit style guide, but we prefer to use pointers for output parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357526</commentid>
    <comment_count>12</comment_count>
      <attachid>83404</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-24 16:06:10 -0800</bug_when>
    <thetext>Comment on attachment 83404
Renamed to resolveLocalFileSystemURI

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

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:57
&gt;&gt; +bool DOMFileSystemBase::crackFileSystemURL(const KURL&amp; url, AsyncFileSystem::Type&amp; type, String&amp; filePath)
&gt; 
&gt; We don&apos;t tend to use non-const reference parameters in the filesystem code.  It&apos;s not explicitly banned by the webkit style guide, but we prefer to use pointers for output parameters.

I was doing this to match what I perceived as WebKit style: there&apos;s no reference counting going on here, and these should never be null. So references seem appropriate.  Per a conversation just now on #webkit:

&lt;aklein&gt; what&apos;s the preferred style for &quot;out&quot; parameters in WebKit? it seems references are pretty common, are they preferred over pointers?
&lt;abarth&gt; aklein: yes

&gt;&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:248
&gt;&gt; +    if (m_successCallback) {
&gt; 
&gt; I think we do not need m_successCallback check here (and line 225 above).  If the user only provides errorCallback (it doesn&apos;t make sense but technically possible) the current code doesn&apos;t work as expected.
&gt; (Or we can skip the entire operation if neither callbacks are given, as it&apos;s read-only operation.)
&gt; 
&gt; 
&gt; As for readFileSystem, no I don&apos;t think there&apos;s any other call site. We used to have some code for devtools but the code was reverted due to devtool code refactoring.
&gt; If you&apos;re going to upload another patch please feel free to drop the size parameter.

Removed checks for m_successCallback (and calls to clear()).

And removed &quot;size&quot; argument to readFileSystem(), hiding the special-case of 0 inside LocalFileSystemChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357534</commentid>
    <comment_count>13</comment_count>
      <attachid>83740</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-24 16:12:58 -0800</bug_when>
    <thetext>Created attachment 83740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357642</commentid>
    <comment_count>14</comment_count>
      <attachid>83740</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-24 18:44:44 -0800</bug_when>
    <thetext>Comment on attachment 83740
Patch

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

Some minor nits.  The one thing that seems slightly incorrect is passing a random string to KURL as if it were a canonicalized URLString.  We&apos;re working to improve the type system to make that impossible.  If you were writing this patch in a few months, the type system would prevent you from writing that line of code.  Please consider changing it before landing.

Thanks!

&gt; LayoutTests/ChangeLog:34
&gt; +        (expectedAndRunNext):
&gt; +        (errorCallback):
&gt; +        (createTestFile):
&gt; +        ():
&gt; +        (assertIsDirectory):
&gt; +        (assertIsFile):
&gt; +        (runBasicTest):
&gt; +        (runHandmadeURI):
&gt; +        (runBogusURI):
&gt; +        (runWrongProtocol):
&gt; +        (runNotEnoughSlashes):
&gt; +        (runNotEnoughSlashes2):
&gt; +        (runUseBackSlashes.):
&gt; +        (runUseBackSlashes):
&gt; +        (runDirectory.):
&gt; +        (runDirectory):
&gt; +        (runWithTrailingSlash.):
&gt; +        (runWithTrailingSlash):
&gt; +        (runNextTest):
&gt; +        (cleanupAndRunNext):
&gt; +        (fileSystemCallback):
&gt; +        (var):

I would just remove this boilerplate from the changelog.  It&apos;s not really helping anyone.

&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:68
&gt; +    path = path.substring(1);
&gt; +
&gt; +    if (path.startsWith(kTemporaryPathPrefix)) {

Can you give an offset to startsWith to avoid the extra malloc from creating the substring?

&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:195
&gt; +// ResolveURICallbacks --------------------------------------------------------

We don&apos;t usually include these sorts of comments.

&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:223
&gt; +bool ErrorCallbackWrapper::handleEvent(FileError*)

The error doesn&apos;t matter?

&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:229
&gt; +} // namespace (anonymous)

Usually we would omit the (anonymous) part of this comment.

&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:251
&gt;  // MetadataCallbacks ----------------------------------------------------------

I see that this file has a bunch of these comment already.

&gt; Source/WebCore/page/DOMWindow.cpp:765
&gt; +    KURL parsedURL(ParsedURLString, uri);

This still seems strange to me.  Everywhere else we call competeURL.  If this is what the spec says, it&apos;s probably wrong.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358054</commentid>
    <comment_count>15</comment_count>
      <attachid>83740</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-25 11:09:55 -0800</bug_when>
    <thetext>Comment on attachment 83740
Patch

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

&gt;&gt; LayoutTests/ChangeLog:34
&gt;&gt; +        (var):
&gt; 
&gt; I would just remove this boilerplate from the changelog.  It&apos;s not really helping anyone.

Removed.

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:68
&gt;&gt; +    if (path.startsWith(kTemporaryPathPrefix)) {
&gt; 
&gt; Can you give an offset to startsWith to avoid the extra malloc from creating the substring?

I don&apos;t see anything in WTF::String matching std::string::compare(), which is what I&apos;d need. I could play some tricks with characters(), memcmp(), and min(), if you think it&apos;s worth the loss of clarity.

&gt;&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:195
&gt;&gt; +// ResolveURICallbacks --------------------------------------------------------
&gt; 
&gt; We don&apos;t usually include these sorts of comments.

As you see below, these are just matching the rest of the file.  Let me know if you think they should just be removed.

&gt;&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:223
&gt;&gt; +bool ErrorCallbackWrapper::handleEvent(FileError*)
&gt; 
&gt; The error doesn&apos;t matter?

Good point, I&apos;ve changed this to only look retry with getFile if the error is TYPE_MISMATCH_ERR, which the spec says _must_ be returned in the case we&apos;re worried about here.

But it turns out Chromium does this wrong and returns INVALID_STATE_ERR.  I&apos;ve added a FIXME here and will clean this up in a future change.

&gt;&gt; Source/WebCore/fileapi/FileSystemCallbacks.cpp:229
&gt;&gt; +} // namespace (anonymous)
&gt; 
&gt; Usually we would omit the (anonymous) part of this comment.

Removed.

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:765
&gt;&gt; +    KURL parsedURL(ParsedURLString, uri);
&gt; 
&gt; This still seems strange to me.  Everywhere else we call competeURL.  If this is what the spec says, it&apos;s probably wrong.  :(

Eric, can you comment here?  Are these URIs allowed to be relative?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358056</commentid>
    <comment_count>16</comment_count>
      <attachid>83844</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-25 11:11:24 -0800</bug_when>
    <thetext>Created attachment 83844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358103</commentid>
    <comment_count>17</comment_count>
      <attachid>83740</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-02-25 11:59:15 -0800</bug_when>
    <thetext>Comment on attachment 83740
Patch

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

&gt;&gt;&gt; Source/WebCore/page/DOMWindow.cpp:765
&gt;&gt;&gt; +    KURL parsedURL(ParsedURLString, uri);
&gt;&gt; 
&gt;&gt; This still seems strange to me.  Everywhere else we call competeURL.  If this is what the spec says, it&apos;s probably wrong.  :(

Looks like there are two issues...

1) I think this string is raw user input, if so we definitely shouldn&apos;t assume that it&apos;s a valid url. The comments on the KURL ctor being used imply that the string is known to be a valid url. I think a better ctor to parse an absolute url (of questionable validity) would be...
   KURL(const KURL&amp; base, const String&amp; relative)
... passing in an empty KURL() as the &apos;base&apos; parameter.

2) If relative urls are supposed to be valid inputs to this scriptable method, we should be using doc-&gt;completeURL(str). I think the envisioned use case was an HTTP loaded page resolving filesystem urls... but good question... what if the page location is filesystem:something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358110</commentid>
    <comment_count>18</comment_count>
      <attachid>83740</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-25 12:10:32 -0800</bug_when>
    <thetext>Comment on attachment 83740
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/page/DOMWindow.cpp:765
&gt;&gt;&gt;&gt; +    KURL parsedURL(ParsedURLString, uri);
&gt;&gt;&gt; 
&gt;&gt;&gt; This still seems strange to me.  Everywhere else we call competeURL.  If this is what the spec says, it&apos;s probably wrong.  :(
&gt;&gt; 
&gt;&gt; Eric, can you comment here?  Are these URIs allowed to be relative?
&gt; 
&gt; Looks like there are two issues...
&gt; 
&gt; 1) I think this string is raw user input, if so we definitely shouldn&apos;t assume that it&apos;s a valid url. The comments on the KURL ctor being used imply that the string is known to be a valid url. I think a better ctor to parse an absolute url (of questionable validity) would be...
&gt;    KURL(const KURL&amp; base, const String&amp; relative)
&gt; ... passing in an empty KURL() as the &apos;base&apos; parameter.
&gt; 
&gt; 2) If relative urls are supposed to be valid inputs to this scriptable method, we should be using doc-&gt;completeURL(str). I think the envisioned use case was an HTTP loaded page resolving filesystem urls... but good question... what if the page location is filesystem:something?

If the page location is already in the filesystem, then yes, relative urls should work.
You should be able to build a full static website in the filesystem, then copy it up to your server, and it should work identically in both places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358220</commentid>
    <comment_count>19</comment_count>
      <attachid>83844</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-25 15:06:52 -0800</bug_when>
    <thetext>Comment on attachment 83844
Patch

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

&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:62
&gt; +    KURL originURL(ParsedURLString, url.path());

Note that though I&apos;ve switched to completeURL() below, I haven&apos;t here.  Is there any other URL-parsing code I should be calling? I can&apos;t really guarantee anything about the contents of url.path() (certainly not that it&apos;s the output of KURL::string()).  But passing in a Document and calling completeURL() here is obviously the wrong thing to do.

&gt; Source/WebCore/page/DOMWindow.cpp:765
&gt; +    KURL parsedURL(ParsedURLString, uri);

I&apos;ve changed this to a call to document-&gt;completeURL() in my workdir.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358227</commentid>
    <comment_count>20</comment_count>
      <attachid>83844</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-25 15:14:08 -0800</bug_when>
    <thetext>Comment on attachment 83844
Patch

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

&gt;&gt; Source/WebCore/fileapi/DOMFileSystemBase.cpp:62
&gt;&gt; +    KURL originURL(ParsedURLString, url.path());
&gt; 
&gt; Note that though I&apos;ve switched to completeURL() below, I haven&apos;t here.  Is there any other URL-parsing code I should be calling? I can&apos;t really guarantee anything about the contents of url.path() (certainly not that it&apos;s the output of KURL::string()).  But passing in a Document and calling completeURL() here is obviously the wrong thing to do.

Yeah, this case is harder.  You can try resolving it against a base URL of &quot;about:blank&quot;.  This is probably also ok for now.  I suspect we&apos;ll need to revisit this line of code when we start deploying the URLString type more widely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358231</commentid>
    <comment_count>21</comment_count>
      <attachid>83889</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-25 15:23:08 -0800</bug_when>
    <thetext>Created attachment 83889
Patch for cq</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359138</commentid>
    <comment_count>22</comment_count>
      <attachid>84078</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-28 10:16:13 -0800</bug_when>
    <thetext>Created attachment 84078
Patch for cq; merged r79778</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359166</commentid>
    <comment_count>23</comment_count>
      <attachid>84078</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-28 10:44:17 -0800</bug_when>
    <thetext>Comment on attachment 84078
Patch for cq; merged r79778

Okiedokes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359320</commentid>
    <comment_count>24</comment_count>
      <attachid>84078</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-28 13:55:32 -0800</bug_when>
    <thetext>Comment on attachment 84078
Patch for cq; merged r79778

Clearing flags on attachment: 84078

Committed r79917: &lt;http://trac.webkit.org/changeset/79917&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359321</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-28 13:55:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359604</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-28 19:28:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/79917 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83014</attachid>
            <date>2011-02-18 14:48:17 -0800</date>
            <delta_ts>2011-02-18 15:27:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54774-20110218144816.patch</filename>
            <type>text/plain</type>
            <size>13907</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg3MzAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwM2IwYTYxZjdkY2Q5YTE4MWM5ODc0
NWFiNDU2ODJkMjcxNThkNGE1Li44YzRiMmYzMGYxNDYxNjYxZGI2MDY5YjVhODIwNDE5YzJkN2Rh
NWU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDItMTggIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUZpbGVT
eXN0ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0Nzc0CisKKyAgICAgICAgQmFzaWMgdGVzdCBmb3IgcmVzb2x2ZUZpbGVTeXN0ZW1VUkkuCisK
KyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9yZXNvbHZlLXVyaS5qczogQWRkZWQu
CisgICAgICAgIChlcnJvckNhbGxiYWNrKToKKyAgICAgICAgKHVyaVRvRW50cnkpOgorICAgICAg
ICAoZW50cnlUb1VSSSk6CisgICAgICAgIChjcmVhdGVUZXN0RmlsZSk6CisgICAgICAgICgpOgor
CiAyMDExLTAyLTE2ICBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhZTU1ZGZk
MjY2NzRjNWU4MjFmYzZjMjgyMWU3NWExZGYwNGFhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMTAgQEAKK09idGFpbmluZyBFbnRyeSBmcm9tIFVSSS4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgdGVzdEZpbGVFbnRyeS5mdWxsUGF0aCBpcyB0ZXN0UmVzb2x2ZWRF
bnRyeS5mdWxsUGF0aAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZl
LXVyaS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGYzZWI1ZDViMmY4N2U3NzAwNzFlZjljYTQzNmY1OWYyZGRiOTBiZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS5o
dG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcmVzb2x2ZS11cmkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9y
ZXNvbHZlLXVyaS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvcmVz
b2x2ZS11cmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhkYzEwMTM1OGVmNjZkMWUzYjlmMzQxYWZlMzlkYmZh
ZmEyNzE4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvdXJjZXMvcmVzb2x2ZS11cmkuanMKQEAgLTAsMCArMSw0MCBAQAoraWYgKHRoaXMuaW1wb3J0
U2NyaXB0cykgeworICAgIGltcG9ydFNjcmlwdHMoJ2ZzLXdvcmtlci1jb21tb24uanMnKTsKKyAg
ICBpbXBvcnRTY3JpcHRzKCdmcy10ZXN0LXV0aWwuanMnKTsKK30KKworZGVzY3JpcHRpb24oIk9i
dGFpbmluZyBFbnRyeSBmcm9tIFVSSS4iKTsKKwordmFyIGZpbGVTeXN0ZW0gPSBudWxsOwordmFy
IHRlc3RGaWxlTmFtZSA9ICd0ZXN0RmlsZUVudHJ5LnR4dCc7Cit2YXIgdGVzdEZpbGVFbnRyeSA9
IG51bGw7Cit2YXIgdGVzdFJlc29sdmVkRW50cnkgPSBudWxsOworCitmdW5jdGlvbiBlcnJvckNh
bGxiYWNrKGVycm9yKSB7CisgICAgdGVzdEZhaWxlZCgiRXJyb3Igb2NjdXJlZDoiICsgZXJyb3Iu
Y29kZSk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHVyaVRvRW50cnkoZW50
cnkpIHsKKyAgICB0ZXN0UmVzb2x2ZWRFbnRyeSA9IGVudHJ5OworICAgIHNob3VsZEJlKCJ0ZXN0
RmlsZUVudHJ5LmZ1bGxQYXRoIiwgInRlc3RSZXNvbHZlZEVudHJ5LmZ1bGxQYXRoIik7CisgICAg
ZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGVudHJ5VG9VUkkoZW50cnkpIHsKKyAgICB0
ZXN0RmlsZUVudHJ5ID0gZW50cnk7CisgICAgcmVzb2x2ZUZpbGVTeXN0ZW1VUkkoZW50cnkudG9V
UkkoKSwgdXJpVG9FbnRyeSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRl
c3RGaWxlKCkgeworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKHRlc3RGaWxlTmFtZSwge2Ny
ZWF0ZTp0cnVlfSwgZW50cnlUb1VSSSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIGZp
bGVTeXN0ZW1DYWxsYmFjayhmcykgeworICAgIGZpbGVTeXN0ZW0gPSBmczsKKyAgICByZW1vdmVB
bGxJbkRpcmVjdG9yeShmaWxlU3lzdGVtLnJvb3QsIGNyZWF0ZVRlc3RGaWxlLCBlcnJvckNhbGxi
YWNrKTsKK30KKwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworcmVxdWVzdEZpbGVTeXN0ZW0o
VEVNUE9SQVJZLCAxMDAsIGZpbGVTeXN0ZW1DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NmViMDRlODJmMGRjNzhi
YjBiNmVmYjJlNGE3MzQ5ZWQ1YzJhNGFkLi43YjlmYzM2Mzc5YjU1OGI2OTliNWNlNDFmNTc2ZTg0
ZWEwOGNmYzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDItMTggIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0u
cmVzb2x2ZUZpbGVTeXN0ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU0Nzc0CisKKyAgICAgICAgU2VlIGh0dHA6Ly9kZXYudzMub3JnLzIwMDkv
ZGFwL2ZpbGUtc3lzdGVtL2ZpbGUtZGlyLXN5cy5odG1sI21ldGhvZHMKKyAgICAgICAgZm9yIHRo
ZSBzcGVjIGltcGxlbWVudGVkIGJ5IHRoaXMgcGF0Y2guCisKKyAgICAgICAgVGVzdDogZmFzdC9m
aWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5
c3RlbUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNr
RmlsZVN5c3RlbVVSTCk6CisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b2x2ZVVSSUNhbGxiYWNrczo6UmVzb2x2ZVVSSUNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpkaWRPcGVuRmlsZVN5c3RlbSk6CisgICAgICAgICogZmls
ZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZXNvbHZlRmlsZVN5c3RlbVVSSSk6Cisg
ICAgICAgICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6
CisKIDIwMTEtMDItMTYgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9raWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAppbmRleCBjNDYyYzNjZTA4M2FlZWEyMWJlMmZhZmQ4ZGZj
ZDJjOWVjNmVkNGRhLi45ZTM4MzlmYjc3YjRkY2ZjZjcxODEwNDE5YmJlMjAxMmQ5NzljOTA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcApAQCAtNDks
NiArNDksMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBjaGFyIERPTUZpbGVT
eXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhTdHJpbmdbXSA9ICJwZXJzaXN0ZW50IjsKK2NvbnN0
IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQYXRoU3RyaW5nW10gPSAidGVtcG9y
YXJ5IjsKKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0
IEtVUkwmIHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcmIGZpbGVQYXRo
KQoreworICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0
aCgpKTsKKyAgICBTdHJpbmcgcGF0aCA9IG9yaWdpblVSTC5wYXRoKCk7CisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpIHx8ICFwYXRoWzBdID09ICcvJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKKworICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoa1Rl
bXBvcmFyeVBhdGhTdHJpbmcpKSB7CisgICAgICAgIHR5cGUgPSBBc3luY0ZpbGVTeXN0ZW06OlRl
bXBvcmFyeTsKKyAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHNpemVvZihrVGVtcG9yYXJ5
UGF0aFN0cmluZykgLSAxKTsKKyAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aChrUGVyc2lz
dGVudFBhdGhTdHJpbmcpKSB7CisgICAgICAgIHR5cGUgPSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNp
c3RlbnQ7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhzaXplb2Yoa1BlcnNpc3RlbnRQ
YXRoU3RyaW5nKSAtIDEpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgIXBhdGhbMF0gPT0gJy8nKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBmaWxlUGF0aC5zd2FwKHBhdGgpOworICAgIHJldHVybiB0cnVlOworfQor
CiBET01GaWxlU3lzdGVtQmFzZTo6RE9NRmlsZVN5c3RlbUJhc2UoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQogICAgIDogbV9u
YW1lKG5hbWUpCiAgICAgLCBtX2FzeW5jRmlsZVN5c3RlbShhc3luY0ZpbGVTeXN0ZW0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKaW5kZXggNjZmMTMzMWEyMmMw
NTVhZGNmMmYyYTY4ZGIwZWEzMDBkZmNhNGRmMy4uZDdhYWRjMzMwZWMxYzBmYWEzZTQ1MmYyNTIz
YjNjM2YyN2E2YTc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJh
c2UuaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CiBjbGFzcyBFbnRy
eUJhc2U7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogY2xhc3MgRXJyb3JDYWxsYmFjazsKK2NsYXNz
IEtVUkw7CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwogY2xhc3MgVm9pZENhbGxiYWNrOwogCkBA
IC01OSw2ICs2MCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkRPTUZpbGVTeXN0
ZW1CYXNlKCk7CiAKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrUGVyc2lzdGVudFBhdGhTdHJpbmdb
XTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrVGVtcG9yYXJ5UGF0aFN0cmluZ1tdOworICAgIHN0
YXRpYyBib29sIGNyYWNrRmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiwgQXN5bmNGaWxlU3lzdGVt
OjpUeXBlJiwgU3RyaW5nJiBmaWxlUGF0aCk7CisKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBBc3luY0ZpbGVTeXN0ZW0qIGFzeW5jRmlsZVN5
c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNGaWxlU3lzdGVtLmdldCgpOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwCmluZGV4IDk2NjMz
N2IxNzdkZmYxNWViYTM2M2ZhYTZmZjZjZWZkNDNhNDZhZDcuLmJiMjQ0MzE2YjdjNWUzYTA2Nzk2
NWQwYWRhNTlmNzVmNzhlYTBjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
U3lzdGVtQ2FsbGJhY2tzLmNwcApAQCAtMTkyLDYgKzE5MiwzMiBAQCB2b2lkIEZpbGVTeXN0ZW1D
YWxsYmFja3M6OmRpZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0
cjxBc3luYwogICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7CiB9CiAKKy8vIFJlc29sdmVV
UklDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworUGFzc093blB0cjxSZXNvbHZlVVJJQ2FsbGJhY2tzPiBSZXNvbHZlVVJJ
Q2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlc29sdmVVUklDYWxsYmFja3Moc3VjY2Vz
c0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBmaWxlUGF0
aCkpOworfQorCitSZXNvbHZlVVJJQ2FsbGJhY2tzOjpSZXNvbHZlVVJJQ2FsbGJhY2tzKFBhc3NS
ZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJv
ckNhbGxiYWNrKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQorICAg
ICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX2ZpbGVQYXRoKGZp
bGVQYXRoKQoreworfQorCit2b2lkIFJlc29sdmVVUklDYWxsYmFja3M6OmRpZE9wZW5GaWxlU3lz
dGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5j
RmlsZVN5c3RlbSkKK3sKKyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgQVNT
RVJUKGFzeW5jRmlsZVN5c3RlbSk7CisgICAgICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxl
U3lzdGVtID0gRE9NRmlsZVN5c3RlbTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5n
ZXQoKSwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtLmxlYWtQdHIoKSk7CisgICAgICAgIGZpbGVTeXN0
ZW0tPmdldEZpbGUoZmlsZVN5c3RlbS0+cm9vdCgpLmdldCgpLCBtX2ZpbGVQYXRoLCAwLCBtX3N1
Y2Nlc3NDYWxsYmFjaywgbV9lcnJvckNhbGxiYWNrKTsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNsZWFyKCk7CisgICAgfQorICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7
Cit9CisKIC8vIE1ldGFkYXRhQ2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUGFzc093blB0cjxNZXRhZGF0YUNhbGxi
YWNrcz4gTWV0YWRhdGFDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAppbmRl
eCA4MzAwMGMyZGQzYzFmODM3MWRiYzM3MjM5NTE1YWJjZjExYWYyMTk1Li4wMzQzZjMzYTdjNzBl
MjE0YmI3MDMyZTJiMTllOWE0ODI2ZjNlOWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVTeXN0ZW1DYWxsYmFja3MuaApAQCAtMTIzLDYgKzEyMywxOCBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiB9OwogCitjbGFzcyBSZXNvbHZlVVJJQ2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxs
YmFja3NCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSZXNvbHZlVVJJQ2Fs
bGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CisKK3ByaXZhdGU6CisgICAgUmVzb2x2
ZVVSSUNhbGxiYWNrcyhQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCk7CisgICAgUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOworICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cisg
ICAgU3RyaW5nIG1fZmlsZVBhdGg7Cit9OworCiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrcyA6IHB1
YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8TWV0YWRhdGFDYWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAppbmRleCBlZDZkMDU3MWY0ZmQ5NDAwZmNmZjU1MzhjNjdiYjE1YjJkM2I2Nzc3Li5mM2EyMWUy
NjVjMWRlZjk5MWE2NWMzODA4NWU2YTQ0ZWZjMjYwNjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCkBAIC05OSw2ICs5OSw4IEBACiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogI2luY2x1
ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJET01GaWxlU3lzdGVtQmFzZS5oIgorI2luY2x1ZGUgIkVudHJ5Q2FsbGJhY2suaCIKICNp
bmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbUNhbGxiYWNrLmgiCkBAIC03NTMsNiArNzU1LDI4IEBAIHZvaWQgRE9NV2lu
ZG93OjpyZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQ
dHI8RmlsZVN5c3RlCiAgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0ZW0oKS5yZXF1
ZXN0RmlsZVN5c3RlbShkb2N1bWVudCwgZmlsZVN5c3RlbVR5cGUsIHNpemUsIEZpbGVTeXN0ZW1D
YWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGRvY3VtZW50
KSwgZmFsc2UpOwogfQogCit2b2lkIERPTVdpbmRvdzo6cmVzb2x2ZUZpbGVTeXN0ZW1VUkkoY29u
c3QgU3RyaW5nJiB1cmksIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIUFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKSB8
fCAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0ZpbGVTeXN0ZW0oKSkgewor
ICAgICAgICBET01GaWxlU3lzdGVtOjpzY2hlZHVsZUNhbGxiYWNrKGRvY3VtZW50LCBlcnJvckNh
bGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNFQ1VSSVRZX0VSUikpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgS1VSTCBwYXJzZWRVUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmkpOworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBmaWxl
UGF0aDsKKyAgICBpZiAoIXBhcnNlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1CYXNl
OjpjcmFja0ZpbGVTeXN0ZW1VUkwocGFyc2VkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKKyAgICAg
ICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFj
aywgRmlsZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTWU5UQVhfRVJSKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBMb2NhbEZpbGVTeXN0ZW06OmxvY2FsRmlsZVN5c3RlbSgpLnJl
YWRGaWxlU3lzdGVtKGRvY3VtZW50LCB0eXBlLCAwLCBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVh
dGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBkb2N1bWVudCwgZmlsZVBhdGgpKTsK
K30KKwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlRFTVBPUkFS
WSkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSksIGVudW1f
bWlzbWF0Y2gpOwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlBF
UlNJU1RFTlQpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50
KSwgZW51bV9taXNtYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDA1ODE2NWZi
OGRiYWVhOTk5MTY5MDVkOWI0ZGE4ODY4NDEwYzgyMmYuLjJmODI3MzA5Y2FjODhjYmViY2QyNzQz
NmQ3Y2E0OTQ2YzUwY2M2YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDUsNiArNDUs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKICAg
ICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEVudHJ5Q2Fs
bGJhY2s7CiAgICAgY2xhc3MgRXJyb3JDYWxsYmFjazsKICAgICBjbGFzcyBFdmVudExpc3RlbmVy
OwogICAgIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKQEAgLTM4Nyw2ICszODgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBQRVJTSVNURU5ULAogICAgICAgICB9OwogICAg
ICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFz
c1JlZlB0cjxGaWxlU3lzdGVtQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsK
KyAgICAgICAgdm9pZCByZXNvbHZlRmlsZVN5c3RlbVVSSShjb25zdCBTdHJpbmcmLCBQYXNzUmVm
UHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICNlbmRpZgog
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwK
aW5kZXggZmQ5YmNlMDExNDJiNGJlNTAxODEzMjgyMzQ2ZDM3NTdkNTFhYTYyMS4uMjVjZDNmNDc1
OGUxYjJhMzU4MjJjNjEzNmUwZDA1MWU4ZDg0MzRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmlkbApAQCAtMTk1LDYgKzE5NSw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBURU1QT1JBUlkgPSAwOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBQRVJTSVNURU5UID0gMTsKICAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0g
dm9pZCByZXF1ZXN0RmlsZVN5c3RlbShpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbiBsb25nIGxv
bmcgc2l6ZSwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRmlsZVN5c3RlbUNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNh
bGxiYWNrKTsKKyAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXNv
bHZlRmlsZVN5c3RlbVVSSShpbiBET01TdHJpbmcgdXJpLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFs
XSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0g
RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKIAogICAgICAgICBhdHRyaWJ1dGUgW0VuYWJs
ZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gRmxhZ3NDb25zdHJ1Y3RvciBGbGFnczsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83025</attachid>
            <date>2011-02-18 15:27:05 -0800</date>
            <delta_ts>2011-02-22 14:50:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54774-20110218152704.patch</filename>
            <type>text/plain</type>
            <size>14003</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg3MzAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwM2IwYTYxZjdkY2Q5YTE4MWM5ODc0
NWFiNDU2ODJkMjcxNThkNGE1Li44YzRiMmYzMGYxNDYxNjYxZGI2MDY5YjVhODIwNDE5YzJkN2Rh
NWU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDItMTggIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUZpbGVT
eXN0ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0Nzc0CisKKyAgICAgICAgQmFzaWMgdGVzdCBmb3IgcmVzb2x2ZUZpbGVTeXN0ZW1VUkkuCisK
KyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9yZXNvbHZlLXVyaS5qczogQWRkZWQu
CisgICAgICAgIChlcnJvckNhbGxiYWNrKToKKyAgICAgICAgKHVyaVRvRW50cnkpOgorICAgICAg
ICAoZW50cnlUb1VSSSk6CisgICAgICAgIChjcmVhdGVUZXN0RmlsZSk6CisgICAgICAgICgpOgor
CiAyMDExLTAyLTE2ICBDYXJvbCBTemFibyAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhZTU1ZGZk
MjY2NzRjNWU4MjFmYzZjMjgyMWU3NWExZGYwNGFhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMTAgQEAKK09idGFpbmluZyBFbnRyeSBmcm9tIFVSSS4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgdGVzdEZpbGVFbnRyeS5mdWxsUGF0aCBpcyB0ZXN0UmVzb2x2ZWRF
bnRyeS5mdWxsUGF0aAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZl
LXVyaS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGYzZWI1ZDViMmY4N2U3NzAwNzFlZjljYTQzNmY1OWYyZGRiOTBiZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS5o
dG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcmVzb2x2ZS11cmkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9y
ZXNvbHZlLXVyaS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvcmVz
b2x2ZS11cmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhkYzEwMTM1OGVmNjZkMWUzYjlmMzQxYWZlMzlkYmZh
ZmEyNzE4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvdXJjZXMvcmVzb2x2ZS11cmkuanMKQEAgLTAsMCArMSw0MCBAQAoraWYgKHRoaXMuaW1wb3J0
U2NyaXB0cykgeworICAgIGltcG9ydFNjcmlwdHMoJ2ZzLXdvcmtlci1jb21tb24uanMnKTsKKyAg
ICBpbXBvcnRTY3JpcHRzKCdmcy10ZXN0LXV0aWwuanMnKTsKK30KKworZGVzY3JpcHRpb24oIk9i
dGFpbmluZyBFbnRyeSBmcm9tIFVSSS4iKTsKKwordmFyIGZpbGVTeXN0ZW0gPSBudWxsOwordmFy
IHRlc3RGaWxlTmFtZSA9ICd0ZXN0RmlsZUVudHJ5LnR4dCc7Cit2YXIgdGVzdEZpbGVFbnRyeSA9
IG51bGw7Cit2YXIgdGVzdFJlc29sdmVkRW50cnkgPSBudWxsOworCitmdW5jdGlvbiBlcnJvckNh
bGxiYWNrKGVycm9yKSB7CisgICAgdGVzdEZhaWxlZCgiRXJyb3Igb2NjdXJlZDoiICsgZXJyb3Iu
Y29kZSk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHVyaVRvRW50cnkoZW50
cnkpIHsKKyAgICB0ZXN0UmVzb2x2ZWRFbnRyeSA9IGVudHJ5OworICAgIHNob3VsZEJlKCJ0ZXN0
RmlsZUVudHJ5LmZ1bGxQYXRoIiwgInRlc3RSZXNvbHZlZEVudHJ5LmZ1bGxQYXRoIik7CisgICAg
ZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGVudHJ5VG9VUkkoZW50cnkpIHsKKyAgICB0
ZXN0RmlsZUVudHJ5ID0gZW50cnk7CisgICAgcmVzb2x2ZUZpbGVTeXN0ZW1VUkkoZW50cnkudG9V
UkkoKSwgdXJpVG9FbnRyeSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRl
c3RGaWxlKCkgeworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKHRlc3RGaWxlTmFtZSwge2Ny
ZWF0ZTp0cnVlfSwgZW50cnlUb1VSSSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIGZp
bGVTeXN0ZW1DYWxsYmFjayhmcykgeworICAgIGZpbGVTeXN0ZW0gPSBmczsKKyAgICByZW1vdmVB
bGxJbkRpcmVjdG9yeShmaWxlU3lzdGVtLnJvb3QsIGNyZWF0ZVRlc3RGaWxlLCBlcnJvckNhbGxi
YWNrKTsKK30KKwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworcmVxdWVzdEZpbGVTeXN0ZW0o
VEVNUE9SQVJZLCAxMDAsIGZpbGVTeXN0ZW1DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NmViMDRlODJmMGRjNzhi
YjBiNmVmYjJlNGE3MzQ5ZWQ1YzJhNGFkLi43YjlmYzM2Mzc5YjU1OGI2OTliNWNlNDFmNTc2ZTg0
ZWEwOGNmYzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDItMTggIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0u
cmVzb2x2ZUZpbGVTeXN0ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU0Nzc0CisKKyAgICAgICAgU2VlIGh0dHA6Ly9kZXYudzMub3JnLzIwMDkv
ZGFwL2ZpbGUtc3lzdGVtL2ZpbGUtZGlyLXN5cy5odG1sI21ldGhvZHMKKyAgICAgICAgZm9yIHRo
ZSBzcGVjIGltcGxlbWVudGVkIGJ5IHRoaXMgcGF0Y2guCisKKyAgICAgICAgVGVzdDogZmFzdC9m
aWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5
c3RlbUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNr
RmlsZVN5c3RlbVVSTCk6CisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b2x2ZVVSSUNhbGxiYWNrczo6UmVzb2x2ZVVSSUNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpkaWRPcGVuRmlsZVN5c3RlbSk6CisgICAgICAgICogZmls
ZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZXNvbHZlRmlsZVN5c3RlbVVSSSk6Cisg
ICAgICAgICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6
CisKIDIwMTEtMDItMTYgIENhcm9sIFN6YWJvICA8Y2Fyb2wuc3phYm9Abm9raWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAppbmRleCBjNDYyYzNjZTA4M2FlZWEyMWJlMmZhZmQ4ZGZj
ZDJjOWVjNmVkNGRhLi45ZTM4MzlmYjc3YjRkY2ZjZjcxODEwNDE5YmJlMjAxMmQ5NzljOTA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcApAQCAtNDks
NiArNDksMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBjaGFyIERPTUZpbGVT
eXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhTdHJpbmdbXSA9ICJwZXJzaXN0ZW50IjsKK2NvbnN0
IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQYXRoU3RyaW5nW10gPSAidGVtcG9y
YXJ5IjsKKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0
IEtVUkwmIHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcmIGZpbGVQYXRo
KQoreworICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0
aCgpKTsKKyAgICBTdHJpbmcgcGF0aCA9IG9yaWdpblVSTC5wYXRoKCk7CisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpIHx8ICFwYXRoWzBdID09ICcvJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKKworICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoa1Rl
bXBvcmFyeVBhdGhTdHJpbmcpKSB7CisgICAgICAgIHR5cGUgPSBBc3luY0ZpbGVTeXN0ZW06OlRl
bXBvcmFyeTsKKyAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHNpemVvZihrVGVtcG9yYXJ5
UGF0aFN0cmluZykgLSAxKTsKKyAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aChrUGVyc2lz
dGVudFBhdGhTdHJpbmcpKSB7CisgICAgICAgIHR5cGUgPSBBc3luY0ZpbGVTeXN0ZW06OlBlcnNp
c3RlbnQ7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhzaXplb2Yoa1BlcnNpc3RlbnRQ
YXRoU3RyaW5nKSAtIDEpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgIXBhdGhbMF0gPT0gJy8nKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBmaWxlUGF0aC5zd2FwKHBhdGgpOworICAgIHJldHVybiB0cnVlOworfQor
CiBET01GaWxlU3lzdGVtQmFzZTo6RE9NRmlsZVN5c3RlbUJhc2UoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQogICAgIDogbV9u
YW1lKG5hbWUpCiAgICAgLCBtX2FzeW5jRmlsZVN5c3RlbShhc3luY0ZpbGVTeXN0ZW0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKaW5kZXggNjZmMTMzMWEyMmMw
NTVhZGNmMmYyYTY4ZGIwZWEzMDBkZmNhNGRmMy4uZDdhYWRjMzMwZWMxYzBmYWEzZTQ1MmYyNTIz
YjNjM2YyN2E2YTc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxl
U3lzdGVtQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJh
c2UuaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CiBjbGFzcyBFbnRy
eUJhc2U7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogY2xhc3MgRXJyb3JDYWxsYmFjazsKK2NsYXNz
IEtVUkw7CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwogY2xhc3MgVm9pZENhbGxiYWNrOwogCkBA
IC01OSw2ICs2MCwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkRPTUZpbGVTeXN0
ZW1CYXNlKCk7CiAKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrUGVyc2lzdGVudFBhdGhTdHJpbmdb
XTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrVGVtcG9yYXJ5UGF0aFN0cmluZ1tdOworICAgIHN0
YXRpYyBib29sIGNyYWNrRmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiwgQXN5bmNGaWxlU3lzdGVt
OjpUeXBlJiwgU3RyaW5nJiBmaWxlUGF0aCk7CisKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBBc3luY0ZpbGVTeXN0ZW0qIGFzeW5jRmlsZVN5
c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNGaWxlU3lzdGVtLmdldCgpOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwCmluZGV4IDk2NjMz
N2IxNzdkZmYxNWViYTM2M2ZhYTZmZjZjZWZkNDNhNDZhZDcuLmJiMjQ0MzE2YjdjNWUzYTA2Nzk2
NWQwYWRhNTlmNzVmNzhlYTBjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
U3lzdGVtQ2FsbGJhY2tzLmNwcApAQCAtMTkyLDYgKzE5MiwzMiBAQCB2b2lkIEZpbGVTeXN0ZW1D
YWxsYmFja3M6OmRpZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0
cjxBc3luYwogICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7CiB9CiAKKy8vIFJlc29sdmVV
UklDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworUGFzc093blB0cjxSZXNvbHZlVVJJQ2FsbGJhY2tzPiBSZXNvbHZlVVJJ
Q2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlc29sdmVVUklDYWxsYmFja3Moc3VjY2Vz
c0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBmaWxlUGF0
aCkpOworfQorCitSZXNvbHZlVVJJQ2FsbGJhY2tzOjpSZXNvbHZlVVJJQ2FsbGJhY2tzKFBhc3NS
ZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJv
ckNhbGxiYWNrKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQorICAg
ICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX2ZpbGVQYXRoKGZp
bGVQYXRoKQoreworfQorCit2b2lkIFJlc29sdmVVUklDYWxsYmFja3M6OmRpZE9wZW5GaWxlU3lz
dGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGFzeW5j
RmlsZVN5c3RlbSkKK3sKKyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgQVNT
RVJUKGFzeW5jRmlsZVN5c3RlbSk7CisgICAgICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxl
U3lzdGVtID0gRE9NRmlsZVN5c3RlbTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5n
ZXQoKSwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtLmxlYWtQdHIoKSk7CisgICAgICAgIGZpbGVTeXN0
ZW0tPmdldEZpbGUoZmlsZVN5c3RlbS0+cm9vdCgpLmdldCgpLCBtX2ZpbGVQYXRoLCAwLCBtX3N1
Y2Nlc3NDYWxsYmFjaywgbV9lcnJvckNhbGxiYWNrKTsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNsZWFyKCk7CisgICAgfQorICAgIG1fc3VjY2Vzc0NhbGxiYWNrLmNsZWFyKCk7
Cit9CisKIC8vIE1ldGFkYXRhQ2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUGFzc093blB0cjxNZXRhZGF0YUNhbGxi
YWNrcz4gTWV0YWRhdGFDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAppbmRl
eCA4MzAwMGMyZGQzYzFmODM3MWRiYzM3MjM5NTE1YWJjZjExYWYyMTk1Li4wMzQzZjMzYTdjNzBl
MjE0YmI3MDMyZTJiMTllOWE0ODI2ZjNlOWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVTeXN0ZW1DYWxsYmFja3MuaApAQCAtMTIzLDYgKzEyMywxOCBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiB9OwogCitjbGFzcyBSZXNvbHZlVVJJQ2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxs
YmFja3NCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSZXNvbHZlVVJJQ2Fs
bGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CisKK3ByaXZhdGU6CisgICAgUmVzb2x2
ZVVSSUNhbGxiYWNrcyhQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCk7CisgICAgUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOworICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cisg
ICAgU3RyaW5nIG1fZmlsZVBhdGg7Cit9OworCiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrcyA6IHB1
YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8TWV0YWRhdGFDYWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAppbmRleCBlZDZkMDU3MWY0ZmQ5NDAwZmNmZjU1MzhjNjdiYjE1YjJkM2I2Nzc3Li5mOWViZWZk
NGIyYmEwYmQ1Y2FmNDQzMmFmNmM4MmFmMzY5ODM5MTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCkBAIC05OSw2ICs5OSw4IEBACiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogI2luY2x1
ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJET01GaWxlU3lzdGVtQmFzZS5oIgorI2luY2x1ZGUgIkVudHJ5Q2FsbGJhY2suaCIKICNp
bmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVk
ZSAiRmlsZVN5c3RlbUNhbGxiYWNrLmgiCkBAIC03NTMsNiArNzU1LDI5IEBAIHZvaWQgRE9NV2lu
ZG93OjpyZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQ
dHI8RmlsZVN5c3RlCiAgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0ZW0oKS5yZXF1
ZXN0RmlsZVN5c3RlbShkb2N1bWVudCwgZmlsZVN5c3RlbVR5cGUsIHNpemUsIEZpbGVTeXN0ZW1D
YWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGRvY3VtZW50
KSwgZmFsc2UpOwogfQogCit2b2lkIERPTVdpbmRvdzo6cmVzb2x2ZUZpbGVTeXN0ZW1VUkkoY29u
c3QgU3RyaW5nJiB1cmksIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4gPSBkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBLVVJMIHBhcnNlZFVSTChQYXJzZWRVUkxTdHJp
bmcsIHVyaSk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkgfHwgIXNl
Y3VyaXR5T3JpZ2luLT5jYW5BY2Nlc3NGaWxlU3lzdGVtKCkgfHwgIXNlY3VyaXR5T3JpZ2luLT5j
YW5SZXF1ZXN0KHBhcnNlZFVSTCkpIHsKKyAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVD
YWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9yOjpjcmVhdGUoRmlsZUVy
cm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFzeW5j
RmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBmaWxlUGF0aDsKKyAgICBpZiAoIXBh
cnNlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1V
UkwocGFyc2VkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKKyAgICAgICAgRE9NRmlsZVN5c3RlbTo6
c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9yOjpjcmVh
dGUoRmlsZUVycm9yOjpTWU5UQVhfRVJSKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBMb2NhbEZpbGVTeXN0ZW06OmxvY2FsRmlsZVN5c3RlbSgpLnJlYWRGaWxlU3lzdGVtKGRvY3Vt
ZW50LCB0eXBlLCAwLCBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNr
LCBlcnJvckNhbGxiYWNrLCBkb2N1bWVudCwgZmlsZVBhdGgpKTsKK30KKwogQ09NUElMRV9BU1NF
UlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlRFTVBPUkFSWSkgPT0gc3RhdGljX2Nhc3Q8
aW50PihBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSksIGVudW1fbWlzbWF0Y2gpOwogQ09NUElM
RV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlBFUlNJU1RFTlQpID09IHN0YXRp
Y19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KSwgZW51bV9taXNtYXRjaCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDA1ODE2NWZiOGRiYWVhOTk5MTY5MDVkOWI0
ZGE4ODY4NDEwYzgyMmYuLjJmODI3MzA5Y2FjODhjYmViY2QyNzQzNmQ3Y2E0OTQ2YzUwY2M2YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKICAgICBjbGFzcyBEb2N1bWVudDsK
ICAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CiAgICAgY2xhc3Mg
RXJyb3JDYWxsYmFjazsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEZpbGVT
eXN0ZW1DYWxsYmFjazsKQEAgLTM4Nyw2ICszODgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICBQRVJTSVNURU5ULAogICAgICAgICB9OwogICAgICAgICB2b2lkIHJlcXVlc3RG
aWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc1JlZlB0cjxGaWxlU3lzdGVt
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICAgICAgdm9pZCByZXNv
bHZlRmlsZVN5c3RlbVVSSShjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggZmQ5YmNlMDExNDJi
NGJlNTAxODEzMjgyMzQ2ZDM3NTdkNTFhYTYyMS4uMjVjZDNmNDc1OGUxYjJhMzU4MjJjNjEzNmUw
ZDA1MWU4ZDg0MzRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtMTk1LDYgKzE5
NSw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBURU1Q
T1JBUlkgPSAwOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQRVJTSVNURU5UID0gMTsK
ICAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXF1ZXN0RmlsZVN5
c3RlbShpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbiBsb25nIGxvbmcgc2l6ZSwgaW4gW0NhbGxi
YWNrLCBPcHRpb25hbF0gRmlsZVN5c3RlbUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW0Nh
bGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAg
W0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXNvbHZlRmlsZVN5c3RlbVVSSShp
biBET01TdHJpbmcgdXJpLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBFbnRyeUNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJv
ckNhbGxiYWNrKTsKIAogICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5
c3RlbV0gRmxhZ3NDb25zdHJ1Y3RvciBGbGFnczsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83397</attachid>
            <date>2011-02-22 14:50:04 -0800</date>
            <delta_ts>2011-02-22 15:54:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54774-20110222145003.patch</filename>
            <type>text/plain</type>
            <size>21417</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYWI1MDJlZTFjMWMwNmUxYTgxMDA2OGMwMGIxMmI4MjBhOWI5ODUzLi5jYTA2NzM2
MWFhNDUzMzYwMmMwNDkwOGEwZjJkMTVjNTQ1MzkwNzE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDItMTggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVu
dCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUZpbGVTeXN0ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Nzc0CisKKyAgICAgICAgVGVzdHMgZm9y
IHJlc29sdmVGaWxlU3lzdGVtVVJJLgorCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc29s
dmUtdXJpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jl
c29sdmUtdXJpLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9zY3JpcHQt
dGVzdHMvcmVzb2x2ZS11cmkuanM6IEFkZGVkLgorICAgICAgICAoZXhwZWN0ZWRBbmRSdW5OZXh0
KToKKyAgICAgICAgKGVycm9yQ2FsbGJhY2spOgorICAgICAgICAoY3JlYXRlVGVzdEZpbGUpOgor
ICAgICAgICAoKToKKyAgICAgICAgKGFzc2VydElzRGlyZWN0b3J5KToKKyAgICAgICAgKGFzc2Vy
dElzRmlsZSk6CisgICAgICAgIChydW5CYXNpY1Rlc3QpOgorICAgICAgICAocnVuSGFuZG1hZGVV
UkkpOgorICAgICAgICAocnVuQm9ndXNVUkkpOgorICAgICAgICAocnVuV3JvbmdQcm90b2NvbCk6
CisgICAgICAgIChydW5Ob3RFbm91Z2hTbGFzaGVzKToKKyAgICAgICAgKHJ1bk5vdEVub3VnaFNs
YXNoZXMyKToKKyAgICAgICAgKHJ1blVzZUJhY2tTbGFzaGVzLik6CisgICAgICAgIChydW5Vc2VC
YWNrU2xhc2hlcyk6CisgICAgICAgIChydW5EaXJlY3RvcnkuKToKKyAgICAgICAgKHJ1bkRpcmVj
dG9yeSk6CisgICAgICAgIChydW5XaXRoVHJhaWxpbmdTbGFzaC4pOgorICAgICAgICAocnVuV2l0
aFRyYWlsaW5nU2xhc2gpOgorICAgICAgICAocnVuTmV4dFRlc3QpOgorICAgICAgICAoY2xlYW51
cEFuZFJ1bk5leHQpOgorICAgICAgICAoZmlsZVN5c3RlbUNhbGxiYWNrKToKKyAgICAgICAgKHZh
cik6CisKIDIwMTEtMDItMTcgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgogCiAgICAgICAgIENvbnRpbnVlIGltcG9ydGluZyBHVEsrIHJlc3VsdHMgZm9yIHRoZSBNb3pp
bGxhIHRhYmxlIHRlc3RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc29sdmUtdXJpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvbHZlLXVyaS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY0YzZjNjg1ZDNkNTgzMGVhNjlk
OTg4ZjU4M2JmYTFmZGViNzZjYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNiBAQAorVGVz
dHMgdXNpbmcgcmVzb2x2ZUZpbGVTeXN0ZW1VUkkgdG8gb2J0YWluIGFuIEVudHJ5IGZyb20gYSBV
UkkKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyogUmVzb2x2aW5nIGEgZ2VuZXJh
dGVkIFVSSS4KK1BBU1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNGaWxlIGlz
IHRydWUKKyogUmVzb2x2aW5nIHRlc3QgZmlsZSBieSBoYW5kCitQQVNTIGV4cGVjdGVkUGF0aCBp
cyBhY3R1YWxQYXRoCitQQVNTIGlzRmlsZSBpcyB0cnVlCisqIFJlc29sdmluZyBhIGNvbXBsZXRl
bHkgYm9ndXMgVVJJLgorUEFTUyAKKyogUmVzb2x2aW5nIGEgVVJJIHdpdGggdGhlIHdyb25nIHBy
b3RvY29sCitQQVNTIAorKiBSZXNvbHZpbmcgYSBVUkkgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHR5
cGUgYW5kIGZpbGUKK1BBU1MgCisqIFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdl
ZW4gcHJvdG9jb2wgYW5kIHR5cGUKK1BBU1MgCisqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGJhY2tz
bGFzaGVzCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRmlsZSBpcyB0
cnVlCisqIFJlc29sdmUgYSBkaXJlY3RvcnkKK1BBU1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBh
dGgKK1BBU1MgaXNEaXJlY3RvcnkgaXMgdHJ1ZQorKiBSZXNvbHZlIGEgcGF0aCB1c2luZyBhIHRy
YWlsaW5nIHNsYXNoCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRGly
ZWN0b3J5IGlzIHRydWUKKyogUmVzb2x2aW5nIGEgcGVyc2lzdGVudCBVUkkuCitQQVNTIGV4cGVj
dGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRGlyZWN0b3J5IGlzIHRydWUKK0ZpbmlzaGVk
IHJ1bm5pbmcgdGVzdHMuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29s
dmUtdXJpLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNmVhYmYxMWE5NDZkMmFlNTRjOTUwNjdhMWE2ZTg2ZTJhMDU5Y2Q1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJp
Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9mcy10ZXN0LXV0aWwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0
LXRlc3RzL3Jlc29sdmUtdXJpLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Njcmlw
dC10ZXN0cy9yZXNvbHZlLXVyaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzViNGI4MjZhMTgwZWYxMjEzNDg0
MmIxMGYxMmU0NjQ1YTIxMDMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcwpAQCAtMCwwICsxLDE3MiBAQAor
ZGVzY3JpcHRpb24oIlRlc3RzIHVzaW5nIHJlc29sdmVGaWxlU3lzdGVtVVJJIHRvIG9idGFpbiBh
biBFbnRyeSBmcm9tIGEgVVJJIik7CisKK3ZhciB0ZXN0RmlsZU5hbWUgPSAnL3Rlc3RGaWxlJzsK
K3ZhciBmaWxlU3lzdGVtID0gbnVsbDsKK3ZhciBleHBlY3RlZEFuZFJ1bk5leHQgPSBmdW5jdGlv
bigpIHsgdGVzdFBhc3NlZCgiIik7IGNsZWFudXBBbmRSdW5OZXh0KCk7IH07CisKK3ZhciBleHBl
Y3RlZFBhdGggPSBudWxsOwordmFyIGFjdHVhbFBhdGggPSBudWxsOworCitmdW5jdGlvbiBlcnJv
ckNhbGxiYWNrKGVycm9yKSB7CisgICAgaWYgKGVycm9yICYmIGVycm9yLmNvZGUpCisgICAgICAg
IGRlYnVnKCJFcnJvciBvY2N1cnJlZDogIiArIGVycm9yLmNvZGUpOworICAgIHRlc3RGYWlsZWQo
IkJhaWxpbmcgb3V0IGVhcmx5Iik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZVRlc3RGaWxlKGNhbGxiYWNrKSB7CisgICAgZmlsZVN5c3RlbS5yb290LmdldEZpbGUo
dGVzdEZpbGVOYW1lLCB7Y3JlYXRlOnRydWV9LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit9
CisKK2Z1bmN0aW9uIGFzc2VydFBhdGhzTWF0Y2goZXhwZWN0ZWQsIGFjdHVhbCkgeworICAgIGV4
cGVjdGVkUGF0aCA9IGV4cGVjdGVkOworICAgIGFjdHVhbFBhdGggPSBhY3R1YWw7CisgICAgc2hv
dWxkQmUoImV4cGVjdGVkUGF0aCIsICJhY3R1YWxQYXRoIik7Cit9CisKK3ZhciBpc0RpcmVjdG9y
eSA9IGZhbHNlOworZnVuY3Rpb24gYXNzZXJ0SXNEaXJlY3RvcnkoZW50cnkpIHsKKyAgICBpc0Rp
cmVjdG9yeSA9IGVudHJ5LmlzRGlyZWN0b3J5OworICAgIHNob3VsZEJlVHJ1ZSgiaXNEaXJlY3Rv
cnkiKTsKK30KKwordmFyIGlzRmlsZSA9IGZhbHNlOworZnVuY3Rpb24gYXNzZXJ0SXNGaWxlKGVu
dHJ5KSB7CisgICAgaXNGaWxlID0gZW50cnkuaXNGaWxlOworICAgIHNob3VsZEJlVHJ1ZSgiaXNG
aWxlIik7Cit9CisKKy8vIFRlc3QgYm9keSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBydW5CYXNpY1Rlc3Qo
KSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgZ2VuZXJhdGVkIFVSSS4iKTsKKyAgICBjcmVh
dGVUZXN0RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlRmlsZVN5c3RlbVVS
SShlbnRyeS50b1VSSSgpLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBhc3NlcnRQYXRoc01h
dGNoKGVudHJ5LmZ1bGxQYXRoLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRmls
ZShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAgIH0sIGVycm9y
Q2FsbGJhY2spOworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5IYW5kbWFkZVVSSSgpIHsKKyAg
ICBkZWJ1ZygiKiBSZXNvbHZpbmcgdGVzdCBmaWxlIGJ5IGhhbmQiKTsKKyAgICBjcmVhdGVUZXN0
RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlRmlsZVN5c3RlbVVSSSgiZmls
ZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RmlsZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgICAgIGFzc2VydFBhdGhzTWF0Y2godGVzdEZpbGVOYW1lLCBlLmZ1bGxQYXRoKTsKKyAgICAg
ICAgICAgIGFzc2VydElzRmlsZShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7
CisgICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5C
b2d1c1VSSSgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVS
SS4iKTsKKyAgICByZXNvbHZlRmlsZVN5c3RlbVVSSSgiZm9vIiwgZXJyb3JDYWxsYmFjaywgZXhw
ZWN0ZWRBbmRSdW5OZXh0KTsKK30KKworZnVuY3Rpb24gcnVuV3JvbmdQcm90b2NvbCgpIHsKKyAg
ICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBVUkkgd2l0aCB0aGUgd3JvbmcgcHJvdG9jb2wiKTsKKyAg
ICByZXNvbHZlRmlsZVN5c3RlbVVSSSgiZmlsZTovLy9mb28vYmFyL2JheiIsIGVycm9yQ2FsbGJh
Y2ssIGV4cGVjdGVkQW5kUnVuTmV4dCk7Cit9CisKK2Z1bmN0aW9uIHJ1bk5vdEVub3VnaFNsYXNo
ZXMoKSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgVVJJIHdpdGggbm8gc2xhc2ggYmV0d2Vl
biB0eXBlIGFuZCBmaWxlIik7CisgICAgY3JlYXRlVGVzdEZpbGUoZnVuY3Rpb24oZW50cnkpIHsK
KyAgICAgICAgcmVzb2x2ZUZpbGVTeXN0ZW1VUkkoImZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3Jh
cnl0ZXN0RmlsZSIsIGVycm9yQ2FsbGJhY2ssIGV4cGVjdGVkQW5kUnVuTmV4dCk7CisgICAgfSk7
Cit9CisKK2Z1bmN0aW9uIHJ1bk5vdEVub3VnaFNsYXNoZXMyKCkgeworICAgIGRlYnVnKCIqIFJl
c29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gcHJvdG9jb2wgYW5kIHR5cGUiKTsK
KyAgICBjcmVhdGVUZXN0RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlRmls
ZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpmaWxlOi8vdGVtcG9yYXJ5L3Rlc3RGaWxlIiwgZXJyb3JD
YWxsYmFjaywgZXhwZWN0ZWRBbmRSdW5OZXh0KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcnVu
VXNlQmFja1NsYXNoZXMoKSB7CisgICAgZGVidWcoIiogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYmFj
a3NsYXNoZXMiKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28iLCB7Y3Jl
YXRlOnRydWV9LCBmdW5jdGlvbihlbnRyeSkgeworICAgICAgICBlbnRyeS5nZXRGaWxlKCJ0ZXN0
RmlsZSIsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGYpIHsKKyAgICAgICAgICAgIHJlc29sdmVG
aWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L2Zvb1xcdGVzdEZpbGUi
LCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0UGF0aHNNYXRjaCgiL2Zvby90
ZXN0RmlsZSIsIGUuZnVsbFBhdGgpOworICAgICAgICAgICAgICAgIGFzc2VydElzRmlsZShlKTsK
KyAgICAgICAgICAgICAgICBjbGVhbnVwQW5kUnVuTmV4dCgpOworICAgICAgICAgICAgfSwgZXJy
b3JDYWxsYmFjayk7CisgICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0sIGVycm9yQ2Fs
bGJhY2spOworfQorCitmdW5jdGlvbiBydW5EaXJlY3RvcnkoKSB7CisgICAgZGVidWcoIiogUmVz
b2x2ZSBhIGRpcmVjdG9yeSIpOworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZv
byIsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIHJlc29sdmVGaWxl
U3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L2ZvbyIsIGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0Y2goIi9mb28iLCBlLmZ1bGxQYXRoKTsKKyAg
ICAgICAgICAgIGFzc2VydElzRGlyZWN0b3J5KGUpOworICAgICAgICAgICAgY2xlYW51cEFuZFJ1
bk5leHQoKTsKKyAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSwgZXJyb3JDYWxsYmFj
ayk7Cit9CisKK2Z1bmN0aW9uIHJ1bldpdGhUcmFpbGluZ1NsYXNoKCkgeworICAgIGRlYnVnKCIq
IFJlc29sdmUgYSBwYXRoIHVzaW5nIGEgdHJhaWxpbmcgc2xhc2giKTsKKyAgICBmaWxlU3lzdGVt
LnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28iLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihlbnRyeSkg
eworICAgICAgICByZXNvbHZlRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBv
cmFyeS9mb28vIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYXNzZXJ0UGF0aHNNYXRjaCgi
L2ZvbyIsIGUuZnVsbFBhdGgpOworICAgICAgICAgICAgYXNzZXJ0SXNEaXJlY3RvcnkoZSk7Cisg
ICAgICAgICAgICBjbGVhbnVwQW5kUnVuTmV4dCgpOworICAgICAgICB9LCBlcnJvckNhbGxiYWNr
KTsKKyAgICB9LCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gcnVuUGVyc2lzdGVudFRl
c3QoKSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgcGVyc2lzdGVudCBVUkkuIik7CisgICAg
cmVxdWVzdEZpbGVTeXN0ZW0oUEVSU0lTVEVOVCwgMTAwLCBmdW5jdGlvbihmcykgeworICAgICAg
ICByZXNvbHZlRmlsZVN5c3RlbVVSSShmcy5yb290LnRvVVJJKCksIGZ1bmN0aW9uKGVudHJ5KSB7
CisgICAgICAgICAgICBhc3NlcnRQYXRoc01hdGNoKCIvIiwgZW50cnkuZnVsbFBhdGgpOworICAg
ICAgICAgICAgYXNzZXJ0SXNEaXJlY3RvcnkoZW50cnkpOworICAgICAgICAgICAgY2xlYW51cEFu
ZFJ1bk5leHQoKTsKKyAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSk7Cit9CisKKy8v
IEVuZCBvZiB0ZXN0IGJvZHkgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCit2YXIgdGVzdHNMaXN0ID0gWworICAgIHJ1bkJhc2ljVGVzdCwK
KyAgICBydW5IYW5kbWFkZVVSSSwKKyAgICBydW5Cb2d1c1VSSSwKKyAgICBydW5Xcm9uZ1Byb3Rv
Y29sLAorICAgIHJ1bk5vdEVub3VnaFNsYXNoZXMsCisgICAgcnVuTm90RW5vdWdoU2xhc2hlczIs
CisgICAgcnVuVXNlQmFja1NsYXNoZXMsCisgICAgcnVuRGlyZWN0b3J5LAorICAgIHJ1bldpdGhU
cmFpbGluZ1NsYXNoLAorICAgIHJ1blBlcnNpc3RlbnRUZXN0LAorXTsKK3ZhciB0ZXN0Q291bnRl
ciA9IDA7CisKK2Z1bmN0aW9uIHJ1bk5leHRUZXN0KCkgeworICAgIGlmICh0ZXN0Q291bnRlciA9
PSB0ZXN0c0xpc3QubGVuZ3RoKSB7CisgICAgICAgIGRlYnVnKCJGaW5pc2hlZCBydW5uaW5nIHRl
c3RzLiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGVz
dHNMaXN0W3Rlc3RDb3VudGVyKytdKCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXBBbmRSdW5OZXh0
KCkgeworICAgIHJlbW92ZUFsbEluRGlyZWN0b3J5KGZpbGVTeXN0ZW0ucm9vdCwgcnVuTmV4dFRl
c3QsIHJ1bk5leHRUZXN0KTsKK30KKworZnVuY3Rpb24gZmlsZVN5c3RlbUNhbGxiYWNrKGZzKSB7
CisgICAgZmlsZVN5c3RlbSA9IGZzOworICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7Cit9CisKK2lm
ICh3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7CisgICAgcmVxdWVzdEZpbGVTeXN0ZW0od2luZG93LlRFTVBPUkFSWSwgMTAwLCBmaWxl
U3lzdGVtQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworfSBlbHNlCisgICAgZGVidWcoIlRoaXMg
dGVzdCByZXF1aXJlcyBGaWxlU3lzdGVtIEFQSSBzdXBwb3J0LiIpOworCit3aW5kb3cuc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYWQ0YmU2MGFlYzg5MzYxYjQ2Y2U0
OGRiNGU4NmIwODRhNjQxMzlmLi45YzEzYzM3OWI0YWU2ZjE5YWY5NDQ5NjczNDkxYTQ3ZTI0ZWI1
OTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDItMTggIEFkYW0gS2xlaW4g
IDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2
ZUZpbGVTeXN0ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0Nzc0CisKKyAgICAgICAgU2VlIGh0dHA6Ly9kZXYudzMub3JnLzIwMDkvZGFwL2Zp
bGUtc3lzdGVtL2ZpbGUtZGlyLXN5cy5odG1sI21ldGhvZHMKKyAgICAgICAgZm9yIHRoZSBzcGVj
IGltcGxlbWVudGVkIGJ5IHRoaXMgcGF0Y2guCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlc3lz
dGVtL3Jlc29sdmUtdXJpLmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5
c3RlbVVSTCk6CisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oOgorICAgICAg
ICAqIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVVS
SUNhbGxiYWNrczo6UmVzb2x2ZVVSSUNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
bHZlVVJJQ2FsbGJhY2tzOjpkaWRPcGVuRmlsZVN5c3RlbSk6CisgICAgICAgICogZmlsZWFwaS9G
aWxlU3lzdGVtQ2FsbGJhY2tzLmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZXNvbHZlRmlsZVN5c3RlbVVSSSk6CisgICAgICAg
ICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisKIDIw
MTEtMDItMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5
c3RlbUJhc2UuY3BwCmluZGV4IGM0NjJjM2NlMDgzYWVlYTIxYmUyZmFmZDhkZmNkMmM5ZWM2ZWQ0
ZGEuLjk3ZTgxYzJlNjYwMjYyYmY4ZmEwNWIwMGUxODg4MGNkZjkyNjkxNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCkBAIC00OSw2ICs0OSwzOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6
OmtQZXJzaXN0ZW50UGF0aFByZWZpeFtdID0gInBlcnNpc3RlbnQiOworY29uc3Qgc2l6ZV90IERP
TUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoRE9N
RmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeCkgLSAxOworY29uc3QgY2hhciBE
T01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVmaXhbXSA9ICJ0ZW1wb3JhcnkiOwor
Y29uc3Qgc2l6ZV90IERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5UGF0aFByZWZpeExlbmd0
aCA9IHNpemVvZihET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVmaXgpIC0gMTsK
KworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwm
IHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcmIGZpbGVQYXRoKQorewor
ICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsK
KyAgICBTdHJpbmcgcGF0aCA9IG9yaWdpblVSTC5wYXRoKCk7CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpIHx8IHBhdGhbMF0gIT0gJy8nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcGF0aCA9
IHBhdGguc3Vic3RyaW5nKDEpOworCisgICAgaWYgKHBhdGguc3RhcnRzV2l0aChrVGVtcG9yYXJ5
UGF0aFByZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5
OworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa1RlbXBvcmFyeVBhdGhQcmVmaXhMZW5n
dGgpOworICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKGtQZXJzaXN0ZW50UGF0aFByZWZp
eCkpIHsKKyAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudDsKKyAgICAg
ICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKGtQZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChwYXRoLmlzRW1wdHko
KSB8fCBwYXRoWzBdICE9ICcvJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmlsZVBh
dGguc3dhcChwYXRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogRE9NRmlsZVN5c3RlbUJhc2U6
OkRPTUZpbGVTeXN0ZW1CYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKICAgICA6IG1fbmFtZShuYW1lKQogICAgICwgbV9h
c3luY0ZpbGVTeXN0ZW0oYXN5bmNGaWxlU3lzdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtQmFzZS5oCmluZGV4IDY2ZjEzMzFhMjJjMDU1YWRjZjJmMmE2OGRiMGVhMzAw
ZGZjYTRkZjMuLmJmNjBiNmY2ZWY2Mzg4MmQ2YjhlNTZjNzNiOThiMzY2NTNjZTdkNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKQEAgLTQ3LDYgKzQ3LDcg
QEAgY2xhc3MgRW50cmllc0NhbGxiYWNrOwogY2xhc3MgRW50cnlCYXNlOwogY2xhc3MgRW50cnlD
YWxsYmFjazsKIGNsYXNzIEVycm9yQ2FsbGJhY2s7CitjbGFzcyBLVVJMOwogY2xhc3MgTWV0YWRh
dGFDYWxsYmFjazsKIGNsYXNzIFZvaWRDYWxsYmFjazsKIApAQCAtNTksNiArNjAsMTIgQEAgcHVi
bGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5ET01GaWxlU3lzdGVtQmFzZSgpOwogCisgICAgc3Rh
dGljIGNvbnN0IGNoYXIga1BlcnNpc3RlbnRQYXRoUHJlZml4W107CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBrUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGg7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIga1RlbXBvcmFyeVBhdGhQcmVmaXhbXTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtUZW1w
b3JhcnlQYXRoUHJlZml4TGVuZ3RoOworICAgIHN0YXRpYyBib29sIGNyYWNrRmlsZVN5c3RlbVVS
TChjb25zdCBLVVJMJiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiwgU3RyaW5nJiBmaWxlUGF0aCk7
CisKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAg
ICBBc3luY0ZpbGVTeXN0ZW0qIGFzeW5jRmlsZVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5
bmNGaWxlU3lzdGVtLmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVT
eXN0ZW1DYWxsYmFja3MuY3BwCmluZGV4IDk2NjMzN2IxNzdkZmYxNWViYTM2M2ZhYTZmZjZjZWZk
NDNhNDZhZDcuLjJkNTljZWQxNmQ1OTI3N2FlOTEyNTg2MTQ5Zjc3NDBhZjBlY2E1MDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcApAQCAtMTky
LDYgKzE5Miw2NyBAQCB2b2lkIEZpbGVTeXN0ZW1DYWxsYmFja3M6OmRpZE9wZW5GaWxlU3lzdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luYwogICAgIG1fc3VjY2Vzc0NhbGxi
YWNrLmNsZWFyKCk7CiB9CiAKKy8vIFJlc29sdmVVUklDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbmFtZXNwYWNlIHsK
KworY2xhc3MgRXJyb3JDYWxsYmFja1dyYXBwZXIgOiBwdWJsaWMgRXJyb3JDYWxsYmFjayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFja1dyYXBwZXI+IGNyZWF0
ZShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0sIFBhc3NSZWZQdHI8RW50cnlD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEVycm9yQ2FsbGJhY2tXcmFwcGVyKGZpbGVTeXN0ZW0sIHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlRXZlbnQoRmlsZUVycm9yKik7CisKK3ByaXZhdGU6CisgICAgRXJyb3JDYWxsYmFj
a1dyYXBwZXIoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtLCBQYXNzUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQorICAgICAgICA6IG1fZmls
ZVN5c3RlbShmaWxlU3lzdGVtKQorICAgICAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3ND
YWxsYmFjaykKKyAgICAgICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKKyAgICAg
ICAgLCBtX2ZpbGVQYXRoKGZpbGVQYXRoKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RE9N
RmlsZVN5c3RlbT4gbV9maWxlU3lzdGVtOworICAgIFJlZlB0cjxFbnRyeUNhbGxiYWNrPiBtX3N1
Y2Nlc3NDYWxsYmFjazsKKyAgICBSZWZQdHI8RXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNr
OworICAgIFN0cmluZyBtX2ZpbGVQYXRoOworfTsKKworYm9vbCBFcnJvckNhbGxiYWNrV3JhcHBl
cjo6aGFuZGxlRXZlbnQoRmlsZUVycm9yKikKK3sKKyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2sp
CisgICAgICAgIG1fZmlsZVN5c3RlbS0+Z2V0RmlsZShtX2ZpbGVTeXN0ZW0tPnJvb3QoKS5nZXQo
KSwgbV9maWxlUGF0aCwgMCwgbV9zdWNjZXNzQ2FsbGJhY2ssIG1fZXJyb3JDYWxsYmFjayk7Cisg
ICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgKGFub255bW91cykKKworUGFzc093blB0cjxSZXNvbHZlVVJJQ2FsbGJhY2tz
PiBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlc29sdmVVUklDYWxs
YmFja3Moc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBmaWxlUGF0aCkpOworfQorCitSZXNvbHZlVVJJQ2FsbGJhY2tzOjpSZXNvbHZlVVJJQ2Fs
bGJhY2tzKFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVm
UHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgOiBGaWxlU3lzdGVtQ2FsbGJh
Y2tzQmFzZShlcnJvckNhbGxiYWNrKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0Nh
bGxiYWNrKQorICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBt
X2ZpbGVQYXRoKGZpbGVQYXRoKQoreworfQorCit2b2lkIFJlc29sdmVVUklDYWxsYmFja3M6OmRp
ZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKK3sKKyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsK
KyAgICAgICAgQVNTRVJUKGFzeW5jRmlsZVN5c3RlbSk7CisgICAgICAgIFJlZlB0cjxET01GaWxl
U3lzdGVtPiBmaWxlU3lzdGVtID0gRE9NRmlsZVN5c3RlbTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5nZXQoKSwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtLmxlYWtQdHIoKSk7CisgICAg
ICAgIGZpbGVTeXN0ZW0tPmdldERpcmVjdG9yeShmaWxlU3lzdGVtLT5yb290KCkuZ2V0KCksIG1f
ZmlsZVBhdGgsIDAsIG1fc3VjY2Vzc0NhbGxiYWNrLCBFcnJvckNhbGxiYWNrV3JhcHBlcjo6Y3Jl
YXRlKGZpbGVTeXN0ZW0sIG1fc3VjY2Vzc0NhbGxiYWNrLCBtX2Vycm9yQ2FsbGJhY2ssIG1fZmls
ZVBhdGgpKTsKKyAgICB9CisgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKK30KKwogLy8g
TWV0YWRhdGFDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBQYXNzT3duUHRyPE1ldGFkYXRhQ2FsbGJhY2tzPiBNZXRh
ZGF0YUNhbGxiYWNrczo6Y3JlYXRlKFBhc3NSZWZQdHI8TWV0YWRhdGFDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCmluZGV4IDgzMDAwYzJk
ZDNjMWY4MzcxZGJjMzcyMzk1MTVhYmNmMTFhZjIxOTUuLjdmNjg2MjVhYzkyNjhmOGUyNTQ5ZDFk
NWE4OTBkODRjYzA1ZmNkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3Rl
bUNhbGxiYWNrcy5oCkBAIC00MywxMCArNDMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQXN5bmNGaWxlV3JpdGVyOwogY2xhc3MgRE9NRmlsZVN5c3RlbUJhc2U7CiBjbGFzcyBEaXJl
Y3RvcnlSZWFkZXJCYXNlOwotY2xhc3MgRXJyb3JDYWxsYmFjazsKIGNsYXNzIEVudHJpZXNDYWxs
YmFjazsKIGNsYXNzIEVudHJ5QXJyYXk7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOworY2xhc3MgRXJy
b3JDYWxsYmFjazsKIHN0cnVjdCBGaWxlTWV0YWRhdGE7CiBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJh
Y2s7CiBjbGFzcyBGaWxlV3JpdGVyQmFzZTsKQEAgLTEyMyw2ICsxMjMsMTggQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogfTsKIAorY2xhc3MgUmVzb2x2ZVVSSUNhbGxiYWNrcyA6IHB1YmxpYyBGaWxlU3lzdGVt
Q2FsbGJhY2tzQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UmVzb2x2ZVVS
SUNhbGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOworCitwcml2YXRlOgorICAgIFJl
c29sdmVVUklDYWxsYmFja3MoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgpOworICAgIFJlZlB0cjxFbnRyeUNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKKyAg
ICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
OworICAgIFN0cmluZyBtX2ZpbGVQYXRoOworfTsKKwogY2xhc3MgTWV0YWRhdGFDYWxsYmFja3Mg
OiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1ldGFkYXRhQ2FsbGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxNZXRhZGF0YUNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKaW5kZXggZWQ2ZDA1NzFmNGZkOTQwMGZjZmY1NTM4YzY3YmIxNWIyZDNiNjc3Ny4uZjll
YmVmZDRiMmJhMGJkNWNhZjQ0MzJhZjZjODJhZjM2OTgzOTE5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcApAQCAtOTksNiArOTksOCBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICNp
bmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgiCisj
aW5jbHVkZSAiRE9NRmlsZVN5c3RlbUJhc2UuaCIKKyNpbmNsdWRlICJFbnRyeUNhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiRXJyb3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgpAQCAtNzUzLDYgKzc1NSwyOSBAQCB2b2lkIERP
TVdpbmRvdzo6cmVxdWVzdEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNz
UmVmUHRyPEZpbGVTeXN0ZQogICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCku
cmVxdWVzdEZpbGVTeXN0ZW0oZG9jdW1lbnQsIGZpbGVTeXN0ZW1UeXBlLCBzaXplLCBGaWxlU3lz
dGVtQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBkb2N1
bWVudCksIGZhbHNlKTsKIH0KIAordm9pZCBET01XaW5kb3c6OnJlc29sdmVGaWxlU3lzdGVtVVJJ
KGNvbnN0IFN0cmluZyYgdXJpLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQoreworICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luID0g
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgS1VSTCBwYXJzZWRVUkwoUGFyc2VkVVJM
U3RyaW5nLCB1cmkpOworICAgIGlmICghQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpIHx8
ICFzZWN1cml0eU9yaWdpbi0+Y2FuQWNjZXNzRmlsZVN5c3RlbSgpIHx8ICFzZWN1cml0eU9yaWdp
bi0+Y2FuUmVxdWVzdChwYXJzZWRVUkwpKSB7CisgICAgICAgIERPTUZpbGVTeXN0ZW06OnNjaGVk
dWxlQ2FsbGJhY2soZG9jdW1lbnQsIGVycm9yQ2FsbGJhY2ssIEZpbGVFcnJvcjo6Y3JlYXRlKEZp
bGVFcnJvcjo6U0VDVVJJVFlfRVJSKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
c3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZTsKKyAgICBTdHJpbmcgZmlsZVBhdGg7CisgICAgaWYg
KCFwYXJzZWRVUkwuaXNWYWxpZCgpIHx8ICFET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lz
dGVtVVJMKHBhcnNlZFVSTCwgdHlwZSwgZmlsZVBhdGgpKSB7CisgICAgICAgIERPTUZpbGVTeXN0
ZW06OnNjaGVkdWxlQ2FsbGJhY2soZG9jdW1lbnQsIGVycm9yQ2FsbGJhY2ssIEZpbGVFcnJvcjo6
Y3JlYXRlKEZpbGVFcnJvcjo6U1lOVEFYX0VSUikpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0ZW0oKS5yZWFkRmlsZVN5c3RlbShk
b2N1bWVudCwgdHlwZSwgMCwgUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgZG9jdW1lbnQsIGZpbGVQYXRoKSk7Cit9CisKIENPTVBJTEVf
QVNTRVJUKHN0YXRpY19jYXN0PGludD4oRE9NV2luZG93OjpURU1QT1JBUlkpID09IHN0YXRpY19j
YXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkpLCBlbnVtX21pc21hdGNoKTsKIENP
TVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oRE9NV2luZG93OjpQRVJTSVNURU5UKSA9PSBz
dGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCksIGVudW1fbWlzbWF0
Y2gpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAppbmRleCAwNTgxNjVmYjhkYmFlYTk5OTE2OTA1
ZDliNGRhODg2ODQxMGM4MjJmLi4yZjgyNzMwOWNhYzg4Y2JlYmNkMjc0MzZkN2NhNDk0NmM1MGNj
NmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiAgICAgY2xhc3MgRG9jdW1l
bnQ7CiAgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBFbnRyeUNhbGxiYWNrOwogICAgIGNs
YXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBG
aWxlU3lzdGVtQ2FsbGJhY2s7CkBAIC0zODcsNiArMzg4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgUEVSU0lTVEVOVCwKICAgICAgICAgfTsKICAgICAgICAgdm9pZCByZXF1
ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5
c3RlbUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgICAgIHZvaWQg
cmVzb2x2ZUZpbGVTeXN0ZW1VUkkoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IGZkOWJjZTAx
MTQyYjRiZTUwMTgxMzI4MjM0NmQzNzU3ZDUxYWE2MjEuLjI1Y2QzZjQ3NThlMWIyYTM1ODIyYzYx
MzZlMGQwNTFlOGQ4NDM0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTE5NSw2
ICsxOTUsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
VEVNUE9SQVJZID0gMDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUEVSU0lTVEVOVCA9
IDE7CiAgICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQgcmVxdWVzdEZp
bGVTeXN0ZW0oaW4gdW5zaWduZWQgc2hvcnQgdHlwZSwgaW4gbG9uZyBsb25nIHNpemUsIGluIFtD
YWxsYmFjaywgT3B0aW9uYWxdIEZpbGVTeXN0ZW1DYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGlu
IFtDYWxsYmFjaywgT3B0aW9uYWxdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CisgICAg
ICAgIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQgcmVzb2x2ZUZpbGVTeXN0ZW1V
UkkoaW4gRE9NU3RyaW5nIHVyaSwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRW50cnlDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEVycm9yQ2FsbGJhY2sg
ZXJyb3JDYWxsYmFjayk7CiAKICAgICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lPUZp
bGVTeXN0ZW1dIEZsYWdzQ29uc3RydWN0b3IgRmxhZ3M7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83404</attachid>
            <date>2011-02-22 15:54:57 -0800</date>
            <delta_ts>2011-02-24 16:12:55 -0800</delta_ts>
            <desc>Renamed to resolveLocalFileSystemURI</desc>
            <filename>bug-54774-20110222155456.patch</filename>
            <type>text/plain</type>
            <size>21512</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYWI1MDJlZTFjMWMwNmUxYTgxMDA2OGMwMGIxMmI4MjBhOWI5ODUzLi5lMTU1NTA4
MGVkNGIzMDhhZjEwZTVkMjhlNjU0MmQxMzY1MzVhZGRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDItMTggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVu
dCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ3NzQKKworICAgICAgICBUZXN0
cyBmb3IgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5
c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmls
ZXN5c3RlbS9yZXNvbHZlLXVyaS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0
ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVk
QW5kUnVuTmV4dCk6CisgICAgICAgIChlcnJvckNhbGxiYWNrKToKKyAgICAgICAgKGNyZWF0ZVRl
c3RGaWxlKToKKyAgICAgICAgKCk6CisgICAgICAgIChhc3NlcnRJc0RpcmVjdG9yeSk6CisgICAg
ICAgIChhc3NlcnRJc0ZpbGUpOgorICAgICAgICAocnVuQmFzaWNUZXN0KToKKyAgICAgICAgKHJ1
bkhhbmRtYWRlVVJJKToKKyAgICAgICAgKHJ1bkJvZ3VzVVJJKToKKyAgICAgICAgKHJ1bldyb25n
UHJvdG9jb2wpOgorICAgICAgICAocnVuTm90RW5vdWdoU2xhc2hlcyk6CisgICAgICAgIChydW5O
b3RFbm91Z2hTbGFzaGVzMik6CisgICAgICAgIChydW5Vc2VCYWNrU2xhc2hlcy4pOgorICAgICAg
ICAocnVuVXNlQmFja1NsYXNoZXMpOgorICAgICAgICAocnVuRGlyZWN0b3J5Lik6CisgICAgICAg
IChydW5EaXJlY3RvcnkpOgorICAgICAgICAocnVuV2l0aFRyYWlsaW5nU2xhc2guKToKKyAgICAg
ICAgKHJ1bldpdGhUcmFpbGluZ1NsYXNoKToKKyAgICAgICAgKHJ1bk5leHRUZXN0KToKKyAgICAg
ICAgKGNsZWFudXBBbmRSdW5OZXh0KToKKyAgICAgICAgKGZpbGVTeXN0ZW1DYWxsYmFjayk6Cisg
ICAgICAgICh2YXIpOgorCiAyMDExLTAyLTE3ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25A
aWdhbGlhLmNvbT4KIAogICAgICAgICBDb250aW51ZSBpbXBvcnRpbmcgR1RLKyByZXN1bHRzIGZv
ciB0aGUgTW96aWxsYSB0YWJsZSB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZmNlNTFjYTli
ZDBjNDliOTk4YWVkYzJjM2MyMjNmZTU3ZWZkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MzYgQEAKK1Rlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkgdG8gb2J0YWluIGFu
IEVudHJ5IGZyb20gYSBVUkkKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyogUmVz
b2x2aW5nIGEgZ2VuZXJhdGVkIFVSSS4KK1BBU1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgK
K1BBU1MgaXNGaWxlIGlzIHRydWUKKyogUmVzb2x2aW5nIHRlc3QgZmlsZSBieSBoYW5kCitQQVNT
IGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRmlsZSBpcyB0cnVlCisqIFJlc29s
dmluZyBhIGNvbXBsZXRlbHkgYm9ndXMgVVJJLgorUEFTUyAKKyogUmVzb2x2aW5nIGEgVVJJIHdp
dGggdGhlIHdyb25nIHByb3RvY29sCitQQVNTIAorKiBSZXNvbHZpbmcgYSBVUkkgd2l0aCBubyBz
bGFzaCBiZXR3ZWVuIHR5cGUgYW5kIGZpbGUKK1BBU1MgCisqIFJlc29sdmluZyBhIFVSSSB3aXRo
IG5vIHNsYXNoIGJldHdlZW4gcHJvdG9jb2wgYW5kIHR5cGUKK1BBU1MgCisqIFJlc29sdmUgYSBw
YXRoIHVzaW5nIGJhY2tzbGFzaGVzCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQ
QVNTIGlzRmlsZSBpcyB0cnVlCisqIFJlc29sdmUgYSBkaXJlY3RvcnkKK1BBU1MgZXhwZWN0ZWRQ
YXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNEaXJlY3RvcnkgaXMgdHJ1ZQorKiBSZXNvbHZlIGEg
cGF0aCB1c2luZyBhIHRyYWlsaW5nIHNsYXNoCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQ
YXRoCitQQVNTIGlzRGlyZWN0b3J5IGlzIHRydWUKKyogUmVzb2x2aW5nIGEgcGVyc2lzdGVudCBV
UkkuCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRGlyZWN0b3J5IGlz
IHRydWUKK0ZpbmlzaGVkIHJ1bm5pbmcgdGVzdHMuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
cmVzb2x2ZS11cmkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmVhYmYxMWE5NDZkMmFlNTRjOTUwNjdhMWE2
ZTg2ZTJhMDU5Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3Jlc29sdmUtdXJpLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9mcy10ZXN0LXV0aWwuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmYyMmYx
MzZkZTBhNjYwYTQ4NWFkN2RiZTViNDdjNjBhNGE4YTA4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcwpAQCAt
MCwwICsxLDE3MiBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVT
eXN0ZW1VUkkgdG8gb2J0YWluIGFuIEVudHJ5IGZyb20gYSBVUkkiKTsKKwordmFyIHRlc3RGaWxl
TmFtZSA9ICcvdGVzdEZpbGUnOwordmFyIGZpbGVTeXN0ZW0gPSBudWxsOwordmFyIGV4cGVjdGVk
QW5kUnVuTmV4dCA9IGZ1bmN0aW9uKCkgeyB0ZXN0UGFzc2VkKCIiKTsgY2xlYW51cEFuZFJ1bk5l
eHQoKTsgfTsKKwordmFyIGV4cGVjdGVkUGF0aCA9IG51bGw7Cit2YXIgYWN0dWFsUGF0aCA9IG51
bGw7CisKK2Z1bmN0aW9uIGVycm9yQ2FsbGJhY2soZXJyb3IpIHsKKyAgICBpZiAoZXJyb3IgJiYg
ZXJyb3IuY29kZSkKKyAgICAgICAgZGVidWcoIkVycm9yIG9jY3VycmVkOiAiICsgZXJyb3IuY29k
ZSk7CisgICAgdGVzdEZhaWxlZCgiQmFpbGluZyBvdXQgZWFybHkiKTsKKyAgICBmaW5pc2hKU1Rl
c3QoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlVGVzdEZpbGUoY2FsbGJhY2spIHsKKyAgICBmaWxl
U3lzdGVtLnJvb3QuZ2V0RmlsZSh0ZXN0RmlsZU5hbWUsIHtjcmVhdGU6dHJ1ZX0sIGNhbGxiYWNr
LCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0UGF0aHNNYXRjaChleHBlY3Rl
ZCwgYWN0dWFsKSB7CisgICAgZXhwZWN0ZWRQYXRoID0gZXhwZWN0ZWQ7CisgICAgYWN0dWFsUGF0
aCA9IGFjdHVhbDsKKyAgICBzaG91bGRCZSgiZXhwZWN0ZWRQYXRoIiwgImFjdHVhbFBhdGgiKTsK
K30KKwordmFyIGlzRGlyZWN0b3J5ID0gZmFsc2U7CitmdW5jdGlvbiBhc3NlcnRJc0RpcmVjdG9y
eShlbnRyeSkgeworICAgIGlzRGlyZWN0b3J5ID0gZW50cnkuaXNEaXJlY3Rvcnk7CisgICAgc2hv
dWxkQmVUcnVlKCJpc0RpcmVjdG9yeSIpOworfQorCit2YXIgaXNGaWxlID0gZmFsc2U7CitmdW5j
dGlvbiBhc3NlcnRJc0ZpbGUoZW50cnkpIHsKKyAgICBpc0ZpbGUgPSBlbnRyeS5pc0ZpbGU7Cisg
ICAgc2hvdWxkQmVUcnVlKCJpc0ZpbGUiKTsKK30KKworLy8gVGVzdCBib2R5IGZ1bmN0aW9ucyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1
bmN0aW9uIHJ1bkJhc2ljVGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBnZW5lcmF0
ZWQgVVJJLiIpOworICAgIGNyZWF0ZVRlc3RGaWxlKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAg
IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoZW50cnkudG9VUkkoKSwgZnVuY3Rpb24oZSkgewor
ICAgICAgICAgICAgYXNzZXJ0UGF0aHNNYXRjaChlbnRyeS5mdWxsUGF0aCwgZS5mdWxsUGF0aCk7
CisgICAgICAgICAgICBhc3NlcnRJc0ZpbGUoZSk7CisgICAgICAgICAgICBjbGVhbnVwQW5kUnVu
TmV4dCgpOworICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsKKyAgICB9KTsKK30KKworZnVuY3Rp
b24gcnVuSGFuZG1hZGVVUkkoKSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIHRlc3QgZmlsZSBi
eSBoYW5kIik7CisgICAgY3JlYXRlVGVzdEZpbGUoZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAg
cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90
ZXN0RmlsZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0Y2godGVz
dEZpbGVOYW1lLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRmlsZShlKTsKKyAg
ICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAgIH0sIGVycm9yQ2FsbGJhY2sp
OworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5Cb2d1c1VSSSgpIHsKKyAgICBkZWJ1ZygiKiBS
ZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSSS4iKTsKKyAgICByZXNvbHZlTG9jYWxGaWxl
U3lzdGVtVVJJKCJmb28iLCBlcnJvckNhbGxiYWNrLCBleHBlY3RlZEFuZFJ1bk5leHQpOworfQor
CitmdW5jdGlvbiBydW5Xcm9uZ1Byb3RvY29sKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyBh
IFVSSSB3aXRoIHRoZSB3cm9uZyBwcm90b2NvbCIpOworICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1VUkkoImZpbGU6Ly8vZm9vL2Jhci9iYXoiLCBlcnJvckNhbGxiYWNrLCBleHBlY3RlZEFuZFJ1
bk5leHQpOworfQorCitmdW5jdGlvbiBydW5Ob3RFbm91Z2hTbGFzaGVzKCkgeworICAgIGRlYnVn
KCIqIFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gdHlwZSBhbmQgZmlsZSIp
OworICAgIGNyZWF0ZVRlc3RGaWxlKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIHJlc29sdmVM
b2NhbEZpbGVTeXN0ZW1VUkkoImZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3Jhcnl0ZXN0RmlsZSIs
IGVycm9yQ2FsbGJhY2ssIGV4cGVjdGVkQW5kUnVuTmV4dCk7CisgICAgfSk7Cit9CisKK2Z1bmN0
aW9uIHJ1bk5vdEVub3VnaFNsYXNoZXMyKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyBhIFVS
SSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gcHJvdG9jb2wgYW5kIHR5cGUiKTsKKyAgICBjcmVhdGVU
ZXN0RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVt
VVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly90ZW1wb3JhcnkvdGVzdEZpbGUiLCBlcnJvckNhbGxiYWNr
LCBleHBlY3RlZEFuZFJ1bk5leHQpOworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5Vc2VCYWNr
U2xhc2hlcygpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZlIGEgcGF0aCB1c2luZyBiYWNrc2xhc2hl
cyIpOworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZvbyIsIHtjcmVhdGU6dHJ1
ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIGVudHJ5LmdldEZpbGUoInRlc3RGaWxlIiwg
e2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZikgeworICAgICAgICAgICAgcmVzb2x2ZUxvY2FsRmls
ZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS9mb29cXHRlc3RGaWxlIiwg
ZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0Y2goIi9mb28vdGVz
dEZpbGUiLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRJc0ZpbGUoZSk7Cisg
ICAgICAgICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKKyAgICAgICAgICAgIH0sIGVycm9y
Q2FsbGJhY2spOworICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsKKyAgICB9LCBlcnJvckNhbGxi
YWNrKTsKK30KKworZnVuY3Rpb24gcnVuRGlyZWN0b3J5KCkgeworICAgIGRlYnVnKCIqIFJlc29s
dmUgYSBkaXJlY3RvcnkiKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28i
LCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlTG9jYWxG
aWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L2ZvbyIsIGZ1bmN0aW9u
KGUpIHsKKyAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0Y2goIi9mb28iLCBlLmZ1bGxQYXRoKTsK
KyAgICAgICAgICAgIGFzc2VydElzRGlyZWN0b3J5KGUpOworICAgICAgICAgICAgY2xlYW51cEFu
ZFJ1bk5leHQoKTsKKyAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSwgZXJyb3JDYWxs
YmFjayk7Cit9CisKK2Z1bmN0aW9uIHJ1bldpdGhUcmFpbGluZ1NsYXNoKCkgeworICAgIGRlYnVn
KCIqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGEgdHJhaWxpbmcgc2xhc2giKTsKKyAgICBmaWxlU3lz
dGVtLnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28iLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihlbnRy
eSkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6
Ly8vdGVtcG9yYXJ5L2Zvby8iLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBhc3NlcnRQYXRo
c01hdGNoKCIvZm9vIiwgZS5mdWxsUGF0aCk7CisgICAgICAgICAgICBhc3NlcnRJc0RpcmVjdG9y
eShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAgIH0sIGVycm9y
Q2FsbGJhY2spOworICAgIH0sIGVycm9yQ2FsbGJhY2spOworfQorCitmdW5jdGlvbiBydW5QZXJz
aXN0ZW50VGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBwZXJzaXN0ZW50IFVSSS4i
KTsKKyAgICByZXF1ZXN0RmlsZVN5c3RlbShQRVJTSVNURU5ULCAxMDAsIGZ1bmN0aW9uKGZzKSB7
CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoZnMucm9vdC50b1VSSSgpLCBmdW5j
dGlvbihlbnRyeSkgeworICAgICAgICAgICAgYXNzZXJ0UGF0aHNNYXRjaCgiLyIsIGVudHJ5LmZ1
bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRGlyZWN0b3J5KGVudHJ5KTsKKyAgICAgICAg
ICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAg
IH0pOworfQorCisvLyBFbmQgb2YgdGVzdCBib2R5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIHRlc3RzTGlzdCA9IFsKKyAgICBy
dW5CYXNpY1Rlc3QsCisgICAgcnVuSGFuZG1hZGVVUkksCisgICAgcnVuQm9ndXNVUkksCisgICAg
cnVuV3JvbmdQcm90b2NvbCwKKyAgICBydW5Ob3RFbm91Z2hTbGFzaGVzLAorICAgIHJ1bk5vdEVu
b3VnaFNsYXNoZXMyLAorICAgIHJ1blVzZUJhY2tTbGFzaGVzLAorICAgIHJ1bkRpcmVjdG9yeSwK
KyAgICBydW5XaXRoVHJhaWxpbmdTbGFzaCwKKyAgICBydW5QZXJzaXN0ZW50VGVzdCwKK107Cit2
YXIgdGVzdENvdW50ZXIgPSAwOworCitmdW5jdGlvbiBydW5OZXh0VGVzdCgpIHsKKyAgICBpZiAo
dGVzdENvdW50ZXIgPT0gdGVzdHNMaXN0Lmxlbmd0aCkgeworICAgICAgICBkZWJ1ZygiRmluaXNo
ZWQgcnVubmluZyB0ZXN0cy4iKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSBlbHNl
CisgICAgICAgIHRlc3RzTGlzdFt0ZXN0Q291bnRlcisrXSgpOworfQorCitmdW5jdGlvbiBjbGVh
bnVwQW5kUnVuTmV4dCgpIHsKKyAgICByZW1vdmVBbGxJbkRpcmVjdG9yeShmaWxlU3lzdGVtLnJv
b3QsIHJ1bk5leHRUZXN0LCBydW5OZXh0VGVzdCk7Cit9CisKK2Z1bmN0aW9uIGZpbGVTeXN0ZW1D
YWxsYmFjayhmcykgeworICAgIGZpbGVTeXN0ZW0gPSBmczsKKyAgICBjbGVhbnVwQW5kUnVuTmV4
dCgpOworfQorCitpZiAod2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKSB7CisgICAgd2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOworICAgIHJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JB
UlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKK30gZWxzZQorICAg
IGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5c3RlbSBBUEkgc3VwcG9ydC4iKTsKKwor
d2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFkNGJlNjBh
ZWM4OTM2MWI0NmNlNDhkYjRlODZiMDg0YTY0MTM5Zi4uOThmYjBiZmI4MjExMGM4NTg3ODE2NzEw
NDJiODE5Y2ExNmQyYWRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTAyLTE4
ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBpXSBJbXBsZW1lbnQgTG9jYWxGaWxl
U3lzdGVtLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Nzc0CisKKyAgICAgICAgU2VlIGh0dHA6Ly9kZXYu
dzMub3JnLzIwMDkvZGFwL2ZpbGUtc3lzdGVtL2ZpbGUtZGlyLXN5cy5odG1sI21ldGhvZHMKKyAg
ICAgICAgZm9yIHRoZSBzcGVjIGltcGxlbWVudGVkIGJ5IHRoaXMgcGF0Y2guCisKKyAgICAgICAg
VGVzdDogZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwKKworICAgICAgICAqIGZpbGVh
cGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmlsZVN5c3Rl
bUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTCk6CisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lz
dGVtQmFzZS5oOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb2x2ZVVSSUNhbGxiYWNrczo6UmVzb2x2ZVVSSUNhbGxiYWNrcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpkaWRPcGVuRmlsZVN5c3RlbSk6Cisg
ICAgICAgICogZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmg6CisgICAgICAgICogcGFnZS9E
T01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZXNvbHZlTG9jYWxG
aWxlU3lzdGVtVVJJKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBh
Z2UvRE9NV2luZG93LmlkbDoKKwogMjAxMS0wMi0xNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAKaW5kZXggYzQ2MmMzY2UwODNhZWVh
MjFiZTJmYWZkOGRmY2QyYzllYzZlZDRkYS4uOTdlODFjMmU2NjAyNjJiZjhmYTA1YjAwZTE4ODgw
Y2RmOTI2OTE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFz
ZS5jcHAKQEAgLTQ5LDYgKzQ5LDM4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3Qg
Y2hhciBET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4W10gPSAicGVyc2lz
dGVudCI7Citjb25zdCBzaXplX3QgRE9NRmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFBy
ZWZpeExlbmd0aCA9IHNpemVvZihET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRoUHJl
Zml4KSAtIDE7Citjb25zdCBjaGFyIERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5UGF0aFBy
ZWZpeFtdID0gInRlbXBvcmFyeSI7Citjb25zdCBzaXplX3QgRE9NRmlsZVN5c3RlbUJhc2U6OmtU
ZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9mKERPTUZpbGVTeXN0ZW1CYXNlOjprVGVt
cG9yYXJ5UGF0aFByZWZpeCkgLSAxOworCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpjcmFja0Zp
bGVTeXN0ZW1VUkwoY29uc3QgS1VSTCYgdXJsLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUmIHR5cGUs
IFN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgaWYgKCF1cmwucHJvdG9jb2xJcygiZmlsZXN5c3Rl
bSIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBLVVJMIG9yaWdpblVSTChQYXJzZWRV
UkxTdHJpbmcsIHVybC5wYXRoKCkpOworICAgIFN0cmluZyBwYXRoID0gb3JpZ2luVVJMLnBhdGgo
KTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAnLycpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7CisKKyAgICBpZiAocGF0
aC5zdGFydHNXaXRoKGtUZW1wb3JhcnlQYXRoUHJlZml4KSkgeworICAgICAgICB0eXBlID0gQXN5
bmNGaWxlU3lzdGVtOjpUZW1wb3Jhcnk7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhr
VGVtcG9yYXJ5UGF0aFByZWZpeExlbmd0aCk7CisgICAgfSBlbHNlIGlmIChwYXRoLnN0YXJ0c1dp
dGgoa1BlcnNpc3RlbnRQYXRoUHJlZml4KSkgeworICAgICAgICB0eXBlID0gQXN5bmNGaWxlU3lz
dGVtOjpQZXJzaXN0ZW50OworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa1BlcnNpc3Rl
bnRQYXRoUHJlZml4TGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8IHBhdGhbMF0gIT0gJy8nKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBmaWxlUGF0aC5zd2FwKHBhdGgpOworICAgIHJldHVybiB0cnVlOwor
fQorCiBET01GaWxlU3lzdGVtQmFzZTo6RE9NRmlsZVN5c3RlbUJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQogICAgIDog
bV9uYW1lKG5hbWUpCiAgICAgLCBtX2FzeW5jRmlsZVN5c3RlbShhc3luY0ZpbGVTeXN0ZW0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKaW5kZXggNjZmMTMzMWEy
MmMwNTVhZGNmMmYyYTY4ZGIwZWEzMDBkZmNhNGRmMy4uYmY2MGI2ZjZlZjYzODgyZDZiOGU1NmM3
M2I5OGIzNjY1M2NlN2Q3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01G
aWxlU3lzdGVtQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3Rl
bUJhc2UuaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CiBjbGFzcyBF
bnRyeUJhc2U7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogY2xhc3MgRXJyb3JDYWxsYmFjazsKK2Ns
YXNzIEtVUkw7CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwogY2xhc3MgVm9pZENhbGxiYWNrOwog
CkBAIC01OSw2ICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkRPTUZpbGVT
eXN0ZW1CYXNlKCk7CiAKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrUGVyc2lzdGVudFBhdGhQcmVm
aXhbXTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0
aDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrVGVtcG9yYXJ5UGF0aFByZWZpeFtdOworICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qga1RlbXBvcmFyeVBhdGhQcmVmaXhMZW5ndGg7CisgICAgc3RhdGlj
IGJvb2wgY3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwmLCBBc3luY0ZpbGVTeXN0ZW06OlR5
cGUmLCBTdHJpbmcmIGZpbGVQYXRoKTsKKwogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIEFzeW5jRmlsZVN5c3RlbSogYXN5bmNGaWxlU3lzdGVt
KCkgY29uc3QgeyByZXR1cm4gbV9hc3luY0ZpbGVTeXN0ZW0uZ2V0KCk7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKaW5kZXggOTY2MzM3YjE3
N2RmZjE1ZWJhMzYzZmFhNmZmNmNlZmQ0M2E0NmFkNy4uMmQ1OWNlZDE2ZDU5Mjc3YWU5MTI1ODYx
NDlmNzc0MGFmMGVjYTUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
U3lzdGVtQ2FsbGJhY2tzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0
ZW1DYWxsYmFja3MuY3BwCkBAIC0xOTIsNiArMTkyLDY3IEBAIHZvaWQgRmlsZVN5c3RlbUNhbGxi
YWNrczo6ZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFz
eW5jCiAgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKIH0KIAorLy8gUmVzb2x2ZVVSSUNh
bGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCituYW1lc3BhY2UgeworCitjbGFzcyBFcnJvckNhbGxiYWNrV3JhcHBlciA6IHB1
YmxpYyBFcnJvckNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrV3JhcHBlcj4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5
c3RlbSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXJyb3JDYWxsYmFja1dyYXBwZXIo
ZmlsZVN5c3RlbSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBmaWxlUGF0aCkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChGaWxlRXJyb3IqKTsKKworcHJp
dmF0ZToKKyAgICBFcnJvckNhbGxiYWNrV3JhcHBlcihQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+
IGZpbGVTeXN0ZW0sIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQ
YXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgpCisgICAgICAgIDogbV9maWxlU3lzdGVtKGZpbGVTeXN0ZW0pCisgICAgICAgICwgbV9z
dWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQorICAgICAgICAsIG1fZXJyb3JDYWxsYmFj
ayhlcnJvckNhbGxiYWNrKQorICAgICAgICAsIG1fZmlsZVBhdGgoZmlsZVBhdGgpCisgICAgewor
ICAgIH0KKworICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBtX2ZpbGVTeXN0ZW07CisgICAgUmVm
UHRyPEVudHJ5Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOworICAgIFJlZlB0cjxFcnJvckNh
bGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7CisgICAgU3RyaW5nIG1fZmlsZVBhdGg7Cit9OworCiti
b29sIEVycm9yQ2FsbGJhY2tXcmFwcGVyOjpoYW5kbGVFdmVudChGaWxlRXJyb3IqKQoreworICAg
IGlmIChtX3N1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgbV9maWxlU3lzdGVtLT5nZXRGaWxlKG1f
ZmlsZVN5c3RlbS0+cm9vdCgpLmdldCgpLCBtX2ZpbGVQYXRoLCAwLCBtX3N1Y2Nlc3NDYWxsYmFj
aywgbV9lcnJvckNhbGxiYWNrKTsKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigpOworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSAoYW5vbnltb3VzKQorCitQYXNzT3du
UHRyPFJlc29sdmVVUklDYWxsYmFja3M+IFJlc29sdmVVUklDYWxsYmFja3M6OmNyZWF0ZShQYXNz
UmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUmVzb2x2ZVVSSUNhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2ssIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGZpbGVQYXRoKSk7Cit9CisKK1Jlc29sdmVVUklD
YWxsYmFja3M6OlJlc29sdmVVUklDYWxsYmFja3MoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkK
KyAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX3N1
Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dCkKKyAgICAsIG1fZmlsZVBhdGgoZmlsZVBhdGgpCit7Cit9CisKK3ZvaWQg
UmVzb2x2ZVVSSUNhbGxiYWNrczo6ZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQoreworICAgIGlm
IChtX3N1Y2Nlc3NDYWxsYmFjaykgeworICAgICAgICBBU1NFUlQoYXN5bmNGaWxlU3lzdGVtKTsK
KyAgICAgICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0gPSBET01GaWxlU3lzdGVt
OjpjcmVhdGUobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCBuYW1lLCBhc3luY0ZpbGVT
eXN0ZW0ubGVha1B0cigpKTsKKyAgICAgICAgZmlsZVN5c3RlbS0+Z2V0RGlyZWN0b3J5KGZpbGVT
eXN0ZW0tPnJvb3QoKS5nZXQoKSwgbV9maWxlUGF0aCwgMCwgbV9zdWNjZXNzQ2FsbGJhY2ssIEVy
cm9yQ2FsbGJhY2tXcmFwcGVyOjpjcmVhdGUoZmlsZVN5c3RlbSwgbV9zdWNjZXNzQ2FsbGJhY2ss
IG1fZXJyb3JDYWxsYmFjaywgbV9maWxlUGF0aCkpOworICAgIH0KKyAgICBtX3N1Y2Nlc3NDYWxs
YmFjay5jbGVhcigpOworfQorCiAvLyBNZXRhZGF0YUNhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFBhc3NPd25QdHI8
TWV0YWRhdGFDYWxsYmFja3M+IE1ldGFkYXRhQ2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxN
ZXRhZGF0YUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2Fs
bGJhY2tzLmgKaW5kZXggODMwMDBjMmRkM2MxZjgzNzFkYmMzNzIzOTUxNWFiY2YxMWFmMjE5NS4u
N2Y2ODYyNWFjOTI2OGY4ZTI1NDlkMWQ1YTg5MGQ4NGNjMDVmY2RkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKQEAgLTQzLDEwICs0MywxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBc3luY0ZpbGVXcml0ZXI7CiBjbGFzcyBET01GaWxl
U3lzdGVtQmFzZTsKIGNsYXNzIERpcmVjdG9yeVJlYWRlckJhc2U7Ci1jbGFzcyBFcnJvckNhbGxi
YWNrOwogY2xhc3MgRW50cmllc0NhbGxiYWNrOwogY2xhc3MgRW50cnlBcnJheTsKIGNsYXNzIEVu
dHJ5Q2FsbGJhY2s7CitjbGFzcyBFcnJvckNhbGxiYWNrOwogc3RydWN0IEZpbGVNZXRhZGF0YTsK
IGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKIGNsYXNzIEZpbGVXcml0ZXJCYXNlOwpAQCAtMTIz
LDYgKzEyMywxOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9OwogCitjbGFzcyBSZXNvbHZlVVJJQ2FsbGJh
Y2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxSZXNvbHZlVVJJQ2FsbGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxFbnRy
eUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVu
RmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
Pik7CisKK3ByaXZhdGU6CisgICAgUmVzb2x2ZVVSSUNhbGxiYWNrcyhQYXNzUmVmUHRyPEVudHJ5
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CisgICAgUmVmUHRyPEVudHJ5Q2FsbGJhY2s+
IG1fc3VjY2Vzc0NhbGxiYWNrOworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgU3RyaW5nIG1fZmlsZVBhdGg7Cit9OworCiBj
bGFzcyBNZXRhZGF0YUNhbGxiYWNrcyA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8TWV0YWRhdGFDYWxsYmFja3M+IGNyZWF0
ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBlZDZkMDU3MWY0ZmQ5NDAwZmNmZjU1
MzhjNjdiYjE1YjJkM2I2Nzc3Li5jMjAwZjMyNWYxZDlhNDc3NjgyMTk3ZWJiM2RjNGM5MjQ3NTEw
OWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC05OSw2ICs5OSw4IEBACiAjaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQogI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgogI2luY2x1
ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJET01GaWxlU3lzdGVtQmFzZS5oIgorI2lu
Y2x1ZGUgIkVudHJ5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrLmgiCkBAIC03
NTMsNiArNzU1LDI5IEBAIHZvaWQgRE9NV2luZG93OjpyZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlCiAgICAgTG9jYWxGaWxlU3lz
dGVtOjpsb2NhbEZpbGVTeXN0ZW0oKS5yZXF1ZXN0RmlsZVN5c3RlbShkb2N1bWVudCwgZmlsZVN5
c3RlbVR5cGUsIHNpemUsIEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2ssIGRvY3VtZW50KSwgZmFsc2UpOwogfQogCit2b2lkIERPTVdpbmRv
dzo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShjb25zdCBTdHJpbmcmIHVyaSwgUGFzc1JlZlB0
cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOwor
ICAgIEtVUkwgcGFyc2VkVVJMKFBhcnNlZFVSTFN0cmluZywgdXJpKTsKKyAgICBpZiAoIUFzeW5j
RmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKSB8fCAhc2VjdXJpdHlPcmlnaW4tPmNhbkFjY2Vzc0Zp
bGVTeXN0ZW0oKSB8fCAhc2VjdXJpdHlPcmlnaW4tPmNhblJlcXVlc3QocGFyc2VkVVJMKSkgewor
ICAgICAgICBET01GaWxlU3lzdGVtOjpzY2hlZHVsZUNhbGxiYWNrKGRvY3VtZW50LCBlcnJvckNh
bGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNFQ1VSSVRZX0VSUikpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGU7Cisg
ICAgU3RyaW5nIGZpbGVQYXRoOworICAgIGlmICghcGFyc2VkVVJMLmlzVmFsaWQoKSB8fCAhRE9N
RmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChwYXJzZWRVUkwsIHR5cGUsIGZpbGVQ
YXRoKSkgeworICAgICAgICBET01GaWxlU3lzdGVtOjpzY2hlZHVsZUNhbGxiYWNrKGRvY3VtZW50
LCBlcnJvckNhbGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNZTlRBWF9FUlIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxG
aWxlU3lzdGVtKCkucmVhZEZpbGVTeXN0ZW0oZG9jdW1lbnQsIHR5cGUsIDAsIFJlc29sdmVVUklD
YWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGRvY3VtZW50
LCBmaWxlUGF0aCkpOworfQorCiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KERPTVdp
bmRvdzo6VEVNUE9SQVJZKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6VGVt
cG9yYXJ5KSwgZW51bV9taXNtYXRjaCk7CiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KERPTVdpbmRvdzo6UEVSU0lTVEVOVCkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0
ZW06OlBlcnNpc3RlbnQpLCBlbnVtX21pc21hdGNoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgK
aW5kZXggMDU4MTY1ZmI4ZGJhZWE5OTkxNjkwNWQ5YjRkYTg4Njg0MTBjODIyZi4uYWY5ODRjOThh
MWEzOThkMjk1NTU3ODU0NWFlODU4ZTI1MGFjZDFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
CkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEYXRhYmFz
ZUNhbGxiYWNrOwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEVsZW1lbnQ7CisgICAg
Y2xhc3MgRW50cnlDYWxsYmFjazsKICAgICBjbGFzcyBFcnJvckNhbGxiYWNrOwogICAgIGNsYXNz
IEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOwpAQCAtMzg3LDYg
KzM4OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIFBFUlNJU1RFTlQsCiAg
ICAgICAgIH07CiAgICAgICAgIHZvaWQgcmVxdWVzdEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcg
bG9uZyBzaXplLCBQYXNzUmVmUHRyPEZpbGVTeXN0ZW1DYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJy
b3JDYWxsYmFjaz4pOworICAgICAgICB2b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoY29u
c3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IGZkOWJjZTAxMTQyYjRiZTUwMTgxMzI4MjM0NmQzNzU3
ZDUxYWE2MjEuLmE5NDhhMDE4Zjk5OTMxN2RiNmUzNjk4OTdiNWFjZWZiNmJjOTg5ZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTE5NSw2ICsxOTUsNyBAQCBtb2R1bGUgd2luZG93
IHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVEVNUE9SQVJZID0gMDsKICAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgUEVSU0lTVEVOVCA9IDE7CiAgICAgICAgIFtFbmFibGVkQXRS
dW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQgcmVxdWVzdEZpbGVTeXN0ZW0oaW4gdW5zaWduZWQgc2hv
cnQgdHlwZSwgaW4gbG9uZyBsb25nIHNpemUsIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEZpbGVT
eXN0ZW1DYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEVy
cm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CisgICAgICAgIFtFbmFibGVkQXRSdW50aW1lPUZp
bGVTeXN0ZW1dIHZvaWQgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShpbiBET01TdHJpbmcgdXJp
LCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywg
aW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKIAog
ICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gRmxhZ3NDb25z
dHJ1Y3RvciBGbGFnczsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83740</attachid>
            <date>2011-02-24 16:12:58 -0800</date>
            <delta_ts>2011-02-25 12:10:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54774-20110224161257.patch</filename>
            <type>text/plain</type>
            <size>25589</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNjgzZjJjMzM3ZjU4NzlhNWNjMzNmM2E5OTBhNzJiOWEwMTM0MTVmLi4wOTU3Yjgz
ZDcyMTRjNGY5M2Q2MzhkN2FiMjk3NzhiN2IxMzc0ZmYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDItMTggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVu
dCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ3NzQKKworICAgICAgICBUZXN0
cyBmb3IgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5
c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmls
ZXN5c3RlbS9yZXNvbHZlLXVyaS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0
ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cGVjdGVk
QW5kUnVuTmV4dCk6CisgICAgICAgIChlcnJvckNhbGxiYWNrKToKKyAgICAgICAgKGNyZWF0ZVRl
c3RGaWxlKToKKyAgICAgICAgKCk6CisgICAgICAgIChhc3NlcnRJc0RpcmVjdG9yeSk6CisgICAg
ICAgIChhc3NlcnRJc0ZpbGUpOgorICAgICAgICAocnVuQmFzaWNUZXN0KToKKyAgICAgICAgKHJ1
bkhhbmRtYWRlVVJJKToKKyAgICAgICAgKHJ1bkJvZ3VzVVJJKToKKyAgICAgICAgKHJ1bldyb25n
UHJvdG9jb2wpOgorICAgICAgICAocnVuTm90RW5vdWdoU2xhc2hlcyk6CisgICAgICAgIChydW5O
b3RFbm91Z2hTbGFzaGVzMik6CisgICAgICAgIChydW5Vc2VCYWNrU2xhc2hlcy4pOgorICAgICAg
ICAocnVuVXNlQmFja1NsYXNoZXMpOgorICAgICAgICAocnVuRGlyZWN0b3J5Lik6CisgICAgICAg
IChydW5EaXJlY3RvcnkpOgorICAgICAgICAocnVuV2l0aFRyYWlsaW5nU2xhc2guKToKKyAgICAg
ICAgKHJ1bldpdGhUcmFpbGluZ1NsYXNoKToKKyAgICAgICAgKHJ1bk5leHRUZXN0KToKKyAgICAg
ICAgKGNsZWFudXBBbmRSdW5OZXh0KToKKyAgICAgICAgKGZpbGVTeXN0ZW1DYWxsYmFjayk6Cisg
ICAgICAgICh2YXIpOgorCiAyMDExLTAyLTIzICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVlZmNlNTFjYTliZDBjNDliOTk4YWVkYzJjM2MyMjNmZTU3ZWZkZmYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1Rlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1VUkkgdG8gb2J0YWluIGFuIEVudHJ5IGZyb20gYSBVUkkKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKKyogUmVzb2x2aW5nIGEgZ2VuZXJhdGVkIFVSSS4KK1BBU1MgZXhwZWN0ZWRQ
YXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNGaWxlIGlzIHRydWUKKyogUmVzb2x2aW5nIHRlc3Qg
ZmlsZSBieSBoYW5kCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRmls
ZSBpcyB0cnVlCisqIFJlc29sdmluZyBhIGNvbXBsZXRlbHkgYm9ndXMgVVJJLgorUEFTUyAKKyog
UmVzb2x2aW5nIGEgVVJJIHdpdGggdGhlIHdyb25nIHByb3RvY29sCitQQVNTIAorKiBSZXNvbHZp
bmcgYSBVUkkgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHR5cGUgYW5kIGZpbGUKK1BBU1MgCisqIFJl
c29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gcHJvdG9jb2wgYW5kIHR5cGUKK1BB
U1MgCisqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGJhY2tzbGFzaGVzCitQQVNTIGV4cGVjdGVkUGF0
aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRmlsZSBpcyB0cnVlCisqIFJlc29sdmUgYSBkaXJlY3Rv
cnkKK1BBU1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNEaXJlY3RvcnkgaXMg
dHJ1ZQorKiBSZXNvbHZlIGEgcGF0aCB1c2luZyBhIHRyYWlsaW5nIHNsYXNoCitQQVNTIGV4cGVj
dGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRGlyZWN0b3J5IGlzIHRydWUKKyogUmVzb2x2
aW5nIGEgcGVyc2lzdGVudCBVUkkuCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQ
QVNTIGlzRGlyZWN0b3J5IGlzIHRydWUKK0ZpbmlzaGVkIHJ1bm5pbmcgdGVzdHMuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmVhYmYxMWE5
NDZkMmFlNTRjOTUwNjdhMWE2ZTg2ZTJhMDU5Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwKQEAgLTAsMCArMSwxMyBAQAor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9mcy10ZXN0LXV0
aWwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9y
ZXNvbHZlLXVyaS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVyaS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wNmYyMmYxMzZkZTBhNjYwYTQ4NWFkN2RiZTViNDdjNjBhNGE4YTA4Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9y
ZXNvbHZlLXVyaS5qcwpAQCAtMCwwICsxLDE3MiBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHVzaW5n
IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkgdG8gb2J0YWluIGFuIEVudHJ5IGZyb20gYSBVUkki
KTsKKwordmFyIHRlc3RGaWxlTmFtZSA9ICcvdGVzdEZpbGUnOwordmFyIGZpbGVTeXN0ZW0gPSBu
dWxsOwordmFyIGV4cGVjdGVkQW5kUnVuTmV4dCA9IGZ1bmN0aW9uKCkgeyB0ZXN0UGFzc2VkKCIi
KTsgY2xlYW51cEFuZFJ1bk5leHQoKTsgfTsKKwordmFyIGV4cGVjdGVkUGF0aCA9IG51bGw7Cit2
YXIgYWN0dWFsUGF0aCA9IG51bGw7CisKK2Z1bmN0aW9uIGVycm9yQ2FsbGJhY2soZXJyb3IpIHsK
KyAgICBpZiAoZXJyb3IgJiYgZXJyb3IuY29kZSkKKyAgICAgICAgZGVidWcoIkVycm9yIG9jY3Vy
cmVkOiAiICsgZXJyb3IuY29kZSk7CisgICAgdGVzdEZhaWxlZCgiQmFpbGluZyBvdXQgZWFybHki
KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlVGVzdEZpbGUoY2Fs
bGJhY2spIHsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSh0ZXN0RmlsZU5hbWUsIHtjcmVh
dGU6dHJ1ZX0sIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0
UGF0aHNNYXRjaChleHBlY3RlZCwgYWN0dWFsKSB7CisgICAgZXhwZWN0ZWRQYXRoID0gZXhwZWN0
ZWQ7CisgICAgYWN0dWFsUGF0aCA9IGFjdHVhbDsKKyAgICBzaG91bGRCZSgiZXhwZWN0ZWRQYXRo
IiwgImFjdHVhbFBhdGgiKTsKK30KKwordmFyIGlzRGlyZWN0b3J5ID0gZmFsc2U7CitmdW5jdGlv
biBhc3NlcnRJc0RpcmVjdG9yeShlbnRyeSkgeworICAgIGlzRGlyZWN0b3J5ID0gZW50cnkuaXNE
aXJlY3Rvcnk7CisgICAgc2hvdWxkQmVUcnVlKCJpc0RpcmVjdG9yeSIpOworfQorCit2YXIgaXNG
aWxlID0gZmFsc2U7CitmdW5jdGlvbiBhc3NlcnRJc0ZpbGUoZW50cnkpIHsKKyAgICBpc0ZpbGUg
PSBlbnRyeS5pc0ZpbGU7CisgICAgc2hvdWxkQmVUcnVlKCJpc0ZpbGUiKTsKK30KKworLy8gVGVz
dCBib2R5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIHJ1bkJhc2ljVGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBS
ZXNvbHZpbmcgYSBnZW5lcmF0ZWQgVVJJLiIpOworICAgIGNyZWF0ZVRlc3RGaWxlKGZ1bmN0aW9u
KGVudHJ5KSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoZW50cnkudG9VUkko
KSwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYXNzZXJ0UGF0aHNNYXRjaChlbnRyeS5mdWxs
UGF0aCwgZS5mdWxsUGF0aCk7CisgICAgICAgICAgICBhc3NlcnRJc0ZpbGUoZSk7CisgICAgICAg
ICAgICBjbGVhbnVwQW5kUnVuTmV4dCgpOworICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsKKyAg
ICB9KTsKK30KKworZnVuY3Rpb24gcnVuSGFuZG1hZGVVUkkoKSB7CisgICAgZGVidWcoIiogUmVz
b2x2aW5nIHRlc3QgZmlsZSBieSBoYW5kIik7CisgICAgY3JlYXRlVGVzdEZpbGUoZnVuY3Rpb24o
ZW50cnkpIHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpm
aWxlOi8vL3RlbXBvcmFyeS90ZXN0RmlsZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGFz
c2VydFBhdGhzTWF0Y2godGVzdEZpbGVOYW1lLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFz
c2VydElzRmlsZShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAg
IH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5Cb2d1c1VSSSgp
IHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSSS4iKTsKKyAg
ICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmb28iLCBlcnJvckNhbGxiYWNrLCBleHBlY3Rl
ZEFuZFJ1bk5leHQpOworfQorCitmdW5jdGlvbiBydW5Xcm9uZ1Byb3RvY29sKCkgeworICAgIGRl
YnVnKCIqIFJlc29sdmluZyBhIFVSSSB3aXRoIHRoZSB3cm9uZyBwcm90b2NvbCIpOworICAgIHJl
c29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZpbGU6Ly8vZm9vL2Jhci9iYXoiLCBlcnJvckNhbGxi
YWNrLCBleHBlY3RlZEFuZFJ1bk5leHQpOworfQorCitmdW5jdGlvbiBydW5Ob3RFbm91Z2hTbGFz
aGVzKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdl
ZW4gdHlwZSBhbmQgZmlsZSIpOworICAgIGNyZWF0ZVRlc3RGaWxlKGZ1bmN0aW9uKGVudHJ5KSB7
CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZpbGVzeXN0ZW06ZmlsZTovLy90
ZW1wb3Jhcnl0ZXN0RmlsZSIsIGVycm9yQ2FsbGJhY2ssIGV4cGVjdGVkQW5kUnVuTmV4dCk7Cisg
ICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1bk5vdEVub3VnaFNsYXNoZXMyKCkgeworICAgIGRlYnVn
KCIqIFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gcHJvdG9jb2wgYW5kIHR5
cGUiKTsKKyAgICBjcmVhdGVUZXN0RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNv
bHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly90ZW1wb3JhcnkvdGVzdEZp
bGUiLCBlcnJvckNhbGxiYWNrLCBleHBlY3RlZEFuZFJ1bk5leHQpOworICAgIH0pOworfQorCitm
dW5jdGlvbiBydW5Vc2VCYWNrU2xhc2hlcygpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZlIGEgcGF0
aCB1c2luZyBiYWNrc2xhc2hlcyIpOworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3Rvcnko
ImZvbyIsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIGVudHJ5Lmdl
dEZpbGUoInRlc3RGaWxlIiwge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZikgeworICAgICAgICAg
ICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFy
eS9mb29cXHRlc3RGaWxlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIGFzc2VydFBh
dGhzTWF0Y2goIi9mb28vdGVzdEZpbGUiLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnRJc0ZpbGUoZSk7CisgICAgICAgICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKKyAg
ICAgICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsK
KyAgICB9LCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gcnVuRGlyZWN0b3J5KCkgewor
ICAgIGRlYnVnKCIqIFJlc29sdmUgYSBkaXJlY3RvcnkiKTsKKyAgICBmaWxlU3lzdGVtLnJvb3Qu
Z2V0RGlyZWN0b3J5KCJmb28iLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihlbnRyeSkgeworICAg
ICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9y
YXJ5L2ZvbyIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0Y2goIi9m
b28iLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRGlyZWN0b3J5KGUpOworICAg
ICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKKyAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7
CisgICAgfSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIHJ1bldpdGhUcmFpbGluZ1Ns
YXNoKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGEgdHJhaWxpbmcgc2xh
c2giKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28iLCB7Y3JlYXRlOnRy
dWV9LCBmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJ
KCJmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L2Zvby8iLCBmdW5jdGlvbihlKSB7CisgICAg
ICAgICAgICBhc3NlcnRQYXRoc01hdGNoKCIvZm9vIiwgZS5mdWxsUGF0aCk7CisgICAgICAgICAg
ICBhc3NlcnRJc0RpcmVjdG9yeShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7
CisgICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0sIGVycm9yQ2FsbGJhY2spOworfQor
CitmdW5jdGlvbiBydW5QZXJzaXN0ZW50VGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcg
YSBwZXJzaXN0ZW50IFVSSS4iKTsKKyAgICByZXF1ZXN0RmlsZVN5c3RlbShQRVJTSVNURU5ULCAx
MDAsIGZ1bmN0aW9uKGZzKSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoZnMu
cm9vdC50b1VSSSgpLCBmdW5jdGlvbihlbnRyeSkgeworICAgICAgICAgICAgYXNzZXJ0UGF0aHNN
YXRjaCgiLyIsIGVudHJ5LmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRGlyZWN0b3J5
KGVudHJ5KTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAgIH0sIGVy
cm9yQ2FsbGJhY2spOworICAgIH0pOworfQorCisvLyBFbmQgb2YgdGVzdCBib2R5IGZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIHRl
c3RzTGlzdCA9IFsKKyAgICBydW5CYXNpY1Rlc3QsCisgICAgcnVuSGFuZG1hZGVVUkksCisgICAg
cnVuQm9ndXNVUkksCisgICAgcnVuV3JvbmdQcm90b2NvbCwKKyAgICBydW5Ob3RFbm91Z2hTbGFz
aGVzLAorICAgIHJ1bk5vdEVub3VnaFNsYXNoZXMyLAorICAgIHJ1blVzZUJhY2tTbGFzaGVzLAor
ICAgIHJ1bkRpcmVjdG9yeSwKKyAgICBydW5XaXRoVHJhaWxpbmdTbGFzaCwKKyAgICBydW5QZXJz
aXN0ZW50VGVzdCwKK107Cit2YXIgdGVzdENvdW50ZXIgPSAwOworCitmdW5jdGlvbiBydW5OZXh0
VGVzdCgpIHsKKyAgICBpZiAodGVzdENvdW50ZXIgPT0gdGVzdHNMaXN0Lmxlbmd0aCkgeworICAg
ICAgICBkZWJ1ZygiRmluaXNoZWQgcnVubmluZyB0ZXN0cy4iKTsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSBlbHNlCisgICAgICAgIHRlc3RzTGlzdFt0ZXN0Q291bnRlcisrXSgpOwor
fQorCitmdW5jdGlvbiBjbGVhbnVwQW5kUnVuTmV4dCgpIHsKKyAgICByZW1vdmVBbGxJbkRpcmVj
dG9yeShmaWxlU3lzdGVtLnJvb3QsIHJ1bk5leHRUZXN0LCBydW5OZXh0VGVzdCk7Cit9CisKK2Z1
bmN0aW9uIGZpbGVTeXN0ZW1DYWxsYmFjayhmcykgeworICAgIGZpbGVTeXN0ZW0gPSBmczsKKyAg
ICBjbGVhbnVwQW5kUnVuTmV4dCgpOworfQorCitpZiAod2luZG93LnJlcXVlc3RGaWxlU3lzdGVt
KSB7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgIHJlcXVlc3RGaWxlU3lz
dGVtKHdpbmRvdy5URU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBlcnJvckNhbGxi
YWNrKTsKK30gZWxzZQorICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5c3RlbSBB
UEkgc3VwcG9ydC4iKTsKKword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggODg2NjE3MjQ0MmE5MWE0ODVlMjhkN2FlNTg3ZTFlMzAxMTNkYjYyNi4uODZkYzEx
MTM1ZTRiMTMwODZjZGVlYzM3ZjQ0MjcxZTEwZGJiNDkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDMyIEBACisyMDExLTAyLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBpXSBJ
bXBsZW1lbnQgTG9jYWxGaWxlU3lzdGVtLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Nzc0CisKKyAgICAg
ICAgU2VlIGh0dHA6Ly9kZXYudzMub3JnLzIwMDkvZGFwL2ZpbGUtc3lzdGVtL2ZpbGUtZGlyLXN5
cy5odG1sI21ldGhvZHMKKyAgICAgICAgZm9yIHRoZSBzcGVjIGltcGxlbWVudGVkIGJ5IHRoaXMg
cGF0Y2guCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwK
KworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTCk6CisgICAgICAgICog
ZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVN5c3Rl
bUNhbGxiYWNrcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVVSSUNhbGxiYWNrczo6UmVzb2x2ZVVS
SUNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpkaWRP
cGVuRmlsZVN5c3RlbSk6CisgICAgICAgICogZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmg6
CisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgICogZmlsZWFwaS9M
b2NhbEZpbGVTeXN0ZW0uaDoKKyAgICAgICAgUmVtb3ZlIHNpemUgYXJndW1lbnQgZnJvbSByZWFk
RmlsZVN5c3RlbSgpCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93OjpyZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKToKKyAgICAgICAgKiBw
YWdlL0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKwogMjAxMS0w
Mi0yMyAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5
c3RlbUJhc2UuY3BwCmluZGV4IGM0NjJjM2NlMDgzYWVlYTIxYmUyZmFmZDhkZmNkMmM5ZWM2ZWQ0
ZGEuLjk3ZTgxYzJlNjYwMjYyYmY4ZmEwNWIwMGUxODg4MGNkZjkyNjkxNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCkBAIC00OSw2ICs0OSwzOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6
OmtQZXJzaXN0ZW50UGF0aFByZWZpeFtdID0gInBlcnNpc3RlbnQiOworY29uc3Qgc2l6ZV90IERP
TUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoRE9N
RmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeCkgLSAxOworY29uc3QgY2hhciBE
T01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVmaXhbXSA9ICJ0ZW1wb3JhcnkiOwor
Y29uc3Qgc2l6ZV90IERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5UGF0aFByZWZpeExlbmd0
aCA9IHNpemVvZihET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVmaXgpIC0gMTsK
KworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwm
IHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcmIGZpbGVQYXRoKQorewor
ICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsK
KyAgICBTdHJpbmcgcGF0aCA9IG9yaWdpblVSTC5wYXRoKCk7CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpIHx8IHBhdGhbMF0gIT0gJy8nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcGF0aCA9
IHBhdGguc3Vic3RyaW5nKDEpOworCisgICAgaWYgKHBhdGguc3RhcnRzV2l0aChrVGVtcG9yYXJ5
UGF0aFByZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5
OworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa1RlbXBvcmFyeVBhdGhQcmVmaXhMZW5n
dGgpOworICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKGtQZXJzaXN0ZW50UGF0aFByZWZp
eCkpIHsKKyAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudDsKKyAgICAg
ICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKGtQZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChwYXRoLmlzRW1wdHko
KSB8fCBwYXRoWzBdICE9ICcvJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmlsZVBh
dGguc3dhcChwYXRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogRE9NRmlsZVN5c3RlbUJhc2U6
OkRPTUZpbGVTeXN0ZW1CYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+IGFzeW5jRmlsZVN5c3RlbSkKICAgICA6IG1fbmFtZShuYW1lKQogICAgICwgbV9h
c3luY0ZpbGVTeXN0ZW0oYXN5bmNGaWxlU3lzdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9E
T01GaWxlU3lzdGVtQmFzZS5oCmluZGV4IDY2ZjEzMzFhMjJjMDU1YWRjZjJmMmE2OGRiMGVhMzAw
ZGZjYTRkZjMuLmJmNjBiNmY2ZWY2Mzg4MmQ2YjhlNTZjNzNiOThiMzY2NTNjZTdkNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKQEAgLTQ3LDYgKzQ3LDcg
QEAgY2xhc3MgRW50cmllc0NhbGxiYWNrOwogY2xhc3MgRW50cnlCYXNlOwogY2xhc3MgRW50cnlD
YWxsYmFjazsKIGNsYXNzIEVycm9yQ2FsbGJhY2s7CitjbGFzcyBLVVJMOwogY2xhc3MgTWV0YWRh
dGFDYWxsYmFjazsKIGNsYXNzIFZvaWRDYWxsYmFjazsKIApAQCAtNTksNiArNjAsMTIgQEAgcHVi
bGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5ET01GaWxlU3lzdGVtQmFzZSgpOwogCisgICAgc3Rh
dGljIGNvbnN0IGNoYXIga1BlcnNpc3RlbnRQYXRoUHJlZml4W107CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBrUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGg7CisgICAgc3RhdGljIGNvbnN0IGNo
YXIga1RlbXBvcmFyeVBhdGhQcmVmaXhbXTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtUZW1w
b3JhcnlQYXRoUHJlZml4TGVuZ3RoOworICAgIHN0YXRpYyBib29sIGNyYWNrRmlsZVN5c3RlbVVS
TChjb25zdCBLVVJMJiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiwgU3RyaW5nJiBmaWxlUGF0aCk7
CisKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAg
ICBBc3luY0ZpbGVTeXN0ZW0qIGFzeW5jRmlsZVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5
bmNGaWxlU3lzdGVtLmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVT
eXN0ZW1DYWxsYmFja3MuY3BwCmluZGV4IDk2NjMzN2IxNzdkZmYxNWViYTM2M2ZhYTZmZjZjZWZk
NDNhNDZhZDcuLmQ5NzcxZTgzZTVhM2I2N2JkNzQyNzIyYWEzZGY1NmViOTFjN2Q2ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcApAQCAtMTky
LDYgKzE5Miw2MiBAQCB2b2lkIEZpbGVTeXN0ZW1DYWxsYmFja3M6OmRpZE9wZW5GaWxlU3lzdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luYwogICAgIG1fc3VjY2Vzc0NhbGxi
YWNrLmNsZWFyKCk7CiB9CiAKKy8vIFJlc29sdmVVUklDYWxsYmFja3MgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbmFtZXNwYWNlIHsK
KworY2xhc3MgRXJyb3JDYWxsYmFja1dyYXBwZXIgOiBwdWJsaWMgRXJyb3JDYWxsYmFjayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFja1dyYXBwZXI+IGNyZWF0
ZShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0sIFBhc3NSZWZQdHI8RW50cnlD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEVycm9yQ2FsbGJhY2tXcmFwcGVyKGZpbGVTeXN0ZW0sIHN1Y2Nlc3NDYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlRXZlbnQoRmlsZUVycm9yKik7CisKK3ByaXZhdGU6CisgICAgRXJyb3JDYWxsYmFj
a1dyYXBwZXIoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtLCBQYXNzUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQorICAgICAgICA6IG1fZmls
ZVN5c3RlbShmaWxlU3lzdGVtKQorICAgICAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3ND
YWxsYmFjaykKKyAgICAgICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKKyAgICAg
ICAgLCBtX2ZpbGVQYXRoKGZpbGVQYXRoKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RE9N
RmlsZVN5c3RlbT4gbV9maWxlU3lzdGVtOworICAgIFJlZlB0cjxFbnRyeUNhbGxiYWNrPiBtX3N1
Y2Nlc3NDYWxsYmFjazsKKyAgICBSZWZQdHI8RXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNr
OworICAgIFN0cmluZyBtX2ZpbGVQYXRoOworfTsKKworYm9vbCBFcnJvckNhbGxiYWNrV3JhcHBl
cjo6aGFuZGxlRXZlbnQoRmlsZUVycm9yKikKK3sKKyAgICBtX2ZpbGVTeXN0ZW0tPmdldEZpbGUo
bV9maWxlU3lzdGVtLT5yb290KCkuZ2V0KCksIG1fZmlsZVBhdGgsIDAsIG1fc3VjY2Vzc0NhbGxi
YWNrLCBtX2Vycm9yQ2FsbGJhY2spOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSAoYW5vbnltb3VzKQorCitQYXNzT3duUHRyPFJlc29sdmVVUklDYWxsYmFja3M+IFJlc29s
dmVVUklDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUmVzb2x2ZVVSSUNhbGxiYWNrcyhz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGZp
bGVQYXRoKSk7Cit9CisKK1Jlc29sdmVVUklDYWxsYmFja3M6OlJlc29sdmVVUklDYWxsYmFja3Mo
UGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNl
KGVycm9yQ2FsbGJhY2spCisgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2sp
CisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fZmlsZVBh
dGgoZmlsZVBhdGgpCit7Cit9CisKK3ZvaWQgUmVzb2x2ZVVSSUNhbGxiYWNrczo6ZGlkT3BlbkZp
bGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4g
YXN5bmNGaWxlU3lzdGVtKQoreworICAgIEFTU0VSVChhc3luY0ZpbGVTeXN0ZW0pOworICAgIFJl
ZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtID0gRE9NRmlsZVN5c3RlbTo6Y3JlYXRlKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgbmFtZSwgYXN5bmNGaWxlU3lzdGVtLmxlYWtQ
dHIoKSk7CisgICAgZmlsZVN5c3RlbS0+Z2V0RGlyZWN0b3J5KGZpbGVTeXN0ZW0tPnJvb3QoKS5n
ZXQoKSwgbV9maWxlUGF0aCwgMCwgbV9zdWNjZXNzQ2FsbGJhY2ssIEVycm9yQ2FsbGJhY2tXcmFw
cGVyOjpjcmVhdGUoZmlsZVN5c3RlbSwgbV9zdWNjZXNzQ2FsbGJhY2ssIG1fZXJyb3JDYWxsYmFj
aywgbV9maWxlUGF0aCkpOworfQorCiAvLyBNZXRhZGF0YUNhbGxiYWNrcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFBhc3NPd25Q
dHI8TWV0YWRhdGFDYWxsYmFja3M+IE1ldGFkYXRhQ2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0
cjxNZXRhZGF0YUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVN5c3RlbUNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVt
Q2FsbGJhY2tzLmgKaW5kZXggODMwMDBjMmRkM2MxZjgzNzFkYmMzNzIzOTUxNWFiY2YxMWFmMjE5
NS4uN2Y2ODYyNWFjOTI2OGY4ZTI1NDlkMWQ1YTg5MGQ4NGNjMDVmY2RkMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKQEAgLTQzLDEwICs0MywxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBc3luY0ZpbGVXcml0ZXI7CiBjbGFzcyBET01G
aWxlU3lzdGVtQmFzZTsKIGNsYXNzIERpcmVjdG9yeVJlYWRlckJhc2U7Ci1jbGFzcyBFcnJvckNh
bGxiYWNrOwogY2xhc3MgRW50cmllc0NhbGxiYWNrOwogY2xhc3MgRW50cnlBcnJheTsKIGNsYXNz
IEVudHJ5Q2FsbGJhY2s7CitjbGFzcyBFcnJvckNhbGxiYWNrOwogc3RydWN0IEZpbGVNZXRhZGF0
YTsKIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKIGNsYXNzIEZpbGVXcml0ZXJCYXNlOwpAQCAt
MTIzLDYgKzEyMywxOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9OwogCitjbGFzcyBSZXNvbHZlVVJJQ2Fs
bGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxSZXNvbHZlVVJJQ2FsbGJhY2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxF
bnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRP
cGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtPik7CisKK3ByaXZhdGU6CisgICAgUmVzb2x2ZVVSSUNhbGxiYWNrcyhQYXNzUmVmUHRyPEVu
dHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CisgICAgUmVmUHRyPEVudHJ5Q2FsbGJh
Y2s+IG1fc3VjY2Vzc0NhbGxiYWNrOworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgU3RyaW5nIG1fZmlsZVBhdGg7Cit9Owor
CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrcyA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFz
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8TWV0YWRhdGFDYWxsYmFja3M+IGNy
ZWF0ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcAppbmRleCA3
MjFmZGY1Y2I3YjBlZmMzMTE2ZThjYWFmYzJiYTZlNDU5ZWQ2NWIxLi42ODhkMTU1NTk1ZjU3MTE5
MmNmMzY4ZTA1OWYzZjY3NDY1ZjkwMmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2Nh
bEZpbGVTeXN0ZW0uY3BwCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lz
dGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoLCBjb25z
CiAgICAgQXN5bmNGaWxlU3lzdGVtOjpvcGVuRmlsZVN5c3RlbShiYXNlUGF0aCwgaWRlbnRpZmll
ciwgdHlwZSwgY3JlYXRlLCBjYWxsYmFja3MpOwogfQogCi12b2lkIExvY2FsRmlsZVN5c3RlbTo6
cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxl
U3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZywgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3Rl
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUg
dHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKIHsK
ICAgICAvLyBBc3luY0ZpbGVTeXN0ZW06Om9wZW5GaWxlU3lzdGVtIGNhbGxzIGNhbGxiYWNrcyBz
eW5jaHJvbm91c2x5LCBzbyB0aGUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBhc3luY2hyb25v
dXNseS4KICAgICBjb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm9wZW5GaWxl
U3lzdGVtLCBmaWxlU3lzdGVtQmFzZVBhdGgoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+
ZGF0YWJhc2VJZGVudGlmaWVyKCksIHR5cGUsIGZhbHNlLCBjYWxsYmFja3MpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCmluZGV4IDEyYTcwMTJkMzQ2NWI5ODdjZThk
OWE3OGY2NDZmYzI3NjFmY2M0YjYuLmJhZjcyZDlkMGMyNGRlN2FjOWRjYWNhMmVmZWFkMzIwMTdj
OTBmMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaApAQCAtNTQs
NyArNTQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIExvY2FsRmlsZVN5c3RlbSYgbG9jYWxGaWxl
U3lzdGVtKCk7CiAKICAgICAvLyBEb2VzIG5vdCBjcmVhdGUgdGhlIHJvb3QgcGF0aCBmb3IgZmls
ZSBzeXN0ZW0sIGp1c3QgcmVhZHMgaXQgaWYgYXZhaWxhYmxlLgotICAgIHZvaWQgcmVhZEZpbGVT
eXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgbG9u
ZyBsb25nIHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CisgICAg
dm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lz
dGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCiAgICAg
dm9pZCByZXF1ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxl
U3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+LCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKaW5kZXggZWQ2ZDA1NzFmNGZkOTQwMGZjZmY1NTM4YzY3YmIxNWIyZDNiNjc3Ny4u
OWU4YTdlYjI5MzgwMGFhMDA5ZjBhMjAzNzY4NjhhNWJhMjk3MzJjZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcApAQCAtOTksNiArOTksOCBAQAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkK
ICNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbUJhc2UuaCIKKyNpbmNsdWRlICJFbnRyeUNhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiRXJyb3JDYWxsYmFjay5oIgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgog
I2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgpAQCAtNzUzLDYgKzc1NSwyOSBAQCB2b2lk
IERPTVdpbmRvdzo6cmVxdWVzdEZpbGVTeXN0ZW0oaW50IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQ
YXNzUmVmUHRyPEZpbGVTeXN0ZQogICAgIExvY2FsRmlsZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVt
KCkucmVxdWVzdEZpbGVTeXN0ZW0oZG9jdW1lbnQsIGZpbGVTeXN0ZW1UeXBlLCBzaXplLCBGaWxl
U3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBk
b2N1bWVudCksIGZhbHNlKTsKIH0KIAordm9pZCBET01XaW5kb3c6OnJlc29sdmVMb2NhbEZpbGVT
eXN0ZW1VUkkoY29uc3QgU3RyaW5nJiB1cmksIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4gPSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBLVVJMIHBhcnNlZFVSTChQ
YXJzZWRVUkxTdHJpbmcsIHVyaSk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxh
YmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luLT5jYW5BY2Nlc3NGaWxlU3lzdGVtKCkgfHwgIXNlY3Vy
aXR5T3JpZ2luLT5jYW5SZXF1ZXN0KHBhcnNlZFVSTCkpIHsKKyAgICAgICAgRE9NRmlsZVN5c3Rl
bTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9yOjpj
cmVhdGUoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0cmluZyBmaWxlUGF0aDsK
KyAgICBpZiAoIXBhcnNlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZpbGVTeXN0ZW1CYXNlOjpjcmFj
a0ZpbGVTeXN0ZW1VUkwocGFyc2VkVVJMLCB0eXBlLCBmaWxlUGF0aCkpIHsKKyAgICAgICAgRE9N
RmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFjaywgRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTWU5UQVhfRVJSKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBMb2NhbEZpbGVTeXN0ZW06OmxvY2FsRmlsZVN5c3RlbSgpLnJlYWRGaWxl
U3lzdGVtKGRvY3VtZW50LCB0eXBlLCBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vz
c0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBkb2N1bWVudCwgZmlsZVBhdGgpKTsKK30KKwogQ09N
UElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlRFTVBPUkFSWSkgPT0gc3Rh
dGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSksIGVudW1fbWlzbWF0Y2gp
OwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5kb3c6OlBFUlNJU1RFTlQp
ID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVtOjpQZXJzaXN0ZW50KSwgZW51bV9t
aXNtYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDA1ODE2NWZiOGRiYWVhOTk5
MTY5MDVkOWI0ZGE4ODY4NDEwYzgyMmYuLmFmOTg0Yzk4YTFhMzk4ZDI5NTU1Nzg1NDVhZTg1OGUy
NTBhY2QxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDUsNiArNDUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKICAgICBjbGFzcyBE
b2N1bWVudDsKICAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CiAg
ICAgY2xhc3MgRXJyb3JDYWxsYmFjazsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNs
YXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKQEAgLTM4Nyw2ICszODgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICBQRVJTSVNURU5ULAogICAgICAgICB9OwogICAgICAgICB2b2lk
IHJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc1JlZlB0cjxG
aWxlU3lzdGVtQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICAgICAg
dm9pZCByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8
RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRl
eCBmZDliY2UwMTE0MmI0YmU1MDE4MTMyODIzNDZkMzc1N2Q1MWFhNjIxLi5hOTQ4YTAxOGY5OTkz
MTdkYjZlMzY5ODk3YjVhY2VmYjZiYzk4OWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
CkBAIC0xOTUsNiArMTk1LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IFRFTVBPUkFSWSA9IDA7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBF
UlNJU1RFTlQgPSAxOwogICAgICAgICBbRW5hYmxlZEF0UnVudGltZT1GaWxlU3lzdGVtXSB2b2lk
IHJlcXVlc3RGaWxlU3lzdGVtKGluIHVuc2lnbmVkIHNob3J0IHR5cGUsIGluIGxvbmcgbG9uZyBz
aXplLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBGaWxlU3lzdGVtQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJh
Y2spOworICAgICAgICBbRW5hYmxlZEF0UnVudGltZT1GaWxlU3lzdGVtXSB2b2lkIHJlc29sdmVM
b2NhbEZpbGVTeXN0ZW1VUkkoaW4gRE9NU3RyaW5nIHVyaSwgaW4gW0NhbGxiYWNrLCBPcHRpb25h
bF0gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxd
IEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CiAKICAgICAgICAgYXR0cmlidXRlIFtFbmFi
bGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIEZsYWdzQ29uc3RydWN0b3IgRmxhZ3M7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjQyYmNhYmI4ZjExYjhjYTcwYWI4NDQ1Nzgy
ZTQ0MjMxNDcyMDcwZi4uZmJjNGMwNjM4NmFkN2QxZTFkODY0ZmRjNGI2Yzc2YjEwNzg5NzcyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wMi0yNCAg
QWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbZmlsZWFwaV0gSW1wbGVtZW50IExvY2FsRmlsZVN5
c3RlbS5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDc3NAorCisgICAgICAgICogc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVh
ZEZpbGVTeXN0ZW0pOgorICAgICAgICBSZW1vdmVkIHNpemUgYXJndW1lbnQgdG8gcmVhZEZpbGVT
eXN0ZW0oKQorCiAyMDExLTAyLTIzICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzkzODcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5k
ZXggY2M4YzFkODQ1OWIxN2VkNWI2Yzc2MDEwOTdjY2ZlZDIxNTZkMDgzNC4uMzVlNGRlODI4OWQ5
MjU4MGJmNzJjYTZhZDMwMmE3NTI5MzFiYmQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNTcsMTIgKzU3
LDEyIEBAIExvY2FsRmlsZVN5c3RlbSYgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0ZW0o
KQogICAgIHJldHVybiAqbG9jYWxGaWxlU3lzdGVtOwogfQogCi12b2lkIExvY2FsRmlsZVN5c3Rl
bTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRG
aWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3Rl
bTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQogewogICAgIEFTU0VSVChjb250ZXh0ICYmIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsK
ICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9j
dW1lbnQtPmZyYW1lKCkpOwotICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0o
d2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBm
YWxzZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSkpOwor
ICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19j
YXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCAwLCBmYWxzZSwgbmV3IFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSkpOwogfQogCiB2b2lkIExvY2FsRmlsZVN5
c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
QXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83844</attachid>
            <date>2011-02-25 11:11:24 -0800</date>
            <delta_ts>2011-02-25 15:23:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54774-20110225111123.patch</filename>
            <type>text/plain</type>
            <size>25279</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNjgzZjJjMzM3ZjU4NzlhNWNjMzNmM2E5OTBhNzJiOWEwMTM0MTVmLi4xMjQ5NzRm
OTM1YjQ4YjEyN2EyZWQ0YjgzMTdiZDQwN2ZmZjVjMmViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTEtMDItMTggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVu
dCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ3NzQKKworICAgICAgICBUZXN0
cyBmb3IgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5
c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmls
ZXN5c3RlbS9yZXNvbHZlLXVyaS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0
ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpzOiBBZGRlZC4KKwogMjAxMS0wMi0yMyAgQWJo
aXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b2x2ZS11cmktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29s
dmUtdXJpLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWZjZTUxY2E5YmQwYzQ5Yjk5OGFlZGMy
YzNjMjIzZmU1N2VmZGZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc29sdmUtdXJpLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM2IEBACitUZXN0cyB1
c2luZyByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJIHRvIG9idGFpbiBhbiBFbnRyeSBmcm9tIGEg
VVJJCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisqIFJlc29sdmluZyBhIGdlbmVy
YXRlZCBVUkkuCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRmlsZSBp
cyB0cnVlCisqIFJlc29sdmluZyB0ZXN0IGZpbGUgYnkgaGFuZAorUEFTUyBleHBlY3RlZFBhdGgg
aXMgYWN0dWFsUGF0aAorUEFTUyBpc0ZpbGUgaXMgdHJ1ZQorKiBSZXNvbHZpbmcgYSBjb21wbGV0
ZWx5IGJvZ3VzIFVSSS4KK1BBU1MgCisqIFJlc29sdmluZyBhIFVSSSB3aXRoIHRoZSB3cm9uZyBw
cm90b2NvbAorUEFTUyAKKyogUmVzb2x2aW5nIGEgVVJJIHdpdGggbm8gc2xhc2ggYmV0d2VlbiB0
eXBlIGFuZCBmaWxlCitQQVNTIAorKiBSZXNvbHZpbmcgYSBVUkkgd2l0aCBubyBzbGFzaCBiZXR3
ZWVuIHByb3RvY29sIGFuZCB0eXBlCitQQVNTIAorKiBSZXNvbHZlIGEgcGF0aCB1c2luZyBiYWNr
c2xhc2hlcworUEFTUyBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBpc0ZpbGUgaXMg
dHJ1ZQorKiBSZXNvbHZlIGEgZGlyZWN0b3J5CitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQ
YXRoCitQQVNTIGlzRGlyZWN0b3J5IGlzIHRydWUKKyogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYSB0
cmFpbGluZyBzbGFzaAorUEFTUyBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBpc0Rp
cmVjdG9yeSBpcyB0cnVlCisqIFJlc29sdmluZyBhIHBlcnNpc3RlbnQgVVJJLgorUEFTUyBleHBl
Y3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBpc0RpcmVjdG9yeSBpcyB0cnVlCitGaW5pc2hl
ZCBydW5uaW5nIHRlc3RzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNv
bHZlLXVyaS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjZlYWJmMTFhOTQ2ZDJhZTU0Yzk1MDY3YTFhNmU4NmUyYTA1OWNkNQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVy
aS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcmVzb2x2ZS11cmkuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Njcmlw
dC10ZXN0cy9yZXNvbHZlLXVyaS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9zY3Jp
cHQtdGVzdHMvcmVzb2x2ZS11cmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZmMjJmMTM2ZGUwYTY2MGE0ODVh
ZDdkYmU1YjQ3YzYwYTRhOGEwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvcmVzb2x2ZS11cmkuanMKQEAgLTAsMCArMSwxNzIgQEAK
K2Rlc2NyaXB0aW9uKCJUZXN0cyB1c2luZyByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJIHRvIG9i
dGFpbiBhbiBFbnRyeSBmcm9tIGEgVVJJIik7CisKK3ZhciB0ZXN0RmlsZU5hbWUgPSAnL3Rlc3RG
aWxlJzsKK3ZhciBmaWxlU3lzdGVtID0gbnVsbDsKK3ZhciBleHBlY3RlZEFuZFJ1bk5leHQgPSBm
dW5jdGlvbigpIHsgdGVzdFBhc3NlZCgiIik7IGNsZWFudXBBbmRSdW5OZXh0KCk7IH07CisKK3Zh
ciBleHBlY3RlZFBhdGggPSBudWxsOwordmFyIGFjdHVhbFBhdGggPSBudWxsOworCitmdW5jdGlv
biBlcnJvckNhbGxiYWNrKGVycm9yKSB7CisgICAgaWYgKGVycm9yICYmIGVycm9yLmNvZGUpCisg
ICAgICAgIGRlYnVnKCJFcnJvciBvY2N1cnJlZDogIiArIGVycm9yLmNvZGUpOworICAgIHRlc3RG
YWlsZWQoIkJhaWxpbmcgb3V0IGVhcmx5Iik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1
bmN0aW9uIGNyZWF0ZVRlc3RGaWxlKGNhbGxiYWNrKSB7CisgICAgZmlsZVN5c3RlbS5yb290Lmdl
dEZpbGUodGVzdEZpbGVOYW1lLCB7Y3JlYXRlOnRydWV9LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFj
ayk7Cit9CisKK2Z1bmN0aW9uIGFzc2VydFBhdGhzTWF0Y2goZXhwZWN0ZWQsIGFjdHVhbCkgewor
ICAgIGV4cGVjdGVkUGF0aCA9IGV4cGVjdGVkOworICAgIGFjdHVhbFBhdGggPSBhY3R1YWw7Cisg
ICAgc2hvdWxkQmUoImV4cGVjdGVkUGF0aCIsICJhY3R1YWxQYXRoIik7Cit9CisKK3ZhciBpc0Rp
cmVjdG9yeSA9IGZhbHNlOworZnVuY3Rpb24gYXNzZXJ0SXNEaXJlY3RvcnkoZW50cnkpIHsKKyAg
ICBpc0RpcmVjdG9yeSA9IGVudHJ5LmlzRGlyZWN0b3J5OworICAgIHNob3VsZEJlVHJ1ZSgiaXNE
aXJlY3RvcnkiKTsKK30KKwordmFyIGlzRmlsZSA9IGZhbHNlOworZnVuY3Rpb24gYXNzZXJ0SXNG
aWxlKGVudHJ5KSB7CisgICAgaXNGaWxlID0gZW50cnkuaXNGaWxlOworICAgIHNob3VsZEJlVHJ1
ZSgiaXNGaWxlIik7Cit9CisKKy8vIFRlc3QgYm9keSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBydW5CYXNp
Y1Rlc3QoKSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgZ2VuZXJhdGVkIFVSSS4iKTsKKyAg
ICBjcmVhdGVUZXN0RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlTG9jYWxG
aWxlU3lzdGVtVVJJKGVudHJ5LnRvVVJJKCksIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGFz
c2VydFBhdGhzTWF0Y2goZW50cnkuZnVsbFBhdGgsIGUuZnVsbFBhdGgpOworICAgICAgICAgICAg
YXNzZXJ0SXNGaWxlKGUpOworICAgICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKKyAgICAg
ICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkhhbmRtYWRl
VVJJKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyB0ZXN0IGZpbGUgYnkgaGFuZCIpOworICAg
IGNyZWF0ZVRlc3RGaWxlKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZp
bGVTeXN0ZW1VUkkoImZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvdGVzdEZpbGUiLCBmdW5j
dGlvbihlKSB7CisgICAgICAgICAgICBhc3NlcnRQYXRoc01hdGNoKHRlc3RGaWxlTmFtZSwgZS5m
dWxsUGF0aCk7CisgICAgICAgICAgICBhc3NlcnRJc0ZpbGUoZSk7CisgICAgICAgICAgICBjbGVh
bnVwQW5kUnVuTmV4dCgpOworICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsKKyAgICB9KTsKK30K
KworZnVuY3Rpb24gcnVuQm9ndXNVUkkoKSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgY29t
cGxldGVseSBib2d1cyBVUkkuIik7CisgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZm9v
IiwgZXJyb3JDYWxsYmFjaywgZXhwZWN0ZWRBbmRSdW5OZXh0KTsKK30KKworZnVuY3Rpb24gcnVu
V3JvbmdQcm90b2NvbCgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBVUkkgd2l0aCB0aGUg
d3JvbmcgcHJvdG9jb2wiKTsKKyAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxlOi8v
L2Zvby9iYXIvYmF6IiwgZXJyb3JDYWxsYmFjaywgZXhwZWN0ZWRBbmRSdW5OZXh0KTsKK30KKwor
ZnVuY3Rpb24gcnVuTm90RW5vdWdoU2xhc2hlcygpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcg
YSBVUkkgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHR5cGUgYW5kIGZpbGUiKTsKKyAgICBjcmVhdGVU
ZXN0RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVt
VVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5dGVzdEZpbGUiLCBlcnJvckNhbGxiYWNr
LCBleHBlY3RlZEFuZFJ1bk5leHQpOworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5Ob3RFbm91
Z2hTbGFzaGVzMigpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBVUkkgd2l0aCBubyBzbGFz
aCBiZXR3ZWVuIHByb3RvY29sIGFuZCB0eXBlIik7CisgICAgY3JlYXRlVGVzdEZpbGUoZnVuY3Rp
b24oZW50cnkpIHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3Rl
bTpmaWxlOi8vdGVtcG9yYXJ5L3Rlc3RGaWxlIiwgZXJyb3JDYWxsYmFjaywgZXhwZWN0ZWRBbmRS
dW5OZXh0KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuVXNlQmFja1NsYXNoZXMoKSB7Cisg
ICAgZGVidWcoIiogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYmFja3NsYXNoZXMiKTsKKyAgICBmaWxl
U3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28iLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihl
bnRyeSkgeworICAgICAgICBlbnRyeS5nZXRGaWxlKCJ0ZXN0RmlsZSIsIHtjcmVhdGU6dHJ1ZX0s
IGZ1bmN0aW9uKGYpIHsKKyAgICAgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZp
bGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvZm9vXFx0ZXN0RmlsZSIsIGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgICAgICAgICBhc3NlcnRQYXRoc01hdGNoKCIvZm9vL3Rlc3RGaWxlIiwgZS5mdWxs
UGF0aCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0SXNGaWxlKGUpOworICAgICAgICAgICAgICAg
IGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsKKyAg
ICAgICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1
bmN0aW9uIHJ1bkRpcmVjdG9yeSgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZlIGEgZGlyZWN0b3J5
Iik7CisgICAgZmlsZVN5c3RlbS5yb290LmdldERpcmVjdG9yeSgiZm9vIiwge2NyZWF0ZTp0cnVl
fSwgZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgi
ZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS9mb28iLCBmdW5jdGlvbihlKSB7CisgICAgICAg
ICAgICBhc3NlcnRQYXRoc01hdGNoKCIvZm9vIiwgZS5mdWxsUGF0aCk7CisgICAgICAgICAgICBh
c3NlcnRJc0RpcmVjdG9yeShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7Cisg
ICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0sIGVycm9yQ2FsbGJhY2spOworfQorCitm
dW5jdGlvbiBydW5XaXRoVHJhaWxpbmdTbGFzaCgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZlIGEg
cGF0aCB1c2luZyBhIHRyYWlsaW5nIHNsYXNoIik7CisgICAgZmlsZVN5c3RlbS5yb290LmdldERp
cmVjdG9yeSgiZm9vIiwge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAg
cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS9m
b28vIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYXNzZXJ0UGF0aHNNYXRjaCgiL2ZvbyIs
IGUuZnVsbFBhdGgpOworICAgICAgICAgICAgYXNzZXJ0SXNEaXJlY3RvcnkoZSk7CisgICAgICAg
ICAgICBjbGVhbnVwQW5kUnVuTmV4dCgpOworICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsKKyAg
ICB9LCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gcnVuUGVyc2lzdGVudFRlc3QoKSB7
CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgcGVyc2lzdGVudCBVUkkuIik7CisgICAgcmVxdWVz
dEZpbGVTeXN0ZW0oUEVSU0lTVEVOVCwgMTAwLCBmdW5jdGlvbihmcykgeworICAgICAgICByZXNv
bHZlTG9jYWxGaWxlU3lzdGVtVVJJKGZzLnJvb3QudG9VUkkoKSwgZnVuY3Rpb24oZW50cnkpIHsK
KyAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0Y2goIi8iLCBlbnRyeS5mdWxsUGF0aCk7CisgICAg
ICAgICAgICBhc3NlcnRJc0RpcmVjdG9yeShlbnRyeSk7CisgICAgICAgICAgICBjbGVhbnVwQW5k
UnVuTmV4dCgpOworICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTsKKyAgICB9KTsKK30KKworLy8g
RW5kIG9mIHRlc3QgYm9keSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK3ZhciB0ZXN0c0xpc3QgPSBbCisgICAgcnVuQmFzaWNUZXN0LAor
ICAgIHJ1bkhhbmRtYWRlVVJJLAorICAgIHJ1bkJvZ3VzVVJJLAorICAgIHJ1bldyb25nUHJvdG9j
b2wsCisgICAgcnVuTm90RW5vdWdoU2xhc2hlcywKKyAgICBydW5Ob3RFbm91Z2hTbGFzaGVzMiwK
KyAgICBydW5Vc2VCYWNrU2xhc2hlcywKKyAgICBydW5EaXJlY3RvcnksCisgICAgcnVuV2l0aFRy
YWlsaW5nU2xhc2gsCisgICAgcnVuUGVyc2lzdGVudFRlc3QsCitdOwordmFyIHRlc3RDb3VudGVy
ID0gMDsKKworZnVuY3Rpb24gcnVuTmV4dFRlc3QoKSB7CisgICAgaWYgKHRlc3RDb3VudGVyID09
IHRlc3RzTGlzdC5sZW5ndGgpIHsKKyAgICAgICAgZGVidWcoIkZpbmlzaGVkIHJ1bm5pbmcgdGVz
dHMuIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0gZWxzZQorICAgICAgICB0ZXN0
c0xpc3RbdGVzdENvdW50ZXIrK10oKTsKK30KKworZnVuY3Rpb24gY2xlYW51cEFuZFJ1bk5leHQo
KSB7CisgICAgcmVtb3ZlQWxsSW5EaXJlY3RvcnkoZmlsZVN5c3RlbS5yb290LCBydW5OZXh0VGVz
dCwgcnVuTmV4dFRlc3QpOworfQorCitmdW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsK
KyAgICBmaWxlU3lzdGVtID0gZnM7CisgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKK30KKworaWYg
KHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgeworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKyAgICByZXF1ZXN0RmlsZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLCAxMDAsIGZpbGVT
eXN0ZW1DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit9IGVsc2UKKyAgICBkZWJ1ZygiVGhpcyB0
ZXN0IHJlcXVpcmVzIEZpbGVTeXN0ZW0gQVBJIHN1cHBvcnQuIik7CisKK3dpbmRvdy5zdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDg4NjYxNzI0NDJhOTFhNDg1ZTI4ZDdh
ZTU4N2UxZTMwMTEzZGI2MjYuLjg2ZGMxMTEzNWU0YjEzMDg2Y2RlZWMzN2Y0NDI3MWUxMGRiYjQ5
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMS0wMi0xOCAgQWRhbSBLbGVpbiAg
PGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbZmlsZWFwaV0gSW1wbGVtZW50IExvY2FsRmlsZVN5c3RlbS5yZXNvbHZl
TG9jYWxGaWxlU3lzdGVtVVJJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NDc3NAorCisgICAgICAgIFNlZSBodHRwOi8vZGV2LnczLm9yZy8yMDA5L2Rh
cC9maWxlLXN5c3RlbS9maWxlLWRpci1zeXMuaHRtbCNtZXRob2RzCisgICAgICAgIGZvciB0aGUg
c3BlYyBpbXBsZW1lbnRlZCBieSB0aGlzIHBhdGNoLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZmls
ZXN5c3RlbS9yZXNvbHZlLXVyaS5odG1sCisKKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0
ZW1CYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW1CYXNlOjpjcmFja0Zp
bGVTeXN0ZW1VUkwpOgorICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaDoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29s
dmVVUklDYWxsYmFja3M6OlJlc29sdmVVUklDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb2x2ZVVSSUNhbGxiYWNrczo6ZGlkT3BlbkZpbGVTeXN0ZW0pOgorICAgICAgICAqIGZpbGVh
cGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0
ZW0pOgorICAgICAgICAqIGZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmg6CisgICAgICAgIFJlbW92
ZSBzaXplIGFyZ3VtZW50IGZyb20gcmVhZEZpbGVTeXN0ZW0oKQorICAgICAgICAqIHBhZ2UvRE9N
V2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cmVzb2x2ZUxvY2FsRmls
ZVN5c3RlbVVSSSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5pZGw6CisKIDIwMTEtMDItMjMgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcAppbmRleCBjNDYyYzNjZTA4M2Fl
ZWEyMWJlMmZhZmQ4ZGZjZDJjOWVjNmVkNGRhLi45N2U4MWMyZTY2MDI2MmJmOGZhMDViMDBlMTg4
ODBjZGY5MjY5MTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVT
eXN0ZW1CYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1C
YXNlLmNwcApAQCAtNDksNiArNDksMzggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25z
dCBjaGFyIERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXhbXSA9ICJwZXJz
aXN0ZW50IjsKK2NvbnN0IHNpemVfdCBET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRo
UHJlZml4TGVuZ3RoID0gc2l6ZW9mKERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQ
cmVmaXgpIC0gMTsKK2NvbnN0IGNoYXIgRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3JhcnlQYXRo
UHJlZml4W10gPSAidGVtcG9yYXJ5IjsKK2NvbnN0IHNpemVfdCBET01GaWxlU3lzdGVtQmFzZTo6
a1RlbXBvcmFyeVBhdGhQcmVmaXhMZW5ndGggPSBzaXplb2YoRE9NRmlsZVN5c3RlbUJhc2U6OmtU
ZW1wb3JhcnlQYXRoUHJlZml4KSAtIDE7CisKK2Jvb2wgRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNr
RmlsZVN5c3RlbVVSTChjb25zdCBLVVJMJiB1cmwsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSYgdHlw
ZSwgU3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICBpZiAoIXVybC5wcm90b2NvbElzKCJmaWxlc3lz
dGVtIikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEtVUkwgb3JpZ2luVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsLnBhdGgoKSk7CisgICAgU3RyaW5nIHBhdGggPSBvcmlnaW5VUkwucGF0
aCgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCBwYXRoWzBdICE9ICcvJykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKKworICAgIGlmIChw
YXRoLnN0YXJ0c1dpdGgoa1RlbXBvcmFyeVBhdGhQcmVmaXgpKSB7CisgICAgICAgIHR5cGUgPSBB
c3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeTsKKyAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5n
KGtUZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoKTsKKyAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRz
V2l0aChrUGVyc2lzdGVudFBhdGhQcmVmaXgpKSB7CisgICAgICAgIHR5cGUgPSBBc3luY0ZpbGVT
eXN0ZW06OlBlcnNpc3RlbnQ7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhrUGVyc2lz
dGVudFBhdGhQcmVmaXhMZW5ndGgpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAnLycpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZpbGVQYXRoLnN3YXAocGF0aCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIERPTUZpbGVTeXN0ZW1CYXNlOjpET01GaWxlU3lzdGVtQmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCiAgICAg
OiBtX25hbWUobmFtZSkKICAgICAsIG1fYXN5bmNGaWxlU3lzdGVtKGFzeW5jRmlsZVN5c3RlbSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuaAppbmRleCA2NmYxMzMx
YTIyYzA1NWFkY2YyZjJhNjhkYjBlYTMwMGRmY2E0ZGYzLi5iZjYwYjZmNmVmNjM4ODJkNmI4ZTU2
YzczYjk4YjM2NjUzY2U3ZDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RP
TUZpbGVTeXN0ZW1CYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtQmFzZS5oCkBAIC00Nyw2ICs0Nyw3IEBAIGNsYXNzIEVudHJpZXNDYWxsYmFjazsKIGNsYXNz
IEVudHJ5QmFzZTsKIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CiBjbGFzcyBFcnJvckNhbGxiYWNrOwor
Y2xhc3MgS1VSTDsKIGNsYXNzIE1ldGFkYXRhQ2FsbGJhY2s7CiBjbGFzcyBWb2lkQ2FsbGJhY2s7
CiAKQEAgLTU5LDYgKzYwLDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+RE9NRmls
ZVN5c3RlbUJhc2UoKTsKIAorICAgIHN0YXRpYyBjb25zdCBjaGFyIGtQZXJzaXN0ZW50UGF0aFBy
ZWZpeFtdOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1BlcnNpc3RlbnRQYXRoUHJlZml4TGVu
Z3RoOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtUZW1wb3JhcnlQYXRoUHJlZml4W107CisgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBrVGVtcG9yYXJ5UGF0aFByZWZpeExlbmd0aDsKKyAgICBzdGF0
aWMgYm9vbCBjcmFja0ZpbGVTeXN0ZW1VUkwoY29uc3QgS1VSTCYsIEFzeW5jRmlsZVN5c3RlbTo6
VHlwZSYsIFN0cmluZyYgZmlsZVBhdGgpOworCiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgQXN5bmNGaWxlU3lzdGVtKiBhc3luY0ZpbGVTeXN0
ZW0oKSBjb25zdCB7IHJldHVybiBtX2FzeW5jRmlsZVN5c3RlbS5nZXQoKTsgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcAppbmRleCA5NjYzMzdi
MTc3ZGZmMTVlYmEzNjNmYWE2ZmY2Y2VmZDQzYTQ2YWQ3Li4xZjhiNGUxZTY5YmZmOTJmOTY1MGEw
NmE3N2NkMmE2MDA0ZjJkYzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVTeXN0ZW1DYWxsYmFja3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5
c3RlbUNhbGxiYWNrcy5jcHAKQEAgLTE5Miw2ICsxOTIsNjUgQEAgdm9pZCBGaWxlU3lzdGVtQ2Fs
bGJhY2tzOjpkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8
QXN5bmMKICAgICBtX3N1Y2Nlc3NDYWxsYmFjay5jbGVhcigpOwogfQogCisvLyBSZXNvbHZlVVJJ
Q2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEVycm9yQ2FsbGJhY2tXcmFwcGVyIDog
cHVibGljIEVycm9yQ2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2tXcmFwcGVyPiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxl
U3lzdGVtLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1Jl
ZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBjb25zdCBTdHJpbmcmIGZpbGVQYXRo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFcnJvckNhbGxiYWNrV3JhcHBl
cihmaWxlU3lzdGVtLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGZpbGVQYXRoKSk7
CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KEZpbGVFcnJvciogZXJyb3Ip
CisgICAgeworICAgICAgICBBU1NFUlQoZXJyb3IpOworICAgICAgICAvLyBGSVhNRTogT25seSBj
aGVjayBmb3IgVFlQRV9NSVNNQVRDSF9FUlIgb25jZSBDaHJvbWl1bSBpcyBmaXhlZCB0byByZXR1
cm4gdGhhdCBhcyByZXF1aXJlZCBieSB0aGUgc3BlYy4KKyAgICAgICAgaWYgKGVycm9yLT5jb2Rl
KCkgPT0gRmlsZUVycm9yOjpUWVBFX01JU01BVENIX0VSUiB8fCBlcnJvci0+Y29kZSgpID09IEZp
bGVFcnJvcjo6SU5WQUxJRF9TVEFURV9FUlIpCisgICAgICAgICAgICBtX2ZpbGVTeXN0ZW0tPmdl
dEZpbGUobV9maWxlU3lzdGVtLT5yb290KCkuZ2V0KCksIG1fZmlsZVBhdGgsIDAsIG1fc3VjY2Vz
c0NhbGxiYWNrLCBtX2Vycm9yQ2FsbGJhY2spOworICAgICAgICBlbHNlIGlmIChtX2Vycm9yQ2Fs
bGJhY2spCisgICAgICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGVycm9yKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIEVycm9yQ2FsbGJh
Y2tXcmFwcGVyKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5c3RlbSwgUGFzc1JlZlB0
cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICAgICAgOiBtX2Zp
bGVTeXN0ZW0oZmlsZVN5c3RlbSkKKyAgICAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNz
Q2FsbGJhY2spCisgICAgICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCisgICAg
ICAgICwgbV9maWxlUGF0aChmaWxlUGF0aCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPERP
TUZpbGVTeXN0ZW0+IG1fZmlsZVN5c3RlbTsKKyAgICBSZWZQdHI8RW50cnlDYWxsYmFjaz4gbV9z
dWNjZXNzQ2FsbGJhY2s7CisgICAgUmVmUHRyPEVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFj
azsKKyAgICBTdHJpbmcgbV9maWxlUGF0aDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKK1Bhc3NP
d25QdHI8UmVzb2x2ZVVSSUNhbGxiYWNrcz4gUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKFBh
c3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBSZXNvbHZlVVJJQ2FsbGJhY2tzKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjaywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZmlsZVBhdGgpKTsKK30KKworUmVzb2x2ZVVS
SUNhbGxiYWNrczo6UmVzb2x2ZVVSSUNhbGxiYWNrcyhQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGZpbGVQYXRo
KQorICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UoZXJyb3JDYWxsYmFjaykKKyAgICAsIG1f
c3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAsIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dChjb250ZXh0KQorICAgICwgbV9maWxlUGF0aChmaWxlUGF0aCkKK3sKK30KKwordm9p
ZCBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBhc3luY0ZpbGVTeXN0ZW0pCit7CisgICAg
QVNTRVJUKGFzeW5jRmlsZVN5c3RlbSk7CisgICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVT
eXN0ZW0gPSBET01GaWxlU3lzdGVtOjpjcmVhdGUobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpLCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0ubGVha1B0cigpKTsKKyAgICBmaWxlU3lzdGVtLT5n
ZXREaXJlY3RvcnkoZmlsZVN5c3RlbS0+cm9vdCgpLmdldCgpLCBtX2ZpbGVQYXRoLCAwLCBtX3N1
Y2Nlc3NDYWxsYmFjaywgRXJyb3JDYWxsYmFja1dyYXBwZXI6OmNyZWF0ZShmaWxlU3lzdGVtLCBt
X3N1Y2Nlc3NDYWxsYmFjaywgbV9lcnJvckNhbGxiYWNrLCBtX2ZpbGVQYXRoKSk7Cit9CisKIC8v
IE1ldGFkYXRhQ2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUGFzc093blB0cjxNZXRhZGF0YUNhbGxiYWNrcz4gTWV0
YWRhdGFDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmggYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAppbmRleCA4MzAwMGMy
ZGQzYzFmODM3MWRiYzM3MjM5NTE1YWJjZjExYWYyMTk1Li43ZjY4NjI1YWM5MjY4ZjhlMjU0OWQx
ZDVhODkwZDg0Y2MwNWZjZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVTeXN0ZW1DYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0
ZW1DYWxsYmFja3MuaApAQCAtNDMsMTAgKzQzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEFzeW5jRmlsZVdyaXRlcjsKIGNsYXNzIERPTUZpbGVTeXN0ZW1CYXNlOwogY2xhc3MgRGly
ZWN0b3J5UmVhZGVyQmFzZTsKLWNsYXNzIEVycm9yQ2FsbGJhY2s7CiBjbGFzcyBFbnRyaWVzQ2Fs
bGJhY2s7CiBjbGFzcyBFbnRyeUFycmF5OwogY2xhc3MgRW50cnlDYWxsYmFjazsKK2NsYXNzIEVy
cm9yQ2FsbGJhY2s7CiBzdHJ1Y3QgRmlsZU1ldGFkYXRhOwogY2xhc3MgRmlsZVN5c3RlbUNhbGxi
YWNrOwogY2xhc3MgRmlsZVdyaXRlckJhc2U7CkBAIC0xMjMsNiArMTIzLDE4IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKIH07CiAKK2NsYXNzIFJlc29sdmVVUklDYWxsYmFja3MgOiBwdWJsaWMgRmlsZVN5c3Rl
bUNhbGxiYWNrc0Jhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlc29sdmVV
UklDYWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRy
PEVycm9yQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+KTsKKworcHJpdmF0ZToKKyAgICBS
ZXNvbHZlVVJJQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKTsKKyAgICBSZWZQdHI8RW50cnlDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7Cisg
ICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKKyAgICBTdHJpbmcgbV9maWxlUGF0aDsKK307CisKIGNsYXNzIE1ldGFkYXRhQ2FsbGJhY2tz
IDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxNZXRhZGF0YUNhbGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8TWV0YWRhdGFD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwCmluZGV4IDcyMWZkZjVjYjdiMGVmYzMxMTZlOGNhYWZj
MmJhNmU0NTllZDY1YjEuLjY4OGQxNTU1OTVmNTcxMTkyY2YzNjhlMDU5ZjNmNjc0NjVmOTAyYTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKQEAgLTgxLDcg
KzgxLDcgQEAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnMKICAgICBBc3luY0ZpbGVTeXN0ZW06Om9w
ZW5GaWxlU3lzdGVtKGJhc2VQYXRoLCBpZGVudGlmaWVyLCB0eXBlLCBjcmVhdGUsIGNhbGxiYWNr
cyk7CiB9CiAKLXZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBs
b25nLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9p
ZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewogICAgIC8vIEFzeW5jRmlsZVN5c3RlbTo6
b3BlbkZpbGVTeXN0ZW0gY2FsbHMgY2FsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZSBtZXRo
b2QgbmVlZHMgdG8gYmUgY2FsbGVkIGFzeW5jaHJvbm91c2x5LgogICAgIGNvbnRleHQtPnBvc3RU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW0sIGZpbGVTeXN0ZW1CYXNlUGF0
aCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgdHlw
ZSwgZmFsc2UsIGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9Mb2NhbEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lz
dGVtLmgKaW5kZXggMTJhNzAxMmQzNDY1Yjk4N2NlOGQ5YTc4ZjY0NmZjMjc2MWZjYzRiNi4uYmFm
NzJkOWQwYzI0ZGU3YWM5ZGNhY2EyZWZlYWQzMjAxN2M5MGYyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgTG9jYWxGaWxlU3lzdGVtJiBsb2NhbEZpbGVTeXN0ZW0oKTsKIAogICAgIC8vIERvZXMg
bm90IGNyZWF0ZSB0aGUgcm9vdCBwYXRoIGZvciBmaWxlIHN5c3RlbSwganVzdCByZWFkcyBpdCBp
ZiBhdmFpbGFibGUuCi0gICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAgICB2b2lkIHJlYWRGaWxlU3lzdGVtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAKICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBz
aXplLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4sIGJvb2wgc3luY2hyb25v
dXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBlZDZkMDU3MWY0
ZmQ5NDAwZmNmZjU1MzhjNjdiYjE1YjJkM2I2Nzc3Li45ZThhN2ViMjkzODAwYWEwMDlmMGEyMDM3
Njg2OGE1YmEyOTczMmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC05OSw2ICs5
OSw4IEBACiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJET01GaWxlU3lzdGVt
QmFzZS5oIgorI2luY2x1ZGUgIkVudHJ5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJFcnJvckNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxi
YWNrLmgiCkBAIC03NTMsNiArNzU1LDI5IEBAIHZvaWQgRE9NV2luZG93OjpyZXF1ZXN0RmlsZVN5
c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlCiAgICAg
TG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0ZW0oKS5yZXF1ZXN0RmlsZVN5c3RlbShkb2N1
bWVudCwgZmlsZVN5c3RlbVR5cGUsIHNpemUsIEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZShz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGRvY3VtZW50KSwgZmFsc2UpOwogfQogCit2
b2lkIERPTVdpbmRvdzo6cmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShjb25zdCBTdHJpbmcmIHVy
aSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0
eU9yaWdpbigpOworICAgIEtVUkwgcGFyc2VkVVJMKFBhcnNlZFVSTFN0cmluZywgdXJpKTsKKyAg
ICBpZiAoIUFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKSB8fCAhc2VjdXJpdHlPcmlnaW4t
PmNhbkFjY2Vzc0ZpbGVTeXN0ZW0oKSB8fCAhc2VjdXJpdHlPcmlnaW4tPmNhblJlcXVlc3QocGFy
c2VkVVJMKSkgeworICAgICAgICBET01GaWxlU3lzdGVtOjpzY2hlZHVsZUNhbGxiYWNrKGRvY3Vt
ZW50LCBlcnJvckNhbGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OlNFQ1VSSVRZ
X0VSUikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQXN5bmNGaWxlU3lzdGVtOjpU
eXBlIHR5cGU7CisgICAgU3RyaW5nIGZpbGVQYXRoOworICAgIGlmICghcGFyc2VkVVJMLmlzVmFs
aWQoKSB8fCAhRE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTChwYXJzZWRVUkws
IHR5cGUsIGZpbGVQYXRoKSkgeworICAgICAgICBET01GaWxlU3lzdGVtOjpzY2hlZHVsZUNhbGxi
YWNrKGRvY3VtZW50LCBlcnJvckNhbGxiYWNrLCBGaWxlRXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6
OlNZTlRBWF9FUlIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIExvY2FsRmlsZVN5
c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCkucmVhZEZpbGVTeXN0ZW0oZG9jdW1lbnQsIHR5cGUsIFJl
c29sdmVVUklDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ss
IGRvY3VtZW50LCBmaWxlUGF0aCkpOworfQorCiBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KERPTVdpbmRvdzo6VEVNUE9SQVJZKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KEFzeW5jRmlsZVN5
c3RlbTo6VGVtcG9yYXJ5KSwgZW51bV9taXNtYXRjaCk7CiBDT01QSUxFX0FTU0VSVChzdGF0aWNf
Y2FzdDxpbnQ+KERPTVdpbmRvdzo6UEVSU0lTVEVOVCkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3lu
Y0ZpbGVTeXN0ZW06OlBlcnNpc3RlbnQpLCBlbnVtX21pc21hdGNoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmgKaW5kZXggMDU4MTY1ZmI4ZGJhZWE5OTkxNjkwNWQ5YjRkYTg4Njg0MTBjODIyZi4u
YWY5ODRjOThhMWEzOThkMjk1NTU3ODU0NWFlODU4ZTI1MGFjZDFhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBEYXRhYmFzZUNhbGxiYWNrOwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEVsZW1l
bnQ7CisgICAgY2xhc3MgRW50cnlDYWxsYmFjazsKICAgICBjbGFzcyBFcnJvckNhbGxiYWNrOwog
ICAgIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgICAgY2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOwpA
QCAtMzg3LDYgKzM4OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIFBFUlNJ
U1RFTlQsCiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgcmVxdWVzdEZpbGVTeXN0ZW0oaW50IHR5
cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyPEZpbGVTeXN0ZW1DYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4pOworICAgICAgICB2b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1VUkkoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0
cjxFcnJvckNhbGxiYWNrPik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IGZkOWJjZTAxMTQyYjRiZTUwMTgxMzI4
MjM0NmQzNzU3ZDUxYWE2MjEuLmE5NDhhMDE4Zjk5OTMxN2RiNmUzNjk4OTdiNWFjZWZiNmJjOTg5
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTE5NSw2ICsxOTUsNyBAQCBtb2R1
bGUgd2luZG93IHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVEVNUE9SQVJZID0gMDsK
ICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUEVSU0lTVEVOVCA9IDE7CiAgICAgICAgIFtF
bmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQgcmVxdWVzdEZpbGVTeXN0ZW0oaW4gdW5z
aWduZWQgc2hvcnQgdHlwZSwgaW4gbG9uZyBsb25nIHNpemUsIGluIFtDYWxsYmFjaywgT3B0aW9u
YWxdIEZpbGVTeXN0ZW1DYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0
aW9uYWxdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CisgICAgICAgIFtFbmFibGVkQXRS
dW50aW1lPUZpbGVTeXN0ZW1dIHZvaWQgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShpbiBET01T
dHJpbmcgdXJpLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxi
YWNrKTsKIAogICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0g
RmxhZ3NDb25zdHJ1Y3RvciBGbGFnczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA2NDJiY2FiYjhmMTFiOGNhNzBhYjg0NDU3ODJlNDQyMzE0NzIwNzBmLi5mYmM0YzA2Mzg2
YWQ3ZDFlMWQ4NjRmZGM0YjZjNzZiMTA3ODk3NzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTAyLTI0ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtmaWxlYXBpXSBJbXBsZW1lbnQgTG9jYWxGaWxlU3lzdGVtLnJlc29sdmVMb2NhbEZpbGVTeXN0
ZW1VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0
Nzc0CisKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgIFJl
bW92ZWQgc2l6ZSBhcmd1bWVudCB0byByZWFkRmlsZVN5c3RlbSgpCisKIDIwMTEtMDItMjMgIEtl
bm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI3OTM4Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCBjYzhjMWQ4NDU5YjE3ZWQ1YjZjNzYw
MTA5N2NjZmVkMjE1NmQwODM0Li4zNWU0ZGU4Mjg5ZDkyNTgwYmY3MmNhNmFkMzAyYTc1MjkzMWJi
ZDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCkBAIC01NywxMiArNTcsMTIgQEAgTG9jYWxGaWxlU3lzdGVtJiBM
b2NhbEZpbGVTeXN0ZW06OmxvY2FsRmlsZVN5c3RlbSgpCiAgICAgcmV0dXJuICpsb2NhbEZpbGVT
eXN0ZW07CiB9CiAKLXZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9u
ZyBsb25nIHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCit2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKGNvbnRl
eHQgJiYgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwogICAgIFdlYkZyYW1lSW1wbCogd2ViRnJh
bWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgd2Vi
RnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2Vi
RmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNh
bGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CisgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5v
cGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4o
dHlwZSksIDAsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
LCB0eXBlKSk7CiB9CiAKIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83889</attachid>
            <date>2011-02-25 15:23:08 -0800</date>
            <delta_ts>2011-02-28 10:16:10 -0800</delta_ts>
            <desc>Patch for cq</desc>
            <filename>bug-54774-20110225152306.patch</filename>
            <type>text/plain</type>
            <size>25429</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk3MzMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4NDYwMmQ4NDIxZGIzMTlmNjE0M2I0
MzdjOTVhN2Q1YWI2NDkwYmUzLi4yNjE3ZDhiMzlmYjFiYWY2NDU3MWFiNTY5YTRiMzRhZjA1ZjUy
MjAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDItMTggIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUxvY2Fs
RmlsZVN5c3RlbVVSSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTQ3NzQKKworICAgICAgICBUZXN0cyBmb3IgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVS
SS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpz
OiBBZGRlZC4KKwogMjAxMS0wMi0yNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVwZGF0ZSBjaHJvbWl1bSB0ZXN0IGV4cGVjdGF0aW9ucy4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmktZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVlZmNlNTFjYTliZDBjNDliOTk4YWVkYzJjM2MyMjNmZTU3ZWZkZmYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1Rlc3RzIHVzaW5nIHJlc29sdmVMb2NhbEZp
bGVTeXN0ZW1VUkkgdG8gb2J0YWluIGFuIEVudHJ5IGZyb20gYSBVUkkKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKKyogUmVzb2x2aW5nIGEgZ2VuZXJhdGVkIFVSSS4KK1BBU1MgZXhw
ZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNGaWxlIGlzIHRydWUKKyogUmVzb2x2aW5n
IHRlc3QgZmlsZSBieSBoYW5kCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNT
IGlzRmlsZSBpcyB0cnVlCisqIFJlc29sdmluZyBhIGNvbXBsZXRlbHkgYm9ndXMgVVJJLgorUEFT
UyAKKyogUmVzb2x2aW5nIGEgVVJJIHdpdGggdGhlIHdyb25nIHByb3RvY29sCitQQVNTIAorKiBS
ZXNvbHZpbmcgYSBVUkkgd2l0aCBubyBzbGFzaCBiZXR3ZWVuIHR5cGUgYW5kIGZpbGUKK1BBU1Mg
CisqIFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gcHJvdG9jb2wgYW5kIHR5
cGUKK1BBU1MgCisqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGJhY2tzbGFzaGVzCitQQVNTIGV4cGVj
dGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRmlsZSBpcyB0cnVlCisqIFJlc29sdmUgYSBk
aXJlY3RvcnkKK1BBU1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNEaXJlY3Rv
cnkgaXMgdHJ1ZQorKiBSZXNvbHZlIGEgcGF0aCB1c2luZyBhIHRyYWlsaW5nIHNsYXNoCitQQVNT
IGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQYXRoCitQQVNTIGlzRGlyZWN0b3J5IGlzIHRydWUKKyog
UmVzb2x2aW5nIGEgcGVyc2lzdGVudCBVUkkuCitQQVNTIGV4cGVjdGVkUGF0aCBpcyBhY3R1YWxQ
YXRoCitQQVNTIGlzRGlyZWN0b3J5IGlzIHRydWUKK0ZpbmlzaGVkIHJ1bm5pbmcgdGVzdHMuCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmVh
YmYxMWE5NDZkMmFlNTRjOTUwNjdhMWE2ZTg2ZTJhMDU5Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLmh0bWwKQEAgLTAsMCArMSwx
MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9mcy10
ZXN0LXV0aWwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9yZXNvbHZlLXVyaS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJp
LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZXNvbHZlLXVy
aS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNmYyMmYxMzZkZTBhNjYwYTQ4NWFkN2RiZTViNDdjNjBhNGE4YTA4
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10
ZXN0cy9yZXNvbHZlLXVyaS5qcwpAQCAtMCwwICsxLDE3MiBAQAorZGVzY3JpcHRpb24oIlRlc3Rz
IHVzaW5nIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkgdG8gb2J0YWluIGFuIEVudHJ5IGZyb20g
YSBVUkkiKTsKKwordmFyIHRlc3RGaWxlTmFtZSA9ICcvdGVzdEZpbGUnOwordmFyIGZpbGVTeXN0
ZW0gPSBudWxsOwordmFyIGV4cGVjdGVkQW5kUnVuTmV4dCA9IGZ1bmN0aW9uKCkgeyB0ZXN0UGFz
c2VkKCIiKTsgY2xlYW51cEFuZFJ1bk5leHQoKTsgfTsKKwordmFyIGV4cGVjdGVkUGF0aCA9IG51
bGw7Cit2YXIgYWN0dWFsUGF0aCA9IG51bGw7CisKK2Z1bmN0aW9uIGVycm9yQ2FsbGJhY2soZXJy
b3IpIHsKKyAgICBpZiAoZXJyb3IgJiYgZXJyb3IuY29kZSkKKyAgICAgICAgZGVidWcoIkVycm9y
IG9jY3VycmVkOiAiICsgZXJyb3IuY29kZSk7CisgICAgdGVzdEZhaWxlZCgiQmFpbGluZyBvdXQg
ZWFybHkiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlVGVzdEZp
bGUoY2FsbGJhY2spIHsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSh0ZXN0RmlsZU5hbWUs
IHtjcmVhdGU6dHJ1ZX0sIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24g
YXNzZXJ0UGF0aHNNYXRjaChleHBlY3RlZCwgYWN0dWFsKSB7CisgICAgZXhwZWN0ZWRQYXRoID0g
ZXhwZWN0ZWQ7CisgICAgYWN0dWFsUGF0aCA9IGFjdHVhbDsKKyAgICBzaG91bGRCZSgiZXhwZWN0
ZWRQYXRoIiwgImFjdHVhbFBhdGgiKTsKK30KKwordmFyIGlzRGlyZWN0b3J5ID0gZmFsc2U7Citm
dW5jdGlvbiBhc3NlcnRJc0RpcmVjdG9yeShlbnRyeSkgeworICAgIGlzRGlyZWN0b3J5ID0gZW50
cnkuaXNEaXJlY3Rvcnk7CisgICAgc2hvdWxkQmVUcnVlKCJpc0RpcmVjdG9yeSIpOworfQorCit2
YXIgaXNGaWxlID0gZmFsc2U7CitmdW5jdGlvbiBhc3NlcnRJc0ZpbGUoZW50cnkpIHsKKyAgICBp
c0ZpbGUgPSBlbnRyeS5pc0ZpbGU7CisgICAgc2hvdWxkQmVUcnVlKCJpc0ZpbGUiKTsKK30KKwor
Ly8gVGVzdCBib2R5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIHJ1bkJhc2ljVGVzdCgpIHsKKyAgICBkZWJ1
ZygiKiBSZXNvbHZpbmcgYSBnZW5lcmF0ZWQgVVJJLiIpOworICAgIGNyZWF0ZVRlc3RGaWxlKGZ1
bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoZW50cnku
dG9VUkkoKSwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYXNzZXJ0UGF0aHNNYXRjaChlbnRy
eS5mdWxsUGF0aCwgZS5mdWxsUGF0aCk7CisgICAgICAgICAgICBhc3NlcnRJc0ZpbGUoZSk7Cisg
ICAgICAgICAgICBjbGVhbnVwQW5kUnVuTmV4dCgpOworICAgICAgICB9LCBlcnJvckNhbGxiYWNr
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuSGFuZG1hZGVVUkkoKSB7CisgICAgZGVidWco
IiogUmVzb2x2aW5nIHRlc3QgZmlsZSBieSBoYW5kIik7CisgICAgY3JlYXRlVGVzdEZpbGUoZnVu
Y3Rpb24oZW50cnkpIHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5
c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RmlsZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
ICAgIGFzc2VydFBhdGhzTWF0Y2godGVzdEZpbGVOYW1lLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAg
ICAgIGFzc2VydElzRmlsZShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7Cisg
ICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5Cb2d1
c1VSSSgpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZpbmcgYSBjb21wbGV0ZWx5IGJvZ3VzIFVSSS4i
KTsKKyAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmb28iLCBlcnJvckNhbGxiYWNrLCBl
eHBlY3RlZEFuZFJ1bk5leHQpOworfQorCitmdW5jdGlvbiBydW5Xcm9uZ1Byb3RvY29sKCkgewor
ICAgIGRlYnVnKCIqIFJlc29sdmluZyBhIFVSSSB3aXRoIHRoZSB3cm9uZyBwcm90b2NvbCIpOwor
ICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZpbGU6Ly8vZm9vL2Jhci9iYXoiLCBlcnJv
ckNhbGxiYWNrLCBleHBlY3RlZEFuZFJ1bk5leHQpOworfQorCitmdW5jdGlvbiBydW5Ob3RFbm91
Z2hTbGFzaGVzKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNo
IGJldHdlZW4gdHlwZSBhbmQgZmlsZSIpOworICAgIGNyZWF0ZVRlc3RGaWxlKGZ1bmN0aW9uKGVu
dHJ5KSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZpbGVzeXN0ZW06Zmls
ZTovLy90ZW1wb3Jhcnl0ZXN0RmlsZSIsIGVycm9yQ2FsbGJhY2ssIGV4cGVjdGVkQW5kUnVuTmV4
dCk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1bk5vdEVub3VnaFNsYXNoZXMyKCkgeworICAg
IGRlYnVnKCIqIFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gcHJvdG9jb2wg
YW5kIHR5cGUiKTsKKyAgICBjcmVhdGVUZXN0RmlsZShmdW5jdGlvbihlbnRyeSkgeworICAgICAg
ICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly90ZW1wb3Jhcnkv
dGVzdEZpbGUiLCBlcnJvckNhbGxiYWNrLCBleHBlY3RlZEFuZFJ1bk5leHQpOworICAgIH0pOwor
fQorCitmdW5jdGlvbiBydW5Vc2VCYWNrU2xhc2hlcygpIHsKKyAgICBkZWJ1ZygiKiBSZXNvbHZl
IGEgcGF0aCB1c2luZyBiYWNrc2xhc2hlcyIpOworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJl
Y3RvcnkoImZvbyIsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIGVu
dHJ5LmdldEZpbGUoInRlc3RGaWxlIiwge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZikgeworICAg
ICAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpmaWxlOi8vL3Rl
bXBvcmFyeS9mb29cXHRlc3RGaWxlIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIGFz
c2VydFBhdGhzTWF0Y2goIi9mb28vdGVzdEZpbGUiLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnRJc0ZpbGUoZSk7CisgICAgICAgICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQo
KTsKKyAgICAgICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgICAgICB9LCBlcnJvckNhbGxi
YWNrKTsKKyAgICB9LCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gcnVuRGlyZWN0b3J5
KCkgeworICAgIGRlYnVnKCIqIFJlc29sdmUgYSBkaXJlY3RvcnkiKTsKKyAgICBmaWxlU3lzdGVt
LnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28iLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihlbnRyeSkg
eworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8v
dGVtcG9yYXJ5L2ZvbyIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0
Y2goIi9mb28iLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRGlyZWN0b3J5KGUp
OworICAgICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKKyAgICAgICAgfSwgZXJyb3JDYWxs
YmFjayk7CisgICAgfSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIHJ1bldpdGhUcmFp
bGluZ1NsYXNoKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGEgdHJhaWxp
bmcgc2xhc2giKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KCJmb28iLCB7Y3Jl
YXRlOnRydWV9LCBmdW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lz
dGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L2Zvby8iLCBmdW5jdGlvbihlKSB7
CisgICAgICAgICAgICBhc3NlcnRQYXRoc01hdGNoKCIvZm9vIiwgZS5mdWxsUGF0aCk7CisgICAg
ICAgICAgICBhc3NlcnRJc0RpcmVjdG9yeShlKTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5O
ZXh0KCk7CisgICAgICAgIH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0sIGVycm9yQ2FsbGJhY2sp
OworfQorCitmdW5jdGlvbiBydW5QZXJzaXN0ZW50VGVzdCgpIHsKKyAgICBkZWJ1ZygiKiBSZXNv
bHZpbmcgYSBwZXJzaXN0ZW50IFVSSS4iKTsKKyAgICByZXF1ZXN0RmlsZVN5c3RlbShQRVJTSVNU
RU5ULCAxMDAsIGZ1bmN0aW9uKGZzKSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1V
UkkoZnMucm9vdC50b1VSSSgpLCBmdW5jdGlvbihlbnRyeSkgeworICAgICAgICAgICAgYXNzZXJ0
UGF0aHNNYXRjaCgiLyIsIGVudHJ5LmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRGly
ZWN0b3J5KGVudHJ5KTsKKyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAg
IH0sIGVycm9yQ2FsbGJhY2spOworICAgIH0pOworfQorCisvLyBFbmQgb2YgdGVzdCBib2R5IGZ1
bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
dmFyIHRlc3RzTGlzdCA9IFsKKyAgICBydW5CYXNpY1Rlc3QsCisgICAgcnVuSGFuZG1hZGVVUkks
CisgICAgcnVuQm9ndXNVUkksCisgICAgcnVuV3JvbmdQcm90b2NvbCwKKyAgICBydW5Ob3RFbm91
Z2hTbGFzaGVzLAorICAgIHJ1bk5vdEVub3VnaFNsYXNoZXMyLAorICAgIHJ1blVzZUJhY2tTbGFz
aGVzLAorICAgIHJ1bkRpcmVjdG9yeSwKKyAgICBydW5XaXRoVHJhaWxpbmdTbGFzaCwKKyAgICBy
dW5QZXJzaXN0ZW50VGVzdCwKK107Cit2YXIgdGVzdENvdW50ZXIgPSAwOworCitmdW5jdGlvbiBy
dW5OZXh0VGVzdCgpIHsKKyAgICBpZiAodGVzdENvdW50ZXIgPT0gdGVzdHNMaXN0Lmxlbmd0aCkg
eworICAgICAgICBkZWJ1ZygiRmluaXNoZWQgcnVubmluZyB0ZXN0cy4iKTsKKyAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgfSBlbHNlCisgICAgICAgIHRlc3RzTGlzdFt0ZXN0Q291bnRlcisr
XSgpOworfQorCitmdW5jdGlvbiBjbGVhbnVwQW5kUnVuTmV4dCgpIHsKKyAgICByZW1vdmVBbGxJ
bkRpcmVjdG9yeShmaWxlU3lzdGVtLnJvb3QsIHJ1bk5leHRUZXN0LCBydW5OZXh0VGVzdCk7Cit9
CisKK2Z1bmN0aW9uIGZpbGVTeXN0ZW1DYWxsYmFjayhmcykgeworICAgIGZpbGVTeXN0ZW0gPSBm
czsKKyAgICBjbGVhbnVwQW5kUnVuTmV4dCgpOworfQorCitpZiAod2luZG93LnJlcXVlc3RGaWxl
U3lzdGVtKSB7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgIHJlcXVlc3RG
aWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrKTsKK30gZWxzZQorICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5
c3RlbSBBUEkgc3VwcG9ydC4iKTsKKword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZTQwN2JhYjFiMWM1YjJmNjk3Y2U0ZWI0N2I3ZDA5ZWJmYzc4MDBkMi4u
MDAyNDI5MDQ2N2JhZTExOTVhYmQ1ZjYxZTlhNDFmODExYzA3MTRlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMzIEBACisyMDExLTAyLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtmaWxl
YXBpXSBJbXBsZW1lbnQgTG9jYWxGaWxlU3lzdGVtLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Nzc0CisK
KyAgICAgICAgU2VlIGh0dHA6Ly9kZXYudzMub3JnLzIwMDkvZGFwL2ZpbGUtc3lzdGVtL2ZpbGUt
ZGlyLXN5cy5odG1sI21ldGhvZHMKKyAgICAgICAgZm9yIHRoZSBzcGVjIGltcGxlbWVudGVkIGJ5
IHRoaXMgcGF0Y2guCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJp
Lmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRmlsZVN5c3RlbUJhc2U6OmNyYWNrRmlsZVN5c3RlbVVSTCk6CisgICAg
ICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oOgorICAgICAgICAqIGZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlVVJJQ2FsbGJh
Y2tzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb2x2ZVVSSUNhbGxiYWNrczo6UmVz
b2x2ZVVSSUNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tz
OjpkaWRPcGVuRmlsZVN5c3RlbSk6CisgICAgICAgIENoYWlucyBhIGNhbGwgb2Ygb3BlbkZpbGVT
eXN0ZW0gdG8gY2FsbHMgdG8gZ2V0RGlyZWN0b3J5L2dldEZpbGUuCisgICAgICAgICogZmlsZWFw
aS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmg6CisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0
ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3Rl
bSk6CisgICAgICAgICogZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaDoKKyAgICAgICAgUmVtb3Zl
IHNpemUgYXJndW1lbnQgZnJvbSByZWFkRmlsZVN5c3RlbSgpCisgICAgICAgICogcGFnZS9ET01X
aW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpyZXNvbHZlTG9jYWxGaWxl
U3lzdGVtVVJJKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBhZ2Uv
RE9NV2luZG93LmlkbDoKKwogMjAxMS0wMi0yNSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAKaW5kZXggYzQ2MmMzY2UwODNhZWVhMjFiZTJm
YWZkOGRmY2QyYzllYzZlZDRkYS4uOTdlODFjMmU2NjAyNjJiZjhmYTA1YjAwZTE4ODgwY2RmOTI2
OTE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHAK
QEAgLTQ5LDYgKzQ5LDM4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgY2hhciBE
T01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4W10gPSAicGVyc2lzdGVudCI7
Citjb25zdCBzaXplX3QgRE9NRmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeExl
bmd0aCA9IHNpemVvZihET01GaWxlU3lzdGVtQmFzZTo6a1BlcnNpc3RlbnRQYXRoUHJlZml4KSAt
IDE7Citjb25zdCBjaGFyIERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5UGF0aFByZWZpeFtd
ID0gInRlbXBvcmFyeSI7Citjb25zdCBzaXplX3QgRE9NRmlsZVN5c3RlbUJhc2U6OmtUZW1wb3Jh
cnlQYXRoUHJlZml4TGVuZ3RoID0gc2l6ZW9mKERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5
UGF0aFByZWZpeCkgLSAxOworCitib29sIERPTUZpbGVTeXN0ZW1CYXNlOjpjcmFja0ZpbGVTeXN0
ZW1VUkwoY29uc3QgS1VSTCYgdXJsLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUmIHR5cGUsIFN0cmlu
ZyYgZmlsZVBhdGgpCit7CisgICAgaWYgKCF1cmwucHJvdG9jb2xJcygiZmlsZXN5c3RlbSIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBLVVJMIG9yaWdpblVSTChQYXJzZWRVUkxTdHJp
bmcsIHVybC5wYXRoKCkpOworICAgIFN0cmluZyBwYXRoID0gb3JpZ2luVVJMLnBhdGgoKTsKKyAg
ICBpZiAocGF0aC5pc0VtcHR5KCkgfHwgcGF0aFswXSAhPSAnLycpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7CisKKyAgICBpZiAocGF0aC5zdGFy
dHNXaXRoKGtUZW1wb3JhcnlQYXRoUHJlZml4KSkgeworICAgICAgICB0eXBlID0gQXN5bmNGaWxl
U3lzdGVtOjpUZW1wb3Jhcnk7CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhrVGVtcG9y
YXJ5UGF0aFByZWZpeExlbmd0aCk7CisgICAgfSBlbHNlIGlmIChwYXRoLnN0YXJ0c1dpdGgoa1Bl
cnNpc3RlbnRQYXRoUHJlZml4KSkgeworICAgICAgICB0eXBlID0gQXN5bmNGaWxlU3lzdGVtOjpQ
ZXJzaXN0ZW50OworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa1BlcnNpc3RlbnRQYXRo
UHJlZml4TGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHBhdGguaXNFbXB0eSgpIHx8IHBhdGhbMF0gIT0gJy8nKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmaWxlUGF0aC5zd2FwKHBhdGgpOworICAgIHJldHVybiB0cnVlOworfQorCiBE
T01GaWxlU3lzdGVtQmFzZTo6RE9NRmlsZVN5c3RlbUJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQogICAgIDogbV9uYW1l
KG5hbWUpCiAgICAgLCBtX2FzeW5jRmlsZVN5c3RlbShhc3luY0ZpbGVTeXN0ZW0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKaW5kZXggNjZmMTMzMWEyMmMwNTVh
ZGNmMmYyYTY4ZGIwZWEzMDBkZmNhNGRmMy4uYmY2MGI2ZjZlZjYzODgyZDZiOGU1NmM3M2I5OGIz
NjY1M2NlN2Q3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2Uu
aApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CiBjbGFzcyBFbnRyeUJh
c2U7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogY2xhc3MgRXJyb3JDYWxsYmFjazsKK2NsYXNzIEtV
Ukw7CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwogY2xhc3MgVm9pZENhbGxiYWNrOwogCkBAIC01
OSw2ICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkRPTUZpbGVTeXN0ZW1C
YXNlKCk7CiAKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrUGVyc2lzdGVudFBhdGhQcmVmaXhbXTsK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQZXJzaXN0ZW50UGF0aFByZWZpeExlbmd0aDsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciBrVGVtcG9yYXJ5UGF0aFByZWZpeFtdOworICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qga1RlbXBvcmFyeVBhdGhQcmVmaXhMZW5ndGg7CisgICAgc3RhdGljIGJvb2wg
Y3JhY2tGaWxlU3lzdGVtVVJMKGNvbnN0IEtVUkwmLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUmLCBT
dHJpbmcmIGZpbGVQYXRoKTsKKwogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbmFtZTsgfQogICAgIEFzeW5jRmlsZVN5c3RlbSogYXN5bmNGaWxlU3lzdGVtKCkgY29u
c3QgeyByZXR1cm4gbV9hc3luY0ZpbGVTeXN0ZW0uZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKaW5kZXggOTY2MzM3YjE3N2RmZjE1
ZWJhMzYzZmFhNmZmNmNlZmQ0M2E0NmFkNy4uMWY4YjRlMWU2OWJmZjkyZjk2NTBhMDZhNzdjZDJh
NjAwNGYyZGMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVt
Q2FsbGJhY2tzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxs
YmFja3MuY3BwCkBAIC0xOTIsNiArMTkyLDY1IEBAIHZvaWQgRmlsZVN5c3RlbUNhbGxiYWNrczo6
ZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEFzeW5jCiAg
ICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKIH0KIAorLy8gUmVzb2x2ZVVSSUNhbGxiYWNr
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCituYW1lc3BhY2UgeworCitjbGFzcyBFcnJvckNhbGxiYWNrV3JhcHBlciA6IHB1YmxpYyBF
cnJvckNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrV3JhcHBlcj4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5c3RlbSwg
UGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXJyb3JDYWxsYmFja1dyYXBwZXIoZmlsZVN5
c3RlbSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBmaWxlUGF0aCkpOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChGaWxlRXJyb3IqIGVycm9yKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGVycm9yKTsKKyAgICAgICAgLy8gRklYTUU6IE9ubHkgY2hlY2sgZm9y
IFRZUEVfTUlTTUFUQ0hfRVJSIG9uY2UgQ2hyb21pdW0gaXMgZml4ZWQgdG8gcmV0dXJuIHRoYXQg
YXMgcmVxdWlyZWQgYnkgdGhlIHNwZWMuCisgICAgICAgIGlmIChlcnJvci0+Y29kZSgpID09IEZp
bGVFcnJvcjo6VFlQRV9NSVNNQVRDSF9FUlIgfHwgZXJyb3ItPmNvZGUoKSA9PSBGaWxlRXJyb3I6
OklOVkFMSURfU1RBVEVfRVJSKQorICAgICAgICAgICAgbV9maWxlU3lzdGVtLT5nZXRGaWxlKG1f
ZmlsZVN5c3RlbS0+cm9vdCgpLmdldCgpLCBtX2ZpbGVQYXRoLCAwLCBtX3N1Y2Nlc3NDYWxsYmFj
aywgbV9lcnJvckNhbGxiYWNrKTsKKyAgICAgICAgZWxzZSBpZiAobV9lcnJvckNhbGxiYWNrKQor
ICAgICAgICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvcik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBFcnJvckNhbGxiYWNrV3JhcHBl
cihQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0sIFBhc3NSZWZQdHI8RW50cnlD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCisgICAgICAgIDogbV9maWxlU3lzdGVt
KGZpbGVTeXN0ZW0pCisgICAgICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNr
KQorICAgICAgICAsIG1fZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQorICAgICAgICAsIG1f
ZmlsZVBhdGgoZmlsZVBhdGgpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxET01GaWxlU3lz
dGVtPiBtX2ZpbGVTeXN0ZW07CisgICAgUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IG1fc3VjY2Vzc0Nh
bGxiYWNrOworICAgIFJlZlB0cjxFcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7CisgICAg
U3RyaW5nIG1fZmlsZVBhdGg7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCitQYXNzT3duUHRyPFJl
c29sdmVVUklDYWxsYmFja3M+IFJlc29sdmVVUklDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUmVzb2x2ZVVSSUNhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGZpbGVQYXRoKSk7Cit9CisKK1Jlc29sdmVVUklDYWxsYmFj
a3M6OlJlc29sdmVVUklDYWxsYmFja3MoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKKyAgICA6
IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX3N1Y2Nlc3ND
YWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCisgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
Y29udGV4dCkKKyAgICAsIG1fZmlsZVBhdGgoZmlsZVBhdGgpCit7Cit9CisKK3ZvaWQgUmVzb2x2
ZVVSSUNhbGxiYWNrczo6ZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gYXN5bmNGaWxlU3lzdGVtKQoreworICAgIEFTU0VSVChh
c3luY0ZpbGVTeXN0ZW0pOworICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtID0g
RE9NRmlsZVN5c3RlbTo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgbmFt
ZSwgYXN5bmNGaWxlU3lzdGVtLmxlYWtQdHIoKSk7CisgICAgZmlsZVN5c3RlbS0+Z2V0RGlyZWN0
b3J5KGZpbGVTeXN0ZW0tPnJvb3QoKS5nZXQoKSwgbV9maWxlUGF0aCwgMCwgbV9zdWNjZXNzQ2Fs
bGJhY2ssIEVycm9yQ2FsbGJhY2tXcmFwcGVyOjpjcmVhdGUoZmlsZVN5c3RlbSwgbV9zdWNjZXNz
Q2FsbGJhY2ssIG1fZXJyb3JDYWxsYmFjaywgbV9maWxlUGF0aCkpOworfQorCiAvLyBNZXRhZGF0
YUNhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIFBhc3NPd25QdHI8TWV0YWRhdGFDYWxsYmFja3M+IE1ldGFkYXRhQ2Fs
bGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxNZXRhZGF0YUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oIGIvU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKaW5kZXggODMwMDBjMmRkM2MxZjgz
NzFkYmMzNzIzOTUxNWFiY2YxMWFmMjE5NS4uN2Y2ODYyNWFjOTI2OGY4ZTI1NDlkMWQ1YTg5MGQ4
NGNjMDVmY2RkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVt
Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmgKQEAgLTQzLDEwICs0MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBc3lu
Y0ZpbGVXcml0ZXI7CiBjbGFzcyBET01GaWxlU3lzdGVtQmFzZTsKIGNsYXNzIERpcmVjdG9yeVJl
YWRlckJhc2U7Ci1jbGFzcyBFcnJvckNhbGxiYWNrOwogY2xhc3MgRW50cmllc0NhbGxiYWNrOwog
Y2xhc3MgRW50cnlBcnJheTsKIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CitjbGFzcyBFcnJvckNhbGxi
YWNrOwogc3RydWN0IEZpbGVNZXRhZGF0YTsKIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKIGNs
YXNzIEZpbGVXcml0ZXJCYXNlOwpAQCAtMTIzLDYgKzEyMywxOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9
OwogCitjbGFzcyBSZXNvbHZlVVJJQ2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFj
a3NCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSZXNvbHZlVVJJQ2FsbGJh
Y2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZmlsZVBhdGgp
OworICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPik7CisKK3ByaXZhdGU6CisgICAgUmVzb2x2ZVVS
SUNhbGxiYWNrcyhQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7
CisgICAgUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOworICAgIFJlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAg
U3RyaW5nIG1fZmlsZVBhdGg7Cit9OworCiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrcyA6IHB1Ymxp
YyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25Q
dHI8TWV0YWRhdGFDYWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRyPE1ldGFkYXRhQ2FsbGJhY2s+
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9j
YWxGaWxlU3lzdGVtLmNwcAppbmRleCA3MjFmZGY1Y2I3YjBlZmMzMTE2ZThjYWFmYzJiYTZlNDU5
ZWQ2NWIxLi42ODhkMTU1NTk1ZjU3MTE5MmNmMzY4ZTA1OWYzZjY3NDY1ZjkwMmE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwCkBAIC04MSw3ICs4MSw3IEBA
IHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIGJhc2VQYXRoLCBjb25zCiAgICAgQXN5bmNGaWxlU3lzdGVtOjpvcGVuRmlsZVN5
c3RlbShiYXNlUGF0aCwgaWRlbnRpZmllciwgdHlwZSwgY3JlYXRlLCBjYWxsYmFja3MpOwogfQog
Ci12b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZywgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgTG9jYWxG
aWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1D
YWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICAvLyBBc3luY0ZpbGVTeXN0ZW06Om9wZW5GaWxl
U3lzdGVtIGNhbGxzIGNhbGxiYWNrcyBzeW5jaHJvbm91c2x5LCBzbyB0aGUgbWV0aG9kIG5lZWRz
IHRvIGJlIGNhbGxlZCBhc3luY2hyb25vdXNseS4KICAgICBjb250ZXh0LT5wb3N0VGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJm9wZW5GaWxlU3lzdGVtLCBmaWxlU3lzdGVtQmFzZVBhdGgoKSwgY29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIHR5cGUsIGZhbHNl
LCBjYWxsYmFja3MpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvTG9jYWxG
aWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCmlu
ZGV4IDEyYTcwMTJkMzQ2NWI5ODdjZThkOWE3OGY2NDZmYzI3NjFmY2M0YjYuLmJhZjcyZDlkMGMy
NGRlN2FjOWRjYWNhMmVmZWFkMzIwMTdjOTBmMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9M
b2NhbEZpbGVTeXN0ZW0uaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIExv
Y2FsRmlsZVN5c3RlbSYgbG9jYWxGaWxlU3lzdGVtKCk7CiAKICAgICAvLyBEb2VzIG5vdCBjcmVh
dGUgdGhlIHJvb3QgcGF0aCBmb3IgZmlsZSBzeXN0ZW0sIGp1c3QgcmVhZHMgaXQgaWYgYXZhaWxh
YmxlLgotICAgIHZvaWQgcmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEFz
eW5jRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPik7CisgICAgdm9pZCByZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4pOwogCiAgICAgdm9pZCByZXF1ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBib29sIHN5bmNocm9ub3VzID0gZmFs
c2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggZWQ2ZDA1NzFmNGZkOTQwMGZj
ZmY1NTM4YzY3YmIxNWIyZDNiNjc3Ny4uYTgxMWFhNjNhN2Y1ZjIyYzlkMWIzZDFhYWEzMGNjZmI0
ZGMwZDJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtOTksNiArOTksOCBAQAog
I2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKICNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKICNp
bmNsdWRlICJET01GaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbUJhc2UuaCIK
KyNpbmNsdWRlICJFbnRyeUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXJyb3JDYWxsYmFjay5oIgog
I2luY2x1ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgpA
QCAtNzUzLDYgKzc1NSwyOSBAQCB2b2lkIERPTVdpbmRvdzo6cmVxdWVzdEZpbGVTeXN0ZW0oaW50
IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzUmVmUHRyPEZpbGVTeXN0ZQogICAgIExvY2FsRmls
ZVN5c3RlbTo6bG9jYWxGaWxlU3lzdGVtKCkucmVxdWVzdEZpbGVTeXN0ZW0oZG9jdW1lbnQsIGZp
bGVTeXN0ZW1UeXBlLCBzaXplLCBGaWxlU3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0Nh
bGxiYWNrLCBlcnJvckNhbGxiYWNrLCBkb2N1bWVudCksIGZhbHNlKTsKIH0KIAordm9pZCBET01X
aW5kb3c6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoY29uc3QgU3RyaW5nJiB1cmksIFBhc3NS
ZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+
ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4gPSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KTsKKyAgICBLVVJMIGNvbXBsZXRlZFVSTCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTCh1cmkpOwor
ICAgIGlmICghQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpIHx8ICFzZWN1cml0eU9yaWdp
bi0+Y2FuQWNjZXNzRmlsZVN5c3RlbSgpIHx8ICFzZWN1cml0eU9yaWdpbi0+Y2FuUmVxdWVzdChj
b21wbGV0ZWRVUkwpKSB7CisgICAgICAgIERPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2so
ZG9jdW1lbnQsIGVycm9yQ2FsbGJhY2ssIEZpbGVFcnJvcjo6Y3JlYXRlKEZpbGVFcnJvcjo6U0VD
VVJJVFlfRVJSKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBc3luY0ZpbGVTeXN0
ZW06OlR5cGUgdHlwZTsKKyAgICBTdHJpbmcgZmlsZVBhdGg7CisgICAgaWYgKCFjb21wbGV0ZWRV
UkwuaXNWYWxpZCgpIHx8ICFET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJMKGNv
bXBsZXRlZFVSTCwgdHlwZSwgZmlsZVBhdGgpKSB7CisgICAgICAgIERPTUZpbGVTeXN0ZW06OnNj
aGVkdWxlQ2FsbGJhY2soZG9jdW1lbnQsIGVycm9yQ2FsbGJhY2ssIEZpbGVFcnJvcjo6Y3JlYXRl
KEZpbGVFcnJvcjo6U1lOVEFYX0VSUikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
TG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0ZW0oKS5yZWFkRmlsZVN5c3RlbShkb2N1bWVu
dCwgdHlwZSwgUmVzb2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJy
b3JDYWxsYmFjaywgZG9jdW1lbnQsIGZpbGVQYXRoKSk7Cit9CisKIENPTVBJTEVfQVNTRVJUKHN0
YXRpY19jYXN0PGludD4oRE9NV2luZG93OjpURU1QT1JBUlkpID09IHN0YXRpY19jYXN0PGludD4o
QXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkpLCBlbnVtX21pc21hdGNoKTsKIENPTVBJTEVfQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oRE9NV2luZG93OjpQRVJTSVNURU5UKSA9PSBzdGF0aWNfY2Fz
dDxpbnQ+KEFzeW5jRmlsZVN5c3RlbTo6UGVyc2lzdGVudCksIGVudW1fbWlzbWF0Y2gpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaAppbmRleCAwNTgxNjVmYjhkYmFlYTk5OTE2OTA1ZDliNGRhODg2
ODQxMGM4MjJmLi5hZjk4NGM5OGExYTM5OGQyOTU1NTc4NTQ1YWU4NThlMjUwYWNkMWE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTQ1LDYgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAg
Y2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBFbnRyeUNhbGxiYWNrOwogICAgIGNsYXNzIEVycm9y
Q2FsbGJhY2s7CiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBGaWxlU3lzdGVt
Q2FsbGJhY2s7CkBAIC0zODcsNiArMzg4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgUEVSU0lTVEVOVCwKICAgICAgICAgfTsKICAgICAgICAgdm9pZCByZXF1ZXN0RmlsZVN5
c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlbUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgICAgIHZvaWQgcmVzb2x2ZUxv
Y2FsRmlsZVN5c3RlbVVSSShjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+
LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggZmQ5YmNlMDExNDJi
NGJlNTAxODEzMjgyMzQ2ZDM3NTdkNTFhYTYyMS4uYTk0OGEwMThmOTk5MzE3ZGI2ZTM2OTg5N2I1
YWNlZmI2YmM5ODlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtMTk1LDYgKzE5
NSw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBURU1Q
T1JBUlkgPSAwOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQRVJTSVNURU5UID0gMTsK
ICAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXF1ZXN0RmlsZVN5
c3RlbShpbiB1bnNpZ25lZCBzaG9ydCB0eXBlLCBpbiBsb25nIGxvbmcgc2l6ZSwgaW4gW0NhbGxi
YWNrLCBPcHRpb25hbF0gRmlsZVN5c3RlbUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW0Nh
bGxiYWNrLCBPcHRpb25hbF0gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAg
W0VuYWJsZWRBdFJ1bnRpbWU9RmlsZVN5c3RlbV0gdm9pZCByZXNvbHZlTG9jYWxGaWxlU3lzdGVt
VVJJKGluIERPTVN0cmluZyB1cmksIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEVudHJ5Q2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBFcnJvckNhbGxiYWNr
IGVycm9yQ2FsbGJhY2spOwogCiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZT1G
aWxlU3lzdGVtXSBGbGFnc0NvbnN0cnVjdG9yIEZsYWdzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDA4ZTVkMDU4NjZkOTIyYzdkMzBlMTM3MDAzYzhjZGQzYzc2MGU4ZWUu
LmE1YmNmMjRiNTNiOGIwZmYwODc4MjQ3MTcwYWNhNDQ5OTgwMmUyNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDItMjQgIEFkYW0gS2xlaW4gIDxh
ZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUxv
Y2FsRmlsZVN5c3RlbVVSSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTQ3NzQKKworICAgICAgICAqIHNyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKToK
KyAgICAgICAgUmVtb3ZlZCBzaXplIGFyZ3VtZW50IHRvIHJlYWRGaWxlU3lzdGVtKCkKKwogMjAx
MS0wMi0yNSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJvbGwg
Y2hyb21pdW0gZGVwcyB0byBpbmNsdWRlIFJCR1RvSFNMIGZpeCBhbmQgSUNVIHVwZGF0ZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcAppbmRleCBjYzhjMWQ4NDU5YjE3ZWQ1YjZjNzYwMTA5N2NjZmVkMjE1NmQwODM0Li4z
NWU0ZGU4Mjg5ZDkyNTgwYmY3MmNhNmFkMzAyYTc1MjkzMWJiZDM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBA
IC01NywxMiArNTcsMTIgQEAgTG9jYWxGaWxlU3lzdGVtJiBMb2NhbEZpbGVTeXN0ZW06OmxvY2Fs
RmlsZVN5c3RlbSgpCiAgICAgcmV0dXJuICpsb2NhbEZpbGVTeXN0ZW07CiB9CiAKLXZvaWQgTG9j
YWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIExvY2FsRmlsZVN5
c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5
bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQgJiYgY29udGV4dC0+aXNEb2N1
bWVudCgpKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGNvbnRleHQpOwogICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZy
b21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVu
RmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlw
ZSksIHNpemUsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
LCB0eXBlKSk7CisgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFt
ZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIDAsIGZhbHNlLCBuZXcg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiB9CiAKIHZvaWQg
TG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hy
b25vdXMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84078</attachid>
            <date>2011-02-28 10:16:13 -0800</date>
            <delta_ts>2011-02-28 13:55:32 -0800</delta_ts>
            <desc>Patch for cq; merged r79778</desc>
            <filename>bug-54774-20110228101612.patch</filename>
            <type>text/plain</type>
            <size>26464</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk4NzcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1YTI0MzhmZjg4NGYyYzI0NzZkNjc3
ODk0ZDM1NjA1MGFlY2VlMmQ4Li40NTAxOGIzODFmNzU2ZjY2NGMzMmUwNmY2OGVjNTkxNThlM2M4
YjdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDItMjggIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW2ZpbGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUxvY2Fs
RmlsZVN5c3RlbVVSSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTQ3NzQKKworICAgICAgICBUZXN0cyBmb3IgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVS
SS4KKworICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUtdXJpLmpz
OiBBZGRlZC4KKwogMjAxMS0wMi0yOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBn
bWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc5Nzg0LgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc29sdmUtdXJpLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWVmY2U1MWNhOWJkMGM0OWI5OThhZWRjMmMzYzIyM2ZlNTdlZmRmZgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVy
aS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNiBAQAorVGVzdHMgdXNpbmcgcmVzb2x2ZUxvY2Fs
RmlsZVN5c3RlbVVSSSB0byBvYnRhaW4gYW4gRW50cnkgZnJvbSBhIFVSSQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworKiBSZXNvbHZpbmcgYSBnZW5lcmF0ZWQgVVJJLgorUEFTUyBl
eHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBpc0ZpbGUgaXMgdHJ1ZQorKiBSZXNvbHZp
bmcgdGVzdCBmaWxlIGJ5IGhhbmQKK1BBU1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BB
U1MgaXNGaWxlIGlzIHRydWUKKyogUmVzb2x2aW5nIGEgY29tcGxldGVseSBib2d1cyBVUkkuCitQ
QVNTIAorKiBSZXNvbHZpbmcgYSBVUkkgd2l0aCB0aGUgd3JvbmcgcHJvdG9jb2wKK1BBU1MgCisq
IFJlc29sdmluZyBhIFVSSSB3aXRoIG5vIHNsYXNoIGJldHdlZW4gdHlwZSBhbmQgZmlsZQorUEFT
UyAKKyogUmVzb2x2aW5nIGEgVVJJIHdpdGggbm8gc2xhc2ggYmV0d2VlbiBwcm90b2NvbCBhbmQg
dHlwZQorUEFTUyAKKyogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYmFja3NsYXNoZXMKK1BBU1MgZXhw
ZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNGaWxlIGlzIHRydWUKKyogUmVzb2x2ZSBh
IGRpcmVjdG9yeQorUEFTUyBleHBlY3RlZFBhdGggaXMgYWN0dWFsUGF0aAorUEFTUyBpc0RpcmVj
dG9yeSBpcyB0cnVlCisqIFJlc29sdmUgYSBwYXRoIHVzaW5nIGEgdHJhaWxpbmcgc2xhc2gKK1BB
U1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVhbFBhdGgKK1BBU1MgaXNEaXJlY3RvcnkgaXMgdHJ1ZQor
KiBSZXNvbHZpbmcgYSBwZXJzaXN0ZW50IFVSSS4KK1BBU1MgZXhwZWN0ZWRQYXRoIGlzIGFjdHVh
bFBhdGgKK1BBU1MgaXNEaXJlY3RvcnkgaXMgdHJ1ZQorRmluaXNoZWQgcnVubmluZyB0ZXN0cy4K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvbHZlLXVyaS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2
ZWFiZjExYTk0NmQyYWU1NGM5NTA2N2ExYTZlODZlMmEwNTljZDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11cmkuaHRtbApAQCAtMCwwICsx
LDEzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Zz
LXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3Jlc29sdmUtdXJpLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvcmVzb2x2ZS11
cmkuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3Jlc29sdmUt
dXJpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA2ZjIyZjEzNmRlMGE2NjBhNDg1YWQ3ZGJlNWI0N2M2MGE0YThh
MDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0
LXRlc3RzL3Jlc29sdmUtdXJpLmpzCkBAIC0wLDAgKzEsMTcyIEBACitkZXNjcmlwdGlvbigiVGVz
dHMgdXNpbmcgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSB0byBvYnRhaW4gYW4gRW50cnkgZnJv
bSBhIFVSSSIpOworCit2YXIgdGVzdEZpbGVOYW1lID0gJy90ZXN0RmlsZSc7Cit2YXIgZmlsZVN5
c3RlbSA9IG51bGw7Cit2YXIgZXhwZWN0ZWRBbmRSdW5OZXh0ID0gZnVuY3Rpb24oKSB7IHRlc3RQ
YXNzZWQoIiIpOyBjbGVhbnVwQW5kUnVuTmV4dCgpOyB9OworCit2YXIgZXhwZWN0ZWRQYXRoID0g
bnVsbDsKK3ZhciBhY3R1YWxQYXRoID0gbnVsbDsKKworZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhl
cnJvcikgeworICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlKQorICAgICAgICBkZWJ1ZygiRXJy
b3Igb2NjdXJyZWQ6ICIgKyBlcnJvci5jb2RlKTsKKyAgICB0ZXN0RmFpbGVkKCJCYWlsaW5nIG91
dCBlYXJseSIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBjcmVhdGVUZXN0
RmlsZShjYWxsYmFjaykgeworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKHRlc3RGaWxlTmFt
ZSwge2NyZWF0ZTp0cnVlfSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworfQorCitmdW5jdGlv
biBhc3NlcnRQYXRoc01hdGNoKGV4cGVjdGVkLCBhY3R1YWwpIHsKKyAgICBleHBlY3RlZFBhdGgg
PSBleHBlY3RlZDsKKyAgICBhY3R1YWxQYXRoID0gYWN0dWFsOworICAgIHNob3VsZEJlKCJleHBl
Y3RlZFBhdGgiLCAiYWN0dWFsUGF0aCIpOworfQorCit2YXIgaXNEaXJlY3RvcnkgPSBmYWxzZTsK
K2Z1bmN0aW9uIGFzc2VydElzRGlyZWN0b3J5KGVudHJ5KSB7CisgICAgaXNEaXJlY3RvcnkgPSBl
bnRyeS5pc0RpcmVjdG9yeTsKKyAgICBzaG91bGRCZVRydWUoImlzRGlyZWN0b3J5Iik7Cit9CisK
K3ZhciBpc0ZpbGUgPSBmYWxzZTsKK2Z1bmN0aW9uIGFzc2VydElzRmlsZShlbnRyeSkgeworICAg
IGlzRmlsZSA9IGVudHJ5LmlzRmlsZTsKKyAgICBzaG91bGRCZVRydWUoImlzRmlsZSIpOworfQor
CisvLyBUZXN0IGJvZHkgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gcnVuQmFzaWNUZXN0KCkgeworICAgIGRl
YnVnKCIqIFJlc29sdmluZyBhIGdlbmVyYXRlZCBVUkkuIik7CisgICAgY3JlYXRlVGVzdEZpbGUo
ZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSShlbnRy
eS50b1VSSSgpLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBhc3NlcnRQYXRoc01hdGNoKGVu
dHJ5LmZ1bGxQYXRoLCBlLmZ1bGxQYXRoKTsKKyAgICAgICAgICAgIGFzc2VydElzRmlsZShlKTsK
KyAgICAgICAgICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7CisgICAgICAgIH0sIGVycm9yQ2FsbGJh
Y2spOworICAgIH0pOworfQorCitmdW5jdGlvbiBydW5IYW5kbWFkZVVSSSgpIHsKKyAgICBkZWJ1
ZygiKiBSZXNvbHZpbmcgdGVzdCBmaWxlIGJ5IGhhbmQiKTsKKyAgICBjcmVhdGVUZXN0RmlsZShm
dW5jdGlvbihlbnRyeSkgeworICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxl
c3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L3Rlc3RGaWxlIiwgZnVuY3Rpb24oZSkgeworICAgICAg
ICAgICAgYXNzZXJ0UGF0aHNNYXRjaCh0ZXN0RmlsZU5hbWUsIGUuZnVsbFBhdGgpOworICAgICAg
ICAgICAgYXNzZXJ0SXNGaWxlKGUpOworICAgICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsK
KyAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkJv
Z3VzVVJJKCkgeworICAgIGRlYnVnKCIqIFJlc29sdmluZyBhIGNvbXBsZXRlbHkgYm9ndXMgVVJJ
LiIpOworICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZvbyIsIGVycm9yQ2FsbGJhY2ss
IGV4cGVjdGVkQW5kUnVuTmV4dCk7Cit9CisKK2Z1bmN0aW9uIHJ1bldyb25nUHJvdG9jb2woKSB7
CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgVVJJIHdpdGggdGhlIHdyb25nIHByb3RvY29sIik7
CisgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZTovLy9mb28vYmFyL2JheiIsIGVy
cm9yQ2FsbGJhY2ssIGV4cGVjdGVkQW5kUnVuTmV4dCk7Cit9CisKK2Z1bmN0aW9uIHJ1bk5vdEVu
b3VnaFNsYXNoZXMoKSB7CisgICAgZGVidWcoIiogUmVzb2x2aW5nIGEgVVJJIHdpdGggbm8gc2xh
c2ggYmV0d2VlbiB0eXBlIGFuZCBmaWxlIik7CisgICAgY3JlYXRlVGVzdEZpbGUoZnVuY3Rpb24o
ZW50cnkpIHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSSSgiZmlsZXN5c3RlbTpm
aWxlOi8vL3RlbXBvcmFyeXRlc3RGaWxlIiwgZXJyb3JDYWxsYmFjaywgZXhwZWN0ZWRBbmRSdW5O
ZXh0KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gcnVuTm90RW5vdWdoU2xhc2hlczIoKSB7Cisg
ICAgZGVidWcoIiogUmVzb2x2aW5nIGEgVVJJIHdpdGggbm8gc2xhc2ggYmV0d2VlbiBwcm90b2Nv
bCBhbmQgdHlwZSIpOworICAgIGNyZWF0ZVRlc3RGaWxlKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAg
ICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZpbGVzeXN0ZW06ZmlsZTovL3RlbXBvcmFy
eS90ZXN0RmlsZSIsIGVycm9yQ2FsbGJhY2ssIGV4cGVjdGVkQW5kUnVuTmV4dCk7CisgICAgfSk7
Cit9CisKK2Z1bmN0aW9uIHJ1blVzZUJhY2tTbGFzaGVzKCkgeworICAgIGRlYnVnKCIqIFJlc29s
dmUgYSBwYXRoIHVzaW5nIGJhY2tzbGFzaGVzIik7CisgICAgZmlsZVN5c3RlbS5yb290LmdldERp
cmVjdG9yeSgiZm9vIiwge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAg
ZW50cnkuZ2V0RmlsZSgidGVzdEZpbGUiLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlvbihmKSB7Cisg
ICAgICAgICAgICByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKCJmaWxlc3lzdGVtOmZpbGU6Ly8v
dGVtcG9yYXJ5L2Zvb1xcdGVzdEZpbGUiLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0UGF0aHNNYXRjaCgiL2Zvby90ZXN0RmlsZSIsIGUuZnVsbFBhdGgpOworICAgICAgICAg
ICAgICAgIGFzc2VydElzRmlsZShlKTsKKyAgICAgICAgICAgICAgICBjbGVhbnVwQW5kUnVuTmV4
dCgpOworICAgICAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgICAgIH0sIGVycm9yQ2Fs
bGJhY2spOworICAgIH0sIGVycm9yQ2FsbGJhY2spOworfQorCitmdW5jdGlvbiBydW5EaXJlY3Rv
cnkoKSB7CisgICAgZGVidWcoIiogUmVzb2x2ZSBhIGRpcmVjdG9yeSIpOworICAgIGZpbGVTeXN0
ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZvbyIsIHtjcmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5
KSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoImZpbGVzeXN0ZW06ZmlsZTov
Ly90ZW1wb3JhcnkvZm9vIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYXNzZXJ0UGF0aHNN
YXRjaCgiL2ZvbyIsIGUuZnVsbFBhdGgpOworICAgICAgICAgICAgYXNzZXJ0SXNEaXJlY3Rvcnko
ZSk7CisgICAgICAgICAgICBjbGVhbnVwQW5kUnVuTmV4dCgpOworICAgICAgICB9LCBlcnJvckNh
bGxiYWNrKTsKKyAgICB9LCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gcnVuV2l0aFRy
YWlsaW5nU2xhc2goKSB7CisgICAgZGVidWcoIiogUmVzb2x2ZSBhIHBhdGggdXNpbmcgYSB0cmFp
bGluZyBzbGFzaCIpOworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkoImZvbyIsIHtj
cmVhdGU6dHJ1ZX0sIGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgIHJlc29sdmVMb2NhbEZpbGVT
eXN0ZW1VUkkoImZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvZm9vLyIsIGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgICAgIGFzc2VydFBhdGhzTWF0Y2goIi9mb28iLCBlLmZ1bGxQYXRoKTsKKyAg
ICAgICAgICAgIGFzc2VydElzRGlyZWN0b3J5KGUpOworICAgICAgICAgICAgY2xlYW51cEFuZFJ1
bk5leHQoKTsKKyAgICAgICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSwgZXJyb3JDYWxsYmFj
ayk7Cit9CisKK2Z1bmN0aW9uIHJ1blBlcnNpc3RlbnRUZXN0KCkgeworICAgIGRlYnVnKCIqIFJl
c29sdmluZyBhIHBlcnNpc3RlbnQgVVJJLiIpOworICAgIHJlcXVlc3RGaWxlU3lzdGVtKFBFUlNJ
U1RFTlQsIDEwMCwgZnVuY3Rpb24oZnMpIHsKKyAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3Rl
bVVSSShmcy5yb290LnRvVVJJKCksIGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgICAgICBhc3Nl
cnRQYXRoc01hdGNoKCIvIiwgZW50cnkuZnVsbFBhdGgpOworICAgICAgICAgICAgYXNzZXJ0SXNE
aXJlY3RvcnkoZW50cnkpOworICAgICAgICAgICAgY2xlYW51cEFuZFJ1bk5leHQoKTsKKyAgICAg
ICAgfSwgZXJyb3JDYWxsYmFjayk7CisgICAgfSk7Cit9CisKKy8vIEVuZCBvZiB0ZXN0IGJvZHkg
ZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cit2YXIgdGVzdHNMaXN0ID0gWworICAgIHJ1bkJhc2ljVGVzdCwKKyAgICBydW5IYW5kbWFkZVVS
SSwKKyAgICBydW5Cb2d1c1VSSSwKKyAgICBydW5Xcm9uZ1Byb3RvY29sLAorICAgIHJ1bk5vdEVu
b3VnaFNsYXNoZXMsCisgICAgcnVuTm90RW5vdWdoU2xhc2hlczIsCisgICAgcnVuVXNlQmFja1Ns
YXNoZXMsCisgICAgcnVuRGlyZWN0b3J5LAorICAgIHJ1bldpdGhUcmFpbGluZ1NsYXNoLAorICAg
IHJ1blBlcnNpc3RlbnRUZXN0LAorXTsKK3ZhciB0ZXN0Q291bnRlciA9IDA7CisKK2Z1bmN0aW9u
IHJ1bk5leHRUZXN0KCkgeworICAgIGlmICh0ZXN0Q291bnRlciA9PSB0ZXN0c0xpc3QubGVuZ3Ro
KSB7CisgICAgICAgIGRlYnVnKCJGaW5pc2hlZCBydW5uaW5nIHRlc3RzLiIpOworICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGVzdHNMaXN0W3Rlc3RDb3VudGVy
KytdKCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXBBbmRSdW5OZXh0KCkgeworICAgIHJlbW92ZUFs
bEluRGlyZWN0b3J5KGZpbGVTeXN0ZW0ucm9vdCwgcnVuTmV4dFRlc3QsIHJ1bk5leHRUZXN0KTsK
K30KKworZnVuY3Rpb24gZmlsZVN5c3RlbUNhbGxiYWNrKGZzKSB7CisgICAgZmlsZVN5c3RlbSA9
IGZzOworICAgIGNsZWFudXBBbmRSdW5OZXh0KCk7Cit9CisKK2lmICh3aW5kb3cucmVxdWVzdEZp
bGVTeXN0ZW0pIHsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgcmVxdWVz
dEZpbGVTeXN0ZW0od2luZG93LlRFTVBPUkFSWSwgMTAwLCBmaWxlU3lzdGVtQ2FsbGJhY2ssIGVy
cm9yQ2FsbGJhY2spOworfSBlbHNlCisgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBGaWxl
U3lzdGVtIEFQSSBzdXBwb3J0LiIpOworCit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA3MWEzNmQ1MGZjYzdjNWNlNmJjMWFhYzkzYThkN2UwZTM1NDY2YjVl
Li5jNDM3N2NhOWNlODcwYzllZWQ2YjYxZWFhNzk1ZjBhMjZkMGE2NzMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTEtMDItMjggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Zp
bGVhcGldIEltcGxlbWVudCBMb2NhbEZpbGVTeXN0ZW0ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVS
SQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ3NzQK
KworICAgICAgICBTZWUgaHR0cDovL2Rldi53My5vcmcvMjAwOS9kYXAvZmlsZS1zeXN0ZW0vZmls
ZS1kaXItc3lzLmh0bWwjbWV0aG9kcworICAgICAgICBmb3IgdGhlIHNwZWMgaW1wbGVtZW50ZWQg
YnkgdGhpcyBwYXRjaC4KKworICAgICAgICBUZXN0OiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb2x2ZS11
cmkuaHRtbAorCisgICAgICAgICogZmlsZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVtVVJMKToKKyAg
ICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmg6CisgICAgICAgIEFkZGVkIGNvbnN0
YW50cyBmb3IgInRlbXBvcmFyeSIgYW5kICJwZXJzaXN0ZW50Ii4KKyAgICAgICAgKiBmaWxlYXBp
L0VudHJ5QmFzZS5jcHA6CisgICAgICAgIFJlcGxhY2UgaGFyZGNvZGVkIHN0cmluZ3Mgd2l0aCBh
Zm9yZW1lbnRpb25lZCBjb25zdGFudHMuCisgICAgICAgICogZmlsZWFwaS9GaWxlU3lzdGVtQ2Fs
bGJhY2tzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVVUklDYWxsYmFja3M6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvbHZlVVJJQ2FsbGJhY2tzOjpSZXNvbHZlVVJJQ2Fs
bGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc29sdmVVUklDYWxsYmFja3M6OmRpZE9wZW5G
aWxlU3lzdGVtKToKKyAgICAgICAgQ2hhaW5zIGEgY2FsbCBvZiBvcGVuRmlsZVN5c3RlbSB0byBj
YWxscyB0byBnZXREaXJlY3RvcnkvZ2V0RmlsZS4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0
ZW1DYWxsYmFja3MuaDoKKyAgICAgICAgKiBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKToKKyAgICAg
ICAgKiBmaWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oOgorICAgICAgICBSZW1vdmUgc2l6ZSBhcmd1
bWVudCBmcm9tIHJlYWRGaWxlU3lzdGVtKCkKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkp
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cu
aWRsOgorCiAyMDExLTAyLTI1ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCmluZGV4IDUyMzM0ZDdkODUzNmU2MmMwNDNiYjYy
ZTk2OThiNTY5NjQ3NGIzMjcuLjc4OGQ5NjdlYThiZjk2MWUyYjE3ODdmMDk2YTRlNTcxOWY5YWNl
ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbUJhc2UuY3BwCkBA
IC01MCw2ICs1MCwzOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NvbnN0IGNoYXIgRE9N
RmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeFtdID0gInBlcnNpc3RlbnQiOwor
Y29uc3Qgc2l6ZV90IERPTUZpbGVTeXN0ZW1CYXNlOjprUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5n
dGggPSBzaXplb2YoRE9NRmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0aFByZWZpeCkgLSAx
OworY29uc3QgY2hhciBET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBhdGhQcmVmaXhbXSA9
ICJ0ZW1wb3JhcnkiOworY29uc3Qgc2l6ZV90IERPTUZpbGVTeXN0ZW1CYXNlOjprVGVtcG9yYXJ5
UGF0aFByZWZpeExlbmd0aCA9IHNpemVvZihET01GaWxlU3lzdGVtQmFzZTo6a1RlbXBvcmFyeVBh
dGhQcmVmaXgpIC0gMTsKKworYm9vbCBET01GaWxlU3lzdGVtQmFzZTo6Y3JhY2tGaWxlU3lzdGVt
VVJMKGNvbnN0IEtVUkwmIHVybCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiB0eXBlLCBTdHJpbmcm
IGZpbGVQYXRoKQoreworICAgIGlmICghdXJsLnByb3RvY29sSXMoImZpbGVzeXN0ZW0iKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwucGF0aCgpKTsKKyAgICBTdHJpbmcgcGF0aCA9IG9yaWdpblVSTC5wYXRoKCk7CisgICAg
aWYgKHBhdGguaXNFbXB0eSgpIHx8IHBhdGhbMF0gIT0gJy8nKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpOworCisgICAgaWYgKHBhdGguc3RhcnRz
V2l0aChrVGVtcG9yYXJ5UGF0aFByZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5
c3RlbTo6VGVtcG9yYXJ5OworICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoa1RlbXBvcmFy
eVBhdGhQcmVmaXhMZW5ndGgpOworICAgIH0gZWxzZSBpZiAocGF0aC5zdGFydHNXaXRoKGtQZXJz
aXN0ZW50UGF0aFByZWZpeCkpIHsKKyAgICAgICAgdHlwZSA9IEFzeW5jRmlsZVN5c3RlbTo6UGVy
c2lzdGVudDsKKyAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKGtQZXJzaXN0ZW50UGF0aFBy
ZWZpeExlbmd0aCk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChwYXRoLmlzRW1wdHkoKSB8fCBwYXRoWzBdICE9ICcvJykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZmlsZVBhdGguc3dhcChwYXRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogRE9N
RmlsZVN5c3RlbUJhc2U6OkRPTUZpbGVTeXN0ZW1CYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+
IGFzeW5jRmlsZVN5c3RlbSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9uYW1l
KG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1C
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW1CYXNlLmgKaW5kZXgg
OWE4Y2YyZWVkMmM4YzEzNzUyZjhlY2YxMzdhYjQ2MDBiNmVhNWFiYy4uNjMzMmI2M2U3M2IyOGYx
Yzc5ODdmYjU5MTllNDQ2MDk3MWJhNzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlU3lzdGVtQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRE9N
RmlsZVN5c3RlbUJhc2UuaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7
CiBjbGFzcyBFbnRyeUJhc2U7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogY2xhc3MgRXJyb3JDYWxs
YmFjazsKK2NsYXNzIEtVUkw7CiBjbGFzcyBNZXRhZGF0YUNhbGxiYWNrOwogY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwpAQCAtNjEsNiArNjIsMTIg
QEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5ET01GaWxlU3lzdGVtQmFzZSgpOwogCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIga1BlcnNpc3RlbnRQYXRoUHJlZml4W107CisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBrUGVyc2lzdGVudFBhdGhQcmVmaXhMZW5ndGg7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIga1RlbXBvcmFyeVBhdGhQcmVmaXhbXTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGtUZW1wb3JhcnlQYXRoUHJlZml4TGVuZ3RoOworICAgIHN0YXRpYyBib29sIGNyYWNrRmlsZVN5
c3RlbVVSTChjb25zdCBLVVJMJiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlJiwgU3RyaW5nJiBmaWxl
UGF0aCk7CisKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KICAgICBBc3luY0ZpbGVTeXN0ZW0qIGFzeW5jRmlsZVN5c3RlbSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXN5bmNGaWxlU3lzdGVtLmdldCgpOyB9CiAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5
T3JpZ2luKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5QmFzZS5jcHAKaW5kZXggNzQ1
ZWE2ZTVjODVkNjM1NTBmZjAwM2IzMzI3YmRiNDI5N2YyNWRkMS4uYWQzYmVjMDY1ZjM0MWU3ZTFl
NGZhMGY3MDUwZWI0ZDU1MTE3ZWVkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9FbnRyeUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnlCYXNlLmNw
cApAQCAtNjAsNyArNjAsNyBAQCBTdHJpbmcgRW50cnlCYXNlOjp0b1VSSSgpCiAgICAgcmVzdWx0
LmFwcGVuZCgiZmlsZXN5c3RlbToiKTsKICAgICByZXN1bHQuYXBwZW5kKG1fZmlsZVN5c3RlbS0+
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAgICAgcmVzdWx0LmFwcGVuZCgiLyIpOwot
ICAgIHJlc3VsdC5hcHBlbmQobV9maWxlU3lzdGVtLT5hc3luY0ZpbGVTeXN0ZW0oKS0+dHlwZSgp
ID09IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5ID8gInRlbXBvcmFyeSIgOiAicGVyc2lzdGVu
dCIpOworICAgIHJlc3VsdC5hcHBlbmQobV9maWxlU3lzdGVtLT5hc3luY0ZpbGVTeXN0ZW0oKS0+
dHlwZSgpID09IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5ID8gRE9NRmlsZVN5c3RlbUJhc2U6
OmtUZW1wb3JhcnlQYXRoUHJlZml4IDogRE9NRmlsZVN5c3RlbUJhc2U6OmtQZXJzaXN0ZW50UGF0
aFByZWZpeCk7CiAgICAgcmVzdWx0LmFwcGVuZChtX2Z1bGxQYXRoKTsKICAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGVTeXN0ZW1DYWxsYmFja3MuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVt
Q2FsbGJhY2tzLmNwcAppbmRleCA5NjYzMzdiMTc3ZGZmMTVlYmEzNjNmYWE2ZmY2Y2VmZDQzYTQ2
YWQ3Li4xZjhiNGUxZTY5YmZmOTJmOTY1MGEwNmE3N2NkMmE2MDA0ZjJkYzI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKQEAgLTE5Miw2ICsx
OTIsNjUgQEAgdm9pZCBGaWxlU3lzdGVtQ2FsbGJhY2tzOjpkaWRPcGVuRmlsZVN5c3RlbShjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmMKICAgICBtX3N1Y2Nlc3NDYWxsYmFjay5j
bGVhcigpOwogfQogCisvLyBSZXNvbHZlVVJJQ2FsbGJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIEVycm9yQ2FsbGJhY2tXcmFwcGVyIDogcHVibGljIEVycm9yQ2FsbGJhY2sgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2tXcmFwcGVyPiBjcmVhdGUoUGFz
c1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlU3lzdGVtLCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrLCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBFcnJvckNhbGxiYWNrV3JhcHBlcihmaWxlU3lzdGVtLCBzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIGZpbGVQYXRoKSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGhh
bmRsZUV2ZW50KEZpbGVFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBBU1NFUlQoZXJyb3Ip
OworICAgICAgICAvLyBGSVhNRTogT25seSBjaGVjayBmb3IgVFlQRV9NSVNNQVRDSF9FUlIgb25j
ZSBDaHJvbWl1bSBpcyBmaXhlZCB0byByZXR1cm4gdGhhdCBhcyByZXF1aXJlZCBieSB0aGUgc3Bl
Yy4KKyAgICAgICAgaWYgKGVycm9yLT5jb2RlKCkgPT0gRmlsZUVycm9yOjpUWVBFX01JU01BVENI
X0VSUiB8fCBlcnJvci0+Y29kZSgpID09IEZpbGVFcnJvcjo6SU5WQUxJRF9TVEFURV9FUlIpCisg
ICAgICAgICAgICBtX2ZpbGVTeXN0ZW0tPmdldEZpbGUobV9maWxlU3lzdGVtLT5yb290KCkuZ2V0
KCksIG1fZmlsZVBhdGgsIDAsIG1fc3VjY2Vzc0NhbGxiYWNrLCBtX2Vycm9yQ2FsbGJhY2spOwor
ICAgICAgICBlbHNlIGlmIChtX2Vycm9yQ2FsbGJhY2spCisgICAgICAgICAgICBtX2Vycm9yQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KGVycm9yKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
Citwcml2YXRlOgorICAgIEVycm9yQ2FsbGJhY2tXcmFwcGVyKFBhc3NSZWZQdHI8RE9NRmlsZVN5
c3RlbT4gZmlsZVN5c3RlbSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCkKKyAgICAgICAgOiBtX2ZpbGVTeXN0ZW0oZmlsZVN5c3RlbSkKKyAgICAgICAg
LCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCisgICAgICAgICwgbV9lcnJvckNh
bGxiYWNrKGVycm9yQ2FsbGJhY2spCisgICAgICAgICwgbV9maWxlUGF0aChmaWxlUGF0aCkKKyAg
ICB7CisgICAgfQorCisgICAgUmVmUHRyPERPTUZpbGVTeXN0ZW0+IG1fZmlsZVN5c3RlbTsKKyAg
ICBSZWZQdHI8RW50cnlDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CisgICAgUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAgICBTdHJpbmcgbV9maWxlUGF0aDsKK307
CisKK30gLy8gbmFtZXNwYWNlCisKK1Bhc3NPd25QdHI8UmVzb2x2ZVVSSUNhbGxiYWNrcz4gUmVz
b2x2ZVVSSUNhbGxiYWNrczo6Y3JlYXRlKFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZXNvbHZlVVJJQ2FsbGJhY2tz
KHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
ZmlsZVBhdGgpKTsKK30KKworUmVzb2x2ZVVSSUNhbGxiYWNrczo6UmVzb2x2ZVVSSUNhbGxiYWNr
cyhQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQorICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jh
c2UoZXJyb3JDYWxsYmFjaykKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3NDYWxsYmFj
aykKKyAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9maWxl
UGF0aChmaWxlUGF0aCkKK3sKK30KKwordm9pZCBSZXNvbHZlVVJJQ2FsbGJhY2tzOjpkaWRPcGVu
RmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
PiBhc3luY0ZpbGVTeXN0ZW0pCit7CisgICAgQVNTRVJUKGFzeW5jRmlsZVN5c3RlbSk7CisgICAg
UmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0gPSBET01GaWxlU3lzdGVtOjpjcmVhdGUo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCBuYW1lLCBhc3luY0ZpbGVTeXN0ZW0ubGVh
a1B0cigpKTsKKyAgICBmaWxlU3lzdGVtLT5nZXREaXJlY3RvcnkoZmlsZVN5c3RlbS0+cm9vdCgp
LmdldCgpLCBtX2ZpbGVQYXRoLCAwLCBtX3N1Y2Nlc3NDYWxsYmFjaywgRXJyb3JDYWxsYmFja1dy
YXBwZXI6OmNyZWF0ZShmaWxlU3lzdGVtLCBtX3N1Y2Nlc3NDYWxsYmFjaywgbV9lcnJvckNhbGxi
YWNrLCBtX2ZpbGVQYXRoKSk7Cit9CisKIC8vIE1ldGFkYXRhQ2FsbGJhY2tzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUGFzc093
blB0cjxNZXRhZGF0YUNhbGxiYWNrcz4gTWV0YWRhdGFDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVm
UHRyPE1ldGFkYXRhQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0
ZW1DYWxsYmFja3MuaAppbmRleCA4MzAwMGMyZGQzYzFmODM3MWRiYzM3MjM5NTE1YWJjZjExYWYy
MTk1Li43ZjY4NjI1YWM5MjY4ZjhlMjU0OWQxZDVhODkwZDg0Y2MwNWZjZGQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaApAQCAtNDMsMTAgKzQzLDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFzeW5jRmlsZVdyaXRlcjsKIGNsYXNzIERP
TUZpbGVTeXN0ZW1CYXNlOwogY2xhc3MgRGlyZWN0b3J5UmVhZGVyQmFzZTsKLWNsYXNzIEVycm9y
Q2FsbGJhY2s7CiBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CiBjbGFzcyBFbnRyeUFycmF5OwogY2xh
c3MgRW50cnlDYWxsYmFjazsKK2NsYXNzIEVycm9yQ2FsbGJhY2s7CiBzdHJ1Y3QgRmlsZU1ldGFk
YXRhOwogY2xhc3MgRmlsZVN5c3RlbUNhbGxiYWNrOwogY2xhc3MgRmlsZVdyaXRlckJhc2U7CkBA
IC0xMjMsNiArMTIzLDE4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH07CiAKK2NsYXNzIFJlc29sdmVVUklD
YWxsYmFja3MgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPFJlc29sdmVVUklDYWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBmaWxlUGF0aCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW0+KTsKKworcHJpdmF0ZToKKyAgICBSZXNvbHZlVVJJQ2FsbGJhY2tzKFBhc3NSZWZQdHI8
RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKKyAgICBSZWZQdHI8RW50cnlDYWxs
YmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBTdHJpbmcgbV9maWxlUGF0aDsKK307
CisKIGNsYXNzIE1ldGFkYXRhQ2FsbGJhY2tzIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NC
YXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxNZXRhZGF0YUNhbGxiYWNrcz4g
Y3JlYXRlKFBhc3NSZWZQdHI8TWV0YWRhdGFDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0
ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uY3BwCmluZGV4
IDcyMWZkZjVjYjdiMGVmYzMxMTZlOGNhYWZjMmJhNmU0NTllZDY1YjEuLjY4OGQxNTU1OTVmNTcx
MTkyY2YzNjhlMDU5ZjNmNjc0NjVmOTAyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvTG9jYWxGaWxlU3lzdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xv
Y2FsRmlsZVN5c3RlbS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIHZvaWQgb3BlbkZpbGVT
eXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNv
bnMKICAgICBBc3luY0ZpbGVTeXN0ZW06Om9wZW5GaWxlU3lzdGVtKGJhc2VQYXRoLCBpZGVudGlm
aWVyLCB0eXBlLCBjcmVhdGUsIGNhbGxiYWNrcyk7CiB9CiAKLXZvaWQgTG9jYWxGaWxlU3lzdGVt
OjpyZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0Zp
bGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lz
dGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlw
ZSB0eXBlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewogICAgIC8vIEFzeW5jRmlsZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0gY2FsbHMgY2FsbGJhY2tz
IHN5bmNocm9ub3VzbHksIHNvIHRoZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGFzeW5jaHJv
bm91c2x5LgogICAgIGNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZp
bGVTeXN0ZW0sIGZpbGVTeXN0ZW1CYXNlUGF0aCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgdHlwZSwgZmFsc2UsIGNhbGxiYWNrcykpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvTG9jYWxGaWxlU3lzdGVtLmgKaW5kZXggMTJhNzAxMmQzNDY1Yjk4N2Nl
OGQ5YTc4ZjY0NmZjMjc2MWZjYzRiNi4uYmFmNzJkOWQwYzI0ZGU3YWM5ZGNhY2EyZWZlYWQzMjAx
N2M5MGYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Mb2NhbEZpbGVTeXN0
ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0xvY2FsRmlsZVN5c3RlbS5oCkBAIC01
NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTG9jYWxGaWxlU3lzdGVtJiBsb2NhbEZp
bGVTeXN0ZW0oKTsKIAogICAgIC8vIERvZXMgbm90IGNyZWF0ZSB0aGUgcm9vdCBwYXRoIGZvciBm
aWxlIHN5c3RlbSwganVzdCByZWFkcyBpdCBpZiBhdmFpbGFibGUuCi0gICAgdm9pZCByZWFkRmls
ZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBs
b25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKKyAg
ICB2b2lkIHJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVT
eXN0ZW06OlR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAKICAg
ICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0Zp
bGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4sIGJvb2wgc3luY2hyb25vdXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAppbmRleCAyN2YxMTg0OGZhOGRiZWU1MTM5ZTE2NDE4NWU4NTJiOWQyZjc1ZTMx
Li4yMmVjMGNjOTcyODVhZDBlODFkODY1ODAxNmRjNjAwMWI2YWEzYmY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCkBAIC05OSw2ICs5OSw4IEBACiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQogI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0u
aCIKKyNpbmNsdWRlICJET01GaWxlU3lzdGVtQmFzZS5oIgorI2luY2x1ZGUgIkVudHJ5Q2FsbGJh
Y2suaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZUVycm9yLmgi
CiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrLmgiCkBAIC03NTMsNiArNzU1LDI5IEBAIHZv
aWQgRE9NV2luZG93OjpyZXF1ZXN0RmlsZVN5c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUs
IFBhc3NSZWZQdHI8RmlsZVN5c3RlCiAgICAgTG9jYWxGaWxlU3lzdGVtOjpsb2NhbEZpbGVTeXN0
ZW0oKS5yZXF1ZXN0RmlsZVN5c3RlbShkb2N1bWVudCwgZmlsZVN5c3RlbVR5cGUsIHNpemUsIEZp
bGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ss
IGRvY3VtZW50KSwgZmFsc2UpOwogfQogCit2b2lkIERPTVdpbmRvdzo6cmVzb2x2ZUxvY2FsRmls
ZVN5c3RlbVVSSShjb25zdCBTdHJpbmcmIHVyaSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
K3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIGlmICgh
ZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpOworICAgIEtVUkwgY29tcGxldGVk
VVJMID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVyaSk7CisgICAgaWYgKCFBc3luY0ZpbGVTeXN0
ZW06OmlzQXZhaWxhYmxlKCkgfHwgIXNlY3VyaXR5T3JpZ2luLT5jYW5BY2Nlc3NGaWxlU3lzdGVt
KCkgfHwgIXNlY3VyaXR5T3JpZ2luLT5jYW5SZXF1ZXN0KGNvbXBsZXRlZFVSTCkpIHsKKyAgICAg
ICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVudCwgZXJyb3JDYWxsYmFj
aywgRmlsZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTRUNVUklUWV9FUlIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlOworICAgIFN0
cmluZyBmaWxlUGF0aDsKKyAgICBpZiAoIWNvbXBsZXRlZFVSTC5pc1ZhbGlkKCkgfHwgIURPTUZp
bGVTeXN0ZW1CYXNlOjpjcmFja0ZpbGVTeXN0ZW1VUkwoY29tcGxldGVkVVJMLCB0eXBlLCBmaWxl
UGF0aCkpIHsKKyAgICAgICAgRE9NRmlsZVN5c3RlbTo6c2NoZWR1bGVDYWxsYmFjayhkb2N1bWVu
dCwgZXJyb3JDYWxsYmFjaywgRmlsZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpTWU5UQVhfRVJS
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBMb2NhbEZpbGVTeXN0ZW06OmxvY2Fs
RmlsZVN5c3RlbSgpLnJlYWRGaWxlU3lzdGVtKGRvY3VtZW50LCB0eXBlLCBSZXNvbHZlVVJJQ2Fs
bGJhY2tzOjpjcmVhdGUoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBkb2N1bWVudCwg
ZmlsZVBhdGgpKTsKK30KKwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihET01XaW5k
b3c6OlRFTVBPUkFSWSkgPT0gc3RhdGljX2Nhc3Q8aW50PihBc3luY0ZpbGVTeXN0ZW06OlRlbXBv
cmFyeSksIGVudW1fbWlzbWF0Y2gpOwogQ09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihE
T01XaW5kb3c6OlBFUlNJU1RFTlQpID09IHN0YXRpY19jYXN0PGludD4oQXN5bmNGaWxlU3lzdGVt
OjpQZXJzaXN0ZW50KSwgZW51bV9taXNtYXRjaCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmlu
ZGV4IDA1ODE2NWZiOGRiYWVhOTk5MTY5MDVkOWI0ZGE4ODY4NDEwYzgyMmYuLmFmOTg0Yzk4YTFh
Mzk4ZDI5NTU1Nzg1NDVhZTg1OGUyNTBhY2QxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApA
QCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRGF0YWJhc2VD
YWxsYmFjazsKICAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBFbGVtZW50OworICAgIGNs
YXNzIEVudHJ5Q2FsbGJhY2s7CiAgICAgY2xhc3MgRXJyb3JDYWxsYmFjazsKICAgICBjbGFzcyBF
dmVudExpc3RlbmVyOwogICAgIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKQEAgLTM4Nyw2ICsz
ODgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBQRVJTSVNURU5ULAogICAg
ICAgICB9OwogICAgICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxv
bmcgc2l6ZSwgUGFzc1JlZlB0cjxGaWxlU3lzdGVtQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+KTsKKyAgICAgICAgdm9pZCByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJKGNvbnN0
IFN0cmluZyYsIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4pOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbAppbmRleCBmZDliY2UwMTE0MmI0YmU1MDE4MTMyODIzNDZkMzc1N2Q1
MWFhNjIxLi5hOTQ4YTAxOGY5OTkzMTdkYjZlMzY5ODk3YjVhY2VmYjZiYzk4OWRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC0xOTUsNiArMTk1LDcgQEAgbW9kdWxlIHdpbmRvdyB7
CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRFTVBPUkFSWSA9IDA7CiAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFBFUlNJU1RFTlQgPSAxOwogICAgICAgICBbRW5hYmxlZEF0UnVu
dGltZT1GaWxlU3lzdGVtXSB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGluIHVuc2lnbmVkIHNob3J0
IHR5cGUsIGluIGxvbmcgbG9uZyBzaXplLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBGaWxlU3lz
dGVtQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBFcnJv
ckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOworICAgICAgICBbRW5hYmxlZEF0UnVudGltZT1GaWxl
U3lzdGVtXSB2b2lkIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkkoaW4gRE9NU3RyaW5nIHVyaSwg
aW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGlu
IFtDYWxsYmFjaywgT3B0aW9uYWxdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CiAKICAg
ICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lPUZpbGVTeXN0ZW1dIEZsYWdzQ29uc3Ry
dWN0b3IgRmxhZ3M7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzgwY2I2
YmE5Njc4ZjY5YmJjZTc1NDAxM2M3NmQwNzQ4YWU0NzU2ZC4uMjcyNTg3YTM5MzQ2ZWY1YzE0NzMz
MTI0YWViMjRhOGVmZjA5OTBhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxMS0wMi0yOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbZmlsZWFwaV0g
SW1wbGVtZW50IExvY2FsRmlsZVN5c3RlbS5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDc3NAorCisgICAg
ICAgICogc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0pOgorICAgICAgICBSZW1vdmVkIHNpemUg
YXJndW1lbnQgdG8gcmVhZEZpbGVTeXN0ZW0oKQorCiAyMDExLTAyLTI3ICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZp
c2hlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcAppbmRleCBjYzhjMWQ4NDU5YjE3ZWQ1YjZjNzYwMTA5N2NjZmVkMjE1
NmQwODM0Li4zNWU0ZGU4Mjg5ZDkyNTgwYmY3MmNhNmFkMzAyYTc1MjkzMWJiZDM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwCkBAIC01NywxMiArNTcsMTIgQEAgTG9jYWxGaWxlU3lzdGVtJiBMb2NhbEZpbGVTeXN0
ZW06OmxvY2FsRmlsZVN5c3RlbSgpCiAgICAgcmV0dXJuICpsb2NhbEZpbGVTeXN0ZW07CiB9CiAK
LXZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUs
IFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIExv
Y2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQgJiYgY29udGV4
dC0+aXNEb2N1bWVudCgpKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KGNvbnRleHQpOwogICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFt
ZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgd2ViRnJhbWUtPmNsaWVu
dCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6
VHlwZT4odHlwZSksIHNpemUsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwo
Y2FsbGJhY2tzLCB0eXBlKSk7CisgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3Rl
bSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIDAsIGZh
bHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiB9
CiAKIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25n
IHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGJv
b2wgc3luY2hyb25vdXMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>