<?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>116729</bug_id>
          
          <creation_ts>2013-05-24 11:04:08 -0700</creation_ts>
          <short_desc>[Windows] Expose database storage and cache locations via preferences</short_desc>
          <delta_ts>2013-05-24 17:19:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</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>
          
          <blocked>75708</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>aroben</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>glenn</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893373</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-24 11:04:08 -0700</bug_when>
    <thetext>The Windows port of WebKit stores all local data (e.g., URL cache, Icon Database, DOM Storage) in the OS-defined locations CSIDL_LOCAL_APPDATA or CSIDL_APPDATA (depending on roaming context).  There is no way for clients of WebKit to indicate that these items should be stored elsewhere, which could lead to concurrent WebKit clients interacting with each-other&apos;s data.

We should implement the same mechanism used by the Mac port, which uses an application default/preference setting to specify where this should go.

Use the same key labels as the mac port for consistency:

NSString *WebDatabaseDirectoryDefaultsKey = @&quot;WebDatabaseDirectory&quot;;
NSString *WebKitLocalCacheDefaultsKey = @&quot;WebKitLocalCache&quot;;
NSString *WebStorageDirectoryDefaultsKey = @&quot;WebKitLocalStorageDatabasePathPreferenceKey&quot;;

This bug needs to:

1. Modify the WebStorageManager to use the WebStorageDirectoryDefaultsKey key.
2. Modify the WebDatabaseManager to use the WebDatabaseDirectoryDefaultsKey key.
3. Modify the URL cache code to use the WebKitLocalCache key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893374</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-05-24 11:04:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/13984436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893488</commentid>
    <comment_count>2</comment_count>
      <attachid>202862</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-24 16:02:39 -0700</bug_when>
    <thetext>Created attachment 202862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893499</commentid>
    <comment_count>3</comment_count>
      <attachid>202862</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-05-24 16:18:44 -0700</bug_when>
    <thetext>Comment on attachment 202862
Patch

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

&gt; Source/WebKit/win/WebDatabaseManager.cpp:413
&gt; +    CFStringRef directoryPref = static_cast&lt;CFStringRef&gt;(CFPreferencesCopyAppValue(WebDatabaseDirectoryDefaultsKey, kCFPreferencesCurrentApplication));

You should check that the returned CFPropertyListRef is of the right type before casting it!

&gt; Source/WebKit/win/WebView.cpp:485
&gt; +        if (!cfurlCacheDirectory || CFStringGetTypeID() != CFGetTypeID(cfurlCacheDirectory.get()))

ditto.

&gt; Source/WebKit/win/WebView.cpp:2608
&gt; +    if (cacheDirectory &amp;&amp; CFStringGetTypeID() == CFGetTypeID(cacheDirectory))

etc.

&gt; Tools/DumpRenderTree/win/DumpRenderTree.cpp:204
&gt; +        if (path[path.length() - 1] != &apos;\\&apos;)

What if the path is &quot;&quot;?

&gt; Tools/DumpRenderTree/win/DumpRenderTree.cpp:1300
&gt; +    CFPreferencesSetAppValue(WebDatabaseDirectoryDefaultsKey, WebCore::pathByAppendingComponent(path, &quot;Databases&quot;).createCFString().get(), kCFPreferencesCurrentApplication);

Are these created strings going to leak? If not, why not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893513</commentid>
    <comment_count>4</comment_count>
      <attachid>202867</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-24 16:56:21 -0700</bug_when>
    <thetext>Created attachment 202867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893517</commentid>
    <comment_count>5</comment_count>
      <attachid>202867</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-05-24 17:07:10 -0700</bug_when>
    <thetext>Comment on attachment 202867
Patch

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

Seems reasonable.

&gt; Tools/DumpRenderTree/win/DumpRenderTree.cpp:209
&gt; +    DWORD size = ::GetEnvironmentVariable(dumpRenderTreeTemp, 0, 0);
&gt; +    Vector&lt;TCHAR&gt; buffer(size);
&gt; +    if (::GetEnvironmentVariable(dumpRenderTreeTemp, buffer.data(), buffer.size())) {
&gt; +        wstring path = buffer.data();
&gt; +        if (!path.empty() &amp;&amp; (path[path.length() - 1] != L&apos;\\&apos;))
&gt; +            path.append(L&quot;\\&quot;);
&gt; +        return WTF::String (path.data(), path.length());
&gt; +    }
&gt; +
&gt; +    return WebCore::localUserSpecificStorageDirectory();

