<?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>116150</bug_id>
          
          <creation_ts>2013-05-15 06:38:01 -0700</creation_ts>
          <short_desc>[Curl] Unable to download files.</short_desc>
          <delta_ts>2013-05-31 22:41:34 -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>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter>peavo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>889259</commentid>
    <comment_count>0</comment_count>
    <who name="">peavo</who>
    <bug_when>2013-05-15 06:38:01 -0700</bug_when>
    <thetext>For Curl, the WebDownload class (WebDownloadCurl.cpp) is not implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889282</commentid>
    <comment_count>1</comment_count>
      <attachid>201829</attachid>
    <who name="">peavo</who>
    <bug_when>2013-05-15 07:34:10 -0700</bug_when>
    <thetext>Created attachment 201829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894939</commentid>
    <comment_count>2</comment_count>
      <attachid>203200</attachid>
    <who name="">peavo</who>
    <bug_when>2013-05-29 07:16:51 -0700</bug_when>
    <thetext>Created attachment 203200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>894942</commentid>
    <comment_count>3</comment_count>
    <who name="">peavo</who>
    <bug_when>2013-05-29 07:18:25 -0700</bug_when>
    <thetext>Modified the patch slightly by including a crash fix, and creating a new header file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895782</commentid>
    <comment_count>4</comment_count>
      <attachid>203200</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-30 22:39:40 -0700</bug_when>
    <thetext>Comment on attachment 203200
Patch

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

Very nice!  I had a few minor style/nit-picky comments, but this looks great.  I do feel that we should place the &quot;CurlDownload&quot; class should be in its own set of files.  It might make sense for the CurlDownload class to live in WebCore (platform/network/curl).

&gt; Source/WebKit/win/ChangeLog:11
&gt; +        (CurlDownloadManager):

I would get rid of all of these method call-outs.  The whole file is new, so no point listing them individually.

&gt; Source/WebKit/win/ChangeLog:33
&gt; +        (CurlDownloadManager::CurlDownloadManager):

I think this should be in its own file.  I know this means we touch the project files, but I think putting them in the same file is worse.

&gt; Source/WebKit/win/WebDownloadCurl.cpp:208
&gt; +// CurlDownloadManager -------------------------------------------------------------------

This should be in its own file.

&gt; Source/WebKit/win/WebDownloadCurl.cpp:458
&gt; +    if (!m_destination.isEmpty())

Preference: I really prefer to handle the &quot;no work&quot; case as an early return.  I know this method only has one line, but in my mind early return clarifies that if the destination file name is empty, we do nothing.  As it&apos;s written, it&apos;s clear that we don&apos;t move the file when the name is empty, but it leaves open the possibility that other work might be done in this method if the file name was empty.

&gt; Source/WebKit/win/WebDownloadCurl.cpp:459
&gt; +        MoveFile(m_tempPath.charactersWithNullTermination(), m_destination.charactersWithNullTermination());

Nit: We try to expose Win API calls with the global namespace, i.e., &quot;::MoveFile&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895860</commentid>
    <comment_count>5</comment_count>
      <attachid>203435</attachid>
    <who name="">peavo</who>
    <bug_when>2013-05-31 04:44:38 -0700</bug_when>
    <thetext>Created attachment 203435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895862</commentid>
    <comment_count>6</comment_count>
    <who name="">peavo</who>
    <bug_when>2013-05-31 05:02:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 203200 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203200&amp;action=review
&gt; 

Thanks for reviewing! I updated the patch according to your comments.
The files CurlDownload.h/cpp were added to the WebCore/platform/network/curl folder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896055</commentid>
    <comment_count>7</comment_count>
      <attachid>203435</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-31 22:19:57 -0700</bug_when>
    <thetext>Comment on attachment 203435
Patch

Looks great!  Thanks for making the changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896058</commentid>
    <comment_count>8</comment_count>
      <attachid>203435</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-31 22:41:33 -0700</bug_when>
    <thetext>Comment on attachment 203435
Patch

Clearing flags on attachment: 203435

Committed r151067: &lt;http://trac.webkit.org/changeset/151067&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896059</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-31 22:41:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201829</attachid>
            <date>2013-05-15 07:34:10 -0700</date>
            <delta_ts>2013-05-29 07:16:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116150-20130515163257.patch</filename>
            <type>text/plain</type>
            <size>20684</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDEwOCkKKysrIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEzLTA1LTE1
