<?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>44917</bug_id>
          
          <creation_ts>2010-08-30 17:57:38 -0700</creation_ts>
          <short_desc>[chromium] Implement Readable/Writable versions of ChromiumDataObjectNew</short_desc>
          <delta_ts>2010-08-31 19:12:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44914</dependson>
    
    <dependson>44992</dependson>
          <blocked>44727</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>271821</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-30 17:57:38 -0700</bug_when>
    <thetext>ReadableDataObject calls the Chromium IPCs to retrieve any applicable data. WritableDataObject buffers data in an internal map. It currently has to cheat for cut/copy due to a limitation in the WebCore interface; it calls ClipboardWriteData directly. This situation will hopefully be addressed in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271822</commentid>
    <comment_count>1</comment_count>
      <attachid>65988</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-30 18:00:28 -0700</bug_when>
    <thetext>Created attachment 65988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271829</commentid>
    <comment_count>2</comment_count>
      <attachid>65991</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-30 18:13:51 -0700</bug_when>
    <thetext>Created attachment 65991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271848</commentid>
    <comment_count>3</comment_count>
      <attachid>65991</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-30 18:39:43 -0700</bug_when>
    <thetext>Comment on attachment 65991
Patch

&gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.cpp b/WebCore/platform/chromium/ReadableDataObject.cpp
&gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.

Nit: 2010

&gt; +static void ensureTypeCacheInitialized(bool isForDragging,
&gt; +                                       bool&amp; isTypeCacheInitialized,
&gt; +                                       HashSet&lt;String&gt;&amp; types,
&gt; +                                       bool&amp; containsFilenames)

It looks like all the calls to this pass in the same member variables.  Can we just make it a member function?

&gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.h b/WebCore/platform/chromium/ReadableDataObject.h
&gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.

Nit: 2010

&gt; +    // To avoid making a lot of IPC calls for each drag event, we cache some
&gt; +    // values in the renderer.
&gt; +    // TODO: Is this actually the right place to do the caching? Isn&apos;t the data

WebKit style is to use FIXME rather than TODO.

&gt; diff --git a/WebCore/platform/chromium/WritableDataObject.cpp b/WebCore/platform/chromium/WritableDataObject.cpp
&gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.

Nit: 2010

&gt; +// TODO: Verify it the implementations for read-only methods are needed. Per the
&gt; +// code currently in ClipboardChromium, it&apos;s actually unnecessary, but we should
&gt; +// double check if this is intended by the spec, especially since it doesn&apos;t
&gt; +// really address when the clipboard object should be readable and when it
&gt; +// should be writable.

FIXME, also, &quot;Verify it the&quot; sounds funny.  I&apos;m also not sure I understand this comment.  Are you saying you&apos;re not sure if you need these methods at all?