Do you really need all these explicit namespaces? This looks unusual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893519</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-24 17:10:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 202867 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=202867&amp;action=review
&gt; 
&gt; Seems reasonable.
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DumpRenderTree.cpp:209
&gt; &gt; +    DWORD size = ::GetEnvironmentVariable(dumpRenderTreeTemp, 0, 0);
&gt; &gt; +    Vector&lt;TCHAR&gt; buffer(size);
&gt; &gt; +    if (::GetEnvironmentVariable(dumpRenderTreeTemp, buffer.data(), buffer.size())) {
&gt; &gt; +        wstring path = buffer.data();
&gt; &gt; +        if (!path.empty() &amp;&amp; (path[path.length() - 1] != L&apos;\\&apos;))
&gt; &gt; +            path.append(L&quot;\\&quot;);
&gt; &gt; +        return WTF::String (path.data(), path.length());
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return WebCore::localUserSpecificStorageDirectory();
&gt; 
&gt; Do you really need all these explicit namespaces? This looks unusual.

aroben told me (years ago) that they were using the global namespace decoration on all Windows API calls, so I got in the habit of using it.

I think the WTF is explicitly used in DumpRenderTree for some reason.  We could add a &quot;using namespace WTF&quot;, but I was trying to minimize the changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893522</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-24 17:19:44 -0700</bug_when>
    <thetext>Committed r150670: &lt;http://trac.webkit.org/changeset/150670&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202862</attachid>
            <date>2013-05-24 16:02:39 -0700</date>
            <delta_ts>2013-05-24 16:56:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116729-20130524160120.patch</filename>
            <type>text/plain</type>
            <size>16803</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTA2NjIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA1LTI0ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBFeHBvc2UgZGF0
YWJhc2Ugc3RvcmFnZSBhbmQgY2FjaGUgbG9jYXRpb25zIHZpYSBwcmVmZXJlbmNlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjcyOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0LnZjeHBy
b2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluOiBFeHBvcnQKKyAg
ICAgICAgdGhyZWUgc3ltYm9scyBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBmZWF0dXJlLgorCiAy
MDEzLTA1LTIxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbQmxhY2tCZXJyeV0gTWFrZSBQYWdlUG9wdXAgaW1wbGVtZW50YXRpb24gaW5kZXBl
bmRlbnQgZnJvbSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dl
YktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRFeHBvcnRzLmRlZi5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRF
eHBvcnRzLmRlZi5pbgkocmV2aXNpb24gMTUwNjM5KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTE3OCw2ICsxNzgsOSBAQCBFWFBPUlRTCiAgICAgICAgID9jaGlsZEl0ZW1X
aXRoVGFyZ2V0QEhpc3RvcnlJdGVtQFdlYkNvcmVAQFFCRVBBVjEyQEFCVlN0cmluZ0BXVEZAQEBa
CiAgICAgICAgID9jcmVhdGVAUmFuZ2VAV2ViQ29yZUBAU0E/QVY/JFBhc3NSZWZQdHJAVlJhbmdl
QFdlYkNvcmVAQEBXVEZAQFY/JFBhc3NSZWZQdHJAVkRvY3VtZW50QFdlYkNvcmVAQEA0QFY/JFBh
c3NSZWZQdHJAVk5vZGVAV2ViQ29yZUBAQDRASDFIQFoKICAgICAgICAgP2NyZWF0ZUBTZXJpYWxp
emVkU2NyaXB0VmFsdWVAV2ViQ29yZUBAU0E/QVY/JFBhc3NSZWZQdHJAVlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUBXZWJDb3JlQEBAV1RGQEBBQlZTdHJpbmdANEBAWgorI2lmIFVTRShDRikKKyAgICAg
ICAgP2NyZWF0ZUNGU3RyaW5nQFN0cmluZ0BXVEZAQFFCRT9BVj8kUmV0YWluUHRyQFBCVV9fQ0ZT
dHJpbmdAQEAyQFhaCisjZW5kaWYKICAgICAgICAgP2NyZWF0ZVNoYWRvd1Jvb3RARWxlbWVudEBX
ZWJDb3JlQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlNoYWRvd1Jvb3RAV2ViQ29yZUBAQFdURkBAQUFI
QFoKICAgICAgICAgP2NyZWF0ZVdyYXBwZXJAV2ViQ29yZUBAWUE/QVZKU1ZhbHVlQEpTQ0BAUEFW
RXhlY1N0YXRlQDNAUEFWSlNET01HbG9iYWxPYmplY3RAMUBQQVZOb2RlQDFAQFoKICAgICAgICAg
P2RlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGVATm9kZUBXZWJDb3JlQEBRQkVQQVYxMkBYWgpA
QCAtMjIyLDYgKzIyNSw3IEBAIEVYUE9SVFMKICAgICAgICAgP3NldFByb3BlcnR5QFNldHRpbmdz
QEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxAV2ViQ29yZUBAVUFFWEFCVlN0cmluZ0BXVEZA
QDBAWgogICAgICAgICA/d2luZG93T2JqZWN0Q2xlYXJlZEBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsQFdlYkNvcmVAQFVBRVhYWgogICAgICAgICA/c2V0UmVzb3VyY2VzRGF0YVNpemVMaW1p
dHNGcm9tSW50ZXJuYWxzQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBAUUFFWEhIQFoKKyAg
ICAgICAgP3BhdGhCeUFwcGVuZGluZ0NvbXBvbmVudEBXZWJDb3JlQEBZQT9BVlN0cmluZ0BXVEZA
QEFCVjIzQDBAWgogICAgICAgICA/cHJvZmlsZXJFbmFibGVkQEluc3BlY3RvckNvbnRyb2xsZXJA
V2ViQ29yZUBAUUFFX05YWgogICAgICAgICA/c2V0UHJvZmlsZXJFbmFibGVkQEluc3BlY3RvckNv
bnRyb2xsZXJAV2ViQ29yZUBAUUFFWF9OQFoKICAgICAgICAgP2Rpc2Nvbm5lY3RGcm9udGVuZEBJ
bnNwZWN0b3JDb250cm9sbGVyQFdlYkNvcmVAQFFBRVhYWgpAQCAtMjM3LDYgKzI0MSw3IEBAIEVY
UE9SVFMKICAgICAgICAgP2ZpcnN0Q2hpbGRAQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyQFdlYkNv
cmVAQFFBRVhYWgogICAgICAgICA/bGFzdENoaWxkQENvbXBvc2VkU2hhZG93VHJlZVdhbGtlckBX
ZWJDb3JlQEBRQUVYWFoKICAgICAgICAgP2xlbmd0aEBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBV
QkVJWFoKKyAgICAgICAgP2xvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeUBXZWJDb3Jl
QEBZQT9BVlN0cmluZ0BXVEZAQFhaCiAgICAgICAgID9uYW1lZEl0ZW1AU3RhdGljTm9kZUxpc3RA
V2ViQ29yZUBAVUJFUEFWTm9kZUAyQEFCVkF0b21pY1N0cmluZ0BXVEZAQEBaCiAgICAgICAgID9u
ZXh0QENvbXBvc2VkU2hhZG93VHJlZVdhbGtlckBXZWJDb3JlQEBRQUVYWFoKICAgICAgICAgP3By
ZXZpb3VzQENvbXBvc2VkU2hhZG93VHJlZVdhbGtlckBXZWJDb3JlQEBRQUVYWFoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDY2MikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEzLTA1LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBFeHBvc2Ug
ZGF0YWJhc2Ugc3RvcmFnZSBhbmQgY2FjaGUgbG9jYXRpb25zIHZpYSBwcmVmZXJlbmNlcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjcyOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViRGF0YWJh
c2VNYW5hZ2VyLmNwcDogVXBkYXRlIHRvIGNoZWNrIHByZWZlcmVuY2VzIGZvciB0aGUKKyAgICAg
ICAgZGVzaXJlZCBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugc3RvcmUuCisgICAgICAgIChkYXRh
YmFzZXNEaXJlY3RvcnkpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdEluaXRpYWxpemVXZWJEYXRh
YmFzZXNJZk5lY2Vzc2FyeSk6IFVzZSBuZXcgZGF0YWJhc2VzRGlyZWN0b3J5CisgICAgICAgIG1l
dGhvZCB0byBkZXRlcm1pbmUgd2hhdCBzeXN0ZW0gcGF0aCB0byB1c2UgZm9yIGZpbGUgc3RvcmFn
ZS4KKyAgICAgICAgKiBXZWJLaXQudmNwcm9qL1dlYktpdEV4cG9ydHMuZGVmLmluOiBFeHBvcnQg
dGhyZWUgc3ltYm9scworICAgICAgICBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBmZWF0dXJlLgor
ICAgICAgICAqIFdlYlZpZXcuY3BwOiBVcGRhdGUgdG8gY2hlY2sgcHJlZmVyZW5jZXMgZm9yIHRo
ZSBkZXNpcmVkIGxvY2F0aW9uCisgICAgICAgIG9mIHRoZSB2YXJpb3VzIGNhY2hlcyB1c2VkIGJ5
IFdlYktpdC4KKyAgICAgICAgKFdlYlZpZXc6OnNldENhY2hlTW9kZWwpOiBVcGRhdGUgdG8gY2hl
Y2sgcHJlZmVyZW5jZXMgZm9yIFVSTCBjYWNoZQorICAgICAgICBzdG9yYWdlLgorICAgICAgICAo
V2ViS2l0U2V0QXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSk6IFVwZGF0ZSB0byBjaGVj
aworICAgICAgICBwcmVmZXJlbmNlcyBmb3IgY2NhY2hlIHN0b3JhZ2UuCisKIDIwMTMtMDUtMjQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
dW51c2VkIGNvZGUgdG8gcmVhZC93cml0ZSBoaXN0b3J5CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkRhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE1MDYzOSkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyBDRlN0cmluZ1JlZiBX
ZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQ0ZTVFIoIldlYkRhdGFiYXNlRGlyZWN0
b3J5Iik7CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWFsKExQQ1dTVFIgczEsIExQQ1dTVFIg
czIpCiB7CiAgICAgcmV0dXJuICF3Y3NjbXAoczEsIHMyKTsKQEAgLTQwNSwxNCArNDA3LDI0IEBA
IHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkaXNwYXRjaERpZE1vZGkKICAgICBub3RpZnlDZW50
ZXItPnBvc3ROb3RpZmljYXRpb25OYW1lKGRhdGFiYXNlRGlkTW9kaWZ5T3JpZ2luTmFtZSwgc2Vj
dXJpdHlPcmlnaW4uZ2V0KCksIHVzZXJJbmZvQmFnLmdldCgpKTsKIH0KIAorc3RhdGljIFdURjo6
U3RyaW5nIGRhdGFiYXNlc0RpcmVjdG9yeSgpCit7CisjaWYgVVNFKENGKQorICAgIENGU3RyaW5n
UmVmIGRpcmVjdG9yeVByZWYgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZQcmVmZXJlbmNl
c0NvcHlBcHBWYWx1ZShXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5LCBrQ0ZQcmVmZXJl
bmNlc0N1cnJlbnRBcHBsaWNhdGlvbikpOworICAgIGlmIChkaXJlY3RvcnlQcmVmICYmIENGU3Ry
aW5nR2V0VHlwZUlEKCkgPT0gQ0ZHZXRUeXBlSUQoZGlyZWN0b3J5UHJlZikpCisgICAgICAgIHJl
dHVybiBkaXJlY3RvcnlQcmVmOworI2VuZGlmCisKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KFdlYkNvcmU6OmxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVj
dG9yeSgpLCAiRGF0YWJhc2VzIik7Cit9CisKIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZVdlYkRhdGFi
YXNlc0lmTmVjZXNzYXJ5KCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNl
OwogICAgIGlmIChpbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjpTdHJp
bmcgZGF0YWJhc2VzRGlyZWN0b3J5ID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KFdlYkNvcmU6OmxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpLCAiRGF0YWJhc2Vz
Iik7Ci0gICAgV2ViQ29yZTo6RGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuaW5pdGlhbGl6ZShk
YXRhYmFzZXNEaXJlY3RvcnkpOworICAgIFdlYkNvcmU6OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdl
cigpLmluaXRpYWxpemUoZGF0YWJhc2VzRGlyZWN0b3J5KCkpOwogCiAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDE1MDYzOSkKKysr
IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNiAr
MTk1LDggQEAgdXNpbmcgSlNDOjpKU0xvY2s7CiBzdGF0aWMgSE1PRFVMRSBhY2Nlc3NpYmlsaXR5
TGliOwogc3RhdGljIEhhc2hTZXQ8V2ViVmlldyo+IHBlbmRpbmdEZWxldGVCYWNraW5nU3RvcmVT
ZXQ7CiAKK3N0YXRpYyBDRlN0cmluZ1JlZiBXZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXkgPSBD
RlNUUigiV2ViS2l0TG9jYWxDYWNoZSIpOworCiBzdGF0aWMgU3RyaW5nIHdlYktpdFZlcnNpb25T
dHJpbmcoKTsKIAogV2ViVmlldyoga2l0KFBhZ2UqIHBhZ2UpCkBAIC00NzgsOCArNDgwLDExIEBA
IHZvaWQgV2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGUKIAogICAgIFJldGFpblB0
cjxDRlVSTENhY2hlUmVmPiBjZnVybENhY2hlID0gYWRvcHRDRihDRlVSTENhY2hlQ29weVNoYXJl
ZFVSTENhY2hlKCkpOwogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2Z1cmxDYWNoZURpcmVj
dG9yeSA9IGFkb3B0Q0Yod2tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KDApKTsKLSAgICBp
ZiAoIWNmdXJsQ2FjaGVEaXJlY3RvcnkpCi0gICAgICAgIGNmdXJsQ2FjaGVEaXJlY3RvcnkgPSBX
ZWJDb3JlOjpsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKS5jcmVhdGVDRlN0cmlu
ZygpOworICAgIGlmICghY2Z1cmxDYWNoZURpcmVjdG9yeSkgeworICAgICAgICBjZnVybENhY2hl
RGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGUHJlZmVyZW5jZXNDb3B5QXBw
VmFsdWUoV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5LCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRB
cHBsaWNhdGlvbikpOworICAgICAgICBpZiAoIWNmdXJsQ2FjaGVEaXJlY3RvcnkgfHwgQ0ZTdHJp
bmdHZXRUeXBlSUQoKSAhPSBDRkdldFR5cGVJRChjZnVybENhY2hlRGlyZWN0b3J5LmdldCgpKSkK
KyAgICAgICAgICAgIGNmdXJsQ2FjaGVEaXJlY3RvcnkgPSBXZWJDb3JlOjpsb2NhbFVzZXJTcGVj
aWZpY1N0b3JhZ2VEaXJlY3RvcnkoKS5jcmVhdGVDRlN0cmluZygpOworICAgIH0KIAogICAgIC8v
IEFzIGEgZnVkZ2UgZmFjdG9yLCB1c2UgMTAwMCBpbnN0ZWFkIG9mIDEwMjQsIGluIGNhc2UgdGhl
IHJlcG9ydGVkIGJ5dGUgCiAgICAgLy8gY291bnQgZG9lc24ndCBhbGlnbiBleGFjdGx5IHRvIGEg
bWVnYWJ5dGUgYm91bmRhcnkuCkBAIC0yNTk3LDYgKzI2MDIsMTMgQEAgc3RhdGljIHZvaWQgV2Vi
S2l0U2V0QXBwbGljYXRpb25DYWNoZVBhdAogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcg
cGF0aCA9IGxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpOworCisjaWYgVVNFKENG
KQorICAgIENGU3RyaW5nUmVmIGNhY2hlRGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdS
ZWY+KENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5
LCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbikpOworICAgIGlmIChjYWNoZURpcmVj
dG9yeSAmJiBDRlN0cmluZ0dldFR5cGVJRCgpID09IENGR2V0VHlwZUlEKGNhY2hlRGlyZWN0b3J5
KSkKKyAgICAgICAgcGF0aCA9IGNhY2hlRGlyZWN0b3J5OworI2VuZGlmCisKICAgICBpZiAoIXBh
dGguaXNOdWxsKCkpCiAgICAgICAgIGNhY2hlU3RvcmFnZSgpLnNldENhY2hlRGlyZWN0b3J5KHBh
dGgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdEV4cG9y
dHMuZGVmLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ov
V2ViS2l0RXhwb3J0cy5kZWYuaW4JKHJldmlzaW9uIDE1MDYzOSkKKysrIFNvdXJjZS9XZWJLaXQv
d2luL1dlYktpdC52Y3Byb2ovV2ViS2l0RXhwb3J0cy5kZWYuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTE3OCw2ICsxNzgsOSBAQCBFWFBPUlRTCiAgICAgICAgID9jaGlsZEl0ZW1XaXRoVGFyZ2V0QEhp
c3RvcnlJdGVtQFdlYkNvcmVAQFFCRVBBVjEyQEFCVlN0cmluZ0BXVEZAQEBaCiAgICAgICAgID9j
cmVhdGVAUmFuZ2VAV2ViQ29yZUBAU0E/QVY/JFBhc3NSZWZQdHJAVlJhbmdlQFdlYkNvcmVAQEBX
VEZAQFY/JFBhc3NSZWZQdHJAVkRvY3VtZW50QFdlYkNvcmVAQEA0QFY/JFBhc3NSZWZQdHJAVk5v
ZGVAV2ViQ29yZUBAQDRASDFIQFoKICAgICAgICAgP2NyZWF0ZUBTZXJpYWxpemVkU2NyaXB0VmFs
dWVAV2ViQ29yZUBAU0E/QVY/JFBhc3NSZWZQdHJAVlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUBXZWJD
b3JlQEBAV1RGQEBBQlZTdHJpbmdANEBAWgorI2lmIFVTRShDRikKKyAgICAgICAgP2NyZWF0ZUNG
U3RyaW5nQFN0cmluZ0BXVEZAQFFCRT9BVj8kUmV0YWluUHRyQFBCVV9fQ0ZTdHJpbmdAQEAyQFha
CisjZW5kaWYKICAgICAgICAgP2NyZWF0ZVNoYWRvd1Jvb3RARWxlbWVudEBXZWJDb3JlQEBRQUU/
QVY/JFBhc3NSZWZQdHJAVlNoYWRvd1Jvb3RAV2ViQ29yZUBAQFdURkBAQUFIQFoKICAgICAgICAg
P2NyZWF0ZVdyYXBwZXJAV2ViQ29yZUBAWUE/QVZKU1ZhbHVlQEpTQ0BAUEFWRXhlY1N0YXRlQDNA
UEFWSlNET01HbG9iYWxPYmplY3RAMUBQQVZOb2RlQDFAQFoKICAgICAgICAgP2RlcHJlY2F0ZWRT
aGFkb3dBbmNlc3Rvck5vZGVATm9kZUBXZWJDb3JlQEBRQkVQQVYxMkBYWgpAQCAtMjIyLDYgKzIy
NSw3IEBAIEVYUE9SVFMKICAgICAgICAgP3NldFByb3BlcnR5QFNldHRpbmdzQEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWxAV2ViQ29yZUBAVUFFWEFCVlN0cmluZ0BXVEZAQDBAWgogICAgICAg
ICA/d2luZG93T2JqZWN0Q2xlYXJlZEBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsQFdlYkNv
cmVAQFVBRVhYWgogICAgICAgICA/c2V0UmVzb3VyY2VzRGF0YVNpemVMaW1pdHNGcm9tSW50ZXJu
YWxzQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBAUUFFWEhIQFoKKyAgICAgICAgP3BhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudEBXZWJDb3JlQEBZQT9BVlN0cmluZ0BXVEZAQEFCVjIzQDBAWgog
ICAgICAgICA/cHJvZmlsZXJFbmFibGVkQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBAUUFF
X05YWgogICAgICAgICA/c2V0UHJvZmlsZXJFbmFibGVkQEluc3BlY3RvckNvbnRyb2xsZXJAV2Vi
Q29yZUBAUUFFWF9OQFoKICAgICAgICAgP2Rpc2Nvbm5lY3RGcm9udGVuZEBJbnNwZWN0b3JDb250
cm9sbGVyQFdlYkNvcmVAQFFBRVhYWgpAQCAtMjM3LDYgKzI0MSw3IEBAIEVYUE9SVFMKICAgICAg
ICAgP2ZpcnN0Q2hpbGRAQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyQFdlYkNvcmVAQFFBRVhYWgog
ICAgICAgICA/bGFzdENoaWxkQENvbXBvc2VkU2hhZG93VHJlZVdhbGtlckBXZWJDb3JlQEBRQUVY
WFoKICAgICAgICAgP2xlbmd0aEBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBVQkVJWFoKKyAgICAg
ICAgP2xvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeUBXZWJDb3JlQEBZQT9BVlN0cmlu
Z0BXVEZAQFhaCiAgICAgICAgID9uYW1lZEl0ZW1AU3RhdGljTm9kZUxpc3RAV2ViQ29yZUBAVUJF
UEFWTm9kZUAyQEFCVkF0b21pY1N0cmluZ0BXVEZAQEBaCiAgICAgICAgID9uZXh0QENvbXBvc2Vk
U2hhZG93VHJlZVdhbGtlckBXZWJDb3JlQEBRQUVYWFoKICAgICAgICAgP3ByZXZpb3VzQENvbXBv
c2VkU2hhZG93VHJlZVdhbGtlckBXZWJDb3JlQEBRQUVYWFoKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDY2MikKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEzLTA1LTI0
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dz
XSBFeHBvc2UgZGF0YWJhc2Ugc3RvcmFnZSBhbmQgY2FjaGUgbG9jYXRpb25zIHZpYSBwcmVmZXJl
bmNlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
NjcyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSBEdW1wUmVuZGVyVHJlZSB0byB1c2UgQ0ZQcmVmZXJlbmNlcyB0byBjb250cm9sIHdoZXJl
IFdlYktpdAorICAgICAgICBzdG9yZXMgaXRzIGxvY2FsIGRhdGFiYXNlcywgVVJMIGNhY2hlcywg
ZXRjLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoK
KyAgICAgICAgKGxpYnJhcnlQYXRoRm9yRHVtcFJlbmRlclRyZWUpOiBBZGRlZC4KKyAgICAgICAg
KGRsbExhdW5jaGVyRW50cnlQb2ludCk6IFNldCB1cCBEUlQtc3BlY2lmaWMgY2FjaGUgbG9jYXRp
b25zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAo
UG9ydC5fZHJpdmVyX3RlbXBkaXIpOiBBZGRlZCAodG8gYWxsb3cgcG9ydC1zcGVjaWZpYyBvdmVy
bG9hZCkuCisgICAgICAgIChQb3J0Ll9kcml2ZXJfdGVtcGRpcl9mb3JfZW52aXJvbm1lbnQpOiBE
aXR0bworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAg
IChEcml2ZXIuX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcik6IFVzZSBuZXcgb3ZlcmxvYWQgdG8g
c2V0CisgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICAoRHJpdmVyLl9zdGFy
dCk6IFVzZSBuZXcgb3ZlcmxvYWQgZm9yIHRlbXAgZGlyZWN0b3J5IGxvY2F0aW9uLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Qb3J0Ll9kcml2
ZXJfdGVtcGRpcl9mb3JfZW52aXJvbm1lbnQpOiBOZXcgb3ZlcmxvYWQgdG8gc3VwcGx5CisgICAg
ICAgIFdpbmRvd3MgcGF0aCB0byBEdW1wUmVuZGVyVHJlZSBlbnZpcm9ubWVudCAod2hpbGUgc3Rp
bGwgdXNpbmcKKyAgICAgICAgY3lnd2luIHBhdGhzIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zLgor
CiAyMDEzLTA1LTI0ICBCZW0gSm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAg
ICAgIE1ha2UgdGVhbS5odG1sIGhhdmUgZWFjaCBjb250cmlidXRvcidzIGFyZWEgb2YgZXhwZXJ0
aXNlCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAJ
KHJldmlzaW9uIDE1MDYzOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE1ICs1NCwxMyBAQAogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRp
b24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNp
bmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dlYktpdENPTUFQSS5o
PgogCiAjaWYgVVNFKENGTkVUV09SSykKLSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxDYWNoZVBy
aXYuaD4KLSNlbmRpZgotCi0jaWYgVVNFKENGTkVUV09SSykKICNpbmNsdWRlIDxDRk5ldHdvcmsv
Q0ZIVFRQQ29va2llc1ByaXYuaD4KKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxDYWNoZVByaXYu
aD4KICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNzQsOCArNzIsMTMgQEAgY29u
c3QgTFBXU1RSIFRlc3RQbHVnaW5EaXIgPSBMIlRlc3ROZXRzYwogI2VuZGlmCiAKIHN0YXRpYyBM
UENXU1RSIGZvbnRzRW52aXJvbm1lbnRWYXJpYWJsZSA9IEwiV0VCS0lUX1RFU1RGT05UUyI7Citz
dGF0aWMgTFBDV1NUUiBkdW1wUmVuZGVyVHJlZVRlbXAgPSBMIkRVTVBSRU5ERVJUUkVFX1RFTVAi
OwogI2RlZmluZSBVU0VfTUFDX0ZPTlRTCiAKK3N0YXRpYyBDRlN0cmluZ1JlZiBXZWJEYXRhYmFz
ZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQ0ZTVFIoIldlYkRhdGFiYXNlRGlyZWN0b3J5Iik7Citz
dGF0aWMgQ0ZTdHJpbmdSZWYgV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5ID0gQ0ZTVFIoIldl
YktpdExvY2FsQ2FjaGUiKTsKK3N0YXRpYyBDRlN0cmluZ1JlZiBXZWJTdG9yYWdlRGlyZWN0b3J5
RGVmYXVsdHNLZXkgPSBDRlNUUigiV2ViS2l0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoUHJlZmVy
ZW5jZUtleSIpOworCiBjb25zdCBMUENXU1RSIGtEdW1wUmVuZGVyVHJlZUNsYXNzTmFtZSA9IEwi
RHVtcFJlbmRlclRyZWVXaW5kb3ciOwogCiBzdGF0aWMgYm9vbCBkdW1wVHJlZSA9IHRydWU7CkBA
IC0xOTEsNiArMTk0LDIyIEBAIHN0YXRpYyBzdHJpbmcgdG9VVEY4KGNvbnN0IHdjaGFyX3QqIHdp
ZGUKICAgICByZXR1cm4gc3RyaW5nKHV0ZjhWZWN0b3IuZGF0YSgpLCB1dGY4VmVjdG9yLnNpemUo
KSAtIDEpOwogfQogCisjaWYgVVNFKENGKQorc3RhdGljIFdURjo6U3RyaW5nIGxpYnJhcnlQYXRo
Rm9yRHVtcFJlbmRlclRyZWUoKQoreworICAgIERXT1JEIHNpemUgPSA6OkdldEVudmlyb25tZW50
VmFyaWFibGUoZHVtcFJlbmRlclRyZWVUZW1wLCAwLCAwKTsKKyAgICBWZWN0b3I8VENIQVI+IGJ1
ZmZlcihzaXplKTsKKyAgICBpZiAoOjpHZXRFbnZpcm9ubWVudFZhcmlhYmxlKGR1bXBSZW5kZXJU
cmVlVGVtcCwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSkpIHsKKyAgICAgICAgd3N0cmlu
ZyBwYXRoID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYgKHBhdGhbcGF0aC5sZW5ndGgoKSAt
IDFdICE9ICdcXCcpCisgICAgICAgICAgICBwYXRoLmFwcGVuZChMIlxcIik7CisgICAgICAgIHJl
dHVybiBXVEY6OlN0cmluZyAocGF0aC5kYXRhKCksIHBhdGgubGVuZ3RoKCkpOworICAgIH0KKwor
ICAgIHJldHVybiBXZWJDb3JlOjpsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsK
K30KKyNlbmRpZgorCiBzdHJpbmcgdG9VVEY4KEJTVFIgYnN0cikKIHsKICAgICByZXR1cm4gdG9V
VEY4KGJzdHIsIFN5c1N0cmluZ0xlbihic3RyKSk7CkBAIC0xMjc1LDYgKzEyOTQsMTQgQEAgZXh0
ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IFdJTgogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKKyNpZiBVU0UoQ0YpCisgICAgLy8gU2V0IHVwIHRoZXNlIHZhbHVlcyBiZWZvcmUg
Y3JlYXRpbmcgdGhlIFdlYlZpZXcgc28gdGhhdCB0aGUgdmFyaW91cyBpbml0aWFsaXphdGlvbnMg
d2lsbCBzZWUgdGhlc2UgcHJlZmVycmVkIHZhbHVlcy4KKyAgICBXVEY6OlN0cmluZyBwYXRoID0g
bGlicmFyeVBhdGhGb3JEdW1wUmVuZGVyVHJlZSgpOworICAgIENGUHJlZmVyZW5jZXNTZXRBcHBW
YWx1ZShXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5LCBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocGF0aCwgIkRhdGFiYXNlcyIpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCks
IGtDRlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uKTsKKyAgICBDRlByZWZlcmVuY2VzU2V0
QXBwVmFsdWUoV2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5LCBXZWJDb3JlOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocGF0aCwgIkxvY2FsU3RvcmFnZSIpLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCksIGtDRlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uKTsKKyAgICBDRlByZWZlcmVu
Y2VzU2V0QXBwVmFsdWUoV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5LCBXZWJDb3JlOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgIkxvY2FsQ2FjaGUiKS5jcmVhdGVDRlN0cmluZygp
LmdldCgpLCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbik7CisjZW5kaWYKKwogICAg
IENPTVB0cjxJV2ViVmlldz4gd2ViVmlldyhBZG9wdENPTSwgY3JlYXRlV2ViVmlld0FuZE9mZnNj
cmVlbldpbmRvdygmd2ViVmlld1dpbmRvdykpOwogICAgIGlmICghd2ViVmlldykKICAgICAgICAg
cmV0dXJuIC0xOwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9u
IDE1MDYzOSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xMjY1LDYgKzEyNjUsMTIgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHRlc3QgZHJpdmVyIChEdW1wUmVuZGVy
VHJlZSkuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKHNlbGYuZHJpdmVyX25h
bWUoKSkKIAorICAgIGRlZiBfZHJpdmVyX3RlbXBkaXIoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9maWxlc3lzdGVtLm1rZHRlbXAocHJlZml4PSclcy0nICUgc2VsZi5kcml2ZXJfbmFtZSgp
KQorCisgICAgZGVmIF9kcml2ZXJfdGVtcGRpcl9mb3JfZW52aXJvbm1lbnQoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9kcml2ZXJfdGVtcGRpcigpCisKICAgICBkZWYgX3BhdGhfdG9fd2Vi
Y29yZV9saWJyYXJ5KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8g
YSBidWlsdCBjb3B5IG9mIFdlYkNvcmUuIiIiCiAgICAgICAgIHJldHVybiBOb25lCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDE1MDYzOSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4
NCw3ICsyODQsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgZW52aXJvbm1lbnRb
J0RZTERfTElCUkFSWV9QQVRIJ10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAgICAg
ZW52aXJvbm1lbnRbJ0RZTERfRlJBTUVXT1JLX1BBVEgnXSA9IHNlbGYuX3BvcnQuX2J1aWxkX3Bh
dGgoKQogICAgICAgICAjIEZJWE1FOiBXZSdyZSBhc3N1bWluZyB0aGF0IFdlYktpdFRlc3RSdW5u
ZXIgY2hlY2tzIHRoaXMgRHVtcFJlbmRlclRyZWUtbmFtZWQgZW52aXJvbm1lbnQgdmFyaWFibGUu
Ci0gICAgICAgIGVudmlyb25tZW50WydEVU1QUkVOREVSVFJFRV9URU1QJ10gPSBzdHIoc2VsZi5f
ZHJpdmVyX3RlbXBkaXIpCisgICAgICAgIGVudmlyb25tZW50WydEVU1QUkVOREVSVFJFRV9URU1Q
J10gPSBzdHIoc2VsZi5fcG9ydC5fZHJpdmVyX3RlbXBkaXJfZm9yX2Vudmlyb25tZW50KCkpCiAg
ICAgICAgIGVudmlyb25tZW50WydMT0NBTF9SRVNPVVJDRV9ST09UJ10gPSBzZWxmLl9wb3J0Lmxh
eW91dF90ZXN0c19kaXIoKQogICAgICAgICBpZiAnV0VCS0lUT1VUUFVURElSJyBpbiBvcy5lbnZp
cm9uOgogICAgICAgICAgICAgZW52aXJvbm1lbnRbJ1dFQktJVE9VVFBVVERJUiddID0gb3MuZW52
aXJvblsnV0VCS0lUT1VUUFVURElSJ10KQEAgLTI5NCw3ICsyOTQsNyBAQCBjbGFzcyBEcml2ZXIo
b2JqZWN0KToKIAogICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2Fy
Z3MpOgogICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9
IHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0ubWtkdGVtcChwcmVmaXg9JyVzLScgJSBzZWxmLl9wb3J0
LmRyaXZlcl9uYW1lKCkpCisgICAgICAgIHNlbGYuX2RyaXZlcl90ZW1wZGlyID0gc2VsZi5fcG9y
dC5fZHJpdmVyX3RlbXBkaXIoKQogICAgICAgICBzZXJ2ZXJfbmFtZSA9IHNlbGYuX3BvcnQuZHJp
dmVyX25hbWUoKQogICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3BvcnQuc2V0dXBfZW52aXJv
bl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQogICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3Nl
dHVwX2Vudmlyb25fZm9yX2RyaXZlcihlbnZpcm9ubWVudCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC93aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3dpbi5weQkocmV2aXNpb24gMTUwNjM5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3dpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBpbXBvcnQgc3lz
CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1I
b3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRF
cnJvciwgRXhlY3V0aXZlCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBvcnQg
YWJzcGF0aF90b191cmkKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5wYXRoIGltcG9ydCBh
YnNwYXRoX3RvX3VyaSwgY3lncGF0aAogZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGltcG9ydCBB
cHBsZVBvcnQKIAogCkBAIC0xMTUsMyArMTE1LDYgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQp
OgogICAgICMgUmVtb3ZlIHRoaXMgaW1wbGVtZW50YXRpb24gd2hlbiB3ZSBhcmUgY29uZmlkZW50
IHRoYXQgRHVtcFJlbmRlclRyZWUgb24gV2luZG93cyB3b3JrcyBwcm9wZXJseSBpbiBwYXJhbGxl
bC4KICAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAgIHJldHVy
biAxCisKKyAgICBkZWYgX2RyaXZlcl90ZW1wZGlyX2Zvcl9lbnZpcm9ubWVudChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIGN5Z3BhdGgoc2VsZi5fZHJpdmVyX3RlbXBkaXIoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202867</attachid>
            <date>2013-05-24 16:56:21 -0700</date>
            <delta_ts>2013-05-24 17:07:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116729-20130524165502.patch</filename>
            <type>text/plain</type>
            <size>17035</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTA2NjIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA1LTI0ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBFeHBvc2UgZGF0
YWJhc2Ugc3RvcmFnZSBhbmQgY2FjaGUgbG9jYXRpb25zIHZpYSBwcmVmZXJlbmNlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjcyOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0LnZjeHBy
b2ovV2ViS2l0RXhwb3J0R2VuZXJhdG9yL1dlYktpdEV4cG9ydHMuZGVmLmluOiBFeHBvcnQKKyAg
ICAgICAgdGhyZWUgc3ltYm9scyBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBmZWF0dXJlLgorCiAy
MDEzLTA1LTIxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbQmxhY2tCZXJyeV0gTWFrZSBQYWdlUG9wdXAgaW1wbGVtZW50YXRpb24gaW5kZXBl
bmRlbnQgZnJvbSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dl
YktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRFeHBvcnRzLmRlZi5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEV4cG9ydEdlbmVyYXRvci9XZWJLaXRF
eHBvcnRzLmRlZi5pbgkocmV2aXNpb24gMTUwNjM5KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRFeHBvcnRHZW5lcmF0b3IvV2ViS2l0RXhwb3J0cy5kZWYuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTE3OCw2ICsxNzgsOSBAQCBFWFBPUlRTCiAgICAgICAgID9jaGlsZEl0ZW1X
aXRoVGFyZ2V0QEhpc3RvcnlJdGVtQFdlYkNvcmVAQFFCRVBBVjEyQEFCVlN0cmluZ0BXVEZAQEBa
CiAgICAgICAgID9jcmVhdGVAUmFuZ2VAV2ViQ29yZUBAU0E/QVY/JFBhc3NSZWZQdHJAVlJhbmdl
QFdlYkNvcmVAQEBXVEZAQFY/JFBhc3NSZWZQdHJAVkRvY3VtZW50QFdlYkNvcmVAQEA0QFY/JFBh
c3NSZWZQdHJAVk5vZGVAV2ViQ29yZUBAQDRASDFIQFoKICAgICAgICAgP2NyZWF0ZUBTZXJpYWxp
emVkU2NyaXB0VmFsdWVAV2ViQ29yZUBAU0E/QVY/JFBhc3NSZWZQdHJAVlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUBXZWJDb3JlQEBAV1RGQEBBQlZTdHJpbmdANEBAWgorI2lmIFVTRShDRikKKyAgICAg
ICAgP2NyZWF0ZUNGU3RyaW5nQFN0cmluZ0BXVEZAQFFCRT9BVj8kUmV0YWluUHRyQFBCVV9fQ0ZT
dHJpbmdAQEAyQFhaCisjZW5kaWYKICAgICAgICAgP2NyZWF0ZVNoYWRvd1Jvb3RARWxlbWVudEBX
ZWJDb3JlQEBRQUU/QVY/JFBhc3NSZWZQdHJAVlNoYWRvd1Jvb3RAV2ViQ29yZUBAQFdURkBAQUFI
QFoKICAgICAgICAgP2NyZWF0ZVdyYXBwZXJAV2ViQ29yZUBAWUE/QVZKU1ZhbHVlQEpTQ0BAUEFW
RXhlY1N0YXRlQDNAUEFWSlNET01HbG9iYWxPYmplY3RAMUBQQVZOb2RlQDFAQFoKICAgICAgICAg
P2RlcHJlY2F0ZWRTaGFkb3dBbmNlc3Rvck5vZGVATm9kZUBXZWJDb3JlQEBRQkVQQVYxMkBYWgpA
QCAtMjIyLDYgKzIyNSw3IEBAIEVYUE9SVFMKICAgICAgICAgP3NldFByb3BlcnR5QFNldHRpbmdz
QEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxAV2ViQ29yZUBAVUFFWEFCVlN0cmluZ0BXVEZA
QDBAWgogICAgICAgICA/d2luZG93T2JqZWN0Q2xlYXJlZEBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsQFdlYkNvcmVAQFVBRVhYWgogICAgICAgICA/c2V0UmVzb3VyY2VzRGF0YVNpemVMaW1p
dHNGcm9tSW50ZXJuYWxzQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBAUUFFWEhIQFoKKyAg
ICAgICAgP3BhdGhCeUFwcGVuZGluZ0NvbXBvbmVudEBXZWJDb3JlQEBZQT9BVlN0cmluZ0BXVEZA
QEFCVjIzQDBAWgogICAgICAgICA/cHJvZmlsZXJFbmFibGVkQEluc3BlY3RvckNvbnRyb2xsZXJA
V2ViQ29yZUBAUUFFX05YWgogICAgICAgICA/c2V0UHJvZmlsZXJFbmFibGVkQEluc3BlY3RvckNv
bnRyb2xsZXJAV2ViQ29yZUBAUUFFWF9OQFoKICAgICAgICAgP2Rpc2Nvbm5lY3RGcm9udGVuZEBJ
bnNwZWN0b3JDb250cm9sbGVyQFdlYkNvcmVAQFFBRVhYWgpAQCAtMjM3LDYgKzI0MSw3IEBAIEVY
UE9SVFMKICAgICAgICAgP2ZpcnN0Q2hpbGRAQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyQFdlYkNv
cmVAQFFBRVhYWgogICAgICAgICA/bGFzdENoaWxkQENvbXBvc2VkU2hhZG93VHJlZVdhbGtlckBX
ZWJDb3JlQEBRQUVYWFoKICAgICAgICAgP2xlbmd0aEBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBV
QkVJWFoKKyAgICAgICAgP2xvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeUBXZWJDb3Jl
QEBZQT9BVlN0cmluZ0BXVEZAQFhaCiAgICAgICAgID9uYW1lZEl0ZW1AU3RhdGljTm9kZUxpc3RA
V2ViQ29yZUBAVUJFUEFWTm9kZUAyQEFCVkF0b21pY1N0cmluZ0BXVEZAQEBaCiAgICAgICAgID9u
ZXh0QENvbXBvc2VkU2hhZG93VHJlZVdhbGtlckBXZWJDb3JlQEBRQUVYWFoKICAgICAgICAgP3By
ZXZpb3VzQENvbXBvc2VkU2hhZG93VHJlZVdhbGtlckBXZWJDb3JlQEBRQUVYWFoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDY2MikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEzLTA1LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5kb3dzXSBFeHBvc2Ug
ZGF0YWJhc2Ugc3RvcmFnZSBhbmQgY2FjaGUgbG9jYXRpb25zIHZpYSBwcmVmZXJlbmNlcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjcyOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViRGF0YWJh
c2VNYW5hZ2VyLmNwcDogVXBkYXRlIHRvIGNoZWNrIHByZWZlcmVuY2VzIGZvciB0aGUKKyAgICAg
ICAgZGVzaXJlZCBsb2NhdGlvbiBvZiB0aGUgZGF0YWJhc2Ugc3RvcmUuCisgICAgICAgIChkYXRh
YmFzZXNEaXJlY3RvcnkpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdEluaXRpYWxpemVXZWJEYXRh
YmFzZXNJZk5lY2Vzc2FyeSk6IFVzZSBuZXcgZGF0YWJhc2VzRGlyZWN0b3J5CisgICAgICAgIG1l
dGhvZCB0byBkZXRlcm1pbmUgd2hhdCBzeXN0ZW0gcGF0aCB0byB1c2UgZm9yIGZpbGUgc3RvcmFn
ZS4KKyAgICAgICAgKiBXZWJLaXQudmNwcm9qL1dlYktpdEV4cG9ydHMuZGVmLmluOiBFeHBvcnQg
dGhyZWUgc3ltYm9scworICAgICAgICBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBmZWF0dXJlLgor
ICAgICAgICAqIFdlYlZpZXcuY3BwOiBVcGRhdGUgdG8gY2hlY2sgcHJlZmVyZW5jZXMgZm9yIHRo
ZSBkZXNpcmVkIGxvY2F0aW9uCisgICAgICAgIG9mIHRoZSB2YXJpb3VzIGNhY2hlcyB1c2VkIGJ5
IFdlYktpdC4KKyAgICAgICAgKFdlYlZpZXc6OnNldENhY2hlTW9kZWwpOiBVcGRhdGUgdG8gY2hl
Y2sgcHJlZmVyZW5jZXMgZm9yIFVSTCBjYWNoZQorICAgICAgICBzdG9yYWdlLgorICAgICAgICAo
V2ViS2l0U2V0QXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSk6IFVwZGF0ZSB0byBjaGVj
aworICAgICAgICBwcmVmZXJlbmNlcyBmb3IgY2NhY2hlIHN0b3JhZ2UuCisKIDIwMTMtMDUtMjQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
dW51c2VkIGNvZGUgdG8gcmVhZC93cml0ZSBoaXN0b3J5CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkRhdGFiYXNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE1MDYzOSkKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyBDRlN0cmluZ1JlZiBX
ZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQ0ZTVFIoIldlYkRhdGFiYXNlRGlyZWN0
b3J5Iik7CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWFsKExQQ1dTVFIgczEsIExQQ1dTVFIg
czIpCiB7CiAgICAgcmV0dXJuICF3Y3NjbXAoczEsIHMyKTsKQEAgLTQwNSwxNCArNDA3LDI0IEBA
IHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkaXNwYXRjaERpZE1vZGkKICAgICBub3RpZnlDZW50
ZXItPnBvc3ROb3RpZmljYXRpb25OYW1lKGRhdGFiYXNlRGlkTW9kaWZ5T3JpZ2luTmFtZSwgc2Vj
dXJpdHlPcmlnaW4uZ2V0KCksIHVzZXJJbmZvQmFnLmdldCgpKTsKIH0KIAorc3RhdGljIFdURjo6
U3RyaW5nIGRhdGFiYXNlc0RpcmVjdG9yeSgpCit7CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0
cjxDRlByb3BlcnR5TGlzdFJlZj4gZGlyZWN0b3J5UHJlZiA9IGFkb3B0Q0YoQ0ZQcmVmZXJlbmNl
c0NvcHlBcHBWYWx1ZShXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5LCBrQ0ZQcmVmZXJl
bmNlc0N1cnJlbnRBcHBsaWNhdGlvbikpOworICAgIGlmIChkaXJlY3RvcnlQcmVmICYmIChDRlN0
cmluZ0dldFR5cGVJRCgpID09IENGR2V0VHlwZUlEKGRpcmVjdG9yeVByZWYuZ2V0KCkpKSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihkaXJlY3RvcnlQcmVmLmdldCgp
KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChXZWJDb3JlOjpsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKSwgIkRhdGFiYXNl
cyIpOworfQorCiB2b2lkIFdlYktpdEluaXRpYWxpemVXZWJEYXRhYmFzZXNJZk5lY2Vzc2FyeSgp
CiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoaW5pdGlh
bGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6U3RyaW5nIGRhdGFiYXNlc0RpcmVj
dG9yeSA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChXZWJDb3JlOjpsb2NhbFVz
ZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKSwgIkRhdGFiYXNlcyIpOwotICAgIFdlYkNvcmU6
OkRhdGFiYXNlTWFuYWdlcjo6bWFuYWdlcigpLmluaXRpYWxpemUoZGF0YWJhc2VzRGlyZWN0b3J5
KTsKKyAgICBXZWJDb3JlOjpEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5pbml0aWFsaXplKGRh
dGFiYXNlc0RpcmVjdG9yeSgpKTsKIAogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAxNTA2MzkpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDYgKzE5NSw4IEBAIHVzaW5nIEpT
Qzo6SlNMb2NrOwogc3RhdGljIEhNT0RVTEUgYWNjZXNzaWJpbGl0eUxpYjsKIHN0YXRpYyBIYXNo
U2V0PFdlYlZpZXcqPiBwZW5kaW5nRGVsZXRlQmFja2luZ1N0b3JlU2V0OwogCitzdGF0aWMgQ0ZT
dHJpbmdSZWYgV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5ID0gQ0ZTVFIoIldlYktpdExvY2Fs
Q2FjaGUiKTsKKwogc3RhdGljIFN0cmluZyB3ZWJLaXRWZXJzaW9uU3RyaW5nKCk7CiAKIFdlYlZp
ZXcqIGtpdChQYWdlKiBwYWdlKQpAQCAtNDc4LDggKzQ4MCwxMyBAQCB2b2lkIFdlYlZpZXc6OnNl
dENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlCiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxDYWNoZVJlZj4g
Y2Z1cmxDYWNoZSA9IGFkb3B0Q0YoQ0ZVUkxDYWNoZUNvcHlTaGFyZWRVUkxDYWNoZSgpKTsKICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmdXJsQ2FjaGVEaXJlY3RvcnkgPSBhZG9wdENGKHdr
Q29weUZvdW5kYXRpb25DYWNoZURpcmVjdG9yeSgwKSk7Ci0gICAgaWYgKCFjZnVybENhY2hlRGly
ZWN0b3J5KQotICAgICAgICBjZnVybENhY2hlRGlyZWN0b3J5ID0gV2ViQ29yZTo6bG9jYWxVc2Vy
U3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBpZiAoIWNm
dXJsQ2FjaGVEaXJlY3RvcnkpIHsKKyAgICAgICAgUmV0YWluUHRyPENGUHJvcGVydHlMaXN0UmVm
PiBwcmVmZXJlbmNlID0gYWRvcHRDRihDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKFdlYktpdExv
Y2FsQ2FjaGVEZWZhdWx0c0tleSwga0NGUHJlZmVyZW5jZXNDdXJyZW50QXBwbGljYXRpb24pKTsK
KyAgICAgICAgaWYgKHByZWZlcmVuY2UgJiYgKENGU3RyaW5nR2V0VHlwZUlEKCkgPT0gQ0ZHZXRU
eXBlSUQocHJlZmVyZW5jZS5nZXQoKSkpKQorICAgICAgICAgICAgY2Z1cmxDYWNoZURpcmVjdG9y
eSA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByZWZlcmVuY2UubGVha1JlZigp
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNmdXJsQ2FjaGVEaXJlY3RvcnkgPSBXZWJD
b3JlOjpsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKS5jcmVhdGVDRlN0cmluZygp
OworICAgIH0KIAogICAgIC8vIEFzIGEgZnVkZ2UgZmFjdG9yLCB1c2UgMTAwMCBpbnN0ZWFkIG9m
IDEwMjQsIGluIGNhc2UgdGhlIHJlcG9ydGVkIGJ5dGUgCiAgICAgLy8gY291bnQgZG9lc24ndCBh
bGlnbiBleGFjdGx5IHRvIGEgbWVnYWJ5dGUgYm91bmRhcnkuCkBAIC0yNTk3LDYgKzI2MDQsMTMg
QEAgc3RhdGljIHZvaWQgV2ViS2l0U2V0QXBwbGljYXRpb25DYWNoZVBhdAogICAgICAgICByZXR1
cm47CiAKICAgICBTdHJpbmcgcGF0aCA9IGxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9y
eSgpOworCisjaWYgVVNFKENGKQorICAgIFJldGFpblB0cjxDRlByb3BlcnR5TGlzdFJlZj4gY2Fj
aGVEaXJlY3RvcnlQcmVmZXJlbmNlID0gYWRvcHRDRihDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVl
KFdlYktpdExvY2FsQ2FjaGVEZWZhdWx0c0tleSwga0NGUHJlZmVyZW5jZXNDdXJyZW50QXBwbGlj
YXRpb24pKTsKKyAgICBpZiAoY2FjaGVEaXJlY3RvcnlQcmVmZXJlbmNlICYmIChDRlN0cmluZ0dl
dFR5cGVJRCgpID09IENGR2V0VHlwZUlEKGNhY2hlRGlyZWN0b3J5UHJlZmVyZW5jZS5nZXQoKSkp
KQorICAgICAgICBwYXRoID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KGNhY2hlRGlyZWN0b3J5
UHJlZmVyZW5jZS5nZXQoKSk7CisjZW5kaWYKKwogICAgIGlmICghcGF0aC5pc051bGwoKSkKICAg
ICAgICAgY2FjaGVTdG9yYWdlKCkuc2V0Q2FjaGVEaXJlY3RvcnkocGF0aCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0RXhwb3J0cy5kZWYuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXRFeHBvcnRzLmRl
Zi5pbgkocmV2aXNpb24gMTUwNjM5KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViS2l0LnZjcHJv
ai9XZWJLaXRFeHBvcnRzLmRlZi5pbgkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCw5IEBA
IEVYUE9SVFMKICAgICAgICAgP2NoaWxkSXRlbVdpdGhUYXJnZXRASGlzdG9yeUl0ZW1AV2ViQ29y
ZUBAUUJFUEFWMTJAQUJWU3RyaW5nQFdURkBAQFoKICAgICAgICAgP2NyZWF0ZUBSYW5nZUBXZWJD
b3JlQEBTQT9BVj8kUGFzc1JlZlB0ckBWUmFuZ2VAV2ViQ29yZUBAQFdURkBAVj8kUGFzc1JlZlB0
ckBWRG9jdW1lbnRAV2ViQ29yZUBAQDRAVj8kUGFzc1JlZlB0ckBWTm9kZUBXZWJDb3JlQEBANEBI
MUhAWgogICAgICAgICA/Y3JlYXRlQFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUBXZWJDb3JlQEBTQT9B
Vj8kUGFzc1JlZlB0ckBWU2VyaWFsaXplZFNjcmlwdFZhbHVlQFdlYkNvcmVAQEBXVEZAQEFCVlN0
cmluZ0A0QEBaCisjaWYgVVNFKENGKQorICAgICAgICA/Y3JlYXRlQ0ZTdHJpbmdAU3RyaW5nQFdU
RkBAUUJFP0FWPyRSZXRhaW5QdHJAUEJVX19DRlN0cmluZ0BAQDJAWFoKKyNlbmRpZgogICAgICAg
ICA/Y3JlYXRlU2hhZG93Um9vdEBFbGVtZW50QFdlYkNvcmVAQFFBRT9BVj8kUGFzc1JlZlB0ckBW
U2hhZG93Um9vdEBXZWJDb3JlQEBAV1RGQEBBQUhAWgogICAgICAgICA/Y3JlYXRlV3JhcHBlckBX
ZWJDb3JlQEBZQT9BVkpTVmFsdWVASlNDQEBQQVZFeGVjU3RhdGVAM0BQQVZKU0RPTUdsb2JhbE9i
amVjdEAxQFBBVk5vZGVAMUBAWgogICAgICAgICA/ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9k
ZUBOb2RlQFdlYkNvcmVAQFFCRVBBVjEyQFhaCkBAIC0yMjIsNiArMjI1LDcgQEAgRVhQT1JUUwog
ICAgICAgICA/c2V0UHJvcGVydHlAU2V0dGluZ3NASW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bEBXZWJDb3JlQEBVQUVYQUJWU3RyaW5nQFdURkBAMEBaCiAgICAgICAgID93aW5kb3dPYmplY3RD
bGVhcmVkQEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxAV2ViQ29yZUBAVUFFWFhaCiAgICAg
ICAgID9zZXRSZXNvdXJjZXNEYXRhU2l6ZUxpbWl0c0Zyb21JbnRlcm5hbHNASW5zcGVjdG9yQ29u
dHJvbGxlckBXZWJDb3JlQEBRQUVYSEhAWgorICAgICAgICA/cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50QFdlYkNvcmVAQFlBP0FWU3RyaW5nQFdURkBAQUJWMjNAMEBaCiAgICAgICAgID9wcm9maWxl
ckVuYWJsZWRASW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3JlQEBRQUVfTlhaCiAgICAgICAgID9z
ZXRQcm9maWxlckVuYWJsZWRASW5zcGVjdG9yQ29udHJvbGxlckBXZWJDb3JlQEBRQUVYX05AWgog
ICAgICAgICA/ZGlzY29ubmVjdEZyb250ZW5kQEluc3BlY3RvckNvbnRyb2xsZXJAV2ViQ29yZUBA
UUFFWFhaCkBAIC0yMzcsNiArMjQxLDcgQEAgRVhQT1JUUwogICAgICAgICA/Zmlyc3RDaGlsZEBD
b21wb3NlZFNoYWRvd1RyZWVXYWxrZXJAV2ViQ29yZUBAUUFFWFhaCiAgICAgICAgID9sYXN0Q2hp
bGRAQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyQFdlYkNvcmVAQFFBRVhYWgogICAgICAgICA/bGVu
Z3RoQFN0YXRpY05vZGVMaXN0QFdlYkNvcmVAQFVCRUlYWgorICAgICAgICA/bG9jYWxVc2VyU3Bl
Y2lmaWNTdG9yYWdlRGlyZWN0b3J5QFdlYkNvcmVAQFlBP0FWU3RyaW5nQFdURkBAWFoKICAgICAg
ICAgP25hbWVkSXRlbUBTdGF0aWNOb2RlTGlzdEBXZWJDb3JlQEBVQkVQQVZOb2RlQDJAQUJWQXRv
bWljU3RyaW5nQFdURkBAQFoKICAgICAgICAgP25leHRAQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2Vy
QFdlYkNvcmVAQFFBRVhYWgogICAgICAgICA/cHJldmlvdXNAQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyQFdlYkNvcmVAQFFBRVhYWgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTUwNjYyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTMtMDUtMjQgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbmRvd3NdIEV4cG9zZSBkYXRhYmFz
ZSBzdG9yYWdlIGFuZCBjYWNoZSBsb2NhdGlvbnMgdmlhIHByZWZlcmVuY2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2NzI5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIER1bXBSZW5kZXJU
cmVlIHRvIHVzZSBDRlByZWZlcmVuY2VzIHRvIGNvbnRyb2wgd2hlcmUgV2ViS2l0CisgICAgICAg
IHN0b3JlcyBpdHMgbG9jYWwgZGF0YWJhc2VzLCBVUkwgY2FjaGVzLCBldGMuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAobGlicmFy
eVBhdGhGb3JEdW1wUmVuZGVyVHJlZSk6IEFkZGVkLgorICAgICAgICAoZGxsTGF1bmNoZXJFbnRy
eVBvaW50KTogU2V0IHVwIERSVC1zcGVjaWZpYyBjYWNoZSBsb2NhdGlvbnMuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9kcml2ZXJfdGVt
cGRpcik6IEFkZGVkICh0byBhbGxvdyBwb3J0LXNwZWNpZmljIG92ZXJsb2FkKS4KKyAgICAgICAg
KFBvcnQuX2RyaXZlcl90ZW1wZGlyX2Zvcl9lbnZpcm9ubWVudCk6IERpdHRvCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5fc2V0dXBf
ZW52aXJvbl9mb3JfZHJpdmVyKTogVXNlIG5ldyBvdmVybG9hZCB0byBzZXQKKyAgICAgICAgZW52
aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgIChEcml2ZXIuX3N0YXJ0KTogVXNlIG5ldyBvdmVy
bG9hZCBmb3IgdGVtcCBkaXJlY3RvcnkgbG9jYXRpb24uCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9wb3J0L3dpbi5weToKKyAgICAgICAgKFdpblBvcnQuX2RyaXZlcl90ZW1wZGlyX2Zvcl9l
bnZpcm9ubWVudCk6IE5ldyBvdmVybG9hZCB0byBzdXBwbHkKKyAgICAgICAgV2luZG93cyBwYXRo
IHRvIER1bXBSZW5kZXJUcmVlIGVudmlyb25tZW50ICh3aGlsZSBzdGlsbCB1c2luZworICAgICAg
ICBjeWd3aW4gcGF0aHMgZm9yIGludGVybmFsIG9wZXJhdGlvbnMuCisKIDIwMTMtMDUtMjQgIEJl
bSBKb25lcy1CZXkgIDxiam9uZXNiZUBhZG9iZS5jb20+CiAKICAgICAgICAgTWFrZSB0ZWFtLmh0
bWwgaGF2ZSBlYWNoIGNvbnRyaWJ1dG9yJ3MgYXJlYSBvZiBleHBlcnRpc2UKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTUwNjM5
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTUgKzU0LDEzIEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYktpdC9X
ZWJLaXQuaD4KICNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Q09NQVBJLmg+CiAKICNpZiBVU0UoQ0ZO
RVRXT1JLKQotI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENhY2hlUHJpdi5oPgotI2VuZGlmCi0K
LSNpZiBVU0UoQ0ZORVRXT1JLKQogI2luY2x1ZGUgPENGTmV0d29yay9DRkhUVFBDb29raWVzUHJp
di5oPgorI2luY2x1ZGUgPENGTmV0d29yay9DRlVSTENhY2hlUHJpdi5oPgogI2VuZGlmCiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC03NCw4ICs3MiwxMyBAQCBjb25zdCBMUFdTVFIgVGVzdFBs
dWdpbkRpciA9IEwiVGVzdE5ldHNjCiAjZW5kaWYKIAogc3RhdGljIExQQ1dTVFIgZm9udHNFbnZp
cm9ubWVudFZhcmlhYmxlID0gTCJXRUJLSVRfVEVTVEZPTlRTIjsKK3N0YXRpYyBMUENXU1RSIGR1
bXBSZW5kZXJUcmVlVGVtcCA9IEwiRFVNUFJFTkRFUlRSRUVfVEVNUCI7CiAjZGVmaW5lIFVTRV9N
QUNfRk9OVFMKIAorc3RhdGljIENGU3RyaW5nUmVmIFdlYkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVs
dHNLZXkgPSBDRlNUUigiV2ViRGF0YWJhc2VEaXJlY3RvcnkiKTsKK3N0YXRpYyBDRlN0cmluZ1Jl
ZiBXZWJLaXRMb2NhbENhY2hlRGVmYXVsdHNLZXkgPSBDRlNUUigiV2ViS2l0TG9jYWxDYWNoZSIp
Oworc3RhdGljIENGU3RyaW5nUmVmIFdlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleSA9IENG
U1RSKCJXZWJLaXRMb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGhQcmVmZXJlbmNlS2V5Iik7CisKIGNv
bnN0IExQQ1dTVFIga0R1bXBSZW5kZXJUcmVlQ2xhc3NOYW1lID0gTCJEdW1wUmVuZGVyVHJlZVdp
bmRvdyI7CiAKIHN0YXRpYyBib29sIGR1bXBUcmVlID0gdHJ1ZTsKQEAgLTE5MSw2ICsxOTQsMjIg
QEAgc3RhdGljIHN0cmluZyB0b1VURjgoY29uc3Qgd2NoYXJfdCogd2lkZQogICAgIHJldHVybiBz
dHJpbmcodXRmOFZlY3Rvci5kYXRhKCksIHV0ZjhWZWN0b3Iuc2l6ZSgpIC0gMSk7CiB9CiAKKyNp
ZiBVU0UoQ0YpCitzdGF0aWMgV1RGOjpTdHJpbmcgbGlicmFyeVBhdGhGb3JEdW1wUmVuZGVyVHJl
ZSgpCit7CisgICAgRFdPUkQgc2l6ZSA9IDo6R2V0RW52aXJvbm1lbnRWYXJpYWJsZShkdW1wUmVu
ZGVyVHJlZVRlbXAsIDAsIDApOworICAgIFZlY3RvcjxUQ0hBUj4gYnVmZmVyKHNpemUpOworICAg
IGlmICg6OkdldEVudmlyb25tZW50VmFyaWFibGUoZHVtcFJlbmRlclRyZWVUZW1wLCBidWZmZXIu
ZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSkgeworICAgICAgICB3c3RyaW5nIHBhdGggPSBidWZmZXIu
ZGF0YSgpOworICAgICAgICBpZiAoIXBhdGguZW1wdHkoKSAmJiAocGF0aFtwYXRoLmxlbmd0aCgp
IC0gMV0gIT0gTCdcXCcpKQorICAgICAgICAgICAgcGF0aC5hcHBlbmQoTCJcXCIpOworICAgICAg
ICByZXR1cm4gV1RGOjpTdHJpbmcgKHBhdGguZGF0YSgpLCBwYXRoLmxlbmd0aCgpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gV2ViQ29yZTo6bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5
KCk7Cit9CisjZW5kaWYKKwogc3RyaW5nIHRvVVRGOChCU1RSIGJzdHIpCiB7CiAgICAgcmV0dXJu
IHRvVVRGOChic3RyLCBTeXNTdHJpbmdMZW4oYnN0cikpOwpAQCAtMTI3NSw2ICsxMjk0LDE0IEBA
IGV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxleHBvcnQpIGludCBXSU4KICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCisjaWYgVVNFKENGKQorICAgIC8vIFNldCB1cCB0aGVzZSB2YWx1ZXMgYmVm
b3JlIGNyZWF0aW5nIHRoZSBXZWJWaWV3IHNvIHRoYXQgdGhlIHZhcmlvdXMgaW5pdGlhbGl6YXRp
b25zIHdpbGwgc2VlIHRoZXNlIHByZWZlcnJlZCB2YWx1ZXMuCisgICAgV1RGOjpTdHJpbmcgcGF0
aCA9IGxpYnJhcnlQYXRoRm9yRHVtcFJlbmRlclRyZWUoKTsKKyAgICBDRlByZWZlcmVuY2VzU2V0
QXBwVmFsdWUoV2ViRGF0YWJhc2VEaXJlY3RvcnlEZWZhdWx0c0tleSwgV2ViQ29yZTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsICJEYXRhYmFzZXMiKS5jcmVhdGVDRlN0cmluZygpLmdl
dCgpLCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbik7CisgICAgQ0ZQcmVmZXJlbmNl
c1NldEFwcFZhbHVlKFdlYlN0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleSwgV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsICJMb2NhbFN0b3JhZ2UiKS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpLCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRBcHBsaWNhdGlvbik7CisgICAgQ0ZQcmVm
ZXJlbmNlc1NldEFwcFZhbHVlKFdlYktpdExvY2FsQ2FjaGVEZWZhdWx0c0tleSwgV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsICJMb2NhbENhY2hlIikuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSwga0NGUHJlZmVyZW5jZXNDdXJyZW50QXBwbGljYXRpb24pOworI2VuZGlmCisK
ICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXcoQWRvcHRDT00sIGNyZWF0ZVdlYlZpZXdBbmRP
ZmZzY3JlZW5XaW5kb3coJndlYlZpZXdXaW5kb3cpKTsKICAgICBpZiAoIXdlYlZpZXcpCiAgICAg
ICAgIHJldHVybiAtMTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZp
c2lvbiAxNTA2MzkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29y
a2luZyBjb3B5KQpAQCAtMTI2NSw2ICsxMjY1LDEyIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0ZXN0IGRyaXZlciAoRHVtcFJl
bmRlclRyZWUpLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChzZWxmLmRyaXZl
cl9uYW1lKCkpCiAKKyAgICBkZWYgX2RyaXZlcl90ZW1wZGlyKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fZmlsZXN5c3RlbS5ta2R0ZW1wKHByZWZpeD0nJXMtJyAlIHNlbGYuZHJpdmVyX25h
bWUoKSkKKworICAgIGRlZiBfZHJpdmVyX3RlbXBkaXJfZm9yX2Vudmlyb25tZW50KHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyX3RlbXBkaXIoKQorCiAgICAgZGVmIF9wYXRoX3Rv
X3dlYmNvcmVfbGlicmFyeShzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgZnVsbCBwYXRo
IHRvIGEgYnVpbHQgY29weSBvZiBXZWJDb3JlLiIiIgogICAgICAgICByZXR1cm4gTm9uZQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAxNTA2MzkpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yODQsNyArMjg0LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVudmlyb25t
ZW50WydEWUxEX0xJQlJBUllfUEFUSCddID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpCiAgICAg
ICAgIGVudmlyb25tZW50WydEWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKCkKICAgICAgICAgIyBGSVhNRTogV2UncmUgYXNzdW1pbmcgdGhhdCBXZWJLaXRUZXN0
UnVubmVyIGNoZWNrcyB0aGlzIER1bXBSZW5kZXJUcmVlLW5hbWVkIGVudmlyb25tZW50IHZhcmlh
YmxlLgotICAgICAgICBlbnZpcm9ubWVudFsnRFVNUFJFTkRFUlRSRUVfVEVNUCddID0gc3RyKHNl
bGYuX2RyaXZlcl90ZW1wZGlyKQorICAgICAgICBlbnZpcm9ubWVudFsnRFVNUFJFTkRFUlRSRUVf
VEVNUCddID0gc3RyKHNlbGYuX3BvcnQuX2RyaXZlcl90ZW1wZGlyX2Zvcl9lbnZpcm9ubWVudCgp
KQogICAgICAgICBlbnZpcm9ubWVudFsnTE9DQUxfUkVTT1VSQ0VfUk9PVCddID0gc2VsZi5fcG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAgaWYgJ1dFQktJVE9VVFBVVERJUicgaW4gb3Mu
ZW52aXJvbjoKICAgICAgICAgICAgIGVudmlyb25tZW50WydXRUJLSVRPVVRQVVRESVInXSA9IG9z
LmVudmlyb25bJ1dFQktJVE9VVFBVVERJUiddCkBAIC0yOTQsNyArMjk0LDcgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3N0YXJ0KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVz
dF9hcmdzKToKICAgICAgICAgc2VsZi5zdG9wKCkKLSAgICAgICAgc2VsZi5fZHJpdmVyX3RlbXBk
aXIgPSBzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLm1rZHRlbXAocHJlZml4PSclcy0nICUgc2VsZi5f
cG9ydC5kcml2ZXJfbmFtZSgpKQorICAgICAgICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IHNlbGYu
X3BvcnQuX2RyaXZlcl90ZW1wZGlyKCkKICAgICAgICAgc2VydmVyX25hbWUgPSBzZWxmLl9wb3J0
LmRyaXZlcl9uYW1lKCkKICAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLl9wb3J0LnNldHVwX2Vu
dmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKICAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxm
Ll9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC93aW4ucHkJKHJldmlzaW9uIDE1MDYzOSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC93aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgaW1wb3J0
IHN5cwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lz
dGVtSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2Ny
aXB0RXJyb3IsIEV4ZWN1dGl2ZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBhdGggaW1w
b3J0IGFic3BhdGhfdG9fdXJpCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBv
cnQgYWJzcGF0aF90b191cmksIGN5Z3BhdGgKIGZyb20gd2Via2l0cHkucG9ydC5hcHBsZSBpbXBv
cnQgQXBwbGVQb3J0CiAKIApAQCAtMTE1LDMgKzExNSw2IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQ
b3J0KToKICAgICAjIFJlbW92ZSB0aGlzIGltcGxlbWVudGF0aW9uIHdoZW4gd2UgYXJlIGNvbmZp
ZGVudCB0aGF0IER1bXBSZW5kZXJUcmVlIG9uIFdpbmRvd3Mgd29ya3MgcHJvcGVybHkgaW4gcGFy
YWxsZWwuCiAgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gMQorCisgICAgZGVmIF9kcml2ZXJfdGVtcGRpcl9mb3JfZW52aXJvbm1lbnQoc2VsZik6
CisgICAgICAgIHJldHVybiBjeWdwYXRoKHNlbGYuX2RyaXZlcl90ZW1wZGlyKCkpCg==
</data>
<flag name="review"
          id="224271"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>