ICBwZWF2b0BvdXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtDdXJs
XSBVbmFibGUgdG8gZG93bmxvYWQgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYxNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBiYXNpYyBkb3dubG9hZCBmdW5jdGlvbmFs
aXR5IHVzaW5nIEN1cmwuCisKKyAgICAgICAgKiBXZWJEb3dubG9hZC5oOgorICAgICAgICAoV2Vi
RG93bmxvYWQpOgorICAgICAgICAqIFdlYkRvd25sb2FkQ3VybC5jcHA6CisgICAgICAgIChDdXJs
RG93bmxvYWRNYW5hZ2VyKToKKyAgICAgICAgKEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldE11bHRp
SGFuZGxlKToKKyAgICAgICAgKEN1cmxEb3dubG9hZE1hbmFnZXI6OnJ1blRocmVhZCk6CisgICAg
ICAgIChDdXJsRG93bmxvYWRNYW5hZ2VyOjpzZXRSdW5UaHJlYWQpOgorICAgICAgICAoQ3VybERv
d25sb2FkKToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6ZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSk6
CisgICAgICAgIChDdXJsRG93bmxvYWQ6OnNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmUpOgorICAg
ICAgICAoV2ViRG93bmxvYWQ6OmluaXQpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OnN0YXJ0KToK
KyAgICAgICAgKFdlYkRvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OmRl
bGV0ZXNGaWxlVXBvbkZhaWx1cmUpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OnNldERlbGV0ZXNG
aWxlVXBvbkZhaWx1cmUpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OnNldERlc3RpbmF0aW9uKToK
KyAgICAgICAgKFdlYkRvd25sb2FkOjp1c2VDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkRvd25s
b2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OmRpZFJlY2Vp
dmVEYXRhT2ZMZW5ndGgpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAg
ICAgIChXZWJEb3dubG9hZDo6ZGlkRmFpbCk6CisgICAgICAgIChDdXJsRG93bmxvYWRNYW5hZ2Vy
OjpDdXJsRG93bmxvYWRNYW5hZ2VyKToKKyAgICAgICAgKEN1cmxEb3dubG9hZE1hbmFnZXI6On5D
dXJsRG93bmxvYWRNYW5hZ2VyKToKKyAgICAgICAgKEN1cmxEb3dubG9hZE1hbmFnZXI6OmFkZCk6
CisgICAgICAgIChDdXJsRG93bmxvYWRNYW5hZ2VyOjpyZW1vdmUpOgorICAgICAgICAoQ3VybERv
d25sb2FkTWFuYWdlcjo6Z2V0QWN0aXZlRG93bmxvYWRDb3VudCk6CisgICAgICAgIChDdXJsRG93
bmxvYWRNYW5hZ2VyOjpnZXRQZW5kaW5nRG93bmxvYWRDb3VudCk6CisgICAgICAgIChDdXJsRG93
bmxvYWRNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKToKKyAgICAgICAgKEN1cmxEb3dubG9h
ZE1hbmFnZXI6OnN0b3BUaHJlYWQpOgorICAgICAgICAoQ3VybERvd25sb2FkTWFuYWdlcjo6c3Rv
cFRocmVhZElmSWRsZSk6CisgICAgICAgIChDdXJsRG93bmxvYWRNYW5hZ2VyOjp1cGRhdGVIYW5k
bGVMaXN0KToKKyAgICAgICAgKEN1cmxEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkVGhyZWFkKToK
KyAgICAgICAgKEN1cmxEb3dubG9hZDo6Q3VybERvd25sb2FkKToKKyAgICAgICAgKEN1cmxEb3du
bG9hZDo6fkN1cmxEb3dubG9hZCk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmluaXQpOgorICAg
ICAgICAoQ3VybERvd25sb2FkOjpzdGFydCk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmNhbmNl
bCk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmdldFRlbXBQYXRoKToKKyAgICAgICAgKEN1cmxE
b3dubG9hZDo6Z2V0VXJsKToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6Z2V0UmVzcG9uc2UpOgor
ICAgICAgICAoQ3VybERvd25sb2FkOjpjbG9zZUZpbGUpOgorICAgICAgICAoQ3VybERvd25sb2Fk
OjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZURh
dGEpOgorICAgICAgICAoQ3VybERvd25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoQ3VybERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKToKKyAgICAgICAgKEN1cmxE
b3dubG9hZDo6ZGlkRmluaXNoKToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6ZGlkRmFpbCk6Cisg
ICAgICAgIChDdXJsRG93bmxvYWQ6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoQ3VybERvd25s
b2FkOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmRvd25sb2FkRmlu
aXNoZWRDYWxsYmFjayk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmRvd25sb2FkRmFpbGVkQ2Fs
bGJhY2spOgorICAgICAgICAoQ3VybERvd25sb2FkOjpyZWNlaXZlZERhdGFDYWxsYmFjayk6Cisg
ICAgICAgIChDdXJsRG93bmxvYWQ6OnJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayk6CisKIDIwMTMt
MDUtMTIgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB1cGRhdGluZyB0aGUgV2ViIEluc3BlY3RvciB0b29sYmFyIGhlaWdodC4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQuaAkocmV2aXNpb24gMTQ5ODYxKQorKysgU291cmNl
L1dlYktpdC93aW4vV2ViRG93bmxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBA
QAogCiAjaWYgVVNFKENGTkVUV09SSykKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxEb3dubG9h
ZFByaXYuaD4KKyNlbGlmIFVTRShDVVJMKQorY2xhc3MgQ3VybERvd25sb2FkOwogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExOSw2ICsxMjEsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oQ0ZVUkxSZWYpOwogICAgIHZvaWQgZGlkRmluaXNoKCk7
CiAgICAgdm9pZCBkaWRGYWlsKENGRXJyb3JSZWYpOworI2VsaWYgVVNFKENVUkwpCisgICAgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhT2ZMZW5ndGgo
aW50IHNpemUpOworICAgIHZvaWQgZGlkRmluaXNoKCk7CisgICAgdm9pZCBkaWRGYWlsKCk7CiAj
ZW5kaWYKIAogcHJvdGVjdGVkOgpAQCAtMTI4LDYgKzEzNSw4IEBAIHByb3RlY3RlZDoKICAgICBX
VEY6OlN0cmluZyBtX2J1bmRsZVBhdGg7CiAjaWYgVVNFKENGTkVUV09SSykKICAgICBSZXRhaW5Q
dHI8Q0ZVUkxEb3dubG9hZFJlZj4gbV9kb3dubG9hZDsKKyNlbGlmIFVTRShDVVJMKQorICAgIEN1
cmxEb3dubG9hZCogbV9kb3dubG9hZDsKICNlbmRpZgogICAgIENPTVB0cjxJV2ViTXV0YWJsZVVS
TFJlcXVlc3Q+IG1fcmVxdWVzdDsKICAgICBDT01QdHI8SVdlYkRvd25sb2FkRGVsZWdhdGU+IG1f
ZGVsZWdhdGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZEN1cmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ3VybC5jcHAJKHJldmlz
aW9uIDE0OTg2MSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ3VybC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXZWJVUkxDcmVkZW50aWFs
LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCkBAIC00NSwxNSArNDYsMTE1IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAK
ICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0
ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9NYWluVGhyZWFkVGFzay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N5
c3RlbVRpbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RocmVhZEdsb2JhbERhdGEuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RocmVhZFRpbWVycy5oPgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisKKyNpbmNsdWRl
IDxjdXJsL2N1cmwuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3RlbXBsYXRlPD4g
c3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIEN1cmxEb3dubG9hZCo+
IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8Q3VybERvd25sb2FkKj4gewor
fTsKKworY2xhc3MgQ3VybERvd25sb2FkTWFuYWdlciB7CitwdWJsaWM6CisgICAgQ3VybERvd25s
b2FkTWFuYWdlcigpOworICAgIH5DdXJsRG93bmxvYWRNYW5hZ2VyKCk7CisKKyAgICBib29sIGFk
ZChDVVJMKiBjdXJsSGFuZGxlKTsKKyAgICBib29sIHJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKTsK
KworICAgIGludCBnZXRBY3RpdmVEb3dubG9hZENvdW50KCkgY29uc3Q7CisgICAgaW50IGdldFBl
bmRpbmdEb3dubG9hZENvdW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFydFRo
cmVhZElmTmVlZGVkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisgICAgdm9pZCBzdG9wVGhy
ZWFkSWZJZGxlKCk7CisKKyAgICB2b2lkIHVwZGF0ZUhhbmRsZUxpc3QoKTsKKworICAgIENVUkxN
KiBnZXRNdWx0aUhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VybE11bHRpSGFuZGxlOyB9CisK
KyAgICBib29sIHJ1blRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuVGhyZWFkOyB9CisgICAg
dm9pZCBzZXRSdW5UaHJlYWQoYm9vbCBydW5UaHJlYWQpIHsgbV9ydW5UaHJlYWQgPSBydW5UaHJl
YWQ7IH0KKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkVGhyZWFkKHZvaWQqIGRhdGEpOworCisg
ICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkOworICAgIENVUkxNKiBtX2N1cmxNdWx0aUhh
bmRsZTsKKyAgICBpbnQgbV9hY3RpdmVEb3dubG9hZENvdW50OworICAgIFZlY3RvcjxDVVJMKj4g
bV9wZW5kaW5nSGFuZGxlTGlzdDsKKyAgICBWZWN0b3I8Q1VSTCo+IG1fcmVtb3ZlZEhhbmRsZUxp
c3Q7CisgICAgbXV0YWJsZSBNdXRleCBtX211dGV4OworICAgIGJvb2wgbV9ydW5UaHJlYWQ7Cit9
OworCitjbGFzcyBDdXJsRG93bmxvYWQgeworcHVibGljOgorICAgIEN1cmxEb3dubG9hZCgpOwor
ICAgIH5DdXJsRG93bmxvYWQoKTsKKworICAgIHZvaWQgaW5pdChXZWJEb3dubG9hZCosIGNvbnN0
IEtVUkwmKTsKKyAgICBib29sIHN0YXJ0KCk7CisgICAgYm9vbCBjYW5jZWwoKTsKKworICAgIFN0
cmluZyBnZXRUZW1wUGF0aCgpIGNvbnN0OworICAgIFN0cmluZyBnZXRVcmwoKSBjb25zdDsKKyAg
ICBSZXNvdXJjZVJlc3BvbnNlIGdldFJlc3BvbnNlKCkgY29uc3Q7CisKKyAgICBib29sIGRlbGV0
ZXNGaWxlVXBvbkZhaWx1cmUoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZXNGaWxlVXBvbkZhaWx1
cmU7IH0KKyAgICB2b2lkIHNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmUoYm9vbCBkZWxldGVzRmls
ZVVwb25GYWlsdXJlKSB7IG1fZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSA9IGRlbGV0ZXNGaWxlVXBv
bkZhaWx1cmU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNsb3NlRmlsZSgpOworCisgICAgLy8g
Q2FsbGVkIG9uIGRvd25sb2FkIHRocmVhZC4KKyAgICB2b2lkIGRpZFJlY2VpdmVIZWFkZXIoY29u
c3QgU3RyaW5nJiBoZWFkZXIpOworICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEodm9pZCogZGF0YSwg
aW50IHNpemUpOworCisgICAgLy8gQ2FsbGVkIG9uIG1haW4gdGhyZWFkLgorICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKGludCBz
aXplKTsKKyAgICB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZvaWQgZGlkRmFpbCgpOworCisgICAg
c3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90LCBzaXplX3Qgbm1l
bWIsIHZvaWQqIGRhdGEpOworICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciog
cHRyLCBzaXplX3QsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSk7CisKKyAgICBzdGF0aWMgdm9p
ZCBkb3dubG9hZEZpbmlzaGVkQ2FsbGJhY2soQ3VybERvd25sb2FkKik7CisgICAgc3RhdGljIHZv
aWQgZG93bmxvYWRGYWlsZWRDYWxsYmFjayhDdXJsRG93bmxvYWQqKTsKKyAgICBzdGF0aWMgdm9p
ZCByZWNlaXZlZERhdGFDYWxsYmFjayhDdXJsRG93bmxvYWQqLCBpbnQgc2l6ZSk7CisgICAgc3Rh
dGljIHZvaWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKEN1cmxEb3dubG9hZCopOworCisgICAg
Q1VSTCogbV9jdXJsSGFuZGxlOworICAgIGNoYXIqIG1fdXJsOworICAgIFdlYkRvd25sb2FkKiBt
X3dlYkRvd25sb2FkOworICAgIFN0cmluZyBtX3RlbXBQYXRoOworICAgIFBsYXRmb3JtRmlsZUhh
bmRsZSBtX3RlbXBIYW5kbGU7CisgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAg
IGJvb2wgbV9kZWxldGVzRmlsZVVwb25GYWlsdXJlOworICAgIG11dGFibGUgTXV0ZXggbV9tdXRl
eDsKKworICAgIHN0YXRpYyBDdXJsRG93bmxvYWRNYW5hZ2VyIG1fZG93bmxvYWRNYW5hZ2VyOwor
CisgICAgZnJpZW5kIGNsYXNzIEN1cmxEb3dubG9hZE1hbmFnZXI7Cit9OworCiAvLyBXZWJEb3du
bG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIHZvaWQgV2ViRG93bmxvYWQ6OmluaXQoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgSVdlYkRvd25sb2FkRGVsZWdhdGUqIGRlbGVnYXRlKQpAQCAtNjMsNyAr
MTY0LDEyIEBAIHZvaWQgV2ViRG93bmxvYWQ6OmluaXQoUmVzb3VyY2VIYW5kbGUqIGgKIAogdm9p
ZCBXZWJEb3dubG9hZDo6aW5pdChjb25zdCBLVVJMJiB1cmwsIElXZWJEb3dubG9hZERlbGVnYXRl
KiBkZWxlZ2F0ZSkKIHsKLSAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kZWxlZ2F0ZSA9IGRl
bGVnYXRlOworCisgICAgbV9kb3dubG9hZCA9IG5ldyBDdXJsRG93bmxvYWQoKTsKKworICAgIGlm
IChtX2Rvd25sb2FkKQorICAgICAgICBtX2Rvd25sb2FkLT5pbml0KHRoaXMsIHVybCk7CiB9CiAK
IC8vIElXZWJEb3dubG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NiwxNCArMTkyLDIxIEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmkKIAogSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJEb3dubG9hZDo6c3RhcnQoKQogewotICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgIHJl
dHVybiBFX0ZBSUw7CisgICAgaWYgKCFtX2Rvd25sb2FkIHx8ICFtX2Rvd25sb2FkLT5zdGFydCgp
KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAg
IG1fZGVsZWdhdGUtPmRpZEJlZ2luKHRoaXMpOworCisgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmNhbmNlbCgpCiB7Ci0gICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgcmV0dXJuIEVfRkFJTDsKKyAgICBpZiAoIW1fZG93bmxvYWQgfHwg
IW1fZG93bmxvYWQtPmNhbmNlbCgpKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgcmV0
dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmNh
bmNlbEZvclJlc3VtZSgpCkBAIC0xMDUsMjMgKzIxOCwzMCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkRvd25sb2FkOjpjCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25s
b2FkOjpkZWxldGVzRmlsZVVwb25GYWlsdXJlKAogICAgICAgICAvKiBbb3V0LCByZXR2YWxdICov
IEJPT0wqIHJlc3VsdCkKIHsKLSAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICByZXR1cm4gRV9GQUlM
OworICAgIGlmIChtX2Rvd25sb2FkKSB7CisgICAgICAgICpyZXN1bHQgPSBtX2Rvd25sb2FkLT5k
ZWxldGVzRmlsZVVwb25GYWlsdXJlKCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgIHJldHVybiBT
X09LOworICAgIH0KKyAgICByZXR1cm4gRV9GQUlMOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkRvd25sb2FkOjpzZXREZWxldGVzRmlsZVVwb25GYWlsdXJlKAogICAgICAgICAv
KiBbaW5dICovIEJPT0wgZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSkKIHsKLSAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICByZXR1cm4gRV9GQUlMOworICAgIGlmIChtX2Rvd25sb2FkKSB7CisgICAgICAg
IG1fZG93bmxvYWQtPnNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmUoZGVsZXRlc0ZpbGVVcG9uRmFp
bHVyZSk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAgICByZXR1cm4gRV9GQUlMOwog
fQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpzZXREZXN0aW5hdGlv
bigKICAgICAgICAgLyogW2luXSAqLyBCU1RSIHBhdGgsIAogICAgICAgICAvKiBbaW5dICovIEJP
T0wgYWxsb3dPdmVyd3JpdGUpCiB7Ci0gICBub3RJbXBsZW1lbnRlZCgpOwotICAgcmV0dXJuIEVf
RkFJTDsKKyAgICBzaXplX3QgbGVuID0gd2NzbGVuKHBhdGgpOworICAgIG1fZGVzdGluYXRpb24g
PSBTdHJpbmcocGF0aCwgbGVuKTsKKyAgICByZXR1cm4gU19PSzsKIH0KIAogLy8gSVdlYlVSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0NywzICsyNjcsNDEx
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OnUKICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICByZXR1cm4gRV9GQUlMOwogfQorCit2b2lkIFdlYkRvd25sb2FkOjpkaWRS
ZWNlaXZlUmVzcG9uc2UoKQoreworICAgIGlmIChtX2RlbGVnYXRlKSB7CisgICAgICAgIENPTVB0
cjxXZWJVUkxSZXNwb25zZT4gd2ViUmVzcG9uc2UoQWRvcHRDT00sIFdlYlVSTFJlc3BvbnNlOjpj
cmVhdGVJbnN0YW5jZShtX2Rvd25sb2FkLT5nZXRSZXNwb25zZSgpKSk7CisgICAgICAgIG1fZGVs
ZWdhdGUtPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCB3ZWJSZXNwb25zZS5nZXQoKSk7CisKKyAg
ICAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lID0gcGF0aEdldEZpbGVOYW1lKG1fZG93bmxv
YWQtPmdldFVybCgpKTsKKyAgICAgICAgQlN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZUJTVFIoc3Vn
Z2VzdGVkRmlsZW5hbWUuY2hhcmFjdGVycygpLCBzdWdnZXN0ZWRGaWxlbmFtZS5sZW5ndGgoKSk7
CisgICAgICAgIG1fZGVsZWdhdGUtPmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lKHRoaXMsIHN1Z2dlc3RlZEZpbGVuYW1lQlNUUik7CisgICAgfQorfQorCit2b2lkIFdlYkRv
d25sb2FkOjpkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKGludCBzaXplKQoreworICAgIGlmIChtX2Rl
bGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5kaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKHRoaXMs
IHNpemUpOworfQorCit2b2lkIFdlYkRvd25sb2FkOjpkaWRGaW5pc2goKQoreworICAgIGlmICht
X2Rvd25sb2FkKSB7CisgICAgICAgIFN0cmluZyB0ZW1wUGF0aCA9IG1fZG93bmxvYWQtPmdldFRl
bXBQYXRoKCk7CisKKyAgICAgICAgTW92ZUZpbGUodGVtcFBhdGguY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgbV9kZXN0aW5hdGlvbi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpKTsKKyAgICB9CisKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+
ZGlkRmluaXNoKHRoaXMpOworCisgICAgQ3VybERvd25sb2FkKiBkb3dubG9hZCA9IG1fZG93bmxv
YWQ7CisgICAgbV9kb3dubG9hZCA9IDA7CisgICAgZGVsZXRlIGRvd25sb2FkOworfQorCit2b2lk
IFdlYkRvd25sb2FkOjpkaWRGYWlsKCkKK3sKKyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAg
bV9kZWxlZ2F0ZS0+ZGlkRmFpbFdpdGhFcnJvcih0aGlzLCAwKTsKKworICAgIEN1cmxEb3dubG9h
ZCogZG93bmxvYWQgPSBtX2Rvd25sb2FkOworICAgIG1fZG93bmxvYWQgPSAwOworICAgIGRlbGV0
ZSBkb3dubG9hZDsKK30KKworLy8gQ3VybERvd25sb2FkTWFuYWdlciAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1
cmxEb3dubG9hZE1hbmFnZXI6OkN1cmxEb3dubG9hZE1hbmFnZXIoKQorOiBtX3RocmVhZElkKDAp
CissIG1fY3VybE11bHRpSGFuZGxlKDApCissIG1fYWN0aXZlRG93bmxvYWRDb3VudCgwKQorLCBt
X3J1blRocmVhZChmYWxzZSkKK3sKKyAgICBjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FM
TCk7CisgICAgbV9jdXJsTXVsdGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKK30KKworQ3Vy
bERvd25sb2FkTWFuYWdlcjo6fkN1cmxEb3dubG9hZE1hbmFnZXIoKQoreworICAgIHN0b3BUaHJl
YWQoKTsKKyAgICBjdXJsX211bHRpX2NsZWFudXAobV9jdXJsTXVsdGlIYW5kbGUpOworICAgIGN1
cmxfZ2xvYmFsX2NsZWFudXAoKTsKK30KKworYm9vbCBDdXJsRG93bmxvYWRNYW5hZ2VyOjphZGQo
Q1VSTCogY3VybEhhbmRsZSkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisK
KyAgICBtX3BlbmRpbmdIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFuZGxlKTsKKyAgICBzdGFydFRo
cmVhZElmTmVlZGVkKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDdXJsRG93bmxv
YWRNYW5hZ2VyOjpyZW1vdmUoQ1VSTCogY3VybEhhbmRsZSkKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7CisKKyAgICBtX3JlbW92ZWRIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFu
ZGxlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgQ3VybERvd25sb2FkTWFuYWdlcjo6
Z2V0QWN0aXZlRG93bmxvYWRDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0aXZlRG93
bmxvYWRDb3VudDsKK30KKworaW50IEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldFBlbmRpbmdEb3du
bG9hZENvdW50KCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Cisg
ICAgcmV0dXJuIG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOworfQorCit2b2lkIEN1cmxEb3du
bG9hZE1hbmFnZXI6OnN0YXJ0VGhyZWFkSWZOZWVkZWQoKQoreworICAgIGlmICghbV9ydW5UaHJl
YWQpIHsKKyAgICAgICAgaWYgKG1fdGhyZWFkSWQpCisgICAgICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX3RocmVhZElkKTsKKyAgICAgICAgbV9ydW5UaHJlYWQgPSB0cnVlOworICAg
ICAgICBtX3RocmVhZElkID0gY3JlYXRlVGhyZWFkKGRvd25sb2FkVGhyZWFkLCB0aGlzLCAiZG93
bmxvYWRUaHJlYWQiKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3Rv
cFRocmVhZCgpCit7CisgICAgbV9ydW5UaHJlYWQgPSBmYWxzZTsKKworICAgIGlmIChtX3RocmVh
ZElkKSB7CisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSWQpOworICAg
ICAgICBtX3RocmVhZElkID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkTWFuYWdl
cjo6c3RvcFRocmVhZElmSWRsZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworCisgICAgaWYgKCFnZXRBY3RpdmVEb3dubG9hZENvdW50KCkgJiYgIWdldFBlbmRpbmdEb3du
bG9hZENvdW50KCkpCisgICAgICAgIHNldFJ1blRocmVhZChmYWxzZSk7Cit9CisKK3ZvaWQgQ3Vy
bERvd25sb2FkTWFuYWdlcjo6dXBkYXRlSGFuZGxlTGlzdCgpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworCisgICAgLy8gQWRkIHBlbmRpbmcgY3VybCBlYXN5IGhhbmRsZXMg
dG8gbXVsdGkgbGlzdCAKKyAgICBpbnQgc2l6ZSA9IG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIENVUkxNY29k
ZSByZXR2YWwgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsIG1fcGVu
ZGluZ0hhbmRsZUxpc3RbMF0pOworCisgICAgICAgIGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spCisg
ICAgICAgICAgICBtX3BlbmRpbmdIYW5kbGVMaXN0LnJlbW92ZSgwKTsKKyAgICB9CisKKyAgICAv
LyBSZW1vdmUgY3VybCBlYXN5IGhhbmRsZXMgZnJvbSBtdWx0aSBsaXN0IAorICAgIHNpemUgPSBt
X3JlbW92ZWRIYW5kbGVMaXN0LnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
IGkrKykgeworICAgICAgICBDVVJMTWNvZGUgcmV0dmFsID0gY3VybF9tdWx0aV9yZW1vdmVfaGFu
ZGxlKG1fY3VybE11bHRpSGFuZGxlLCBtX3JlbW92ZWRIYW5kbGVMaXN0WzBdKTsKKworICAgICAg
ICBpZiAocmV0dmFsID09IENVUkxNX09LKQorICAgICAgICAgICAgbV9yZW1vdmVkSGFuZGxlTGlz
dC5yZW1vdmUoMCk7CisgICAgfQorfQorCit2b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OmRvd25s
b2FkVGhyZWFkKHZvaWQqIGRhdGEpCit7CisgICAgQ3VybERvd25sb2FkTWFuYWdlciogZG93bmxv
YWRNYW5hZ2VyID0gcmVpbnRlcnByZXRfY2FzdDxDdXJsRG93bmxvYWRNYW5hZ2VyKj4oZGF0YSk7
CisKKyAgICB3aGlsZSAoZG93bmxvYWRNYW5hZ2VyLT5ydW5UaHJlYWQoKSkgeworCisgICAgICAg
IGRvd25sb2FkTWFuYWdlci0+dXBkYXRlSGFuZGxlTGlzdCgpOworCisgICAgICAgIC8vIFJldHJ5
ICdzZWxlY3QnIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZCBieSBhIHByb2Nlc3Mgc2lnbmFsLgorICAg
ICAgICBpbnQgcmMgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBmZF9zZXQgZmRyZWFk
OworICAgICAgICAgICAgZmRfc2V0IGZkd3JpdGU7CisgICAgICAgICAgICBmZF9zZXQgZmRleGNl
cDsKKworICAgICAgICAgICAgaW50IG1heGZkID0gMDsKKworICAgICAgICAgICAgY29uc3QgaW50
IHNlbGVjdFRpbWVvdXRNUyA9IDU7CisKKyAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVv
dXQ7CisgICAgICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgICAgICAgICB0aW1lb3V0
LnR2X3VzZWMgPSBzZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAvLyBzZWxlY3Qgd2FpdHMgbWljcm9z
ZWNvbmRzCisKKyAgICAgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgICAgICAgICBGRF9a
RVJPKCZmZHdyaXRlKTsKKyAgICAgICAgICAgIEZEX1pFUk8oJmZkZXhjZXApOworICAgICAgICAg
ICAgY3VybF9tdWx0aV9mZHNldChkb3dubG9hZE1hbmFnZXItPmdldE11bHRpSGFuZGxlKCksICZm
ZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKyAgICAgICAgICAgIC8vIFdoZW4g
dGhlIDMgZmlsZSBkZXNjcmlwdG9ycyBhcmUgZW1wdHksIHdpbnNvY2sgd2lsbCByZXR1cm4gLTEK
KyAgICAgICAgICAgIC8vIGFuZCBiYWlsIG91dCwgc3RvcHBpbmcgdGhlIGZpbGUgZG93bmxvYWQu
IFNvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAgICAgLy8gaGF2ZSB2YWxpZCBmaWxlIGRlc2NyaXB0
b3JzIGJlZm9yZSBjYWxsaW5nIHNlbGVjdC4KKyAgICAgICAgICAgIGlmIChtYXhmZCA+PSAwKQor
ICAgICAgICAgICAgICAgIHJjID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0
ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKyAgICAgICAgfSB3aGlsZSAocmMgPT0gLTEgJiYgZXJy
bm8gPT0gRUlOVFIpOworCisgICAgICAgIHdoaWxlIChjdXJsX211bHRpX3BlcmZvcm0oZG93bmxv
YWRNYW5hZ2VyLT5nZXRNdWx0aUhhbmRsZSgpLCAmZG93bmxvYWRNYW5hZ2VyLT5tX2FjdGl2ZURv
d25sb2FkQ291bnQpID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeyB9CisKKyAgICAgICAg
aW50IG1lc3NhZ2VzSW5RdWV1ZSA9IDA7CisgICAgICAgIENVUkxNc2cqIG1zZyA9IGN1cmxfbXVs
dGlfaW5mb19yZWFkKGRvd25sb2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJm1lc3NhZ2Vz
SW5RdWV1ZSk7CisKKyAgICAgICAgaWYgKCFtc2cpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBDdXJsRG93bmxvYWQqIGRvd25sb2FkID0gMDsKKyAgICAgICAgQ1VSTGNvZGUgZXJy
ID0gY3VybF9lYXN5X2dldGluZm8obXNnLT5lYXN5X2hhbmRsZSwgQ1VSTElORk9fUFJJVkFURSwg
JmRvd25sb2FkKTsKKworICAgICAgICBpZiAobXNnLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7Cisg
ICAgICAgICAgICBpZiAobXNnLT5kYXRhLnJlc3VsdCA9PSBDVVJMRV9PSykKKyAgICAgICAgICAg
ICAgICBjYWxsT25NYWluVGhyZWFkPEN1cmxEb3dubG9hZCosIEN1cmxEb3dubG9hZCo+KEN1cmxE
b3dubG9hZDo6ZG93bmxvYWRGaW5pc2hlZENhbGxiYWNrLCBkb3dubG9hZCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZDxDdXJsRG93bmxvYWQqLCBD
dXJsRG93bmxvYWQqPihDdXJsRG93bmxvYWQ6OmRvd25sb2FkRmFpbGVkQ2FsbGJhY2ssIGRvd25s
b2FkKTsKKworICAgICAgICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGRvd25sb2FkTWFu
YWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgbXNnLT5lYXN5X2hhbmRsZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBkb3dubG9hZE1hbmFnZXItPnN0b3BUaHJlYWRJZklkbGUoKTsKKyAgICB9Cit9CisK
Ky8vIEN1cmxEb3dubG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDdXJsRG93bmxvYWRNYW5hZ2Vy
IEN1cmxEb3dubG9hZDo6bV9kb3dubG9hZE1hbmFnZXI7CisKK0N1cmxEb3dubG9hZDo6Q3VybERv
d25sb2FkKCkKKzogbV9jdXJsSGFuZGxlKDApCissIG1fdXJsKDApCissIG1fd2ViRG93bmxvYWQo
MCkKKywgbV90ZW1wSGFuZGxlKGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCissIG1fZGVsZXRl
c0ZpbGVVcG9uRmFpbHVyZShmYWxzZSkKK3sKK30KKworQ3VybERvd25sb2FkOjp+Q3VybERvd25s
b2FkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpZiAobV93
ZWJEb3dubG9hZCkKKyAgICAgICAgbV93ZWJEb3dubG9hZC0+UmVsZWFzZSgpOworCisgICAgaWYg
KG1fY3VybEhhbmRsZSkKKyAgICAgICAgY3VybF9lYXN5X2NsZWFudXAobV9jdXJsSGFuZGxlKTsK
KworICAgIGlmIChtX3VybCkKKyAgICAgICAgZmFzdEZyZWUobV91cmwpOworCisgICAgY2xvc2VG
aWxlKCk7Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkOjppbml0KFdlYkRvd25sb2FkKiB3ZWJEb3du
bG9hZCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICghd2ViRG93bmxvYWQpCisgICAgICAg
IHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKworICAgIG1fY3Vy
bEhhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CisKKyAgICBTdHJpbmcgdXJsU3RyID0gdXJsLnN0
cmluZygpOworICAgIG1fdXJsID0gZmFzdFN0ckR1cCh1cmxTdHIubGF0aW4xKCkuZGF0YSgpKTsK
KworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX1VSTCwgbV91cmwp
OworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIHRo
aXMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVO
Q1RJT04sIHdyaXRlQ2FsbGJhY2spOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxl
LCBDVVJMT1BUX1dSSVRFREFUQSwgdGhpcyk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2N1cmxI
YW5kbGUsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIGhlYWRlckNhbGxiYWNrKTsKKyAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9XUklURUhFQURFUiwgdGhpcyk7Cisg
ICAgY3VybF9lYXN5X3NldG9wdChtX2N1cmxIYW5kbGUsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04s
IDEpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX01BWFJFRElS
UywgMTApOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX0hUVFBB
VVRILCBDVVJMQVVUSF9BTlkpOworCisgICAgbV93ZWJEb3dubG9hZCA9IHdlYkRvd25sb2FkOwor
ICAgIG1fd2ViRG93bmxvYWQtPkFkZFJlZigpOworfQorCitib29sIEN1cmxEb3dubG9hZDo6c3Rh
cnQoKQoreworICAgIHJldHVybiBtX2Rvd25sb2FkTWFuYWdlci5hZGQobV9jdXJsSGFuZGxlKTsK
K30KKworYm9vbCBDdXJsRG93bmxvYWQ6OmNhbmNlbCgpCit7CisgICAgcmV0dXJuIG1fZG93bmxv
YWRNYW5hZ2VyLnJlbW92ZShtX2N1cmxIYW5kbGUpOworfQorCitTdHJpbmcgQ3VybERvd25sb2Fk
OjpnZXRUZW1wUGF0aCgpIGNvbnN0Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgIHJldHVybiBtX3RlbXBQYXRoOworfQorCitTdHJpbmcgQ3VybERvd25sb2FkOjpnZXRV
cmwoKSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICByZXR1
cm4gU3RyaW5nKG1fdXJsKTsKK30KKworUmVzb3VyY2VSZXNwb25zZSBDdXJsRG93bmxvYWQ6Omdl
dFJlc3BvbnNlKCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Cisg
ICAgcmV0dXJuIG1fcmVzcG9uc2U7Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkOjpjbG9zZUZpbGUo
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKworICAgIGlmIChtX3RlbXBI
YW5kbGUpIHsKKyAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKG1fdGVtcEhhbmRsZSk7CisgICAg
ICAgIG1fdGVtcEhhbmRsZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgfQorfQor
Cit2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhlYWRlcihjb25zdCBTdHJpbmcmIGhlYWRl
cikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpZiAoaGVhZGVy
ID09ICJcclxuIiB8fCBoZWFkZXIgPT0gIlxuIikgeworICAgICAgICBtX3Jlc3BvbnNlLnNldE1p
bWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoIkNvbnRlbnQtVHlwZSIpKSk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0VGV4dEVuY29k
aW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoIkNvbnRlbnQtVHlwZSIpKSk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0U3VnZ2VzdGVk
RmlsZW5hbWUoZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihtX3Jlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZCgiQ29udGVudC1EaXNwb3NpdGlvbiIpKSk7CisKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZDxDdXJsRG93bmxvYWQqLCBDdXJsRG93bmxvYWQqPihyZWNlaXZlZFJlc3BvbnNl
Q2FsbGJhY2ssIHRoaXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBzcGxpdFBvcyA9IGhl
YWRlci5maW5kKCI6Iik7CisgICAgICAgIGlmIChzcGxpdFBvcyAhPSAtMSkKKyAgICAgICAgICAg
IG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGhlYWRlci5sZWZ0KHNwbGl0UG9zKSwgaGVh
ZGVyLnN1YnN0cmluZyhzcGxpdFBvcysxKS5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAgfQorfQor
Cit2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZURhdGEodm9pZCogZGF0YSwgaW50IHNpemUp
Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworCisgICAgY2FsbE9uTWFpblRo
cmVhZDxDdXJsRG93bmxvYWQqLCBDdXJsRG93bmxvYWQqLCBpbnQsIGludD4ocmVjZWl2ZWREYXRh
Q2FsbGJhY2ssIHRoaXMsIHNpemUpOworCisgICAgaWYgKG1fdGVtcFBhdGguaXNFbXB0eSgpKQor
ICAgICAgICBtX3RlbXBQYXRoID0gb3BlblRlbXBvcmFyeUZpbGUoImRvd25sb2FkIiwgbV90ZW1w
SGFuZGxlKTsKKworICAgIGlmIChtX3RlbXBIYW5kbGUgIT0gaW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZSkgeworICAgICAgICBjb25zdCBjaGFyKiBmaWxlRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihkYXRhKTsKKyAgICAgICAgd3JpdGVUb0ZpbGUobV90ZW1wSGFuZGxlLCBmaWxlRGF0
YSwgc2l6ZSk7CisgICAgfQorfQorCit2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKCkKK3sKKyAgICBpZiAobV93ZWJEb3dubG9hZCkKKyAgICAgICAgbV93ZWJEb3dubG9hZC0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkOjpkaWRSZWNlaXZl
RGF0YU9mTGVuZ3RoKGludCBzaXplKQoreworICAgIGlmIChtX3dlYkRvd25sb2FkKQorICAgICAg
ICBtX3dlYkRvd25sb2FkLT5kaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKHNpemUpOworfQorCit2b2lk
IEN1cmxEb3dubG9hZDo6ZGlkRmluaXNoKCkKK3sKKyAgICBjbG9zZUZpbGUoKTsKKworICAgIGlm
IChtX3dlYkRvd25sb2FkKQorICAgICAgICBtX3dlYkRvd25sb2FkLT5kaWRGaW5pc2goKTsKK30K
Kwordm9pZCBDdXJsRG93bmxvYWQ6OmRpZEZhaWwoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX211dGV4KTsKKworICAgIGNsb3NlRmlsZSgpOworCisgICAgaWYgKG1fZGVsZXRlc0ZpbGVV
cG9uRmFpbHVyZSkKKyAgICAgICAgZGVsZXRlRmlsZShtX3RlbXBQYXRoKTsKKworICAgIGlmICht
X3dlYkRvd25sb2FkKQorICAgICAgICBtX3dlYkRvd25sb2FkLT5kaWRGYWlsKCk7Cit9CisKK3Np
emVfdCBDdXJsRG93bmxvYWQ6OndyaXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQoreworICAgIHNpemVfdCB0b3RhbFNpemUgPSBzaXpl
ICogbm1lbWI7CisgICAgQ3VybERvd25sb2FkKiBkb3dubG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Q3VybERvd25sb2FkKj4oZGF0YSk7CisKKyAgICBpZiAoZG93bmxvYWQpCisgICAgICAgIGRvd25s
b2FkLT5kaWRSZWNlaXZlRGF0YShwdHIsIHRvdGFsU2l6ZSk7CisKKyAgICByZXR1cm4gdG90YWxT
aXplOworfQorCitzaXplX3QgQ3VybERvd25sb2FkOjpoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIs
IHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCit7CisgICAgc2l6ZV90IHRv
dGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKKyAgICBDdXJsRG93bmxvYWQqIGRvd25sb2FkID0gcmVp
bnRlcnByZXRfY2FzdDxDdXJsRG93bmxvYWQqPihkYXRhKTsKKworICAgIFN0cmluZyBoZWFkZXIo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisKKyAgICBpZiAoZG93
bmxvYWQpCisgICAgICAgIGRvd25sb2FkLT5kaWRSZWNlaXZlSGVhZGVyKGhlYWRlcik7CisKKyAg
ICByZXR1cm4gdG90YWxTaXplOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6ZG93bmxvYWRGaW5p
c2hlZENhbGxiYWNrKEN1cmxEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgaWYgKGRvd25sb2Fk
KQorICAgICAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgQ3VybERvd25sb2Fk
Ojpkb3dubG9hZEZhaWxlZENhbGxiYWNrKEN1cmxEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAg
aWYgKGRvd25sb2FkKQorICAgICAgICBkb3dubG9hZC0+ZGlkRmFpbCgpOworfQorCit2b2lkIEN1
cmxEb3dubG9hZDo6cmVjZWl2ZWREYXRhQ2FsbGJhY2soQ3VybERvd25sb2FkKiBkb3dubG9hZCwg
aW50IHNpemUpCit7CisgICAgaWYgKGRvd25sb2FkKQorICAgICAgICBkb3dubG9hZC0+ZGlkUmVj
ZWl2ZURhdGFPZkxlbmd0aChzaXplKTsKK30KKwordm9pZCBDdXJsRG93bmxvYWQ6OnJlY2VpdmVk
UmVzcG9uc2VDYWxsYmFjayhDdXJsRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGlmIChkb3du
bG9hZCkKKyAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25zZSgpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203200</attachid>
            <date>2013-05-29 07:16:51 -0700</date>
            <delta_ts>2013-05-31 04:44:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116150-20130529161520.patch</filename>
            <type>text/plain</type>
            <size>22881</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDg5MCkKKysrIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDEzLTA1LTI5