&gt; +void WritableDataObject::clearAllExceptFiles()
&gt; +{
&gt; +    // TODO: The spec does not provide a way to populate FileList currently. In
&gt; +    // fact, the spec explicitly states that dragging files can only happen from
&gt; +    // outside a browsing context.

FIXME

&gt; +void WritableDataObject::clear()

What is the difference between clear() and clearData()?  Why do we need both?

&gt; +HashSet&lt;String&gt; WritableDataObject::types() const
&gt; +{

Would it be better for the caller to pass in a HasSet&lt;String&gt; to avoid a copy?

&gt; +String WritableDataObject::getData(const String&amp; type, bool&amp; succeeded) const
&gt; +{
&gt; +    // TODO: For pasting, we need to read directly from the pasteboard. Right
&gt; +    // now, Clipboard::getData doesn&apos;t allow reads when the clipboard is
&gt; +    // writable, but we have may to address this in the future.

FIXME

&gt; diff --git a/WebCore/platform/chromium/WritableDataObject.h b/WebCore/platform/chromium/WritableDataObject.h
&gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.

Nit: 2010

&gt; +    // Special accessors for URL and HTML since they carry additional
&gt; +    // metadata.

I don&apos;t think you need to duplicate the comments from the parent class.

&gt; +private:
&gt; +    WritableDataObject(bool isForDragging);

Nit: explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272220</commentid>
    <comment_count>4</comment_count>
      <attachid>66076</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 11:06:14 -0700</bug_when>
    <thetext>Created attachment 66076
Patch

(In reply to comment #3)
&gt; (From update of attachment 65991 [details])
&gt; &gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.cpp b/WebCore/platform/chromium/ReadableDataObject.cpp
&gt; &gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
&gt; 
&gt; Nit: 2010
&gt; 

Done.

&gt; &gt; +static void ensureTypeCacheInitialized(bool isForDragging,
&gt; &gt; +                                       bool&amp; isTypeCacheInitialized,
&gt; &gt; +                                       HashSet&lt;String&gt;&amp; types,
&gt; &gt; +                                       bool&amp; containsFilenames)
&gt; 
&gt; It looks like all the calls to this pass in the same member variables.  Can we just make it a member function?
&gt; 

Done.

&gt; &gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.h b/WebCore/platform/chromium/ReadableDataObject.h
&gt; &gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
&gt; 
&gt; Nit: 2010
&gt; 

Done.

&gt; &gt; +    // To avoid making a lot of IPC calls for each drag event, we cache some
&gt; &gt; +    // values in the renderer.
&gt; &gt; +    // TODO: Is this actually the right place to do the caching? Isn&apos;t the data
&gt; 
&gt; WebKit style is to use FIXME rather than TODO.
&gt; 

Removed the comment, as I don&apos;t think there&apos;s a better place to do it anyway.

&gt; &gt; diff --git a/WebCore/platform/chromium/WritableDataObject.cpp b/WebCore/platform/chromium/WritableDataObject.cpp
&gt; &gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
&gt; 
&gt; Nit: 2010
&gt; 

Done.

&gt; &gt; +// TODO: Verify it the implementations for read-only methods are needed. Per the
&gt; &gt; +// code currently in ClipboardChromium, it&apos;s actually unnecessary, but we should
&gt; &gt; +// double check if this is intended by the spec, especially since it doesn&apos;t
&gt; &gt; +// really address when the clipboard object should be readable and when it
&gt; &gt; +// should be writable.
&gt; 
&gt; FIXME, also, &quot;Verify it the&quot; sounds funny.  I&apos;m also not sure I understand this comment.  Are you saying you&apos;re not sure if you need these methods at all?

Sorry, it was a typo. It should have been &apos;verify if&apos;. And yes, I&apos;m not sure if an implementation is even needed for these methods.

&gt; 
&gt; &gt; +void WritableDataObject::clearAllExceptFiles()
&gt; &gt; +{
&gt; &gt; +    // TODO: The spec does not provide a way to populate FileList currently. In
&gt; &gt; +    // fact, the spec explicitly states that dragging files can only happen from
&gt; &gt; +    // outside a browsing context.
&gt; 
&gt; FIXME
&gt; 

Done.

&gt; &gt; +void WritableDataObject::clear()
&gt; 
&gt; What is the difference between clear() and clearData()?  Why do we need both?
&gt; 

clear() clears all the data and clearData() clears only one type of data. It was originally inherited from Clipboard as well; I&apos;ve renamed clear() to clearAll().

&gt; &gt; +HashSet&lt;String&gt; WritableDataObject::types() const
&gt; &gt; +{
&gt; 
&gt; Would it be better for the caller to pass in a HasSet&lt;String&gt; to avoid a copy?
&gt; 

I opted to inherit most of the signatures from Clipboard.

&gt; &gt; +String WritableDataObject::getData(const String&amp; type, bool&amp; succeeded) const
&gt; &gt; +{
&gt; &gt; +    // TODO: For pasting, we need to read directly from the pasteboard. Right
&gt; &gt; +    // now, Clipboard::getData doesn&apos;t allow reads when the clipboard is
&gt; &gt; +    // writable, but we have may to address this in the future.
&gt; 
&gt; FIXME
&gt; 

Done.

&gt; &gt; diff --git a/WebCore/platform/chromium/WritableDataObject.h b/WebCore/platform/chromium/WritableDataObject.h
&gt; &gt; + * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
&gt; 
&gt; Nit: 2010

Done.

&gt; 
&gt; &gt; +    // Special accessors for URL and HTML since they carry additional
&gt; &gt; +    // metadata.
&gt; 
&gt; I don&apos;t think you need to duplicate the comments from the parent class.
&gt; 

Done.

&gt; &gt; +private:
&gt; &gt; +    WritableDataObject(bool isForDragging);
&gt; 
&gt; Nit: explicit

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272271</commentid>
    <comment_count>5</comment_count>
      <attachid>66084</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 12:20:27 -0700</bug_when>
    <thetext>Created attachment 66084
Patch

Per the discussion, remove the interface since RDO/WDO implement two mutually exclusive set of functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272273</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 12:23:20 -0700</bug_when>
    <thetext>Attachment 66084 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/chromium/WritableDataObject.h:48:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/platform/chromium/WritableDataObject.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272274</commentid>
    <comment_count>7</comment_count>
      <attachid>66085</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 12:25:32 -0700</bug_when>
    <thetext>Created attachment 66085
Patch

Remove two spaces that snuck in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272333</commentid>
    <comment_count>8</comment_count>
      <attachid>66085</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-31 13:46:31 -0700</bug_when>
    <thetext>Comment on attachment 66085
Patch

I think you need to remove the include for ChromiumDataObjectNew.h.  Did you try compiling?

&gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.cpp b/WebCore/platform/chromium/ReadableDataObject.cpp
&gt; +ReadableDataObject::ReadableDataObject(bool isForDragging)
&gt; +    : m_isForDragging(isForDragging), m_isTypeCacheInitialized(false)

What about m_containsFilenames?

&gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.h b/WebCore/platform/chromium/ReadableDataObject.h
&gt; +    // To avoid making a lot of IPC calls for each drag event, we cache some
&gt; +    // values in the renderer.
&gt; +    mutable HashSet&lt;String&gt; m_types;
&gt; +    mutable bool m_containsFilenames;
&gt; +    mutable bool m_isTypeCacheInitialized;

I&apos;m not sure there&apos;s a lot of benefit to having all const methods and making these all mutable, but this seems ok.

&gt; diff --git a/WebCore/platform/chromium/WritableDataObject.cpp b/WebCore/platform/chromium/WritableDataObject.cpp
&gt; +// FIXME: Verify if the implementations for read-only methods are needed. Per the
&gt; +// code currently in ClipboardChromium, it&apos;s actually unnecessary, but we should
&gt; +// double check if this is intended by the spec, especially since it doesn&apos;t
&gt; +// really address when the clipboard object should be readable and when it
&gt; +// should be writable.

I think this comment is now obsolete.

&gt; +void WritableDataObject::clearAll()
&gt; +{
&gt; +    m_dataMap.clear();
&gt; +    m_urlTitle = &quot;&quot;;
&gt; +    m_htmlBaseURL = KURL();

Should we clear m_fileExtension here?

&gt; +void WritableDataObject::setURL(const String&amp; url, const String&amp; title)
&gt; +{
&gt; +    setData(&quot;text/uri-list&quot;, url);

Can we make constants for &quot;text/uri-list&quot; and &quot;text/html&quot;, etc?  I&apos;m surprised &quot;text/html&quot; doesn&apos;t already exist somewhere.

&gt; diff --git a/WebCore/platform/chromium/WritableDataObject.h b/WebCore/platform/chromium/WritableDataObject.h
&gt; +    HashMap&lt;String, String&gt; m_dataMap;

Should this be a map from String to SharedBuffer?  It doesn&apos;t make sense for a String to hold binary data (since String is for unicode bytes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272362</commentid>
    <comment_count>9</comment_count>
      <attachid>66102</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 14:16:48 -0700</bug_when>
    <thetext>Created attachment 66102
Patch

(In reply to comment #8)
&gt; (From update of attachment 66085 [details])
&gt; I think you need to remove the include for ChromiumDataObjectNew.h.  Did you try compiling?
&gt; 
&gt; &gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.cpp b/WebCore/platform/chromium/ReadableDataObject.cpp
&gt; &gt; +ReadableDataObject::ReadableDataObject(bool isForDragging)
&gt; &gt; +    : m_isForDragging(isForDragging), m_isTypeCacheInitialized(false)
&gt; 
&gt; What about m_containsFilenames?

ensureTypeCacheIsInitialized() will properly set it, but it is probably a good idea to set a default value here anyway.

&gt; 
&gt; &gt; diff --git a/WebCore/platform/chromium/ReadableDataObject.h b/WebCore/platform/chromium/ReadableDataObject.h
&gt; &gt; +    // To avoid making a lot of IPC calls for each drag event, we cache some
&gt; &gt; +    // values in the renderer.
&gt; &gt; +    mutable HashSet&lt;String&gt; m_types;
&gt; &gt; +    mutable bool m_containsFilenames;
&gt; &gt; +    mutable bool m_isTypeCacheInitialized;
&gt; 
&gt; I&apos;m not sure there&apos;s a lot of benefit to having all const methods and making these all mutable, but this seems ok.
&gt; 

I believe this is because Clipboard has some methods that are marked const, so we can only call const methods on its members.

&gt; &gt; diff --git a/WebCore/platform/chromium/WritableDataObject.cpp b/WebCore/platform/chromium/WritableDataObject.cpp
&gt; &gt; +// FIXME: Verify if the implementations for read-only methods are needed. Per the
&gt; &gt; +// code currently in ClipboardChromium, it&apos;s actually unnecessary, but we should
&gt; &gt; +// double check if this is intended by the spec, especially since it doesn&apos;t
&gt; &gt; +// really address when the clipboard object should be readable and when it
&gt; &gt; +// should be writable.
&gt; 
&gt; I think this comment is now obsolete.
&gt; 

Removed.

&gt; &gt; +void WritableDataObject::clearAll()
&gt; &gt; +{
&gt; &gt; +    m_dataMap.clear();
&gt; &gt; +    m_urlTitle = &quot;&quot;;
&gt; &gt; +    m_htmlBaseURL = KURL();
&gt; 
&gt; Should we clear m_fileExtension here?
&gt; 

Done.

&gt; &gt; +void WritableDataObject::setURL(const String&amp; url, const String&amp; title)
&gt; &gt; +{
&gt; &gt; +    setData(&quot;text/uri-list&quot;, url);
&gt; 
&gt; Can we make constants for &quot;text/uri-list&quot; and &quot;text/html&quot;, etc?  I&apos;m surprised &quot;text/html&quot; doesn&apos;t already exist somewhere.
&gt; 

Any suggestions on a better location for these constants? I did a quick search and didn&apos;t find much, though I did find many hardcoded &quot;text/html&quot; strings.

&gt; &gt; diff --git a/WebCore/platform/chromium/WritableDataObject.h b/WebCore/platform/chromium/WritableDataObject.h
&gt; &gt; +    HashMap&lt;String, String&gt; m_dataMap;
&gt; 
&gt; Should this be a map from String to SharedBuffer?  It doesn&apos;t make sense for a String to hold binary data (since String is for unicode bytes).

The current API only allows for DOM strings. Once this part was checked in, I was planning on updating Clipboard.idl to allow manipulation of binary types and add in binary handling then. It will make the individual patches a bit smaller as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272364</commentid>
    <comment_count>10</comment_count>
      <attachid>66104</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 14:17:30 -0700</bug_when>
    <thetext>Created attachment 66104
Patch

Post the right patch this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272453</commentid>
    <comment_count>11</comment_count>
      <attachid>66104</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-31 15:56:23 -0700</bug_when>
    <thetext>Comment on attachment 66104
Patch

&gt; +++ b/WebCore/platform/chromium/ClipboardMimeTypes.h
&gt; +const char* const textPlainType = &quot;text/plain&quot;;
&gt; +const char* const textHtmlType = &quot;text/html&quot;;
&gt; +const char* const textUriListType = &quot;text/uri-list&quot;;

This is the wrong way to make shared strings.  By putting the data in the header, the value will be copied into each .cpp file that includes this file.  An example of chromium code that does this is in base/base_switches.*.  Alternately, I would stick these values as static variables off an existing class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272473</commentid>
    <comment_count>12</comment_count>
      <attachid>66133</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 16:24:37 -0700</bug_when>
    <thetext>Created attachment 66133
Patch

I was in a hurry and just depending on the (undocumented?) behavior that the linker pools identical strings. Updated the patch to only define the constants in one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272572</commentid>
    <comment_count>13</comment_count>
      <attachid>66133</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-31 19:12:32 -0700</bug_when>
    <thetext>Comment on attachment 66133
Patch

Clearing flags on attachment: 66133

Committed r66567: &lt;http://trac.webkit.org/changeset/66567&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272573</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-31 19:12:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65988</attachid>
            <date>2010-08-30 18:00:28 -0700</date>
            <delta_ts>2010-08-30 18:13:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44917-20100830180027.patch</filename>
            <type>text/plain</type>
            <size>25943</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mjg5Y2MwMWM1ODQ1NDMzN2VlOTBkNGQ0NGYyM2M2MzFkNjgyODQ1ZC4uMDQ2MjhkZWFjOTMwOWVm
NzEwNTMyYjQ2MzdmYzgwOTgwMzE5MzA3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw3MSBAQAogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IFJl
YWRhYmxlL1dyaXRhYmxlIHZlcnNpb25zIG9mIENocm9taXVtRGF0YU9iamVjdE5ldworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MTcKKworICAgICAg
ICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjbGlwYm9hcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlVHlwZUNh
Y2hlSW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpSZWFkYWJsZURh
dGFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpjbGVhckRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2Vw
dEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxl
RGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmpl
Y3Q6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OnNldFVS
TCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldEhUTUwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpzZXRIVE1MKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURh
dGFPYmplY3Q6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVj
dDo6aHRtbEJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0Ojpm
aWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Zmls
ZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6
OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6c2V0
RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OnNl
dEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2Jq
ZWN0OjpzZXRGaWxlQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFi
bGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRh
T2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpX
cml0YWJsZURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0
OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVh
ckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJs
ZURhdGFPYmplY3Q6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmpl
Y3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmdldEhU
TUwpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRIVE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpX
cml0YWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxl
RGF0YU9iamVjdDo6aHRtbEJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRh
T2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9i
amVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURh
dGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9i
amVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFP
YmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFi
bGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vV3JpdGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorCisyMDEwLTA4LTMwICBEYW5pZWwgQ2hl
bmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAgICAgICAgIFtjaHJvbWl1bV0gQWRkIGFuIGludGVyZmFjZSBmb3IgcGxhdGZv
cm0gY29weS9wYXN0ZSBkcmFnL2Ryb3AgZGF0YSBvYmplY3RzCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDkxNAogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU1ODMwOThjMDFhYTA3
YWUxMzdlN2E0MzM3MzE3ZmMwMWQxYTVmNGIuLmQ2YmM0MDJlYjI4MmMyZjM1MzAzMWJiY2M3YjAw
OTIwOTk2MDk2ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0yMTgzLDYgKzIxODMsOCBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKQEAgLTIyMDMsNiArMjIwNSw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9uLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1BhdGguaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNzgxODdl
MzFjMDMyM2FkODEwODhjNDMyMzkzMTJjMTlhMzY0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTAsMCArMSwy
MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9i
amVjdC5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBjbGlwYm9h
cmRCdWZmZXIoYm9vbCBpc0ZvckRyYWdnaW5nKQoreworICAgIHJldHVybiBpc0ZvckRyYWdnaW5n
ID8gUGFzdGVib2FyZFByaXZhdGU6OkRyYWdCdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3Rh
bmRhcmRCdWZmZXI7Cit9CisKK3N0YXRpYyB2b2lkIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVk
KGJvb2wgaXNGb3JEcmFnZ2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wmIGlzVHlwZUNhY2hlSW5pdGlhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBIYXNoU2V0PFN0cmluZz4mIHR5cGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgY29udGFpbnNGaWxlbmFtZXMpCit7CisgICAg
aWYgKGlzVHlwZUNhY2hlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHR5cGVz
ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKKyAgICAgICAg
Y2xpcGJvYXJkQnVmZmVyKGlzRm9yRHJhZ2dpbmcpLCAmY29udGFpbnNGaWxlbmFtZXMpOworICAg
IGlzVHlwZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitQYXNzUmVmUHRyPFJlYWRhYmxl
RGF0YU9iamVjdD4gUmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5n
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVhZGFibGVEYXRhT2JqZWN0KGlzRm9yRHJh
Z2dpbmcpKTsKK30KKworUmVhZGFibGVEYXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QoYm9v
bCBpc0ZvckRyYWdnaW5nKQorICAgIDogbV9pc0ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpLCBt
X2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQoZmFsc2UpCit7Cit9CisKKy8vIE5vbmUgb2YgdGhlIG5v
bi1jb25zdCBtZXRob2RzIHNob3VsZCBldmVyIGJlIGNhbGxlZC4KK3ZvaWQgUmVhZGFibGVEYXRh
T2JqZWN0OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRG
aWxlcygpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVE
YXRhT2JqZWN0OjpjbGVhcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jv
b2wgUmVhZGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICBlbnN1cmVUeXBl
Q2FjaGVJbml0aWFsaXplZChtX2lzRm9yRHJhZ2dpbmcsIG1faXNUeXBlQ2FjaGVJbml0aWFsaXpl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3R5cGVzLCBtX2NvbnRhaW5zRmls
ZW5hbWVzKTsKKyAgICByZXR1cm4gIW1fdHlwZXMuaXNFbXB0eSgpIHx8IG1fY29udGFpbnNGaWxl
bmFtZXM7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OnR5cGVzKCkg
Y29uc3QKK3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZChtX2lzRm9yRHJhZ2dpbmcs
IG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3R5cGVzLCBtX2NvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICByZXR1cm4gbV90eXBlczsKK30K
KworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBTdHJpbmcgZGF0YTsKKyAgICBTdHJpbmcg
aWdub3JlZE1ldGFkYXRhOworICAgIHN1Y2NlZWRlZCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksIHR5
cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK2Jvb2wg
UmVhZGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKFN0cmluZyogdGl0bGUp
IGNvbnN0Cit7CisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgaWdub3JlZFRpdGxlOworICAg
IGlmICghdGl0bGUpCisgICAgICAgIHRpdGxlID0gJmlnbm9yZWRUaXRsZTsKKyAgICBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lz
Rm9yRHJhZ2dpbmcpLCAidGV4dC91cmktbGlzdCIsIHVybCwgKnRpdGxlKTsKKyAgICByZXR1cm4g
dXJsOworfQorCit2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6c2V0VVJMKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkg
Y29uc3QKK3sKKyAgICBTdHJpbmcgaHRtbDsKKyAgICBTdHJpbmcgaWdub3JlZEJhc2VVUkw7Cisg
ICAgaWYgKCFiYXNlVVJMKQorICAgICAgICBiYXNlVVJMID0gJmlnbm9yZWRCYXNlVVJMOworICAg
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVm
ZmVyKG1faXNGb3JEcmFnZ2luZyksICJ0ZXh0L2h0bWwiLCBodG1sLCAqYmFzZVVSTCk7CisgICAg
cmV0dXJuIGh0bWw7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjpzZXRIVE1MKGNvbnN0
IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcygpIGNv
bnN0Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQobV9pc0ZvckRyYWdnaW5nLCBt
X2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV90eXBlcywgbV9jb250YWluc0ZpbGVuYW1lcyk7CisgICAgcmV0dXJuIG1fY29udGFpbnNGaWxl
bmFtZXM7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxl
bmFtZXMoY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZykpOworfQorCisvLyBUaGVzZSBm
dW5jdGlvbnMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20g
dGhlIHJlbmRlcmVyCisvLyB0byB0aGUgYnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IFJlYWRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Cit9CisKK1N0
cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0tVUkwgUmVhZGFibGVE
YXRhT2JqZWN0OjpodG1sQmFzZVVSTCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIEtVUkwoKTsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6
ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlQ29u
dGVudEZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZWFkYWJsZURh
dGFPYmplY3Q6OmZpbGVDb250ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEZpbGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBSZWFkYWJs
ZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3Qu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTBmMGY2Zjg3Zjg5NDRjMjliYzc2MjBlNzllMTI3NDJlOTAyMjhjZAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgK
QEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlYWRhYmxlRGF0YU9iamVjdF9oCisjZGVm
aW5lIFJlYWRhYmxlRGF0YU9iamVjdF9oCisKKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3RO
ZXcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11
bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIGJy
b3dzZXIgdG8gdGhlIHJlbmRlcmVyLgorY2xhc3MgUmVhZGFibGVEYXRhT2JqZWN0IDogcHVibGlj
IENocm9taXVtRGF0YU9iamVjdE5ldyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVhZGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKTsKKworICAgIHZp
cnR1YWwgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAg
IHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBIYXNoU2V0PFN0cmlu
Zz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0
YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAgICAvLyBTcGVj
aWFsIGFjY2Vzc29ycyBmb3IgVVJMIGFuZCBIVE1MIHNpbmNlIHRoZXkgY2FycnkgYWRkaXRpb25h
bAorICAgIC8vIG1ldGFkYXRhLgorICAgIHZpcnR1YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRp
dGxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRIVE1MKFN0cmluZyog
YmFzZVVSTCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBo
dG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNGaWxlbmFt
ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNvbnN0
OworCisgICAgLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZy
b20gdGhlIHJlbmRlcmVyIHRvIHRoZQorICAgIC8vIGJyb3dzZXIuCisgICAgdmlydHVhbCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
dXJsVGl0bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgaHRtbEJhc2VVUkwoKSBjb25zdDsK
KworICAgIC8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRhdGEgZnJvbSB0aGUgcmVuZGVy
ZXIgdG8gdGhlIGJyb3dzZXIuCisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNv
bnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworCitw
cml2YXRlOgorICAgIFJlYWRhYmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpOworCisg
ICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICAvLyBUbyBhdm9pZCBtYWtpbmcgYSBsb3Qg
b2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdlIGNhY2hlIHNvbWUKKyAgICAvLyB2
YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgorICAgIC8vIFRPRE86IElzIHRoaXMgYWN0dWFsbHkgdGhl
IHJpZ2h0IHBsYWNlIHRvIGRvIHRoZSBjYWNoaW5nPyBJc24ndCB0aGUgZGF0YQorICAgIC8vIG9i
amVjdCBnZXR0aW5nIGNyZWF0ZWQvZGVzdHJveWVkIHdpdGggZWFjaCBkcmFnIGV2ZW50PworICAg
IG11dGFibGUgSGFzaFNldDxTdHJpbmc+IG1fdHlwZXM7CisgICAgbXV0YWJsZSBib29sIG1fY29u
dGFpbnNGaWxlbmFtZXM7CisgICAgbXV0YWJsZSBib29sIG1faXNUeXBlQ2FjaGVJbml0aWFsaXpl
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg1
MDc4ZjU4NzY0NDYxZjRhMWQyOGJkNjliN2M2ZDA3MDg3M2RmOAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCww
ICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV3JpdGFibGVE
YXRhT2JqZWN0LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIFRPRE86IFZlcmlmeSBpdCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBy
ZWFkLW9ubHkgbWV0aG9kcyBhcmUgbmVlZGVkLiBQZXIgdGhlCisvLyBjb2RlIGN1cnJlbnRseSBp
biBDbGlwYm9hcmRDaHJvbWl1bSwgaXQncyBhY3R1YWxseSB1bm5lY2Vzc2FyeSwgYnV0IHdlIHNo
b3VsZAorLy8gZG91YmxlIGNoZWNrIGlmIHRoaXMgaXMgaW50ZW5kZWQgYnkgdGhlIHNwZWMsIGVz
cGVjaWFsbHkgc2luY2UgaXQgZG9lc24ndAorLy8gcmVhbGx5IGFkZHJlc3Mgd2hlbiB0aGUgY2xp
cGJvYXJkIG9iamVjdCBzaG91bGQgYmUgcmVhZGFibGUgYW5kIHdoZW4gaXQKKy8vIHNob3VsZCBi
ZSB3cml0YWJsZS4KK1Bhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFP
YmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXcml0YWJsZURhdGFPYmplY3QoaXNGb3JEcmFnZ2luZykpOworfQorCitXcml0YWJsZURh
dGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBt
X2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykKK3sKK30KKwordm9pZCBXcml0YWJsZURhdGFP
YmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgbV9kYXRhTWFwLnJl
bW92ZSh0eXBlKTsKKyAgICBpZiAodHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIG1f
dXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAg
ICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6
Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAgLy8gVE9ETzogVGhlIHNwZWMgZG9lcyBub3Qg
cHJvdmlkZSBhIHdheSB0byBwb3B1bGF0ZSBGaWxlTGlzdCBjdXJyZW50bHkuIEluCisgICAgLy8g
ZmFjdCwgdGhlIHNwZWMgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBkcmFnZ2luZyBmaWxlcyBjYW4g
b25seSBoYXBwZW4gZnJvbQorICAgIC8vIG91dHNpZGUgYSBicm93c2luZyBjb250ZXh0LgorICAg
IGNsZWFyKCk7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhcigpCit7CisgICAg
bV9kYXRhTWFwLmNsZWFyKCk7CisgICAgbV91cmxUaXRsZSA9ICIiOworICAgIG1faHRtbEJhc2VV
UkwgPSBLVVJMKCk7CisgICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7CisgICAgaWYgKG1f
ZmlsZUNvbnRlbnQpCisgICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7Cit9CisKK2Jvb2wg
V3JpdGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fZGF0
YU1hcC5pc0VtcHR5KCkgfHwgKG1fZmlsZUNvbnRlbnQgJiYgIW1fZmlsZUNvbnRlbnQtPmlzRW1w
dHkoKSk7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBXcml0YWJsZURhdGFPYmplY3Q6OnR5cGVzKCkg
Y29uc3QKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIGZvciAoSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhTWFwLmJlZ2luKCk7Cisg
ICAgICAgICBpdCAhPSBtX2RhdGFNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgcmVzdWx0LmFk
ZChpdC0+Zmlyc3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgV3Jp
dGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vl
ZGVkKSBjb25zdAoreworICAgIC8vIFRPRE86IEZvciBwYXN0aW5nLCB3ZSBuZWVkIHRvIHJlYWQg
ZGlyZWN0bHkgZnJvbSB0aGUgcGFzdGVib2FyZC4gUmlnaHQKKyAgICAvLyBub3csIENsaXBib2Fy
ZDo6Z2V0RGF0YSBkb2Vzbid0IGFsbG93IHJlYWRzIHdoZW4gdGhlIGNsaXBib2FyZCBpcworICAg
IC8vIHdyaXRhYmxlLCBidXQgd2UgaGF2ZSBtYXkgdG8gYWRkcmVzcyB0aGlzIGluIHRoZSBmdXR1
cmUuCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9k
YXRhTWFwLmZpbmQodHlwZSk7CisgICAgaWYgKGl0ICE9IG1fZGF0YU1hcC5lbmQoKSkgeworICAg
ICAgICBzdWNjZWVkZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICB9
CisgICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29s
IFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSkKK3sKKyAgICBpZiAoIW1faXNGb3JEcmFnZ2luZykgeworICAgICAgICBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIG1fZGF0YU1hcC5zZXQodHlwZSwgZGF0YSk7CisgICAg
aWYgKHR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQorICAgICAgICBtX3VybFRpdGxlID0gIiI7Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSAidGV4dC9odG1sIikKKyAgICAgICAgbV9odG1sQmFzZVVSTCA9
IEtVUkwoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gU3BlY2lhbCBhY2Nlc3NvcnMgZm9y
IFVSTCBhbmQgSFRNTCBzaW5jZSB0aGV5IGNhcnJ5IGFkZGl0aW9uYWwKKy8vIG1ldGFkYXRhLgor
U3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0Cit7
CisgICAgaWYgKHRpdGxlKQorICAgICAgICAqdGl0bGUgPSBtX3VybFRpdGxlOworICAgIGJvb2wg
aWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIGdldERhdGEoInRleHQvdXJpLWxpc3QiLCBpZ25v
cmVkU3VjY2Vzcyk7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRVUkwoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgc2V0RGF0YSgidGV4dC91
cmktbGlzdCIsIHVybCk7CisgICAgbV91cmxUaXRsZSA9IHRpdGxlOworfQorCitTdHJpbmcgV3Jp
dGFibGVEYXRhT2JqZWN0OjpnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3QKK3sKKyAgICBp
ZiAoYmFzZVVSTCkKKyAgICAgICAgKmJhc2VVUkwgPSBtX2h0bWxCYXNlVVJMOworICAgIGJvb2wg
aWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIGdldERhdGEoInRleHQvaHRtbCIsIGlnbm9yZWRT
dWNjZXNzKTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwoY29uc3QgU3Ry
aW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIHNldERhdGEoInRleHQvaHRt
bCIsIGh0bWwpOworICAgIG1faHRtbEJhc2VVUkwgPSBiYXNlVVJMOworfQorCitib29sIFdyaXRh
YmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30KKworLy8gQWNjZXNzb3JzIHVz
ZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQor
Ly8gYnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6
ZGF0YU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YU1hcDsKK30KKworU3RyaW5nIFdy
aXRhYmxlRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybFRp
dGxlOworfQorCitLVVJMIFdyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAor
eworICAgIHJldHVybiBtX2h0bWxCYXNlVVJMOworfQorCisvLyBVc2VkIGZvciB0cmFuc2ZlcnJp
bmcgZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLgorU3RyaW5nIFdy
aXRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZmlsZUV4dGVuc2lvbjsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRl
bnRGaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsK
K30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNv
bnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZpbGVDb250ZW50OworfQorCit2b2lkIFdy
aXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRl
bnNpb24pCit7CisgICAgbV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsKK30KKwordm9p
ZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5n
JiBmaWxlQ29udGVudEZpbGVuYW1lKQoreworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZp
bGVDb250ZW50RmlsZW5hbWU7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxl
Q29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7CisgICAgbV9m
aWxlQ29udGVudCA9IGZpbGVDb250ZW50OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjgxNDNiOWExNTE0OWQyZWUxZjE2OGI0OGUwNjA5N2Y0MDJhMmE0ZjQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5o
CkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXcml0YWJsZURhdGFPYmplY3RfaAorI2Rl
ZmluZSBXcml0YWJsZURhdGFPYmplY3RfaAorCisjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0
TmV3LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVXNlZCBmb3Igb25lIHdheSBjb21t
dW5pY2F0aW9uIG9mIGRyYWcvZHJvcCBhbmQgY29weS9wYXN0ZSBkYXRhIGZyb20gdGhlCisvLyBy
ZW5kZXJlciB0byB0aGUgYnJvd3Nlci4gVGhpcyBpcyBpbnRlbnRlZGVkIHRvIGJlIHVzZWQgaW4g
ZHJhZ3N0YXJ0L2NvcHkvY3V0CisvLyBldmVudHMuIER1ZSB0byBzaG9ydGNvbWluZ3MsIHdyaXRl
cyB0byB0aGUgY2xpcGJvYXJkIGNhbm5vdCBiZSBwZXJmb3JtZWQKKy8vIGF0b21pY2FsbHkuCitj
bGFzcyBXcml0YWJsZURhdGFPYmplY3QgOiBwdWJsaWMgQ2hyb21pdW1EYXRhT2JqZWN0TmV3IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGNyZWF0
ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25z
dCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZp
cnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZWVkZWQp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiBkYXRhKTsKKworICAgIC8vIFNwZWNpYWwgYWNjZXNzb3JzIGZvciBVUkwgYW5k
IEhUTUwgc2luY2UgdGhleSBjYXJyeSBhZGRpdGlvbmFsCisgICAgLy8gbWV0YWRhdGEuCisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAg
IHZpcnR1YWwgU3RyaW5nIGdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwp
OworCisgICAgdmlydHVhbCBib29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0OworICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3Q7CisKKyAgICAvLyBBY2Nlc3NvcnMgdXNl
ZCB3aGVuIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlCisg
ICAgLy8gYnJvd3Nlci4KKyAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGFN
YXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0OworCisgICAgLy8gVXNlZCBmb3IgdHJhbnNm
ZXJyaW5nIGZpbGUgZGF0YSBmcm9tIHRoZSByZW5kZXJlciB0byB0aGUgYnJvd3Nlci4KKyAgICB2
aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50
RmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisKK3ByaXZhdGU6CisgICAgV3JpdGFibGVEYXRh
T2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICBib29sIG1faXNGb3JEcmFnZ2luZzsK
KworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fZGF0YU1hcDsKKyAgICBTdHJpbmcgbV91
cmxUaXRsZTsKKyAgICBLVVJMIG1faHRtbEJhc2VVUkw7CisgICAgU3RyaW5nIG1fZmlsZUV4dGVu
c2lvbjsKKyAgICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVuYW1lOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65991</attachid>
            <date>2010-08-30 18:13:51 -0700</date>
            <delta_ts>2010-08-31 11:06:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>26087</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uNTNiNjE0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw4MCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVtZW50IFJlYWRhYmxlL1dy
aXRhYmxlIHZlcnNpb25zIG9mIENocm9taXVtRGF0YU9iamVjdE5ldworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MTcKKworICAgICAgICBUaGlzIGlz
IHRoZSBzZWNvbmQgb2Ygc2V2ZXJhbCBwYXRjaGVzIHRvIHVwZGF0ZSBDaHJvbWl1bSB0byBzdXBw
b3J0CisgICAgICAgIGFyYml0cmFyeSBkYXRhIHR5cGVzIGluIGV2ZW50LmRhdGFUcmFuc2Zlci4K
KyAgICAgICAgUmVhZGFibGVEYXRhT2JqZWN0IHNpbXBseSBjYWxscyB0aHJvdWdoIHRvIHNldmVy
YWwgQ2hyb21pdW0gSVBDcyB0bworICAgICAgICByZXRyaWV2ZSB0aGUgYXBwcm9wcmlhdGUgZGF0
YS4KKyAgICAgICAgV3JpdGFibGVEYXRhT2JqZWN0IG9zdGVuc2libHkgYnVmZmVycyBhcmJpdHJh
cnkgZGF0YSBpbnRlcm5hbGx5IHVudGlsCisgICAgICAgIGEgY2FsbCBpcyBtYWRlIHRvIGZsdXNo
IHRoZSBkYXRhIHRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBhYnN0cmFjdGlvbjsKKyAgICAgICAg
dW5mb3J0dW5hdGVseSwgYSBzcGVjaWFsIGV4Y2VwdGlvbiBpcyBjdXJyZW50bHkgbWFkZSBmb3Ig
cGFzdGVib2FyZAorICAgICAgICBoYW5kbGluZyBkdWUgdG8gaG93IGl0IGlzIGhhbmRsZWQgaW4g
V2ViQ29yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGlwYm9hcmRCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRh
T2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVE
YXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2Jq
ZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0
YU9iamVjdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0Ojpo
YXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6dHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJs
ZURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmpl
Y3Q6OmdldEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpzZXRI
VE1MKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V3Jp
dGFibGVEYXRhT2JqZWN0OjpXcml0YWJsZURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFi
bGVEYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Oldy
aXRhYmxlRGF0YU9iamVjdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRh
T2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6
dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJs
ZURhdGFPYmplY3Q6OmdldEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6aGFz
RmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZW5h
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorCisyMDEw
LTA4LTMwICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtjaHJvbWl1bV0gQWRkIGFuIGlu
dGVyZmFjZSBmb3IgcGxhdGZvcm0gY29weS9wYXN0ZSBkcmFnL2Ryb3AgZGF0YSBvYmplY3RzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDkxNAogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDU1ODMwOTguLmQ2YmM0MDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTgzLDYgKzIxODMsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKQEAgLTIyMDMs
NiArMjIwNSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9uLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1BhdGguaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzgxODcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTAsMCArMSwy
MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9i
amVjdC5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBjbGlwYm9h
cmRCdWZmZXIoYm9vbCBpc0ZvckRyYWdnaW5nKQoreworICAgIHJldHVybiBpc0ZvckRyYWdnaW5n
ID8gUGFzdGVib2FyZFByaXZhdGU6OkRyYWdCdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3Rh
bmRhcmRCdWZmZXI7Cit9CisKK3N0YXRpYyB2b2lkIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVk
KGJvb2wgaXNGb3JEcmFnZ2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wmIGlzVHlwZUNhY2hlSW5pdGlhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBIYXNoU2V0PFN0cmluZz4mIHR5cGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgY29udGFpbnNGaWxlbmFtZXMpCit7CisgICAg
aWYgKGlzVHlwZUNhY2hlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHR5cGVz
ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKKyAgICAgICAg
Y2xpcGJvYXJkQnVmZmVyKGlzRm9yRHJhZ2dpbmcpLCAmY29udGFpbnNGaWxlbmFtZXMpOworICAg
IGlzVHlwZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitQYXNzUmVmUHRyPFJlYWRhYmxl
RGF0YU9iamVjdD4gUmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5n
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVhZGFibGVEYXRhT2JqZWN0KGlzRm9yRHJh
Z2dpbmcpKTsKK30KKworUmVhZGFibGVEYXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QoYm9v
bCBpc0ZvckRyYWdnaW5nKQorICAgIDogbV9pc0ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpLCBt
X2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQoZmFsc2UpCit7Cit9CisKKy8vIE5vbmUgb2YgdGhlIG5v
bi1jb25zdCBtZXRob2RzIHNob3VsZCBldmVyIGJlIGNhbGxlZC4KK3ZvaWQgUmVhZGFibGVEYXRh
T2JqZWN0OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRG
aWxlcygpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVE
YXRhT2JqZWN0OjpjbGVhcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jv
b2wgUmVhZGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICBlbnN1cmVUeXBl
Q2FjaGVJbml0aWFsaXplZChtX2lzRm9yRHJhZ2dpbmcsIG1faXNUeXBlQ2FjaGVJbml0aWFsaXpl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3R5cGVzLCBtX2NvbnRhaW5zRmls
ZW5hbWVzKTsKKyAgICByZXR1cm4gIW1fdHlwZXMuaXNFbXB0eSgpIHx8IG1fY29udGFpbnNGaWxl
bmFtZXM7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OnR5cGVzKCkg
Y29uc3QKK3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZChtX2lzRm9yRHJhZ2dpbmcs
IG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3R5cGVzLCBtX2NvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICByZXR1cm4gbV90eXBlczsKK30K
KworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBTdHJpbmcgZGF0YTsKKyAgICBTdHJpbmcg
aWdub3JlZE1ldGFkYXRhOworICAgIHN1Y2NlZWRlZCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksIHR5
cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK2Jvb2wg
UmVhZGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKFN0cmluZyogdGl0bGUp
IGNvbnN0Cit7CisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgaWdub3JlZFRpdGxlOworICAg
IGlmICghdGl0bGUpCisgICAgICAgIHRpdGxlID0gJmlnbm9yZWRUaXRsZTsKKyAgICBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lz
Rm9yRHJhZ2dpbmcpLCAidGV4dC91cmktbGlzdCIsIHVybCwgKnRpdGxlKTsKKyAgICByZXR1cm4g
dXJsOworfQorCit2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6c2V0VVJMKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkg
Y29uc3QKK3sKKyAgICBTdHJpbmcgaHRtbDsKKyAgICBTdHJpbmcgaWdub3JlZEJhc2VVUkw7Cisg
ICAgaWYgKCFiYXNlVVJMKQorICAgICAgICBiYXNlVVJMID0gJmlnbm9yZWRCYXNlVVJMOworICAg
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVm
ZmVyKG1faXNGb3JEcmFnZ2luZyksICJ0ZXh0L2h0bWwiLCBodG1sLCAqYmFzZVVSTCk7CisgICAg
cmV0dXJuIGh0bWw7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjpzZXRIVE1MKGNvbnN0
IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcygpIGNv
bnN0Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQobV9pc0ZvckRyYWdnaW5nLCBt
X2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV90eXBlcywgbV9jb250YWluc0ZpbGVuYW1lcyk7CisgICAgcmV0dXJuIG1fY29udGFpbnNGaWxl
bmFtZXM7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxl
bmFtZXMoY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZykpOworfQorCisvLyBUaGVzZSBm
dW5jdGlvbnMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20g
dGhlIHJlbmRlcmVyCisvLyB0byB0aGUgYnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IFJlYWRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Cit9CisKK1N0
cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0tVUkwgUmVhZGFibGVE
YXRhT2JqZWN0OjpodG1sQmFzZVVSTCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIEtVUkwoKTsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6
ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlQ29u
dGVudEZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZWFkYWJsZURh
dGFPYmplY3Q6OmZpbGVDb250ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEZpbGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBSZWFkYWJs
ZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3Qu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmMGY2ZgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFJlYWRhYmxlRGF0YU9iamVjdF9oCisjZGVmaW5lIFJlYWRh
YmxlRGF0YU9iamVjdF9oCisKKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3ROZXcuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRpb24g
b2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIGJyb3dzZXIgdG8g
dGhlIHJlbmRlcmVyLgorY2xhc3MgUmVhZGFibGVEYXRhT2JqZWN0IDogcHVibGljIENocm9taXVt
RGF0YU9iamVjdE5ldyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVhZGFibGVE
YXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJB
bGxFeGNlcHRGaWxlcygpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwg
Ym9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0YShjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAgICAvLyBTcGVjaWFsIGFjY2Vz
c29ycyBmb3IgVVJMIGFuZCBIVE1MIHNpbmNlIHRoZXkgY2FycnkgYWRkaXRpb25hbAorICAgIC8v
IG1ldGFkYXRhLgorICAgIHZpcnR1YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHRpdGxlKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25z
dCBLVVJMJiBiYXNlVVJMKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNvbnN0OworCisgICAg
Ly8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhlIHJl
bmRlcmVyIHRvIHRoZQorICAgIC8vIGJyb3dzZXIuCisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgaHRtbEJhc2VVUkwoKSBjb25zdDsKKworICAgIC8v
IFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhl
IGJyb3dzZXIuCisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0OworICAg
IHZpcnR1YWwgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworCitwcml2YXRlOgor
ICAgIFJlYWRhYmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgYm9vbCBt
X2lzRm9yRHJhZ2dpbmc7CisKKyAgICAvLyBUbyBhdm9pZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNh
bGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdlIGNhY2hlIHNvbWUKKyAgICAvLyB2YWx1ZXMgaW4g
dGhlIHJlbmRlcmVyLgorICAgIC8vIFRPRE86IElzIHRoaXMgYWN0dWFsbHkgdGhlIHJpZ2h0IHBs
YWNlIHRvIGRvIHRoZSBjYWNoaW5nPyBJc24ndCB0aGUgZGF0YQorICAgIC8vIG9iamVjdCBnZXR0
aW5nIGNyZWF0ZWQvZGVzdHJveWVkIHdpdGggZWFjaCBkcmFnIGV2ZW50PworICAgIG11dGFibGUg
SGFzaFNldDxTdHJpbmc+IG1fdHlwZXM7CisgICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNGaWxl
bmFtZXM7CisgICAgbXV0YWJsZSBib29sIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTg1MDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV3JpdGFibGVEYXRhT2JqZWN0LmgiCisKKyNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRP
RE86IFZlcmlmeSBpdCB0aGUgaW1wbGVtZW50YXRpb25zIGZvciByZWFkLW9ubHkgbWV0aG9kcyBh
cmUgbmVlZGVkLiBQZXIgdGhlCisvLyBjb2RlIGN1cnJlbnRseSBpbiBDbGlwYm9hcmRDaHJvbWl1
bSwgaXQncyBhY3R1YWxseSB1bm5lY2Vzc2FyeSwgYnV0IHdlIHNob3VsZAorLy8gZG91YmxlIGNo
ZWNrIGlmIHRoaXMgaXMgaW50ZW5kZWQgYnkgdGhlIHNwZWMsIGVzcGVjaWFsbHkgc2luY2UgaXQg
ZG9lc24ndAorLy8gcmVhbGx5IGFkZHJlc3Mgd2hlbiB0aGUgY2xpcGJvYXJkIG9iamVjdCBzaG91
bGQgYmUgcmVhZGFibGUgYW5kIHdoZW4gaXQKKy8vIHNob3VsZCBiZSB3cml0YWJsZS4KK1Bhc3NS
ZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29s
IGlzRm9yRHJhZ2dpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFP
YmplY3QoaXNGb3JEcmFnZ2luZykpOworfQorCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxl
RGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNG
b3JEcmFnZ2luZykKK3sKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBp
ZiAodHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAg
ICBlbHNlIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0g
S1VSTCgpOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxl
cygpCit7CisgICAgLy8gVE9ETzogVGhlIHNwZWMgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBw
b3B1bGF0ZSBGaWxlTGlzdCBjdXJyZW50bHkuIEluCisgICAgLy8gZmFjdCwgdGhlIHNwZWMgZXhw
bGljaXRseSBzdGF0ZXMgdGhhdCBkcmFnZ2luZyBmaWxlcyBjYW4gb25seSBoYXBwZW4gZnJvbQor
ICAgIC8vIG91dHNpZGUgYSBicm93c2luZyBjb250ZXh0LgorICAgIGNsZWFyKCk7Cit9CisKK3Zv
aWQgV3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhcigpCit7CisgICAgbV9kYXRhTWFwLmNsZWFyKCk7
CisgICAgbV91cmxUaXRsZSA9ICIiOworICAgIG1faHRtbEJhc2VVUkwgPSBLVVJMKCk7CisgICAg
bV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7CisgICAgaWYgKG1fZmlsZUNvbnRlbnQpCisgICAg
ICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7Cit9CisKK2Jvb2wgV3JpdGFibGVEYXRhT2JqZWN0
OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fZGF0YU1hcC5pc0VtcHR5KCkgfHwg
KG1fZmlsZUNvbnRlbnQgJiYgIW1fZmlsZUNvbnRlbnQtPmlzRW1wdHkoKSk7Cit9CisKK0hhc2hT
ZXQ8U3RyaW5nPiBXcml0YWJsZURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBIYXNo
U2V0PFN0cmluZz4gcmVzdWx0OworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhTWFwLmJlZ2luKCk7CisgICAgICAgICBpdCAhPSBtX2Rh
dGFNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgcmVzdWx0LmFkZChpdC0+Zmlyc3QpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0Ojpn
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdAoreworICAg
IC8vIFRPRE86IEZvciBwYXN0aW5nLCB3ZSBuZWVkIHRvIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUg
cGFzdGVib2FyZC4gUmlnaHQKKyAgICAvLyBub3csIENsaXBib2FyZDo6Z2V0RGF0YSBkb2Vzbid0
IGFsbG93IHJlYWRzIHdoZW4gdGhlIGNsaXBib2FyZCBpcworICAgIC8vIHdyaXRhYmxlLCBidXQg
d2UgaGF2ZSBtYXkgdG8gYWRkcmVzcyB0aGlzIGluIHRoZSBmdXR1cmUuCisgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhTWFwLmZpbmQodHlwZSk7
CisgICAgaWYgKGl0ICE9IG1fZGF0YU1hcC5lbmQoKSkgeworICAgICAgICBzdWNjZWVkZWQgPSB0
cnVlOworICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICB9CisgICAgc3VjY2VlZGVkID0g
ZmFsc2U7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFdyaXRhYmxlRGF0YU9iamVj
dDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAg
ICBpZiAoIW1faXNGb3JEcmFnZ2luZykgeworICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJv
YXJkV3JpdGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIG1fZGF0YU1hcC5zZXQodHlwZSwgZGF0YSk7CisgICAgaWYgKHR5cGUgPT0gInRleHQv
dXJpLWxpc3QiKQorICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgZWxzZSBpZiAodHlwZSA9
PSAidGV4dC9odG1sIikKKyAgICAgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gU3BlY2lhbCBhY2Nlc3NvcnMgZm9yIFVSTCBhbmQgSFRNTCBzaW5j
ZSB0aGV5IGNhcnJ5IGFkZGl0aW9uYWwKKy8vIG1ldGFkYXRhLgorU3RyaW5nIFdyaXRhYmxlRGF0
YU9iamVjdDo6Z2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0Cit7CisgICAgaWYgKHRpdGxlKQor
ICAgICAgICAqdGl0bGUgPSBtX3VybFRpdGxlOworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7Cisg
ICAgcmV0dXJuIGdldERhdGEoInRleHQvdXJpLWxpc3QiLCBpZ25vcmVkU3VjY2Vzcyk7Cit9CisK
K3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgdGl0bGUpCit7CisgICAgc2V0RGF0YSgidGV4dC91cmktbGlzdCIsIHVybCk7Cisg
ICAgbV91cmxUaXRsZSA9IHRpdGxlOworfQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0Ojpn
ZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3QKK3sKKyAgICBpZiAoYmFzZVVSTCkKKyAgICAg
ICAgKmJhc2VVUkwgPSBtX2h0bWxCYXNlVVJMOworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7Cisg
ICAgcmV0dXJuIGdldERhdGEoInRleHQvaHRtbCIsIGlnbm9yZWRTdWNjZXNzKTsKK30KKwordm9p
ZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBL
VVJMJiBiYXNlVVJMKQoreworICAgIHNldERhdGEoInRleHQvaHRtbCIsIGh0bWwpOworICAgIG1f
aHRtbEJhc2VVUkwgPSBiYXNlVVJMOworfQorCitib29sIFdyaXRhYmxlRGF0YU9iamVjdDo6aGFz
RmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
VmVjdG9yPFN0cmluZz4oKTsKK30KKworLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJp
bmcgZHJhZyBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorLy8gYnJvd3Nlci4KK0hhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGF0YU1hcDsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6
dXJsVGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybFRpdGxlOworfQorCitLVVJMIFdy
aXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX2h0
bWxCYXNlVVJMOworfQorCisvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcgZmlsZSBkYXRhIGZyb20g
dGhlIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLgorU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6
ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsKK30K
KworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKK30KKworUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ZpbGVDb250ZW50OworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6
c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pCit7CisgICAgbV9m
aWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmpl
Y3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVu
YW1lKQoreworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7
Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudChQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7CisgICAgbV9maWxlQ29udGVudCA9IGZpbGVD
b250ZW50OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmggYi9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjgxNDNiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXcml0YWJsZURhdGFPYmplY3RfaAorI2RlZmluZSBXcml0YWJsZURhdGFPYmplY3RfaAor
CisjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0TmV3LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gVXNlZCBmb3Igb25lIHdheSBjb21tdW5pY2F0aW9uIG9mIGRyYWcvZHJvcCBhbmQg
Y29weS9wYXN0ZSBkYXRhIGZyb20gdGhlCisvLyByZW5kZXJlciB0byB0aGUgYnJvd3Nlci4gVGhp
cyBpcyBpbnRlbnRlZGVkIHRvIGJlIHVzZWQgaW4gZHJhZ3N0YXJ0L2NvcHkvY3V0CisvLyBldmVu
dHMuIER1ZSB0byBzaG9ydGNvbWluZ3MsIHdyaXRlcyB0byB0aGUgY2xpcGJvYXJkIGNhbm5vdCBi
ZSBwZXJmb3JtZWQKKy8vIGF0b21pY2FsbHkuCitjbGFzcyBXcml0YWJsZURhdGFPYmplY3QgOiBw
dWJsaWMgQ2hyb21pdW1EYXRhT2JqZWN0TmV3IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7
CisgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZWVkZWQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKworICAgIC8v
IFNwZWNpYWwgYWNjZXNzb3JzIGZvciBVUkwgYW5kIEhUTUwgc2luY2UgdGhleSBjYXJyeSBhZGRp
dGlvbmFsCisgICAgLy8gbWV0YWRhdGEuCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0VVJMKFN0cmlu
ZyogdGl0bGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRVUkwoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEhUTUwoU3Ry
aW5nKiBiYXNlVVJMKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJp
bmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpOworCisgICAgdmlydHVhbCBib29sIGhhc0Zp
bGVuYW1lcygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkg
Y29uc3Q7CisKKyAgICAvLyBBY2Nlc3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkcmFnIGRh
dGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlCisgICAgLy8gYnJvd3Nlci4KKyAgICB2aXJ0dWFs
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGFNYXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
cmluZyB1cmxUaXRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNv
bnN0OworCisgICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGZpbGUgZGF0YSBmcm9tIHRoZSBy
ZW5kZXJlciB0byB0aGUgYnJvd3Nlci4KKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9u
KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7
CisKK3ByaXZhdGU6CisgICAgV3JpdGFibGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7
CisKKyAgICBib29sIG1faXNGb3JEcmFnZ2luZzsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fZGF0YU1hcDsKKyAgICBTdHJpbmcgbV91cmxUaXRsZTsKKyAgICBLVVJMIG1faHRtbEJh
c2VVUkw7CisgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAgICBTdHJpbmcgbV9maWxlQ29u
dGVudEZpbGVuYW1lOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="54886"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66076</attachid>
            <date>2010-08-31 11:06:14 -0700</date>
            <delta_ts>2010-08-31 12:20:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>25724</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uY2Q4NjIzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OCBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBSZWFkYWJsZS9Xcml0YWJsZSB2
ZXJzaW9ucyBvZiBDaHJvbWl1bURhdGFPYmplY3ROZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTE3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgc2Vj
b25kIG9mIHNldmVyYWwgcGF0Y2hlcyB0byB1cGRhdGUgQ2hyb21pdW0gdG8gc3VwcG9ydAorICAg
ICAgICBhcmJpdHJhcnkgZGF0YSB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIuCisgICAgICAg
IFJlYWRhYmxlRGF0YU9iamVjdCBzaW1wbHkgY2FsbHMgdGhyb3VnaCB0byBzZXZlcmFsIENocm9t
aXVtIElQQ3MgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAg
ICAgIFdyaXRhYmxlRGF0YU9iamVjdCBvc3RlbnNpYmx5IGJ1ZmZlcnMgYXJiaXRyYXJ5IGRhdGEg
aW50ZXJuYWxseSB1bnRpbAorICAgICAgICBhIGNhbGwgaXMgbWFkZSB0byBmbHVzaCB0aGUgZGF0
YSB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYWJzdHJhY3Rpb247CisgICAgICAgIHVuZm9ydHVu
YXRlbHksIGEgc3BlY2lhbCBleGNlcHRpb24gaXMgY3VycmVudGx5IG1hZGUgZm9yIHBhc3RlYm9h
cmQKKyAgICAgICAgaGFuZGxpbmcgZHVlIHRvIGhvdyBpdCBpcyBoYW5kbGVkIGluIFdlYkNvcmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9i
amVjdDo6UmVhZGFibGVEYXRhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0
YU9iamVjdDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVj
dDo6Y2xlYXJBbGxFeGNlcHRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFP
YmplY3Q6OmNsZWFyQWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6
aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OnR5cGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpnZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVEYXRhT2JqZWN0OjpzZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2Jq
ZWN0OjpnZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6c2V0
SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1l
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmRhdGFNYXApOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZURhdGFPYmplY3Q6Omh0bWxCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
YWJsZURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpXcml0YWJsZURhdGFPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRh
YmxlRGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2Jq
ZWN0OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmdldFVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmdldEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6
V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxl
RGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0
YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVj
dDo6ZGF0YU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnVybFRp
dGxlKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50Rmls
ZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29u
dGVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0Lmg6
IEFkZGVkLgorCiAyMDEwLTA4LTMwICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1NTgzMDk4Li5k
NmJjNDAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjE4Myw2ICsyMTgzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL1BvcHVwTWVudUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1BvcHVwTWVudVByaXZhdGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
UmVhZGFibGVEYXRhT2JqZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
UmVhZGFibGVEYXRhT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NT
TEtleUdlbmVyYXRvckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uaCcsCkBAIC0yMjAzLDYgKzIyMDUsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpZGdldENocm9taXVtLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2luZG93c1ZlcnNpb24uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9QYXRoLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TmV3LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oCmluZGV4IDkzYWM5Y2IuLjMyZWQxZDgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0
TmV3LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RO
ZXcuaApAQCAtNDksNyArNDksNyBAQCBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3ROZXcgOiBwdWJs
aWMgUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmplY3ROZXc+IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGwoKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IGhhc0RhdGEoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjE0OTNhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCisKKyNpbmNsdWRlICJD
aHJvbWl1bUJyaWRnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGNsaXBib2FyZEJ1ZmZlcihib29sIGlzRm9yRHJh
Z2dpbmcpCit7CisgICAgcmV0dXJuIGlzRm9yRHJhZ2dpbmcgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6
RHJhZ0J1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKK30KKworUGFz
c1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IFJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKGJv
b2wgaXNGb3JEcmFnZ2luZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlYWRhYmxlRGF0
YU9iamVjdChpc0ZvckRyYWdnaW5nKSk7Cit9CisKK1JlYWRhYmxlRGF0YU9iamVjdDo6UmVhZGFi
bGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZykKKyAgICA6IG1faXNGb3JEcmFnZ2luZyhp
c0ZvckRyYWdnaW5nKSwgbV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKGZhbHNlKQoreworfQorCisv
LyBOb25lIG9mIHRoZSBub24tY29uc3QgbWV0aG9kcyBzaG91bGQgZXZlciBiZSBjYWxsZWQuCit2
b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6
OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitib29sIFJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0
Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQoKTsKKyAgICByZXR1cm4gIW1fdHlw
ZXMuaXNFbXB0eSgpIHx8IG1fY29udGFpbnNGaWxlbmFtZXM7Cit9CisKK0hhc2hTZXQ8U3RyaW5n
PiBSZWFkYWJsZURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBlbnN1cmVUeXBlQ2Fj
aGVJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX3R5cGVzOworfQorCitTdHJpbmcgUmVhZGFi
bGVEYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVk
KSBjb25zdAoreworICAgIFN0cmluZyBkYXRhOworICAgIFN0cmluZyBpZ25vcmVkTWV0YWRhdGE7
CisgICAgc3VjY2VlZGVkID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAorICAg
ICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwgdHlwZSwgZGF0YSwgaWdub3Jl
ZE1ldGFkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmpl
Y3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcg
UmVhZGFibGVEYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICBT
dHJpbmcgdXJsOworICAgIFN0cmluZyBpZ25vcmVkVGl0bGU7CisgICAgaWYgKCF0aXRsZSkKKyAg
ICAgICAgdGl0bGUgPSAmaWdub3JlZFRpdGxlOworICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksICJ0
ZXh0L3VyaS1saXN0IiwgdXJsLCAqdGl0bGUpOworICAgIHJldHVybiB1cmw7Cit9CisKK3ZvaWQg
UmVhZGFibGVEYXRhT2JqZWN0OjpzZXRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1N0cmluZyBSZWFk
YWJsZURhdGFPYmplY3Q6OmdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdAoreworICAgIFN0
cmluZyBodG1sOworICAgIFN0cmluZyBpZ25vcmVkQmFzZVVSTDsKKyAgICBpZiAoIWJhc2VVUkwp
CisgICAgICAgIGJhc2VVUkwgPSAmaWdub3JlZEJhc2VVUkw7CisgICAgQ2hyb21pdW1CcmlkZ2U6
OmNsaXBib2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdn
aW5nKSwgInRleHQvaHRtbCIsIGh0bWwsICpiYXNlVVJMKTsKKyAgICByZXR1cm4gaHRtbDsKK30K
Kwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBj
b25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiti
b29sIFJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICBlbnN1
cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX2NvbnRhaW5zRmlsZW5hbWVz
OworfQorCitWZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVz
KGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpKTsKK30KKworLy8gVGhlc2UgZnVuY3Rp
b25zIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBy
ZW5kZXJlcgorLy8gdG8gdGhlIGJyb3dzZXIuCitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBSZWFk
YWJsZURhdGFPYmplY3Q6OmRhdGFNYXAoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworfQorCitTdHJpbmcg
UmVhZGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitLVVJMIFJlYWRhYmxlRGF0YU9i
amVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBLVVJMKCk7Cit9CisKK1N0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVF
eHRlbnNpb24oKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRG
aWxlbmFtZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUmVhZGFibGVEYXRhT2Jq
ZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgUmVhZGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRh
T2JqZWN0OjpzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pCit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjplbnN1
cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNUeXBlQ2FjaGVJ
bml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90eXBlcyA9IENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZl
cihtX2lzRm9yRHJhZ2dpbmcpLCAmbV9jb250YWluc0ZpbGVuYW1lcyk7CisgICAgbV9pc1R5cGVD
YWNoZUluaXRpYWxpemVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2MjFlZQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKQEAgLTAsMCArMSw4
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgUmVhZGFibGVEYXRhT2JqZWN0X2gKKyNkZWZpbmUgUmVhZGFibGVEYXRhT2Jq
ZWN0X2gKKworI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdE5ldy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIFVzZWQgZm9yIG9uZSB3YXkgY29tbXVuaWNhdGlvbiBvZiBkcmFnL2Ry
b3AgYW5kIGNvcHkvcGFzdGUgZGF0YSBmcm9tIHRoZQorLy8gYnJvd3NlciB0byB0aGUgcmVuZGVy
ZXIuCitjbGFzcyBSZWFkYWJsZURhdGFPYmplY3QgOiBwdWJsaWMgQ2hyb21pdW1EYXRhT2JqZWN0
TmV3IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+
IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0
YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEV4Y2VwdEZp
bGVzKCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsKCk7CisgICAgdmlydHVhbCBib29sIGhh
c0RhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OworICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBz
dWNjZWVkZWQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGdldFVSTChT
dHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMKGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRIVE1M
KFN0cmluZyogYmFzZVVSTCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3Qg
U3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKworICAgIHZpcnR1YWwgYm9vbCBo
YXNGaWxlbmFtZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1l
cygpIGNvbnN0OworCisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhTWFw
KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEtVUkwgaHRtbEJhc2VVUkwoKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVF
eHRlbnNpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1l
KCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRl
bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZWFkYWJsZURhdGFPYmplY3QoYm9v
bCBpc0ZvckRyYWdnaW5nKTsKKworICAgIC8vIFRoaXMgaXNuJ3QgYWx3YXlzIGNvbnN0Li4uIGJ1
dCBtb3N0IG9mIHRoZSB0aW1lIGl0IGlzLgorICAgIHZvaWQgZW5zdXJlVHlwZUNhY2hlSW5pdGlh
bGl6ZWQoKSBjb25zdDsKKworCisgICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICAvLyBU
byBhdm9pZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdl
IGNhY2hlIHNvbWUKKyAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgorICAgIG11dGFibGUg
SGFzaFNldDxTdHJpbmc+IG1fdHlwZXM7CisgICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNGaWxl
bmFtZXM7CisgICAgbXV0YWJsZSBib29sIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzM4YmRmYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXcml0YWJsZURhdGFPYmplY3QuaCIKKworI2luY2x1ZGUg
IkNocm9taXVtQnJpZGdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFZl
cmlmeSBpZiB0aGUgaW1wbGVtZW50YXRpb25zIGZvciByZWFkLW9ubHkgbWV0aG9kcyBhcmUgbmVl
ZGVkLiBQZXIgdGhlCisvLyBjb2RlIGN1cnJlbnRseSBpbiBDbGlwYm9hcmRDaHJvbWl1bSwgaXQn
cyBhY3R1YWxseSB1bm5lY2Vzc2FyeSwgYnV0IHdlIHNob3VsZAorLy8gZG91YmxlIGNoZWNrIGlm
IHRoaXMgaXMgaW50ZW5kZWQgYnkgdGhlIHNwZWMsIGVzcGVjaWFsbHkgc2luY2UgaXQgZG9lc24n
dAorLy8gcmVhbGx5IGFkZHJlc3Mgd2hlbiB0aGUgY2xpcGJvYXJkIG9iamVjdCBzaG91bGQgYmUg
cmVhZGFibGUgYW5kIHdoZW4gaXQKKy8vIHNob3VsZCBiZSB3cml0YWJsZS4KK1Bhc3NSZWZQdHI8
V3JpdGFibGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9y
RHJhZ2dpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3Qo
aXNGb3JEcmFnZ2luZykpOworfQorCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9i
amVjdChib29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFn
Z2luZykKK3sKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBT
dHJpbmcmIHR5cGUpCit7CisgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBpZiAodHlw
ZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNl
IGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgp
OworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7
CisgICAgLy8gRklYTUU6IFRoZSBzcGVjIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gcG9wdWxh
dGUgRmlsZUxpc3QgY3VycmVudGx5LiBJbgorICAgIC8vIGZhY3QsIHRoZSBzcGVjIGV4cGxpY2l0
bHkgc3RhdGVzIHRoYXQgZHJhZ2dpbmcgZmlsZXMgY2FuIG9ubHkgaGFwcGVuIGZyb20KKyAgICAv
LyBvdXRzaWRlIGEgYnJvd3NpbmcgY29udGV4dC4KKyAgICBjbGVhckFsbCgpOworfQorCit2b2lk
IFdyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQoreworICAgIG1fZGF0YU1hcC5jbGVhcigp
OworICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworICAg
IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAg
ICAgICBtX2ZpbGVDb250ZW50LT5jbGVhcigpOworfQorCitib29sIFdyaXRhYmxlRGF0YU9iamVj
dDo6aGFzRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2RhdGFNYXAuaXNFbXB0eSgpIHx8
IChtX2ZpbGVDb250ZW50ICYmICFtX2ZpbGVDb250ZW50LT5pc0VtcHR5KCkpOworfQorCitIYXNo
U2V0PFN0cmluZz4gV3JpdGFibGVEYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgSGFz
aFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YU1hcC5iZWdpbigpOworICAgICAgICAgaXQgIT0gbV9k
YXRhTWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgIHJlc3VsdC5hZGQoaXQtPmZpcnN0KTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6
Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogRm9yIHBhc3RpbmcsIHdlIG5lZWQgdG8gcmVhZCBkaXJlY3RseSBmcm9tIHRo
ZSBwYXN0ZWJvYXJkLiBSaWdodAorICAgIC8vIG5vdywgQ2xpcGJvYXJkOjpnZXREYXRhIGRvZXNu
J3QgYWxsb3cgcmVhZHMgd2hlbiB0aGUgY2xpcGJvYXJkIGlzCisgICAgLy8gd3JpdGFibGUsIGJ1
dCB3ZSBoYXZlIG1heSB0byBhZGRyZXNzIHRoaXMgaW4gdGhlIGZ1dHVyZS4KKyAgICBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFNYXAuZmluZCh0eXBl
KTsKKyAgICBpZiAoaXQgIT0gbV9kYXRhTWFwLmVuZCgpKSB7CisgICAgICAgIHN1Y2NlZWRlZCA9
IHRydWU7CisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIH0KKyAgICBzdWNjZWVkZWQg
PSBmYWxzZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgV3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorewor
ICAgIGlmICghbV9pc0ZvckRyYWdnaW5nKSB7CisgICAgICAgIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZURhdGEodHlwZSwgZGF0YSwgIiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgbV9kYXRhTWFwLnNldCh0eXBlLCBkYXRhKTsKKyAgICBpZiAodHlwZSA9PSAidGV4
dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0eXBl
ID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCisvLyBTcGVjaWFsIGFjY2Vzc29ycyBmb3IgVVJMIGFuZCBIVE1MIHNp
bmNlIHRoZXkgY2FycnkgYWRkaXRpb25hbAorLy8gbWV0YWRhdGEuCitTdHJpbmcgV3JpdGFibGVE
YXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICBpZiAodGl0bGUp
CisgICAgICAgICp0aXRsZSA9IG1fdXJsVGl0bGU7CisgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsK
KyAgICByZXR1cm4gZ2V0RGF0YSgidGV4dC91cmktbGlzdCIsIGlnbm9yZWRTdWNjZXNzKTsKK30K
Kwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBzZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiwgdXJsKTsK
KyAgICBtX3VybFRpdGxlID0gdGl0bGU7Cit9CisKK1N0cmluZyBXcml0YWJsZURhdGFPYmplY3Q6
OmdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdAoreworICAgIGlmIChiYXNlVVJMKQorICAg
ICAgICAqYmFzZVVSTCA9IG1faHRtbEJhc2VVUkw7CisgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsK
KyAgICByZXR1cm4gZ2V0RGF0YSgidGV4dC9odG1sIiwgaWdub3JlZFN1Y2Nlc3MpOworfQorCit2
b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0
IEtVUkwmIGJhc2VVUkwpCit7CisgICAgc2V0RGF0YSgidGV4dC9odG1sIiwgaHRtbCk7CisgICAg
bV9odG1sQmFzZVVSTCA9IGJhc2VVUkw7Cit9CisKK2Jvb2wgV3JpdGFibGVEYXRhT2JqZWN0Ojpo
YXNGaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0
cmluZz4gV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOworfQorCisvLyBBY2Nlc3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVy
cmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlCisvLyBicm93c2VyLgorSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gV3JpdGFibGVEYXRhT2JqZWN0OjpkYXRhTWFwKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kYXRhTWFwOworfQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0
Ojp1cmxUaXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsVGl0bGU7Cit9CisKK0tVUkwg
V3JpdGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
aHRtbEJhc2VVUkw7Cit9CisKKy8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRhdGEgZnJv
bSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0
OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOwor
fQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9maWxlQ29udGVudEZpbGVuYW1lOworfQorCitQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnQ7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0
OjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbikKK3sKKyAgICBt
X2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9i
amVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50Rmls
ZW5hbWUpCit7CisgICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gZmlsZUNvbnRlbnRGaWxlbmFt
ZTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkKK3sKKyAgICBtX2ZpbGVDb250ZW50ID0gZmls
ZUNvbnRlbnQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDhjNTczYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V3JpdGFibGVEYXRhT2JqZWN0X2gKKyNkZWZpbmUgV3JpdGFibGVEYXRhT2JqZWN0X2gKKworI2lu
Y2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdE5ldy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIFVzZWQgZm9yIG9uZSB3YXkgY29tbXVuaWNhdGlvbiBvZiBkcmFnL2Ryb3AgYW5kIGNvcHkv
cGFzdGUgZGF0YSBmcm9tIHRoZQorLy8gcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuIFRoaXMgaXMg
aW50ZW50ZWRlZCB0byBiZSB1c2VkIGluIGRyYWdzdGFydC9jb3B5L2N1dAorLy8gZXZlbnRzLiBE
dWUgdG8gc2hvcnRjb21pbmdzLCB3cml0ZXMgdG8gdGhlIGNsaXBib2FyZCBjYW5ub3QgYmUgcGVy
Zm9ybWVkCisvLyBhdG9taWNhbGx5LgorY2xhc3MgV3JpdGFibGVEYXRhT2JqZWN0IDogcHVibGlj
IENocm9taXVtRGF0YU9iamVjdE5ldyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
V3JpdGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKTsKKworICAgIHZp
cnR1YWwgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbCgpOwor
ICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBIYXNoU2V0PFN0
cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAgICB2aXJ0
dWFsIFN0cmluZyBnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdmly
dHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gZGF0YU1hcCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHVybFRpdGxl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBLVVJMIGh0bWxCYXNlVVJMKCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50
RmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgV3Jp
dGFibGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICBib29sIG1faXNGb3JE
cmFnZ2luZzsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fZGF0YU1hcDsKKyAgICBT
dHJpbmcgbV91cmxUaXRsZTsKKyAgICBLVVJMIG1faHRtbEJhc2VVUkw7CisgICAgU3RyaW5nIG1f
ZmlsZUV4dGVuc2lvbjsKKyAgICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVuYW1lOworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66084</attachid>
            <date>2010-08-31 12:20:27 -0700</date>
            <delta_ts>2010-08-31 12:25:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>24240</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uYzU0ZTYwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBSZWFkYWJsZS9Xcml0YWJsZSB2
ZXJzaW9ucyBvZiBDaHJvbWl1bURhdGFPYmplY3ROZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTE3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgc2Vj
b25kIG9mIHNldmVyYWwgcGF0Y2hlcyB0byB1cGRhdGUgQ2hyb21pdW0gdG8gc3VwcG9ydAorICAg
ICAgICBhcmJpdHJhcnkgZGF0YSB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIuCisgICAgICAg
IFJlYWRhYmxlRGF0YU9iamVjdCBzaW1wbHkgY2FsbHMgdGhyb3VnaCB0byBzZXZlcmFsIENocm9t
aXVtIElQQ3MgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAg
ICAgIFdyaXRhYmxlRGF0YU9iamVjdCBvc3RlbnNpYmx5IGJ1ZmZlcnMgYXJiaXRyYXJ5IGRhdGEg
aW50ZXJuYWxseSB1bnRpbAorICAgICAgICBhIGNhbGwgaXMgbWFkZSB0byBmbHVzaCB0aGUgZGF0
YSB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYWJzdHJhY3Rpb247CisgICAgICAgIHVuZm9ydHVu
YXRlbHksIGEgc3BlY2lhbCBleGNlcHRpb24gaXMgY3VycmVudGx5IG1hZGUgZm9yIHBhc3RlYm9h
cmQKKyAgICAgICAgaGFuZGxpbmcgZHVlIHRvIGhvdyBpdCBpcyBoYW5kbGVkIGluIFdlYkNvcmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlRGF0YU9iamVjdDo6UmVhZGFibGVEYXRhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlRGF0YU9iamVjdDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURh
dGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6
Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldEhUTUwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpXcml0YWJsZURhdGFPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRh
YmxlRGF0YU9iamVjdDo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9i
amVjdDo6c2V0SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmRh
dGFNYXApOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6Omh0bWxCYXNlVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50RmlsZW5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudEZpbGVuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oOiBBZGRl
ZC4KKwogMjAxMC0wOC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBt
b2RlIDEwMDc1NQppbmRleCA1NTgzMDk4Li4xNmZmN2U2Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTQwLDcgKzIxNDAsNiBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcCcsCkBAIC0yMTgzLDYg
KzIxODIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bS5oJywKQEAgLTIyMDMsNiArMjIwNCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1dpbmRvd3NWZXJzaW9uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1BhdGguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3ROZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0TmV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYWM5Y2IuLjAwMDAw
MDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcu
aAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDaHJvbWl1
bURhdGFPYmplY3ROZXdfaAotI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3ROZXdfaAotCi0jaW5j
bHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0aGF0IHdvdWxkIGJlIGluIGEg
Y2xpcGJvYXJkIG9yIG1vdmVkCi0vLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBU
aGlzIGlzIHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQotLy8gb2YgYW5kIGlzIG5vdCBz
cGVjaWZpYyB0byBhIHBsYXRmb3JtLgotY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0TmV3IDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TmV3PiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc0RhdGEoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKSA9IDA7Ci0KLSAgICAvLyBTcGVjaWFsIGFjY2Vzc29ycyBmb3IgVVJMIGFuZCBIVE1M
IHNpbmNlIHRoZXkgY2FycnkgYWRkaXRpb25hbAotICAgIC8vIG1ldGFkYXRhLgotICAgIHZpcnR1
YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBi
YXNlVVJMKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3QgPSAwOwotCi0g
ICAgLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhl
IHJlbmRlcmVyIHRvIHRoZQotICAgIC8vIGJyb3dzZXIuCi0gICAgdmlydHVhbCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHVy
bFRpdGxlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0
ID0gMDsKLQotICAgIC8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRhdGEgZnJvbSB0aGUg
cmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCi0gICAgdmlydHVhbCBTdHJpbmcgZmlsZUV4dGVuc2lv
bigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250
ZW50KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShj
b25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVE
YXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2Jq
ZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODUwYjg4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmpl
Y3QuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
YWRhYmxlRGF0YU9iamVjdC5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1
ZmZlciBjbGlwYm9hcmRCdWZmZXIoYm9vbCBpc0ZvckRyYWdnaW5nKQoreworICAgIHJldHVybiBp
c0ZvckRyYWdnaW5nID8gUGFzdGVib2FyZFByaXZhdGU6OkRyYWdCdWZmZXIgOiBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Cit9CisKK1Bhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2Jq
ZWN0PiBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFkYWJsZURhdGFPYmplY3QoaXNGb3JEcmFnZ2luZykp
OworfQorCitSZWFkYWJsZURhdGFPYmplY3Q6OlJlYWRhYmxlRGF0YU9iamVjdChib29sIGlzRm9y
RHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZyksIG1faXNUeXBl
Q2FjaGVJbml0aWFsaXplZChmYWxzZSkKK3sKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6
Omhhc0RhdGEoKSBjb25zdAoreworICAgIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKCk7Cisg
ICAgcmV0dXJuICFtX3R5cGVzLmlzRW1wdHkoKSB8fCBtX2NvbnRhaW5zRmlsZW5hbWVzOworfQor
CitIYXNoU2V0PFN0cmluZz4gUmVhZGFibGVEYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7Cisg
ICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQoKTsKKyAgICByZXR1cm4gbV90eXBlczsKK30K
KworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBTdHJpbmcgZGF0YTsKKyAgICBTdHJpbmcg
aWdub3JlZE1ldGFkYXRhOworICAgIHN1Y2NlZWRlZCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksIHR5
cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1N0cmlu
ZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdAoreworICAg
IFN0cmluZyB1cmw7CisgICAgU3RyaW5nIGlnbm9yZWRUaXRsZTsKKyAgICBpZiAoIXRpdGxlKQor
ICAgICAgICB0aXRsZSA9ICZpZ25vcmVkVGl0bGU7CisgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwg
InRleHQvdXJpLWxpc3QiLCB1cmwsICp0aXRsZSk7CisgICAgcmV0dXJuIHVybDsKK30KKworU3Ry
aW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0Cit7
CisgICAgU3RyaW5nIGh0bWw7CisgICAgU3RyaW5nIGlnbm9yZWRCYXNlVVJMOworICAgIGlmICgh
YmFzZVVSTCkKKyAgICAgICAgYmFzZVVSTCA9ICZpZ25vcmVkQmFzZVVSTDsKKyAgICBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lz
Rm9yRHJhZ2dpbmcpLCAidGV4dC9odG1sIiwgaHRtbCwgKmJhc2VVUkwpOworICAgIHJldHVybiBo
dG1sOworfQorCitib29sIFJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKCkgY29uc3QK
K3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX2NvbnRh
aW5zRmlsZW5hbWVzOworfQorCitWZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZp
bGVuYW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkRmlsZW5hbWVzKGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpKTsKK30KKwordm9p
ZCBSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKCkgY29uc3QK
K3sKKyAgICBpZiAobV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3R5cGVzID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBl
cygKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksICZtX2NvbnRhaW5z
RmlsZW5hbWVzKTsKKyAgICBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFk
YWJsZURhdGFPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY2
ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJs
ZURhdGFPYmplY3QuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWFkYWJsZURhdGFPYmplY3Rf
aAorI2RlZmluZSBSZWFkYWJsZURhdGFPYmplY3RfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11
bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIGJy
b3dzZXIgdG8gdGhlIHJlbmRlcmVyLgorY2xhc3MgUmVhZGFibGVEYXRhT2JqZWN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8UmVhZGFibGVEYXRhT2JqZWN0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKTsK
KworICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3Ry
aW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRI
VE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5h
bWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZWFkYWJsZURhdGFPYmplY3QoYm9vbCBpc0Zv
ckRyYWdnaW5nKTsKKworICAgIC8vIFRoaXMgaXNuJ3QgYWx3YXlzIGNvbnN0Li4uIGJ1dCBtb3N0
IG9mIHRoZSB0aW1lIGl0IGlzLgorICAgIHZvaWQgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQo
KSBjb25zdDsKKworCisgICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICAvLyBUbyBhdm9p
ZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdlIGNhY2hl
IHNvbWUKKyAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgorICAgIG11dGFibGUgSGFzaFNl
dDxTdHJpbmc+IG1fdHlwZXM7CisgICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNGaWxlbmFtZXM7
CisgICAgbXV0YWJsZSBib29sIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2ZmNTA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXcml0YWJsZURhdGFPYmplY3QuaCIKKworI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFZlcmlmeSBp
ZiB0aGUgaW1wbGVtZW50YXRpb25zIGZvciByZWFkLW9ubHkgbWV0aG9kcyBhcmUgbmVlZGVkLiBQ
ZXIgdGhlCisvLyBjb2RlIGN1cnJlbnRseSBpbiBDbGlwYm9hcmRDaHJvbWl1bSwgaXQncyBhY3R1
YWxseSB1bm5lY2Vzc2FyeSwgYnV0IHdlIHNob3VsZAorLy8gZG91YmxlIGNoZWNrIGlmIHRoaXMg
aXMgaW50ZW5kZWQgYnkgdGhlIHNwZWMsIGVzcGVjaWFsbHkgc2luY2UgaXQgZG9lc24ndAorLy8g
cmVhbGx5IGFkZHJlc3Mgd2hlbiB0aGUgY2xpcGJvYXJkIG9iamVjdCBzaG91bGQgYmUgcmVhZGFi
bGUgYW5kIHdoZW4gaXQKKy8vIHNob3VsZCBiZSB3cml0YWJsZS4KK1Bhc3NSZWZQdHI8V3JpdGFi
bGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dp
bmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3QoaXNGb3JE
cmFnZ2luZykpOworfQorCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChi
b29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykK
K3sKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUpCit7CisgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBpZiAodHlwZSA9PSAi
dGV4dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0
eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworfQor
Cit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAg
Ly8gRklYTUU6IFRoZSBzcGVjIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gcG9wdWxhdGUgRmls
ZUxpc3QgY3VycmVudGx5LiBJbgorICAgIC8vIGZhY3QsIHRoZSBzcGVjIGV4cGxpY2l0bHkgc3Rh
dGVzIHRoYXQgZHJhZ2dpbmcgZmlsZXMgY2FuIG9ubHkgaGFwcGVuIGZyb20KKyAgICAvLyBvdXRz
aWRlIGEgYnJvd3NpbmcgY29udGV4dC4KKyAgICBjbGVhckFsbCgpOworfQorCit2b2lkIFdyaXRh
YmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQoreworICAgIG1fZGF0YU1hcC5jbGVhcigpOworICAg
IG1fdXJsVGl0bGUgPSAiIjsKKyAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworICAgIG1fZmls
ZUNvbnRlbnRGaWxlbmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBt
X2ZpbGVDb250ZW50LT5jbGVhcigpOworfQorCitib29sIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAo
IW1faXNGb3JEcmFnZ2luZykgeworICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3Jp
dGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IG1fZGF0YU1hcC5zZXQodHlwZSwgZGF0YSk7CisgICAgaWYgKHR5cGUgPT0gInRleHQvdXJpLWxp
c3QiKQorICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgZWxzZSBpZiAodHlwZSA9PSAidGV4
dC9odG1sIikKKyAgICAgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBzZXREYXRhKCJ0ZXh0L3VyaS1saXN0Iiwg
dXJsKTsKKyAgICBtX3VybFRpdGxlID0gdGl0bGU7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sK
KyAgICBzZXREYXRhKCJ0ZXh0L2h0bWwiLCBodG1sKTsKKyAgICBtX2h0bWxCYXNlVVJMID0gYmFz
ZVVSTDsKK30KKworLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRh
IGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorLy8gYnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZGF0YU1hcDsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3VybFRpdGxlOworfQorCitLVVJMIFdyaXRhYmxlRGF0YU9i
amVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX2h0bWxCYXNlVVJMOwor
fQorCisvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcgZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVy
IHRvIHRoZSBicm93c2VyLgorU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsKK30KKworU3RyaW5nIFdy
aXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ZpbGVDb250ZW50OworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pCit7CisgICAgbV9maWxlRXh0ZW5zaW9u
ID0gZmlsZUV4dGVuc2lvbjsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVD
b250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKQoreworICAg
IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7Cit9CisKK3ZvaWQg
V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZmlsZUNvbnRlbnQpCit7CisgICAgbV9maWxlQ29udGVudCA9IGZpbGVDb250ZW50OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1dyaXRhYmxlRGF0YU9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZhNThhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dy
aXRhYmxlRGF0YU9iamVjdC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdyaXRhYmxlRGF0YU9i
amVjdF9oCisjZGVmaW5lIFdyaXRhYmxlRGF0YU9iamVjdF9oCisKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRp
b24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIHJlbmRlcmVy
IHRvIHRoZSBicm93c2VyLiBUaGlzIGlzIGludGVudGVkZWQgdG8gYmUgdXNlZCBpbiBkcmFnc3Rh
cnQvY29weS9jdXQKKy8vIGV2ZW50cy4gRHVlIHRvIHNob3J0Y29taW5ncywgd3JpdGVzIHRvIHRo
ZSBwYXN0ZWJvYXJkIGNhbm5vdCBiZSBwZXJmb3JtZWQKKy8vIGF0b21pY2FsbHkuCisgIGNsYXNz
IFdyaXRhYmxlRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdyaXRhYmxlRGF0YU9iamVj
dD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4g
Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRXhjZXB0Rmls
ZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwm
IGJhc2VVUkwpOworCisgICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRyYWcgZGF0YSBmcm9t
IHRoZSByZW5kZXJlciB0byB0aGUgYnJvd3Nlci4KKyAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGRhdGFNYXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB1cmxUaXRsZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0OworCisgICAgdmly
dHVhbCBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVDb250ZW50RmlsZW5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudEZp
bGVuYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudChQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdyaXRh
YmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgYm9vbCBtX2lzRm9yRHJh
Z2dpbmc7CisKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2RhdGFNYXA7CisgICAgU3Ry
aW5nIG1fdXJsVGl0bGU7CisgICAgS1VSTCBtX2h0bWxCYXNlVVJMOworICAgIFN0cmluZyBtX2Zp
bGVFeHRlbnNpb247CisgICAgU3RyaW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2ZpbGVDb250ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66085</attachid>
            <date>2010-08-31 12:25:32 -0700</date>
            <delta_ts>2010-08-31 14:16:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>24238</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uYzU0ZTYwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBSZWFkYWJsZS9Xcml0YWJsZSB2
ZXJzaW9ucyBvZiBDaHJvbWl1bURhdGFPYmplY3ROZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTE3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgc2Vj
b25kIG9mIHNldmVyYWwgcGF0Y2hlcyB0byB1cGRhdGUgQ2hyb21pdW0gdG8gc3VwcG9ydAorICAg
ICAgICBhcmJpdHJhcnkgZGF0YSB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIuCisgICAgICAg
IFJlYWRhYmxlRGF0YU9iamVjdCBzaW1wbHkgY2FsbHMgdGhyb3VnaCB0byBzZXZlcmFsIENocm9t
aXVtIElQQ3MgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAg
ICAgIFdyaXRhYmxlRGF0YU9iamVjdCBvc3RlbnNpYmx5IGJ1ZmZlcnMgYXJiaXRyYXJ5IGRhdGEg
aW50ZXJuYWxseSB1bnRpbAorICAgICAgICBhIGNhbGwgaXMgbWFkZSB0byBmbHVzaCB0aGUgZGF0
YSB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYWJzdHJhY3Rpb247CisgICAgICAgIHVuZm9ydHVu
YXRlbHksIGEgc3BlY2lhbCBleGNlcHRpb24gaXMgY3VycmVudGx5IG1hZGUgZm9yIHBhc3RlYm9h
cmQKKyAgICAgICAgaGFuZGxpbmcgZHVlIHRvIGhvdyBpdCBpcyBoYW5kbGVkIGluIFdlYkNvcmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlRGF0YU9iamVjdDo6UmVhZGFibGVEYXRhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlRGF0YU9iamVjdDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURh
dGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6
Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldEhUTUwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpXcml0YWJsZURhdGFPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRh
YmxlRGF0YU9iamVjdDo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9i
amVjdDo6c2V0SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmRh
dGFNYXApOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6Omh0bWxCYXNlVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50RmlsZW5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudEZpbGVuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oOiBBZGRl
ZC4KKwogMjAxMC0wOC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBt
b2RlIDEwMDc1NQppbmRleCA1NTgzMDk4Li4xNmZmN2U2Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTQwLDcgKzIxNDAsNiBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcCcsCkBAIC0yMTgzLDYg
KzIxODIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bS5oJywKQEAgLTIyMDMsNiArMjIwNCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1dpbmRvd3NWZXJzaW9uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1BhdGguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3ROZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0TmV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYWM5Y2IuLjAwMDAw
MDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcu
aAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDaHJvbWl1
bURhdGFPYmplY3ROZXdfaAotI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3ROZXdfaAotCi0jaW5j
bHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0aGF0IHdvdWxkIGJlIGluIGEg
Y2xpcGJvYXJkIG9yIG1vdmVkCi0vLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBU
aGlzIGlzIHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQotLy8gb2YgYW5kIGlzIG5vdCBz
cGVjaWZpYyB0byBhIHBsYXRmb3JtLgotY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0TmV3IDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TmV3PiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc0RhdGEoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKSA9IDA7Ci0KLSAgICAvLyBTcGVjaWFsIGFjY2Vzc29ycyBmb3IgVVJMIGFuZCBIVE1M
IHNpbmNlIHRoZXkgY2FycnkgYWRkaXRpb25hbAotICAgIC8vIG1ldGFkYXRhLgotICAgIHZpcnR1
YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBi
YXNlVVJMKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3QgPSAwOwotCi0g
ICAgLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhl
IHJlbmRlcmVyIHRvIHRoZQotICAgIC8vIGJyb3dzZXIuCi0gICAgdmlydHVhbCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHVy
bFRpdGxlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0
ID0gMDsKLQotICAgIC8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRhdGEgZnJvbSB0aGUg
cmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCi0gICAgdmlydHVhbCBTdHJpbmcgZmlsZUV4dGVuc2lv
bigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250
ZW50KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShj
b25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVE
YXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2Jq
ZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODUwYjg4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmpl
Y3QuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
YWRhYmxlRGF0YU9iamVjdC5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1
ZmZlciBjbGlwYm9hcmRCdWZmZXIoYm9vbCBpc0ZvckRyYWdnaW5nKQoreworICAgIHJldHVybiBp
c0ZvckRyYWdnaW5nID8gUGFzdGVib2FyZFByaXZhdGU6OkRyYWdCdWZmZXIgOiBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Cit9CisKK1Bhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2Jq
ZWN0PiBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFkYWJsZURhdGFPYmplY3QoaXNGb3JEcmFnZ2luZykp
OworfQorCitSZWFkYWJsZURhdGFPYmplY3Q6OlJlYWRhYmxlRGF0YU9iamVjdChib29sIGlzRm9y
RHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZyksIG1faXNUeXBl
Q2FjaGVJbml0aWFsaXplZChmYWxzZSkKK3sKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6
Omhhc0RhdGEoKSBjb25zdAoreworICAgIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKCk7Cisg
ICAgcmV0dXJuICFtX3R5cGVzLmlzRW1wdHkoKSB8fCBtX2NvbnRhaW5zRmlsZW5hbWVzOworfQor
CitIYXNoU2V0PFN0cmluZz4gUmVhZGFibGVEYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7Cisg
ICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQoKTsKKyAgICByZXR1cm4gbV90eXBlczsKK30K
KworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBTdHJpbmcgZGF0YTsKKyAgICBTdHJpbmcg
aWdub3JlZE1ldGFkYXRhOworICAgIHN1Y2NlZWRlZCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksIHR5
cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1N0cmlu
ZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdAoreworICAg
IFN0cmluZyB1cmw7CisgICAgU3RyaW5nIGlnbm9yZWRUaXRsZTsKKyAgICBpZiAoIXRpdGxlKQor
ICAgICAgICB0aXRsZSA9ICZpZ25vcmVkVGl0bGU7CisgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwg
InRleHQvdXJpLWxpc3QiLCB1cmwsICp0aXRsZSk7CisgICAgcmV0dXJuIHVybDsKK30KKworU3Ry
aW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0Cit7
CisgICAgU3RyaW5nIGh0bWw7CisgICAgU3RyaW5nIGlnbm9yZWRCYXNlVVJMOworICAgIGlmICgh
YmFzZVVSTCkKKyAgICAgICAgYmFzZVVSTCA9ICZpZ25vcmVkQmFzZVVSTDsKKyAgICBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lz
Rm9yRHJhZ2dpbmcpLCAidGV4dC9odG1sIiwgaHRtbCwgKmJhc2VVUkwpOworICAgIHJldHVybiBo
dG1sOworfQorCitib29sIFJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKCkgY29uc3QK
K3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX2NvbnRh
aW5zRmlsZW5hbWVzOworfQorCitWZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZp
bGVuYW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkRmlsZW5hbWVzKGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpKTsKK30KKwordm9p
ZCBSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKCkgY29uc3QK
K3sKKyAgICBpZiAobV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3R5cGVzID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBl
cygKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksICZtX2NvbnRhaW5z
RmlsZW5hbWVzKTsKKyAgICBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFk
YWJsZURhdGFPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY2
ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJs
ZURhdGFPYmplY3QuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWFkYWJsZURhdGFPYmplY3Rf
aAorI2RlZmluZSBSZWFkYWJsZURhdGFPYmplY3RfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11
bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIGJy
b3dzZXIgdG8gdGhlIHJlbmRlcmVyLgorY2xhc3MgUmVhZGFibGVEYXRhT2JqZWN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8UmVhZGFibGVEYXRhT2JqZWN0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKTsK
KworICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3Ry
aW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRI
VE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5h
bWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZWFkYWJsZURhdGFPYmplY3QoYm9vbCBpc0Zv
ckRyYWdnaW5nKTsKKworICAgIC8vIFRoaXMgaXNuJ3QgYWx3YXlzIGNvbnN0Li4uIGJ1dCBtb3N0
IG9mIHRoZSB0aW1lIGl0IGlzLgorICAgIHZvaWQgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQo
KSBjb25zdDsKKworCisgICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICAvLyBUbyBhdm9p
ZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdlIGNhY2hl
IHNvbWUKKyAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgorICAgIG11dGFibGUgSGFzaFNl
dDxTdHJpbmc+IG1fdHlwZXM7CisgICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNGaWxlbmFtZXM7
CisgICAgbXV0YWJsZSBib29sIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2ZmNTA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXcml0YWJsZURhdGFPYmplY3QuaCIKKworI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFZlcmlmeSBp
ZiB0aGUgaW1wbGVtZW50YXRpb25zIGZvciByZWFkLW9ubHkgbWV0aG9kcyBhcmUgbmVlZGVkLiBQ
ZXIgdGhlCisvLyBjb2RlIGN1cnJlbnRseSBpbiBDbGlwYm9hcmRDaHJvbWl1bSwgaXQncyBhY3R1
YWxseSB1bm5lY2Vzc2FyeSwgYnV0IHdlIHNob3VsZAorLy8gZG91YmxlIGNoZWNrIGlmIHRoaXMg
aXMgaW50ZW5kZWQgYnkgdGhlIHNwZWMsIGVzcGVjaWFsbHkgc2luY2UgaXQgZG9lc24ndAorLy8g
cmVhbGx5IGFkZHJlc3Mgd2hlbiB0aGUgY2xpcGJvYXJkIG9iamVjdCBzaG91bGQgYmUgcmVhZGFi
bGUgYW5kIHdoZW4gaXQKKy8vIHNob3VsZCBiZSB3cml0YWJsZS4KK1Bhc3NSZWZQdHI8V3JpdGFi
bGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dp
bmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3QoaXNGb3JE
cmFnZ2luZykpOworfQorCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChi
b29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykK
K3sKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUpCit7CisgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBpZiAodHlwZSA9PSAi
dGV4dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0
eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworfQor
Cit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAg
Ly8gRklYTUU6IFRoZSBzcGVjIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gcG9wdWxhdGUgRmls
ZUxpc3QgY3VycmVudGx5LiBJbgorICAgIC8vIGZhY3QsIHRoZSBzcGVjIGV4cGxpY2l0bHkgc3Rh
dGVzIHRoYXQgZHJhZ2dpbmcgZmlsZXMgY2FuIG9ubHkgaGFwcGVuIGZyb20KKyAgICAvLyBvdXRz
aWRlIGEgYnJvd3NpbmcgY29udGV4dC4KKyAgICBjbGVhckFsbCgpOworfQorCit2b2lkIFdyaXRh
YmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQoreworICAgIG1fZGF0YU1hcC5jbGVhcigpOworICAg
IG1fdXJsVGl0bGUgPSAiIjsKKyAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworICAgIG1fZmls
ZUNvbnRlbnRGaWxlbmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBt
X2ZpbGVDb250ZW50LT5jbGVhcigpOworfQorCitib29sIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAo
IW1faXNGb3JEcmFnZ2luZykgeworICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3Jp
dGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IG1fZGF0YU1hcC5zZXQodHlwZSwgZGF0YSk7CisgICAgaWYgKHR5cGUgPT0gInRleHQvdXJpLWxp
c3QiKQorICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgZWxzZSBpZiAodHlwZSA9PSAidGV4
dC9odG1sIikKKyAgICAgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBzZXREYXRhKCJ0ZXh0L3VyaS1saXN0Iiwg
dXJsKTsKKyAgICBtX3VybFRpdGxlID0gdGl0bGU7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sK
KyAgICBzZXREYXRhKCJ0ZXh0L2h0bWwiLCBodG1sKTsKKyAgICBtX2h0bWxCYXNlVVJMID0gYmFz
ZVVSTDsKK30KKworLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRh
IGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorLy8gYnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZGF0YU1hcDsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3VybFRpdGxlOworfQorCitLVVJMIFdyaXRhYmxlRGF0YU9i
amVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX2h0bWxCYXNlVVJMOwor
fQorCisvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcgZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVy
IHRvIHRoZSBicm93c2VyLgorU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsKK30KKworU3RyaW5nIFdy
aXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ZpbGVDb250ZW50OworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pCit7CisgICAgbV9maWxlRXh0ZW5zaW9u
ID0gZmlsZUV4dGVuc2lvbjsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVD
b250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKQoreworICAg
IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7Cit9CisKK3ZvaWQg
V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZmlsZUNvbnRlbnQpCit7CisgICAgbV9maWxlQ29udGVudCA9IGZpbGVDb250ZW50OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1dyaXRhYmxlRGF0YU9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjcxZTJlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dy
aXRhYmxlRGF0YU9iamVjdC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdyaXRhYmxlRGF0YU9i
amVjdF9oCisjZGVmaW5lIFdyaXRhYmxlRGF0YU9iamVjdF9oCisKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRp
b24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIHJlbmRlcmVy
IHRvIHRoZSBicm93c2VyLiBUaGlzIGlzIGludGVudGVkZWQgdG8gYmUgdXNlZCBpbiBkcmFnc3Rh
cnQvY29weS9jdXQKKy8vIGV2ZW50cy4gRHVlIHRvIHNob3J0Y29taW5ncywgd3JpdGVzIHRvIHRo
ZSBwYXN0ZWJvYXJkIGNhbm5vdCBiZSBwZXJmb3JtZWQKKy8vIGF0b21pY2FsbHkuCitjbGFzcyBX
cml0YWJsZURhdGFPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXcml0YWJsZURhdGFPYmplY3Q+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGNy
ZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVz
KCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsKCk7CisgICAgdmlydHVhbCBib29sIHNldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgdmlydHVh
bCB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBi
YXNlVVJMKTsKKworICAgIC8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0
aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgaHRtbEJhc2VVUkwoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxl
Q29udGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVu
c2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxl
bmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXcml0YWJs
ZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5nKTsKKworICAgIGJvb2wgbV9pc0ZvckRyYWdn
aW5nOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9kYXRhTWFwOworICAgIFN0cmlu
ZyBtX3VybFRpdGxlOworICAgIEtVUkwgbV9odG1sQmFzZVVSTDsKKyAgICBTdHJpbmcgbV9maWxl
RXh0ZW5zaW9uOworICAgIFN0cmluZyBtX2ZpbGVDb250ZW50RmlsZW5hbWU7CisgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCg==
</data>
<flag name="review"
          id="55002"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66102</attachid>
            <date>2010-08-31 14:16:48 -0700</date>
            <delta_ts>2010-08-31 14:17:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>24238</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uYzU0ZTYwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBSZWFkYWJsZS9Xcml0YWJsZSB2
ZXJzaW9ucyBvZiBDaHJvbWl1bURhdGFPYmplY3ROZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTE3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgc2Vj
b25kIG9mIHNldmVyYWwgcGF0Y2hlcyB0byB1cGRhdGUgQ2hyb21pdW0gdG8gc3VwcG9ydAorICAg
ICAgICBhcmJpdHJhcnkgZGF0YSB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIuCisgICAgICAg
IFJlYWRhYmxlRGF0YU9iamVjdCBzaW1wbHkgY2FsbHMgdGhyb3VnaCB0byBzZXZlcmFsIENocm9t
aXVtIElQQ3MgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAg
ICAgIFdyaXRhYmxlRGF0YU9iamVjdCBvc3RlbnNpYmx5IGJ1ZmZlcnMgYXJiaXRyYXJ5IGRhdGEg
aW50ZXJuYWxseSB1bnRpbAorICAgICAgICBhIGNhbGwgaXMgbWFkZSB0byBmbHVzaCB0aGUgZGF0
YSB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYWJzdHJhY3Rpb247CisgICAgICAgIHVuZm9ydHVu
YXRlbHksIGEgc3BlY2lhbCBleGNlcHRpb24gaXMgY3VycmVudGx5IG1hZGUgZm9yIHBhc3RlYm9h
cmQKKyAgICAgICAgaGFuZGxpbmcgZHVlIHRvIGhvdyBpdCBpcyBoYW5kbGVkIGluIFdlYkNvcmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xpcGJvYXJkQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRh
YmxlRGF0YU9iamVjdDo6UmVhZGFibGVEYXRhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlRGF0YU9iamVjdDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURh
dGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6
Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldEhUTUwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpXcml0YWJsZURhdGFPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRh
YmxlRGF0YU9iamVjdDo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9i
amVjdDo6c2V0SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmRh
dGFNYXApOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6Omh0bWxCYXNlVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50RmlsZW5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudEZpbGVuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oOiBBZGRl
ZC4KKwogMjAxMC0wOC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBt
b2RlIDEwMDc1NQppbmRleCA1NTgzMDk4Li4xNmZmN2U2Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMTQwLDcgKzIxNDAsNiBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcCcsCkBAIC0yMTgzLDYg
KzIxODIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21p
dW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bS5oJywKQEAgLTIyMDMsNiArMjIwNCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1dpbmRvd3NWZXJzaW9uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1BhdGguaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3ROZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0TmV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYWM5Y2IuLjAwMDAw
MDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcu
aAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDaHJvbWl1
bURhdGFPYmplY3ROZXdfaAotI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3ROZXdfaAotCi0jaW5j
bHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0aGF0IHdvdWxkIGJlIGluIGEg
Y2xpcGJvYXJkIG9yIG1vdmVkCi0vLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBU
aGlzIGlzIHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQotLy8gb2YgYW5kIGlzIG5vdCBz
cGVjaWZpYyB0byBhIHBsYXRmb3JtLgotY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0TmV3IDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TmV3PiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc0RhdGEoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKSA9IDA7Ci0KLSAgICAvLyBTcGVjaWFsIGFjY2Vzc29ycyBmb3IgVVJMIGFuZCBIVE1M
IHNpbmNlIHRoZXkgY2FycnkgYWRkaXRpb25hbAotICAgIC8vIG1ldGFkYXRhLgotICAgIHZpcnR1
YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBi
YXNlVVJMKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3QgPSAwOwotCi0g
ICAgLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhl
IHJlbmRlcmVyIHRvIHRoZQotICAgIC8vIGJyb3dzZXIuCi0gICAgdmlydHVhbCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHVy
bFRpdGxlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0
ID0gMDsKLQotICAgIC8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRhdGEgZnJvbSB0aGUg
cmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCi0gICAgdmlydHVhbCBTdHJpbmcgZmlsZUV4dGVuc2lv
bigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250
ZW50KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShj
b25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVE
YXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2Jq
ZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODUwYjg4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmpl
Y3QuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
YWRhYmxlRGF0YU9iamVjdC5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1
ZmZlciBjbGlwYm9hcmRCdWZmZXIoYm9vbCBpc0ZvckRyYWdnaW5nKQoreworICAgIHJldHVybiBp
c0ZvckRyYWdnaW5nID8gUGFzdGVib2FyZFByaXZhdGU6OkRyYWdCdWZmZXIgOiBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Cit9CisKK1Bhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2Jq
ZWN0PiBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFkYWJsZURhdGFPYmplY3QoaXNGb3JEcmFnZ2luZykp
OworfQorCitSZWFkYWJsZURhdGFPYmplY3Q6OlJlYWRhYmxlRGF0YU9iamVjdChib29sIGlzRm9y
RHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZyksIG1faXNUeXBl
Q2FjaGVJbml0aWFsaXplZChmYWxzZSkKK3sKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6
Omhhc0RhdGEoKSBjb25zdAoreworICAgIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKCk7Cisg
ICAgcmV0dXJuICFtX3R5cGVzLmlzRW1wdHkoKSB8fCBtX2NvbnRhaW5zRmlsZW5hbWVzOworfQor
CitIYXNoU2V0PFN0cmluZz4gUmVhZGFibGVEYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7Cisg
ICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQoKTsKKyAgICByZXR1cm4gbV90eXBlczsKK30K
KworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBTdHJpbmcgZGF0YTsKKyAgICBTdHJpbmcg
aWdub3JlZE1ldGFkYXRhOworICAgIHN1Y2NlZWRlZCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksIHR5
cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1N0cmlu
ZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdAoreworICAg
IFN0cmluZyB1cmw7CisgICAgU3RyaW5nIGlnbm9yZWRUaXRsZTsKKyAgICBpZiAoIXRpdGxlKQor
ICAgICAgICB0aXRsZSA9ICZpZ25vcmVkVGl0bGU7CisgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwg
InRleHQvdXJpLWxpc3QiLCB1cmwsICp0aXRsZSk7CisgICAgcmV0dXJuIHVybDsKK30KKworU3Ry
aW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0Cit7
CisgICAgU3RyaW5nIGh0bWw7CisgICAgU3RyaW5nIGlnbm9yZWRCYXNlVVJMOworICAgIGlmICgh
YmFzZVVSTCkKKyAgICAgICAgYmFzZVVSTCA9ICZpZ25vcmVkQmFzZVVSTDsKKyAgICBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lz
Rm9yRHJhZ2dpbmcpLCAidGV4dC9odG1sIiwgaHRtbCwgKmJhc2VVUkwpOworICAgIHJldHVybiBo
dG1sOworfQorCitib29sIFJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKCkgY29uc3QK
K3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX2NvbnRh
aW5zRmlsZW5hbWVzOworfQorCitWZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZp
bGVuYW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkRmlsZW5hbWVzKGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpKTsKK30KKwordm9p
ZCBSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKCkgY29uc3QK
K3sKKyAgICBpZiAobV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3R5cGVzID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBl
cygKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksICZtX2NvbnRhaW5z
RmlsZW5hbWVzKTsKKyAgICBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFk
YWJsZURhdGFPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY2
ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJs
ZURhdGFPYmplY3QuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWFkYWJsZURhdGFPYmplY3Rf
aAorI2RlZmluZSBSZWFkYWJsZURhdGFPYmplY3RfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11
bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIGJy
b3dzZXIgdG8gdGhlIHJlbmRlcmVyLgorY2xhc3MgUmVhZGFibGVEYXRhT2JqZWN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8UmVhZGFibGVEYXRhT2JqZWN0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKTsK
KworICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3Ry
aW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRI
VE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5h
bWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZWFkYWJsZURhdGFPYmplY3QoYm9vbCBpc0Zv
ckRyYWdnaW5nKTsKKworICAgIC8vIFRoaXMgaXNuJ3QgYWx3YXlzIGNvbnN0Li4uIGJ1dCBtb3N0
IG9mIHRoZSB0aW1lIGl0IGlzLgorICAgIHZvaWQgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQo
KSBjb25zdDsKKworCisgICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICAvLyBUbyBhdm9p
ZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdlIGNhY2hl
IHNvbWUKKyAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgorICAgIG11dGFibGUgSGFzaFNl
dDxTdHJpbmc+IG1fdHlwZXM7CisgICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNGaWxlbmFtZXM7
CisgICAgbXV0YWJsZSBib29sIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2ZmNTA0ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXcml0YWJsZURhdGFPYmplY3QuaCIKKworI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFZlcmlmeSBp
ZiB0aGUgaW1wbGVtZW50YXRpb25zIGZvciByZWFkLW9ubHkgbWV0aG9kcyBhcmUgbmVlZGVkLiBQ
ZXIgdGhlCisvLyBjb2RlIGN1cnJlbnRseSBpbiBDbGlwYm9hcmRDaHJvbWl1bSwgaXQncyBhY3R1
YWxseSB1bm5lY2Vzc2FyeSwgYnV0IHdlIHNob3VsZAorLy8gZG91YmxlIGNoZWNrIGlmIHRoaXMg
aXMgaW50ZW5kZWQgYnkgdGhlIHNwZWMsIGVzcGVjaWFsbHkgc2luY2UgaXQgZG9lc24ndAorLy8g
cmVhbGx5IGFkZHJlc3Mgd2hlbiB0aGUgY2xpcGJvYXJkIG9iamVjdCBzaG91bGQgYmUgcmVhZGFi
bGUgYW5kIHdoZW4gaXQKKy8vIHNob3VsZCBiZSB3cml0YWJsZS4KK1Bhc3NSZWZQdHI8V3JpdGFi
bGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dp
bmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3QoaXNGb3JE
cmFnZ2luZykpOworfQorCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChi
b29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykK
K3sKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUpCit7CisgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBpZiAodHlwZSA9PSAi
dGV4dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0
eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworfQor
Cit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAg
Ly8gRklYTUU6IFRoZSBzcGVjIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gcG9wdWxhdGUgRmls
ZUxpc3QgY3VycmVudGx5LiBJbgorICAgIC8vIGZhY3QsIHRoZSBzcGVjIGV4cGxpY2l0bHkgc3Rh
dGVzIHRoYXQgZHJhZ2dpbmcgZmlsZXMgY2FuIG9ubHkgaGFwcGVuIGZyb20KKyAgICAvLyBvdXRz
aWRlIGEgYnJvd3NpbmcgY29udGV4dC4KKyAgICBjbGVhckFsbCgpOworfQorCit2b2lkIFdyaXRh
YmxlRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQoreworICAgIG1fZGF0YU1hcC5jbGVhcigpOworICAg
IG1fdXJsVGl0bGUgPSAiIjsKKyAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworICAgIG1fZmls
ZUNvbnRlbnRGaWxlbmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBt
X2ZpbGVDb250ZW50LT5jbGVhcigpOworfQorCitib29sIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAo
IW1faXNGb3JEcmFnZ2luZykgeworICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3Jp
dGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IG1fZGF0YU1hcC5zZXQodHlwZSwgZGF0YSk7CisgICAgaWYgKHR5cGUgPT0gInRleHQvdXJpLWxp
c3QiKQorICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgZWxzZSBpZiAodHlwZSA9PSAidGV4
dC9odG1sIikKKyAgICAgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBzZXREYXRhKCJ0ZXh0L3VyaS1saXN0Iiwg
dXJsKTsKKyAgICBtX3VybFRpdGxlID0gdGl0bGU7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sK
KyAgICBzZXREYXRhKCJ0ZXh0L2h0bWwiLCBodG1sKTsKKyAgICBtX2h0bWxCYXNlVVJMID0gYmFz
ZVVSTDsKK30KKworLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRh
IGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorLy8gYnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZGF0YU1hcDsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3VybFRpdGxlOworfQorCitLVVJMIFdyaXRhYmxlRGF0YU9i
amVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX2h0bWxCYXNlVVJMOwor
fQorCisvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcgZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVy
IHRvIHRoZSBicm93c2VyLgorU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsKK30KKworU3RyaW5nIFdy
aXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ZpbGVDb250ZW50OworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pCit7CisgICAgbV9maWxlRXh0ZW5zaW9u
ID0gZmlsZUV4dGVuc2lvbjsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVD
b250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKQoreworICAg
IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7Cit9CisKK3ZvaWQg
V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZmlsZUNvbnRlbnQpCit7CisgICAgbV9maWxlQ29udGVudCA9IGZpbGVDb250ZW50OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1dyaXRhYmxlRGF0YU9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjcxZTJlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dy
aXRhYmxlRGF0YU9iamVjdC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdyaXRhYmxlRGF0YU9i
amVjdF9oCisjZGVmaW5lIFdyaXRhYmxlRGF0YU9iamVjdF9oCisKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRp
b24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIHJlbmRlcmVy
IHRvIHRoZSBicm93c2VyLiBUaGlzIGlzIGludGVudGVkZWQgdG8gYmUgdXNlZCBpbiBkcmFnc3Rh
cnQvY29weS9jdXQKKy8vIGV2ZW50cy4gRHVlIHRvIHNob3J0Y29taW5ncywgd3JpdGVzIHRvIHRo
ZSBwYXN0ZWJvYXJkIGNhbm5vdCBiZSBwZXJmb3JtZWQKKy8vIGF0b21pY2FsbHkuCitjbGFzcyBX
cml0YWJsZURhdGFPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXcml0YWJsZURhdGFPYmplY3Q+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGNy
ZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVz
KCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsKCk7CisgICAgdmlydHVhbCBib29sIHNldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgdmlydHVh
bCB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBi
YXNlVVJMKTsKKworICAgIC8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0
aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgaHRtbEJhc2VVUkwoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxl
Q29udGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVu
c2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxl
bmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXcml0YWJs
ZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5nKTsKKworICAgIGJvb2wgbV9pc0ZvckRyYWdn
aW5nOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9kYXRhTWFwOworICAgIFN0cmlu
ZyBtX3VybFRpdGxlOworICAgIEtVUkwgbV9odG1sQmFzZVVSTDsKKyAgICBTdHJpbmcgbV9maWxl
RXh0ZW5zaW9uOworICAgIFN0cmluZyBtX2ZpbGVDb250ZW50RmlsZW5hbWU7CisgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66104</attachid>
            <date>2010-08-31 14:17:30 -0700</date>
            <delta_ts>2010-08-31 16:24:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>27058</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uOTc2ZDQwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBSZWFkYWJsZS9Xcml0YWJsZSB2
ZXJzaW9ucyBvZiBDaHJvbWl1bURhdGFPYmplY3ROZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTE3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgc2Vj
b25kIG9mIHNldmVyYWwgcGF0Y2hlcyB0byB1cGRhdGUgQ2hyb21pdW0gdG8gc3VwcG9ydAorICAg
ICAgICBhcmJpdHJhcnkgZGF0YSB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIuCisgICAgICAg
IFJlYWRhYmxlRGF0YU9iamVjdCBzaW1wbHkgY2FsbHMgdGhyb3VnaCB0byBzZXZlcmFsIENocm9t
aXVtIElQQ3MgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAg
ICAgIFdyaXRhYmxlRGF0YU9iamVjdCBvc3RlbnNpYmx5IGJ1ZmZlcnMgYXJiaXRyYXJ5IGRhdGEg
aW50ZXJuYWxseSB1bnRpbAorICAgICAgICBhIGNhbGwgaXMgbWFkZSB0byBmbHVzaCB0aGUgZGF0
YSB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYWJzdHJhY3Rpb247CisgICAgICAgIHVuZm9ydHVu
YXRlbHksIGEgc3BlY2lhbCBleGNlcHRpb24gaXMgY3VycmVudGx5IG1hZGUgZm9yIHBhc3RlYm9h
cmQKKyAgICAgICAgaGFuZGxpbmcgZHVlIHRvIGhvdyBpdCBpcyBoYW5kbGVkIGluIFdlYkNvcmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpjbGlwYm9hcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVE
YXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVEYXRhT2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9i
amVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpnZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpX
cml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVE
YXRhT2JqZWN0OjpzZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0
OjpzZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgor
CiAyMDEwLTA4LTMwICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1NTgzMDk4Li5lNjMzOWFjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMjE0MCwxMiArMjE0MCwxMiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3ROZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1NYWMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bVdpbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZE1pbWVUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwJywKQEAgLTIxODMsNiArMjE4Myw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRlLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmgn
LApAQCAtMjIwMyw2ICsyMjA1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9X
aWRnZXRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRv
d3NWZXJzaW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2luZG93c1Zl
cnNpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2Jq
ZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2Jq
ZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvUGF0aC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCcs
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dE5ldy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhYzljYi4uMDAwMDAwMAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oCisrKyAvZGV2
L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENocm9taXVtRGF0YU9iamVj
dE5ld19oCi0jZGVmaW5lIENocm9taXVtRGF0YU9iamVjdE5ld19oCi0KLSNpbmNsdWRlICJLVVJM
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQSBk
YXRhIG9iamVjdCBmb3IgaG9sZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQg
b3IgbW92ZWQKLS8vIGR1cmluZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMgdGhl
IGRhdGEgdGhhdCBXZWJDb3JlIGlzIGF3YXJlCi0vLyBvZiBhbmQgaXMgbm90IHNwZWNpZmljIHRv
IGEgcGxhdGZvcm0uCi1jbGFzcyBDaHJvbWl1bURhdGFPYmplY3ROZXcgOiBwdWJsaWMgUmVmQ291
bnRlZDxDaHJvbWl1bURhdGFPYmplY3ROZXc+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckFsbEV4Y2VwdEZpbGVzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0g
MDsKLQotICAgIC8vIFNwZWNpYWwgYWNjZXNzb3JzIGZvciBVUkwgYW5kIEhUTUwgc2luY2UgdGhl
eSBjYXJyeSBhZGRpdGlvbmFsCi0gICAgLy8gbWV0YWRhdGEuCi0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VVJM
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpID0g
MDsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBBY2Nl
c3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIg
dG8gdGhlCi0gICAgLy8gYnJvd3Nlci4KLSAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGRhdGFNYXAoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBLVVJMIGh0bWxCYXNlVVJMKCkgY29uc3QgPSAwOwotCi0g
ICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGZpbGUgZGF0YSBmcm9tIHRoZSByZW5kZXJlciB0
byB0aGUgYnJvd3Nlci4KLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmlu
ZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRl
eCAyNTkyNGUyLi4yMzUwOGE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3QuaCIKLSNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3ROZXcuaCIKICNpbmNsdWRl
ICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRHJhZ0RhdGEuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkTWltZVR5cGVzLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZE1pbWVUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTg2
Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZE1pbWVUeXBlcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENsaXBib2FyZE1pbWVUeXBlc19o
CisjZGVmaW5lIENsaXBib2FyZE1pbWVUeXBlc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y29uc3QgY2hhciogY29uc3QgdGV4dFBsYWluVHlwZSA9ICJ0ZXh0L3BsYWluIjsKK2NvbnN0IGNo
YXIqIGNvbnN0IHRleHRIdG1sVHlwZSA9ICJ0ZXh0L2h0bWwiOworY29uc3QgY2hhciogY29uc3Qg
dGV4dFVyaUxpc3RUeXBlID0gInRleHQvdXJpLWxpc3QiOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFk
YWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURh
dGFPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzMzYmIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0
YU9iamVjdC5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgor
I2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGNsaXBib2FyZEJ1ZmZl
cihib29sIGlzRm9yRHJhZ2dpbmcpCit7CisgICAgcmV0dXJuIGlzRm9yRHJhZ2dpbmcgPyBQYXN0
ZWJvYXJkUHJpdmF0ZTo6RHJhZ0J1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1
ZmZlcjsKK30KKworUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IFJlYWRhYmxlRGF0YU9i
amVjdDo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlYWRhYmxlRGF0YU9iamVjdChpc0ZvckRyYWdnaW5nKSk7Cit9CisKK1JlYWRhYmxlRGF0
YU9iamVjdDo6UmVhZGFibGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZykKKyAgICA6IG1f
aXNGb3JEcmFnZ2luZyhpc0ZvckRyYWdnaW5nKQorICAgICwgbV9jb250YWluc0ZpbGVuYW1lcyhm
YWxzZSkKKyAgICAsIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZChmYWxzZSkKK3sKK30KKworYm9v
bCBSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAoreworICAgIGVuc3VyZVR5cGVD
YWNoZUluaXRpYWxpemVkKCk7CisgICAgcmV0dXJuICFtX3R5cGVzLmlzRW1wdHkoKSB8fCBtX2Nv
bnRhaW5zRmlsZW5hbWVzOworfQorCitIYXNoU2V0PFN0cmluZz4gUmVhZGFibGVEYXRhT2JqZWN0
Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQoKTsKKyAg
ICByZXR1cm4gbV90eXBlczsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0
YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBTdHJp
bmcgZGF0YTsKKyAgICBTdHJpbmcgaWdub3JlZE1ldGFkYXRhOworICAgIHN1Y2NlZWRlZCA9IENo
cm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVy
KG1faXNGb3JEcmFnZ2luZyksIHR5cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0YSk7CisgICAgcmV0
dXJuIGRhdGE7Cit9CisKK1N0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcq
IHRpdGxlKSBjb25zdAoreworICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5nIGlnbm9yZWRUaXRs
ZTsKKyAgICBpZiAoIXRpdGxlKQorICAgICAgICB0aXRsZSA9ICZpZ25vcmVkVGl0bGU7CisgICAg
Q2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZm
ZXIobV9pc0ZvckRyYWdnaW5nKSwgdGV4dFVyaUxpc3RUeXBlLCB1cmwsICp0aXRsZSk7CisgICAg
cmV0dXJuIHVybDsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTChTdHJp
bmcqIGJhc2VVUkwpIGNvbnN0Cit7CisgICAgU3RyaW5nIGh0bWw7CisgICAgU3RyaW5nIGlnbm9y
ZWRCYXNlVVJMOworICAgIGlmICghYmFzZVVSTCkKKyAgICAgICAgYmFzZVVSTCA9ICZpZ25vcmVk
QmFzZVVSTDsKKyAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAg
IGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCB0ZXh0SHRtbFR5cGUsIGh0bWwsICpi
YXNlVVJMKTsKKyAgICByZXR1cm4gaHRtbDsKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6
Omhhc0ZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQo
KTsKKyAgICByZXR1cm4gbV9jb250YWluc0ZpbGVuYW1lczsKK30KKworVmVjdG9yPFN0cmluZz4g
UmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVybiBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyhjbGlwYm9hcmRCdWZmZXIobV9pc0Zv
ckRyYWdnaW5nKSk7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2Fj
aGVJbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNUeXBlQ2FjaGVJbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90eXBlcyA9IENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9y
RHJhZ2dpbmcpLCAmbV9jb250YWluc0ZpbGVuYW1lcyk7CisgICAgbV9pc1R5cGVDYWNoZUluaXRp
YWxpemVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjBmNmQ0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUmVhZGFibGVEYXRhT2JqZWN0X2gKKyNkZWZpbmUgUmVhZGFibGVEYXRhT2JqZWN0X2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VXNlZCBmb3Igb25lIHdheSBjb21tdW5pY2F0aW9uIG9mIGRyYWcvZHJvcCBhbmQgY29weS9wYXN0
ZSBkYXRhIGZyb20gdGhlCisvLyBicm93c2VyIHRvIHRoZSByZW5kZXJlci4KK2NsYXNzIFJlYWRh
YmxlRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlYWRhYmxlRGF0YU9iamVjdD4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gY3JlYXRl
KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0
OworICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVh
bCBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworCisgICAg
dmlydHVhbCBib29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0
cmluZz4gZmlsZW5hbWVzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmVhZGFi
bGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICAvLyBUaGlzIGlzbid0IGFs
d2F5cyBjb25zdC4uLiBidXQgbW9zdCBvZiB0aGUgdGltZSBpdCBpcy4KKyAgICB2b2lkIGVuc3Vy
ZVR5cGVDYWNoZUluaXRpYWxpemVkKCkgY29uc3Q7CisKKworICAgIGJvb2wgbV9pc0ZvckRyYWdn
aW5nOworCisgICAgLy8gVG8gYXZvaWQgbWFraW5nIGEgbG90IG9mIElQQyBjYWxscyBmb3IgZWFj
aCBkcmFnIGV2ZW50LCB3ZSBjYWNoZSBzb21lCisgICAgLy8gdmFsdWVzIGluIHRoZSByZW5kZXJl
ci4KKyAgICBtdXRhYmxlIEhhc2hTZXQ8U3RyaW5nPiBtX3R5cGVzOworICAgIG11dGFibGUgYm9v
bCBtX2NvbnRhaW5zRmlsZW5hbWVzOworICAgIG11dGFibGUgYm9vbCBtX2lzVHlwZUNhY2hlSW5p
dGlhbGl6ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlN2MyODMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTAsMCAr
MSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV3JpdGFibGVEYXRhT2JqZWN0
LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkNsaXBib2FyZE1p
bWVUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8V3JpdGFibGVE
YXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3QoaXNGb3JEcmFn
Z2luZykpOworfQorCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChib29s
IGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykKK3sK
K30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5
cGUpCit7CisgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBpZiAodHlwZSA9PSB0ZXh0
VXJpTGlzdFR5cGUpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0eXBl
ID09IHRleHRIdG1sVHlwZSkKKyAgICAgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKK30KKwor
dm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQoreworICAgIC8v
IEZJWE1FOiBUaGUgc3BlYyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIHBvcHVsYXRlIEZpbGVM
aXN0IGN1cnJlbnRseS4gSW4KKyAgICAvLyBmYWN0LCB0aGUgc3BlYyBleHBsaWNpdGx5IHN0YXRl
cyB0aGF0IGRyYWdnaW5nIGZpbGVzIGNhbiBvbmx5IGhhcHBlbiBmcm9tCisgICAgLy8gb3V0c2lk
ZSBhIGJyb3dzaW5nIGNvbnRleHQuCisgICAgY2xlYXJBbGwoKTsKK30KKwordm9pZCBXcml0YWJs
ZURhdGFPYmplY3Q6OmNsZWFyQWxsKCkKK3sKKyAgICBtX2RhdGFNYXAuY2xlYXIoKTsKKyAgICBt
X3VybFRpdGxlID0gIiI7CisgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKKyAgICBtX2ZpbGVD
b250ZW50RmlsZW5hbWUgPSAiIjsKKyAgICBpZiAobV9maWxlQ29udGVudCkKKyAgICAgICAgbV9m
aWxlQ29udGVudC0+Y2xlYXIoKTsKKyAgICBtX2ZpbGVFeHRlbnNpb24gPSAiIjsKK30KKworYm9v
bCBXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCit7CisgICAgaWYgKCFtX2lzRm9yRHJhZ2dpbmcpIHsKKyAgICAgICAgQ2hy
b21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YSh0eXBlLCBkYXRhLCAiIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBtX2RhdGFNYXAuc2V0KHR5cGUsIGRhdGEpOworICAg
IGlmICh0eXBlID09IHRleHRVcmlMaXN0VHlwZSkKKyAgICAgICAgbV91cmxUaXRsZSA9ICIiOwor
ICAgIGVsc2UgaWYgKHR5cGUgPT0gdGV4dEh0bWxUeXBlKQorICAgICAgICBtX2h0bWxCYXNlVVJM
ID0gS1VSTCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVj
dDo6c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAg
IHNldERhdGEodGV4dFVyaUxpc3RUeXBlLCB1cmwpOworICAgIG1fdXJsVGl0bGUgPSB0aXRsZTsK
K30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1s
LCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIHNldERhdGEodGV4dEh0bWxUeXBlLCBodG1s
KTsKKyAgICBtX2h0bWxCYXNlVVJMID0gYmFzZVVSTDsKK30KKworLy8gQWNjZXNzb3JzIHVzZWQg
d2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorLy8g
YnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZGF0
YU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YU1hcDsKK30KKworU3RyaW5nIFdyaXRh
YmxlRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybFRpdGxl
OworfQorCitLVVJMIFdyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2h0bWxCYXNlVVJMOworfQorCisvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcg
ZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLgorU3RyaW5nIFdyaXRh
YmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmls
ZUV4dGVuc2lvbjsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRG
aWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKK30K
KworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRl
bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZpbGVDb250ZW50OworfQorCit2b2lkIFdyaXRh
YmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNp
b24pCit7CisgICAgbV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsKK30KKwordm9pZCBX
cml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBm
aWxlQ29udGVudEZpbGVuYW1lKQoreworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVD
b250ZW50RmlsZW5hbWU7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29u
dGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7CisgICAgbV9maWxl
Q29udGVudCA9IGZpbGVDb250ZW50OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0Lmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTJlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCkBAIC0wLDAgKzEs
ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdyaXRhYmxlRGF0YU9iamVjdF9oCisjZGVmaW5lIFdyaXRhYmxlRGF0YU9i
amVjdF9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBV
c2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3Rl
IGRhdGEgZnJvbSB0aGUKKy8vIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLiBUaGlzIGlzIGludGVu
dGVkZWQgdG8gYmUgdXNlZCBpbiBkcmFnc3RhcnQvY29weS9jdXQKKy8vIGV2ZW50cy4gRHVlIHRv
IHNob3J0Y29taW5ncywgd3JpdGVzIHRvIHRoZSBwYXN0ZWJvYXJkIGNhbm5vdCBiZSBwZXJmb3Jt
ZWQKKy8vIGF0b21pY2FsbHkuCitjbGFzcyBXcml0YWJsZURhdGFPYmplY3QgOiBwdWJsaWMgUmVm
Q291bnRlZDxXcml0YWJsZURhdGFPYmplY3Q+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxs
KCk7CisgICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpOworCisgICAgdmlydHVhbCB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3Qg
U3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKworICAgIC8vIFVzZWQgZm9yIHRy
YW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCisg
ICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgaHRtbEJh
c2VVUkwoKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBXcml0YWJsZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5n
KTsKKworICAgIGJvb2wgbV9pc0ZvckRyYWdnaW5nOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gbV9kYXRhTWFwOworICAgIFN0cmluZyBtX3VybFRpdGxlOworICAgIEtVUkwgbV9odG1s
QmFzZVVSTDsKKyAgICBTdHJpbmcgbV9maWxlRXh0ZW5zaW9uOworICAgIFN0cmluZyBtX2ZpbGVD
b250ZW50RmlsZW5hbWU7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCg==
</data>
<flag name="review"
          id="55026"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66133</attachid>
            <date>2010-08-31 16:24:37 -0700</date>
            <delta_ts>2010-08-31 19:12:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>29211</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uYThjMzNjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBSZWFkYWJsZS9Xcml0YWJsZSB2
ZXJzaW9ucyBvZiBDaHJvbWl1bURhdGFPYmplY3ROZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTE3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgc2Vj
b25kIG9mIHNldmVyYWwgcGF0Y2hlcyB0byB1cGRhdGUgQ2hyb21pdW0gdG8gc3VwcG9ydAorICAg
ICAgICBhcmJpdHJhcnkgZGF0YSB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIuCisgICAgICAg
IFJlYWRhYmxlRGF0YU9iamVjdCBzaW1wbHkgY2FsbHMgdGhyb3VnaCB0byBzZXZlcmFsIENocm9t
aXVtIElQQ3MgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAg
ICAgIFdyaXRhYmxlRGF0YU9iamVjdCBvc3RlbnNpYmx5IGJ1ZmZlcnMgYXJiaXRyYXJ5IGRhdGEg
aW50ZXJuYWxseSB1bnRpbAorICAgICAgICBhIGNhbGwgaXMgbWFkZSB0byBmbHVzaCB0aGUgZGF0
YSB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYWJzdHJhY3Rpb247CisgICAgICAgIHVuZm9ydHVu
YXRlbHksIGEgc3BlY2lhbCBleGNlcHRpb24gaXMgY3VycmVudGx5IG1hZGUgZm9yIHBhc3RlYm9h
cmQKKyAgICAgICAgaGFuZGxpbmcgZHVlIHRvIGhvdyBpdCBpcyBoYW5kbGVkIGluIFdlYkNvcmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGlwYm9hcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVEYXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
ZGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0
YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0Ojpn
ZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFi
bGVEYXRhT2JqZWN0OjpzZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZGF0
YU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwpOgorICAg
ICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVk
LgorCiAyMDEwLTA4LTMwICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1NTgzMDk4Li42NGIwNTBl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMjE0MCwxMiArMjE0MCwxMyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bURhdGFPYmplY3ROZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW1NYWMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZE1pbWVUeXBlcy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZE1pbWVUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwJywKQEAgLTIxODMsNiArMjE4NCw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRlLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVt
LmgnLApAQCAtMjIwMyw2ICsyMjA2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9XaWRnZXRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dp
bmRvd3NWZXJzaW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2luZG93
c1ZlcnNpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRh
T2JqZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRh
T2JqZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvUGF0
aC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdE5ldy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RO
ZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhYzljYi4uMDAwMDAwMAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENocm9taXVtRGF0YU9i
amVjdE5ld19oCi0jZGVmaW5lIENocm9taXVtRGF0YU9iamVjdE5ld19oCi0KLSNpbmNsdWRlICJL
VVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
QSBkYXRhIG9iamVjdCBmb3IgaG9sZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9h
cmQgb3IgbW92ZWQKLS8vIGR1cmluZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMg
dGhlIGRhdGEgdGhhdCBXZWJDb3JlIGlzIGF3YXJlCi0vLyBvZiBhbmQgaXMgbm90IHNwZWNpZmlj
IHRvIGEgcGxhdGZvcm0uCi1jbGFzcyBDaHJvbWl1bURhdGFPYmplY3ROZXcgOiBwdWJsaWMgUmVm
Q291bnRlZDxDaHJvbWl1bURhdGFPYmplY3ROZXc+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBj
bGVhckFsbEV4Y2VwdEZpbGVzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
ID0gMDsKLQotICAgIC8vIFNwZWNpYWwgYWNjZXNzb3JzIGZvciBVUkwgYW5kIEhUTUwgc2luY2Ug
dGhleSBjYXJyeSBhZGRpdGlvbmFsCi0gICAgLy8gbWV0YWRhdGEuCi0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwp
ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBB
Y2Nlc3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVy
ZXIgdG8gdGhlCi0gICAgLy8gYnJvd3Nlci4KLSAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGRhdGFNYXAoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBLVVJMIGh0bWxCYXNlVVJMKCkgY29uc3QgPSAwOwot
Ci0gICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGZpbGUgZGF0YSBmcm9tIHRoZSByZW5kZXJl
ciB0byB0aGUgYnJvd3Nlci4KLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5n
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApp
bmRleCAyNTkyNGUyLi4yMzUwOGE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNhY2hl
ZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDaHJvbWl1
bURhdGFPYmplY3QuaCIKLSNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3ROZXcuaCIKICNpbmNs
dWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkTWltZVR5cGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iOTU3NDRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRNaW1lVHlwZXMuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY29uc3QgY2hhciB0ZXh0UGxhaW5UeXBlW10gPSAidGV4dC9wbGFpbiI7Citjb25zdCBjaGFy
IHRleHRIdG1sVHlwZVtdID0gInRleHQvaHRtbCI7Citjb25zdCBjaGFyIHRleHRVcmlMaXN0VHlw
ZVtdID0gInRleHQvdXJpLWxpc3QiOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ2OGYyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaApAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDbGlwYm9hcmRNaW1lVHlwZXNfaAorI2RlZmluZSBDbGlwYm9hcmRNaW1lVHlwZXNf
aAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2V4dGVybiBjb25zdCBjaGFyIHRleHRQbGFpblR5
cGVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHRleHRIdG1sVHlwZVtdOworZXh0ZXJuIGNvbnN0IGNo
YXIgdGV4dFVyaUxpc3RUeXBlW107CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVj
dC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzMzNiYgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcApA
QCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFkYWJsZURh
dGFPYmplY3QuaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ2xp
cGJvYXJkTWltZVR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgY2xpcGJvYXJkQnVmZmVyKGJvb2wgaXNGb3JE
cmFnZ2luZykKK3sKKyAgICByZXR1cm4gaXNGb3JEcmFnZ2luZyA/IFBhc3RlYm9hcmRQcml2YXRl
OjpEcmFnQnVmZmVyIDogUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworfQorCitQ
YXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gUmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUo
Ym9vbCBpc0ZvckRyYWdnaW5nKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVhZGFibGVE
YXRhT2JqZWN0KGlzRm9yRHJhZ2dpbmcpKTsKK30KKworUmVhZGFibGVEYXRhT2JqZWN0OjpSZWFk
YWJsZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5nKQorICAgIDogbV9pc0ZvckRyYWdnaW5n
KGlzRm9yRHJhZ2dpbmcpCisgICAgLCBtX2NvbnRhaW5zRmlsZW5hbWVzKGZhbHNlKQorICAgICwg
bV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKGZhbHNlKQoreworfQorCitib29sIFJlYWRhYmxlRGF0
YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6
ZWQoKTsKKyAgICByZXR1cm4gIW1fdHlwZXMuaXNFbXB0eSgpIHx8IG1fY29udGFpbnNGaWxlbmFt
ZXM7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OnR5cGVzKCkgY29u
c3QKK3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpOworICAgIHJldHVybiBtX3R5
cGVzOworfQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdAoreworICAgIFN0cmluZyBkYXRhOworICAg
IFN0cmluZyBpZ25vcmVkTWV0YWRhdGE7CisgICAgc3VjY2VlZGVkID0gQ2hyb21pdW1CcmlkZ2U6
OmNsaXBib2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdn
aW5nKSwgdHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30K
KworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0
Cit7CisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgaWdub3JlZFRpdGxlOworICAgIGlmICgh
dGl0bGUpCisgICAgICAgIHRpdGxlID0gJmlnbm9yZWRUaXRsZTsKKyAgICBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJh
Z2dpbmcpLCB0ZXh0VXJpTGlzdFR5cGUsIHVybCwgKnRpdGxlKTsKKyAgICByZXR1cm4gdXJsOwor
fQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkg
Y29uc3QKK3sKKyAgICBTdHJpbmcgaHRtbDsKKyAgICBTdHJpbmcgaWdub3JlZEJhc2VVUkw7Cisg
ICAgaWYgKCFiYXNlVVJMKQorICAgICAgICBiYXNlVVJMID0gJmlnbm9yZWRCYXNlVVJMOworICAg
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVm
ZmVyKG1faXNGb3JEcmFnZ2luZyksIHRleHRIdG1sVHlwZSwgaHRtbCwgKmJhc2VVUkwpOworICAg
IHJldHVybiBodG1sOworfQorCitib29sIFJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVz
KCkgY29uc3QKK3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpOworICAgIHJldHVy
biBtX2NvbnRhaW5zRmlsZW5hbWVzOworfQorCitWZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFP
YmplY3Q6OmZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkRmlsZW5hbWVzKGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpKTsK
K30KKwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVk
KCkgY29uc3QKK3sKKyAgICBpZiAobV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3R5cGVzID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFp
bGFibGVUeXBlcygKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksICZt
X2NvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42MGY2ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9SZWFkYWJsZURhdGFPYmplY3QuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWFkYWJsZURh
dGFPYmplY3RfaAorI2RlZmluZSBSZWFkYWJsZURhdGFPYmplY3RfaAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUg
d2F5IGNvbW11bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0
aGUKKy8vIGJyb3dzZXIgdG8gdGhlIHJlbmRlcmVyLgorY2xhc3MgUmVhZGFibGVEYXRhT2JqZWN0
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVhZGFibGVEYXRhT2JqZWN0PiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRy
YWdnaW5nKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKworICAgIHZp
cnR1YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
cmluZyBnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFt
ZXMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZWFkYWJsZURhdGFPYmplY3Qo
Ym9vbCBpc0ZvckRyYWdnaW5nKTsKKworICAgIC8vIFRoaXMgaXNuJ3QgYWx3YXlzIGNvbnN0Li4u
IGJ1dCBtb3N0IG9mIHRoZSB0aW1lIGl0IGlzLgorICAgIHZvaWQgZW5zdXJlVHlwZUNhY2hlSW5p
dGlhbGl6ZWQoKSBjb25zdDsKKworCisgICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICAv
LyBUbyBhdm9pZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQs
IHdlIGNhY2hlIHNvbWUKKyAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgorICAgIG11dGFi
bGUgSGFzaFNldDxTdHJpbmc+IG1fdHlwZXM7CisgICAgbXV0YWJsZSBib29sIG1fY29udGFpbnNG
aWxlbmFtZXM7CisgICAgbXV0YWJsZSBib29sIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNmU3YzI4MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCwwICsxLDE1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXcml0YWJsZURhdGFPYmplY3QuaCIKKworI2luY2x1
ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IFdy
aXRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZykKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdyaXRhYmxlRGF0YU9iamVjdChpc0ZvckRyYWdnaW5nKSk7Cit9CisK
K1dyaXRhYmxlRGF0YU9iamVjdDo6V3JpdGFibGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2lu
ZykKKyAgICA6IG1faXNGb3JEcmFnZ2luZyhpc0ZvckRyYWdnaW5nKQoreworfQorCit2b2lkIFdy
aXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBt
X2RhdGFNYXAucmVtb3ZlKHR5cGUpOworICAgIGlmICh0eXBlID09IHRleHRVcmlMaXN0VHlwZSkK
KyAgICAgICAgbV91cmxUaXRsZSA9ICIiOworICAgIGVsc2UgaWYgKHR5cGUgPT0gdGV4dEh0bWxU
eXBlKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworfQorCit2b2lkIFdyaXRhYmxl
RGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAgLy8gRklYTUU6IFRoZSBz
cGVjIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8gcG9wdWxhdGUgRmlsZUxpc3QgY3VycmVudGx5
LiBJbgorICAgIC8vIGZhY3QsIHRoZSBzcGVjIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgZHJhZ2dp
bmcgZmlsZXMgY2FuIG9ubHkgaGFwcGVuIGZyb20KKyAgICAvLyBvdXRzaWRlIGEgYnJvd3Npbmcg
Y29udGV4dC4KKyAgICBjbGVhckFsbCgpOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6
Y2xlYXJBbGwoKQoreworICAgIG1fZGF0YU1hcC5jbGVhcigpOworICAgIG1fdXJsVGl0bGUgPSAi
IjsKKyAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFt
ZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBtX2ZpbGVDb250ZW50LT5j
bGVhcigpOworICAgIG1fZmlsZUV4dGVuc2lvbiA9ICIiOworfQorCitib29sIFdyaXRhYmxlRGF0
YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkK
K3sKKyAgICBpZiAoIW1faXNGb3JEcmFnZ2luZykgeworICAgICAgICBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIG1fZGF0YU1hcC5zZXQodHlwZSwgZGF0YSk7CisgICAgaWYgKHR5cGUgPT0g
dGV4dFVyaUxpc3RUeXBlKQorICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgZWxzZSBpZiAo
dHlwZSA9PSB0ZXh0SHRtbFR5cGUpCisgICAgICAgIG1faHRtbEJhc2VVUkwgPSBLVVJMKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRVUkwoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgc2V0RGF0YSh0ZXh0
VXJpTGlzdFR5cGUsIHVybCk7CisgICAgbV91cmxUaXRsZSA9IHRpdGxlOworfQorCit2b2lkIFdy
aXRhYmxlRGF0YU9iamVjdDo6c2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwm
IGJhc2VVUkwpCit7CisgICAgc2V0RGF0YSh0ZXh0SHRtbFR5cGUsIGh0bWwpOworICAgIG1faHRt
bEJhc2VVUkwgPSBiYXNlVVJMOworfQorCisvLyBBY2Nlc3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVy
cmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlCisvLyBicm93c2VyLgorSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gV3JpdGFibGVEYXRhT2JqZWN0OjpkYXRhTWFwKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kYXRhTWFwOworfQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0
Ojp1cmxUaXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsVGl0bGU7Cit9CisKK0tVUkwg
V3JpdGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
aHRtbEJhc2VVUkw7Cit9CisKKy8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRhdGEgZnJv
bSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0
OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOwor
fQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9maWxlQ29udGVudEZpbGVuYW1lOworfQorCitQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnQ7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0
OjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbikKK3sKKyAgICBt
X2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9i
amVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50Rmls
ZW5hbWUpCit7CisgICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gZmlsZUNvbnRlbnRGaWxlbmFt
ZTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkKK3sKKyAgICBtX2ZpbGVDb250ZW50ID0gZmls
ZUNvbnRlbnQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzFlMmUyNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V3JpdGFibGVEYXRhT2JqZWN0X2gKKyNkZWZpbmUgV3JpdGFibGVEYXRhT2JqZWN0X2gKKworI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgZm9yIG9uZSB3
YXkgY29tbXVuaWNhdGlvbiBvZiBkcmFnL2Ryb3AgYW5kIGNvcHkvcGFzdGUgZGF0YSBmcm9tIHRo
ZQorLy8gcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuIFRoaXMgaXMgaW50ZW50ZWRlZCB0byBiZSB1
c2VkIGluIGRyYWdzdGFydC9jb3B5L2N1dAorLy8gZXZlbnRzLiBEdWUgdG8gc2hvcnRjb21pbmdz
LCB3cml0ZXMgdG8gdGhlIHBhc3RlYm9hcmQgY2Fubm90IGJlIHBlcmZvcm1lZAorLy8gYXRvbWlj
YWxseS4KK2NsYXNzIFdyaXRhYmxlRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdyaXRh
YmxlRGF0YU9iamVjdD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdyaXRhYmxl
RGF0YU9iamVjdD4gY3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
QWxsRXhjZXB0RmlsZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHRpdGxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWws
IGNvbnN0IEtVUkwmIGJhc2VVUkwpOworCisgICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRy
YWcgZGF0YSBmcm9tIHRoZSByZW5kZXJlciB0byB0aGUgYnJvd3Nlci4KKyAgICB2aXJ0dWFsIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGFNYXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB1cmxUaXRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0
OworCisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0OworICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRG
aWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRG
aWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IFdyaXRhYmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgYm9v
bCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2RhdGFN
YXA7CisgICAgU3RyaW5nIG1fdXJsVGl0bGU7CisgICAgS1VSTCBtX2h0bWxCYXNlVVJMOworICAg
IFN0cmluZyBtX2ZpbGVFeHRlbnNpb247CisgICAgU3RyaW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFt
ZTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2ZpbGVDb250ZW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>