From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Tremer To: development@lists.ipfire.org Subject: Re: [PATCH] squid: Update to 3.5.21 Date: Mon, 12 Sep 2016 11:06:19 +0100 Message-ID: <1473674779.2757.90.camel@ipfire.org> In-Reply-To: <20160910123539.25838-1-matthias.fischer@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0803975364955269987==" List-Id: --===============0803975364955269987== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Thanks. This was super quick. Even before the official release announcement landed in my inbox :) On Sat, 2016-09-10 at 14:35 +0200, Matthias Fischer wrote: > For details, see: > http://www.squid-cache.org/Versions/v3/3.5/changesets/SQUID_3_5_21.html >=20 > Best, > Matthias >=20 > Signed-off-by: Matthias Fischer > --- > =C2=A0lfs/squid=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A015 +- > =C2=A0...=3D> squid-3.5.21-fix-max-file-descriptors.patch} |=C2=A0=C2=A0=C2= =A00 > =C2=A0src/patches/squid/squid-3.5-14067.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0| 381 -------------------- > - > =C2=A0src/patches/squid/squid-3.5-14068.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A035 -- > =C2=A0src/patches/squid/squid-3.5-14069.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A030 -- > =C2=A0src/patches/squid/squid-3.5-14070.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A044 --- > =C2=A0src/patches/squid/squid-3.5-14071.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A070 ---- > =C2=A0src/patches/squid/squid-3.5-14072.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A033 -- > =C2=A0src/patches/squid/squid-3.5-14073.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0| 151 -------- > =C2=A0src/patches/squid/squid-3.5-14074.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A055 --- > =C2=A0src/patches/squid/squid-3.5-14075.patch=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0|=C2=A0=C2=A038 -- > =C2=A011 files changed, 3 insertions(+), 849 deletions(-) > =C2=A0rename src/patches/{squid-3.5.20-fix-max-file-descriptors.patch =3D> = squid- > 3.5.21-fix-max-file-descriptors.patch} (100%) > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14067.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14068.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14069.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14070.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14071.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14072.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14073.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14074.patch > =C2=A0delete mode 100644 src/patches/squid/squid-3.5-14075.patch >=20 > diff --git a/lfs/squid b/lfs/squid > index 2d9c596..ae8e1e9 100644 > --- a/lfs/squid > +++ b/lfs/squid > @@ -24,7 +24,7 @@ > =C2=A0 > =C2=A0include Config > =C2=A0 > -VER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=3D 3.5.20 > +VER=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=3D 3.5.21 > =C2=A0 > =C2=A0THISAPP=C2=A0=C2=A0=C2=A0=C2=A0=3D squid-$(VER) > =C2=A0DL_FILE=C2=A0=C2=A0=C2=A0=C2=A0=3D $(THISAPP).tar.xz > @@ -40,7 +40,7 @@ objects =3D $(DL_FILE) > =C2=A0 > =C2=A0$(DL_FILE) =3D $(DL_FROM)/$(DL_FILE) > =C2=A0 > -$(DL_FILE)_MD5 =3D 48fb18679a30606de98882528beab3a7 > +$(DL_FILE)_MD5 =3D e6745a6e4ac0b48b7283861f64a40ae5 > =C2=A0 > =C2=A0install : $(TARGET) > =C2=A0 > @@ -70,16 +70,7 @@ $(subst %,%_MD5,$(objects)) : > =C2=A0$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) > =C2=A0 @$(PREBUILD) > =C2=A0 @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar xaf $(DIR_DL)/$(DL_FILE) > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14067.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14068.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14069.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14070.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14071.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14072.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14073.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14074.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid/squid- > 3.5-14075.patch > - cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.5.20- > fix-max-file-descriptors.patch > + cd $(DIR_APP) && patch -Np0 -i $(DIR_SRC)/src/patches/squid-3.5.21- > fix-max-file-descriptors.patch > =C2=A0 > =C2=A0 cd $(DIR_APP) && autoreconf -vfi > =C2=A0 cd $(DIR_APP)/libltdl && autoreconf -vfi > diff --git a/src/patches/squid-3.5.20-fix-max-file-descriptors.patch > b/src/patches/squid-3.5.21-fix-max-file-descriptors.patch > similarity index 100% > rename from src/patches/squid-3.5.20-fix-max-file-descriptors.patch > rename to src/patches/squid-3.5.21-fix-max-file-descriptors.patch > diff --git a/src/patches/squid/squid-3.5-14067.patch > b/src/patches/squid/squid-3.5-14067.patch > deleted file mode 100644 > index 8d9cb21..0000000 > --- a/src/patches/squid/squid-3.5-14067.patch > +++ /dev/null > @@ -1,381 +0,0 @@ > ------------------------------------------------------------- > -revno: 14067 > -revision-id: squid3(a)treenet.co.nz-20160723071620-1wzqpbyi1rk5w6vg > -parent: squid3(a)treenet.co.nz-20160701113616-vpjak1pq4uecadd2 > -fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=3D4534 > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Sat 2016-07-23 19:16:20 +1200 > -message: > -=C2=A0=C2=A0Bug 4534: assertion failure in xcalloc when using many cache_d= ir > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160723071620-1wzqpbyi1rk5w6vg > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: fcd663f0fd4a24d505f81eb94ef95d627a4ca363 > -# timestamp: 2016-07-23 07:24:01 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160701113616-\ > -#=C2=A0=C2=A0=C2=A0vpjak1pq4uecadd2 > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/CacheDigest.cc' > ---- src/CacheDigest.cc 2016-01-01 00:14:27 +0000 > -+++ src/CacheDigest.cc 2016-07-23 07:16:20 +0000 > -@@ -35,12 +35,12 @@ > - static uint32_t hashed_keys[4]; > -=C2=A0 > - static void > --cacheDigestInit(CacheDigest * cd, int capacity, int bpe) > -+cacheDigestInit(CacheDigest * cd, uint64_t capacity, uint8_t bpe) > - { > --=C2=A0=C2=A0=C2=A0=C2=A0const size_t mask_size =3D cacheDigestCalcMaskSiz= e(capacity, bpe); > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint32_t mask_size =3D cacheDigestCalcMaskS= ize(capacity, bpe); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert(cd); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert(capacity > 0 && bpe > 0); > --=C2=A0=C2=A0=C2=A0=C2=A0assert(mask_size > 0); > -+=C2=A0=C2=A0=C2=A0=C2=A0assert(mask_size !=3D 0); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cd->capacity =3D capacity; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cd->bits_per_entry =3D bpe; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cd->mask_size =3D mask_size; > -@@ -50,7 +50,7 @@ > - } > -=C2=A0 > - CacheDigest * > --cacheDigestCreate(int capacity, int bpe) > -+cacheDigestCreate(uint64_t capacity, uint8_t bpe) > - { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0CacheDigest *cd =3D (CacheDigest *)memAlloca= te(MEM_CACHE_DIGEST); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert(SQUID_MD5_DIGEST_LENGTH =3D=3D 16);= =C2=A0=C2=A0/* our hash functions rely on 16 > byte keys */ > -@@ -97,7 +97,7 @@ > -=C2=A0 > - /* changes mask size, resets bits to 0, preserves "cd" pointer */ > - void > --cacheDigestChangeCap(CacheDigest * cd, int new_cap) > -+cacheDigestChangeCap(CacheDigest * cd, uint64_t new_cap) > - { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert(cd); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cacheDigestClean(cd); > -@@ -278,12 +278,12 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0storeAppendPrintf(e, "%s digest: size: %d by= tes\n", > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0label ? lab= el : "", stats.bit_count / 8 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0); > --=C2=A0=C2=A0=C2=A0=C2=A0storeAppendPrintf(e, "\t entries: count: %d capac= ity: %d util: %d%%\n", > -+=C2=A0=C2=A0=C2=A0=C2=A0storeAppendPrintf(e, "\t entries: count: %" PRIu6= 4 " capacity: %" PRIu64 > " util: %d%%\n", > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cd->count, > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cd->capacit= y, > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xpercentInt= (cd->count, cd->capacity) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0); > --=C2=A0=C2=A0=C2=A0=C2=A0storeAppendPrintf(e, "\t deletion attempts: %d\n", > -+=C2=A0=C2=A0=C2=A0=C2=A0storeAppendPrintf(e, "\t deletion attempts: %" PR= Iu64 "\n", > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cd->del_cou= nt > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0storeAppendPrintf(e, "\t bits: per entry: %d= on: %d capacity: %d util: > %d%%\n", > -@@ -297,16 +297,18 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0); > - } > -=C2=A0 > --size_t > --cacheDigestCalcMaskSize(int cap, int bpe) > -+uint32_t > -+cacheDigestCalcMaskSize(uint64_t cap, uint8_t bpe) > - { > --=C2=A0=C2=A0=C2=A0=C2=A0return (size_t) (cap * bpe + 7) / 8; > -+=C2=A0=C2=A0=C2=A0=C2=A0uint64_t bitCount =3D (cap * bpe) + 7; > -+=C2=A0=C2=A0=C2=A0=C2=A0assert(bitCount < INT_MAX); // dont 31-bit overfl= ow later > -+=C2=A0=C2=A0=C2=A0=C2=A0return static_cast(bitCount / 8); > - } > -=C2=A0 > - static void > - cacheDigestHashKey(const CacheDigest * cd, const cache_key * key) > - { > --=C2=A0=C2=A0=C2=A0=C2=A0const unsigned int bit_count =3D cd->mask_size * = 8; > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint32_t bit_count =3D cd->mask_size * 8; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0unsigned int tmp_keys[4]; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* we must memcpy to ensure alignment */ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0memcpy(tmp_keys, key, sizeof(tmp_keys)); > - > -=3D=3D=3D modified file 'src/CacheDigest.h' > ---- src/CacheDigest.h 2016-01-01 00:14:27 +0000 > -+++ src/CacheDigest.h 2016-07-23 07:16:20 +0000 > -@@ -22,23 +22,23 @@ > - { > - public: > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* public, read-only */ > --=C2=A0=C2=A0=C2=A0=C2=A0char *mask;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0/* bit mask */ > --=C2=A0=C2=A0=C2=A0=C2=A0int mask_size;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0/* mask size in bytes */ > --=C2=A0=C2=A0=C2=A0=C2=A0int capacity;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* expected maximum for .count, not a hard limit */ > --=C2=A0=C2=A0=C2=A0=C2=A0int bits_per_entry;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= /* number of bits allocated for each entry from > capacity */ > --=C2=A0=C2=A0=C2=A0=C2=A0int count;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0/* number of digested entries */ > --=C2=A0=C2=A0=C2=A0=C2=A0int del_count;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0/* number of deletions performed so far */ > -+=C2=A0=C2=A0=C2=A0=C2=A0uint64_t count;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0/* number of digested entries */ > -+=C2=A0=C2=A0=C2=A0=C2=A0uint64_t del_count;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* number of deletions performed so far */ > -+=C2=A0=C2=A0=C2=A0=C2=A0uint64_t capacity;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0/* expected maximum for .count, not a hard > limit */ > -+=C2=A0=C2=A0=C2=A0=C2=A0char *mask;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* bit mask */ > -+=C2=A0=C2=A0=C2=A0=C2=A0uint32_t mask_size;=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* mask size in bytes */ > -+=C2=A0=C2=A0=C2=A0=C2=A0int8_t bits_per_entry;=C2=A0=C2=A0=C2=A0/* number= of bits allocated for each entry from > capacity */ > - }; > -=C2=A0 > --CacheDigest *cacheDigestCreate(int capacity, int bpe); > -+CacheDigest *cacheDigestCreate(uint64_t capacity, uint8_t bpe); > - void cacheDigestDestroy(CacheDigest * cd); > - CacheDigest *cacheDigestClone(const CacheDigest * cd); > - void cacheDigestClear(CacheDigest * cd); > --void cacheDigestChangeCap(CacheDigest * cd, int new_cap); > -+void cacheDigestChangeCap(CacheDigest * cd, uint64_t new_cap); > - int cacheDigestTest(const CacheDigest * cd, const cache_key * key); > - void cacheDigestAdd(CacheDigest * cd, const cache_key * key); > - void cacheDigestDel(CacheDigest * cd, const cache_key * key); > --size_t cacheDigestCalcMaskSize(int cap, int bpe); > -+uint32_t cacheDigestCalcMaskSize(uint64_t cap, uint8_t bpe); > - int cacheDigestBitUtil(const CacheDigest * cd); > - void cacheDigestGuessStatsUpdate(CacheDigestGuessStats * stats, int > real_hit, int guess_hit); > - void cacheDigestGuessStatsReport(const CacheDigestGuessStats * stats, > StoreEntry * sentry, const char *label); > - > -=3D=3D=3D modified file 'src/PeerDigest.h' > ---- src/PeerDigest.h 2016-01-01 00:14:27 +0000 > -+++ src/PeerDigest.h 2016-07-23 07:16:20 +0000 > -@@ -52,7 +52,7 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0store_client *old_sc; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0HttpRequest *request; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int offset; > --=C2=A0=C2=A0=C2=A0=C2=A0int mask_offset; > -+=C2=A0=C2=A0=C2=A0=C2=A0uint32_t mask_offset; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0time_t start_time; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0time_t resp_time; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0time_t expires; > - > -=3D=3D=3D modified file 'src/peer_digest.cc' > ---- src/peer_digest.cc 2016-01-01 00:14:27 +0000 > -+++ src/peer_digest.cc 2016-07-23 07:16:20 +0000 > -@@ -754,7 +754,7 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!reason && !size) { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!pd->cd) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0reason =3D "null digest?!"; > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else if (fetch->mask_offs= et !=3D (int)pd->cd->mask_size) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else if (fetch->mask_offs= et !=3D pd->cd->mask_size) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0reason =3D "premature end of digest?!"; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else if (!peerDigest= Useful(pd)) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0reason =3D "useless digest"; > - > -=3D=3D=3D modified file 'src/store_digest.cc' > ---- src/store_digest.cc 2016-01-01 00:14:27 +0000 > -+++ src/store_digest.cc 2016-07-23 07:16:20 +0000 > -@@ -76,36 +76,63 @@ > - static void storeDigestRewriteFinish(StoreEntry * e); > - static EVH storeDigestSwapOutStep; > - static void storeDigestCBlockSwapOut(StoreEntry * e); > --static int storeDigestCalcCap(void); > --static int storeDigestResize(void); > - static void storeDigestAdd(const StoreEntry *); > -=C2=A0 > -+/// calculates digest capacity > -+static uint64_t > -+storeDigestCalcCap() > -+{ > -+=C2=A0=C2=A0=C2=A0=C2=A0/* > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* To-Do: Bloom proved that the optimal filt= er utilization is 50% (half > of > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* the bits are off). However, we do not hav= e a formula to calculate the > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* number of _entries_ we want to pre-alloca= te for. > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*/ > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint64_t hi_cap =3D Store::Root().maxSize()= / > Config.Store.avgObjectSize; > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint64_t lo_cap =3D 1 + Store::Root().curre= ntSize() / > Config.Store.avgObjectSize; > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint64_t e_count =3D StoreEntry::inUseCount= (); > -+=C2=A0=C2=A0=C2=A0=C2=A0uint64_t cap =3D e_count ? e_count : hi_cap; > -+=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, "have: " << e_count << ", want " <<= cap << > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0" entri= es; limits: [" << lo_cap << ", " << hi_cap << "]"); > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0if (cap < lo_cap) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cap =3D lo_cap; > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0/* do not enforce hi_cap limit, average-based est= imation may be wrong > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*if (cap > hi_cap) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*=C2=A0=C2=A0cap =3D hi_cap; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*/ > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0// Bug 4534: we still have to set an upper-limit = at some reasonable > value though. > -+=C2=A0=C2=A0=C2=A0=C2=A0// this matches cacheDigestCalcMaskSize doing (ca= p*bpe)+7 < INT_MAX > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint64_t absolute_max =3D (INT_MAX -8) / > Config.digest.bits_per_entry; > -+=C2=A0=C2=A0=C2=A0=C2=A0if (cap > absolute_max) { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0static time_t last_loud = =3D 0; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (last_loud < squid_cur= time - 86400) { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0d= ebugs(71, DBG_IMPORTANT, "WARNING: Cache Digest cannot store " > << cap << " entries. Limiting to " << absolute_max); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0l= ast_loud =3D squid_curtime; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} else { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0d= ebugs(71, 3, "WARNING: Cache Digest cannot store " << cap << " > entries. Limiting to " << absolute_max); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cap =3D absolute_max; > -+=C2=A0=C2=A0=C2=A0=C2=A0} > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0return cap; > -+} > - #endif /* USE_CACHE_DIGESTS */ > -=C2=A0 > --static void > --storeDigestRegisterWithCacheManager(void) > -+void > -+storeDigestInit(void) > - { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Mgr::RegisterAction("store_digest", "Store D= igest", storeDigestReport, > 0, 1); > --} > -- > --/* > -- * PUBLIC FUNCTIONS > -- */ > -- > --void > --storeDigestInit(void) > --{ > --=C2=A0=C2=A0=C2=A0=C2=A0storeDigestRegisterWithCacheManager(); > -=C2=A0 > - #if USE_CACHE_DIGESTS > --=C2=A0=C2=A0=C2=A0=C2=A0const int cap =3D storeDigestCalcCap(); > -- > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!Config.onoff.digest_generation) { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0store_digest =3D NUL= L; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 3, "Local= cache digest generation disabled"); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -=C2=A0 > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint64_t cap =3D storeDigestCalcCap(); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0store_digest =3D cacheDigestCreate(cap, Conf= ig.digest.bits_per_entry); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, DBG_IMPORTANT, "Local cache diges= t enabled; rebuild/rewrite > every " << > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(i= nt) Config.digest.rebuild_period << "/" << > -@@ -290,6 +317,31 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0storeDigestRebuildResume(); > - } > -=C2=A0 > -+/// \returns true if we actually resized the digest > -+static bool > -+storeDigestResize() > -+{ > -+=C2=A0=C2=A0=C2=A0=C2=A0const uint64_t cap =3D storeDigestCalcCap(); > -+=C2=A0=C2=A0=C2=A0=C2=A0assert(store_digest); > -+=C2=A0=C2=A0=C2=A0=C2=A0uint64_t diff; > -+=C2=A0=C2=A0=C2=A0=C2=A0if (cap > store_digest->capacity) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0diff =3D cap - store_dige= st->capacity; > -+=C2=A0=C2=A0=C2=A0=C2=A0else > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0diff =3D store_digest->ca= pacity - cap; > -+=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, store_digest->capacity << " -> " <<= cap << "; change: " << > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0diff <<= " (" << xpercentInt(diff, store_digest->capacity) << "%)" > ); > -+=C2=A0=C2=A0=C2=A0=C2=A0/* avoid minor adjustments */ > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0if (diff <=3D store_digest->capacity / 10) { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, "small chan= ge, will not resize."); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return false; > -+=C2=A0=C2=A0=C2=A0=C2=A0} else { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, "big change= , resizing."); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cacheDigestChangeCap(stor= e_digest, cap); > -+=C2=A0=C2=A0=C2=A0=C2=A0} > -+=C2=A0=C2=A0=C2=A0=C2=A0return true; > -+} > -+ > - /* called be Rewrite to push Rebuild forward */ > - static void > - storeDigestRebuildResume(void) > -@@ -439,7 +491,7 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0assert(e); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* _add_ check that nothing bad happened whi= le we were waiting @?@ @?@ > */ > -=C2=A0 > --=C2=A0=C2=A0=C2=A0=C2=A0if (sd_state.rewrite_offset + chunk_size > store_= digest->mask_size) > -+=C2=A0=C2=A0=C2=A0=C2=A0if (static_cast(sd_state.rewrite_offset= + chunk_size) > > store_digest->mask_size) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0chunk_size =3D store= _digest->mask_size - sd_state.rewrite_offset; > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0e->append(store_digest->mask + sd_state.rewr= ite_offset, chunk_size); > -@@ -451,7 +503,7 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0sd_state.rewrite_offset +=3D chunk_size; > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* are we done ? */ > --=C2=A0=C2=A0=C2=A0=C2=A0if (sd_state.rewrite_offset >=3D store_digest->ma= sk_size) > -+=C2=A0=C2=A0=C2=A0=C2=A0if (static_cast(sd_state.rewrite_offset= ) >=3D store_digest- > >mask_size) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0storeDigestRewriteFi= nish(e); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0eventAdd("storeDiges= tSwapOutStep", storeDigestSwapOutStep, data, > 0.0, 1, false); > -@@ -467,60 +519,10 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0sd_state.cblock.count =3D htonl(store_digest= ->count); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0sd_state.cblock.del_count =3D htonl(store_di= gest->del_count); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0sd_state.cblock.mask_size =3D htonl(store_di= gest->mask_size); > --=C2=A0=C2=A0=C2=A0=C2=A0sd_state.cblock.bits_per_entry =3D (unsigned char) > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Co= nfig.digest.bits_per_entry; > -+=C2=A0=C2=A0=C2=A0=C2=A0sd_state.cblock.bits_per_entry =3D Config.digest.= bits_per_entry; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0sd_state.cblock.hash_func_count =3D (unsigne= d char) > CacheDigestHashFuncCount; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0e->append((char *) &sd_state.cblock, sizeof(= sd_state.cblock)); > - } > -=C2=A0 > --/* calculates digest capacity */ > --static int > --storeDigestCalcCap(void) > --{ > --=C2=A0=C2=A0=C2=A0=C2=A0/* > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* To-Do: Bloom proved that the optimal filt= er utilization is 50% (half > of > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* the bits are off). However, we do not hav= e a formula to calculate the > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* number of _entries_ we want to pre-alloca= te for. > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*/ > --=C2=A0=C2=A0=C2=A0=C2=A0const int hi_cap =3D Store::Root().maxSize() / Co= nfig.Store.avgObjectSize; > --=C2=A0=C2=A0=C2=A0=C2=A0const int lo_cap =3D 1 + Store::Root().currentSiz= e() / > Config.Store.avgObjectSize; > --=C2=A0=C2=A0=C2=A0=C2=A0const int e_count =3D StoreEntry::inUseCount(); > --=C2=A0=C2=A0=C2=A0=C2=A0int cap =3D e_count ? e_count :hi_cap; > --=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, "storeDigestCalcCap: have: " << e_c= ount << ", want " << > cap << > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0" entri= es; limits: [" << lo_cap << ", " << hi_cap << "]"); > -- > --=C2=A0=C2=A0=C2=A0=C2=A0if (cap < lo_cap) > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cap =3D lo_cap; > -- > --=C2=A0=C2=A0=C2=A0=C2=A0/* do not enforce hi_cap limit, average-based est= imation may be wrong > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*if (cap > hi_cap) > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*=C2=A0=C2=A0cap =3D hi_cap; > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0*/ > --=C2=A0=C2=A0=C2=A0=C2=A0return cap; > --} > -- > --/* returns true if we actually resized the digest */ > --static int > --storeDigestResize(void) > --{ > --=C2=A0=C2=A0=C2=A0=C2=A0const int cap =3D storeDigestCalcCap(); > --=C2=A0=C2=A0=C2=A0=C2=A0int diff; > --=C2=A0=C2=A0=C2=A0=C2=A0assert(store_digest); > --=C2=A0=C2=A0=C2=A0=C2=A0diff =3D abs(cap - store_digest->capacity); > --=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, "storeDigestResize: " << > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0store_d= igest->capacity << " -> " << cap << "; change: " << > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0diff <<= " (" << xpercentInt(diff, store_digest->capacity) << "%)" > ); > --=C2=A0=C2=A0=C2=A0=C2=A0/* avoid minor adjustments */ > -- > --=C2=A0=C2=A0=C2=A0=C2=A0if (diff <=3D store_digest->capacity / 10) { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, "storeDiges= tResize: small change, will not resize."); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return 0; > --=C2=A0=C2=A0=C2=A0=C2=A0} else { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(71, 2, "storeDiges= tResize: big change, resizing."); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cacheDigestChangeCap(stor= e_digest, cap); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return 1; > --=C2=A0=C2=A0=C2=A0=C2=A0} > --} > -- > - #endif /* USE_CACHE_DIGESTS */ > -=C2=A0 > - > -=3D=3D=3D modified file 'src/tests/stub_CacheDigest.cc' > ---- src/tests/stub_CacheDigest.cc 2016-01-01 00:14:27 +0000 > -+++ src/tests/stub_CacheDigest.cc 2016-07-23 07:16:20 +0000 > -@@ -16,11 +16,11 @@ > - class CacheDigestGuessStats; > - class StoreEntry; > -=C2=A0 > --CacheDigest * cacheDigestCreate(int, int) STUB_RETVAL(NULL) > -+CacheDigest * cacheDigestCreate(uint64_t, uint8_t) STUB_RETVAL(NULL) > - void cacheDigestDestroy(CacheDigest *) STUB > - CacheDigest * cacheDigestClone(const CacheDigest *) STUB_RETVAL(NULL) > - void cacheDigestClear(CacheDigest * ) STUB > --void cacheDigestChangeCap(CacheDigest *,int) STUB > -+void cacheDigestChangeCap(CacheDigest *,uint64_t) STUB > - int cacheDigestTest(const CacheDigest *, const cache_key *) STUB_RETVAL(1) > - void cacheDigestAdd(CacheDigest *, const cache_key *) STUB > - void cacheDigestDel(CacheDigest *, const cache_key *) STUB > -@@ -28,5 +28,4 @@ > - void cacheDigestGuessStatsUpdate(CacheDigestGuessStats *, int, int) STUB > - void cacheDigestGuessStatsReport(const CacheDigestGuessStats *, StoreEntry > *, const char *) STUB > - void cacheDigestReport(CacheDigest *, const char *, StoreEntry *) STUB > --size_t cacheDigestCalcMaskSize(int, int) STUB_RETVAL(1) > -- > -+uint32_t cacheDigestCalcMaskSize(uint64_t, uint8_t) STUB_RETVAL(1) > - > diff --git a/src/patches/squid/squid-3.5-14068.patch > b/src/patches/squid/squid-3.5-14068.patch > deleted file mode 100644 > index 4766e00..0000000 > --- a/src/patches/squid/squid-3.5-14068.patch > +++ /dev/null > @@ -1,35 +0,0 @@ > ------------------------------------------------------------- > -revno: 14068 > -revision-id: squid3(a)treenet.co.nz-20160723071930-cemledcltg8pkc28 > -parent: squid3(a)treenet.co.nz-20160723071620-1wzqpbyi1rk5w6vg > -fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=3D4542 > -author: Anonymous > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Sat 2016-07-23 19:19:30 +1200 > -message: > -=C2=A0=C2=A0Bug #4542: authentication credentials IP TTL updated incorrect= ly > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160723071930-cemledcltg8pkc28 > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: ee0c6aab5414532d9554ef338cce049263902fd8 > -# timestamp: 2016-07-23 07:24:05 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160723071620-\ > -#=C2=A0=C2=A0=C2=A01wzqpbyi1rk5w6vg > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/auth/User.cc' > ---- src/auth/User.cc 2016-01-01 00:14:27 +0000 > -+++ src/auth/User.cc 2016-07-23 07:19:30 +0000 > -@@ -284,7 +284,7 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* This ip has already been seen. */ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0found =3D 1; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* update IP ttl */ > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0i= pdata->ip_expiretime =3D squid_curtime; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0i= pdata->ip_expiretime =3D squid_curtime + > ::Config.authenticateIpTTL; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} else if (ipdata->i= p_expiretime <=3D squid_curtime) { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* This IP has expired - remove from the seen list */ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0dlinkDelete(&ipdata->node, &ip_list); > - > diff --git a/src/patches/squid/squid-3.5-14069.patch > b/src/patches/squid/squid-3.5-14069.patch > deleted file mode 100644 > index 15ca37a..0000000 > --- a/src/patches/squid/squid-3.5-14069.patch > +++ /dev/null > @@ -1,30 +0,0 @@ > ------------------------------------------------------------- > -revno: 14069 > -revision-id: squidadm(a)squid-cache.org-20160723121351-iuc8hwstrqd0l1dv > -parent: squid3(a)treenet.co.nz-20160723071930-cemledcltg8pkc28 > -committer: Source Maintenance > -branch nick: 3.5 > -timestamp: Sat 2016-07-23 12:13:51 +0000 > -message: > -=C2=A0=C2=A0SourceFormat Enforcement > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squidadm(a)squid-cache.org-20160723121351-\ > -#=C2=A0=C2=A0=C2=A0iuc8hwstrqd0l1dv > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: c9e37a723686ae2ee489ba7ec2e981ae153bda28 > -# timestamp: 2016-07-23 12:50:56 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160723071930-\ > -#=C2=A0=C2=A0=C2=A0cemledcltg8pkc28 > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/tests/stub_CacheDigest.cc' > ---- src/tests/stub_CacheDigest.cc 2016-07-23 07:16:20 +0000 > -+++ src/tests/stub_CacheDigest.cc 2016-07-23 12:13:51 +0000 > -@@ -29,3 +29,4 @@ > - void cacheDigestGuessStatsReport(const CacheDigestGuessStats *, StoreEntry > *, const char *) STUB > - void cacheDigestReport(CacheDigest *, const char *, StoreEntry *) STUB > - uint32_t cacheDigestCalcMaskSize(uint64_t, uint8_t) STUB_RETVAL(1) > -+ > - > diff --git a/src/patches/squid/squid-3.5-14070.patch > b/src/patches/squid/squid-3.5-14070.patch > deleted file mode 100644 > index 5fcc39f..0000000 > --- a/src/patches/squid/squid-3.5-14070.patch > +++ /dev/null > @@ -1,44 +0,0 @@ > ------------------------------------------------------------- > -revno: 14070 > -revision-id: squid3(a)treenet.co.nz-20160805145933-0cpyy47o8955lamx > -parent: squidadm(a)squid-cache.org-20160723121351-iuc8hwstrqd0l1dv > -author: Christos Tsantilas > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Sat 2016-08-06 02:59:33 +1200 > -message: > -=C2=A0=C2=A0Squid segfault via Ftp::Client::readControlReply(). > -=C2=A0=C2=A0 > -=C2=A0=C2=A0Ftp::Client::scheduleReadControlReply(), which may called from= the > -=C2=A0=C2=A0asynchronous start() or readControlReply()/handleControlReply() > -=C2=A0=C2=A0handlers, does not check whether the control connection is sti= ll usable > -=C2=A0=C2=A0before using it. > -=C2=A0=C2=A0 > -=C2=A0=C2=A0This is a Measurement Factory project. > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160805145933-0cpyy47o8955lamx > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: 1c21ce821f9cbc22b3e8ff2b1029f7084b5f0643 > -# timestamp: 2016-08-05 15:00:22 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squidadm(a)squid-cache.org-20160723121351-\ > -#=C2=A0=C2=A0=C2=A0iuc8hwstrqd0l1dv > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/clients/FtpClient.cc' > ---- src/clients/FtpClient.cc 2016-02-19 23:15:41 +0000 > -+++ src/clients/FtpClient.cc 2016-08-05 14:59:33 +0000 > -@@ -314,6 +314,11 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* We've already rea= d some reply data */ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0handleControlReply(); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} else { > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!Comm::IsConnOpen(ctr= l.conn)) { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0d= ebugs(9, 3, "cannot read without ctrl " << ctrl.conn); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0r= eturn; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* Cancel the t= imeout on the Data socket (if any) and > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0* establish on= e on the control socket. > - > diff --git a/src/patches/squid/squid-3.5-14071.patch > b/src/patches/squid/squid-3.5-14071.patch > deleted file mode 100644 > index 6b353ea..0000000 > --- a/src/patches/squid/squid-3.5-14071.patch > +++ /dev/null > @@ -1,70 +0,0 @@ > ------------------------------------------------------------- > -revno: 14071 > -revision-id: squid3(a)treenet.co.nz-20160817025501-e66sjxm0bfy3ksn3 > -parent: squid3(a)treenet.co.nz-20160805145933-0cpyy47o8955lamx > -fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=3D4428 > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Wed 2016-08-17 14:55:01 +1200 > -message: > -=C2=A0=C2=A0Bug 4428: mal-formed Cache-Control:stale-if-error header > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160817025501-e66sjxm0bfy3ksn3 > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: b3b3ef13c45062a97bd5cc88c934019fe4af7a3c > -# timestamp: 2016-08-17 02:55:20 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160805145933-\ > -#=C2=A0=C2=A0=C2=A00cpyy47o8955lamx > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/HttpHdrCc.cc' > ---- src/HttpHdrCc.cc 2016-01-01 00:14:27 +0000 > -+++ src/HttpHdrCc.cc 2016-08-17 02:55:01 +0000 > -@@ -257,6 +257,27 @@ > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0/* for all options having values, "=3Dvalue" after the name */ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0switch (flag) { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_BADHDR: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_PUBLIC: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_PRIVATE: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0if (Private().size()) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0packerPrintf(p, "=3D\"" SQUID= STRINGPH "\"", > SQUIDSTRINGPRINT(Private())); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_NO_CACHE: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0if (noCache().size()) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0packerPrintf(p, "=3D\"" SQUID= STRINGPH "\"", > SQUIDSTRINGPRINT(noCache())); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_NO_STORE: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_NO_TRANSFORM: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_MUST_REVALIDATE: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_PROXY_REVALIDATE: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0case CC_MAX_AGE: > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0packerPrintf(p, "=3D%d", (int) maxAge()); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0break; > -@@ -272,8 +293,14 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0case CC_MIN_FRESH: > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0packerPrintf(p, "=3D%d", (int) minFresh()); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0break; > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0d= efault: > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0/* do nothing, directive was already printed */ > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_ONLY_IF_CACHED: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_STALE_IF_ERROR: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0packerPrintf(p, "=3D%d", staleIfError()); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0break; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_OTHER: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0c= ase CC_ENUM_END: > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0// done below after the loop > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0break; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0} > -=C2=A0 > - > diff --git a/src/patches/squid/squid-3.5-14072.patch > b/src/patches/squid/squid-3.5-14072.patch > deleted file mode 100644 > index 228e773..0000000 > --- a/src/patches/squid/squid-3.5-14072.patch > +++ /dev/null > @@ -1,33 +0,0 @@ > ------------------------------------------------------------- > -revno: 14072 > -revision-id: squid3(a)treenet.co.nz-20160817025828-s4102klt2ei25tsm > -parent: squid3(a)treenet.co.nz-20160817025501-e66sjxm0bfy3ksn3 > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Wed 2016-08-17 14:58:28 +1200 > -message: > -=C2=A0=C2=A0Fix SSL-Bump failure results in SEGFAULT > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160817025828-s4102klt2ei25tsm > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: 73877d276fba41282aeb5973207d02851d5eb784 > -# timestamp: 2016-08-17 03:50:56 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160817025501-\ > -#=C2=A0=C2=A0=C2=A0e66sjxm0bfy3ksn3 > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/client_side_request.cc' > ---- src/client_side_request.cc 2016-05-06 08:24:29 +0000 > -+++ src/client_side_request.cc 2016-08-17 02:58:28 +0000 > -@@ -1811,7 +1811,7 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0repContext->setReplyToStoreEntry(e, "immediate SslBump error"); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0errorAppendEntry(e, calloutContext->error); > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0calloutContext->error =3D NULL; > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0i= f (calloutContext->readNextRequest) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0i= f (calloutContext->readNextRequest && getConn()) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0getConn()->flags.readMore =3D true; // resume a= ny pipeline > reads. > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0node =3D (clientStreamNode *)client_stream.tail->data; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0clientStreamRead(node, this, node->readBuffer); > - > diff --git a/src/patches/squid/squid-3.5-14073.patch > b/src/patches/squid/squid-3.5-14073.patch > deleted file mode 100644 > index b7915a4..0000000 > --- a/src/patches/squid/squid-3.5-14073.patch > +++ /dev/null > @@ -1,151 +0,0 @@ > ------------------------------------------------------------- > -revno: 14073 > -revision-id: squid3(a)treenet.co.nz-20160817051037-p0kaj2iw2u4u8iqj > -parent: squid3(a)treenet.co.nz-20160817025828-s4102klt2ei25tsm > -fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=3D4563 > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Wed 2016-08-17 17:10:37 +1200 > -message: > -=C2=A0=C2=A0Bug 4563: duplicate code in httpMakeVaryMark > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160817051037-p0kaj2iw2u4u8iqj > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: bba9a17715b8759e9d70db2c75f70f3c6152ae8a > -# timestamp: 2016-08-17 05:50:53 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160817025828-\ > -#=C2=A0=C2=A0=C2=A0s4102klt2ei25tsm > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/http.cc' > ---- src/http.cc 2016-04-01 06:15:31 +0000 > -+++ src/http.cc 2016-08-17 05:10:37 +0000 > -@@ -572,6 +572,38 @@ > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/* NOTREACHED */ > - } > -=C2=A0 > -+/// assemble a variant key (vary-mark) from the given Vary header and HTTP > request > -+static void > -+assembleVaryKey(String &vary, SBuf &vstr, const HttpRequest &request) > -+{ > -+=C2=A0=C2=A0=C2=A0=C2=A0static const SBuf asterisk("*"); > -+=C2=A0=C2=A0=C2=A0=C2=A0const char *pos =3D nullptr; > -+=C2=A0=C2=A0=C2=A0=C2=A0const char *item =3D nullptr; > -+=C2=A0=C2=A0=C2=A0=C2=A0int ilen =3D 0; > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0while (strListGetItem(&vary, ',', &item, &ilen, &= pos)) { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0SBuf name(item, ilen); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (name =3D=3D asterisk)= { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.clear(); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0b= reak; > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0name.toLower(); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!vstr.isEmpty()) > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append(", ", 2); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0vstr.append(name); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0String hdr(request.header= .getByName(name.c_str())); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0const char *value =3D hdr= .termedBuf(); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (value) { > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= alue =3D rfc1738_escape_part(value); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append("=3D\"", 2); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append(value); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append("\"", 1); > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -+ > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0hdr.clean(); > -+=C2=A0=C2=A0=C2=A0=C2=A0} > -+} > -+ > - /* > -=C2=A0=C2=A0* For Vary, store the relevant request headers as > -=C2=A0=C2=A0* virtual headers in the reply > -@@ -580,81 +612,16 @@ > - SBuf > - httpMakeVaryMark(HttpRequest * request, HttpReply const * reply) > - { > --=C2=A0=C2=A0=C2=A0=C2=A0String vary, hdr; > --=C2=A0=C2=A0=C2=A0=C2=A0const char *pos =3D NULL; > --=C2=A0=C2=A0=C2=A0=C2=A0const char *item; > --=C2=A0=C2=A0=C2=A0=C2=A0const char *value; > --=C2=A0=C2=A0=C2=A0=C2=A0int ilen; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0SBuf vstr; > --=C2=A0=C2=A0=C2=A0=C2=A0static const SBuf asterisk("*"); > -+=C2=A0=C2=A0=C2=A0=C2=A0String vary; > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0vary =3D reply->header.getList(HDR_VARY); > -- > --=C2=A0=C2=A0=C2=A0=C2=A0while (strListGetItem(&vary, ',', &item, &ilen, &= pos)) { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *name =3D (char *)xm= alloc(ilen + 1); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xstrncpy(name, item, ilen= + 1); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Tolower(name); > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (strcmp(name, "*") =3D= =3D 0) { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/= * Can not handle "Vary: *" withtout ETag support */ > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0s= afe_free(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.clear(); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0b= reak; > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!vstr.isEmpty()) > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append(", ", 2); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0vstr.append(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0hdr =3D request->header.g= etByName(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0safe_free(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0value =3D hdr.termedBuf(); > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (value) { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= alue =3D rfc1738_escape_part(value); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append("=3D\"", 2); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append(value); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append("\"", 1); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0hdr.clean(); > --=C2=A0=C2=A0=C2=A0=C2=A0} > -- > -+=C2=A0=C2=A0=C2=A0=C2=A0assembleVaryKey(vary, vstr, *request); > -+ > -+#if X_ACCELERATOR_VARY > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0vary.clean(); > --#if X_ACCELERATOR_VARY > -- > --=C2=A0=C2=A0=C2=A0=C2=A0pos =3D NULL; > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0vary =3D reply->header.getList(HDR_X_ACCELER= ATOR_VARY); > -- > --=C2=A0=C2=A0=C2=A0=C2=A0while (strListGetItem(&vary, ',', &item, &ilen, &= pos)) { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char *name =3D (char *)xm= alloc(ilen + 1); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0xstrncpy(name, item, ilen= + 1); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Tolower(name); > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (strcmp(name, "*") =3D= =3D 0) { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0/= * Can not handle "Vary: *" withtout ETag support */ > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0s= afe_free(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.clear(); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0b= reak; > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!vstr.isEmpty()) > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append(", ", 2); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0vstr.append(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0hdr =3D request->header.g= etByName(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0safe_free(name); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0value =3D hdr.termedBuf(); > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (value) { > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= alue =3D rfc1738_escape_part(value); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append("=3D\"", 2); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append(value); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0v= str.append("\"", 1); > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0} > -- > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0hdr.clean(); > --=C2=A0=C2=A0=C2=A0=C2=A0} > -- > --=C2=A0=C2=A0=C2=A0=C2=A0vary.clean(); > -+=C2=A0=C2=A0=C2=A0=C2=A0assembleVaryKey(vary, vstr, *request); > - #endif > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0debugs(11, 3, vstr); > - > diff --git a/src/patches/squid/squid-3.5-14074.patch > b/src/patches/squid/squid-3.5-14074.patch > deleted file mode 100644 > index dbafbf0..0000000 > --- a/src/patches/squid/squid-3.5-14074.patch > +++ /dev/null > @@ -1,55 +0,0 @@ > ------------------------------------------------------------- > -revno: 14074 > -revision-id: squid3(a)treenet.co.nz-20160817054829-rl7q49ysi40sj01i > -parent: squid3(a)treenet.co.nz-20160817051037-p0kaj2iw2u4u8iqj > -fixes bug: http://bugs.squid-cache.org/show_bug.cgi?id=3D3025 > -author: mkishi > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Wed 2016-08-17 17:48:29 +1200 > -message: > -=C2=A0=C2=A0Bug 3025: Proxy-Authenticate problem using ICAP server > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160817054829-rl7q49ysi40sj01i > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: f4eb1b35dc72bba74a398070900a0951257e547e > -# timestamp: 2016-08-17 05:50:56 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160817051037-\ > -#=C2=A0=C2=A0=C2=A0p0kaj2iw2u4u8iqj > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/client_side_reply.cc' > ---- src/client_side_reply.cc 2016-04-01 06:15:31 +0000 > -+++ src/client_side_reply.cc 2016-08-17 05:48:29 +0000 > -@@ -1305,8 +1305,14 @@ > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0// if there is not configured a peer proxy w= ith login=3DPASS or > login=3DPASSTHRU option enabled > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0// remove the Proxy-Authenticate header > --=C2=A0=C2=A0=C2=A0=C2=A0if ( !request->peer_login || (strcmp(request->pee= r_login,"PASS") !=3D 0 && > strcmp(request->peer_login,"PASSTHRU") !=3D 0)) > --=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0reply->header.delById(HDR= _PROXY_AUTHENTICATE); > -+=C2=A0=C2=A0=C2=A0=C2=A0if ( !request->peer_login || (strcmp(request->pee= r_login,"PASS") !=3D 0 && > strcmp(request->peer_login,"PASSTHRU") !=3D 0)) { > -+#if USE_ADAPTATION > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0// but allow adaptation s= ervices to authenticate clients > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0// via request satisfacti= on > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if (!http->requestSatisfa= ctionMode()) > -+#endif > -+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0r= eply->header.delById(HDR_PROXY_AUTHENTICATE); > -+=C2=A0=C2=A0=C2=A0=C2=A0} > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0reply->header.removeHopByHopEntries(); > -=C2=A0 > - > -=3D=3D=3D modified file 'src/client_side_request.h' > ---- src/client_side_request.h 2016-01-01 00:14:27 +0000 > -+++ src/client_side_request.h 2016-08-17 05:48:29 +0000 > -@@ -140,6 +140,7 @@ > -=C2=A0 > - public: > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0void startAdaptation(const Adaptation::Servi= ceGroupPointer &g); > -+=C2=A0=C2=A0=C2=A0=C2=A0bool requestSatisfactionMode() const { return req= uest_satisfaction_mode; > } > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0// private but exposed for ClientRequestCont= ext > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0void handleAdaptationFailure(int errDetail, = bool bypassable =3D false); > - > diff --git a/src/patches/squid/squid-3.5-14075.patch > b/src/patches/squid/squid-3.5-14075.patch > deleted file mode 100644 > index 8c0b5a3..0000000 > --- a/src/patches/squid/squid-3.5-14075.patch > +++ /dev/null > @@ -1,38 +0,0 @@ > ------------------------------------------------------------- > -revno: 14075 > -revision-id: squid3(a)treenet.co.nz-20160817133413-vdmm0d6kvo8bfszk > -parent: squid3(a)treenet.co.nz-20160817054829-rl7q49ysi40sj01i > -committer: Amos Jeffries > -branch nick: 3.5 > -timestamp: Thu 2016-08-18 01:34:13 +1200 > -message: > -=C2=A0=C2=A0Fix logic error in rev.13930 > -=C2=A0=C2=A0 > -=C2=A0=C2=A0=C2=A0Using !=3D0 on both string compares means any login=3D v= alue will permit > -=C2=A0=C2=A0=C2=A040x responses through. Only PASS and PASSTHRU should be = doing that. > -=C2=A0=C2=A0 > -=C2=A0=C2=A0=C2=A0Detected by Coverity Scan. Issue 1364711 > ------------------------------------------------------------- > -# Bazaar merge directive format 2 (Bazaar 0.90) > -# revision_id: squid3(a)treenet.co.nz-20160817133413-vdmm0d6kvo8bfszk > -# target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# testament_sha1: 31f0c4e0f435e0aa994ffe8937e4d4c58fed37f5 > -# timestamp: 2016-08-17 13:34:59 +0000 > -# source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 > -# base_revision_id: squid3(a)treenet.co.nz-20160817054829-\ > -#=C2=A0=C2=A0=C2=A0rl7q49ysi40sj01i > -#=C2=A0 > -# Begin patch > -=3D=3D=3D modified file 'src/tunnel.cc' > ---- src/tunnel.cc 2016-01-01 00:14:27 +0000 > -+++ src/tunnel.cc 2016-08-17 13:34:13 +0000 > -@@ -476,7 +476,7 @@ > -=C2=A0 > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0// we need to relay the 401/407 responses wh= en login=3DPASS(THRU) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0const char *pwd =3D server.conn->getPeer()->= login; > --=C2=A0=C2=A0=C2=A0=C2=A0const bool relay =3D pwd && (strcmp(pwd, "PASS") = !=3D 0 || strcmp(pwd, > "PASSTHRU") !=3D 0) && > -+=C2=A0=C2=A0=C2=A0=C2=A0const bool relay =3D pwd && (strcmp(pwd, "PASS") = =3D=3D 0 || strcmp(pwd, > "PASSTHRU") =3D=3D 0) && > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(*sta= tus_ptr =3D=3D Http::scProxyAuthenticationRequired > || > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0*status_ptr =3D=3D Http::scUnauthorized); > -=C2=A0 > - --===============0803975364955269987== Content-Type: application/pgp-signature Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="signature.asc" MIME-Version: 1.0 LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KVmVyc2lvbjogR251UEcgdjIKCmlRSWNCQUFC Q2dBR0JRSlgxbjRiQUFvSkVJQjU4UDl2a0FrSGxyd1AvMkJtK3Y2eDBWMi90Z1o0ZlhKNXdQNUcK cXIzSlhpSVFWaFUrQlErRDZnUUtDcU1vNXo2aFR5QzR2OG96UVF3NW1ITDZSRDY2UUl6TDBaeFR2 dHI2R3RWagpNR2QvZnYvU3dxS3k0NTBKaThGV2hmVm91M2M2bVN3VEtzUGtIaEdtR2RmdFRubFdF U0poN3VLUlhLa1NyMWtiCldSeHBpc1BLcWJvQnN6blhua0x3eUtNK01FTWVpYXI3K3dYK1c4RVVB b0ZjbllLcUd2dTN1RlRDS3NGL295RDEKdzVwdkExb3ozOFc1dzQwanhMQzdzbVp0VWdHdlVpMXA3 Y2VDZ3Y4Nk9mVXh0TUYrRElrOXB1S3JaTTFlUHlpMwpvWEpJWllGSEFjbm5rb3N3dUhnUUh1SmFI U1hTdzl0L0FhcUpZeGJEaDg1NE5HMkM0WnRIbDRjUFJxSmJqQ0RvClVWRmhEUHF1UVpKa29Gdktt dllXQWdXM3VrNUUveWl6WFJ0a3ZBWjdmTkNHb3d5RmNXVjlSYnZZTmd4RUZvNlYKNlhTeFU2MGQx WUpnclc3L1czeGtTdkF2VjN2bTJDaUFRZDFCN0Z2Nnc5RVpqU2g1VHJBSWJhb2psOWZqcnhZaQpW cmdtQVluQjUxT0lLK0RtMFNsbVpXU2I1MGNpZis4R3FWRzVXRkdkOStWUTVXUmN2c2liMU1qSnNS R2paT2xvCkt2Y2gyUkV5dHBET0xsa1V3UWRQNnYwMEFsRUlUazhhL2plc1dyTlRHWTY5RXhDckVx M04wNTdMakVWaW44SEUKU1M5djUzM21TSkFjOGhlQUJ5S29UcHVodm8zR21tbzRIWDkxM0dZUnBG MDVsaFBPVzYzRTBCNEl5VHUydDA1NgpjalpyZnlZQ3dkM3MwWXVCaUdxbwo9eHRVZgotLS0tLUVO RCBQR1AgU0lHTkFUVVJFLS0tLS0K --===============0803975364955269987==--