<?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>34084</bug_id>
          
          <creation_ts>2010-01-25 06:24:46 -0800</creation_ts>
          <short_desc>Geolocation service does not cache position information between browser sessions</short_desc>
          <delta_ts>2010-02-23 04:08:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>30676</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>ariya.hidayat</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>sfalken</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184266</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-25 06:24:46 -0800</bug_when>
    <thetext>Android Geolocation service does not cache position information between browser sessions.

This is required to fully implement the Geolocation maximumAge property.
See https://bugs.webkit.org/show_bug.cgi?id=30676</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186893</commentid>
    <comment_count>1</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-02 03:25:32 -0800</bug_when>
    <thetext>This problem is not specific to Android</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186922</commentid>
    <comment_count>2</comment_count>
      <attachid>47923</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-02 04:52:19 -0800</bug_when>
    <thetext>Created attachment 47923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186988</commentid>
    <comment_count>3</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-02 08:57:27 -0800</bug_when>
    <thetext>See Bug 30676 for the patch to implement the maximumAge property, which makes use of the position cache added in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189698</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-11 08:30:26 -0800</bug_when>
    <thetext>ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189722</commentid>
    <comment_count>5</comment_count>
      <attachid>47923</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-11 09:51:30 -0800</bug_when>
    <thetext>Comment on attachment 47923
Patch

Have you thought about some way of testing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189746</commentid>
    <comment_count>6</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-11 11:00:56 -0800</bug_when>
    <thetext>&gt; Have you thought about some way of testing this?
Yes, it will be tested through the Geolocation API using the maximumAge parameter. It&apos;s the maximumAge parameter that requires this change. See Bug 30676, which this bug blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189806</commentid>
    <comment_count>7</comment_count>
      <attachid>47923</attachid>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-11 14:59:57 -0800</bug_when>
    <thetext>Comment on attachment 47923
Patch

I&apos;ll add more remarks as I am trying to understand the whole Geolocation stuff, but meanwhile..

&gt; +        * Android.mk: Modified. Added GeolocationPositionCache.cpp
&gt; +        * GNUmakefile.am: Modified. Added GeolocationPositionCache.[cpp|h]
&gt; +        * WebCore.gypi: Modified. Added GeolocationPositionCache.[cpp|h]
&gt; +        * WebCore.xcodeproj/project.pbxproj: Modified. Added GeolocationPositionCache.[cpp|h]

Even if Qt port does not fully support Geolocation yet, shouldn&apos;t you add GeolocationPositionCache.[cpp|h] to WebCore/WebCore.pro?

&gt; +static const char* databaseName = &quot;/CachedPosition.db&quot;;

Is there a standard name for this? Or can we just pick a sensible one?

&gt; +void GeolocationPositionCache::setCachedPosition(Geoposition* cachedPosition)
&gt; +{
&gt; +    // We do not take owenership from the caller, but add our own ref count.
&gt; +    *s_cachedPosition = cachedPosition;
&gt; +}

Small typo there. Also. maybe mention why the ownership is not taken (following the usual practice of commenting why instead of what the next line does).

