[PATCH] User-specified redirect status code rather than 302
Mr Allwyn Fernandes <[email protected]> Sun, 2 Sep 2007 18:35:14 +1000
| Newsgroups | gmane.network.mathopd |
|---|---|
| Organization | Stobor Pty Ltd |
| Message-ID | <[email protected]> |
--Boundary-00=_CXn2GovTBzKPG74
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Hi all,
I've created a patch which allows you to specify what redirect code to use
when redirecting using the Location keyword.
When using multiple domains which have the same content, some search engines
(notably Google) impose a "duplicate content" penalty. [1] This means having
both the .net and .com for a given name, and using the usual virtual host
setup causes complications.
Virtual {
Host example.com
Host example.net
Control {
Alias /
Location /var/www
}
}
And the redirect
Virtual {
Host example.com
Control {
Alias /
Location /var/www
}
}
Virtual {
Host example.net
Control {
Alias /
Location http://example.com
}
}
uses a 302 redirect, which leads to the same penalty. [2]
The attached patches for 1.5p6 and 1.6b9 add a "RedirectStatus" keyword, which
takes a single integer between 300 and 399. This sets the HTTP status code
returned when redirecting. For avoiding the duplicate content penalty, use
301. For backwards compatibility, the default redirect code is still 302.
Virtual {
Host example.com
Control {
Alias /
Location /var/www
}
}
Virtual {
Host example.net
Control {
Alias /
Location http://example.com
RedirectStatus 301
}
}
The supplied patches also patch the documentation to cover the new keyword.
As such, they should be run from the directory containing the doc and src
subdirectories.
Please feel free to shoot through any questions or comments.
Cheers,
Allwyn.
PS: Thanks Michiel for the excellent project! :-)
[1] http://www.google.com/search?q=duplicate+content+penalty
[2] http://www.google.com/search?q=302+redirect+penalty
--
Allwyn Fernandes
Director
Stobor Pty Ltd
Mobile: + 61 430 436 758
LinkedIn: http://www.linkedin.com/in/AllwynFernandes
--Boundary-00=_CXn2GovTBzKPG74
Content-Type: text/x-diff;
charset="us-ascii";
name="RedirectStatus15.diff"
Content-Transfer-Encoding: base64
Content-Description: Patch for mathopd-1.5p6
Content-Disposition: attachment;
filename="RedirectStatus15.diff"
ZGlmZiAtdXIgbWF0aG9wZC0xLjVwNi9kb2MvQ0hBTkdFUyBtYXRob3BkLTEuNWFmL2RvYy9DSEFO
R0VTCi0tLSBtYXRob3BkLTEuNXA2L2RvYy9DSEFOR0VTCTIwMDctMDctMjEgMDA6MDQ6MDguMDAw
MDAwMDAwICsxMDAwCisrKyBtYXRob3BkLTEuNWFmL2RvYy9DSEFOR0VTCTIwMDctMDktMDIgMTQ6
Mjg6MTguNTIxMDE2MDYyICsxMDAwCkBAIC03NSw2ICs3NSw3IEBACiAJCUNsb2JiZXIKIAkJV2Fp
dCBbIV0KIAkJU2FuaXRpemVQYXRoCisJCVJlZGlyZWN0U3RhdHVzCiAKIAlUaGUgZm9sbG93aW5n
IGtleXdvcmRzIGhhdmUgYmVlbiByZW1vdmVkOi0KIApAQCAtMjMwLDYgKzIzMSwxMSBAQAogCXBh
dGhzLiBUaGFua3MgZm9yIFBldGVyIFBlbnRjaGV2IGZvciBzdWdnZXN0aW5nIHRoaXMgYW5kIHBy
b3ZpZGluZwogCWluaXRpYWwgcGF0Y2hlcy4KIAorCVRoZSAzMDIgc3RhdHVzIHRleHQgY2hhbmdl
ZCBmcm9tICJNb3ZlZCIgdG8gIkZvdW5kIi4gW1JGQzI2MTZdCisKKwlNYXRob3BkIGNhbiBub3cg
cmV0dXJuIHN0YXR1cyBjb2RlcyBvdGhlciB0aGFuIDMwMiBmb3IgYSByZWRpcmVjdC4gCisJU2Vl
IHRoZSBSZWRpcmVjdFN0YXR1cyBrZXl3b3JkIGZvciBkZXRhaWxzLgorCiBzdHViLmM6CiAKIAlU
aGlzIGlzIGEgbmV3IGZpbGUgdGhhdCBjb250YWlucyBjb2RlIHRvIHBhc3MgZGF0YSBmcm9tIGFu
ZCB0bwpkaWZmIC11ciBtYXRob3BkLTEuNXA2L2RvYy9jb25maWcudHh0IG1hdGhvcGQtMS41YWYv
ZG9jL2NvbmZpZy50eHQKLS0tIG1hdGhvcGQtMS41cDYvZG9jL2NvbmZpZy50eHQJMjAwNy0wNy0y
MSAwMDowNDowOC4wMDAwMDAwMDAgKzEwMDAKKysrIG1hdGhvcGQtMS41YWYvZG9jL2NvbmZpZy50
eHQJMjAwNy0wOS0wMiAxNjo1NjoyOC43MzAzMjI0MzMgKzEwMDAKQEAgLTczMyw2ICs3MzMsMTYg
QEAKICAgICAgICAgIGVycm9yIHJlc3BvbnNlcy4gSXRzIHZhbHVlIG1heSBiZSBkaXNwbGF5ZWQg
YnkgYSB3ZWIgYnJvd3NlciBpbgogICAgICAgICAgYSBsb2dpbiBkaWFsb2cuCiAKK0tleXdvcmQ6
IFJlZGlyZWN0U3RhdHVzCitXaGVyZTogICBDb250cm9sCitUeXBlOiAgICBJbnRlZ2VyCitEZXNj
OiAgICBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIExvY2F0aW9uIHJlZGlyZWN0IHN5bnRh
eCwgdGhpcyBzZXRzCisgICAgICAgICB0aGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQuIFRoZSBkZWZh
dWx0IGlzIGEgIjMwMiIsIGJ1dCBjYW4gYmUgc2V0CisgICAgICAgICB0byBhbnl0aGluZyBpbiB0
aGUgcmFuZ2UgM3h4LiBWYWxpZCBjb2RlcyBhcmUgZGVmaW5lZCBieSBSRkMyNjE2CisgICAgICAg
ICBhbmQgc2hvdWxkIGJlIGFkaGVyZWQgdG8uIFRoaXMgY2FuIGJlIHVzZWZ1bCwgZm9yIGV4YW1w
bGUsIHRvCisgICAgICAgICBwcmV2ZW50IHRoZSAiZHVwbGljYXRlIGNvbnRlbnQiIHBlbmFsdHkg
aW1wb3NlZCBieSBzb21lIHNlYXJjaCAKKyAgICAgICAgIGVuZ2luZXMuCisKIEtleXdvcmQ6IFJl
ZmVyZXIKIFdoZXJlOiAgIExvZ0Zvcm1hdAogRGVzYzogICAgVGhlIHZhbHVlIG9mIHRoZSAnUmVm
ZXJlcjonIGhlYWRlciBzZW50IGJ5IHRoZSBjbGllbnQuIFNvbWV0aW1lcwpkaWZmIC11ciBtYXRo
b3BkLTEuNXA2L2RvYy9zeW50YXgudHh0IG1hdGhvcGQtMS41YWYvZG9jL3N5bnRheC50eHQKLS0t
IG1hdGhvcGQtMS41cDYvZG9jL3N5bnRheC50eHQJMjAwNy0wNy0yMSAwMDowNDowOC4wMDAwMDAw
MDAgKzEwMDAKKysrIG1hdGhvcGQtMS41YWYvZG9jL3N5bnRheC50eHQJMjAwNy0wOS0wMiAxNDo0
ODo1OC4xMzk2OTMzOTggKzEwMDAKQEAgLTkwLDYgKzkwLDcgQEAKIAkiUGF0aEluZm8iIGZsYWcK
IAkiQXV0b0luZGV4Q29tbWFuZCIgc3RyaW5nCiAJIlNhbml0aXplUGF0aCIgZmxhZworCSJSZWRp
cmVjdFN0YXR1cyIgaW50ZWdlcgogCiBzZXJ2ZXItaXRlbToKIAkiUG9ydCIgaW50ZWdlcgpkaWZm
IC11ciBtYXRob3BkLTEuNXA2L3NyYy9jb25maWcuYyBtYXRob3BkLTEuNWFmL3NyYy9jb25maWcu
YwotLS0gbWF0aG9wZC0xLjVwNi9zcmMvY29uZmlnLmMJMjAwNy0wOS0wMiAxMjoyODoyMS45NzM5
MDMyOTYgKzEwMDAKKysrIG1hdGhvcGQtMS41YWYvc3JjL2NvbmZpZy5jCTIwMDctMDktMDIgMTY6
NTI6NDIuODcxODgxMTAwICsxMDAwCkBAIC0xMzIsNiArMTMyLDcgQEAKIHN0YXRpYyBjb25zdCBj
aGFyIGNfcHV0ZW52W10gPQkJCSJQdXRFbnYiOwogc3RhdGljIGNvbnN0IGNoYXIgY19xdWVyeV9z
dHJpbmdbXSA9CQkiUXVlcnlTdHJpbmciOwogc3RhdGljIGNvbnN0IGNoYXIgY19yZWFsbVtdID0J
CQkiUmVhbG0iOworc3RhdGljIGNvbnN0IGNoYXIgY19yZWRpcmVjdF9zdGF0dXNbXSA9CQkiUmVk
aXJlY3RTdGF0dXMiOwogc3RhdGljIGNvbnN0IGNoYXIgY19yZWZlcmVyW10gPQkJCSJSZWZlcmVy
IjsKIHN0YXRpYyBjb25zdCBjaGFyIGNfcmVtb3RlX2FkZHJlc3NbXSA9CQkiUmVtb3RlQWRkcmVz
cyI7CiBzdGF0aWMgY29uc3QgY2hhciBjX3JlbW90ZV9wb3J0W10gPQkJIlJlbW90ZVBvcnQiOwpA
QCAtMTczLDYgKzE3NCw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBlX25vaW5wdXRbXSA9CQkibm8g
aW5wdXQiOwogc3RhdGljIGNvbnN0IGNoYXIgZV91c2VyX2ludmFsaWRbXSA9CSJpbnZhbGlkIHVz
ZXIiOwogc3RhdGljIGNvbnN0IGNoYXIgZV91c2VyX3Vua25vd25bXSA9CSJ1c2VyIHVua25vd24i
Oworc3RhdGljIGNvbnN0IGNoYXIgZV9vdXRzaWRlX3JhbmdlW10gPQkidmFsdWUgb3V0c2lkZSBh
bGxvd2VkIHJhbmdlIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgdF9jbG9zZVtdID0JCSJ1bmV4cGVj
dGVkIGNsb3NpbmcgYnJhY2UiOwogc3RhdGljIGNvbnN0IGNoYXIgdF9lb2ZbXSA9CQkidW5leHBl
Y3RlZCBlbmQgb2YgZmlsZSI7CkBAIC0zNDYsNiArMzQ4LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAK
K3N0YXRpYyBjb25zdCBjaGFyICpjb25maWdfc21hbGxpbnRfaW5fcmFuZ2Uoc3RydWN0IGNvbmZp
Z3VyYXRpb24gKnAsIGludCAqaSwgaW50IG1pbiwgaW50IG1heCkKK3sKKwl1bnNpZ25lZCBsb25n
IHU7CisJY29uc3QgY2hhciAqdDsKKwkKKwl0ID0gY29uZmlnX2ludChwLCAmdSk7CisJaWYgKHQp
CisJCXJldHVybiB0OworCWlmKCh1IDwgbWluKSB8fCAodSA+IG1heCkpCisJCXJldHVybiBlX291
dHNpZGVfcmFuZ2U7CisJKmkgPSB1OworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3QgY2hh
ciAqY29uZmlnX2ZsYWcoc3RydWN0IGNvbmZpZ3VyYXRpb24gKnAsIGludCAqaSkKIHsKIAljb25z
dCBjaGFyICp0OwpAQCAtNjcxLDYgKzY4Nyw3IEBACiAJCWEtPnBhdGhfaW5mb19vayA9IGItPnBh
dGhfaW5mb19vazsKIAkJYS0+YXV0b19pbmRleF9jb21tYW5kID0gYi0+YXV0b19pbmRleF9jb21t
YW5kOwogCQlhLT5zYW5pdGl6ZV9wYXRoID0gYi0+c2FuaXRpemVfcGF0aDsKKwkJYS0+cmVkaXJl
Y3Rfc3RhdHVzID0gYi0+cmVkaXJlY3Rfc3RhdHVzOwogCX0gZWxzZSB7CiAJCWEtPmluZGV4X25h
bWVzID0gMDsKIAkJYS0+YWNjZXNzZXMgPSAwOwpAQCAtNjk0LDYgKzcxMSw3IEBACiAJCWEtPnBh
dGhfaW5mb19vayA9IDE7CiAJCWEtPmF1dG9faW5kZXhfY29tbWFuZCA9IDA7CiAJCWEtPnNhbml0
aXplX3BhdGggPSAwOworCQlhLT5yZWRpcmVjdF9zdGF0dXMgPSAwOwogCX0KIAlhLT5uZXh0ID0g
KmFzOwogCSphcyA9IGE7CkBAIC03NzcsNiArNzk1LDggQEAKIAkJCXQgPSBjb25maWdfc3RyaW5n
KHAsICZhLT5hdXRvX2luZGV4X2NvbW1hbmQpOwogCQllbHNlIGlmICghc3RyY2FzZWNtcChwLT50
b2tidWYsIGNfc2FuaXRpemVfcGF0aCkpCiAJCQl0ID0gY29uZmlnX2ZsYWcocCwgJmEtPnNhbml0
aXplX3BhdGgpOworCQllbHNlIGlmICghc3RyY2FzZWNtcChwLT50b2tidWYsIGNfcmVkaXJlY3Rf
c3RhdHVzKSkKKwkJCXQgPSBjb25maWdfc21hbGxpbnRfaW5fcmFuZ2UocCwgJmEtPnJlZGlyZWN0
X3N0YXR1cywgMzAwLCAzOTkpOwogCQllbHNlCiAJCQl0ID0gZV9rZXl3b3JkOwogCQlpZiAodCkK
ZGlmZiAtdXIgbWF0aG9wZC0xLjVwNi9zcmMvbWF0aG9wZC5oIG1hdGhvcGQtMS41YWYvc3JjL21h
dGhvcGQuaAotLS0gbWF0aG9wZC0xLjVwNi9zcmMvbWF0aG9wZC5oCTIwMDctMDktMDIgMTI6Mjg6
MjEuOTY4OTA0MTAzICsxMDAwCisrKyBtYXRob3BkLTEuNWFmL3NyYy9tYXRob3BkLmgJMjAwNy0w
OS0wMiAxNjozODozOC42Nzg0OTAyMzcgKzEwMDAKQEAgLTE4Miw2ICsxODIsNyBAQAogCWludCBw
YXRoX2luZm9fb2s7CiAJY2hhciAqYXV0b19pbmRleF9jb21tYW5kOwogCWludCBzYW5pdGl6ZV9w
YXRoOworCWludCByZWRpcmVjdF9zdGF0dXM7CiB9OwogCiBzdHJ1Y3QgdmlydHVhbCB7CmRpZmYg
LXVyIG1hdGhvcGQtMS41cDYvc3JjL3JlcXVlc3QuYyBtYXRob3BkLTEuNWFmL3NyYy9yZXF1ZXN0
LmMKLS0tIG1hdGhvcGQtMS41cDYvc3JjL3JlcXVlc3QuYwkyMDA3LTA5LTAyIDEyOjI4OjIxLjk2
NzkwNDI2NCArMTAwMAorKysgbWF0aG9wZC0xLjVhZi9zcmMvcmVxdWVzdC5jCTIwMDctMDktMDIg
MTg6MTc6NTAuNjk4NTE5NTMyICsxMDAwCkBAIC05MjUsNyArOTI1LDEwIEBACiAJCXItPmxvY2F0
aW9uID0gci0+cGF0aF90cmFuc2xhdGVkOwogCQlpZiAoZGVidWcpCiAJCQlsb2dfZCgicmVkaXJl
Y3RpbmciKTsKLQkJci0+c3RhdHVzID0gMzAyOworCQlpZihyLT5jICYmIHItPmMtPnJlZGlyZWN0
X3N0YXR1cykKKwkJCXItPnN0YXR1cyA9IHItPmMtPnJlZGlyZWN0X3N0YXR1czsKKwkJZWxzZQor
CQkJci0+c3RhdHVzID0gMzAyOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGdldF9wYXRoX2luZm8o
cikgPT0gLTEpIHsKQEAgLTE0MDksMTAgKzE0MTIsMTYgQEAKIAkJcmV0dXJuICIyMDQgTm8gQ29u
dGVudCI7CiAJY2FzZSAyMDY6CiAJCXJldHVybiAiMjA2IFBhcnRpYWwgQ29udGVudCI7CisJY2Fz
ZSAzMDE6CisJCXJldHVybiAiMzAxIE1vdmVkIFBlcm1hbmVudGx5IjsKIAljYXNlIDMwMjoKLQkJ
cmV0dXJuICIzMDIgTW92ZWQiOworCQlyZXR1cm4gIjMwMiBGb3VuZCI7CisJY2FzZSAzMDM6CisJ
CXJldHVybiAiMzAzIFNlZSBPdGhlciI7CiAJY2FzZSAzMDQ6CiAJCXJldHVybiAiMzA0IE5vdCBN
b2RpZmllZCI7CisJY2FzZSAzMDc6CisJCXJldHVybiAiMzA3IFRlbXBvcmFyeSBSZWRpcmVjdCI7
CiAJY2FzZSA0MDA6CiAJCXJldHVybiAiNDAwIEJhZCBSZXF1ZXN0IjsKIAljYXNlIDQwMToKQEAg
LTE0OTYsNyArMTUwNSwxMCBAQAogCQlpZiAocG9vbF9wcmludChwLCAiQ29udGVudC1SYW5nZTog
Ynl0ZXMgJWp1LSVqdS8lanVcclxuIiwgci0+cmFuZ2VfZmxvb3IsIHItPnJhbmdlX2NlaWxpbmcs
IHItPnJhbmdlX3RvdGFsKSA9PSAtMSkKIAkJCXJldHVybiAtMTsKIAkJYnJlYWs7CisJY2FzZSAz
MDE6CiAJY2FzZSAzMDI6CisJY2FzZSAzMDM6CisJY2FzZSAzMDc6CiAJCWlmIChyLT5sb2NhdGlv
bikKIAkJCWlmIChwb29sX3ByaW50KHAsICJMb2NhdGlvbjogJXNcclxuIiwgci0+bG9jYXRpb24p
ID09IC0xKQogCQkJCXJldHVybiAtMTsKQEAgLTE1NTEsNyArMTU2MywxMCBAQAogCWlmIChwb29s
X3ByaW50KHAsICI8dGl0bGU+JXM8L3RpdGxlPlxuPGgxPiVzPC9oMT5cbiIsIHN0YXR1c19saW5l
LCBzdGF0dXNfbGluZSkgPT0gLTEpCiAJCXJldHVybiAtMTsKIAlzd2l0Y2ggKHItPnN0YXR1cykg
eworCWNhc2UgMzAxOgogCWNhc2UgMzAyOgorCWNhc2UgMzAzOgorCWNhc2UgMzA3OgogCQlpZiAo
cG9vbF9wcmludChwLCAiVGhpcyBkb2N1bWVudCBoYXMgbW92ZWQgdG8gVVJMIDxhIGhyZWY9XCIl
c1wiPiVzPC9hPi5cbiIsIHItPmxvY2F0aW9uLCByLT5sb2NhdGlvbikgPT0gLTEpCiAJCQlyZXR1
cm4gLTE7CiAJCWJyZWFrOwo=
--Boundary-00=_CXn2GovTBzKPG74
Content-Type: text/x-diff;
charset="us-ascii";
name="RedirectStatus16.diff"
Content-Transfer-Encoding: base64
Content-Description: Patch for mathopd-1.6b9
Content-Disposition: attachment;
filename="RedirectStatus16.diff"
ZGlmZiAtdXIgbWF0aG9wZC0xLjZiOS9kb2MvQ0hBTkdFUyBtYXRob3BkLTEuNmFmL2RvYy9DSEFO
R0VTCi0tLSBtYXRob3BkLTEuNmI5L2RvYy9DSEFOR0VTCTIwMDctMDctMDggMDI6NTY6MzAuMDAw
MDAwMDAwICsxMDAwCisrKyBtYXRob3BkLTEuNmFmL2RvYy9DSEFOR0VTCTIwMDctMDktMDIgMTY6
MjY6MDYuNDI0MjEzMzk2ICsxMDAwCkBAIC0yOSw2ICsyOSw3IEBACiAJTnVtUHJvY2Vzc2VzCiAJ
UElECiAJU2FuaXRpemVQYXRoCisJUmVkaXJlY3RTdGF0dXMKIAogVGhlIGZvbGxvd2luZyBrZXl3
b3JkcyBoYXZlIGJlZW4gcmVtb3ZlZDoKIApkaWZmIC11ciBtYXRob3BkLTEuNmI5L2RvYy9jb25m
aWcudHh0IG1hdGhvcGQtMS42YWYvZG9jL2NvbmZpZy50eHQKLS0tIG1hdGhvcGQtMS42YjkvZG9j
L2NvbmZpZy50eHQJMjAwNi0xMS0wNSAwNjo1ODozMy4wMDAwMDAwMDAgKzExMDAKKysrIG1hdGhv
cGQtMS42YWYvZG9jL2NvbmZpZy50eHQJMjAwNy0wOS0wMiAxNjo1Njo0MS42NzEyMjc5MjAgKzEw
MDAKQEAgLTc0Miw2ICs3NDIsMTYgQEAKICAgICAgICAgIGVycm9yIHJlc3BvbnNlcy4gSXRzIHZh
bHVlIG1heSBiZSBkaXNwbGF5ZWQgYnkgYSB3ZWIgYnJvd3NlciBpbgogICAgICAgICAgYSBsb2dp
biBkaWFsb2cuCiAKK0tleXdvcmQ6IFJlZGlyZWN0U3RhdHVzCitXaGVyZTogICBDb250cm9sCitU
eXBlOiAgICBJbnRlZ2VyCitEZXNjOiAgICBVc2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIExv
Y2F0aW9uIHJlZGlyZWN0IHN5bnRheCwgdGhpcyBzZXRzCisgICAgICAgICB0aGUgc3RhdHVzIGNv
ZGUgcmV0dXJuZWQuIFRoZSBkZWZhdWx0IGlzIGEgIjMwMiIsIGJ1dCBjYW4gYmUgc2V0CisgICAg
ICAgICB0byBhbnl0aGluZyBpbiB0aGUgcmFuZ2UgM3h4LiBWYWxpZCBjb2RlcyBhcmUgZGVmaW5l
ZCBieSBSRkMyNjE2CisgICAgICAgICBhbmQgc2hvdWxkIGJlIGFkaGVyZWQgdG8uIFRoaXMgY2Fu
IGJlIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHRvCisgICAgICAgICBwcmV2ZW50IHRoZSAiZHVwbGlj
YXRlIGNvbnRlbnQiIHBlbmFsdHkgaW1wb3NlZCBieSBzb21lIHNlYXJjaCAKKyAgICAgICAgIGVu
Z2luZXMuCisKIEtleXdvcmQ6IFJlZmVyZXIKIFdoZXJlOiAgIExvZ0Zvcm1hdAogRGVzYzogICAg
VGhlIHZhbHVlIG9mIHRoZSAnUmVmZXJlcjonIGhlYWRlciBzZW50IGJ5IHRoZSBjbGllbnQuIFNv
bWV0aW1lcwpkaWZmIC11ciBtYXRob3BkLTEuNmI5L2RvYy9zeW50YXgudHh0IG1hdGhvcGQtMS42
YWYvZG9jL3N5bnRheC50eHQKLS0tIG1hdGhvcGQtMS42YjkvZG9jL3N5bnRheC50eHQJMjAwNi0x
MS0wNSAwNjo1ODozMy4wMDAwMDAwMDAgKzExMDAKKysrIG1hdGhvcGQtMS42YWYvZG9jL3N5bnRh
eC50eHQJMjAwNy0wOS0wMiAxNTo0ODoyNy44MDc1NDc4NTggKzEwMDAKQEAgLTkxLDYgKzkxLDcg
QEAKIAkiQXV0b0luZGV4Q29tbWFuZCIgc3RyaW5nCiAJIkV4cGlyZUludGVydmFsIiBpbnRlZ2Vy
CiAJIlNhbml0aXplUGF0aCIgZmxhZworCSJSZWRpcmVjdFN0YXR1cyIgaW50ZWdlcgogCiBzZXJ2
ZXItaXRlbToKIAkiUG9ydCIgc3RyaW5nCmRpZmYgLXVyIG1hdGhvcGQtMS42Yjkvc3JjL2NvbmZp
Zy5jIG1hdGhvcGQtMS42YWYvc3JjL2NvbmZpZy5jCi0tLSBtYXRob3BkLTEuNmI5L3NyYy9jb25m
aWcuYwkyMDA3LTA3LTA4IDAyOjA0OjEyLjAwMDAwMDAwMCArMTAwMAorKysgbWF0aG9wZC0xLjZh
Zi9zcmMvY29uZmlnLmMJMjAwNy0wOS0wMiAxNjo1MToyOS4wNDQ4MzI0MjkgKzEwMDAKQEAgLTEy
OCw2ICsxMjgsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgY19wdXRlbnZbXSA9CQkJIlB1dEVudiI7
CiBzdGF0aWMgY29uc3QgY2hhciBjX3F1ZXJ5X3N0cmluZ1tdID0JCSJRdWVyeVN0cmluZyI7CiBz
dGF0aWMgY29uc3QgY2hhciBjX3JlYWxtW10gPQkJCSJSZWFsbSI7CitzdGF0aWMgY29uc3QgY2hh
ciBjX3JlZGlyZWN0X3N0YXR1c1tdID0JCSJSZWRpcmVjdFN0YXR1cyI7CiBzdGF0aWMgY29uc3Qg
Y2hhciBjX3JlZmVyZXJbXSA9CQkJIlJlZmVyZXIiOwogc3RhdGljIGNvbnN0IGNoYXIgY19yZW1v
dGVfYWRkcmVzc1tdID0JCSJSZW1vdGVBZGRyZXNzIjsKIHN0YXRpYyBjb25zdCBjaGFyIGNfcmVt
b3RlX3BvcnRbXSA9CQkiUmVtb3RlUG9ydCI7CkBAIC0xNjcsNiArMTY4LDcgQEAKIHN0YXRpYyBj
b25zdCBjaGFyIGVfdXNlcl9pbnZhbGlkW10gPQkiaW52YWxpZCB1c2VyIjsKIHN0YXRpYyBjb25z
dCBjaGFyIGVfdXNlcl91bmtub3duW10gPQkidXNlciB1bmtub3duIjsKIHN0YXRpYyBjb25zdCBj
aGFyIGVfdG9vYmlnW10gPQkJIm51bWJlciB0b28gYmlnIjsKK3N0YXRpYyBjb25zdCBjaGFyIGVf
b3V0c2lkZV9yYW5nZVtdID0JInZhbHVlIG91dHNpZGUgYWxsb3dlZCByYW5nZSI7CiAKIHN0YXRp
YyBjb25zdCBjaGFyIHRfY2xvc2VbXSA9CQkidW5leHBlY3RlZCBjbG9zaW5nIGJyYWNlIjsKIHN0
YXRpYyBjb25zdCBjaGFyIHRfZW9mW10gPQkJInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiOwpAQCAt
MzI2LDYgKzMyOCwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqY29u
ZmlnX3NtYWxsaW50X2luX3JhbmdlKHN0cnVjdCBjb25maWd1cmF0aW9uICpwLCBpbnQgKmksIGlu
dCBtaW4sIGludCBtYXgpCit7CisJdW5zaWduZWQgbG9uZyB1OworCWNvbnN0IGNoYXIgKnQ7CisK
Kwl0ID0gY29uZmlnX2ludChwLCAmdSk7CisJaWYgKHQpCisJCXJldHVybiB0OworCWlmKCh1IDwg
bWluKSB8fCAodSA+IG1heCkpCisJCXJldHVybiBlX291dHNpZGVfcmFuZ2U7CisJKmkgPSB1Owor
CXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqY29uZmlnX2ZsYWcoc3RydWN0IGNv
bmZpZ3VyYXRpb24gKnAsIGludCAqaSkKIHsKIAljb25zdCBjaGFyICp0OwpAQCAtNTM4LDYgKzU1
NCw3IEBACiAJCWEtPmF1dG9faW5kZXhfY29tbWFuZCA9IGItPmF1dG9faW5kZXhfY29tbWFuZDsK
IAkJYS0+ZXhwaXJlX2ludGVydmFsID0gYi0+ZXhwaXJlX2ludGVydmFsOwogCQlhLT5zYW5pdGl6
ZV9wYXRoID0gYi0+c2FuaXRpemVfcGF0aDsKKwkJYS0+cmVkaXJlY3Rfc3RhdHVzID0gYi0+cmVk
aXJlY3Rfc3RhdHVzOwogCX0gZWxzZSB7CiAJCWEtPmluZGV4X25hbWVzID0gMDsKIAkJYS0+bWlt
ZXMgPSAwOwpAQCAtNTYwLDYgKzU3Nyw3IEBACiAJCWEtPmF1dG9faW5kZXhfY29tbWFuZCA9IDA7
CiAJCWEtPmV4cGlyZV9pbnRlcnZhbCA9IDA7CiAJCWEtPnNhbml0aXplX3BhdGggPSAwOworCQlh
LT5yZWRpcmVjdF9zdGF0dXMgPSAwOwogCX0KIAlhLT5uZXh0ID0gKmFzOwogCSphcyA9IGE7CkBA
IC02MzksNiArNjU3LDggQEAKIAkJCXQgPSBjb25maWdfaW50KHAsICZhLT5leHBpcmVfaW50ZXJ2
YWwpOwogCQllbHNlIGlmICghc3RyY2FzZWNtcChwLT50b2tidWYsIGNfc2FuaXRpemVfcGF0aCkp
CiAJCQl0ID0gY29uZmlnX2ZsYWcocCwgJmEtPnNhbml0aXplX3BhdGgpOworCQllbHNlIGlmICgh
c3RyY2FzZWNtcChwLT50b2tidWYsIGNfcmVkaXJlY3Rfc3RhdHVzKSkKKwkJCXQgPSBjb25maWdf
c21hbGxpbnRfaW5fcmFuZ2UocCwgJmEtPnJlZGlyZWN0X3N0YXR1cywgMzAwLCAzOTkpOwogCQll
bHNlCiAJCQl0ID0gZV9rZXl3b3JkOwogCQlpZiAodCkKZGlmZiAtdXIgbWF0aG9wZC0xLjZiOS9z
cmMvbWF0aG9wZC5oIG1hdGhvcGQtMS42YWYvc3JjL21hdGhvcGQuaAotLS0gbWF0aG9wZC0xLjZi
OS9zcmMvbWF0aG9wZC5oCTIwMDctMDctMDggMDI6MDQ6MTIuMDAwMDAwMDAwICsxMDAwCisrKyBt
YXRob3BkLTEuNmFmL3NyYy9tYXRob3BkLmgJMjAwNy0wOS0wMiAxNTo0ODoyNy44MjM1NDUyNzAg
KzEwMDAKQEAgLTE3Nyw2ICsxNzcsNyBAQAogCWNoYXIgKmF1dG9faW5kZXhfY29tbWFuZDsKIAl1
bnNpZ25lZCBsb25nIGV4cGlyZV9pbnRlcnZhbDsKIAlpbnQgc2FuaXRpemVfcGF0aDsKKwlpbnQg
cmVkaXJlY3Rfc3RhdHVzOwogfTsKIAogc3RydWN0IHZpcnR1YWwgewpkaWZmIC11ciBtYXRob3Bk
LTEuNmI5L3NyYy9yZXF1ZXN0LmMgbWF0aG9wZC0xLjZhZi9zcmMvcmVxdWVzdC5jCi0tLSBtYXRo
b3BkLTEuNmI5L3NyYy9yZXF1ZXN0LmMJMjAwNy0wNy0yMSAyMDo0MToxMy4wMDAwMDAwMDAgKzEw
MDAKKysrIG1hdGhvcGQtMS42YWYvc3JjL3JlcXVlc3QuYwkyMDA3LTA5LTAyIDE4OjE4OjIxLjQw
NzU0NzE1MCArMTAwMApAQCAtOTA3LDcgKzkwNywxMCBAQAogCQlyLT5sb2NhdGlvbiA9IHItPnBh
dGhfdHJhbnNsYXRlZDsKIAkJaWYgKGRlYnVnKQogCQkJbG9nX2QoInJlZGlyZWN0aW5nIik7Ci0J
CXItPnN0YXR1cyA9IDMwMjsKKwkJaWYoci0+YyAmJiByLT5jLT5yZWRpcmVjdF9zdGF0dXMpCisJ
CQlyLT5zdGF0dXMgPSByLT5jLT5yZWRpcmVjdF9zdGF0dXM7CisJCWVsc2UKKwkJCXItPnN0YXR1
cyA9IDMwMjsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChnZXRfcGF0aF9pbmZvKHIpID09IC0xKSB7
CkBAIC0xMzkzLDEwICsxMzk2LDE2IEBACiAJCXJldHVybiAiMjA0IE5vIENvbnRlbnQiOwogCWNh
c2UgMjA2OgogCQlyZXR1cm4gIjIwNiBQYXJ0aWFsIENvbnRlbnQiOworCWNhc2UgMzAxOgorCQly
ZXR1cm4gIjMwMSBNb3ZlZCBQZXJtYW5lbnRseSI7CiAJY2FzZSAzMDI6Ci0JCXJldHVybiAiMzAy
IE1vdmVkIjsKKwkJcmV0dXJuICIzMDIgRm91bmQiOworCWNhc2UgMzAzOgorCQlyZXR1cm4gIjMw
MyBTZWUgT3RoZXIiOwogCWNhc2UgMzA0OgogCQlyZXR1cm4gIjMwNCBOb3QgTW9kaWZpZWQiOwor
CWNhc2UgMzA3OgorCQlyZXR1cm4gIjMwNyBUZW1wb3JhcnkgUmVkaXJlY3QiOwogCWNhc2UgNDAw
OgogCQlyZXR1cm4gIjQwMCBCYWQgUmVxdWVzdCI7CiAJY2FzZSA0MDE6CkBAIC0xNDgxLDcgKzE0
OTAsMTAgQEAKIAkJaWYgKHBvb2xfcHJpbnQocCwgIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICVqdS0l
anUvJWp1XHJcbiIsIHItPnJhbmdlX2Zsb29yLCByLT5yYW5nZV9jZWlsaW5nLCByLT5yYW5nZV90
b3RhbCkgPT0gLTEpCiAJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOworCWNhc2UgMzAxOgogCWNhc2Ug
MzAyOgorCWNhc2UgMzAzOgorCWNhc2UgMzA3OgogCQlpZiAoci0+bG9jYXRpb24pCiAJCQlpZiAo
cG9vbF9wcmludChwLCAiTG9jYXRpb246ICVzXHJcbiIsIHItPmxvY2F0aW9uKSA9PSAtMSkKIAkJ
CQlyZXR1cm4gLTE7CkBAIC0xNTQyLDcgKzE1NTQsMTAgQEAKIAlpZiAocG9vbF9wcmludChwLCAi
PHRpdGxlPiVzPC90aXRsZT5cbjxoMT4lczwvaDE+XG4iLCBzdGF0dXNfbGluZSwgc3RhdHVzX2xp
bmUpID09IC0xKQogCQlyZXR1cm4gLTE7CiAJc3dpdGNoIChyLT5zdGF0dXMpIHsKKwljYXNlIDMw
MToKIAljYXNlIDMwMjoKKwljYXNlIDMwMzoKKwljYXNlIDMwNzoKIAkJaWYgKHBvb2xfcHJpbnQo
cCwgIlRoaXMgZG9jdW1lbnQgaGFzIG1vdmVkIHRvIFVSTCA8YSBocmVmPVwiJXNcIj4lczwvYT4u
XG4iLCByLT5sb2NhdGlvbiwgci0+bG9jYXRpb24pID09IC0xKQogCQkJcmV0dXJuIC0xOwogCQli
cmVhazsK
--Boundary-00=_CXn2GovTBzKPG74--