ICBwZWF2b0BvdXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtDdXJs
XSBVbmFibGUgdG8gZG93bmxvYWQgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYxNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBiYXNpYyBkb3dubG9hZCBmdW5jdGlvbmFs
aXR5IGZvciBDdXJsLgorCisgICAgICAgICogQ3VybERvd25sb2FkLmg6IEFkZGVkLgorICAgICAg
ICAoQ3VybERvd25sb2FkTWFuYWdlcik6CisgICAgICAgIChDdXJsRG93bmxvYWRNYW5hZ2VyOjpn
ZXRNdWx0aUhhbmRsZSk6CisgICAgICAgIChDdXJsRG93bmxvYWRNYW5hZ2VyOjpydW5UaHJlYWQp
OgorICAgICAgICAoQ3VybERvd25sb2FkTWFuYWdlcjo6c2V0UnVuVGhyZWFkKToKKyAgICAgICAg
KEN1cmxEb3dubG9hZCk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmRlbGV0ZXNGaWxlVXBvbkZh
aWx1cmUpOgorICAgICAgICAoQ3VybERvd25sb2FkOjpzZXREZWxldGVzRmlsZVVwb25GYWlsdXJl
KToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6c2V0RGVzdGluYXRpb24pOgorICAgICAgICAqIFdl
YkRvd25sb2FkLmg6CisgICAgICAgIChXZWJEb3dubG9hZCk6CisgICAgICAgICogV2ViRG93bmxv
YWRDdXJsLmNwcDoKKyAgICAgICAgKFdlYkRvd25sb2FkOjppbml0KToKKyAgICAgICAgKFdlYkRv
d25sb2FkOjpzdGFydCk6CisgICAgICAgIChXZWJEb3dubG9hZDo6Y2FuY2VsKToKKyAgICAgICAg
KFdlYkRvd25sb2FkOjpkZWxldGVzRmlsZVVwb25GYWlsdXJlKToKKyAgICAgICAgKFdlYkRvd25s
b2FkOjpzZXREZWxldGVzRmlsZVVwb25GYWlsdXJlKToKKyAgICAgICAgKFdlYkRvd25sb2FkOjpz
ZXREZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJEb3dubG9hZDo6dXNlQ3JlZGVudGlhbCk6Cisg
ICAgICAgIChXZWJEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkRv
d25sb2FkOjpkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKToKKyAgICAgICAgKFdlYkRvd25sb2FkOjpk
aWRGaW5pc2gpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OmRpZEZhaWwpOgorICAgICAgICAoQ3Vy
bERvd25sb2FkTWFuYWdlcjo6Q3VybERvd25sb2FkTWFuYWdlcik6CisgICAgICAgIChDdXJsRG93
bmxvYWRNYW5hZ2VyOjp+Q3VybERvd25sb2FkTWFuYWdlcik6CisgICAgICAgIChDdXJsRG93bmxv
YWRNYW5hZ2VyOjphZGQpOgorICAgICAgICAoQ3VybERvd25sb2FkTWFuYWdlcjo6cmVtb3ZlKToK
KyAgICAgICAgKEN1cmxEb3dubG9hZE1hbmFnZXI6OmdldEFjdGl2ZURvd25sb2FkQ291bnQpOgor
ICAgICAgICAoQ3VybERvd25sb2FkTWFuYWdlcjo6Z2V0UGVuZGluZ0Rvd25sb2FkQ291bnQpOgor
ICAgICAgICAoQ3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCk6CisgICAg
ICAgIChDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKToKKyAgICAgICAgKEN1cmxEb3du
bG9hZE1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUpOgorICAgICAgICAoQ3VybERvd25sb2FkTWFu
YWdlcjo6dXBkYXRlSGFuZGxlTGlzdCk6CisgICAgICAgIChDdXJsRG93bmxvYWRNYW5hZ2VyOjpk
b3dubG9hZFRocmVhZCk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OkN1cmxEb3dubG9hZCk6Cisg
ICAgICAgIChDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQpOgorICAgICAgICAoQ3VybERvd25s
b2FkOjppbml0KToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6c3RhcnQpOgorICAgICAgICAoQ3Vy
bERvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoQ3VybERvd25sb2FkOjpnZXRUZW1wUGF0aCk6
CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmdldFVybCk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6
OmdldFJlc3BvbnNlKToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6Y2xvc2VGaWxlKToKKyAgICAg
ICAgKEN1cmxEb3dubG9hZDo6bW92ZUZpbGVUb0Rlc3RpbmF0aW9uKToKKyAgICAgICAgKEN1cmxE
b3dubG9hZDo6ZGlkUmVjZWl2ZUhlYWRlcik6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmRpZFJl
Y2VpdmVEYXRhKToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZURhdGFPZkxlbmd0aCk6CisgICAgICAg
IChDdXJsRG93bmxvYWQ6OmRpZEZpbmlzaCk6CisgICAgICAgIChDdXJsRG93bmxvYWQ6OmRpZEZh
aWwpOgorICAgICAgICAoQ3VybERvd25sb2FkOjp3cml0ZUNhbGxiYWNrKToKKyAgICAgICAgKEN1
cmxEb3dubG9hZDo6aGVhZGVyQ2FsbGJhY2spOgorICAgICAgICAoQ3VybERvd25sb2FkOjpkb3du
bG9hZEZpbmlzaGVkQ2FsbGJhY2spOgorICAgICAgICAoQ3VybERvd25sb2FkOjpkb3dubG9hZEZh
aWxlZENhbGxiYWNrKToKKyAgICAgICAgKEN1cmxEb3dubG9hZDo6cmVjZWl2ZWREYXRhQ2FsbGJh
Y2spOgorICAgICAgICAoQ3VybERvd25sb2FkOjpyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2spOgor
CiAyMDEzLTA1LTI4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtXaW5kb3dzXSBNYW55IGNzczIuMSB0ZXN0cyBmYWlsIG9uIEFwcGxlJ3MgV2luZG93cyBw
b3J0LgpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ3VybERvd25sb2FkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC93aW4vQ3VybERvd25sb2FkLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0L3dpbi9DdXJsRG93bmxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEz
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEN1cmxEb3dubG9hZF9oCisjZGVmaW5lIEN1cmxEb3du
bG9hZF9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3Vy
bC9jdXJsLmg+CisKK2NsYXNzIFdlYkRvd25sb2FkOworCitjbGFzcyBDdXJsRG93bmxvYWRNYW5h
Z2VyIHsKK3B1YmxpYzoKKyAgICBDdXJsRG93bmxvYWRNYW5hZ2VyKCk7CisgICAgfkN1cmxEb3du
bG9hZE1hbmFnZXIoKTsKKworICAgIGJvb2wgYWRkKENVUkwqIGN1cmxIYW5kbGUpOworICAgIGJv
b2wgcmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpOworCisgICAgaW50IGdldEFjdGl2ZURvd25sb2Fk
Q291bnQoKSBjb25zdDsKKyAgICBpbnQgZ2V0UGVuZGluZ0Rvd25sb2FkQ291bnQoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHN0YXJ0VGhyZWFkSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN0
b3BUaHJlYWQoKTsKKyAgICB2b2lkIHN0b3BUaHJlYWRJZklkbGUoKTsKKworICAgIHZvaWQgdXBk
YXRlSGFuZGxlTGlzdCgpOworCisgICAgQ1VSTE0qIGdldE11bHRpSGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJsTXVsdGlIYW5kbGU7IH0KKworICAgIGJvb2wgcnVuVGhyZWFkKCkgY29uc3Qg
eyByZXR1cm4gbV9ydW5UaHJlYWQ7IH0KKyAgICB2b2lkIHNldFJ1blRocmVhZChib29sIHJ1blRo
cmVhZCkgeyBtX3J1blRocmVhZCA9IHJ1blRocmVhZDsgfQorCisgICAgc3RhdGljIHZvaWQgZG93
bmxvYWRUaHJlYWQodm9pZCogZGF0YSk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SWQ7CisgICAgQ1VSTE0qIG1fY3VybE11bHRpSGFuZGxlOworICAgIGludCBtX2FjdGl2ZURvd25s
b2FkQ291bnQ7CisgICAgVmVjdG9yPENVUkwqPiBtX3BlbmRpbmdIYW5kbGVMaXN0OworICAgIFZl
Y3RvcjxDVVJMKj4gbV9yZW1vdmVkSGFuZGxlTGlzdDsKKyAgICBtdXRhYmxlIE11dGV4IG1fbXV0
ZXg7CisgICAgYm9vbCBtX3J1blRocmVhZDsKK307CisKK2NsYXNzIEN1cmxEb3dubG9hZCB7Citw
dWJsaWM6CisgICAgQ3VybERvd25sb2FkKCk7CisgICAgfkN1cmxEb3dubG9hZCgpOworCisgICAg
dm9pZCBpbml0KFdlYkRvd25sb2FkKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYpOworICAgIGJvb2wg
c3RhcnQoKTsKKyAgICBib29sIGNhbmNlbCgpOworCisgICAgU3RyaW5nIGdldFRlbXBQYXRoKCkg
Y29uc3Q7CisgICAgU3RyaW5nIGdldFVybCgpIGNvbnN0OworICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UgZ2V0UmVzcG9uc2UoKSBjb25zdDsKKworICAgIGJvb2wgZGVsZXRlc0ZpbGVVcG9u
RmFpbHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZTsgfQorICAg
IHZvaWQgc2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZShib29sIGRlbGV0ZXNGaWxlVXBvbkZhaWx1
cmUpIHsgbV9kZWxldGVzRmlsZVVwb25GYWlsdXJlID0gZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZTsg
fQorCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKSB7
IG1fZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2xv
c2VGaWxlKCk7CisgICAgdm9pZCBtb3ZlRmlsZVRvRGVzdGluYXRpb24oKTsKKworICAgIC8vIENh
bGxlZCBvbiBkb3dubG9hZCB0aHJlYWQuCisgICAgdm9pZCBkaWRSZWNlaXZlSGVhZGVyKGNvbnN0
IFN0cmluZyYgaGVhZGVyKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHZvaWQqIGRhdGEsIGlu
dCBzaXplKTsKKworICAgIC8vIENhbGxlZCBvbiBtYWluIHRocmVhZC4KKyAgICB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZSgpOworICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFPZkxlbmd0aChpbnQgc2l6
ZSk7CisgICAgdm9pZCBkaWRGaW5pc2goKTsKKyAgICB2b2lkIGRpZEZhaWwoKTsKKworICAgIHN0
YXRpYyBzaXplX3Qgd3JpdGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCwgc2l6ZV90IG5tZW1i
LCB2b2lkKiBkYXRhKTsKKyAgICBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0
ciwgc2l6ZV90LCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpOworCisgICAgc3RhdGljIHZvaWQg
ZG93bmxvYWRGaW5pc2hlZENhbGxiYWNrKEN1cmxEb3dubG9hZCopOworICAgIHN0YXRpYyB2b2lk
IGRvd25sb2FkRmFpbGVkQ2FsbGJhY2soQ3VybERvd25sb2FkKik7CisgICAgc3RhdGljIHZvaWQg
cmVjZWl2ZWREYXRhQ2FsbGJhY2soQ3VybERvd25sb2FkKiwgaW50IHNpemUpOworICAgIHN0YXRp
YyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhDdXJsRG93bmxvYWQqKTsKKworICAgIENV
UkwqIG1fY3VybEhhbmRsZTsKKyAgICBjaGFyKiBtX3VybDsKKyAgICBXZWJEb3dubG9hZCogbV93
ZWJEb3dubG9hZDsKKyAgICBTdHJpbmcgbV90ZW1wUGF0aDsKKyAgICBTdHJpbmcgbV9kZXN0aW5h
dGlvbjsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV90ZW1wSGFuZGxlOworICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBib29sIG1fZGVsZXRl
c0ZpbGVVcG9uRmFpbHVyZTsKKyAgICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7CisKKyAgICBzdGF0
aWMgQ3VybERvd25sb2FkTWFuYWdlciBtX2Rvd25sb2FkTWFuYWdlcjsKKworICAgIGZyaWVuZCBj
bGFzcyBDdXJsRG93bmxvYWRNYW5hZ2VyOworfTsKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJEb3dubG9hZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dl
YkRvd25sb2FkLmgJKHJldmlzaW9uIDE1MDU3OCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkRv
d25sb2FkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogI2lmIFVTRShDRk5F
VFdPUkspCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMRG93bmxvYWRQcml2Lmg+CisjZWxpZiBV
U0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsRG93bmxvYWQuaCIKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0xMTksNiArMTIxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENyZWF0
ZURlc3RpbmF0aW9uKENGVVJMUmVmKTsKICAgICB2b2lkIGRpZEZpbmlzaCgpOwogICAgIHZvaWQg
ZGlkRmFpbChDRkVycm9yUmVmKTsKKyNlbGlmIFVTRShDVVJMKQorICAgIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKCk7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKGludCBzaXplKTsK
KyAgICB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZvaWQgZGlkRmFpbCgpOwogI2VuZGlmCiAKIHBy
b3RlY3RlZDoKQEAgLTEyOCw2ICsxMzUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgV1RGOjpTdHJpbmcg
bV9idW5kbGVQYXRoOwogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgUmV0YWluUHRyPENGVVJMRG93
bmxvYWRSZWY+IG1fZG93bmxvYWQ7CisjZWxpZiBVU0UoQ1VSTCkKKyAgICBDdXJsRG93bmxvYWQg
bV9kb3dubG9hZDsKICNlbmRpZgogICAgIENPTVB0cjxJV2ViTXV0YWJsZVVSTFJlcXVlc3Q+IG1f
cmVxdWVzdDsKICAgICBDT01QdHI8SVdlYkRvd25sb2FkRGVsZWdhdGU+IG1fZGVsZWdhdGU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZEN1cmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ3VybC5jcHAJKHJldmlzaW9uIDE1MDU3OCkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ3VybC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXZWJVUkxDcmVkZW50aWFsLmgiCiAjaW5jbHVk
ZSAiV2ViVVJMUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBA
IC00NSw2ICs0Niw4IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKICNpbmNsdWRlIDxXZWJD
b3JlL0JTdHJpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9NYWluVGhyZWFkVGFzay5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CkBAIC01Myw2ICs1Niw5IEBACiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8
ZmFsc2UsIGZhbHNlLCBDdXJsRG93bmxvYWQqPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBh
c3NUaHJvdWdoPEN1cmxEb3dubG9hZCo+IHsKK307CisKIC8vIFdlYkRvd25sb2FkIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogdm9pZCBXZWJEb3dubG9hZDo6aW5pdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBJV2ViRG93bmxvYWREZWxlZ2F0ZSogZGVsZWdhdGUpCkBAIC02Miw3ICs2OCw5IEBAIHZvaWQg
V2ViRG93bmxvYWQ6OmluaXQoUmVzb3VyY2VIYW5kbGUqIGgKIAogdm9pZCBXZWJEb3dubG9hZDo6
aW5pdChjb25zdCBLVVJMJiB1cmwsIElXZWJEb3dubG9hZERlbGVnYXRlKiBkZWxlZ2F0ZSkKIHsK
LSAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAg
bV9kb3dubG9hZC5pbml0KHRoaXMsIHVybCk7CiB9CiAKIC8vIElXZWJEb3dubG9hZCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkBAIC04NSwxNCArOTMsMjEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEb3du
bG9hZDo6aQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpzdGFydCgp
CiB7Ci0gICBub3RJbXBsZW1lbnRlZCgpOwotICAgcmV0dXJuIEVfRkFJTDsKKyAgICBpZiAoIW1f
ZG93bmxvYWQuc3RhcnQoKSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGlmIChtX2Rl
bGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5kaWRCZWdpbih0aGlzKTsKKworICAgIHJldHVy
biBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpjYW5j
ZWwoKQogewotICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgIHJldHVybiBFX0ZBSUw7CisgICAgaWYg
KCFtX2Rvd25sb2FkLmNhbmNlbCgpKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgcmV0
dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmNh
bmNlbEZvclJlc3VtZSgpCkBAIC0xMDQsMjMgKzExOSwyNSBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkRvd25sb2FkOjpjCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25s
b2FkOjpkZWxldGVzRmlsZVVwb25GYWlsdXJlKAogICAgICAgICAvKiBbb3V0LCByZXR2YWxdICov
IEJPT0wqIHJlc3VsdCkKIHsKLSAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICByZXR1cm4gRV9GQUlM
OworICAgICpyZXN1bHQgPSBtX2Rvd25sb2FkLmRlbGV0ZXNGaWxlVXBvbkZhaWx1cmUoKSA/IFRS
VUUgOiBGQUxTRTsKKyAgICByZXR1cm4gU19PSzsKIH0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJEb3dubG9hZDo6c2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSgKICAgICAgICAgLyog
W2luXSAqLyBCT09MIGRlbGV0ZXNGaWxlVXBvbkZhaWx1cmUpCiB7Ci0gICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgcmV0dXJuIEVfRkFJTDsKKyAgICBtX2Rvd25sb2FkLnNldERlbGV0ZXNGaWxlVXBv
bkZhaWx1cmUoZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSk7CisgICAgcmV0dXJuIFNfT0s7CiB9CiAK
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OnNldERlc3RpbmF0aW9uKAog
ICAgICAgICAvKiBbaW5dICovIEJTVFIgcGF0aCwgCiAgICAgICAgIC8qIFtpbl0gKi8gQk9PTCBh
bGxvd092ZXJ3cml0ZSkKIHsKLSAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICByZXR1cm4gRV9GQUlM
OworICAgIHNpemVfdCBsZW4gPSB3Y3NsZW4ocGF0aCk7CisgICAgbV9kZXN0aW5hdGlvbiA9IFN0
cmluZyhwYXRoLCBsZW4pOworICAgIG1fZG93bmxvYWQuc2V0RGVzdGluYXRpb24obV9kZXN0aW5h
dGlvbik7CisgICAgcmV0dXJuIFNfT0s7CiB9CiAKIC8vIElXZWJVUkxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVNlbmRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDYsMyArMTYzLDQyMiBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjp1CiAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
cmV0dXJuIEVfRkFJTDsKIH0KKwordm9pZCBXZWJEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KCkKK3sKKyAgICBDT01QdHI8V2ViRG93bmxvYWQ+IHByb3RlY3QgPSB0aGlzOworCisgICAgaWYg
KG1fZGVsZWdhdGUpIHsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSA9IG1fZG93
bmxvYWQuZ2V0UmVzcG9uc2UoKTsKKyAgICAgICAgQ09NUHRyPFdlYlVSTFJlc3BvbnNlPiB3ZWJS
ZXNwb25zZShBZG9wdENPTSwgV2ViVVJMUmVzcG9uc2U6OmNyZWF0ZUluc3RhbmNlKHJlc3BvbnNl
KSk7CisgICAgICAgIG1fZGVsZWdhdGUtPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCB3ZWJSZXNw
b25zZS5nZXQoKSk7CisKKyAgICAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lID0gcmVzcG9u
c2Uuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKKyAgICAgICAgaWYgKHN1Z2dlc3RlZEZpbGVuYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0gcGF0aEdldEZpbGVOYW1l
KHJlc3BvbnNlLnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgQlN0cmluZyBzdWdnZXN0ZWRGaWxl
bmFtZUJTVFIoc3VnZ2VzdGVkRmlsZW5hbWUuY2hhcmFjdGVycygpLCBzdWdnZXN0ZWRGaWxlbmFt
ZS5sZW5ndGgoKSk7CisgICAgICAgIG1fZGVsZWdhdGUtPmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKHRoaXMsIHN1Z2dlc3RlZEZpbGVuYW1lQlNUUik7CisgICAgfQorfQor
Cit2b2lkIFdlYkRvd25sb2FkOjpkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKGludCBzaXplKQorewor
ICAgIENPTVB0cjxXZWJEb3dubG9hZD4gcHJvdGVjdCA9IHRoaXM7CisKKyAgICBpZiAobV9kZWxl
Z2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkUmVjZWl2ZURhdGFPZkxlbmd0aCh0aGlzLCBz
aXplKTsKK30KKwordm9pZCBXZWJEb3dubG9hZDo6ZGlkRmluaXNoKCkKK3sKKyAgICBDT01QdHI8
V2ViRG93bmxvYWQ+IHByb3RlY3QgPSB0aGlzOworCisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAg
ICAgIG1fZGVsZWdhdGUtPmRpZEZpbmlzaCh0aGlzKTsKK30KKwordm9pZCBXZWJEb3dubG9hZDo6
ZGlkRmFpbCgpCit7CisgICAgQ09NUHRyPFdlYkRvd25sb2FkPiBwcm90ZWN0ID0gdGhpczsKKwor
ICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5kaWRGYWlsV2l0aEVycm9y
KHRoaXMsIDApOworfQorCisvLyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3Vy
bERvd25sb2FkTWFuYWdlcjo6Q3VybERvd25sb2FkTWFuYWdlcigpCis6IG1fdGhyZWFkSWQoMCkK
KywgbV9jdXJsTXVsdGlIYW5kbGUoMCkKKywgbV9hY3RpdmVEb3dubG9hZENvdW50KDApCissIG1f
cnVuVGhyZWFkKGZhbHNlKQoreworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxM
KTsKKyAgICBtX2N1cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworfQorCitDdXJs
RG93bmxvYWRNYW5hZ2VyOjp+Q3VybERvd25sb2FkTWFuYWdlcigpCit7CisgICAgc3RvcFRocmVh
ZCgpOworICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX2N1cmxNdWx0aUhhbmRsZSk7CisgICAgY3Vy
bF9nbG9iYWxfY2xlYW51cCgpOworfQorCitib29sIEN1cmxEb3dubG9hZE1hbmFnZXI6OmFkZChD
VVJMKiBjdXJsSGFuZGxlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKwor
ICAgIG1fcGVuZGluZ0hhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOworICAgIHN0YXJ0VGhy
ZWFkSWZOZWVkZWQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEN1cmxEb3dubG9h
ZE1hbmFnZXI6OnJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX211dGV4KTsKKworICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5k
bGUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpn
ZXRBY3RpdmVEb3dubG9hZENvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3RpdmVEb3du
bG9hZENvdW50OworfQorCitpbnQgQ3VybERvd25sb2FkTWFuYWdlcjo6Z2V0UGVuZGluZ0Rvd25s
b2FkQ291bnQoKSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAg
ICByZXR1cm4gbV9wZW5kaW5nSGFuZGxlTGlzdC5zaXplKCk7Cit9CisKK3ZvaWQgQ3VybERvd25s
b2FkTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3J1blRocmVh
ZCkgeworICAgICAgICBpZiAobV90aHJlYWRJZCkKKyAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKG1fdGhyZWFkSWQpOworICAgICAgICBtX3J1blRocmVhZCA9IHRydWU7CisgICAg
ICAgIG1fdGhyZWFkSWQgPSBjcmVhdGVUaHJlYWQoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3du
bG9hZFRocmVhZCIpOworICAgIH0KK30KKwordm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9w
VGhyZWFkKCkKK3sKKyAgICBtX3J1blRocmVhZCA9IGZhbHNlOworCisgICAgaWYgKG1fdGhyZWFk
SWQpIHsKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7CisgICAg
ICAgIG1fdGhyZWFkSWQgPSAwOworICAgIH0KK30KKwordm9pZCBDdXJsRG93bmxvYWRNYW5hZ2Vy
OjpzdG9wVGhyZWFkSWZJZGxlKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisKKyAgICBpZiAoIWdldEFjdGl2ZURvd25sb2FkQ291bnQoKSAmJiAhZ2V0UGVuZGluZ0Rvd25s
b2FkQ291bnQoKSkKKyAgICAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKK30KKwordm9pZCBDdXJs
RG93bmxvYWRNYW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KCkKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7CisKKyAgICAvLyBBZGQgcGVuZGluZyBjdXJsIGVhc3kgaGFuZGxlcyB0
byBtdWx0aSBsaXN0IAorICAgIGludCBzaXplID0gbV9wZW5kaW5nSGFuZGxlTGlzdC5zaXplKCk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgQ1VSTE1jb2Rl
IHJldHZhbCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShtX2N1cmxNdWx0aUhhbmRsZSwgbV9wZW5k
aW5nSGFuZGxlTGlzdFswXSk7CisKKyAgICAgICAgaWYgKHJldHZhbCA9PSBDVVJMTV9PSykKKyAg
ICAgICAgICAgIG1fcGVuZGluZ0hhbmRsZUxpc3QucmVtb3ZlKDApOworICAgIH0KKworICAgIC8v
IFJlbW92ZSBjdXJsIGVhc3kgaGFuZGxlcyBmcm9tIG11bHRpIGxpc3QgCisgICAgc2l6ZSA9IG1f
cmVtb3ZlZEhhbmRsZUxpc3Quc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgIENVUkxNY29kZSByZXR2YWwgPSBjdXJsX211bHRpX3JlbW92ZV9oYW5k
bGUobV9jdXJsTXVsdGlIYW5kbGUsIG1fcmVtb3ZlZEhhbmRsZUxpc3RbMF0pOworCisgICAgICAg
IGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spCisgICAgICAgICAgICBtX3JlbW92ZWRIYW5kbGVMaXN0
LnJlbW92ZSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6ZG93bmxv
YWRUaHJlYWQodm9pZCogZGF0YSkKK3sKKyAgICBDdXJsRG93bmxvYWRNYW5hZ2VyKiBkb3dubG9h
ZE1hbmFnZXIgPSByZWludGVycHJldF9jYXN0PEN1cmxEb3dubG9hZE1hbmFnZXIqPihkYXRhKTsK
KworICAgIHdoaWxlIChkb3dubG9hZE1hbmFnZXItPnJ1blRocmVhZCgpKSB7CisKKyAgICAgICAg
ZG93bmxvYWRNYW5hZ2VyLT51cGRhdGVIYW5kbGVMaXN0KCk7CisKKyAgICAgICAgLy8gUmV0cnkg
J3NlbGVjdCcgaWYgaXQgd2FzIGludGVycnVwdGVkIGJ5IGEgcHJvY2VzcyBzaWduYWwuCisgICAg
ICAgIGludCByYyA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZkX3NldCBmZHJlYWQ7
CisgICAgICAgICAgICBmZF9zZXQgZmR3cml0ZTsKKyAgICAgICAgICAgIGZkX3NldCBmZGV4Y2Vw
OworCisgICAgICAgICAgICBpbnQgbWF4ZmQgPSAwOworCisgICAgICAgICAgICBjb25zdCBpbnQg
c2VsZWN0VGltZW91dE1TID0gNTsKKworICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91
dDsKKyAgICAgICAgICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICAgICAgICAgIHRpbWVvdXQu
dHZfdXNlYyA9IHNlbGVjdFRpbWVvdXRNUyAqIDEwMDA7IC8vIHNlbGVjdCB3YWl0cyBtaWNyb3Nl
Y29uZHMKKworICAgICAgICAgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICAgICAgICAgIEZEX1pF
Uk8oJmZkd3JpdGUpOworICAgICAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7CisgICAgICAgICAg
ICBjdXJsX211bHRpX2Zkc2V0KGRvd25sb2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJmZk
cmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworICAgICAgICAgICAgLy8gV2hlbiB0
aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBlbXB0eSwgd2luc29jayB3aWxsIHJldHVybiAtMQor
ICAgICAgICAgICAgLy8gYW5kIGJhaWwgb3V0LCBzdG9wcGluZyB0aGUgZmlsZSBkb3dubG9hZC4g
U28gbWFrZSBzdXJlIHdlCisgICAgICAgICAgICAvLyBoYXZlIHZhbGlkIGZpbGUgZGVzY3JpcHRv
cnMgYmVmb3JlIGNhbGxpbmcgc2VsZWN0LgorICAgICAgICAgICAgaWYgKG1heGZkID49IDApCisg
ICAgICAgICAgICAgICAgcmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRl
LCAmZmRleGNlcCwgJnRpbWVvdXQpOworICAgICAgICB9IHdoaWxlIChyYyA9PSAtMSAmJiBlcnJu
byA9PSBFSU5UUik7CisKKyAgICAgICAgd2hpbGUgKGN1cmxfbXVsdGlfcGVyZm9ybShkb3dubG9h
ZE1hbmFnZXItPmdldE11bHRpSGFuZGxlKCksICZkb3dubG9hZE1hbmFnZXItPm1fYWN0aXZlRG93
bmxvYWRDb3VudCkgPT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7IH0KKworICAgICAgICBp
bnQgbWVzc2FnZXNJblF1ZXVlID0gMDsKKyAgICAgICAgQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0
aV9pbmZvX3JlYWQoZG93bmxvYWRNYW5hZ2VyLT5nZXRNdWx0aUhhbmRsZSgpLCAmbWVzc2FnZXNJ
blF1ZXVlKTsKKworICAgICAgICBpZiAoIW1zZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIEN1cmxEb3dubG9hZCogZG93bmxvYWQgPSAwOworICAgICAgICBDVVJMY29kZSBlcnIg
PSBjdXJsX2Vhc3lfZ2V0aW5mbyhtc2ctPmVhc3lfaGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAm
ZG93bmxvYWQpOworCisgICAgICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAg
ICAgICAgICAgIGlmIChtc2ctPmRhdGEucmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICAgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQ8Q3VybERvd25sb2FkKiwgQ3VybERvd25sb2FkKj4oQ3VybERv
d25sb2FkOjpkb3dubG9hZEZpbmlzaGVkQ2FsbGJhY2ssIGRvd25sb2FkKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkPEN1cmxEb3dubG9hZCosIEN1
cmxEb3dubG9hZCo+KEN1cmxEb3dubG9hZDo6ZG93bmxvYWRGYWlsZWRDYWxsYmFjaywgZG93bmxv
YWQpOworCisgICAgICAgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoZG93bmxvYWRNYW5h
Z2VyLT5nZXRNdWx0aUhhbmRsZSgpLCBtc2ctPmVhc3lfaGFuZGxlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGRvd25sb2FkTWFuYWdlci0+c3RvcFRocmVhZElmSWRsZSgpOworICAgIH0KK30KKwor
Ly8gQ3VybERvd25sb2FkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1cmxEb3dubG9hZE1hbmFnZXIg
Q3VybERvd25sb2FkOjptX2Rvd25sb2FkTWFuYWdlcjsKKworQ3VybERvd25sb2FkOjpDdXJsRG93
bmxvYWQoKQorOiBtX2N1cmxIYW5kbGUoMCkKKywgbV91cmwoMCkKKywgbV93ZWJEb3dubG9hZCgw
KQorLCBtX3RlbXBIYW5kbGUoaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKKywgbV9kZWxldGVz
RmlsZVVwb25GYWlsdXJlKGZhbHNlKQoreworfQorCitDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxv
YWQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKworICAgIGlmIChtX2N1
cmxIYW5kbGUpCisgICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1fY3VybEhhbmRsZSk7CisKKyAg
ICBpZiAobV91cmwpCisgICAgICAgIGZhc3RGcmVlKG1fdXJsKTsKKworICAgIGNsb3NlRmlsZSgp
OworICAgIG1vdmVGaWxlVG9EZXN0aW5hdGlvbigpOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6
aW5pdChXZWJEb3dubG9hZCogd2ViRG93bmxvYWQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBp
ZiAoIXdlYkRvd25sb2FkKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7CisKKyAgICBtX2N1cmxIYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisg
ICAgU3RyaW5nIHVybFN0ciA9IHVybC5zdHJpbmcoKTsKKyAgICBtX3VybCA9IGZhc3RTdHJEdXAo
dXJsU3RyLmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhh
bmRsZSwgQ1VSTE9QVF9VUkwsIG1fdXJsKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhh
bmRsZSwgQ1VSTE9QVF9QUklWQVRFLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3Vy
bEhhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKKyAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsIHRoaXMpOworICAg
IGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBo
ZWFkZXJDYWxsYmFjayk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2N1cmxIYW5kbGUsIENVUkxP
UFRfV1JJVEVIRUFERVIsIHRoaXMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxl
LCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3Vy
bEhhbmRsZSwgQ1VSTE9QVF9NQVhSRURJUlMsIDEwKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1f
Y3VybEhhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKworICAgIG1fd2Vi
RG93bmxvYWQgPSB3ZWJEb3dubG9hZDsKK30KKworYm9vbCBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkK
K3sKKyAgICByZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIuYWRkKG1fY3VybEhhbmRsZSk7Cit9CisK
K2Jvb2wgQ3VybERvd25sb2FkOjpjYW5jZWwoKQoreworICAgIHJldHVybiBtX2Rvd25sb2FkTWFu
YWdlci5yZW1vdmUobV9jdXJsSGFuZGxlKTsKK30KKworU3RyaW5nIEN1cmxEb3dubG9hZDo6Z2V0
VGVtcFBhdGgoKSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAg
ICByZXR1cm4gbV90ZW1wUGF0aDsKK30KKworU3RyaW5nIEN1cmxEb3dubG9hZDo6Z2V0VXJsKCkg
Y29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgcmV0dXJuIFN0
cmluZyhtX3VybCk7Cit9CisKK1Jlc291cmNlUmVzcG9uc2UgQ3VybERvd25sb2FkOjpnZXRSZXNw
b25zZSgpIGNvbnN0Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIHJl
dHVybiBtX3Jlc3BvbnNlOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6Y2xvc2VGaWxlKCkKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpZiAobV90ZW1wSGFuZGxl
KSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX3RlbXBIYW5kbGUpOworICAgICAgICBt
X3RlbXBIYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIH0KK30KKwordm9p
ZCBDdXJsRG93bmxvYWQ6Om1vdmVGaWxlVG9EZXN0aW5hdGlvbigpCit7CisgICAgaWYgKCFtX2Rl
c3RpbmF0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgTW92ZUZpbGUobV90ZW1wUGF0aC5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBtX2Rlc3RpbmF0aW9uLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkpOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhlYWRl
cihjb25zdCBTdHJpbmcmIGhlYWRlcikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRl
eCk7CisKKyAgICBpZiAoaGVhZGVyID09ICJcclxuIiB8fCBoZWFkZXIgPT0gIlxuIikgeworCisg
ICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOworICAgICAgICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vh
c3lfZ2V0aW5mbyhtX2N1cmxIYW5kbGUsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZodHRwQ29k
ZSk7CisKKyAgICAgICAgaWYgKGh0dHBDb2RlID49IDIwMCAmJiBodHRwQ29kZSA8IDMwMCkgewor
ICAgICAgICAgICAgY29uc3QgY2hhciogdXJsID0gMDsKKyAgICAgICAgICAgIGVyciA9IGN1cmxf
ZWFzeV9nZXRpbmZvKG1fY3VybEhhbmRsZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7
CisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJs
KSk7CisKKyAgICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBl
RnJvbU1lZGlhVHlwZShtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikp
KTsKKyAgICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hh
cnNldEZyb21NZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlw
ZSIpKSk7CisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKGZpbGVu
YW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRpb24obV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
IkNvbnRlbnQtRGlzcG9zaXRpb24iKSkpOworCisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFk
PEN1cmxEb3dubG9hZCosIEN1cmxEb3dubG9hZCo+KHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjaywg
dGhpcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgc3BsaXRQb3MgPSBo
ZWFkZXIuZmluZCgiOiIpOworICAgICAgICBpZiAoc3BsaXRQb3MgIT0gLTEpCisgICAgICAgICAg
ICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChoZWFkZXIubGVmdChzcGxpdFBvcyksIGhl
YWRlci5zdWJzdHJpbmcoc3BsaXRQb3MrMSkuc3RyaXBXaGl0ZVNwYWNlKCkpOworICAgIH0KK30K
Kwordm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHZvaWQqIGRhdGEsIGludCBzaXpl
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKworICAgIGNhbGxPbk1haW5U
aHJlYWQ8Q3VybERvd25sb2FkKiwgQ3VybERvd25sb2FkKiwgaW50LCBpbnQ+KHJlY2VpdmVkRGF0
YUNhbGxiYWNrLCB0aGlzLCBzaXplKTsKKworICAgIGlmIChtX3RlbXBQYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgbV90ZW1wUGF0aCA9IG9wZW5UZW1wb3JhcnlGaWxlKCJkb3dubG9hZCIsIG1fdGVt
cEhhbmRsZSk7CisKKyAgICBpZiAobV90ZW1wSGFuZGxlICE9IGludmFsaWRQbGF0Zm9ybUZpbGVI
YW5kbGUpIHsKKyAgICAgICAgY29uc3QgY2hhciogZmlsZURhdGEgPSBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YSk7CisgICAgICAgIHdyaXRlVG9GaWxlKG1fdGVtcEhhbmRsZSwgZmlsZURh
dGEsIHNpemUpOworICAgIH0KK30KKwordm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVSZXNw
b25zZSgpCit7CisgICAgaWYgKG1fd2ViRG93bmxvYWQpCisgICAgICAgIG1fd2ViRG93bmxvYWQt
PmRpZFJlY2VpdmVSZXNwb25zZSgpOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2
ZURhdGFPZkxlbmd0aChpbnQgc2l6ZSkKK3sKKyAgICBpZiAobV93ZWJEb3dubG9hZCkKKyAgICAg
ICAgbV93ZWJEb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGFPZkxlbmd0aChzaXplKTsKK30KKwordm9p
ZCBDdXJsRG93bmxvYWQ6OmRpZEZpbmlzaCgpCit7CisgICAgY2xvc2VGaWxlKCk7CisgICAgbW92
ZUZpbGVUb0Rlc3RpbmF0aW9uKCk7CisKKyAgICBpZiAobV93ZWJEb3dubG9hZCkKKyAgICAgICAg
bV93ZWJEb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkOjpkaWRG
YWlsKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBjbG9zZUZp
bGUoKTsKKworICAgIGlmIChtX2RlbGV0ZXNGaWxlVXBvbkZhaWx1cmUpCisgICAgICAgIGRlbGV0
ZUZpbGUobV90ZW1wUGF0aCk7CisKKyAgICBpZiAobV93ZWJEb3dubG9hZCkKKyAgICAgICAgbV93
ZWJEb3dubG9hZC0+ZGlkRmFpbCgpOworfQorCitzaXplX3QgQ3VybERvd25sb2FkOjp3cml0ZUNh
bGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkK
K3sKKyAgICBzaXplX3QgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOworICAgIEN1cmxEb3dubG9h
ZCogZG93bmxvYWQgPSByZWludGVycHJldF9jYXN0PEN1cmxEb3dubG9hZCo+KGRhdGEpOworCisg
ICAgaWYgKGRvd25sb2FkKQorICAgICAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEocHRyLCB0
b3RhbFNpemUpOworCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKworc2l6ZV90IEN1cmxEb3du
bG9hZDo6aGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1i
LCB2b2lkKiBkYXRhKQoreworICAgIHNpemVfdCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7Cisg
ICAgQ3VybERvd25sb2FkKiBkb3dubG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3VybERvd25sb2Fk
Kj4oZGF0YSk7CisKKyAgICBTdHJpbmcgaGVhZGVyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihw
dHIpLCB0b3RhbFNpemUpOworCisgICAgaWYgKGRvd25sb2FkKQorICAgICAgICBkb3dubG9hZC0+
ZGlkUmVjZWl2ZUhlYWRlcihoZWFkZXIpOworCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKwor
dm9pZCBDdXJsRG93bmxvYWQ6OmRvd25sb2FkRmluaXNoZWRDYWxsYmFjayhDdXJsRG93bmxvYWQq
IGRvd25sb2FkKQoreworICAgIGlmIChkb3dubG9hZCkKKyAgICAgICAgZG93bmxvYWQtPmRpZEZp
bmlzaCgpOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6ZG93bmxvYWRGYWlsZWRDYWxsYmFjayhD
dXJsRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGlmIChkb3dubG9hZCkKKyAgICAgICAgZG93
bmxvYWQtPmRpZEZhaWwoKTsKK30KKwordm9pZCBDdXJsRG93bmxvYWQ6OnJlY2VpdmVkRGF0YUNh
bGxiYWNrKEN1cmxEb3dubG9hZCogZG93bmxvYWQsIGludCBzaXplKQoreworICAgIGlmIChkb3du
bG9hZCkKKyAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhT2ZMZW5ndGgoc2l6ZSk7Cit9
CisKK3ZvaWQgQ3VybERvd25sb2FkOjpyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2soQ3VybERvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBpZiAoZG93bmxvYWQpCisgICAgICAgIGRvd25sb2FkLT5k
aWRSZWNlaXZlUmVzcG9uc2UoKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203435</attachid>
            <date>2013-05-31 04:44:38 -0700</date>
            <delta_ts>2013-05-31 22:41:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116150-20130531134258.patch</filename>
            <type>text/plain</type>
            <size>27115</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MTAxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEzLTA1LTMxICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtDdXJsXSBVbmFibGUg
dG8gZG93bmxvYWQgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTYxNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnRlZCBiYXNpYyBkb3dubG9hZCBmdW5jdGlvbmFsaXR5IGZvciBD
dXJsLgorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZGVkIGZp
bGUuCisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajogQWRkZWQgZmls
ZS4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6IEFk
ZGVkIGZpbGUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNw
cDogQWRkZWQuCisKIDIwMTMtMDUtMzEgIEFsYmVydG8gR2FyY2lhICA8YWdhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtTb3VwXSBbR3N0cmVhbWVyXSBBU1NFUlQgaW4gU3RyZWFtaW5nQ2xp
ZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxNTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM3
MjEsNiArMzM3MjEsNDIgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmls
ZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xj
dXJsXEN1cmxEb3dubG9hZC5jcHAiCisJCQkJCQk+CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCQk+CisJCQkJCQkJPFRvb2wKKwkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJCQkvPgorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCQkJPgorCQkJCQkJCTxUb29sCisJCQkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCQkJLz4KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJ
CQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQkJPgorCQkJCQkJCTxUb29sCisJ
CQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkJLz4KKwkJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQlOYW1lPSJQcm9k
dWN0aW9ufFdpbjMyIgorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJCT4K
KwkJCQkJCQk8VG9vbAorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJCS8+
CisJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxETlNDdXJsLmNwcCIK
IAkJCQkJCT4KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC00NzAwLDYgKzQ3MDAsMTIgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzIn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzIn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsRG93bmxvYWQuY3BwIj4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwv
Q2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xj
dXJsXEROU0N1cmwuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTUxMDExKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTUzLDYgKzE5NTMsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXENyZWRlbnRpYWxTdG9yYWdlQ3VybC5jcHAiPgogICAg
ICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJs
RG93bmxvYWQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0
ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGN1cmxcRE5TQ3VybC5jcHAiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3
b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cmxEb3dubG9hZC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWFpblRocmVhZFRhc2su
aD4KKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgQ3VybERvd25sb2FkKj4gOiBwdWJs
aWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaDxDdXJsRG93bmxvYWQqPiB7Cit9OworCisv
LyBDdXJsRG93bmxvYWRNYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VybERvd25sb2FkTWFuYWdlcjo6
Q3VybERvd25sb2FkTWFuYWdlcigpCis6IG1fdGhyZWFkSWQoMCkKKywgbV9jdXJsTXVsdGlIYW5k
bGUoMCkKKywgbV9hY3RpdmVEb3dubG9hZENvdW50KDApCissIG1fcnVuVGhyZWFkKGZhbHNlKQor
eworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgICBtX2N1cmxNdWx0
aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworfQorCitDdXJsRG93bmxvYWRNYW5hZ2VyOjp+
Q3VybERvd25sb2FkTWFuYWdlcigpCit7CisgICAgc3RvcFRocmVhZCgpOworICAgIGN1cmxfbXVs
dGlfY2xlYW51cChtX2N1cmxNdWx0aUhhbmRsZSk7CisgICAgY3VybF9nbG9iYWxfY2xlYW51cCgp
OworfQorCitib29sIEN1cmxEb3dubG9hZE1hbmFnZXI6OmFkZChDVVJMKiBjdXJsSGFuZGxlKQor
eworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKworICAgIG1fcGVuZGluZ0hhbmRs
ZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOworICAgIHN0YXJ0VGhyZWFkSWZOZWVkZWQoKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEN1cmxEb3dubG9hZE1hbmFnZXI6OnJlbW92ZShD
VVJMKiBjdXJsSGFuZGxlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKwor
ICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2ludCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpnZXRBY3RpdmVEb3dubG9hZENv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3RpdmVEb3dubG9hZENvdW50OworfQorCitp
bnQgQ3VybERvd25sb2FkTWFuYWdlcjo6Z2V0UGVuZGluZ0Rvd25sb2FkQ291bnQoKSBjb25zdAor
eworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICByZXR1cm4gbV9wZW5kaW5n
SGFuZGxlTGlzdC5zaXplKCk7Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6c3RhcnRU
aHJlYWRJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3J1blRocmVhZCkgeworICAgICAgICBpZiAo
bV90aHJlYWRJZCkKKyAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFk
SWQpOworICAgICAgICBtX3J1blRocmVhZCA9IHRydWU7CisgICAgICAgIG1fdGhyZWFkSWQgPSBj
cmVhdGVUaHJlYWQoZG93bmxvYWRUaHJlYWQsIHRoaXMsICJkb3dubG9hZFRocmVhZCIpOworICAg
IH0KK30KKwordm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkKCkKK3sKKyAgICBt
X3J1blRocmVhZCA9IGZhbHNlOworCisgICAgaWYgKG1fdGhyZWFkSWQpIHsKKyAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJZCk7CisgICAgICAgIG1fdGhyZWFkSWQgPSAw
OworICAgIH0KK30KKwordm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxl
KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBpZiAoIWdldEFj
dGl2ZURvd25sb2FkQ291bnQoKSAmJiAhZ2V0UGVuZGluZ0Rvd25sb2FkQ291bnQoKSkKKyAgICAg
ICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKK30KKwordm9pZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjp1
cGRhdGVIYW5kbGVMaXN0KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisK
KyAgICAvLyBBZGQgcGVuZGluZyBjdXJsIGVhc3kgaGFuZGxlcyB0byBtdWx0aSBsaXN0IAorICAg
IGludCBzaXplID0gbV9wZW5kaW5nSGFuZGxlTGlzdC5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgQ1VSTE1jb2RlIHJldHZhbCA9IGN1cmxfbXVs
dGlfYWRkX2hhbmRsZShtX2N1cmxNdWx0aUhhbmRsZSwgbV9wZW5kaW5nSGFuZGxlTGlzdFswXSk7
CisKKyAgICAgICAgaWYgKHJldHZhbCA9PSBDVVJMTV9PSykKKyAgICAgICAgICAgIG1fcGVuZGlu
Z0hhbmRsZUxpc3QucmVtb3ZlKDApOworICAgIH0KKworICAgIC8vIFJlbW92ZSBjdXJsIGVhc3kg
aGFuZGxlcyBmcm9tIG11bHRpIGxpc3QgCisgICAgc2l6ZSA9IG1fcmVtb3ZlZEhhbmRsZUxpc3Qu
c2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIENV
UkxNY29kZSByZXR2YWwgPSBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUobV9jdXJsTXVsdGlIYW5k
bGUsIG1fcmVtb3ZlZEhhbmRsZUxpc3RbMF0pOworCisgICAgICAgIGlmIChyZXR2YWwgPT0gQ1VS
TE1fT0spCisgICAgICAgICAgICBtX3JlbW92ZWRIYW5kbGVMaXN0LnJlbW92ZSgwKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkTWFuYWdlcjo6ZG93bmxvYWRUaHJlYWQodm9pZCogZGF0
YSkKK3sKKyAgICBDdXJsRG93bmxvYWRNYW5hZ2VyKiBkb3dubG9hZE1hbmFnZXIgPSByZWludGVy
cHJldF9jYXN0PEN1cmxEb3dubG9hZE1hbmFnZXIqPihkYXRhKTsKKworICAgIHdoaWxlIChkb3du
bG9hZE1hbmFnZXItPnJ1blRocmVhZCgpKSB7CisKKyAgICAgICAgZG93bmxvYWRNYW5hZ2VyLT51
cGRhdGVIYW5kbGVMaXN0KCk7CisKKyAgICAgICAgLy8gUmV0cnkgJ3NlbGVjdCcgaWYgaXQgd2Fz
IGludGVycnVwdGVkIGJ5IGEgcHJvY2VzcyBzaWduYWwuCisgICAgICAgIGludCByYyA9IDA7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZkX3NldCBmZHJlYWQ7CisgICAgICAgICAgICBmZF9z
ZXQgZmR3cml0ZTsKKyAgICAgICAgICAgIGZkX3NldCBmZGV4Y2VwOworCisgICAgICAgICAgICBp
bnQgbWF4ZmQgPSAwOworCisgICAgICAgICAgICBjb25zdCBpbnQgc2VsZWN0VGltZW91dE1TID0g
NTsKKworICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICAgICAgICAgIHRp
bWVvdXQudHZfc2VjID0gMDsKKyAgICAgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRp
bWVvdXRNUyAqIDEwMDA7IC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKKworICAgICAgICAg
ICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICAgICAgICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAg
ICAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7CisgICAgICAgICAgICBjdXJsX211bHRpX2Zkc2V0
KGRvd25sb2FkTWFuYWdlci0+Z2V0TXVsdGlIYW5kbGUoKSwgJmZkcmVhZCwgJmZkd3JpdGUsICZm
ZGV4Y2VwLCAmbWF4ZmQpOworICAgICAgICAgICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0
b3JzIGFyZSBlbXB0eSwgd2luc29jayB3aWxsIHJldHVybiAtMQorICAgICAgICAgICAgLy8gYW5k
IGJhaWwgb3V0LCBzdG9wcGluZyB0aGUgZmlsZSBkb3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCisg
ICAgICAgICAgICAvLyBoYXZlIHZhbGlkIGZpbGUgZGVzY3JpcHRvcnMgYmVmb3JlIGNhbGxpbmcg
c2VsZWN0LgorICAgICAgICAgICAgaWYgKG1heGZkID49IDApCisgICAgICAgICAgICAgICAgcmMg
PSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVv
dXQpOworICAgICAgICB9IHdoaWxlIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAg
ICAgICAgd2hpbGUgKGN1cmxfbXVsdGlfcGVyZm9ybShkb3dubG9hZE1hbmFnZXItPmdldE11bHRp
SGFuZGxlKCksICZkb3dubG9hZE1hbmFnZXItPm1fYWN0aXZlRG93bmxvYWRDb3VudCkgPT0gQ1VS
TE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7IH0KKworICAgICAgICBpbnQgbWVzc2FnZXNJblF1ZXVl
ID0gMDsKKyAgICAgICAgQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoZG93bmxv
YWRNYW5hZ2VyLT5nZXRNdWx0aUhhbmRsZSgpLCAmbWVzc2FnZXNJblF1ZXVlKTsKKworICAgICAg
ICBpZiAoIW1zZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEN1cmxEb3dubG9h
ZCogZG93bmxvYWQgPSAwOworICAgICAgICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5m
byhtc2ctPmVhc3lfaGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAmZG93bmxvYWQpOworCisgICAg
ICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgICAgICAgIGlmIChtc2ct
PmRhdGEucmVzdWx0ID09IENVUkxFX09LKQorICAgICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQ8Q3VybERvd25sb2FkKiwgQ3VybERvd25sb2FkKj4oQ3VybERvd25sb2FkOjpkb3dubG9hZEZp
bmlzaGVkQ2FsbGJhY2ssIGRvd25sb2FkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBjYWxsT25NYWluVGhyZWFkPEN1cmxEb3dubG9hZCosIEN1cmxEb3dubG9hZCo+KEN1cmxE
b3dubG9hZDo6ZG93bmxvYWRGYWlsZWRDYWxsYmFjaywgZG93bmxvYWQpOworCisgICAgICAgICAg
ICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoZG93bmxvYWRNYW5hZ2VyLT5nZXRNdWx0aUhhbmRs
ZSgpLCBtc2ctPmVhc3lfaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGRvd25sb2FkTWFu
YWdlci0+c3RvcFRocmVhZElmSWRsZSgpOworICAgIH0KK30KKworLy8gQ3VybERvd25sb2FkIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK0N1cmxEb3dubG9hZE1hbmFnZXIgQ3VybERvd25sb2FkOjptX2Rv
d25sb2FkTWFuYWdlcjsKKworQ3VybERvd25sb2FkOjpDdXJsRG93bmxvYWQoKQorOiBtX2N1cmxI
YW5kbGUoMCkKKywgbV91cmwoMCkKKywgbV90ZW1wSGFuZGxlKGludmFsaWRQbGF0Zm9ybUZpbGVI
YW5kbGUpCissIG1fZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZShmYWxzZSkKKywgbV9saXN0ZW5lcigw
KQoreworfQorCitDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQoKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKKworICAgIGlmIChtX2N1cmxIYW5kbGUpCisgICAgICAgIGN1
cmxfZWFzeV9jbGVhbnVwKG1fY3VybEhhbmRsZSk7CisKKyAgICBpZiAobV91cmwpCisgICAgICAg
IGZhc3RGcmVlKG1fdXJsKTsKKworICAgIGNsb3NlRmlsZSgpOworICAgIG1vdmVGaWxlVG9EZXN0
aW5hdGlvbigpOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxvYWRMaXN0
ZW5lciogbGlzdGVuZXIsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIWxpc3RlbmVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAg
ICBtX2N1cmxIYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgICAgU3RyaW5nIHVybFN0ciA9
IHVybC5zdHJpbmcoKTsKKyAgICBtX3VybCA9IGZhc3RTdHJEdXAodXJsU3RyLmxhdGluMSgpLmRh
dGEoKSk7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9VUkws
IG1fdXJsKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9QUklW
QVRFLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9X
UklURUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3Vy
bEhhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsIHRoaXMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9jdXJsSGFuZGxlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBoZWFkZXJDYWxsYmFjayk7Cisg
ICAgY3VybF9lYXN5X3NldG9wdChtX2N1cmxIYW5kbGUsIENVUkxPUFRfV1JJVEVIRUFERVIsIHRo
aXMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX0ZPTExPV0xP
Q0FUSU9OLCAxKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9N
QVhSRURJUlMsIDEwKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9Q
VF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKworICAgIG1fbGlzdGVuZXIgPSBsaXN0ZW5lcjsK
K30KKworYm9vbCBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkKK3sKKyAgICByZXR1cm4gbV9kb3dubG9h
ZE1hbmFnZXIuYWRkKG1fY3VybEhhbmRsZSk7Cit9CisKK2Jvb2wgQ3VybERvd25sb2FkOjpjYW5j
ZWwoKQoreworICAgIHJldHVybiBtX2Rvd25sb2FkTWFuYWdlci5yZW1vdmUobV9jdXJsSGFuZGxl
KTsKK30KKworU3RyaW5nIEN1cmxEb3dubG9hZDo6Z2V0VGVtcFBhdGgoKSBjb25zdAoreworICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICByZXR1cm4gbV90ZW1wUGF0aDsKK30K
KworU3RyaW5nIEN1cmxEb3dubG9hZDo6Z2V0VXJsKCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgcmV0dXJuIFN0cmluZyhtX3VybCk7Cit9CisKK1Jlc291
cmNlUmVzcG9uc2UgQ3VybERvd25sb2FkOjpnZXRSZXNwb25zZSgpIGNvbnN0Cit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIHJldHVybiBtX3Jlc3BvbnNlOworfQorCit2
b2lkIEN1cmxEb3dubG9hZDo6Y2xvc2VGaWxlKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9tdXRleCk7CisKKyAgICBpZiAobV90ZW1wSGFuZGxlKSB7CisgICAgICAgIFdlYkNvcmU6OmNs
b3NlRmlsZShtX3RlbXBIYW5kbGUpOworICAgICAgICBtX3RlbXBIYW5kbGUgPSBpbnZhbGlkUGxh
dGZvcm1GaWxlSGFuZGxlOworICAgIH0KK30KKwordm9pZCBDdXJsRG93bmxvYWQ6Om1vdmVGaWxl
VG9EZXN0aW5hdGlvbigpCit7CisgICAgaWYgKG1fZGVzdGluYXRpb24uaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICA6Ok1vdmVGaWxlKG1fdGVtcFBhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSwgbV9kZXN0aW5hdGlvbi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpKTsKK30KKwordm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIoY29uc3Qg
U3RyaW5nJiBoZWFkZXIpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworCisg
ICAgaWYgKGhlYWRlciA9PSAiXHJcbiIgfHwgaGVhZGVyID09ICJcbiIpIHsKKworICAgICAgICBs
b25nIGh0dHBDb2RlID0gMDsKKyAgICAgICAgQ1VSTGNvZGUgZXJyID0gY3VybF9lYXN5X2dldGlu
Zm8obV9jdXJsSGFuZGxlLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCAmaHR0cENvZGUpOworCisg
ICAgICAgIGlmIChodHRwQ29kZSA+PSAyMDAgJiYgaHR0cENvZGUgPCAzMDApIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHVybCA9IDA7CisgICAgICAgICAgICBlcnIgPSBjdXJsX2Vhc3lfZ2V0
aW5mbyhtX2N1cmxIYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1cmwpOworICAgICAg
ICAgICAgbV9yZXNwb25zZS5zZXRVUkwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkpOworCisg
ICAgICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRp
YVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKSk7CisgICAg
ICAgICAgICBtX3Jlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoZXh0cmFjdENoYXJzZXRGcm9t
TWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiKSkpOwor
ICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShmaWxlbmFtZUZyb21I
VFRQQ29udGVudERpc3Bvc2l0aW9uKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50
LURpc3Bvc2l0aW9uIikpKTsKKworICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZDxDdXJsRG93
bmxvYWQqLCBDdXJsRG93bmxvYWQqPihyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2ssIHRoaXMpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHNwbGl0UG9zID0gaGVhZGVyLmZp
bmQoIjoiKTsKKyAgICAgICAgaWYgKHNwbGl0UG9zICE9IC0xKQorICAgICAgICAgICAgbV9yZXNw
b25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaGVhZGVyLmxlZnQoc3BsaXRQb3MpLCBoZWFkZXIuc3Vi
c3RyaW5nKHNwbGl0UG9zKzEpLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlRGF0YSh2b2lkKiBkYXRhLCBpbnQgc2l6ZSkKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkPEN1
cmxEb3dubG9hZCosIEN1cmxEb3dubG9hZCosIGludCwgaW50PihyZWNlaXZlZERhdGFDYWxsYmFj
aywgdGhpcywgc2l6ZSk7CisKKyAgICBpZiAobV90ZW1wUGF0aC5pc0VtcHR5KCkpCisgICAgICAg
IG1fdGVtcFBhdGggPSBvcGVuVGVtcG9yYXJ5RmlsZSgiZG93bmxvYWQiLCBtX3RlbXBIYW5kbGUp
OworCisgICAgaWYgKG1fdGVtcEhhbmRsZSAhPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEpOworICAgICAgICB3cml0ZVRvRmlsZShtX3RlbXBIYW5kbGUsIGZpbGVEYXRhLCBzaXpl
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UoKQor
eworICAgIGlmIChtX2xpc3RlbmVyKQorICAgICAgICBtX2xpc3RlbmVyLT5kaWRSZWNlaXZlUmVz
cG9uc2UoKTsKK30KKwordm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhT2ZMZW5ndGgo
aW50IHNpemUpCit7CisgICAgaWYgKG1fbGlzdGVuZXIpCisgICAgICAgIG1fbGlzdGVuZXItPmRp
ZFJlY2VpdmVEYXRhT2ZMZW5ndGgoc2l6ZSk7Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkOjpkaWRG
aW5pc2goKQoreworICAgIGNsb3NlRmlsZSgpOworICAgIG1vdmVGaWxlVG9EZXN0aW5hdGlvbigp
OworCisgICAgaWYgKG1fbGlzdGVuZXIpCisgICAgICAgIG1fbGlzdGVuZXItPmRpZEZpbmlzaCgp
OworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6ZGlkRmFpbCgpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworCisgICAgY2xvc2VGaWxlKCk7CisKKyAgICBpZiAobV9kZWxldGVz
RmlsZVVwb25GYWlsdXJlKQorICAgICAgICBkZWxldGVGaWxlKG1fdGVtcFBhdGgpOworCisgICAg
aWYgKG1fbGlzdGVuZXIpCisgICAgICAgIG1fbGlzdGVuZXItPmRpZEZhaWwoKTsKK30KKworc2l6
ZV90IEN1cmxEb3dubG9hZDo6d3JpdGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCBzaXplLCBz
aXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCit7CisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUg
KiBubWVtYjsKKyAgICBDdXJsRG93bmxvYWQqIGRvd25sb2FkID0gcmVpbnRlcnByZXRfY2FzdDxD
dXJsRG93bmxvYWQqPihkYXRhKTsKKworICAgIGlmIChkb3dubG9hZCkKKyAgICAgICAgZG93bmxv
YWQtPmRpZFJlY2VpdmVEYXRhKHB0ciwgdG90YWxTaXplKTsKKworICAgIHJldHVybiB0b3RhbFNp
emU7Cit9CisKK3NpemVfdCBDdXJsRG93bmxvYWQ6OmhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwg
c2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3sKKyAgICBzaXplX3QgdG90
YWxTaXplID0gc2l6ZSAqIG5tZW1iOworICAgIEN1cmxEb3dubG9hZCogZG93bmxvYWQgPSByZWlu
dGVycHJldF9jYXN0PEN1cmxEb3dubG9hZCo+KGRhdGEpOworCisgICAgU3RyaW5nIGhlYWRlcihz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKworICAgIGlmIChkb3du
bG9hZCkKKyAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVIZWFkZXIoaGVhZGVyKTsKKworICAg
IHJldHVybiB0b3RhbFNpemU7Cit9CisKK3ZvaWQgQ3VybERvd25sb2FkOjpkb3dubG9hZEZpbmlz
aGVkQ2FsbGJhY2soQ3VybERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBpZiAoZG93bmxvYWQp
CisgICAgICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKK30KKwordm9pZCBDdXJsRG93bmxvYWQ6
OmRvd25sb2FkRmFpbGVkQ2FsbGJhY2soQ3VybERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBp
ZiAoZG93bmxvYWQpCisgICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKCk7Cit9CisKK3ZvaWQgQ3Vy
bERvd25sb2FkOjpyZWNlaXZlZERhdGFDYWxsYmFjayhDdXJsRG93bmxvYWQqIGRvd25sb2FkLCBp
bnQgc2l6ZSkKK3sKKyAgICBpZiAoZG93bmxvYWQpCisgICAgICAgIGRvd25sb2FkLT5kaWRSZWNl
aXZlRGF0YU9mTGVuZ3RoKHNpemUpOworfQorCit2b2lkIEN1cmxEb3dubG9hZDo6cmVjZWl2ZWRS
ZXNwb25zZUNhbGxiYWNrKEN1cmxEb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgaWYgKGRvd25s
b2FkKQorICAgICAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxEb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQ3VybERvd25sb2FkX2gKKyNkZWZpbmUgQ3VybERvd25sb2FkX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VS
ZXNwb25zZS5oPgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNp
bmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKwor
Y2xhc3MgQ3VybERvd25sb2FkTWFuYWdlciB7CitwdWJsaWM6CisgICAgQ3VybERvd25sb2FkTWFu
YWdlcigpOworICAgIH5DdXJsRG93bmxvYWRNYW5hZ2VyKCk7CisKKyAgICBib29sIGFkZChDVVJM
KiBjdXJsSGFuZGxlKTsKKyAgICBib29sIHJlbW92ZShDVVJMKiBjdXJsSGFuZGxlKTsKKworICAg
IGludCBnZXRBY3RpdmVEb3dubG9hZENvdW50KCkgY29uc3Q7CisgICAgaW50IGdldFBlbmRpbmdE
b3dubG9hZENvdW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFydFRocmVhZElm
TmVlZGVkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkSWZJ
ZGxlKCk7CisKKyAgICB2b2lkIHVwZGF0ZUhhbmRsZUxpc3QoKTsKKworICAgIENVUkxNKiBnZXRN
dWx0aUhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VybE11bHRpSGFuZGxlOyB9CisKKyAgICBi
b29sIHJ1blRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuVGhyZWFkOyB9CisgICAgdm9pZCBz
ZXRSdW5UaHJlYWQoYm9vbCBydW5UaHJlYWQpIHsgbV9ydW5UaHJlYWQgPSBydW5UaHJlYWQ7IH0K
KworICAgIHN0YXRpYyB2b2lkIGRvd25sb2FkVGhyZWFkKHZvaWQqIGRhdGEpOworCisgICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElkOworICAgIENVUkxNKiBtX2N1cmxNdWx0aUhhbmRsZTsK
KyAgICBpbnQgbV9hY3RpdmVEb3dubG9hZENvdW50OworICAgIFZlY3RvcjxDVVJMKj4gbV9wZW5k
aW5nSGFuZGxlTGlzdDsKKyAgICBWZWN0b3I8Q1VSTCo+IG1fcmVtb3ZlZEhhbmRsZUxpc3Q7Cisg
ICAgbXV0YWJsZSBNdXRleCBtX211dGV4OworICAgIGJvb2wgbV9ydW5UaHJlYWQ7Cit9OworCitj
bGFzcyBDdXJsRG93bmxvYWRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YU9m
TGVuZ3RoKGludCBzaXplKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoKCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoKSB7IH0KK307CisKK2NsYXNzIEN1cmxEb3dubG9hZCB7
CitwdWJsaWM6CisgICAgQ3VybERvd25sb2FkKCk7CisgICAgfkN1cmxEb3dubG9hZCgpOworCisg
ICAgdm9pZCBpbml0KEN1cmxEb3dubG9hZExpc3RlbmVyKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYp
OworICAgIGJvb2wgc3RhcnQoKTsKKyAgICBib29sIGNhbmNlbCgpOworCisgICAgU3RyaW5nIGdl
dFRlbXBQYXRoKCkgY29uc3Q7CisgICAgU3RyaW5nIGdldFVybCgpIGNvbnN0OworICAgIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UgZ2V0UmVzcG9uc2UoKSBjb25zdDsKKworICAgIGJvb2wgZGVs
ZXRlc0ZpbGVVcG9uRmFpbHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlc0ZpbGVVcG9uRmFp
bHVyZTsgfQorICAgIHZvaWQgc2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZShib29sIGRlbGV0ZXNG
aWxlVXBvbkZhaWx1cmUpIHsgbV9kZWxldGVzRmlsZVVwb25GYWlsdXJlID0gZGVsZXRlc0ZpbGVV
cG9uRmFpbHVyZTsgfQorCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGRl
c3RpbmF0aW9uKSB7IG1fZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgor
ICAgIHZvaWQgY2xvc2VGaWxlKCk7CisgICAgdm9pZCBtb3ZlRmlsZVRvRGVzdGluYXRpb24oKTsK
KworICAgIC8vIENhbGxlZCBvbiBkb3dubG9hZCB0aHJlYWQuCisgICAgdm9pZCBkaWRSZWNlaXZl
SGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHZv
aWQqIGRhdGEsIGludCBzaXplKTsKKworICAgIC8vIENhbGxlZCBvbiBtYWluIHRocmVhZC4KKyAg
ICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFPZkxl
bmd0aChpbnQgc2l6ZSk7CisgICAgdm9pZCBkaWRGaW5pc2goKTsKKyAgICB2b2lkIGRpZEZhaWwo
KTsKKworICAgIHN0YXRpYyBzaXplX3Qgd3JpdGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCwg
c2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKTsKKyAgICBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxi
YWNrKGNoYXIqIHB0ciwgc2l6ZV90LCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpOworCisgICAg
c3RhdGljIHZvaWQgZG93bmxvYWRGaW5pc2hlZENhbGxiYWNrKEN1cmxEb3dubG9hZCopOworICAg
IHN0YXRpYyB2b2lkIGRvd25sb2FkRmFpbGVkQ2FsbGJhY2soQ3VybERvd25sb2FkKik7CisgICAg
c3RhdGljIHZvaWQgcmVjZWl2ZWREYXRhQ2FsbGJhY2soQ3VybERvd25sb2FkKiwgaW50IHNpemUp
OworICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhDdXJsRG93bmxvYWQq
KTsKKworICAgIENVUkwqIG1fY3VybEhhbmRsZTsKKyAgICBjaGFyKiBtX3VybDsKKyAgICBTdHJp
bmcgbV90ZW1wUGF0aDsKKyAgICBTdHJpbmcgbV9kZXN0aW5hdGlvbjsKKyAgICBXZWJDb3JlOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgbV90ZW1wSGFuZGxlOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgbV9yZXNwb25zZTsKKyAgICBib29sIG1fZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZTsKKyAg
ICBtdXRhYmxlIE11dGV4IG1fbXV0ZXg7CisgICAgQ3VybERvd25sb2FkTGlzdGVuZXIgKm1fbGlz
dGVuZXI7CisKKyAgICBzdGF0aWMgQ3VybERvd25sb2FkTWFuYWdlciBtX2Rvd25sb2FkTWFuYWdl
cjsKKworICAgIGZyaWVuZCBjbGFzcyBDdXJsRG93bmxvYWRNYW5hZ2VyOworfTsKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTEwMTMpCisrKyBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxMy0wNS0z
MSAgcGVhdm9Ab3V0bG9vay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KKworICAgICAgICBbQ3Vy
bF0gVW5hYmxlIHRvIGRvd25sb2FkIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2MTUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgYmFzaWMgZG93bmxvYWQgZnVuY3Rpb25h
bGl0eSBmb3IgQ3VybC4KKworICAgICAgICAqIFdlYkRvd25sb2FkLmg6CisgICAgICAgICogV2Vi
RG93bmxvYWRDdXJsLmNwcDoKKyAgICAgICAgKFdlYkRvd25sb2FkOjppbml0KToKKyAgICAgICAg
KFdlYkRvd25sb2FkOjpzdGFydCk6CisgICAgICAgIChXZWJEb3dubG9hZDo6Y2FuY2VsKToKKyAg
ICAgICAgKFdlYkRvd25sb2FkOjpkZWxldGVzRmlsZVVwb25GYWlsdXJlKToKKyAgICAgICAgKFdl
YkRvd25sb2FkOjpzZXREZWxldGVzRmlsZVVwb25GYWlsdXJlKToKKyAgICAgICAgKFdlYkRvd25s
b2FkOjpzZXREZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJEb3dubG9hZDo6dXNlQ3JlZGVudGlh
bCk6CisgICAgICAgIChXZWJEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkRvd25sb2FkOjpkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKToKKyAgICAgICAgKFdlYkRvd25s
b2FkOjpkaWRGaW5pc2gpOgorICAgICAgICAoV2ViRG93bmxvYWQ6OmRpZEZhaWwpOgorCiAyMDEz
LTA1LTI5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtX
aW5kb3dzXSBCZSBjb25zaXN0ZW50IHdpdGggYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gYmVoYXZp
b3IKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQuaAkocmV2aXNpb24gMTUxMDExKQorKysgU291
cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
OCBAQAogCiAjaWYgVVNFKENGTkVUV09SSykKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxEb3du
bG9hZFByaXYuaD4KKyNlbGlmIFVTRShDVVJMKQorI2luY2x1ZGUgPFdlYkNvcmUvQ3VybERvd25s
b2FkLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDIsNyArNDQsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiB9CiAKLWNs
YXNzIFdlYkRvd25sb2FkIDogcHVibGljIElXZWJEb3dubG9hZCwgcHVibGljIElXZWJVUkxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlcgorY2xhc3MgV2ViRG93bmxvYWQKKzogcHVibGljIElX
ZWJEb3dubG9hZAorLCBwdWJsaWMgSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVy
CisjaWYgVVNFKENVUkwpCissIHB1YmxpYyBDdXJsRG93bmxvYWRMaXN0ZW5lcgorI2VuZGlmCiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFdlYkRvd25sb2FkKiBjcmVhdGVJbnN0YW5jZShjb25zdCBX
ZWJDb3JlOjpLVVJMJiwgSVdlYkRvd25sb2FkRGVsZWdhdGUqKTsKQEAgLTExOSw2ICsxMjYsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oQ0ZVUkxSZWYpOwogICAg
IHZvaWQgZGlkRmluaXNoKCk7CiAgICAgdm9pZCBkaWRGYWlsKENGRXJyb3JSZWYpOworI2VsaWYg
VVNFKENVUkwpCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YU9mTGVuZ3RoKGludCBzaXplKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluaXNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoKTsKICNlbmRpZgog
CiBwcm90ZWN0ZWQ6CkBAIC0xMjgsNiArMTQwLDggQEAgcHJvdGVjdGVkOgogICAgIFdURjo6U3Ry
aW5nIG1fYnVuZGxlUGF0aDsKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIFJldGFpblB0cjxDRlVS
TERvd25sb2FkUmVmPiBtX2Rvd25sb2FkOworI2VsaWYgVVNFKENVUkwpCisgICAgQ3VybERvd25s
b2FkIG1fZG93bmxvYWQ7CiAjZW5kaWYKICAgICBDT01QdHI8SVdlYk11dGFibGVVUkxSZXF1ZXN0
PiBtX3JlcXVlc3Q7CiAgICAgQ09NUHRyPElXZWJEb3dubG9hZERlbGVnYXRlPiBtX2RlbGVnYXRl
OwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRDdXJsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZEN1cmwuY3BwCShyZXZpc2lvbiAxNTEw
MTEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZEN1cmwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw5IEBAIHZvaWQgV2ViRG93bmxvYWQ6OmluaXQoUmVzb3VyY2VIYW5k
bGUqIGgKIAogdm9pZCBXZWJEb3dubG9hZDo6aW5pdChjb25zdCBLVVJMJiB1cmwsIElXZWJEb3du
bG9hZERlbGVnYXRlKiBkZWxlZ2F0ZSkKIHsKLSAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9k
ZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAgbV9kb3dubG9hZC5pbml0KHRoaXMsIHVybCk7CiB9
CiAKIC8vIElXZWJEb3dubG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NSwxNCArODcsMjEgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEb3dubG9hZDo6aQogCiBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkRvd25sb2FkOjpzdGFydCgpCiB7Ci0gICBub3RJbXBsZW1lbnRlZCgpOwotICAg
cmV0dXJuIEVfRkFJTDsKKyAgICBpZiAoIW1fZG93bmxvYWQuc3RhcnQoKSkKKyAgICAgICAgcmV0
dXJuIEVfRkFJTDsKKworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5k
aWRCZWdpbih0aGlzKTsKKworICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkRvd25sb2FkOjpjYW5jZWwoKQogewotICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgIHJldHVybiBFX0ZBSUw7CisgICAgaWYgKCFtX2Rvd25sb2FkLmNhbmNlbCgpKQorICAgICAg
ICByZXR1cm4gRV9GQUlMOworCisgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmNhbmNlbEZvclJlc3VtZSgpCkBAIC0xMDQsMjMgKzEx
MywyNSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpjCiBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpkZWxldGVzRmlsZVVwb25GYWlsdXJlKAog
ICAgICAgICAvKiBbb3V0LCByZXR2YWxdICovIEJPT0wqIHJlc3VsdCkKIHsKLSAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICByZXR1cm4gRV9GQUlMOworICAgICpyZXN1bHQgPSBtX2Rvd25sb2FkLmRl
bGV0ZXNGaWxlVXBvbkZhaWx1cmUoKSA/IFRSVUUgOiBGQUxTRTsKKyAgICByZXR1cm4gU19PSzsK
IH0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEb3dubG9hZDo6c2V0RGVsZXRlc0Zp
bGVVcG9uRmFpbHVyZSgKICAgICAgICAgLyogW2luXSAqLyBCT09MIGRlbGV0ZXNGaWxlVXBvbkZh
aWx1cmUpCiB7Ci0gICBub3RJbXBsZW1lbnRlZCgpOwotICAgcmV0dXJuIEVfRkFJTDsKKyAgICBt
X2Rvd25sb2FkLnNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmUoZGVsZXRlc0ZpbGVVcG9uRmFpbHVy
ZSk7CisgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
RG93bmxvYWQ6OnNldERlc3RpbmF0aW9uKAogICAgICAgICAvKiBbaW5dICovIEJTVFIgcGF0aCwg
CiAgICAgICAgIC8qIFtpbl0gKi8gQk9PTCBhbGxvd092ZXJ3cml0ZSkKIHsKLSAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICByZXR1cm4gRV9GQUlMOworICAgIHNpemVfdCBsZW4gPSB3Y3NsZW4ocGF0
aCk7CisgICAgbV9kZXN0aW5hdGlvbiA9IFN0cmluZyhwYXRoLCBsZW4pOworICAgIG1fZG93bmxv
YWQuc2V0RGVzdGluYXRpb24obV9kZXN0aW5hdGlvbik7CisgICAgcmV0dXJuIFNfT0s7CiB9CiAK
IC8vIElXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlciAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0x
NDYsMyArMTU3LDQ0IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OnUK
ICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICByZXR1cm4gRV9GQUlMOwogfQorCit2b2lkIFdlYkRv
d25sb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2UoKQoreworICAgIENPTVB0cjxXZWJEb3dubG9hZD4g
cHJvdGVjdCA9IHRoaXM7CisKKyAgICBpZiAobV9kZWxlZ2F0ZSkgeworICAgICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlID0gbV9kb3dubG9hZC5nZXRSZXNwb25zZSgpOworICAgICAgICBD
T01QdHI8V2ViVVJMUmVzcG9uc2U+IHdlYlJlc3BvbnNlKEFkb3B0Q09NLCBXZWJVUkxSZXNwb25z
ZTo6Y3JlYXRlSW5zdGFuY2UocmVzcG9uc2UpKTsKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHRoaXMsIHdlYlJlc3BvbnNlLmdldCgpKTsKKworICAgICAgICBTdHJpbmcg
c3VnZ2VzdGVkRmlsZW5hbWUgPSByZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpOworICAgICAg
ICBpZiAoc3VnZ2VzdGVkRmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgc3VnZ2VzdGVk
RmlsZW5hbWUgPSBwYXRoR2V0RmlsZU5hbWUocmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpOworICAg
ICAgICBCU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lQlNUUihzdWdnZXN0ZWRGaWxlbmFtZS5jaGFy
YWN0ZXJzKCksIHN1Z2dlc3RlZEZpbGVuYW1lLmxlbmd0aCgpKTsKKyAgICAgICAgbV9kZWxlZ2F0
ZS0+ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUodGhpcywgc3VnZ2VzdGVk
RmlsZW5hbWVCU1RSKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViRG93bmxvYWQ6OmRpZFJlY2VpdmVE
YXRhT2ZMZW5ndGgoaW50IHNpemUpCit7CisgICAgQ09NUHRyPFdlYkRvd25sb2FkPiBwcm90ZWN0
ID0gdGhpczsKKworICAgIGlmIChtX2RlbGVnYXRlKQorICAgICAgICBtX2RlbGVnYXRlLT5kaWRS
ZWNlaXZlRGF0YU9mTGVuZ3RoKHRoaXMsIHNpemUpOworfQorCit2b2lkIFdlYkRvd25sb2FkOjpk
aWRGaW5pc2goKQoreworICAgIENPTVB0cjxXZWJEb3dubG9hZD4gcHJvdGVjdCA9IHRoaXM7CisK
KyAgICBpZiAobV9kZWxlZ2F0ZSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkRmluaXNoKHRoaXMp
OworfQorCit2b2lkIFdlYkRvd25sb2FkOjpkaWRGYWlsKCkKK3sKKyAgICBDT01QdHI8V2ViRG93
bmxvYWQ+IHByb3RlY3QgPSB0aGlzOworCisgICAgaWYgKG1fZGVsZWdhdGUpCisgICAgICAgIG1f
ZGVsZWdhdGUtPmRpZEZhaWxXaXRoRXJyb3IodGhpcywgMCk7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>