&gt; +PassRefPtr&lt;Geoposition&gt; GeolocationPositionCache::readFromDB()
&gt; +{
&gt; +    SQLiteDatabase database;
&gt; +    if (!s_databaseFile || !database.open(*s_databaseFile))
&gt; +        return 0;

Also for other returns in this function: is it safe to return 0 here instead of &quot;default&quot; position (if default makes sense at all)?

&gt; +void GeolocationPositionCache::writeToDB(Geoposition* position)

Can&apos;t the parameter be a const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190998</commentid>
    <comment_count>8</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-17 05:06:20 -0800</bug_when>
    <thetext>Thanks for the comments

&gt; Even if Qt port does not fully support Geolocation yet, shouldn&apos;t you add
&gt; GeolocationPositionCache.[cpp|h] to WebCore/WebCore.pro?
Will fix

&gt; &gt; +static const char* databaseName = &quot;/CachedPosition.db&quot;;
&gt; 
&gt; Is there a standard name for this? Or can we just pick a sensible one?
I don&apos;t know of a standard name, I think this seems reasonable. Looking at the database API code, the precedent is to use a hardcoded database name and a platform-configurable path, as here.

&gt; Small typo there. Also. maybe mention why the ownership is not taken (following
&gt; the usual practice of commenting why instead of what the next line does).
I think the comment is probably redundant, will remove.

&gt; Also for other returns in this function: is it safe to return 0 here instead of
&gt; &quot;default&quot; position (if default makes sense at all)?
Yes, it&apos;s safe to return 0 - this is handled by the Geolocation object. There&apos;s no concept of a default position.

&gt; &gt; +void GeolocationPositionCache::writeToDB(Geoposition* position)
&gt; 
&gt; Can&apos;t the parameter be a const?
Will fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191000</commentid>
    <comment_count>9</comment_count>
      <attachid>48896</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-17 05:09:13 -0800</bug_when>
    <thetext>Created attachment 48896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191129</commentid>
    <comment_count>10</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-17 11:55:47 -0800</bug_when>
    <thetext>&gt; &gt; &gt; +static const char* databaseName = &quot;/CachedPosition.db&quot;;
&gt; &gt; 
&gt; &gt; Is there a standard name for this? Or can we just pick a sensible one?
&gt; I don&apos;t know of a standard name, I think this seems reasonable. Looking at the
&gt; database API code, the precedent is to use a hardcoded database name and a
&gt; platform-configurable path, as here.

Sounds sensible. BTW, what about CachedGeoposition as the name (to signify the &quot;Geo&quot;).

&gt; Yes, it&apos;s safe to return 0 - this is handled by the Geolocation object. There&apos;s
&gt; no concept of a default position.

Acknowledged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191252</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-17 15:24:56 -0800</bug_when>
    <thetext>&gt; Sounds sensible. BTW, what about CachedGeoposition as the name (to signify the
&gt; &quot;Geo&quot;).
Sure, that makes sense. I can fix that when landing if you have no other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192576</commentid>
    <comment_count>12</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-22 13:03:43 -0800</bug_when>
    <thetext>ping!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192872</commentid>
    <comment_count>13</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-23 04:08:37 -0800</bug_when>
    <thetext>Landed manually as http://trac.webkit.org/changeset/55142

Closing bug as resolved fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47923</attachid>
            <date>2010-02-02 04:52:19 -0800</date>
            <delta_ts>2010-02-17 05:09:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34084-20100202125216.patch</filename>
            <type>text/plain</type>
            <size>16620</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDIyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDItMDIgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZHMgY2FjaGUgdG8gc3RvcmUgR2VvbG9jYXRpb24gcG9zaXRpb25zIGJldHdlZW4gYnJvd3Nl
ciBzZXNzaW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MDg0CisKKyAgICAgICAgVGhpcyBpcyByZXF1aXJlZCB0byBmdWxseSBpbXBsZW1lbnQg
dGhlIEdlb2xvY2F0aW9uIG1heGltdW1BZ2UgcHJvcGVydHkuCisgICAgICAgIFNlZSBCdWcgMzA2
NzYuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB3aWxsIGFkZCB0ZXN0cyBmb3IgbWF4aW11bUFn
ZSBvbmNlIGNvbXBsZXRlLgorCisgICAgICAgICogQW5kcm9pZC5tazogTW9kaWZpZWQuIEFkZGVk
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
TW9kaWZpZWQuIEFkZGVkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5bY3BwfGhdCisgICAgICAg
ICogV2ViQ29yZS5neXBpOiBNb2RpZmllZC4gQWRkZWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hl
LltjcHB8aF0KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1v
ZGlmaWVkLiBBZGRlZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuW2NwcHxoXQorICAgICAgICAq
IHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSk6
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6On5HZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlOjpzZXRDYWNoZWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OmNhY2hlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZTo6c2V0RGF0YWJhc2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EQik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EQik6CisgICAgICAgICogcGFnZS9HZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUuaDogQWRkZWQuCisKIDIwMTAtMDItMDIgIEt3YW5nIFl1bCBT
ZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Fu
ZHJvaWQubWsJKHJldmlzaW9uIDU0MjIyKQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzYsNiArMzM2LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JD
X0ZJTEVTKSBcCiAJcGFnZS9GcmFtZVRyZWUuY3BwIFwKIAlwYWdlL0ZyYW1lVmlldy5jcHAgXAog
CXBhZ2UvR2VvbG9jYXRpb24uY3BwIFwKKwlwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5j
cHAgXAogCXBhZ2UvSGlzdG9yeS5jcHAgXAogCXBhZ2UvTG9jYXRpb24uY3BwIFwKIAlwYWdlL01v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTQy
MjIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY4LDYg
KzEzNjgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bkNvbnRyb2xsZXJDbGllbnQuaCBcCiAJV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3IuaCBc
CiAJV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb24uaCBcCisJV2ViQ29yZS9wYWdlL0dl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAgXAorCVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGUuaCBcCiAJV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmggXAogCVdlYkNvcmUv
cGFnZS9IYWx0YWJsZVBsdWdpbi5oIFwKIAlXZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAgXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDU0MjIyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MzQsNiArMTgzNCw4IEBACiAgICAgICAgICAgICAncGFnZS9HZW9sb2NhdGlvbkNv
bnRyb2xsZXJDbGllbnQuaCcKICAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uRXJyb3IuaCcK
ICAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb24uaCcKKyAgICAgICAgICAgICdw
YWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAnCisgICAgICAgICAgICAncGFnZS9HZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUuaCcKICAgICAgICAgICAgICdwYWdlL0dlb3Bvc2l0aW9uLmgn
LAogICAgICAgICAgICAgJ3BhZ2UvSGFsdGFibGVQbHVnaW4uaCcsCiAgICAgICAgICAgICAncGFn
ZS9IaXN0b3J5LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNTQyMjIpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEyMSw2ICsxMTIxLDggQEAKIAkJNTkx
Mzk1M0IxMTA3NTg0NTAwODNFQzU1IC8qIEpOSUJyaWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTkxMzk1M0ExMTA3NTg0NTAwODNFQzU1IC8qIEpO
SUJyaWRnZS5oICovOyB9OwogCQk1OTEzOTUzRDExMDc1ODRFMDA4M0VDNTUgLyogSk5JQnJpZGdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5MTM5
NTNDMTEwNzU4NEUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuY3BwICovOyB9OwogCQk1OTlFNzU5MDEx
MDU1QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1OTlFNzU4RjExMDU1QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTlBNTY1NDIx
MTE4NDlDMjAwNDZDRDQ4IC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUE1NjU0MTExMTg0OUMyMDA0
NkNENDggLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCAqLzsgfTsKKwkJNTlBNTY1NDQx
MTE4NDlDRTAwNDZDRDQ4IC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBNTY1NDMxMTE4NDlDRTAwNDZD
RDQ4IC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oICovOyB9OwogCQk1OUE5RTdCMDExMDQ3
NTg4MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QTlFN0FGMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZh
SW5zdGFuY2VKU0MuY3BwICovOyB9OwogCQk1OUE5RTdCMjExMDQ3NTk0MDBERkI0QzEgLyogSmF2
YUluc3RhbmNlSlNDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1OUE5RTdCMTExMDQ3NTk0MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmggKi87IH07
CiAJCTU5QjU5NzczMTEwODY1NkIwMDcxNTlFOCAvKiBCcmlkZ2VKU0MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlCNTk3NzIxMTA4NjU2QjAwNzE1
OUU4IC8qIEJyaWRnZUpTQy5jcHAgKi87IH07CkBAIC02NTA2LDYgKzY1MDgsOCBAQAogCQk1OTEz
OTUzQTExMDc1ODQ1MDA4M0VDNTUgLyogSk5JQnJpZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpOSUJyaWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
OTEzOTUzQzExMDc1ODRFMDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpOSUJyaWRnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnJpZGdlLmg7IHBhdGggPSBicmlkZ2UvQnJpZGdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU5QTU2NTQxMTExODQ5QzIwMDQ2Q0Q0OCAv
KiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTlBNTY1NDMxMTE4NDlDRTAwNDZDRDQ4IC8qIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlBOUU3QUYx
MTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBKYXZhSW5zdGFuY2VKU0MuY3BwOyBwYXRoID0ganNjL0phdmFJ
bnN0YW5jZUpTQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5QTlFN0IxMTEw
NDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSmF2YUluc3RhbmNlSlNDLmg7IHBhdGggPSBqc2MvSmF2YUluc3RhbmNlSlND
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5QjU5NzcyMTEwODY1NkIwMDcxNTlF
OCAvKiBCcmlkZ2VKU0MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QnJpZGdlSlNDLmNwcDsgcGF0aCA9IGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzkyLDYgKzExMzk2LDggQEAKIAkJNjVCRjAyMTgwOTc0
ODA2MzAwQzQzMTk2IC8qIHBhZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTU5QTU2NTQzMTExODQ5Q0UwMDQ2Q0Q0OCAvKiBHZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGUuaCAqLywKKwkJCQk1OUE1NjU0MTExMTg0OUMyMDA0NkNENDggLyogR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlLmNwcCAqLywKIAkJCQkzMTZGRTEwNjBFNkUxRDg0MDBCRjYwODggLyog
YW5pbWF0aW9uICovLAogCQkJCTkzQzA5QTgyMEIwNjRGMDUwMDVBQkQ0RCAvKiBtYWMgKi8sCiAJ
CQkJODUzOEYwMDAwQUQ3MTc3MDAwNkE4MUQxIC8qIEFic3RyYWN0Vmlldy5pZGwgKi8sCkBAIC0x
ODQ3OSw2ICsxODQ4NSw3IEBACiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1
ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBB
ZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCUI3MUZFNkRGMTEwOTFDQjMwMERB
RUY3NyAvKiBQcmludENvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTU5QTU2NTQ0MTExODQ5
Q0UwMDQ2Q0Q0OCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMjA2NTUsNiArMjA2NjIsNyBAQAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBY
U1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0RDBDNDA0MTExNUYxRDQwMDE4QUEz
NCAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjc3NkQ0M0QxMTA0
NTI3NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1OUE1
NjU0MjExMTg0OUMyMDA0NkNENDggLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAx
MCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaCIKKworI2luY2x1ZGUg
Ikdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJTUUxpdGVE
YXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTGl0
ZVRyYW5zYWN0aW9uLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogZGF0YWJhc2VOYW1lID0gIi9DYWNoZWRQb3NpdGlvbi5kYiI7CisKK2ludCBHZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGU6OnNfaW5zdGFuY2VzID0gMDsKK1JlZlB0cjxHZW9wb3NpdGlvbj4q
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c19jYWNoZWRQb3NpdGlvbjsKK1N0cmluZyogR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzX2RhdGFiYXNlRmlsZSA9IDA7CisKK0dlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCkKK3sKKyAgICBpZiAoIShz
X2luc3RhbmNlcysrKSkgeworICAgICAgICBzX2NhY2hlZFBvc2l0aW9uID0gbmV3IFJlZlB0cjxH
ZW9wb3NpdGlvbj47CisgICAgICAgICpzX2NhY2hlZFBvc2l0aW9uID0gcmVhZEZyb21EQigpOwor
ICAgIH0KK30KKworR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp+R2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlKCkKK3sKKyAgICBpZiAoISgtLXNfaW5zdGFuY2VzKSkgeworICAgICAgICBpZiAoKnNf
Y2FjaGVkUG9zaXRpb24pCisgICAgICAgICAgICB3cml0ZVRvREIoc19jYWNoZWRQb3NpdGlvbi0+
Z2V0KCkpOworICAgICAgICBkZWxldGUgc19jYWNoZWRQb3NpdGlvbjsKKyAgICB9Cit9CisKK3Zv
aWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXRDYWNoZWRQb3NpdGlvbihHZW9wb3NpdGlv
biogY2FjaGVkUG9zaXRpb24pCit7CisgICAgLy8gV2UgZG8gbm90IHRha2Ugb3dlbmVyc2hpcCBm
cm9tIHRoZSBjYWxsZXIsIGJ1dCBhZGQgb3VyIG93biByZWYgY291bnQuCisgICAgKnNfY2FjaGVk
UG9zaXRpb24gPSBjYWNoZWRQb3NpdGlvbjsKK30KKworR2VvcG9zaXRpb24qIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZTo6Y2FjaGVkUG9zaXRpb24oKQoreworICAgIHJldHVybiBzX2NhY2hlZFBv
c2l0aW9uLT5nZXQoKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldERh
dGFiYXNlUGF0aChTdHJpbmcgZGF0YWJhc2VQYXRoKQoreworICAgIGlmICghc19kYXRhYmFzZUZp
bGUpCisgICAgICAgIHNfZGF0YWJhc2VGaWxlID0gbmV3IFN0cmluZzsKKyAgICAqc19kYXRhYmFz
ZUZpbGUgPSBkYXRhYmFzZVBhdGggKyBkYXRhYmFzZU5hbWU7CisgICAgLy8gSWYgd2UgZG9uJ3Qg
aGF2ZSBoYXZlIGEgY2FjaGVkIHBvc2l0aW9uLCBhdHRlbXB0IHRvIHJlYWQgb25lIGZyb20gdGhl
CisgICAgLy8gREIgYXQgdGhlIG5ldyBwYXRoLgorICAgIGlmIChzX2luc3RhbmNlcyAmJiAhKCpz
X2NhY2hlZFBvc2l0aW9uKSkKKyAgICAgICAgKnNfY2FjaGVkUG9zaXRpb24gPSByZWFkRnJvbURC
KCk7Cit9CisKK1Bhc3NSZWZQdHI8R2VvcG9zaXRpb24+IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZTo6cmVhZEZyb21EQigpCit7CisgICAgU1FMaXRlRGF0YWJhc2UgZGF0YWJhc2U7CisgICAgaWYg
KCFzX2RhdGFiYXNlRmlsZSB8fCAhZGF0YWJhc2Uub3Blbigqc19kYXRhYmFzZUZpbGUpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIENyZWF0ZSB0aGUgdGFibGUgaGVyZSwgc3VjaCB0aGF0
IGV2ZW4gaWYgd2UndmUganVzdCBjcmVhdGVkIHRoZQorICAgIC8vIERCLCB0aGUgY29tbWFuZHMg
YmVsb3cgc2hvdWxkIHN1Y2NlZWQuCisgICAgaWYgKCFkYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVkUG9zaXRpb24gKCIKKyAgICAgICAgICAg
ICJsYXRpdHVkZSBSRUFMIE5PVCBOVUxMLCAiCisgICAgICAgICAgICAibG9uZ2l0dWRlIFJFQUwg
Tk9UIE5VTEwsICIKKyAgICAgICAgICAgICJhbHRpdHVkZSBSRUFMLCAiCisgICAgICAgICAgICAi
YWNjdXJhY3kgUkVBTCBOT1QgTlVMTCwgIgorICAgICAgICAgICAgImFsdGl0dWRlQWNjdXJhY3kg
UkVBTCwgIgorICAgICAgICAgICAgImhlYWRpbmcgUkVBTCwgIgorICAgICAgICAgICAgInNwZWVk
IFJFQUwsICIKKyAgICAgICAgICAgICJ0aW1lc3RhbXAgSU5URUdFUiBOT1QgTlVMTCkiKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNl
LCAiU0VMRUNUICogRlJPTSBDYWNoZWRQb3NpdGlvbiIpOworICAgIGlmIChzdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChzdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoMikudHlwZSgp
ICE9IFNRTFZhbHVlOjpOdWxsVmFsdWU7CisgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3kgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoNCkudHlwZSgpICE9IFNRTFZhbHVlOjpOdWxs
VmFsdWU7CisgICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFs
dWUoNSkudHlwZSgpICE9IFNRTFZhbHVlOjpOdWxsVmFsdWU7CisgICAgYm9vbCBwcm92aWRlc1Nw
ZWVkID0gc3RhdGVtZW50LmdldENvbHVtblZhbHVlKDYpLnR5cGUoKSAhPSBTUUxWYWx1ZTo6TnVs
bFZhbHVlOworICAgIFJlZlB0cjxDb29yZGluYXRlcz4gY29vcmRpbmF0ZXMgPSBDb29yZGluYXRl
czo6Y3JlYXRlKHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoMCksIC8vIGxhdGl0dWRlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGVtZW50LmdldENvbHVtbkRvdWJsZSgxKSwgLy8gbG9uZ2l0dWRlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNBbHRpdHVk
ZSwgc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSgyKSwgLy8gYWx0aXR1ZGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQu
Z2V0Q29sdW1uRG91YmxlKDMpLCAvLyBhY2N1cmFjeQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFj
eSwgc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSg0KSwgLy8gYWx0aXR1ZGVBY2N1cmFjeQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3ZpZGVzSGVhZGluZywgc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSg1KSwgLy8gaGVhZGluZwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb3ZpZGVzU3BlZWQsIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNikpOyAvLyBzcGVlZAor
ICAgIHJldHVybiBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVhc2UoKSwgc3Rh
dGVtZW50LmdldENvbHVtbkludDY0KDcpKTsgLy8gdGltZXN0YW1wCit9CisKK3ZvaWQgR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlOjp3cml0ZVRvREIoR2VvcG9zaXRpb24qIHBvc2l0aW9uKQorewor
ICAgIEFTU0VSVChwb3NpdGlvbik7CisKKyAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKKyAg
ICBpZiAoIXNfZGF0YWJhc2VGaWxlIHx8ICFkYXRhYmFzZS5vcGVuKCpzX2RhdGFiYXNlRmlsZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKGRh
dGFiYXNlKTsKKworICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkRFTEVURSBGUk9N
IENhY2hlZFBvc2l0aW9uIikpCisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZWRQb3NpdGlvbiAoIgorICAg
ICAgICAibGF0aXR1ZGUsICIKKyAgICAgICAgImxvbmdpdHVkZSwgIgorICAgICAgICAiYWx0aXR1
ZGUsICIKKyAgICAgICAgImFjY3VyYWN5LCAiCisgICAgICAgICJhbHRpdHVkZUFjY3VyYWN5LCAi
CisgICAgICAgICJoZWFkaW5nLCAiCisgICAgICAgICJzcGVlZCwgIgorICAgICAgICAidGltZXN0
YW1wKSAiCisgICAgICAgICJWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8pIik7CisgICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsK
KworICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDEsIHBvc2l0aW9uLT5jb29yZHMoKS0+bGF0aXR1
ZGUoKSk7CisgICAgc3RhdGVtZW50LmJpbmREb3VibGUoMiwgcG9zaXRpb24tPmNvb3JkcygpLT5s
b25naXR1ZGUoKSk7CisgICAgaWYgKHBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZUFsdGl0
dWRlKCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDMsIHBvc2l0aW9uLT5jb29yZHMo
KS0+YWx0aXR1ZGUoKSk7CisgICAgZWxzZQorICAgICAgICBzdGF0ZW1lbnQuYmluZE51bGwoMyk7
CisgICAgc3RhdGVtZW50LmJpbmREb3VibGUoNCwgcG9zaXRpb24tPmNvb3JkcygpLT5hY2N1cmFj
eSgpKTsKKyAgICBpZiAocG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1
cmFjeSgpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSg1LCBwb3NpdGlvbi0+Y29vcmRz
KCktPmFsdGl0dWRlQWNjdXJhY3koKSk7CisgICAgZWxzZQorICAgICAgICBzdGF0ZW1lbnQuYmlu
ZE51bGwoNSk7CisgICAgaWYgKHBvc2l0aW9uLT5jb29yZHMoKS0+Y2FuUHJvdmlkZUhlYWRpbmco
KSkKKyAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoNiwgcG9zaXRpb24tPmNvb3JkcygpLT5o
ZWFkaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDYpOworICAg
IGlmIChwb3NpdGlvbi0+Y29vcmRzKCktPmNhblByb3ZpZGVTcGVlZCgpKQorICAgICAgICBzdGF0
ZW1lbnQuYmluZERvdWJsZSg3LCBwb3NpdGlvbi0+Y29vcmRzKCktPnNwZWVkKCkpOworICAgIGVs
c2UKKyAgICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDcpOworICAgIHN0YXRlbWVudC5iaW5kSW50
NjQoOCwgcG9zaXRpb24tPnRpbWVzdGFtcCgpKTsKKyAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRl
Q29tbWFuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGVfaAorI2RlZmluZSBHZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGVfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9wb3NpdGlvbjsK
K2NsYXNzIFN0cmluZzsKKworY2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIHsKKyAgcHVi
bGljOgorICAgIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSgpOworICAgIH5HZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGUoKTsKKworICAgIHZvaWQgc2V0Q2FjaGVkUG9zaXRpb24oR2VvcG9zaXRpb24q
KTsKKyAgICBHZW9wb3NpdGlvbiogY2FjaGVkUG9zaXRpb24oKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXREYXRhYmFzZVBhdGgoU3RyaW5nKTsKKworICBwcml2YXRlOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdlb3Bvc2l0aW9uPiByZWFkRnJvbURCKCk7CisgICAgc3RhdGljIHZvaWQgd3JpdGVUb0RC
KEdlb3Bvc2l0aW9uKik7CisKKyAgICBzdGF0aWMgaW50IHNfaW5zdGFuY2VzOworICAgIHN0YXRp
YyBSZWZQdHI8R2VvcG9zaXRpb24+KiBzX2NhY2hlZFBvc2l0aW9uOworICAgIHN0YXRpYyBTdHJp
bmcqIHNfZGF0YWJhc2VGaWxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48896</attachid>
            <date>2010-02-17 05:09:13 -0800</date>
            <delta_ts>2010-02-23 04:08:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34084-20100217130910.patch</filename>
            <type>text/plain</type>
            <size>19046</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDg4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDItMTcgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZHMgY2FjaGUgdG8gc3RvcmUgR2VvbG9jYXRpb24gcG9zaXRpb25zIGJldHdlZW4gYnJvd3Nl
ciBzZXNzaW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0MDg0CisKKyAgICAgICAgVGhpcyBpcyByZXF1aXJlZCB0byBmdWxseSBpbXBsZW1lbnQg
dGhlIEdlb2xvY2F0aW9uIG1heGltdW1BZ2UgcHJvcGVydHkuCisgICAgICAgIFNlZSBCdWcgMzA2
NzYuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB3aWxsIGFkZCB0ZXN0cyBmb3IgbWF4aW11bUFn
ZSBvbmNlIGNvbXBsZXRlLgorCisgICAgICAgICogQW5kcm9pZC5tazogTW9kaWZpZWQuIEFkZGVk
IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTog
TW9kaWZpZWQuIEFkZGVkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5bY3BwfGhdCisgICAgICAg
ICogV2ViQ29yZS5neXBpOiBNb2RpZmllZC4gQWRkZWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hl
LltjcHB8aF0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogTW9kaWZpZWQuIEFkZGVkIEdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZS5bY3BwfGhdCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6IE1vZGlmaWVkLiBBZGRlZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuW2NwcHxo
XQorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTW9kaWZpZWQu
IEFkZGVkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5bY3BwfGhdCisgICAgICAgICogcGFnZS9H
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6fkdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNl
dENhY2hlZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZTo6Y2FjaGVkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3Np
dGlvbkNhY2hlOjpzZXREYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlOjpyZWFkRnJvbURCKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RCKToKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oOiBBZGRlZC4KKwogMjAxMC0wMi0xNyAgTWFyY3VzIEJ1bGFjaCAgPGJ1
bGFjaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpJ
bmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5t
awkocmV2aXNpb24gNTQ4ODMpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkK
QEAgLTMzNiw2ICszMzYsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMp
IFwKIAlwYWdlL0ZyYW1lVHJlZS5jcHAgXAogCXBhZ2UvRnJhbWVWaWV3LmNwcCBcCiAJcGFnZS9H
ZW9sb2NhdGlvbi5jcHAgXAorCXBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCBcCiAJ
cGFnZS9IaXN0b3J5LmNwcCBcCiAJcGFnZS9Mb2NhdGlvbi5jcHAgXAogCXBhZ2UvTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgXApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1NDg4MykKKysr
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNzUsNiArMTM3NSw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJv
bGxlckNsaWVudC5oIFwKIAlXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25FcnJvci5oIFwKIAlXZWJD
b3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbi5oIFwKKwlXZWJDb3JlL3BhZ2UvR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlLmNwcCBcCisJV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZS5oIFwKIAlXZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaCBcCiAJV2ViQ29yZS9wYWdlL0hh
bHRhYmxlUGx1Z2luLmggXAogCVdlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gNTQ4ODMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MTg0MCw2ICsxODQwLDggQEAKICAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxl
ckNsaWVudC5oJwogICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRpb25FcnJvci5oJwogICAgICAg
ICAgICAgJ3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbi5oJworICAgICAgICAgICAgJ3BhZ2UvR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCcKKyAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oJwogICAgICAgICAgICAgJ3BhZ2UvR2VvcG9zaXRpb24uaCcsCiAgICAg
ICAgICAgICAncGFnZS9IYWx0YWJsZVBsdWdpbi5oJywKICAgICAgICAgICAgICdwYWdlL0hpc3Rv
cnkuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNTQ4ODMpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC03NDgsNiArNzQ4LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9G
cmFtZVZpZXcuY3BwIFwKICAgICBwYWdlL0dlb2xvY2F0aW9uLmNwcCBcCiAgICAgcGFnZS9HZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwIFwKKyAgICBwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZS5jcHAgXAogICAgIHBhZ2UvSGlzdG9yeS5jcHAgXAogICAgIHBhZ2UvTG9jYXRpb24uY3BwIFwK
ICAgICBwYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwIFwKQEAgLTE0NDcsNiAr
MTQ0OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBhZ2UvRnJhbWVUcmVlLmggXAogICAgIHBhZ2Uv
RnJhbWVWaWV3LmggXAogICAgIHBhZ2UvR2VvbG9jYXRpb24uaCBcCisgICAgcGFnZS9HZW9sb2Nh
dGlvblBvc2l0aW9uQ2FjaGUuaCBcCiAgICAgcGFnZS9HZW9wb3NpdGlvbi5oIFwKICAgICBwYWdl
L0hhbHRhYmxlUGx1Z2luLmggXAogICAgIHBhZ2UvSGlzdG9yeS5oIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTQ4ODMpCisrKyBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDc5Nyw2ICsy
MDc5NywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGFnZVxHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCkBAIC0zOTg5NiwyMiArMzk5MDQsMjIgQEAKIAkJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxiaW5kaW5nc1xqc1xKYXZhU2NyaXB0UHJvZmlsZS5jcHAiCi0JCQkJCT4KLQkJCQk8L0Zp
bGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKYXZhU2Ny
aXB0UHJvZmlsZS5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0
aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmNwcCIKLQkJCQkJ
PgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdz
XGpzXEphdmFTY3JpcHRQcm9maWxlTm9kZS5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxG
aWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSmF2YVNjcmlwdFByb2ZpbGUu
Y3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXEphdmFTY3JpcHRQcm9maWxlLmgiDQorCQkJCQk+DQorCQkJCTwv
RmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSmF2
YVNjcmlwdFByb2ZpbGVOb2RlLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKYXZhU2NyaXB0UHJvZmlsZU5v
ZGUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxiaW5kaW5nc1xqc1xTY2hlZHVsZWRBY3Rpb24uY3BwIg0KIAkJCQkJPg0KIAkJCQkJ
PEZpbGVDb25maWd1cmF0aW9uDQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDU0ODgzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMTYsNiArMTExNiw4IEBACiAJ
CTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUz
RDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTU5MTM5NTNCMTEwNzU4NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5MTM5NTNBMTEw
NzU4NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCAqLzsgfTsKIAkJNTkxMzk1M0QxMTA3NTg0RTAw
ODNFQzU1IC8qIEpOSUJyaWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OTEzOTUzQzExMDc1ODRFMDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAq
LzsgfTsKKwkJNTkxRjA5MTMxMTJDMUYxOTAwNTQ3QzM5IC8qIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
OTFGMDkxMjExMkMxRjE4MDA1NDdDMzkgLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCAq
LzsgfTsKKwkJNTkxRjA5MTUxMTJDMUYyMjAwNTQ3QzM5IC8qIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTkx
RjA5MTQxMTJDMUYyMjAwNTQ3QzM5IC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oICovOyB9
OwogCQk1OTlFNzU5MDExMDU1QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTlFNzU4RjExMDU1QTFGMDBEOTA0RkEg
LyogQnJpZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTlBOUU3QjAxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUE5RTdBRjExMDQ3
NTg4MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmNwcCAqLzsgfTsKIAkJNTlBOUU3QjIxMTA0
NzU5NDAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBOUU3QjExMTA0NzU5NDAwREZCNEMxIC8qIEphdmFJ
bnN0YW5jZUpTQy5oICovOyB9OwpAQCAtNjUxNyw2ICs2NTE5LDggQEAKIAkJNTUwQTBCQzgwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTkxMzk1M0ExMTA3
NTg0NTAwODNFQzU1IC8qIEpOSUJyaWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKTklCcmlkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTkxMzk1M0Mx
MTA3NTg0RTAwODNFQzU1IC8qIEpOSUJyaWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKTklCcmlkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1OTFGMDkxMjExMkMxRjE4MDA1NDdDMzkgLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU5MUYwOTE0MTEyQzFG
MjIwMDU0N0MzOSAvKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnJpZGdlLmg7IHBhdGggPSBicmlkZ2Uv
QnJpZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5QTlFN0FGMTEwNDc1ODgw
MERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gSmF2YUluc3RhbmNlSlNDLmNwcDsgcGF0aCA9IGpzYy9KYXZhSW5zdGFuY2VK
U0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OUE5RTdCMTExMDQ3NTk0MDBE
RkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEphdmFJbnN0YW5jZUpTQy5oOyBwYXRoID0ganNjL0phdmFJbnN0YW5jZUpTQy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE0MTksNiArMTE0MjMsOCBAQAogCQk2NUJGMDIx
ODA5NzQ4MDYzMDBDNDMxOTYgLyogcGFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNTkxRjA5MTQxMTJDMUYyMjAwNTQ3QzM5IC8qIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oICovLAorCQkJCTU5MUYwOTEyMTEyQzFGMTgwMDU0N0MzOSAvKiBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwICovLAogCQkJCTMxNkZFMTA2MEU2RTFEODQwMEJGNjA4
OCAvKiBhbmltYXRpb24gKi8sCiAJCQkJOTNDMDlBODIwQjA2NEYwNTAwNUFCRDREIC8qIG1hYyAq
LywKIAkJCQk4NTM4RjAwMDBBRDcxNzcwMDA2QTgxRDEgLyogQWJzdHJhY3RWaWV3LmlkbCAqLywK
QEAgLTE4NTMwLDYgKzE4NTM2LDcgQEAKIAkJCQk5MzFCQ0M2MTExMjRERkNCMDBCRTcwREQgLyog
TWVkaWFDYW5TdGFydExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RjJBMzIyQzExMjVB
MEEyMDAzQzMwNTYgLyogSmF2YVNjcmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlG
MkEzMjJFMTEyNUEwQTIwMDNDMzA1NiAvKiBKYXZhU2NyaXB0UHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTU5MUYwOTE1MTEyQzFGMjIwMDU0N0MzOSAvKiBHZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjA3MTEsNiArMjA3MTgsNyBAQAogCQkJCTc2
RkYxN0UzMTEyMzU2NzMwMDFENjFCNSAvKiBQbHVnaW5WaWV3Tm9uZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5RjJBMzIyQjExMjVBMEEyMDAzQzMwNTYgLyogSmF2YVNjcmlwdFByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOUYyQTMyMkQxMTI1QTBBMjAwM0MzMDU2IC8qIEphdmFTY3Jp
cHRQcm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1OTFGMDkxMzExMkMxRjE5MDA1
NDdDMzkgLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQg
T3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaCIKKworI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgi
CisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFiYXNlTmFtZSA9ICJDYWNoZWRQb3NpdGlvbi5kYiI7
CisKK2ludCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNfaW5zdGFuY2VzID0gMDsKK1JlZlB0
cjxHZW9wb3NpdGlvbj4qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6c19jYWNoZWRQb3NpdGlv
bjsKK1N0cmluZyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzX2RhdGFiYXNlRmlsZSA9IDA7
CisKK0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCkK
K3sKKyAgICBpZiAoIShzX2luc3RhbmNlcysrKSkgeworICAgICAgICBzX2NhY2hlZFBvc2l0aW9u
ID0gbmV3IFJlZlB0cjxHZW9wb3NpdGlvbj47CisgICAgICAgICpzX2NhY2hlZFBvc2l0aW9uID0g
cmVhZEZyb21EQigpOworICAgIH0KK30KKworR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjp+R2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlKCkKK3sKKyAgICBpZiAoISgtLXNfaW5zdGFuY2VzKSkgewor
ICAgICAgICBpZiAoKnNfY2FjaGVkUG9zaXRpb24pCisgICAgICAgICAgICB3cml0ZVRvREIoc19j
YWNoZWRQb3NpdGlvbi0+Z2V0KCkpOworICAgICAgICBkZWxldGUgc19jYWNoZWRQb3NpdGlvbjsK
KyAgICB9Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpzZXRDYWNoZWRQb3Np
dGlvbihHZW9wb3NpdGlvbiogY2FjaGVkUG9zaXRpb24pCit7CisgICAgKnNfY2FjaGVkUG9zaXRp
b24gPSBjYWNoZWRQb3NpdGlvbjsKK30KKworR2VvcG9zaXRpb24qIEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZTo6Y2FjaGVkUG9zaXRpb24oKQoreworICAgIHJldHVybiBzX2NhY2hlZFBvc2l0aW9u
LT5nZXQoKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnNldERhdGFiYXNl
UGF0aChjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCkKK3sKKyAgICBpZiAoIXNfZGF0YWJhc2VG
aWxlKQorICAgICAgICBzX2RhdGFiYXNlRmlsZSA9IG5ldyBTdHJpbmc7CisgICAgKnNfZGF0YWJh
c2VGaWxlID0gZGF0YWJhc2VQYXRoOworICAgIFNRTGl0ZUZpbGVTeXN0ZW06OmFwcGVuZERhdGFi
YXNlRmlsZU5hbWVUb1BhdGgoKnNfZGF0YWJhc2VGaWxlLCBkYXRhYmFzZU5hbWUpOworICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgaGF2ZSBhIGNhY2hlZCBwb3NpdGlvbiwgYXR0ZW1wdCB0byByZWFk
IG9uZSBmcm9tIHRoZQorICAgIC8vIERCIGF0IHRoZSBuZXcgcGF0aC4KKyAgICBpZiAoc19pbnN0
YW5jZXMgJiYgISgqc19jYWNoZWRQb3NpdGlvbikpCisgICAgICAgICpzX2NhY2hlZFBvc2l0aW9u
ID0gcmVhZEZyb21EQigpOworfQorCitQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tREIoKQoreworICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFi
YXNlOworICAgIGlmICghc19kYXRhYmFzZUZpbGUgfHwgIWRhdGFiYXNlLm9wZW4oKnNfZGF0YWJh
c2VGaWxlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBDcmVhdGUgdGhlIHRhYmxlIGhl
cmUsIHN1Y2ggdGhhdCBldmVuIGlmIHdlJ3ZlIGp1c3QgY3JlYXRlZCB0aGUKKyAgICAvLyBEQiwg
dGhlIGNvbW1hbmRzIGJlbG93IHNob3VsZCBzdWNjZWVkLgorICAgIGlmICghZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlZFBvc2l0aW9uICgi
CisgICAgICAgICAgICAibGF0aXR1ZGUgUkVBTCBOT1QgTlVMTCwgIgorICAgICAgICAgICAgImxv
bmdpdHVkZSBSRUFMIE5PVCBOVUxMLCAiCisgICAgICAgICAgICAiYWx0aXR1ZGUgUkVBTCwgIgor
ICAgICAgICAgICAgImFjY3VyYWN5IFJFQUwgTk9UIE5VTEwsICIKKyAgICAgICAgICAgICJhbHRp
dHVkZUFjY3VyYWN5IFJFQUwsICIKKyAgICAgICAgICAgICJoZWFkaW5nIFJFQUwsICIKKyAgICAg
ICAgICAgICJzcGVlZCBSRUFMLCAiCisgICAgICAgICAgICAidGltZXN0YW1wIElOVEVHRVIgTk9U
IE5VTEwpIikpCisgICAgICAgIHJldHVybiAwOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChkYXRhYmFzZSwgIlNFTEVDVCAqIEZST00gQ2FjaGVkUG9zaXRpb24iKTsKKyAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVy
biAwOworCisgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0gc3RhdGVtZW50LmdldENvbHVtblZh
bHVlKDIpLnR5cGUoKSAhPSBTUUxWYWx1ZTo6TnVsbFZhbHVlOworICAgIGJvb2wgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5ID0gc3RhdGVtZW50LmdldENvbHVtblZhbHVlKDQpLnR5cGUoKSAhPSBT
UUxWYWx1ZTo6TnVsbFZhbHVlOworICAgIGJvb2wgcHJvdmlkZXNIZWFkaW5nID0gc3RhdGVtZW50
LmdldENvbHVtblZhbHVlKDUpLnR5cGUoKSAhPSBTUUxWYWx1ZTo6TnVsbFZhbHVlOworICAgIGJv
b2wgcHJvdmlkZXNTcGVlZCA9IHN0YXRlbWVudC5nZXRDb2x1bW5WYWx1ZSg2KS50eXBlKCkgIT0g
U1FMVmFsdWU6Ok51bGxWYWx1ZTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3JkaW5hdGVz
ID0gQ29vcmRpbmF0ZXM6OmNyZWF0ZShzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDApLCAvLyBs
YXRpdHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoMSksIC8vIGxvbmdpdHVkZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3ZpZGVzQWx0aXR1ZGUsIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoMiksIC8vIGFsdGl0dWRl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSgzKSwgLy8gYWNjdXJhY3kKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3ksIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNCksIC8vIGFsdGl0dWRl
QWNjdXJhY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm92aWRlc0hlYWRpbmcsIHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoNSks
IC8vIGhlYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm92aWRlc1NwZWVkLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDYp
KTsgLy8gc3BlZWQKKyAgICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5y
ZWxlYXNlKCksIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCg3KSk7IC8vIHRpbWVzdGFtcAorfQor
Cit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RCKGNvbnN0IEdlb3Bvc2l0
aW9uKiBwb3NpdGlvbikKK3sKKyAgICBBU1NFUlQocG9zaXRpb24pOworCisgICAgU1FMaXRlRGF0
YWJhc2UgZGF0YWJhc2U7CisgICAgaWYgKCFzX2RhdGFiYXNlRmlsZSB8fCAhZGF0YWJhc2Uub3Bl
bigqc19kYXRhYmFzZUZpbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihkYXRhYmFzZSk7CisKKyAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVD
b21tYW5kKCJERUxFVEUgRlJPTSBDYWNoZWRQb3NpdGlvbiIpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2Fj
aGVkUG9zaXRpb24gKCIKKyAgICAgICAgImxhdGl0dWRlLCAiCisgICAgICAgICJsb25naXR1ZGUs
ICIKKyAgICAgICAgImFsdGl0dWRlLCAiCisgICAgICAgICJhY2N1cmFjeSwgIgorICAgICAgICAi
YWx0aXR1ZGVBY2N1cmFjeSwgIgorICAgICAgICAiaGVhZGluZywgIgorICAgICAgICAic3BlZWQs
ICIKKyAgICAgICAgInRpbWVzdGFtcCkgIgorICAgICAgICAiVkFMVUVTICg/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/KSIpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBwb3NpdGlv
bi0+Y29vcmRzKCktPmxhdGl0dWRlKCkpOworICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDIsIHBv
c2l0aW9uLT5jb29yZHMoKS0+bG9uZ2l0dWRlKCkpOworICAgIGlmIChwb3NpdGlvbi0+Y29vcmRz
KCktPmNhblByb3ZpZGVBbHRpdHVkZSgpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZERvdWJsZSgz
LCBwb3NpdGlvbi0+Y29vcmRzKCktPmFsdGl0dWRlKCkpOworICAgIGVsc2UKKyAgICAgICAgc3Rh
dGVtZW50LmJpbmROdWxsKDMpOworICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDQsIHBvc2l0aW9u
LT5jb29yZHMoKS0+YWNjdXJhY3koKSk7CisgICAgaWYgKHBvc2l0aW9uLT5jb29yZHMoKS0+Y2Fu
UHJvdmlkZUFsdGl0dWRlQWNjdXJhY3koKSkKKyAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUo
NSwgcG9zaXRpb24tPmNvb3JkcygpLT5hbHRpdHVkZUFjY3VyYWN5KCkpOworICAgIGVsc2UKKyAg
ICAgICAgc3RhdGVtZW50LmJpbmROdWxsKDUpOworICAgIGlmIChwb3NpdGlvbi0+Y29vcmRzKCkt
PmNhblByb3ZpZGVIZWFkaW5nKCkpCisgICAgICAgIHN0YXRlbWVudC5iaW5kRG91YmxlKDYsIHBv
c2l0aW9uLT5jb29yZHMoKS0+aGVhZGluZygpKTsKKyAgICBlbHNlCisgICAgICAgIHN0YXRlbWVu
dC5iaW5kTnVsbCg2KTsKKyAgICBpZiAocG9zaXRpb24tPmNvb3JkcygpLT5jYW5Qcm92aWRlU3Bl
ZWQoKSkKKyAgICAgICAgc3RhdGVtZW50LmJpbmREb3VibGUoNywgcG9zaXRpb24tPmNvb3Jkcygp
LT5zcGVlZCgpKTsKKyAgICBlbHNlCisgICAgICAgIHN0YXRlbWVudC5iaW5kTnVsbCg3KTsKKyAg
ICBzdGF0ZW1lbnQuYmluZEludDY0KDgsIHBvc2l0aW9uLT50aW1lc3RhbXAoKSk7CisgICAgaWYg
KCFzdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2Ug
UHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlX2gKKyNkZWZp
bmUgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR2VvcG9zaXRpb247CitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSB7CisgIHB1YmxpYzoKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUoKTsK
KyAgICB+R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKCk7CisKKyAgICB2b2lkIHNldENhY2hlZFBv
c2l0aW9uKEdlb3Bvc2l0aW9uKik7CisgICAgR2VvcG9zaXRpb24qIGNhY2hlZFBvc2l0aW9uKCk7
CisgICAgc3RhdGljIHZvaWQgc2V0RGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYpOworCisgIHBy
aXZhdGU6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IHJlYWRGcm9tREIoKTsK
KyAgICBzdGF0aWMgdm9pZCB3cml0ZVRvREIoY29uc3QgR2VvcG9zaXRpb24qKTsKKworICAgIHN0
YXRpYyBpbnQgc19pbnN0YW5jZXM7CisgICAgc3RhdGljIFJlZlB0cjxHZW9wb3NpdGlvbj4qIHNf
Y2FjaGVkUG9zaXRpb247CisgICAgc3RhdGljIFN0cmluZyogc19kYXRhYmFzZUZpbGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvblBvc2l0aW9u
Q2FjaGVfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>