<?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>55435</bug_id>
          
          <creation_ts>2011-02-28 18:27:18 -0800</creation_ts>
          <short_desc>WebKit2: Use CFNetwork Sessions API</short_desc>
          <delta_ts>2011-03-06 16:54:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jessie Berlin">jberlin</reporter>
          <assigned_to name="Jessie Berlin">jberlin</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>jberlin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>359584</commentid>
    <comment_count>0</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-02-28 18:27:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/8272253&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359908</commentid>
    <comment_count>1</comment_count>
      <attachid>84233</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-01 08:39:21 -0800</bug_when>
    <thetext>Created attachment 84233
Patch (Part 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359912</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-01 08:40:56 -0800</bug_when>
    <thetext>Attachment 84233 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/WebCore/platform/network/ResourceHandle.h:191:  The parameter name &quot;storageSession&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 19 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>359914</commentid>
    <comment_count>3</comment_count>
      <attachid>84234</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-01 08:47:18 -0800</bug_when>
    <thetext>Created attachment 84234
Patch (Part 1) style issues fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359940</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-01 09:27:59 -0800</bug_when>
    <thetext>Attachment 84233 did not build on qt:
Build output: http://queues.webkit.org/results/8072705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359943</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-01 09:29:58 -0800</bug_when>
    <thetext>Attachment 84233 did not build on win:
Build output: http://queues.webkit.org/results/8070755</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359984</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-03-01 10:11:02 -0800</bug_when>
    <thetext>Attachment 84234 did not build on qt:
Build output: http://queues.webkit.org/results/8037013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360001</commentid>
    <comment_count>7</comment_count>
      <attachid>84247</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-01 10:24:11 -0800</bug_when>
    <thetext>Created attachment 84247
Patch (Part 1) speculative build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360008</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-01 10:44:48 -0800</bug_when>
    <thetext>Attachment 84234 did not build on win:
Build output: http://queues.webkit.org/results/8078101</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360037</commentid>
    <comment_count>9</comment_count>
      <attachid>84247</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-03-01 11:28:21 -0800</bug_when>
    <thetext>Comment on attachment 84247
Patch (Part 1) speculative build fixes.

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

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:496
&gt; +void ResourceHandle::setPrivateBrowsingStorageSession(CFURLStorageSessionRef storageSession)
&gt; +{
&gt; +    privateStorageSession().adoptCF(storageSession);
&gt; +}

It seems a little strange that storing the private browsing session is stored here.

&gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:143
&gt; +static RetainPtr&lt;CFURLStorageSessionRef&gt;&amp; privateStorageSession()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(RetainPtr&lt;CFURLStorageSessionRef&gt;, storageSession, ());
&gt; +    return storageSession;
&gt; +}

This is duplicated from the CFNet version, it would be nice if we could share this code.

&gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:572
&gt; +void ResourceHandle::setPrivateBrowsingStorageSession(CFURLStorageSessionRef storageSession)
&gt; +{
&gt; +    privateStorageSession().adoptCF(storageSession);
&gt; +}
&gt; +
&gt; +CFURLStorageSessionRef ResourceHandle::privateBrowsingStorageSession()
&gt; +{
&gt; +    return privateStorageSession().get();
&gt; +}

This is duplicated from the CFNet version, it would be nice if we could share this code. Perhaps a new file for stuff shared between CFNet and mac implementations?

&gt; Source/WebKit2/UIProcess/API/C/WKContext.cpp:214
&gt; +void WKContextSetPrivateBrowsingStorageSessionIdentifier(WKContextRef contextRef, WKStringRef identifier)
&gt; +{
&gt; +    toImpl(contextRef)-&gt;setPrivateBrowsingStorageSessionIdentifier(toImpl(identifier)-&gt;string());
&gt; +}

Why is it necessary to set an explicit string identifier for the private browsing storage session, and then pass it around from the UI process to the Web process? Can&apos;t WebProcess just invent its own arbitrary string identifier? That would simplify the code to manage the private browsing storage session a lot, as it could be mostly encapsulated at the ResourceHandle level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360040</commentid>
    <comment_count>10</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-01 11:29:46 -0800</bug_when>
    <thetext>Attachment 84234 did not build on win:
Build output: http://queues.webkit.org/results/8077463</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360064</commentid>
    <comment_count>11</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-01 11:50:54 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 84247 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84247&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:496
&gt; &gt; +void ResourceHandle::setPrivateBrowsingStorageSession(CFURLStorageSessionRef storageSession)
&gt; &gt; +{
&gt; &gt; +    privateStorageSession().adoptCF(storageSession);
&gt; &gt; +}
&gt; 
&gt; It seems a little strange that storing the private browsing session is stored here.

Where else would you suggest?

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:143
&gt; &gt; +static RetainPtr&lt;CFURLStorageSessionRef&gt;&amp; privateStorageSession()
&gt; &gt; +{
&gt; &gt; +    DEFINE_STATIC_LOCAL(RetainPtr&lt;CFURLStorageSessionRef&gt;, storageSession, ());
&gt; &gt; +    return storageSession;
&gt; &gt; +}
&gt; 
&gt; This is duplicated from the CFNet version, it would be nice if we could share this code.

I could put them within a #if USE(CFSTORAGESESSION) in ResourceHandle.cpp

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:572
&gt; &gt; +void ResourceHandle::setPrivateBrowsingStorageSession(CFURLStorageSessionRef storageSession)
&gt; &gt; +{
&gt; &gt; +    privateStorageSession().adoptCF(storageSession);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +CFURLStorageSessionRef ResourceHandle::privateBrowsingStorageSession()
&gt; &gt; +{
&gt; &gt; +    return privateStorageSession().get();
&gt; &gt; +}
&gt; 
&gt; This is duplicated from the CFNet version, it would be nice if we could share this code. Perhaps a new file for stuff shared between CFNet and mac implementations?

What would that new file be called? I think it is probably better to just put them inside a #if USE(CFSTORAGESESSION) in ResourceHandle.cpp.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/WKContext.cpp:214
&gt; &gt; +void WKContextSetPrivateBrowsingStorageSessionIdentifier(WKContextRef contextRef, WKStringRef identifier)
&gt; &gt; +{
&gt; &gt; +    toImpl(contextRef)-&gt;setPrivateBrowsingStorageSessionIdentifier(toImpl(identifier)-&gt;string());
&gt; &gt; +}
&gt; 
&gt; Why is it necessary to set an explicit string identifier for the private browsing storage session, and then pass it around from the UI process to the Web process? Can&apos;t WebProcess just invent its own arbitrary string identifier?

Yes, I will change it so that the Web Process invents its own arbitrary string identifier here.

&gt; That would simplify the code to manage the private browsing storage session a lot, as it could be mostly encapsulated at the ResourceHandle level.

Maciej pointed out that it would be best to also make the create calls in ResourceHandle. I will work on another patch that makes these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360066</commentid>
    <comment_count>12</comment_count>
      <attachid>84247</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-01 11:51:33 -0800</bug_when>
    <thetext>Comment on attachment 84247
Patch (Part 1) speculative build fixes.

I will work on a new patch that takes into account Maciej&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360437</commentid>
    <comment_count>13</comment_count>
      <attachid>84336</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-01 17:35:31 -0800</bug_when>
    <thetext>Created attachment 84336
Patch (Part 1) Take 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360447</commentid>
    <comment_count>14</comment_count>
      <attachid>84336</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-03-01 17:57:46 -0800</bug_when>
    <thetext>Comment on attachment 84336
Patch (Part 1) Take 4

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

Looks great though.

&gt; Source/WebCore/WebCore.exp.in:1336
&gt; +_wkCreatePrivateStorageSession

This might not build when CFSTORAGESESSIONS is off.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:729
&gt; +CFURLStorageSessionRef ResourceHandle::createPrivateBrowsingStorageSession(CFStringRef identifier)
&gt; +{
&gt; +    return wkCreatePrivateStorageSession(identifier);
&gt; +}
&gt; +
&gt; +String ResourceHandle::defaultBaseForPrivateBrowsingStorageSessionIdentifier()
&gt; +{
&gt; +    RetainPtr&lt;CFStringRef&gt; base(AdoptCF, reinterpret_cast&lt;CFStringRef&gt;(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleIdentifierKey)));
&gt; +    return String(base.get());
&gt; +}
&gt; +

Should these be guarded?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360450</commentid>
    <comment_count>15</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-01 18:01:10 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 84336 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84336&amp;action=review
&gt; 
&gt; Looks great though.
&gt; 
&gt; &gt; Source/WebCore/WebCore.exp.in:1336
&gt; &gt; +_wkCreatePrivateStorageSession
&gt; 
&gt; This might not build when CFSTORAGESESSIONS is off.

This line shouldn&apos;t actually be problematic because it is soft-linked against in WKSI and declared in WebCoreSystemInterface.

The line that should be problematic is the one for setBasePrivateBrowsingStorageSession. I added guards around that.

&gt; 
&gt; &gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:729
&gt; &gt; +CFURLStorageSessionRef ResourceHandle::createPrivateBrowsingStorageSession(CFStringRef identifier)
&gt; &gt; +{
&gt; &gt; +    return wkCreatePrivateStorageSession(identifier);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +String ResourceHandle::defaultBaseForPrivateBrowsingStorageSessionIdentifier()
&gt; &gt; +{
&gt; &gt; +    RetainPtr&lt;CFStringRef&gt; base(AdoptCF, reinterpret_cast&lt;CFStringRef&gt;(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleIdentifierKey)));
&gt; &gt; +    return String(base.get());
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; Should these be guarded?

These don&apos;t need to be guarded because USE(CFSTORAGESESSIONS) is defined when USE(CFNETWORK) is defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360721</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-02 04:35:16 -0800</bug_when>
    <thetext>Attachment 84336 did not build on mac:
Build output: http://queues.webkit.org/results/8076879</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360806</commentid>
    <comment_count>17</comment_count>
      <attachid>84336</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-02 08:27:50 -0800</bug_when>
    <thetext>Comment on attachment 84336
Patch (Part 1) Take 4

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

&gt; Source/JavaScriptCore/wtf/Platform.h:695
&gt; +#define WTF_USE_CFSTORAGESESSIONS 1

I think CFURLSTORAGESESSIONS would be clearer. No need to conflate CF and CFNetwork more than we already do. ;-)

&gt; Source/WebCore/ChangeLog:15
&gt; +        Propogate the private browsing state to the ResourceHandle.

Typo: Propogate

&gt; Source/WebCore/platform/network/ResourceHandle.cpp:197
&gt; +static String&amp; baseForPrivateBrowsingStorageSessionIdentifier()

I think &quot;privateBrowserStorageSessionIdentifierBase&quot; would be a slightly clearer term. (You&apos;d want to propagate this to all the functions/variables that use this terminology.)

&gt; Source/WebCore/platform/network/ResourceHandle.cpp:205
&gt; +    if (enabled &amp;&amp; privateStorageSession().get())

No need for .get() here.

&gt; Source/WebCore/platform/network/ResourceHandle.cpp:209
&gt; +        privateStorageSession().clear();

We&apos;re using &quot;= nullptr&quot; instead of .clear() these days.

You could perhaps clean this all up a little bit like this:

if (!enabled) {
    privateStorageSession() = nullptr;
    return;
}

if (privateStorageSession())
    return;

&gt; Source/WebCore/platform/network/ResourceHandle.cpp:213
&gt; +    String base = baseForPrivateBrowsingStorageSessionIdentifier().isNull() ? defaultBaseForPrivateBrowsingStorageSessionIdentifier() : baseForPrivateBrowsingStorageSessionIdentifier();

What about an empty base?

&gt; Source/WebCore/platform/network/ResourceHandle.h:228
&gt; +    static CFURLStorageSessionRef createPrivateBrowsingStorageSession(CFStringRef identifier);

It would be better if this returned a RetainPtr. Maybe it should take a const String&amp;?

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:728
&gt; +String ResourceHandle::defaultBaseForPrivateBrowsingStorageSessionIdentifier()
&gt; +{
&gt; +    RetainPtr&lt;CFStringRef&gt; base(AdoptCF, reinterpret_cast&lt;CFStringRef&gt;(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleIdentifierKey)));
&gt; +    return String(base.get());
&gt; +}

You&apos;re overreleasing the CFStringRef here. You don&apos;t need a RetainPtr at all. (In fact, this whole function can become a single return statement.)

&gt; Source/WebKit2/UIProcess/mac/WebContextMac.mm:96
&gt;      // FIXME: This should really be configurable; we shouldn&apos;t just blindly allow read access to the UI process bundle.
&gt;      parameters.uiProcessBundleResourcePath = fileSystemRepresentation([[NSBundle mainBundle] resourcePath]);
&gt; +    parameters.uiProcessBundleIdentifier = String([[NSBundle mainBundle] bundleIdentifier]);

The FIXME here only applies to the first line, not the second. You should probably separate them.

&gt; Source/WebKit2/UIProcess/win/WebContextWin.cpp:73
&gt; +    RetainPtr&lt;CFStringRef&gt; bundleIdentifier(AdoptCF, reinterpret_cast&lt;CFStringRef&gt;(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleIdentifierKey)));
&gt; +    parameters.uiProcessBundleIdentifier = String(bundleIdentifier.get());

Again, you&apos;re overreleasing the CFStringRef and don&apos;t need a RetainPtr at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360828</commentid>
    <comment_count>18</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-02 09:09:43 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 84336 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84336&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/Platform.h:695
&gt; &gt; +#define WTF_USE_CFSTORAGESESSIONS 1
&gt; 
&gt; I think CFURLSTORAGESESSIONS would be clearer. No need to conflate CF and CFNetwork more than we already do. ;-)

Done.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        Propogate the private browsing state to the ResourceHandle.
&gt; 
&gt; Typo: Propogate

Whoops! Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/network/ResourceHandle.cpp:197
&gt; &gt; +static String&amp; baseForPrivateBrowsingStorageSessionIdentifier()
&gt; 
&gt; I think &quot;privateBrowserStorageSessionIdentifierBase&quot; would be a slightly clearer term. (You&apos;d want to propagate this to all the functions/variables that use this terminology.)

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/network/ResourceHandle.cpp:205
&gt; &gt; +    if (enabled &amp;&amp; privateStorageSession().get())
&gt; 
&gt; No need for .get() here.

Went with your cleaner version below.

&gt; 
&gt; &gt; Source/WebCore/platform/network/ResourceHandle.cpp:209
&gt; &gt; +        privateStorageSession().clear();
&gt; 
&gt; We&apos;re using &quot;= nullptr&quot; instead of .clear() these days.
&gt; 
&gt; You could perhaps clean this all up a little bit like this:
&gt; 
&gt; if (!enabled) {
&gt;     privateStorageSession() = nullptr;
&gt;     return;
&gt; }
&gt; 
&gt; if (privateStorageSession())
&gt;     return;

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/network/ResourceHandle.cpp:213
&gt; &gt; +    String base = baseForPrivateBrowsingStorageSessionIdentifier().isNull() ? defaultBaseForPrivateBrowsingStorageSessionIdentifier() : baseForPrivateBrowsingStorageSessionIdentifier();
&gt; 
&gt; What about an empty base?

I went with a default base so that when WebKit1 calls this in a single-process model, it will get the same identifier (which will get it the same session).

&gt; 
&gt; &gt; Source/WebCore/platform/network/ResourceHandle.h:228
&gt; &gt; +    static CFURLStorageSessionRef createPrivateBrowsingStorageSession(CFStringRef identifier);
&gt; 
&gt; It would be better if this returned a RetainPtr. Maybe it should take a const String&amp;?

I was trying to share as much of the code as possible (including getting the CFStringRef from String).

I made the function return a RetainPtr.

&gt; 
&gt; &gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:728
&gt; &gt; +String ResourceHandle::defaultBaseForPrivateBrowsingStorageSessionIdentifier()
&gt; &gt; +{
&gt; &gt; +    RetainPtr&lt;CFStringRef&gt; base(AdoptCF, reinterpret_cast&lt;CFStringRef&gt;(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleIdentifierKey)));
&gt; &gt; +    return String(base.get());
&gt; &gt; +}
&gt; 
&gt; You&apos;re overreleasing the CFStringRef here. You don&apos;t need a RetainPtr at all. (In fact, this whole function can become a single return statement.)

Done.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/WebContextMac.mm:96
&gt; &gt;      // FIXME: This should really be configurable; we shouldn&apos;t just blindly allow read access to the UI process bundle.
&gt; &gt;      parameters.uiProcessBundleResourcePath = fileSystemRepresentation([[NSBundle mainBundle] resourcePath]);
&gt; &gt; +    parameters.uiProcessBundleIdentifier = String([[NSBundle mainBundle] bundleIdentifier]);
&gt; 
&gt; The FIXME here only applies to the first line, not the second. You should probably separate them.

Done.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/win/WebContextWin.cpp:73
&gt; &gt; +    RetainPtr&lt;CFStringRef&gt; bundleIdentifier(AdoptCF, reinterpret_cast&lt;CFStringRef&gt;(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleIdentifierKey)));
&gt; &gt; +    parameters.uiProcessBundleIdentifier = String(bundleIdentifier.get());
&gt; 
&gt; Again, you&apos;re overreleasing the CFStringRef and don&apos;t need a RetainPtr at all.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361149</commentid>
    <comment_count>19</comment_count>
      <attachid>84336</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-02 16:12:15 -0800</bug_when>
    <thetext>Comment on attachment 84336
Patch (Part 1) Take 4

Committed in r80180
http://trac.webkit.org/changeset/80180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361164</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-02 16:31:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80180 might have broken Windows Debug (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361223</commentid>
    <comment_count>21</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-02 17:18:41 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; http://trac.webkit.org/changeset/80180 might have broken Windows Debug (Build)

Fixed in http://trac.webkit.org/changeset/80187</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361318</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-02 19:41:38 -0800</bug_when>
    <thetext>It seems like 4 tests are crashing on Snow Leopard (not WebKit2) after this patch is landed:
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r80188%20(26214)/results.html

Blame list:
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20(Tests)/builds/26213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361823</commentid>
    <comment_count>23</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-03 12:18:13 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; It seems like 4 tests are crashing on Snow Leopard (not WebKit2) after this patch is landed:
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r80188%20(26214)/results.html
&gt; 
&gt; Blame list:
&gt; http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20(Tests)/builds/26213

This was fixed in http://trac.webkit.org/changeset/80205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361830</commentid>
    <comment_count>24</comment_count>
      <attachid>84605</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-03 12:25:19 -0800</bug_when>
    <thetext>Created attachment 84605
Patch (Part 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361888</commentid>
    <comment_count>25</comment_count>
      <attachid>84605</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-03-03 13:24:06 -0800</bug_when>
    <thetext>Comment on attachment 84605
Patch (Part 2)

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

r=me, but you need to fix a leak before committing.

&gt; Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp:202
&gt; +    CFMutableURLRequestRef cfRequest = CFURLRequestCreateMutableCopy(0, m_cfRequest.get());
&gt; +    wkSetStorageSessionOnRequest(storageSession, cfRequest);
&gt; +    m_cfRequest.adoptCF(cfRequest);

Why not do the adoption on the first line? m_cfRequest.adoptCF(CFURLRequestCreateMutableCopy(...))

&gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:243
&gt; +    if (CFURLStorageSessionRef storageSession = privateBrowsingStorageSession())
&gt; +        nsRequest = [wkRequestWithStorageSessionSet(storageSession, nsRequest) retain];

Looks like you&apos;re leaking the new request.

&gt; Source/WebCore/platform/network/mac/ResourceRequestMac.mm:179
&gt; +    m_nsRequest.adoptNS([wkRequestWithStorageSessionSet(storageSession, m_nsRequest.get()) retain]);

No need for the adoptNS+retain. You can just use assignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361943</commentid>
    <comment_count>26</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-03 14:29:41 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 84605 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84605&amp;action=review
&gt; 
&gt; r=me, but you need to fix a leak before committing.

Thanks!

&gt; 
&gt; &gt; Source/WebCore/platform/network/cf/ResourceRequestCFNet.cpp:202
&gt; &gt; +    CFMutableURLRequestRef cfRequest = CFURLRequestCreateMutableCopy(0, m_cfRequest.get());
&gt; &gt; +    wkSetStorageSessionOnRequest(storageSession, cfRequest);
&gt; &gt; +    m_cfRequest.adoptCF(cfRequest);
&gt; 
&gt; Why not do the adoption on the first line? m_cfRequest.adoptCF(CFURLRequestCreateMutableCopy(...))

Because wkSetRequestStorageSession takes a MutableURLRequest, and m_cfRequest is non-mutable. I would rather not do a const-cast, so I think I should stick with 3 lines as is.

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:243
&gt; &gt; +    if (CFURLStorageSessionRef storageSession = privateBrowsingStorageSession())
&gt; &gt; +        nsRequest = [wkRequestWithStorageSessionSet(storageSession, nsRequest) retain];
&gt; 
&gt; Looks like you&apos;re leaking the new request.

Fixed. Since I changed to wkCopyRequestWithStorageSession, I this line is now:

nsRequest = [wkCopyRequestWithStorageSession(storageSession, nsRequest) autorelease];

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/ResourceRequestMac.mm:179
&gt; &gt; +    m_nsRequest.adoptNS([wkRequestWithStorageSessionSet(storageSession, m_nsRequest.get()) retain]);
&gt; 
&gt; No need for the adoptNS+retain. You can just use assignment.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362015</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-03 15:38:45 -0800</bug_when>
    <thetext>Attachment 84605 did not build on win:
Build output: http://queues.webkit.org/results/8086360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362023</commentid>
    <comment_count>28</comment_count>
      <attachid>84605</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-03 15:46:24 -0800</bug_when>
    <thetext>Comment on attachment 84605
Patch (Part 2)

Committed in http://trac.webkit.org/changeset/80294</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362522</commentid>
    <comment_count>29</comment_count>
      <attachid>84756</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-04 08:30:33 -0800</bug_when>
    <thetext>Created attachment 84756
Patch (Part 3)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362614</commentid>
    <comment_count>30</comment_count>
      <attachid>84756</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-03-04 10:40:00 -0800</bug_when>
    <thetext>Comment on attachment 84756
Patch (Part 3)

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

Patch looks good - just make sure all the calls to privateBrowsingStorageSession are guarded.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:448
&gt; +    if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession())

Does this need to be guarded? (It is on the Windows side).

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:463
&gt; +        cachedResponse = WKCachedResponseForRequest(storageSession, request);

Ditto.

&gt; Source/WebKit/mac/WebView/WebView.mm:1876
&gt; +        cachedResponse = WKCachedResponseForRequest(storageSession, request);

Same question about being guarded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362624</commentid>
    <comment_count>31</comment_count>
      <attachid>84756</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-03-04 10:48:07 -0800</bug_when>
    <thetext>Comment on attachment 84756
Patch (Part 3)

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

Two minor comments, but r=me.

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:261
&gt;      RetainPtr&lt;CFURLCacheRef&gt; cache(AdoptCF, CFURLCacheCopySharedURLCache());
&gt; +#if USE(CFURLSTORAGESESSIONS)
&gt; +    if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession())
&gt; +        cache.adoptCF(wkCopyURLCache(storageSession));
&gt; +#endif

This is a little unfortunate because it ends up assigning twice in the session case, needlessly thrashing the shared cache refcount. This probably isn&apos;t a hot enough function to matter, but it would maybe be nicer to write this as an else/if, so that CFURLCacheCopySharedURLCache is not even called in the shared case.

&gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:283
&gt;      RetainPtr&lt;CFURLCacheRef&gt; cache(AdoptCF, CFURLCacheCopySharedURLCache());
&gt; +#if USE(CFURLSTORAGESESSIONS)
&gt; +    if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession())
&gt; +        cache.adoptCF(wkCopyURLCache(storageSession));
&gt; +#endif

ditto previous comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362643</commentid>
    <comment_count>32</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-04 11:23:09 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 84756 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84756&amp;action=review
&gt; 
&gt; Patch looks good - just make sure all the calls to privateBrowsingStorageSession are guarded.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:448
&gt; &gt; +    if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession())
&gt; 
&gt; Does this need to be guarded? (It is on the Windows side).
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:463
&gt; &gt; +        cachedResponse = WKCachedResponseForRequest(storageSession, request);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/mac/WebView/WebView.mm:1876
&gt; &gt; +        cachedResponse = WKCachedResponseForRequest(storageSession, request);
&gt; 
&gt; Same question about being guarded.

I will add guards in this patch, and then do a clean-up patch to add guards everywhere I should have in Part #1 and Part #2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362645</commentid>
    <comment_count>33</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-04 11:23:35 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 84756 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84756&amp;action=review
&gt; 
&gt; Two minor comments, but r=me.

Thanks!

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:261
&gt; &gt;      RetainPtr&lt;CFURLCacheRef&gt; cache(AdoptCF, CFURLCacheCopySharedURLCache());
&gt; &gt; +#if USE(CFURLSTORAGESESSIONS)
&gt; &gt; +    if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession())
&gt; &gt; +        cache.adoptCF(wkCopyURLCache(storageSession));
&gt; &gt; +#endif
&gt; 
&gt; This is a little unfortunate because it ends up assigning twice in the session case, needlessly thrashing the shared cache refcount. This probably isn&apos;t a hot enough function to matter, but it would maybe be nicer to write this as an else/if, so that CFURLCacheCopySharedURLCache is not even called in the shared case.

Done.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp:283
&gt; &gt;      RetainPtr&lt;CFURLCacheRef&gt; cache(AdoptCF, CFURLCacheCopySharedURLCache());
&gt; &gt; +#if USE(CFURLSTORAGESESSIONS)
&gt; &gt; +    if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession())
&gt; &gt; +        cache.adoptCF(wkCopyURLCache(storageSession));
&gt; &gt; +#endif
&gt; 
&gt; ditto previous comment.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362665</commentid>
    <comment_count>34</comment_count>
      <attachid>84756</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-04 12:48:29 -0800</bug_when>
    <thetext>Comment on attachment 84756
Patch (Part 3)

Committed in r80370
http://trac.webkit.org/changeset/80370</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362710</commentid>
    <comment_count>35</comment_count>
      <attachid>84801</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-04 14:45:59 -0800</bug_when>
    <thetext>Created attachment 84801
Clean up: Add in more USE(CFURLSTORAGESESSIONS) guards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362737</commentid>
    <comment_count>36</comment_count>
      <attachid>84801</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-04 15:12:05 -0800</bug_when>
    <thetext>Comment on attachment 84801
Clean up: Add in more USE(CFURLSTORAGESESSIONS) guards

Committed in r80381
ttp://trac.webkit.org/changeset/80381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362952</commentid>
    <comment_count>37</comment_count>
      <attachid>84866</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-05 07:49:19 -0800</bug_when>
    <thetext>Created attachment 84866
Patch (Part 4)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362993</commentid>
    <comment_count>38</comment_count>
      <attachid>84878</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-05 15:06:48 -0800</bug_when>
    <thetext>Created attachment 84878
Patch (Part 4) Take 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362994</commentid>
    <comment_count>39</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-05 15:07:39 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Created an attachment (id=84878) [details]
&gt; Patch (Part 4) Take 2

This patch updates some WKSI function names, but is otherwise identical to the original Part 4 patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363027</commentid>
    <comment_count>40</comment_count>
      <attachid>84878</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-05 17:25:08 -0800</bug_when>
    <thetext>Comment on attachment 84878
Patch (Part 4) Take 2

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

&gt; Source/WebCore/platform/network/cf/CookieStorageCFNet.cpp:74
&gt; +#if USE(CFURLSTORAGESESSIONS)
&gt; +    privateBrowsingCookieStorage().adoptCF(enabled ? wkCreatePrivateInMemoryHTTPCookieStorage(ResourceHandle::privateBrowsingStorageSession()) : 0);
&gt; +#else
&gt; +    privateBrowsingCookieStorage().adoptCF(enabled ? wkCreatePrivateInMemoryHTTPCookieStorage(0) : 0);
&gt;  

I think the use of the ternary operator here makes things less clear and a simple if statement would work better.

&gt; Source/WebCore/platform/network/mac/CookieStorageMac.mm:103
&gt; +    privateBrowsingCookieStorage().adoptCF(0);

This would read clearer if you just used .clear() instead of adoptCF(0).

&gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:542
&gt; +    if (shouldRelaxThirdPartyCookiePolicy(firstRequest URL])) {

This probably doesn&apos;t compile. It is missing a [, or maybe the ] is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363029</commentid>
    <comment_count>41</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-03-05 17:54:07 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 84878 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84878&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/cf/CookieStorageCFNet.cpp:74
&gt; &gt; +#if USE(CFURLSTORAGESESSIONS)
&gt; &gt; +    privateBrowsingCookieStorage().adoptCF(enabled ? wkCreatePrivateInMemoryHTTPCookieStorage(ResourceHandle::privateBrowsingStorageSession()) : 0);
&gt; &gt; +#else
&gt; &gt; +    privateBrowsingCookieStorage().adoptCF(enabled ? wkCreatePrivateInMemoryHTTPCookieStorage(0) : 0);
&gt; &gt;  
&gt; 
&gt; I think the use of the ternary operator here makes things less clear and a simple if statement would work better.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/CookieStorageMac.mm:103
&gt; &gt; +    privateBrowsingCookieStorage().adoptCF(0);
&gt; 
&gt; This would read clearer if you just used .clear() instead of adoptCF(0).

I think Adam pointed out that we are using = nullptr instead of .clear() nowadays. I will do that.

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:542
&gt; &gt; +    if (shouldRelaxThirdPartyCookiePolicy(firstRequest URL])) {
&gt; 
&gt; This probably doesn&apos;t compile. It is missing a [, or maybe the ] is wrong.

Whoops! Thanks for spotting it! (it happens to be within a #if BUILDING_ON_TIGER block, which is why the EWS bots are not complaining).

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363153</commentid>
    <comment_count>42</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-03-06 16:54:46 -0800</bug_when>
    <thetext>&quot;Patch (Part 4) Take 2&quot; was committed in WebKit changeset 80435 &lt;http://trac.webkit.org/changeset/80435&gt;.

All patches for this bug have been landed. So, I am marking this bug Resolved Fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84233</attachid>
            <date>2011-03-01 08:39:21 -0800</date>
            <delta_ts>2011-03-01 08:47:18 -0800</delta_ts>
            <desc>Patch (Part 1)</desc>
            <filename>getAndStoreACFNetworkPrivateStorageSessionOpensource.patch</filename>
            <type>text/plain</type>
            <size>17629</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzk5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDItMjggIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBVc2UgQ0ZO
ZXR3b3JrIFNlc3Npb25zIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU1NDM1CisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBh
IFByaXZhdGUgQnJvd3Npbmcgc3RvcmFnZSBzZXNzaW9uLgorCisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisgICAgICAgIEFkZCBhIG5ldyAjZGVmaW5lIGZvciB1c2luZyBDRiBTdG9yYWdlIFNl
c3Npb25zLgorCiAyMDExLTAyLTI4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFw
cGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDc5ODY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTIsNiArNjkyLDcgQEAK
IAogI2lmIFVTRShDRk5FVFdPUkspIHx8IFBMQVRGT1JNKE1BQykKICNkZWZpbmUgV1RGX1VTRV9D
RlVSTENBQ0hFIDEKKyNkZWZpbmUgV1RGX1VTRV9DRlNUT1JBR0VTRVNTSU9OUyAxCiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKSAmJiAhUExBVEZPUk0oQ0hST01JVU0p
ICYmICFQTEFURk9STShRVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5OTY1KQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MTEtMDItMjggIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU0MzUKKworICAgICAgICBBZGQgdGhlIGFiaWxpdHkgdG8g
Y3JlYXRlIGEgUHJpdmF0ZSBCcm93c2luZyBTdG9yYWdlIFNlc3Npb24uCisKKyAgICAgICAgKiBX
ZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgRXhwb3J0IHRoZSBzeW1ib2xzIGZvciBSZXNvdXJjZUhh
bmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24gYW5kCisgICAgICAgIFJlc291
cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbi4KKworICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJp
dmF0ZVN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgU2luY2UgdGhlIHNhbWUgUHJpdmF0ZSBCcm93
c2luZyBTdG9yYWdlIFNlc3Npb24gd2lsbCBuZWVkIHRvIGJlIGFjY2Vzc2VkIHRocm91Z2hvdXQg
dGhlIGxvYWRpbmcKKyAgICAgICAgY29kZSBhbmQgd2lsbCBuZWVkIHRvIGJlIHVzZWQgYnkgYWxs
IHdlYiBwYWdlcyBhbmQgcGFnZSBncm91cHMsIG1ha2UgaXQgYSBnbG9iYWwgc3RhdGljLgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3Np
bmdTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oOgorCiAyMDExLTAyLTI4ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDEsNiArMzQxLDggQEAgX19aTjdXZWJDb3JlMTREb2N1bWVudExv
YWRlckMxRVJLTlNfMTVSZQogX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlckMyRVJLTlNfMTVS
ZXNvdXJjZVJlcXVlc3RFUktOU18xNFN1YnN0aXR1dGVEYXRhRQogX19aTjdXZWJDb3JlMTREb2N1
bWVudExvYWRlckQyRXYKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRXcml0ZXIxMXNldEVuY29kaW5n
RVJLTjNXVEY2U3RyaW5nRWIKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUzMnNldFByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uRVBLMjFfX0NGVVJMU3RvcmFnZVNlc3Npb24KK19fWk43
V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyOXByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uRXYK
IF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMnJlbGVhc2VQcm94eUV2CiBfX1pON1dlYkNv
cmUxNFJlc291cmNlSGFuZGxlMjBmb3JjZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pON1dlYkNvcmUx
NFJlc291cmNlTG9hZGVyMTRjYW5jZWxsZWRFcnJvckV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNzk4
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgYm9vbCBzaG91bGRGb3JjZUNvbnRlbnRTbmlmZmluZzsKIAorc3RhdGljIFJldGFp
blB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVm
Piwgc3RvcmFnZVNlc3Npb24sICgpKTsKKyAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENG
VVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24pCit7CisgICAgcHJpdmF0ZVN0b3Jh
Z2VTZXNzaW9uKCkuYWRvcHRDRihzdG9yYWdlU2Vzc2lvbik7Cit9CisKK0NGVVJMU3RvcmFnZVNl
c3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkK
K3sKKyAgICByZXR1cm4gcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkuZ2V0KCk7Cit9CisKIFJlc291
cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBz
aG91bGRDb250ZW50U25pZmYpCiAgICAgOiBkKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKHRo
aXMsIHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmICYm
IHNob3VsZENvbnRlbnRTbmlmZlVSTChyZXF1ZXN0LnVybCgpKSkpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lv
biA3OTg2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCB0eXBlZGVmIGludCBDRkhUVFBD
b29raWVTdG9yYWdlQWNjZXB0UG9sCiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVT
dG9yYWdlKiBDRkhUVFBDb29raWVTdG9yYWdlUmVmOwogI2VuZGlmCiAKK3R5cGVkZWYgY29uc3Qg
c3RydWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbiogQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZjsKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKQEAg
LTE4Niw2ICsxODgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmVGYWlsdXJlKFRpbWVyPFJl
c291cmNlSGFuZGxlPiopOwogCisgICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbik7CisgICAg
c3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b24oKTsKKwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+OjpyZWY7CiAgICAg
dXNpbmcgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46OmRlcmVmOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3OTk2NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDExLTAyLTI4ICBKZXNzaWUgQmVybGluICA8amJlcmxp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViS2l0MjogVXNlIENGTmV0d29yayBTZXNzaW9ucyBBUEkuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTQzNQorCisgICAgICAgIEFkZCB0
aGUgYWJpbGl0eSB0byBjcmVhdGUgYSBQcml2YXRlIEJyb3dzaW5nIFN0b3JhZ2UgU2Vzc2lvbi4K
KworICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKToKKyAg
ICAgICAgRW5jb2RlIHRoZSBQcml2YXRlIEJyb3dzaW5nIFN0b3JhZ2UgU2Vzc2lvbiBpZGVudGlm
aWVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNv
ZGUpOgorICAgICAgICBEZWNvZGUgdGhlIFByaXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9u
IGlkZW50aWZpZXIuCisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAg
ICAoV0tDb250ZXh0U2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKToK
KyAgICAgICAgQ2FsbCBXZWJDb250ZXh0OjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bklkZW50aWZpZXIuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUu
aDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29udGV4dDo6ZW5zdXJlV2ViUHJvY2Vzcyk6CisgICAgICAgIFNldCB0aGUgUHJpdmF0
ZSBCcm93c2luZyBTdG9yYWdlIFNlc3Npb24gaWRlbnRpZmllciBpbiB0aGUgV2ViUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5oOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bklkZW50aWZpZXIpOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisgICAgICAg
IElmIHRoZSBQcml2YXRlIEJyb3dzaW5nIHN0YXRlIGhhcyBjaGFuZ2VkIHRvIHRydWUsIGNyZWF0
ZSBhIFByaXZhdGUgQnJvd3NpbmcgU3RvcmFnZQorICAgICAgICBTZXNzaW9uIGFuZCBzdG9yZSBp
dCBvbiBSZXNvdXJjZUhhbmRsZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1TZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdl
U2Vzc2lvbik6CisgICAgICAgIENhbGwgaW50byBXS1NJIHRvIGNyZWF0ZSB0aGUgUHJpdmF0ZSBC
cm93c2luZyBTdG9yYWdlIFNlc3Npb24uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3dp
bi9XZWJQYWdlV2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1TZXRQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik6CisgICAgICAgIERpdHRvLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICBTdG9yZSB0aGUgUHJpdmF0ZSBCcm93
c2luZyBTdG9yYWdlIFNlc3Npb24gaWRlbnRpZmllciBmcm9tIHRoZQorICAgICAgICBXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXIpOgorCiAyMDExLTAyLTI4ICBBbGljZSBMaXUgIDxhbGljZS5saXVAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcAkocmV2aXNpb24gNzk4NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZAogICAgIGVuY29k
ZXItPmVuY29kZShsYW5ndWFnZUNvZGUpOwogICAgIGVuY29kZXItPmVuY29kZSh0ZXh0Q2hlY2tl
clN0YXRlKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2
YWwpOworICAgIGVuY29kZXItPmVuY29kZShwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklk
ZW50aWZpZXIpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBlbmNvZGVyLT5lbmNvZGUocGFyZW50
UHJvY2Vzc05hbWUpOwogICAgIGVuY29kZXItPmVuY29kZShwcmVzZW50ZXJBcHBsaWNhdGlvblBp
ZCk7CkBAIC0xMDUsNiArMTA2LDggQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjpkZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
cGFyYW1ldGVycy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnBh
cmVudFByb2Nlc3NOYW1lKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gNzk4NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NSw2ICs3NSw4IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHsKIAogICAgIGRvdWJsZSBkZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbDsKIAorICAg
IFN0cmluZyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXI7CisKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgU3RyaW5nIHBhcmVudFByb2Nlc3NOYW1lOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCShyZXZpc2lvbiA3OTg2OSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQxLDYgKzI0MSw4IEBAIHZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlV2ViUHJvY2VzcygpCiAKICAg
ICBwYXJhbWV0ZXJzLmRlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsID0gV2ViVVJMUmVxdWVz
dDo6ZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCgpOwogCisgICAgcGFyYW1ldGVycy5wcml2YXRlQnJv
d3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIgPSBtX3ByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uSWRlbnRpZmllcjsKKwogICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFy
YW1ldGVycwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MocGFyYW1ldGVycyk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkocmV2aXNpb24gNzk4Njkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsNiArMTU0LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXREYXRhYmFzZURpcmVj
dG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRlRGF0YWJhc2VEaXJlY3RvcnkgPSBk
aXI7IH0KIAorICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgeyBtX3ByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uSWRlbnRpZmllciA9IGlkZW50aWZpZXI7IH0KKwogICAgIHZvaWQgZW5zdXJlV2ViUHJv
Y2VzcygpOwogCiAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUoV2ViUHJvY2Vzc1Byb3h5Kik7CkBA
IC0yMzcsNiArMjM5LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgU3RyaW5nIG1fb3ZlcnJp
ZGVEYXRhYmFzZURpcmVjdG9yeTsKKworICAgIFN0cmluZyBtX3ByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9u
IDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNywzICsyMDcsOCBAQCB2b2lkIFdLQ29udGV4dFNldERhdGFi
YXNlRGlyZWN0b3J5KFdLQ29uCiB7CiAgICAgdG9JbXBsKGNvbnRleHRSZWYpLT5zZXREYXRhYmFz
ZURpcmVjdG9yeSh0b0ltcGwoZGF0YWJhc2VEaXJlY3RvcnkpLT5zdHJpbmcoKSk7CiB9CisKK3Zv
aWQgV0tDb250ZXh0U2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBpZGVudGlmaWVyKQoreworICAgIHRv
SW1wbChjb250ZXh0UmVmKS0+c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyKHRvSW1wbChpZGVudGlmaWVyKS0+c3RyaW5nKCkpOworfQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCShyZXZpc2lvbiA3
OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250
ZXh0U2V0RG9tYWluUmVsYXhhdAogLy8gd2Ugc2hvdWxkIHJlYWxseSBjaGFuZ2UgdGhpcyBzZXR0
aW5nIHRvIGJlIG9uIFdlYlByZWZlcmVuY2VzIGFuZCBjaGFuZ2VhYmxlIGF0IHJ1bnRpbWUuCiBX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXREYXRhYmFzZURpcmVjdG9yeShXS0NvbnRleHRSZWYg
Y29udGV4dCwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXJlY3RvcnkpOwogCitXS19FWFBPUlQgdm9p
ZCBXS0NvbnRleHRTZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGlkZW50aWZpZXIpOworCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsOCBAQCB2b2lkIFdl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKGNvCiAKICAgICBpZiAocGFyYW1ldGVycy5z
aG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNVc2Vz
Q29tcGxleFRleHRDb2RlUGF0aCh0cnVlKTsKKworICAgIG1fcHJpdmF0ZUJyb3dzaW5nU3RvcmFn
ZVNlc3Npb25JZGVudGlmaWVyID0gcGFyYW1ldGVycy5wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXI7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6c2V0U2hvdWxkVHJhY2tWaXNp
dGVkTGlua3MoYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2
LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhclJlc291cmNlQ2FjaGVzKCk7CiAKKyAgICBT
dHJpbmcgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKCkgeyByZXR1cm4g
bV9wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXI7IH0KKwogcHJpdmF0ZToK
ICAgICBXZWJQcm9jZXNzKCk7CiAKQEAgLTIwMCw2ICsyMDIsOCBAQCBwcml2YXRlOgogCiAgICAg
VGV4dENoZWNrZXJTdGF0ZSBtX3RleHRDaGVja2VyU3RhdGU7CiAgICAgV2ViR2VvbG9jYXRpb25N
YW5hZ2VyIG1fZ2VvbG9jYXRpb25NYW5hZ2VyOworCisgICAgU3RyaW5nIG1fcHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+CkBAIC0xMzE0LDYgKzEzMTUsMTYgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQ
cmVmZXJlbmNlcyhjb25zdCBXZQogCiAjdW5kZWYgSU5JVElBTElaRV9TRVRUSU5HUwogCisgICAg
Ym9vbCBwcml2YXRlQnJvd3NpbmdTaG91bGRCZUVuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFsdWVG
b3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnByaXZhdGVCcm93c2luZ0VuYWJsZWRLZXkoKSk7Cisj
aWYgVVNFKENGU1RPUkFHRVNFU1NJT05TKQorICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nU3RhdGVD
aGFuZ2VkID0gcHJpdmF0ZUJyb3dzaW5nU2hvdWxkQmVFbmFibGVkICE9IHNldHRpbmdzLT5wcml2
YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKHByaXZhdGVCcm93c2luZ1Nob3VsZEJlRW5h
YmxlZCAmJiBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQgJiYgIVdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKSB7CisgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
KEFkb3B0Q0YsIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uSWRlbnRpZmllcigpLmNyZWF0ZUNGU3RyaW5nKCkpOworICAgICAgICBwbGF0Zm9ybVNldFBy
aXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
SWRlbnRpZmllci5nZXQoKSk7CisgICAgfSBlbHNlIGlmICghcHJpdmF0ZUJyb3dzaW5nU2hvdWxk
QmVFbmFibGVkKQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb24oMCk7CisjZW5kaWYKKwogICAgIHNldHRpbmdzLT5zZXRKYXZh
U2NyaXB0RW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6
OmphdmFTY3JpcHRFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5KHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5S2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0UGx1Z2lu
c0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwbHVn
aW5zRW5hYmxlZEtleSgpKSk7CkBAIC0xMzIyLDcgKzEzMzMsNyBAQCB2b2lkIFdlYlBhZ2U6OnVw
ZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAgICAgc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVu
YWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpsb2NhbFN0
b3JhZ2VFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0WFNTQXVkaXRvckVuYWJsZWQo
c3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp4c3NBdWRpdG9yRW5h
YmxlZEtleSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoc3Rv
cmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpmcmFtZUZsYXR0ZW5pbmdF
bmFibGVkS2V5KCkpKTsKLSAgICBzZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChz
dG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnByaXZhdGVCcm93c2lu
Z0VuYWJsZWRLZXkoKSkpOworICAgIHNldHRpbmdzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
KHByaXZhdGVCcm93c2luZ1Nob3VsZEJlRW5hYmxlZCk7CiAgICAgc2V0dGluZ3MtPnNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2Vz
S2V5OjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0VGV4
dEFyZWFzQXJlUmVzaXphYmxlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNl
c0tleTo6dGV4dEFyZWFzQXJlUmVzaXphYmxlS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0TmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3Moc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5OjpuZWVkc1NpdGVTcGVjaWZpY1F1aXJrc0tleSgpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDc5ODY5KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNDY0LDYgKzQ2NCwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkU2VsZWN0SXRlbUZy
b21BY3RpdmVDb250ZXh0TWVudShjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJik7CiAjZW5k
aWYKIAorI2lmIFVTRShDRlNUT1JBR0VTRVNTSU9OUykKKyAgICB2b2lkIHBsYXRmb3JtU2V0UHJp
dmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllcik7CisjZW5k
aWYKKwogICAgIE93blB0cjxXZWJDb3JlOjpQYWdlPiBtX3BhZ2U7CiAgICAgUmVmUHRyPFdlYkZy
YW1lPiBtX21haW5GcmFtZTsKICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExp
c3Q+IG1fYmFja0ZvcndhcmRMaXN0OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gNzk4NjkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9TY3JvbGxWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRJdGVyYXRv
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oPgpAQCAtNDYxLDQg
KzQ2Miw5IEBAIGJvb2wgV2ViUGFnZTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWIKICAgICBy
ZXR1cm4gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJhcHBsZXdlYmRhdGEiKTsKIH0KIAordm9p
ZCBXZWJQYWdlOjpwbGF0Zm9ybVNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3Ry
aW5nUmVmIGlkZW50aWZpZXIpCit7CisgICAgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50aWZp
ZXIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAJKHJldmlzaW9u
IDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdl
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpZiBQTEFURk9S
TShDRykKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CkBAIC0zMjksNCArMzMwLDEzIEBAIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRUZXh0
KFN0cmluZyYgdGUKICAgICB0ZXh0ID0gc2VsZWN0ZWRSYW5nZS0+dGV4dCgpOwogfQogCisjaWYg
VVNFKENGU1RPUkFHRVNFU1NJT05TKQorCit2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtU2V0UHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllcikKK3sKKyAgICBS
ZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24od2tDcmVhdGVQ
cml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRpZmllcikpOworfQorCisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84234</attachid>
            <date>2011-03-01 08:47:18 -0800</date>
            <delta_ts>2011-03-01 10:24:11 -0800</delta_ts>
            <desc>Patch (Part 1) style issues fixed.</desc>
            <filename>getAndStoreACFNetworkPrivateStorageSessionOpensourceTake2.patch</filename>
            <type>text/plain</type>
            <size>17660</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzk5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDItMjggIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBVc2UgQ0ZO
ZXR3b3JrIFNlc3Npb25zIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU1NDM1CisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBh
IFByaXZhdGUgQnJvd3Npbmcgc3RvcmFnZSBzZXNzaW9uLgorCisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisgICAgICAgIEFkZCBhIG5ldyAjZGVmaW5lIGZvciB1c2luZyBDRiBTdG9yYWdlIFNl
c3Npb25zLgorCiAyMDExLTAyLTI4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFw
cGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDc5ODY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTIsNiArNjkyLDcgQEAK
IAogI2lmIFVTRShDRk5FVFdPUkspIHx8IFBMQVRGT1JNKE1BQykKICNkZWZpbmUgV1RGX1VTRV9D
RlVSTENBQ0hFIDEKKyNkZWZpbmUgV1RGX1VTRV9DRlNUT1JBR0VTRVNTSU9OUyAxCiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKSAmJiAhUExBVEZPUk0oQ0hST01JVU0p
ICYmICFQTEFURk9STShRVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5OTY1KQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MTEtMDItMjggIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBVc2UgQ0ZOZXR3
b3JrIFNlc3Npb25zIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1NDM1CisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIFBy
aXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9uLgorCisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisgICAgICAgIEV4cG9ydCB0aGUgc3ltYm9scyBmb3IgUmVzb3VyY2VIYW5kbGU6OnNldFBy
aXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uIGFuZAorICAgICAgICBSZXNvdXJjZUhhbmRsZTo6
cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVTdG9yYWdl
U2Vzc2lvbik6CisgICAgICAgIFNpbmNlIHRoZSBzYW1lIFByaXZhdGUgQnJvd3NpbmcgU3RvcmFn
ZSBTZXNzaW9uIHdpbGwgbmVlZCB0byBiZSBhY2Nlc3NlZCB0aHJvdWdob3V0IHRoZSBsb2FkaW5n
CisgICAgICAgIGNvZGUgYW5kIHdpbGwgbmVlZCB0byBiZSB1c2VkIGJ5IGFsbCB3ZWIgcGFnZXMg
YW5kIHBhZ2UgZ3JvdXBzLCBtYWtlIGl0IGEgZ2xvYmFsIHN0YXRpYy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNl
c3Npb24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKwog
MjAxMS0wMi0yOCAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNp
b24gNzk4NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5
KQpAQCAtMzQxLDYgKzM0MSw4IEBAIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJDMUVSS05T
XzE1UmUKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJDMkVSS05TXzE1UmVzb3VyY2VSZXF1
ZXN0RVJLTlNfMTRTdWJzdGl0dXRlRGF0YUUKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJE
MkV2CiBfX1pON1dlYkNvcmUxNERvY3VtZW50V3JpdGVyMTFzZXRFbmNvZGluZ0VSS04zV1RGNlN0
cmluZ0ViCitfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMzJzZXRQcml2YXRlQnJvd3NpbmdT
dG9yYWdlU2Vzc2lvbkVQSzIxX19DRlVSTFN0b3JhZ2VTZXNzaW9uCitfX1pON1dlYkNvcmUxNFJl
c291cmNlSGFuZGxlMjlwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkV2CiBfX1pON1dlYkNv
cmUxNFJlc291cmNlSGFuZGxlMTJyZWxlYXNlUHJveHlFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJj
ZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxv
YWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDc5ODY5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJv
b2wgc2hvdWxkRm9yY2VDb250ZW50U25pZmZpbmc7CiAKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZj4mIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4sIHN0b3JhZ2VT
ZXNzaW9uLCAoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uOworfQorCit2b2lkIFJlc291
cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQoreworICAgIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigp
LmFkb3B0Q0Yoc3RvcmFnZVNlc3Npb24pOworfQorCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJl
c291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgcmV0
dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmdldCgpOworfQorCiBSZXNvdXJjZUhhbmRsZTo6
UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhh
bmRsZUNsaWVudCogY2xpZW50LCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVu
dFNuaWZmKQogICAgIDogZChuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1ZXN0
LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiAmJiBzaG91bGRDb250
ZW50U25pZmZVUkwocmVxdWVzdC51cmwoKSkpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gNzk4NjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDYgKzcxLDggQEAgdHlwZWRlZiBpbnQgQ0ZIVFRQQ29va2llU3RvcmFn
ZUFjY2VwdFBvbAogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3RvcmFnZSogQ0ZI
VFRQQ29va2llU3RvcmFnZVJlZjsKICNlbmRpZgogCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NG
VVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNlc3Npb25SZWY7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CkBAIC0xODYsNiArMTg4
LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlRmFpbHVyZShUaW1lcjxSZXNvdXJjZUhhbmRs
ZT4qKTsKIAorICAgIHN0YXRpYyB2b2lkIHNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
KENGVVJMU3RvcmFnZVNlc3Npb25SZWYpOworICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCk7CisKICAgICB1c2luZyBSZWZDb3Vu
dGVkPFJlc291cmNlSGFuZGxlPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UmVzb3VyY2VI
YW5kbGU+OjpkZXJlZjsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzk5NjUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAx
MS0wMi0yOCAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFVzZSBDRk5ldHdv
cmsgU2Vzc2lvbnMgQVBJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU0MzUKKworICAgICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGEgUHJp
dmF0ZSBCcm93c2luZyBTdG9yYWdlIFNlc3Npb24uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIEVuY29kZSB0aGUgUHJpdmF0ZSBC
cm93c2luZyBTdG9yYWdlIFNlc3Npb24gaWRlbnRpZmllci4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgRGVjb2RlIHRoZSBQ
cml2YXRlIEJyb3dzaW5nIFN0b3JhZ2UgU2Vzc2lvbiBpZGVudGlmaWVyLgorICAgICAgICAqIFNo
YXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dFNldFByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcik6CisgICAgICAgIENhbGwgV2ViQ29udGV4dDo6
c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmVuc3VyZVdlYlBy
b2Nlc3MpOgorICAgICAgICBTZXQgdGhlIFByaXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9u
IGlkZW50aWZpZXIgaW4gdGhlIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvbnRleHQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6
c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKToKKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6dXBkYXRlUHJlZmVyZW5jZXMpOgorICAgICAgICBJZiB0aGUgUHJpdmF0ZSBCcm93c2luZyBz
dGF0ZSBoYXMgY2hhbmdlZCB0byB0cnVlLCBjcmVhdGUgYSBQcml2YXRlIEJyb3dzaW5nIFN0b3Jh
Z2UKKyAgICAgICAgU2Vzc2lvbiBhbmQgc3RvcmUgaXQgb24gUmVzb3VyY2VIYW5kbGUuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBs
YXRmb3JtU2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOgorICAgICAgICBDYWxsIGlu
dG8gV0tTSSB0byBjcmVhdGUgdGhlIFByaXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9uLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtU2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b24pOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToK
KyAgICAgICAgU3RvcmUgdGhlIFByaXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9uIGlkZW50
aWZpZXIgZnJvbSB0aGUKKyAgICAgICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKToKKwogMjAxMS0w
Mi0yOCAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDc5ODY5
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHZvaWQgV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVyczo6ZW5jb2QKICAgICBlbmNvZGVyLT5lbmNvZGUobGFuZ3VhZ2VDb2RlKTsK
ICAgICBlbmNvZGVyLT5lbmNvZGUodGV4dENoZWNrZXJTdGF0ZSk7CiAgICAgZW5jb2Rlci0+ZW5j
b2RlKGRlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUo
cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKTsKICNpZiBQTEFURk9STShN
QUMpCiAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhcmVudFByb2Nlc3NOYW1lKTsKICAgICBlbmNvZGVy
LT5lbmNvZGUocHJlc2VudGVyQXBwbGljYXRpb25QaWQpOwpAQCAtMTA1LDYgKzEwNiw4IEBAIGJv
b2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RU
aW1lb3V0SW50ZXJ2YWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUocGFyYW1ldGVycy5wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5wYXJlbnRQcm9jZXNzTmFtZSkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmgJKHJldmlzaW9uIDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsOCBAQCBz
dHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAKICAgICBkb3VibGUgZGVmYXVs
dFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWw7CiAKKyAgICBTdHJpbmcgcHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb25JZGVudGlmaWVyOworCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFN0cmluZyBw
YXJlbnRQcm9jZXNzTmFtZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250
ZXh0LmNwcAkocmV2aXNpb24gNzk4NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsOCBAQCB2b2lkIFdlYkNv
bnRleHQ6OmVuc3VyZVdlYlByb2Nlc3MoKQogCiAgICAgcGFyYW1ldGVycy5kZWZhdWx0UmVxdWVz
dFRpbWVvdXRJbnRlcnZhbCA9IFdlYlVSTFJlcXVlc3Q6OmRlZmF1bHRUaW1lb3V0SW50ZXJ2YWwo
KTsKIAorICAgIHBhcmFtZXRlcnMucHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyID0gbV9wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXI7CisKICAgICAv
LyBBZGQgYW55IHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMKICAgICBwbGF0Zm9ybUluaXRp
YWxpemVXZWJQcm9jZXNzKHBhcmFtZXRlcnMpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0LmgJKHJldmlzaW9uIDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0RGF0YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXIpIHsg
bV9vdmVycmlkZURhdGFiYXNlRGlyZWN0b3J5ID0gZGlyOyB9CiAKKyAgICB2b2lkIHNldFByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpIHsgbV9wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIgPSBpZGVudGlm
aWVyOyB9CisKICAgICB2b2lkIGVuc3VyZVdlYlByb2Nlc3MoKTsKIAogICAgIGJvb2wgc2hvdWxk
VGVybWluYXRlKFdlYlByb2Nlc3NQcm94eSopOwpAQCAtMjM3LDYgKzIzOSw4IEBAIHByaXZhdGU6
CiAjZW5kaWYKIAogICAgIFN0cmluZyBtX292ZXJyaWRlRGF0YWJhc2VEaXJlY3Rvcnk7CisKKyAg
ICBTdHJpbmcgbV9wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXI7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsMyAr
MjA3LDggQEAgdm9pZCBXS0NvbnRleHRTZXREYXRhYmFzZURpcmVjdG9yeShXS0NvbgogewogICAg
IHRvSW1wbChjb250ZXh0UmVmKS0+c2V0RGF0YWJhc2VEaXJlY3RvcnkodG9JbXBsKGRhdGFiYXNl
RGlyZWN0b3J5KS0+c3RyaW5nKCkpOwogfQorCit2b2lkIFdLQ29udGV4dFNldFByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tT
dHJpbmdSZWYgaWRlbnRpZmllcikKK3sKKyAgICB0b0ltcGwoY29udGV4dFJlZiktPnNldFByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcih0b0ltcGwoaWRlbnRpZmllciktPnN0
cmluZygpKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gNzk4NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2
ICs1OCw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldERvbWFpblJlbGF4YXQKIC8vIHdl
IHNob3VsZCByZWFsbHkgY2hhbmdlIHRoaXMgc2V0dGluZyB0byBiZSBvbiBXZWJQcmVmZXJlbmNl
cyBhbmQgY2hhbmdlYWJsZSBhdCBydW50aW1lLgogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0
RGF0YWJhc2VEaXJlY3RvcnkoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRhdGFi
YXNlRGlyZWN0b3J5KTsKIAorV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0UHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmlu
Z1JlZiBpZGVudGlmaWVyKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gNzk4Njkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTIsNiArMjEyLDggQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJv
Y2VzcyhjbwogCiAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRD
b2RlUGF0aCkKICAgICAgICAgc2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgodHJ1ZSk7
CisKKyAgICBtX3ByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllciA9IHBhcmFt
ZXRlcnMucHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyOwogfQogCiB2b2lk
IFdlYlByb2Nlc3M6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKGJvb2wgc2hvdWxkVHJhY2tW
aXNpdGVkTGlua3MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAko
cmV2aXNpb24gNzk4NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Y2xlYXJSZXNvdXJjZUNhY2hlcygpOwogCisgICAgU3RyaW5nIHByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNl
c3Npb25JZGVudGlmaWVyOyB9CisKIHByaXZhdGU6CiAgICAgV2ViUHJvY2VzcygpOwogCkBAIC0y
MDAsNiArMjAyLDggQEAgcHJpdmF0ZToKIAogICAgIFRleHRDaGVja2VyU3RhdGUgbV90ZXh0Q2hl
Y2tlclN0YXRlOwogICAgIFdlYkdlb2xvY2F0aW9uTWFuYWdlciBtX2dlb2xvY2F0aW9uTWFuYWdl
cjsKKworICAgIFN0cmluZyBtX3ByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmll
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzk4NjkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkwLDYgKzkwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgpAQCAtMTMxNCw2ICsx
MzE1LDE2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2UKIAogI3Vu
ZGVmIElOSVRJQUxJWkVfU0VUVElOR1MKIAorICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nU2hvdWxk
QmVFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpw
cml2YXRlQnJvd3NpbmdFbmFibGVkS2V5KCkpOworI2lmIFVTRShDRlNUT1JBR0VTRVNTSU9OUykK
KyAgICBib29sIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCA9IHByaXZhdGVCcm93c2luZ1No
b3VsZEJlRW5hYmxlZCAhPSBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAg
IGlmIChwcml2YXRlQnJvd3NpbmdTaG91bGRCZUVuYWJsZWQgJiYgcHJpdmF0ZUJyb3dzaW5nU3Rh
dGVDaGFuZ2VkICYmICFXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb24oKSkgeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcihBZG9wdENGLCBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIoKS5jcmVhdGVDRlN0
cmluZygpKTsKKyAgICAgICAgcGxhdGZvcm1TZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bihwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIuZ2V0KCkpOworICAgIH0g
ZWxzZSBpZiAoIXByaXZhdGVCcm93c2luZ1Nob3VsZEJlRW5hYmxlZCkKKyAgICAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKDApOwor
I2VuZGlmCisKICAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoc3RvcmUuZ2V0Qm9v
bFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpqYXZhU2NyaXB0RW5hYmxlZEtleSgpKSk7
CiAgICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShzdG9yZS5nZXRCb29s
VmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseUtl
eSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6cGx1Z2luc0VuYWJsZWRLZXkoKSkpOwpAQCAtMTMy
Miw3ICsxMzMzLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZQog
ICAgIHNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6bG9jYWxTdG9yYWdlRW5hYmxlZEtleSgpKSk7CiAgICAg
c2V0dGluZ3MtPnNldFhTU0F1ZGl0b3JFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShX
ZWJQcmVmZXJlbmNlc0tleTo6eHNzQXVkaXRvckVuYWJsZWRLZXkoKSkpOwogICAgIHNldHRpbmdz
LT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQ
cmVmZXJlbmNlc0tleTo6ZnJhbWVGbGF0dGVuaW5nRW5hYmxlZEtleSgpKSk7Ci0gICAgc2V0dGlu
Z3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdl
YlByZWZlcmVuY2VzS2V5Ojpwcml2YXRlQnJvd3NpbmdFbmFibGVkS2V5KCkpKTsKKyAgICBzZXR0
aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChwcml2YXRlQnJvd3NpbmdTaG91bGRCZUVu
YWJsZWQpOwogICAgIHNldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHN0b3JlLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZEtleSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldFRleHRBcmVhc0FyZVJlc2l6YWJsZShzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRleHRBcmVhc0FyZVJlc2l6YWJs
ZUtleSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHN0b3Jl
LmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bmVlZHNTaXRlU3BlY2lmaWNR
dWlya3NLZXkoKSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCw2ICs0NjQsMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpZFNlbGVjdEl0ZW1Gcm9tQWN0aXZlQ29udGV4dE1lbnUoY29uc3Qg
V2ViQ29udGV4dE1lbnVJdGVtRGF0YSYpOwogI2VuZGlmCiAKKyNpZiBVU0UoQ0ZTVE9SQUdFU0VT
U0lPTlMpCisgICAgdm9pZCBwbGF0Zm9ybVNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
KENGU3RyaW5nUmVmIGlkZW50aWZpZXIpOworI2VuZGlmCisKICAgICBPd25QdHI8V2ViQ29yZTo6
UGFnZT4gbV9wYWdlOwogICAgIFJlZlB0cjxXZWJGcmFtZT4gbV9tYWluRnJhbWU7CiAgICAgUmVm
UHRyPEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0PiBtX2JhY2tGb3J3YXJkTGlzdDsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0JKHJldmlzaW9uIDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFn
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsVmlldy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2lu
ZG93c0tleWJvYXJkQ29kZXMuaD4KQEAgLTQ2MSw0ICs0NjIsOSBAQCBib29sIFdlYlBhZ2U6OmNh
bkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViCiAgICAgcmV0dXJuIHJlcXVlc3QudXJsKCkucHJvdG9j
b2xJcygiYXBwbGV3ZWJkYXRhIik7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cGxhdGZvcm1TZXRQcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQoreworICAg
IFJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihXS0NyZWF0
ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQ
YWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2luL1dlYlBhZ2VXaW4uY3BwCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgpAQCAtMzI5LDQgKzMzMCwxMyBA
QCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkVGV4dChTdHJpbmcmIHRlCiAgICAgdGV4dCA9IHNl
bGVjdGVkUmFuZ2UtPnRleHQoKTsKIH0KIAorI2lmIFVTRShDRlNUT1JBR0VTRVNTSU9OUykKKwor
dm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENG
U3RyaW5nUmVmIGlkZW50aWZpZXIpCit7CisgICAgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uKHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50
aWZpZXIpKTsKK30KKworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84247</attachid>
            <date>2011-03-01 10:24:11 -0800</date>
            <delta_ts>2011-03-01 11:51:32 -0800</delta_ts>
            <desc>Patch (Part 1) speculative build fixes.</desc>
            <filename>getAndStoreACFNetworkPrivateStorageSessionOpensourceTake3.patch</filename>
            <type>text/plain</type>
            <size>19294</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODAwMDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDItMjggIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBVc2UgQ0ZO
ZXR3b3JrIFNlc3Npb25zIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU1NDM1CisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBh
IFByaXZhdGUgQnJvd3Npbmcgc3RvcmFnZSBzZXNzaW9uLgorCisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisgICAgICAgIEFkZCBhIG5ldyAjZGVmaW5lIGZvciB1c2luZyBDRiBTdG9yYWdlIFNl
c3Npb25zLgorCiAyMDExLTAyLTI4ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDYgKzY5Miw3
IEBACiAKICNpZiBVU0UoQ0ZORVRXT1JLKSB8fCBQTEFURk9STShNQUMpCiAjZGVmaW5lIFdURl9V
U0VfQ0ZVUkxDQUNIRSAxCisjZGVmaW5lIFdURl9VU0VfQ0ZTVE9SQUdFU0VTU0lPTlMgMQogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShXSU4pICYmICFPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKENIUk9N
SVVNKSAmJiAhUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDAwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBA
CisyMDExLTAyLTI4ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MjogVXNlIENG
TmV0d29yayBTZXNzaW9ucyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NTQzNQorCisgICAgICAgIEFkZCB0aGUgYWJpbGl0eSB0byBjcmVhdGUg
YSBQcml2YXRlIEJyb3dzaW5nIFN0b3JhZ2UgU2Vzc2lvbi4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICBFeHBvcnQgdGhlIHN5bWJvbHMgZm9yIFJlc291cmNlSGFuZGxlOjpz
ZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbiBhbmQKKyAgICAgICAgUmVzb3VyY2VIYW5k
bGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcml2YXRlU3RvcmFn
ZVNlc3Npb24pOgorICAgICAgICBTaW5jZSB0aGUgc2FtZSBQcml2YXRlIEJyb3dzaW5nIFN0b3Jh
Z2UgU2Vzc2lvbiB3aWxsIG5lZWQgdG8gYmUgYWNjZXNzZWQgdGhyb3VnaG91dCB0aGUgbG9hZGlu
ZworICAgICAgICBjb2RlIGFuZCB3aWxsIG5lZWQgdG8gYmUgdXNlZCBieSBhbGwgd2ViIHBhZ2Vz
IGFuZCBwYWdlIGdyb3VwcywgbWFrZSBpdCBhIGdsb2JhbCBzdGF0aWMuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVTdG9yYWdlU2Vzc2lvbik6CisgICAgICAg
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik6CisKIDIwMTEtMDMtMDEgIElseWEgVGlraG9u
b3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVs
IEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzk4NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMzQxLDYgKzM0
MSw4IEBAIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJDMUVSS05TXzE1UmUKIF9fWk43V2Vi
Q29yZTE0RG9jdW1lbnRMb2FkZXJDMkVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTRTdWJz
dGl0dXRlRGF0YUUKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXJEMkV2CiBfX1pON1dlYkNv
cmUxNERvY3VtZW50V3JpdGVyMTFzZXRFbmNvZGluZ0VSS04zV1RGNlN0cmluZ0ViCitfX1pON1dl
YkNvcmUxNFJlc291cmNlSGFuZGxlMzJzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQ
SzIxX19DRlVSTFN0b3JhZ2VTZXNzaW9uCitfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjlw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFu
ZGxlMTJyZWxlYXNlUHJveHlFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VD
b250ZW50U25pZmZpbmdFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVk
RXJyb3JFdgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAkocmV2aXNpb24gNzk4NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDEw
IEBAIHR5cGVkZWYgaW50IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2wKIHR5cGVkZWYgc3Ry
dWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CiAj
ZW5kaWYKIAorI2lmIFVTRShDRlNUT1JBR0VTRVNTSU9OUykKK3R5cGVkZWYgY29uc3Qgc3RydWN0
IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbiogQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZjsKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwpA
QCAtMTg2LDYgKzE5MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmVGYWlsdXJlKFRpbWVy
PFJlc291cmNlSGFuZGxlPiopOwogCisjaWYgVVNFKENGU1RPUkFHRVNFU1NJT05TKQorICAgIHN0
YXRpYyB2b2lkIHNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNl
c3Npb25SZWYpOworICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKCk7CisjZW5kaWYKKwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UmVz
b3VyY2VIYW5kbGU+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46
OmRlcmVmOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291
cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9uIDc5ODY5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAgX19kZWNsc3BlYyhkbGxpbXBvcnQp
IENGVVJMQ29ubmVjdGlvblJlZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBSZXRh
aW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJl
Zj4sIHN0b3JhZ2VTZXNzaW9uLCAoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uOworfQor
CiBzdGF0aWMgQ0ZTdHJpbmdSZWYgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUg
PSBDRlNUUigiV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyUnVuTG9vcE1vZGUiKTsKIAogY2xhc3Mg
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50IDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xp
ZW50IHsKQEAgLTQ4NCw2ICs0OTAsMTYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRS
ZXF1ZXN0KFJlcwogICAgIGNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhpcywgcmVxdWVzdCwg
cmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Np
b24pCit7CisgICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkuYWRvcHRDRihzdG9yYWdlU2Vzc2lv
bik7Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICByZXR1cm4gcHJpdmF0ZVN0b3JhZ2VTZXNz
aW9uKCkuZ2V0KCk7Cit9CisKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKCkKIHsKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UoKSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHJldmlzaW9uIDc5ODY5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsMTIgQEAgc3RhdGljIE5TU3RyaW5nICpX
ZWJDb3JlU3luY2hyb25vdXNMb2FkZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZj4sIHN0b3JhZ2VTZXNzaW9uLCAoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uOwor
fQorCiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKIHN0YXRpYyB1bnNpZ25lZCBpbk5TVVJMQ29u
bmVjdGlvbkNhbGxiYWNrOwogI2VuZGlmCkBAIC01NTUsNiArNTYxLDE2IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdChSZXMKICAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1
ZXN0KHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogfQogCit2b2lkIFJlc291cmNl
SGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQoreworICAgIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmFk
b3B0Q0Yoc3RvcmFnZVNlc3Npb24pOworfQorCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291
cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgcmV0dXJu
IHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmdldCgpOworfQorCiBib29sIFJlc291cmNlSGFuZGxl
OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCiB7CiAgICAgaWYgKGNsaWVudCgpKQpJbmRl
eDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkocmV2aXNpb24gODAwMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxMS0wMi0yOCAgSmVzc2llIEJlcmxp
biAgPGpiZXJsaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYktpdDI6IFVzZSBDRk5ldHdvcmsgU2Vzc2lvbnMgQVBJLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU0MzUKKworICAg
ICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGEgUHJpdmF0ZSBCcm93c2luZyBTdG9yYWdl
IFNlc3Npb24uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZSk6CisgICAgICAgIEVuY29kZSB0aGUgUHJpdmF0ZSBCcm93c2luZyBTdG9yYWdlIFNlc3Np
b24gaWRlbnRpZmllci4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZGVjb2RlKToKKyAgICAgICAgRGVjb2RlIHRoZSBQcml2YXRlIEJyb3dzaW5nIFN0b3Jh
Z2UgU2Vzc2lvbiBpZGVudGlmaWVyLgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdLQ29udGV4dFNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRl
bnRpZmllcik6CisgICAgICAgIENhbGwgV2ViQ29udGV4dDo6c2V0UHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb25JZGVudGlmaWVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmVuc3VyZVdlYlByb2Nlc3MpOgorICAgICAgICBTZXQg
dGhlIFByaXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9uIGlkZW50aWZpZXIgaW4gdGhlIFdl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRl
eHQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6c2V0UHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb25JZGVudGlmaWVyKToKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMp
OgorICAgICAgICBJZiB0aGUgUHJpdmF0ZSBCcm93c2luZyBzdGF0ZSBoYXMgY2hhbmdlZCB0byB0
cnVlLCBjcmVhdGUgYSBQcml2YXRlIEJyb3dzaW5nIFN0b3JhZ2UKKyAgICAgICAgU2Vzc2lvbiBh
bmQgc3RvcmUgaXQgb24gUmVzb3VyY2VIYW5kbGUuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtU2V0UHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb24pOgorICAgICAgICBDYWxsIGludG8gV0tTSSB0byBjcmVhdGUgdGhl
IFByaXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9uLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBs
YXRmb3JtU2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOgorICAgICAgICBEaXR0by4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgU3RvcmUgdGhlIFBy
aXZhdGUgQnJvd3NpbmcgU3RvcmFnZSBTZXNzaW9uIGlkZW50aWZpZXIgZnJvbSB0aGUKKyAgICAg
ICAgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cHJpdmF0ZUJyb3dzaW5n
U3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKToKKwogMjAxMS0wMy0wMSAgQmFsYXpzIEtlbGVtZW4g
IDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxz
c29uLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gNzk4NjkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNv
ZAogICAgIGVuY29kZXItPmVuY29kZShsYW5ndWFnZUNvZGUpOwogICAgIGVuY29kZXItPmVuY29k
ZSh0ZXh0Q2hlY2tlclN0YXRlKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoZGVmYXVsdFJlcXVlc3RU
aW1lb3V0SW50ZXJ2YWwpOworICAgIGVuY29kZXItPmVuY29kZShwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbklkZW50aWZpZXIpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBlbmNvZGVyLT5l
bmNvZGUocGFyZW50UHJvY2Vzc05hbWUpOwogICAgIGVuY29kZXItPmVuY29kZShwcmVzZW50ZXJB
cHBsaWNhdGlvblBpZCk7CkBAIC0xMDUsNiArMTA2LDggQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpkZWNvZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUocGFyYW1ldGVycy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJz
LnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShw
YXJhbWV0ZXJzLnBhcmVudFByb2Nlc3NOYW1lKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gNzk4
NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw4IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzIHsKIAogICAgIGRvdWJsZSBkZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRl
cnZhbDsKIAorICAgIFN0cmluZyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZp
ZXI7CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgU3RyaW5nIHBhcmVudFByb2Nlc3NOYW1lOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCShyZXZpc2lvbiA3
OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQxLDYgKzI0MSw4IEBAIHZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlV2ViUHJv
Y2VzcygpCiAKICAgICBwYXJhbWV0ZXJzLmRlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsID0g
V2ViVVJMUmVxdWVzdDo6ZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCgpOwogCisgICAgcGFyYW1ldGVy
cy5wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIgPSBtX3ByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcjsKKwogICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0g
c3BlY2lmaWMgcGFyYW1ldGVycwogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MocGFy
YW1ldGVycyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkocmV2
aXNpb24gNzk4NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRE
YXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRlRGF0YWJhc2VE
aXJlY3RvcnkgPSBkaXI7IH0KIAorICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNl
c3Npb25JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikgeyBtX3ByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllciA9IGlkZW50aWZpZXI7IH0KKwogICAgIHZvaWQg
ZW5zdXJlV2ViUHJvY2VzcygpOwogCiAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUoV2ViUHJvY2Vz
c1Byb3h5Kik7CkBAIC0yMzcsNiArMjM5LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgU3Ry
aW5nIG1fb3ZlcnJpZGVEYXRhYmFzZURpcmVjdG9yeTsKKworICAgIFN0cmluZyBtX3ByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5j
cHAJKHJldmlzaW9uIDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNywzICsyMDcsOCBAQCB2b2lkIFdLQ29u
dGV4dFNldERhdGFiYXNlRGlyZWN0b3J5KFdLQ29uCiB7CiAgICAgdG9JbXBsKGNvbnRleHRSZWYp
LT5zZXREYXRhYmFzZURpcmVjdG9yeSh0b0ltcGwoZGF0YWJhc2VEaXJlY3RvcnkpLT5zdHJpbmco
KSk7CiB9CisKK3ZvaWQgV0tDb250ZXh0U2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25J
ZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBpZGVudGlmaWVy
KQoreworICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNl
c3Npb25JZGVudGlmaWVyKHRvSW1wbChpZGVudGlmaWVyKS0+c3RyaW5nKCkpOworfQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5o
CShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHRQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0U2V0RG9tYWluUmVsYXhhdAogLy8gd2Ugc2hvdWxkIHJlYWxseSBjaGFu
Z2UgdGhpcyBzZXR0aW5nIHRvIGJlIG9uIFdlYlByZWZlcmVuY2VzIGFuZCBjaGFuZ2VhYmxlIGF0
IHJ1bnRpbWUuCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXREYXRhYmFzZURpcmVjdG9yeShX
S0NvbnRleHRSZWYgY29udGV4dCwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXJlY3RvcnkpOwogCitX
S19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklk
ZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGlkZW50aWZpZXIpOwor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIs
OCBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKGNvCiAKICAgICBpZiAo
cGFyYW1ldGVycy5zaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoKQogICAgICAgICBz
ZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aCh0cnVlKTsKKworICAgIG1fcHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyID0gcGFyYW1ldGVycy5wcml2YXRlQnJvd3Np
bmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXI7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6c2V0U2hv
dWxkVHJhY2tWaXNpdGVkTGlua3MoYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiA3OTg2OSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsNiArMTE2LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhclJlc291cmNlQ2FjaGVz
KCk7CiAKKyAgICBTdHJpbmcgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
KCkgeyByZXR1cm4gbV9wcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXI7IH0K
KwogcHJpdmF0ZToKICAgICBXZWJQcm9jZXNzKCk7CiAKQEAgLTIwMCw2ICsyMDIsOCBAQCBwcml2
YXRlOgogCiAgICAgVGV4dENoZWNrZXJTdGF0ZSBtX3RleHRDaGVja2VyU3RhdGU7CiAgICAgV2Vi
R2VvbG9jYXRpb25NYW5hZ2VyIG1fZ2VvbG9jYXRpb25NYW5hZ2VyOworCisgICAgU3RyaW5nIG1f
cHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA3OTg2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CkBAIC0xMzE0LDYgKzEzMTUsMTYgQEAgdm9pZCBXZWJQ
YWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZQogCiAjdW5kZWYgSU5JVElBTElaRV9TRVRU
SU5HUwogCisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdTaG91bGRCZUVuYWJsZWQgPSBzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnByaXZhdGVCcm93c2luZ0VuYWJs
ZWRLZXkoKSk7CisjaWYgVVNFKENGU1RPUkFHRVNFU1NJT05TKQorICAgIGJvb2wgcHJpdmF0ZUJy
b3dzaW5nU3RhdGVDaGFuZ2VkID0gcHJpdmF0ZUJyb3dzaW5nU2hvdWxkQmVFbmFibGVkICE9IHNl
dHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKHByaXZhdGVCcm93c2lu
Z1Nob3VsZEJlRW5hYmxlZCAmJiBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQgJiYgIVdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpKSB7Cisg
ICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b25JZGVudGlmaWVyKEFkb3B0Q0YsIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcigpLmNyZWF0ZUNGU3RyaW5nKCkpOworICAgICAgICBw
bGF0Zm9ybVNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uSWRlbnRpZmllci5nZXQoKSk7CisgICAgfSBlbHNlIGlmICghcHJpdmF0ZUJy
b3dzaW5nU2hvdWxkQmVFbmFibGVkKQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6
c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oMCk7CisjZW5kaWYKKwogICAgIHNldHRp
bmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJl
ZmVyZW5jZXNLZXk6OmphdmFTY3JpcHRFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0
TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVm
ZXJlbmNlc0tleTo6bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5S2V5KCkpKTsKICAgICBzZXR0aW5n
cy0+c2V0UGx1Z2luc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5OjpwbHVnaW5zRW5hYmxlZEtleSgpKSk7CkBAIC0xMzIyLDcgKzEzMzMsNyBAQCB2b2lk
IFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAgICAgc2V0dGluZ3MtPnNldExv
Y2FsU3RvcmFnZUVuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2Vz
S2V5Ojpsb2NhbFN0b3JhZ2VFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0WFNTQXVk
aXRvckVuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp4
c3NBdWRpdG9yRW5hYmxlZEtleSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldEZyYW1lRmxhdHRlbmlu
Z0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpmcmFt
ZUZsYXR0ZW5pbmdFbmFibGVkS2V5KCkpKTsKLSAgICBzZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnBy
aXZhdGVCcm93c2luZ0VuYWJsZWRLZXkoKSkpOworICAgIHNldHRpbmdzLT5zZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkKHByaXZhdGVCcm93c2luZ1Nob3VsZEJlRW5hYmxlZCk7CiAgICAgc2V0dGlu
Z3MtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdl
YlByZWZlcmVuY2VzS2V5OjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0
aW5ncy0+c2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShX
ZWJQcmVmZXJlbmNlc0tleTo6dGV4dEFyZWFzQXJlUmVzaXphYmxlS2V5KCkpKTsKICAgICBzZXR0
aW5ncy0+c2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3Moc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5
KFdlYlByZWZlcmVuY2VzS2V5OjpuZWVkc1NpdGVTcGVjaWZpY1F1aXJrc0tleSgpKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9u
IDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNDY0LDYgKzQ2NCwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlk
U2VsZWN0SXRlbUZyb21BY3RpdmVDb250ZXh0TWVudShjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1E
YXRhJik7CiAjZW5kaWYKIAorI2lmIFVTRShDRlNUT1JBR0VTRVNTSU9OUykKKyAgICB2b2lkIHBs
YXRmb3JtU2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRp
Zmllcik7CisjZW5kaWYKKwogICAgIE93blB0cjxXZWJDb3JlOjpQYWdlPiBtX3BhZ2U7CiAgICAg
UmVmUHRyPFdlYkZyYW1lPiBtX21haW5GcmFtZTsKICAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVC
YWNrRm9yd2FyZExpc3Q+IG1fYmFja0ZvcndhcmRMaXN0OwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24g
Nzk4NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
S2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhh
bmRsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1RleHRJdGVyYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9hcmRDb2Rlcy5o
PgpAQCAtNDYxLDQgKzQ2Miw5IEBAIGJvb2wgV2ViUGFnZTo6Y2FuSGFuZGxlUmVxdWVzdChjb25z
dCBXZWIKICAgICByZXR1cm4gcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJhcHBsZXdlYmRhdGEi
KTsKIH0KIAordm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpCit7CisgICAgUmVzb3VyY2VIYW5kbGU6OnNl
dFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNz
aW9uKGlkZW50aWZpZXIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5j
cHAJKHJldmlzaW9uIDc5ODY5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L3dpbi9XZWJQYWdlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
ICNpZiBQTEFURk9STShDRykKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+CkBAIC0zMjksNCArMzMwLDEzIEBAIHZvaWQgV2ViUGFnZTo6Z2V0
U2VsZWN0ZWRUZXh0KFN0cmluZyYgdGUKICAgICB0ZXh0ID0gc2VsZWN0ZWRSYW5nZS0+dGV4dCgp
OwogfQogCisjaWYgVVNFKENGU1RPUkFHRVNFU1NJT05TKQorCit2b2lkIFdlYlBhZ2U6OnBsYXRm
b3JtU2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmll
cikKK3sKKyAgICBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b24od2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRpZmllcikpOworfQorCisjZW5k
aWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84336</attachid>
            <date>2011-03-01 17:35:31 -0800</date>
            <delta_ts>2011-03-02 16:12:15 -0800</delta_ts>
            <desc>Patch (Part 1) Take 4</desc>
            <filename>getAndStoreACFNetworkPrivateStorageSessionOpensourceTake6.patch</filename>
            <type>text/plain</type>
            <size>19308</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODAwNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDMtMDEgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBVc2UgQ0ZO
ZXR3b3JrIFNlc3Npb25zIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU1NDM1CisKKyAgICAgICAgQWRkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBh
IFByaXZhdGUgQnJvd3Npbmcgc3RvcmFnZSBzZXNzaW9uLgorCisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisgICAgICAgIEFkZCBhIG5ldyAjZGVmaW5lIGZvciB1c2luZyBDRiBTdG9yYWdlIFNl
c3Npb25zLgorCiAyMDExLTAzLTAxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gODAwMTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5Miw2ICs2OTIsNyBAQAog
CiAjaWYgVVNFKENGTkVUV09SSykgfHwgUExBVEZPUk0oTUFDKQogI2RlZmluZSBXVEZfVVNFX0NG
VVJMQ0FDSEUgMQorI2RlZmluZSBXVEZfVVNFX0NGU1RPUkFHRVNFU1NJT05TIDEKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oV0lOKSAmJiAhT1MoV0lOQ0UpICYmICFQTEFURk9STShDSFJPTUlVTSkg
JiYgIVBMQVRGT1JNKFFUKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODAwNjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OCBAQAorMjAx
MS0wMy0wMSAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6IFVzZSBDRk5ldHdv
cmsgU2Vzc2lvbnMgQVBJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU0MzUKKworICAgICAgICBBZGQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGEgUHJp
dmF0ZSBCcm93c2luZyBTdG9yYWdlIFNlc3Npb24uCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5p
bjoKKyAgICAgICAgRXhwb3J0IHRoZSBzeW1ib2wgZm9yIFJlc291cmNlSGFuZGxlOjpzZXRCYXNl
Rm9yUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyLgorCisgICAgICAgICog
cGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCk6CisgICAgICAgIFByb3BvZ2F0ZSB0aGUgcHJpdmF0ZSBicm93c2lu
ZyBzdGF0ZSB0byB0aGUgUmVzb3VyY2VIYW5kbGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5oOgorICAgICAgICBBZGQgdGhlIGZ1bmN0aW9uIGRlY2xh
cmF0aW9uIGZvciB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbi4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbToKKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJpdmF0ZVN0
b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgU2luY2UgdGhlIHNhbWUgUHJpdmF0ZSBCcm93c2luZyBT
dG9yYWdlIFNlc3Npb24gd2lsbCBuZWVkIHRvIGJlIGFjY2Vzc2VkIHRocm91Z2hvdXQgdGhlIGxv
YWRpbmcKKyAgICAgICAgY29kZSBhbmQgd2lsbCBuZWVkIHRvIGJlIHVzZWQgYnkgYWxsIHdlYiBw
YWdlcyBhbmQgcGFnZSBncm91cHMsIG1ha2UgaXQgYSBnbG9iYWwgc3RhdGljLgorICAgICAgICAo
V2ViQ29yZTo6YmFzZUZvclByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcik6
CisgICAgICAgIERpdHRvLCBzaW5jZSB0aGUgaWRlbnRpZmllciBpcyBuZWVkZWQgdG8gY3JlYXRl
IHRoZSBQcml2YXRlIEJyb3dzaW5nIFN0b3JhZ2UgU2Vzc2lvbi4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgSWYg
ZW5hYmxlZCwgY3JlYXRlIGFuZCBzdG9yZSB0aGUgUHJpdmF0ZSBCcm93c2luZyBTdG9yYWdlIFNl
c3Npb24uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5n
U3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEJh
c2VGb3JQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOgorICAg
ICAgICBUaGUgY2FsbCB0byB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbiBuZWVkcyB0byBi
ZSBpbiBhIGZpbGUgaW5jbHVkaW5nIHRoZSBjb3JyZWN0CisgICAgICAgIHZlcnNpb24gb2YgV0tT
SS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkZWZhdWx0QmFzZUZvclByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcik6CisgICAgICAgIFJldHVybiB0aGUg
YnVuZGxlIGlkZW50aWZpZXIuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3Vy
Y2VIYW5kbGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRl
UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOgorICAgICAgICBUaGUgY2FsbCB0byB3a0Ny
ZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbiBuZWVkcyB0byBiZSBpbiBhIGZpbGUgaW1wb3J0aW5n
IHRoZSBjb3JyZWN0CisgICAgICAgIHZlcnNpb24gb2YgV0tTSS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpkZWZhdWx0QmFzZUZvclByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uSWRlbnRpZmllcik6CisgICAgICAgIFJldHVybiB0aGUgYnVuZGxlIGlkZW50aWZpZXIuCisK
IDIwMTEtMDMtMDEgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA4MDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNiArMzQxLDcgQEAgX19aTjdXZWJDb3JlMTRE
b2N1bWVudExvYWRlckMxRVJLTlNfMTVSZQogX19aTjdXZWJDb3JlMTREb2N1bWVudExvYWRlckMy
RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU18xNFN1YnN0aXR1dGVEYXRhRQogX19aTjdXZWJD
b3JlMTREb2N1bWVudExvYWRlckQyRXYKIF9fWk43V2ViQ29yZTE0RG9jdW1lbnRXcml0ZXIxMXNl
dEVuY29kaW5nRVJLTjNXVEY2U3RyaW5nRWIKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGU0
OXNldEJhc2VGb3JQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJFUktOM1dU
RjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMTJyZWxlYXNlUHJveHlFdgog
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgogX19a
TjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgpAQCAtMTMzMiw2ICsx
MzMzLDcgQEAgX3drU2V0VXBGb250Q2FjaGUKIF93a1NpZ25hbENGUmVhZFN0cmVhbUVuZAogX3dr
U2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5dGVzCitf
d2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24KIAogI2lmICFkZWZpbmVkKE5ERUJVRykKIF9f
Wk43V2ViQ29yZTIwTG9nTm90WWV0SW1wbGVtZW50ZWRFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmNwcAkocmV2aXNpb24gODAwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhpc3RvcnlJ
dGVtLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgorI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZU1hcC5oIgogI2luY2x1ZGUg
PGxpbWl0cz4KIApAQCAtMzM3LDYgKzMzOCwxMCBAQCB2b2lkIFNldHRpbmdzOjpzZXRQcml2YXRl
QnJvd3NpbmdFbmFibGVkCiAgICAgaWYgKG1fcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9PSBwcml2
YXRlQnJvd3NpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKKyNpZiBVU0UoQ0ZTVE9SQUdF
U0VTU0lPTlMpCisgICAgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQo
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisjZW5kaWYKKwogICAgIC8vIEZJWE1FOiBXZSBjYW4g
b25seSBlbmFibGUgY29va2llIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBnbG9iYWxseSwgc28gaXQn
cyBtaXNsZWFkaW5nIHRvIGhhdmUgaXQgYXMgYSBwZXItcGFnZSBzZXR0aW5nLgogICAgIHNldENv
b2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
U3lzdGVtSW50ZXJmYWNlLmgJKHJldmlzaW9uIDgwMDEzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1
LDYgKzIzNSw5IEBAIGV4dGVybiBDRlR5cGVSZWYgKCp3a0NyZWF0ZUFYVGV4dE1hcmtlcikKIGV4
dGVybiBCT09MICgqd2tHZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIpKENGVHlwZVJlZiB0ZXh0TWFy
a2VyLCB2b2lkICpieXRlcywgc2l6ZV90IGxlbmd0aCk7CiBleHRlcm4gQVhVSUVsZW1lbnRSZWYg
KCp3a0NyZWF0ZUFYVUlFbGVtZW50UmVmKShpZCBlbGVtZW50KTsKIAordHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX19DRlVSTFN0b3JhZ2VTZXNzaW9uKiBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmOworZXh0
ZXJuIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgKCp3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lv
bikoQ0ZTdHJpbmdSZWYpOworCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9u
IDgwMDEzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MiwzICsxNzIsNSBAQCBDRlR5cGVSZWYgKCp3
a0NyZWF0ZUFYVGV4dE1hcmtlcikoY29uc3QgCiBCT09MICgqd2tHZXRCeXRlc0Zyb21BWFRleHRN
YXJrZXIpKENGVHlwZVJlZiB0ZXh0TWFya2VyLCB2b2lkICpieXRlcywgc2l6ZV90IGxlbmd0aCk7
CiBBWFVJRWxlbWVudFJlZiAoKndrQ3JlYXRlQVhVSUVsZW1lbnRSZWYpKGlkIGVsZW1lbnQpOwog
CitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmICgqd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24p
KENGU3RyaW5nUmVmKTsKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDgwMDEzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xODUsNCArMTg2LDQ2IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25h
bGx5IGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtLgogfQogCisjaWYgVVNFKENGU1RPUkFHRVNFU1NJ
T05TKQorCitzdGF0aWMgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+JiBwcml2YXRl
U3RvcmFnZVNlc3Npb24oKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENG
VVJMU3RvcmFnZVNlc3Npb25SZWY+LCBzdG9yYWdlU2Vzc2lvbiwgKCkpOworICAgIHJldHVybiBz
dG9yYWdlU2Vzc2lvbjsKK30KKworc3RhdGljIFN0cmluZyYgYmFzZUZvclByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIGJhc2UsICgpKTsKKyAgICByZXR1cm4gYmFzZTsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYg
KGVuYWJsZWQgJiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkuZ2V0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICBwcml2YXRlU3RvcmFnZVNlc3Npb24o
KS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIGJhc2UgPSBi
YXNlRm9yUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKCkuaXNOdWxsKCkg
PyBkZWZhdWx0QmFzZUZvclByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcigp
IDogYmFzZUZvclByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcigpOworICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyKEFkb3B0Q0YsIFN0cmluZzo6Zm9y
bWF0KCIlcy5Qcml2YXRlQnJvd3NpbmciLCBiYXNlLnV0ZjgoKS5kYXRhKCkpLmNyZWF0ZUNGU3Ry
aW5nKCkpOworCisgICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkuYWRvcHRDRihjcmVhdGVQcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpKTsKK30KKworQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZiBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3RvcmFn
ZVNlc3Npb24oKQoreworICAgIHJldHVybiBwcml2YXRlU3RvcmFnZVNlc3Npb24oKS5nZXQoKTsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0QmFzZUZvclByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgYmFz
ZUZvclByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllcigpID0gaWRlbnRpZmll
cjsKK30KKworI2VuZGlmIC8vIFVTRShDRlNUT1JBR0VTRVNTSU9OUykKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gODAwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcx
LDEwIEBAIHR5cGVkZWYgaW50IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2wKIHR5cGVkZWYg
c3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7
CiAjZW5kaWYKIAorI2lmIFVTRShDRlNUT1JBR0VTRVNTSU9OUykKK3R5cGVkZWYgY29uc3Qgc3Ry
dWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbiogQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZjsKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OwpAQCAtMTg2LDYgKzE5MCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpcmVGYWlsdXJlKFRp
bWVyPFJlc291cmNlSGFuZGxlPiopOwogCisjaWYgVVNFKENGU1RPUkFHRVNFU1NJT05TKQorICAg
IHN0YXRpYyB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCk7CisgICAgc3RhdGlj
IENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRCYXNlRm9yUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25J
ZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOworI2VuZGlmCisKICAgICB1c2luZyBSZWZDb3VudGVk
PFJlc291cmNlSGFuZGxlPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5k
bGU+OjpkZXJlZjsKIApAQCAtMjE0LDYgKzIyNCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3Jl
YXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wg
c2hvdWxkQ29udGVudFNuaWZmKTsKICNlbmRpZgogCisjaWYgVVNFKENGU1RPUkFHRVNFU1NJT05T
KQorICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGNyZWF0ZVByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpOworICAgIHN0YXRpYyBTdHJp
bmcgZGVmYXVsdEJhc2VGb3JQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIo
KTsKKyNlbmRpZgorCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CiAg
ICAgT3duUHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxl
Q0ZOZXQuY3BwCShyZXZpc2lvbiA4MDAxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNiw2
ICs3MTYsMTcgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUgogICAg
IHJldHVybiBjYWNoZWQ7CiB9CiAKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZVByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50
aWZpZXIpCit7CisgICAgcmV0dXJuIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50
aWZpZXIpOworfQorCitTdHJpbmcgUmVzb3VyY2VIYW5kbGU6OmRlZmF1bHRCYXNlRm9yUHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyKCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IGJhc2UoQWRvcHRDRiwgcmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZC
dW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgp
LCBrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5KSkpOworICAgIHJldHVybiBTdHJpbmcoYmFzZS5nZXQo
KSk7Cit9CisKIHZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojp3aWxsU2VuZFJl
cXVlc3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLykKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBuZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJl
Y3RseSBldmVuIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5t
bQkocmV2aXNpb24gODAwMTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDYgKzY5MywxNiBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvCiAgICAgICAgIGNsaWVu
dCgpLT5yZWNlaXZlZENhbmNlbGxhdGlvbih0aGlzLCBjaGFsbGVuZ2UpOwogfQogCitDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQoreworICAgIHJldHVybiB3a0NyZWF0
ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihpZGVudGlmaWVyKTsKK30KKworU3RyaW5nIFJlc291cmNl
SGFuZGxlOjpkZWZhdWx0QmFzZUZvclByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRp
ZmllcigpCit7CisgICAgcmV0dXJuIFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBAaW1wbGVtZW50
YXRpb24gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZQpJbmRleDogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gODAwNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzNiBAQAorMjAxMS0wMy0wMSAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYktpdDI6IFVzZSBDRk5ldHdvcmsgU2Vzc2lvbnMgQVBJLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU0MzUKKworICAgICAgICBBZGQgdGhlIGFi
aWxpdHkgdG8gY3JlYXRlIGEgUHJpdmF0ZSBCcm93c2luZyBTdG9yYWdlIFNlc3Npb24uCisKKyAg
ICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAg
IEVuY29kZSB0aGUgVUkgUHJvY2VzcyBidW5kbGUgaWRlbnRpZmllci4KKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgRGVjb2Rl
IHRoZSBVSSBQcm9jZXNzIGJ1bmRsZSBpZGVudGlmaWVyLgorICAgICAgICAqIFNoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dl
YkNvbnRleHRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW5p
dGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICBHcmFiIHRoZSBidW5kbGUgaWRlbnRpZmllciBh
bmQgdXNlIGl0IHRvIHNldCB0aGUgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyLgorICAgICAg
ICAqIFVJUHJvY2Vzcy93aW4vV2ViQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICBEaXR0by4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVy
ZmFjZS5tbToKKyAgICAgICAgKEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKToKKyAgICAgICAg
U3VwcG9ydCB1c2luZyB0aGUgd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24gV0tTSSBpbiBX
ZWJDb3JlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICBTZXQg
dGhlIGJhc2UgZm9yIHRoZSBQcml2YXRlIEJyb3dzaW5nIFN0b3JhZ2UgU2Vzc2lvbiBpZGVudGlm
aWVyIHRvIGJlIHRoZSBidW5kbGUgaWRlbnRpZmllcgorICAgICAgICBmcm9tIHRoZSBVSSBQcm9j
ZXNzIHNvIHRoYXQgV2ViS2l0MSB3b3VsZCBjcmVhdGUgYSBQcml2YXRlIEJyb3dzaW5nIFN0b3Jh
Z2UgU2Vzc2lvbiB3aXRoIHRoZQorICAgICAgICBzYW1lIGlkZW50aWZpZXIgYXMgV2ViS2l0Mi4K
KwogMjAxMS0wMy0wMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lv
biA4MDAxMykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBAQCB2b2lkIFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kCiAgICAgZW5jb2Rlci0+ZW5jb2RlKGxhbmd1YWdl
Q29kZSk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHRleHRDaGVja2VyU3RhdGUpOwogICAgIGVuY29k
ZXItPmVuY29kZShkZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCk7CisjaWYgVVNFKENGU1RP
UkFHRVNFU1NJT05TKQorICAgIGVuY29kZXItPmVuY29kZSh1aVByb2Nlc3NCdW5kbGVJZGVudGlm
aWVyKTsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBlbmNvZGVyLT5lbmNvZGUocGFy
ZW50UHJvY2Vzc05hbWUpOwogICAgIGVuY29kZXItPmVuY29kZShwcmVzZW50ZXJBcHBsaWNhdGlv
blBpZCk7CkBAIC0xMDUsNiArMTA4LDEwIEBAIGJvb2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZGVjb2QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjaWYgVVNFKENGU1RPUkFHRVNFU1NJT05TKQorICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMucGFyZW50UHJvY2Vzc05hbWUpKQpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CShyZXZpc2lvbiA4MDAxMykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDEwIEBAIHN0cnVj
dCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKIAogICAgIGRvdWJsZSBkZWZhdWx0UmVx
dWVzdFRpbWVvdXRJbnRlcnZhbDsKIAorI2lmIFVTRShDRlNUT1JBR0VTRVNTSU9OUykKKyAgICBT
dHJpbmcgdWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcjsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIFN0cmluZyBwYXJlbnRQcm9jZXNzTmFtZTsKIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQkocmV2aXNpb24gODAwMTMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDYgKzkzLDcgQEAgdm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxp
emVXZWJQcgogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjb25maWd1cmFi
bGU7IHdlIHNob3VsZG4ndCBqdXN0IGJsaW5kbHkgYWxsb3cgcmVhZCBhY2Nlc3MgdG8gdGhlIFVJ
IHByb2Nlc3MgYnVuZGxlLgogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlUmVzb3VyY2VQ
YXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gcmVz
b3VyY2VQYXRoXSk7CisgICAgcGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyID0g
U3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pOwogfQogCiBT
dHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0RGF0YWJhc2VEaXJlY3RvcnkoKSBjb25z
dApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJDb250ZXh0V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRXaW4u
Y3BwCShyZXZpc2lvbiA4MDAxMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Q29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDkgQEAgdm9pZCBXZWJD
b250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcgogICAgIEFTU0VSVChwYXJhbWV0ZXJzLmNm
VVJMQ2FjaGVQYXRoLmxlbmd0aCgpKTsKICAgICBpZiAocGFyYW1ldGVycy5jZlVSTENhY2hlUGF0
aFtwYXJhbWV0ZXJzLmNmVVJMQ2FjaGVQYXRoLmxlbmd0aCgpIC0gMV0gPT0gJy8nKQogICAgICAg
ICBwYXJhbWV0ZXJzLmNmVVJMQ2FjaGVQYXRoLnJlbW92ZShwYXJhbWV0ZXJzLmNmVVJMQ2FjaGVQ
YXRoLmxlbmd0aCgpIC0gMSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGJ1bmRsZUlk
ZW50aWZpZXIoQWRvcHRDRiwgcmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZCdW5kbGVH
ZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgpLCBrQ0ZC
dW5kbGVJZGVudGlmaWVyS2V5KSkpOworICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRl
bnRpZmllciA9IFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDgw
MDEzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91
cC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KQEAgLTIxMiw2ICsyMTMsMTAgQEAgdm9p
ZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhjbwogCiAgICAgaWYgKHBhcmFtZXRl
cnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCkKICAgICAgICAgc2V0QWx3YXlz
VXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgodHJ1ZSk7CisKKyNpZiBVU0UoQ0ZTVE9SQUdFU0VTU0lP
TlMpCisgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEJhc2VGb3JQcml2YXRlQnJvd3Np
bmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXIocGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVJZGVu
dGlmaWVyKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldFNob3VsZFRyYWNrVmlz
aXRlZExpbmtzKGJvb2wgc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiA4MDAxMykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCB2b2lkIEluaXRXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlKHZvaWQpCiAgICAgICAgIElOSVQoU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kKTsKICAgICAg
ICAgSU5JVChTaWduYWxDRlJlYWRTdHJlYW1FcnJvcik7CiAgICAgICAgIElOSVQoU2lnbmFsQ0ZS
ZWFkU3RyZWFtSGFzQnl0ZXMpOworICAgICAgICBJTklUKENyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbik7CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAgICAg
IElOSVQoSU9TdXJmYWNlQ29udGV4dENyZWF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4MDA2OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAzLTAxICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2ViS2l0MjogVXNlIENGTmV0d29yayBTZXNzaW9ucyBBUEkuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTQzNS4KKworICAgICAgICBBZGQgdGhl
IGFiaWxpdHkgdG8gY3JlYXRlIGEgUHJpdmF0ZSBCcm93c2luZyBTdG9yYWdlIFNlc3Npb24uCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAgICAg
IChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSk6CisgICAgICAgIFN1cHBvcnQgY2FsbGluZyB3
a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbiBmcm9tIFdlYkNvcmUuCisKIDIwMTEtMDItMjMg
IEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiA4MDAxMykK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0
ZW1JbnRlcmZhY2Uodm9pZCkKICAgICBJTklUKENvbnRlbnRBcmVhRGlkU2hvdyk7CiAgICAgSU5J
VChDb250ZW50QXJlYURpZEhpZGUpOwogICAgIElOSVQoU2Nyb2xsYmFyUGFpbnRlclVzZXNPdmVy
bGF5U2Nyb2xsZXJzKTsKKyAgICBJTklUKENyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbik7CiAj
ZW5kaWYKIAogICAgIElOSVQoR2V0QVhUZXh0TWFya2VyVHlwZUlEKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84605</attachid>
            <date>2011-03-03 12:25:19 -0800</date>
            <delta_ts>2011-03-03 15:46:24 -0800</delta_ts>
            <desc>Patch (Part 2)</desc>
            <filename>setThePrivateBrowsingStorageSessionOnTheRequestsOpensourceTake4.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84756</attachid>
            <date>2011-03-04 08:30:33 -0800</date>
            <delta_ts>2011-03-04 12:48:28 -0800</delta_ts>
            <desc>Patch (Part 3)</desc>
            <filename>getTheResponseFromTheCacheAssociatedWithThePrivateBrowsingStorageOpensourceTake4.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84801</attachid>
            <date>2011-03-04 14:45:59 -0800</date>
            <delta_ts>2011-03-04 15:12:04 -0800</delta_ts>
            <desc>Clean up: Add in more USE(CFURLSTORAGESESSIONS) guards</desc>
            <filename>addInGuardsForCFURLSTORAGESESSIONS.patch</filename>
            <type>text/plain</type>
            <size>9155</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMzc3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMDQgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBVc2UgQ0ZOZXR3b3JrIFNlc3Npb25zIEFQSS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NDM1Lgor
CisgICAgICAgIEFkZCBpbiB0aGUgQ0ZVUkxTVE9SQUdFU0VTU0lPTlMgZ3VhcmRzIHRoYXQgSSBp
bmNvcnJlY3RseSBsZWZ0IG91dCBiZWNhdXNlIHRoZSBjb2RlIHdhcworICAgICAgICBjb250YWlu
ZWQgd2l0aGluIGd1YXJkcyB0aGF0IG1hZGUgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKSBhbHdh
eXMgYmUgdHJ1ZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlRmluYWxSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlcXVlc3RNYWMubW06CisKIDIwMTEtMDMtMDQgIFN0
ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBKb24gSG9uZXljdXR0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiA4MDM3
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVD
Rk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw4ICszMzUsMTAgQEAgc3RhdGljIENGVVJM
UmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KAogewogICAgIENGTXV0YWJsZVVSTFJlcXVlc3RS
ZWYgbmV3UmVxdWVzdCA9IENGVVJMUmVxdWVzdENyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIHJlcXVlc3QuY2ZVUkxSZXF1ZXN0KCkpOwogCisjaWYgVVNFKENGVVJMU1RPUkFH
RVNFU1NJT05TKQogICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9u
ID0gUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAg
ICAgIHdrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKHN0b3JhZ2VTZXNzaW9uLCBuZXdSZXF1ZXN0
KTsKKyNlbmRpZgogICAgIAogICAgIGlmICghc2hvdWxkQ29udGVudFNuaWZmKQogICAgICAgICB3
a1NldENGVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlmZihuZXdSZXF1ZXN0LCBmYWxzZSk7CkBA
IC00ODQsOCArNDg2LDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdChS
ZXMKICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0LnVybCgpLCBy
ZWRpcmVjdFJlc3BvbnNlLnVybCgpKSkKICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBBdXRob3Jp
emF0aW9uKCk7CiAKKyNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAgICAgaWYgKENGVVJM
U3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdl
U2Vzc2lvbigpKQogICAgICAgICByZXF1ZXN0LnNldFN0b3JhZ2VTZXNzaW9uKHN0b3JhZ2VTZXNz
aW9uKTsKKyNlbmRpZgogCiAgICAgY2xpZW50KCktPndpbGxTZW5kUmVxdWVzdCh0aGlzLCByZXF1
ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0KQEAgLTcyMiw2ICs3MjYsOCBAQCBib29sIFJlc291
cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSCiAgICAgcmV0dXJuIGNhY2hlZDsKIH0KIAor
I2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKKwogUmV0YWluUHRyPENGVVJMU3RvcmFnZVNl
c3Npb25SZWY+IFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQogewogICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Np
b24oaWRlbnRpZmllcikpOwpAQCAtNzMyLDYgKzczOCw4IEBAIFN0cmluZyBSZXNvdXJjZUhhbmRs
ZTo6cHJpdmF0ZUJyb3dzaW5nU3QKICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShDRkJ1bmRs
ZUdldE1haW5CdW5kbGUoKSwga0NGQnVuZGxlSWRlbnRpZmllcktleSkpKTsKIH0KIAorI2VuZGlm
CisKIHZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojp3aWxsU2VuZFJlcXVlc3Qo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiAvKnJlZGlyZWN0UmVzcG9uc2UqLykKIHsKICAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBl
dmVuIGZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNw
cAkocmV2aXNpb24gODAzNzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw4
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmUKICAgICBtX2h0dHBC
b2R5ID0gaHR0cEJvZHlGcm9tUmVxdWVzdChtX2NmUmVxdWVzdC5nZXQoKSk7CiB9CiAKKyNpZiBV
U0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjpzZXRTdG9y
YWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQogewogICAg
IENGTXV0YWJsZVVSTFJlcXVlc3RSZWYgY2ZSZXF1ZXN0ID0gQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0
YWJsZUNvcHkoMCwgbV9jZlJlcXVlc3QuZ2V0KCkpOwpAQCAtMjAyLDYgKzIwNCw4IEBAIHZvaWQg
UmVzb3VyY2VSZXF1ZXN0OjpzZXRTdG9yYWdlU2Vzc2lvbigKICAgICBtX2NmUmVxdWVzdC5hZG9w
dENGKGNmUmVxdWVzdCk7CiB9CiAKKyNlbmRpZgorCiAjZW5kaWYgLy8gVVNFKENGTkVUV09SSykK
IAogdW5zaWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRs
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkocmV2aXNpb24gODAzNzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjM5LDggKzIzOSwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVhdGVOU1VSTENv
bm5lY3RpCiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNTZXR0aW5nQ29ubmVjdGlvblByb3BlcnRp
ZXMgPSBbTlNVUkxDb25uZWN0aW9uIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfaW5pdFdpdGhSZXF1ZXN0OmRlbGVnYXRlOnVzZXNDYWNoZTptYXhDb250ZW50TGVuZ3RoOnN0
YXJ0SW1tZWRpYXRlbHk6Y29ubmVjdGlvblByb3BlcnRpZXM6KV07CiAjZW5kaWYKIAorI2lmIFVT
RShDRlVSTFNUT1JBR0VTRVNTSU9OUykKICAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBz
dG9yYWdlU2Vzc2lvbiA9IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKCkpCiAgICAgICAg
IG5zUmVxdWVzdCA9IFt3a0NvcHlSZXF1ZXN0V2l0aFN0b3JhZ2VTZXNzaW9uKHN0b3JhZ2VTZXNz
aW9uLCBuc1JlcXVlc3QpIGF1dG9yZWxlYXNlXTsKKyNlbmRpZgogCiAgICAgaWYgKHN1cHBvcnRz
U2V0dGluZ0Nvbm5lY3Rpb25Qcm9wZXJ0aWVzKSB7CiAgICAgICAgIE5TRGljdGlvbmFyeSAqc2Vz
c2lvbklEID0gc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPyBbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnldIDogW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpAIldlYktpdFByaXZh
dGVTZXNzaW9uIiBmb3JLZXk6QCJfa0NGVVJMQ29ubmVjdGlvblNlc3Npb25JRCJdOwpAQCAtNTU1
LDggKzU1NywxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QoUmVzCiAg
ICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwocmVxdWVzdC51cmwoKSwgcmVkaXJl
Y3RSZXNwb25zZS51cmwoKSkpCiAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQQXV0aG9yaXphdGlv
bigpOwogCisjaWYgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQogICAgIGlmIChDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b24oKSkKICAgICAgICAgcmVxdWVzdC5zZXRTdG9yYWdlU2Vzc2lvbihzdG9yYWdlU2Vzc2lvbik7
CisjZW5kaWYKIAogICAgIGNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhpcywgcmVxdWVzdCwg
cmVkaXJlY3RSZXNwb25zZSk7CiB9CkBAIC02OTksNiArNzAzLDggQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogICAgICAgICBjbGllbnQoKS0+cmVjZWl2ZWRDYW5j
ZWxsYXRpb24odGhpcywgY2hhbGxlbmdlKTsKIH0KIAorI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNT
SU9OUykKKwogUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IFJlc291cmNlSGFuZGxl
OjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlm
aWVyKQogewogICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRv
cHRDRiwgd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRpZmllcikpOwpAQCAtNzA5
LDYgKzcxNSw4IEBAIFN0cmluZyBSZXNvdXJjZUhhbmRsZTo6cHJpdmF0ZUJyb3dzaW5nU3QKICAg
ICByZXR1cm4gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0p
OwogfQogCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBAaW1wbGVtZW50YXRp
b24gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxlZ2F0ZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXF1ZXN0TWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVxdWVzdE1hYy5t
bQkocmV2aXNpb24gODAzNzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZVJlcXVlc3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxMSArMTc0LDE1
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjphcHBseVdlYkFyY2hpdmVIYWMKICAgICBbTlNVUkxQ
cm90b2NvbCBzZXRQcm9wZXJ0eTpAIiIgZm9yS2V5OkAiV2ViRGF0YVJlcXVlc3QiIGluUmVxdWVz
dDooTlNNdXRhYmxlVVJMUmVxdWVzdCAqKW5zVVJMUmVxdWVzdCgpXTsKIH0KIAorI2lmIFVTRShD
RlVSTFNUT1JBR0VTRVNTSU9OUykKKwogdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnNldFN0b3JhZ2VT
ZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24pCiB7CiAgICAgbV9u
c1JlcXVlc3QgPSB3a0NvcHlSZXF1ZXN0V2l0aFN0b3JhZ2VTZXNzaW9uKHN0b3JhZ2VTZXNzaW9u
LCBtX25zUmVxdWVzdC5nZXQoKSk7CiB9CiAKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyAhVVNFKENGTkVUV09SSykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDgwMzc3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTEtMDMtMDQgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJL
aXQyOiBVc2UgQ0ZOZXR3b3JrIFNlc3Npb25zIEFQSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NDM1LgorCisgICAgICAgIEFkZCBpbiB0aGUgQ0ZV
UkxTVE9SQUdFU0VTU0lPTlMgZ3VhcmRzIHRoYXQgSSBpbmNvcnJlY3RseSBsZWZ0IG91dCBiZWNh
dXNlIHRoZSBjb2RlIHdhcworICAgICAgICBjb250YWluZWQgd2l0aGluIGd1YXJkcyB0aGF0IG1h
ZGUgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKSBhbHdheXMgYmUgdHJ1ZS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNz
L3dpbi9XZWJDb250ZXh0V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxh
dGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTEtMDMtMDQgIEplc3NpZSBCZXJsaW4g
IDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hv
d2lhay4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
YWMubW0JKHJldmlzaW9uIDgwMzcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
ZWJDb250ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw5IEBAIHZvaWQgV2Vi
Q29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHIKICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgcmVhbGx5IGJlIGNvbmZpZ3VyYWJsZTsgd2Ugc2hvdWxkbid0IGp1c3QgYmxpbmRseSBhbGxv
dyByZWFkIGFjY2VzcyB0byB0aGUgVUkgcHJvY2VzcyBidW5kbGUuCiAgICAgcGFyYW1ldGVycy51
aVByb2Nlc3NCdW5kbGVSZXNvdXJjZVBhdGggPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSByZXNvdXJjZVBhdGhdKTsKIAorI2lmIFVTRShDRlVSTFNUT1JB
R0VTRVNTSU9OUykKICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIgPSBT
dHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSk7CisjZW5kaWYK
IH0KIAogU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdERhdGFiYXNlRGlyZWN0b3J5
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViQ29udGV4dFdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJDb250
ZXh0V2luLmNwcAkocmV2aXNpb24gODAzNzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
d2luL1dlYkNvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw4ICs2OSwxMSBAQCB2
b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByCiAgICAgaWYgKHBhcmFtZXRl
cnMuY2ZVUkxDYWNoZVBhdGhbcGFyYW1ldGVycy5jZlVSTENhY2hlUGF0aC5sZW5ndGgoKSAtIDFd
ID09ICcvJykKICAgICAgICAgcGFyYW1ldGVycy5jZlVSTENhY2hlUGF0aC5yZW1vdmUocGFyYW1l
dGVycy5jZlVSTENhY2hlUGF0aC5sZW5ndGgoKSAtIDEpOwogCisjaWYgVVNFKENGVVJMU1RPUkFH
RVNFU1NJT05TKQogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllciA9IFN0
cmluZyhyZWludGVycHJldF9jYXN0PENGU3RyaW5nUmVmPihDRkJ1bmRsZUdldFZhbHVlRm9ySW5m
b0RpY3Rpb25hcnlLZXkoQ0ZCdW5kbGVHZXRNYWluQnVuZGxlKCksIGtDRkJ1bmRsZUlkZW50aWZp
ZXJLZXkpKSk7Ci0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCisK
KyNlbmRpZiAvLyBVU0UoQ0ZORVRXT1JLKQogfQogCiBTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZv
cm1EZWZhdWx0RGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84866</attachid>
            <date>2011-03-05 07:49:19 -0800</date>
            <delta_ts>2011-03-05 15:06:48 -0800</delta_ts>
            <desc>Patch (Part 4)</desc>
            <filename>usePrivateStorageSessionSessionCookiesWhenInPBMOpensourceTake2.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84878</attachid>
            <date>2011-03-05 15:06:48 -0800</date>
            <delta_ts>2011-03-05 17:25:08 -0800</delta_ts>
            <desc>Patch (Part 4) Take 2</desc>
            <filename>usePrivateStorageSessionSessionCookiesWhenInPBMOpensourceTake3.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="76923"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>