Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2019-12-09 00:07:44 +00:00
parent f7c17a066a
commit 3359a5a563
7 changed files with 301 additions and 49 deletions

View file

@ -2,9 +2,10 @@
module GitHelper
def strip_signature(text)
text.gsub(/-----BEGIN PGP SIGNATURE-----(.*)-----END PGP SIGNATURE-----/m, "")
text.gsub(/-----BEGIN PGP MESSAGE-----(.*)-----END PGP MESSAGE-----/m, "")
text.gsub(/-----BEGIN SIGNED MESSAGE-----(.*)-----END SIGNED MESSAGE-----/m, "")
text = text.gsub(/-----BEGIN PGP SIGNATURE-----(.*)-----END PGP SIGNATURE-----/m, "")
text = text.gsub(/-----BEGIN PGP MESSAGE-----(.*)-----END PGP MESSAGE-----/m, "")
text = text.gsub(/-----BEGIN SIGNED MESSAGE-----(.*)-----END SIGNED MESSAGE-----/m, "")
text
end
def short_sha(text)

View file

@ -0,0 +1,5 @@
---
title: 'Correctly return stripped PGP text'
merge_request: 21187
author: Roger Meier
type: fixed

View file

@ -1128,7 +1128,14 @@ enum EntryType {
}
type Epic implements Noteable {
"""
Author of the epic
"""
author: User!
"""
Children (sub-epics) of the epic
"""
children(
"""
Returns the elements in the list that come after the specified cursor.
@ -1197,13 +1204,25 @@ type Epic implements Noteable {
"""
state: EpicState
): EpicConnection
"""
Timestamp of the epic's closure
"""
closedAt: Time
"""
Timestamp of the epic's creation
"""
createdAt: Time
"""
Number of open and closed descendant epics and issues
"""
descendantCounts: EpicDescendantCount
"""
Description of the epic
"""
description: String
"""
@ -1235,14 +1254,50 @@ type Epic implements Noteable {
Number of downvotes the epic has received
"""
downvotes: Int!
"""
Due date of the epic
"""
dueDate: Time
"""
Fixed due date of the epic
"""
dueDateFixed: Time
"""
Inherited due date of the epic from milestones
"""
dueDateFromMilestones: Time
"""
Indicates if the due date has been manually set
"""
dueDateIsFixed: Boolean
"""
Group to which the epic belongs
"""
group: Group!
"""
Indicates if the epic has children
"""
hasChildren: Boolean!
"""
Indicates if the epic has direct issues
"""
hasIssues: Boolean!
"""
ID of the epic
"""
id: ID!
"""
Internal ID of the epic
"""
iid: ID!
"""
@ -1319,6 +1374,10 @@ type Epic implements Noteable {
"""
last: Int
): NoteConnection!
"""
Parent epic of the epic
"""
parent: Epic
"""
@ -1349,20 +1408,48 @@ type Epic implements Noteable {
relationPath: String
"""
The relative position of the epic in the Epic tree
The relative position of the epic in the epic tree
"""
relativePosition: Int
"""
Start date of the epic
"""
startDate: Time
"""
Fixed start date of the epic
"""
startDateFixed: Time
"""
Inherited start date of the epic from milestones
"""
startDateFromMilestones: Time
"""
Indicates if the start date has been manually set
"""
startDateIsFixed: Boolean
"""
State of the epic
"""
state: EpicState!
"""
Boolean flag for whether the currently logged in user is subscribed to this epic
"""
subscribed: Boolean!
"""
Title of the epic
"""
title: String
"""
Timestamp of the epic's last activity
"""
updatedAt: Time
"""

View file

@ -3342,7 +3342,7 @@
"fields": [
{
"name": "author",
"description": null,
"description": "Author of the epic",
"args": [
],
@ -3360,7 +3360,7 @@
},
{
"name": "children",
"description": null,
"description": "Children (sub-epics) of the epic",
"args": [
{
"name": "iid",
@ -3519,7 +3519,7 @@
},
{
"name": "closedAt",
"description": null,
"description": "Timestamp of the epic's closure",
"args": [
],
@ -3533,7 +3533,7 @@
},
{
"name": "createdAt",
"description": null,
"description": "Timestamp of the epic's creation",
"args": [
],
@ -3561,7 +3561,7 @@
},
{
"name": "description",
"description": null,
"description": "Description of the epic",
"args": [
],
@ -3650,7 +3650,7 @@
},
{
"name": "dueDate",
"description": null,
"description": "Due date of the epic",
"args": [
],
@ -3664,7 +3664,7 @@
},
{
"name": "dueDateFixed",
"description": null,
"description": "Fixed due date of the epic",
"args": [
],
@ -3678,7 +3678,7 @@
},
{
"name": "dueDateFromMilestones",
"description": null,
"description": "Inherited due date of the epic from milestones",
"args": [
],
@ -3692,7 +3692,7 @@
},
{
"name": "dueDateIsFixed",
"description": null,
"description": "Indicates if the due date has been manually set",
"args": [
],
@ -3706,7 +3706,7 @@
},
{
"name": "group",
"description": null,
"description": "Group to which the epic belongs",
"args": [
],
@ -3724,7 +3724,7 @@
},
{
"name": "hasChildren",
"description": null,
"description": "Indicates if the epic has children",
"args": [
],
@ -3742,7 +3742,7 @@
},
{
"name": "hasIssues",
"description": null,
"description": "Indicates if the epic has direct issues",
"args": [
],
@ -3760,7 +3760,7 @@
},
{
"name": "id",
"description": null,
"description": "ID of the epic",
"args": [
],
@ -3778,7 +3778,7 @@
},
{
"name": "iid",
"description": null,
"description": "Internal ID of the epic",
"args": [
],
@ -3959,7 +3959,7 @@
},
{
"name": "parent",
"description": null,
"description": "Parent epic of the epic",
"args": [
],
@ -4067,7 +4067,7 @@
},
{
"name": "relativePosition",
"description": "The relative position of the epic in the Epic tree",
"description": "The relative position of the epic in the epic tree",
"args": [
],
@ -4081,7 +4081,7 @@
},
{
"name": "startDate",
"description": null,
"description": "Start date of the epic",
"args": [
],
@ -4095,7 +4095,7 @@
},
{
"name": "startDateFixed",
"description": null,
"description": "Fixed start date of the epic",
"args": [
],
@ -4109,7 +4109,7 @@
},
{
"name": "startDateFromMilestones",
"description": null,
"description": "Inherited start date of the epic from milestones",
"args": [
],
@ -4123,7 +4123,7 @@
},
{
"name": "startDateIsFixed",
"description": null,
"description": "Indicates if the start date has been manually set",
"args": [
],
@ -4137,7 +4137,7 @@
},
{
"name": "state",
"description": null,
"description": "State of the epic",
"args": [
],
@ -4173,7 +4173,7 @@
},
{
"name": "title",
"description": null,
"description": "Title of the epic",
"args": [
],
@ -4187,7 +4187,7 @@
},
{
"name": "updatedAt",
"description": null,
"description": "Timestamp of the epic's last activity",
"args": [
],

View file

@ -195,32 +195,32 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| Name | Type | Description |
| --- | ---- | ---------- |
| `userPermissions` | EpicPermissions! | Permissions for the current user on the resource |
| `id` | ID! | |
| `iid` | ID! | |
| `title` | String | |
| `description` | String | |
| `state` | EpicState! | |
| `group` | Group! | |
| `parent` | Epic | |
| `author` | User! | |
| `startDate` | Time | |
| `startDateIsFixed` | Boolean | |
| `startDateFixed` | Time | |
| `startDateFromMilestones` | Time | |
| `dueDate` | Time | |
| `dueDateIsFixed` | Boolean | |
| `dueDateFixed` | Time | |
| `dueDateFromMilestones` | Time | |
| `id` | ID! | ID of the epic |
| `iid` | ID! | Internal ID of the epic |
| `title` | String | Title of the epic |
| `description` | String | Description of the epic |
| `state` | EpicState! | State of the epic |
| `group` | Group! | Group to which the epic belongs |
| `parent` | Epic | Parent epic of the epic |
| `author` | User! | Author of the epic |
| `startDate` | Time | Start date of the epic |
| `startDateIsFixed` | Boolean | Indicates if the start date has been manually set |
| `startDateFixed` | Time | Fixed start date of the epic |
| `startDateFromMilestones` | Time | Inherited start date of the epic from milestones |
| `dueDate` | Time | Due date of the epic |
| `dueDateIsFixed` | Boolean | Indicates if the due date has been manually set |
| `dueDateFixed` | Time | Fixed due date of the epic |
| `dueDateFromMilestones` | Time | Inherited due date of the epic from milestones |
| `upvotes` | Int! | Number of upvotes the epic has received |
| `downvotes` | Int! | Number of downvotes the epic has received |
| `closedAt` | Time | |
| `createdAt` | Time | |
| `updatedAt` | Time | |
| `hasChildren` | Boolean! | |
| `hasIssues` | Boolean! | |
| `closedAt` | Time | Timestamp of the epic's closure |
| `createdAt` | Time | Timestamp of the epic's creation |
| `updatedAt` | Time | Timestamp of the epic's last activity |
| `hasChildren` | Boolean! | Indicates if the epic has children |
| `hasIssues` | Boolean! | Indicates if the epic has direct issues |
| `webPath` | String! | |
| `webUrl` | String! | |
| `relativePosition` | Int | The relative position of the epic in the Epic tree |
| `relativePosition` | Int | The relative position of the epic in the epic tree |
| `relationPath` | String | |
| `reference` | String! | |
| `subscribed` | Boolean! | Boolean flag for whether the currently logged in user is subscribed to this epic |

View file

@ -8,4 +8,163 @@ describe GitHelper do
it { expect(short_sha).to eq('d4e043f6') }
end
describe '#strip_signature' do
context 'strips PGP SIGNATURE' do
let(:strip_signature) { helper.strip_signature( pgp_signature_tag ) }
it { expect(strip_signature).to eq("Version 1.69.0\n\n") }
end
context 'strips PGP MESSAGE' do
let(:strip_signature) { helper.strip_signature( pgp_message_tag ) }
it { expect(strip_signature).to eq("Version 1.69.0\n\n") }
end
context 'strips SIGNED MESSAGE' do
let(:strip_signature) { helper.strip_signature( x509_message_tag ) }
it { expect(strip_signature).to eq("this is Roger's signed tag\n\n") }
end
end
def pgp_signature_tag
<<~SIGNATURE
Version 1.69.0
-----BEGIN PGP SIGNATURE-----
iQEzBAABCAAdFiEEFMo1pwRq9j04Jovq68Q/GjfvLIoFAl2l64QACgkQ68Q/Gjfv
LIqRDggAm0d1ceVRsfldlwC6guR2ly8aWoTtZZ19E12bsfXd4lJqcQv7JXTP0og0
cwbV0l92iBJKGW6bFBipKDFmSgr5le5zFsXYOr9bJCQNOhFNMmtAgaHEIeVI16+c
S3pA+qIe516d4wRs/hcbxDJKC68iIlDaLXObdzTTLGMgbCYBFTjYJldNUfTkdvbB
oGEpFXuxV9EyfBtPLsz2vUea5GdZcRSVyJbcgm9ZU+ekdLZckroP5M0I5SQTbD3y
VrbCY3ziYtau4zK4cV66ybRz1G7tR6dcoC4kGUbaZlKsVZ1Af80agx2d9k5MR1wS
4OFe1H0zIfpPRFsyX2toaum3EX6QBA==
=hefg
-----END PGP SIGNATURE-----
SIGNATURE
end
def pgp_message_tag
<<~SIGNATURE
Version 1.69.0
-----BEGIN PGP MESSAGE-----
iQEzBAABCAAdFiEEFMo1pwRq9j04Jovq68Q/GjfvLIoFAl2l64QACgkQ68Q/Gjfv
LIqRDggAm0d1ceVRsfldlwC6guR2ly8aWoTtZZ19E12bsfXd4lJqcQv7JXTP0og0
cwbV0l92iBJKGW6bFBipKDFmSgr5le5zFsXYOr9bJCQNOhFNMmtAgaHEIeVI16+c
S3pA+qIe516d4wRs/hcbxDJKC68iIlDaLXObdzTTLGMgbCYBFTjYJldNUfTkdvbB
oGEpFXuxV9EyfBtPLsz2vUea5GdZcRSVyJbcgm9ZU+ekdLZckroP5M0I5SQTbD3y
VrbCY3ziYtau4zK4cV66ybRz1G7tR6dcoC4kGUbaZlKsVZ1Af80agx2d9k5MR1wS
4OFe1H0zIfpPRFsyX2toaum3EX6QBA==
=hefg
-----END PGP MESSAGE-----
SIGNATURE
end
def x509_message_tag
<<~SIGNATURE
this is Roger's signed tag
-----BEGIN SIGNED MESSAGE-----
MIISfwYJKoZIhvcNAQcCoIIScDCCEmwCAQExDTALBglghkgBZQMEAgEwCwYJKoZI
hvcNAQcBoIIP8zCCB3QwggVcoAMCAQICBBXXLOIwDQYJKoZIhvcNAQELBQAwgbYx
CzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVu
MRAwDgYDVQQKDAdTaWVtZW5zMREwDwYDVQQFEwhaWlpaWlpBNjEdMBsGA1UECwwU
U2llbWVucyBUcnVzdCBDZW50ZXIxPzA9BgNVBAMMNlNpZW1lbnMgSXNzdWluZyBD
QSBNZWRpdW0gU3RyZW5ndGggQXV0aGVudGljYXRpb24gMjAxNjAeFw0xNzAyMDMw
NjU4MzNaFw0yMDAyMDMwNjU4MzNaMFsxETAPBgNVBAUTCFowMDBOV0RIMQ4wDAYD
VQQqDAVSb2dlcjEOMAwGA1UEBAwFTWVpZXIxEDAOBgNVBAoMB1NpZW1lbnMxFDAS
BgNVBAMMC01laWVyIFJvZ2VyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAuBNea/68ZCnHYQjpm/k3ZBG0wBpEKSwG6lk9CEQlSxsqVLQHAoAKBIlJm1in
YVLcK/Sq1yhYJ/qWcY/M53DhK2rpPuhtrWJUdOUy8EBWO20F4bd4Fw9pO7jt8bme
u33TSrK772vKjuppzB6SeG13Cs08H+BIeD106G27h7ufsO00pvsxoSDL+uc4slnr
pBL+2TAL7nSFnB9QHWmRIK27SPqJE+lESdb0pse11x1wjvqKy2Q7EjL9fpqJdHzX
NLKHXd2r024TOORTa05DFTNR+kQEKKV96XfpYdtSBomXNQ44cisiPBJjFtYvfnFE
wgrHa8fogn/b0C+A+HAoICN12wIDAQABo4IC4jCCAt4wHQYDVR0OBBYEFCF+gkUp
XQ6xGc0kRWXuDFxzA14zMEMGA1UdEQQ8MDqgIwYKKwYBBAGCNxQCA6AVDBNyLm1l
aWVyQHNpZW1lbnMuY29tgRNyLm1laWVyQHNpZW1lbnMuY29tMA4GA1UdDwEB/wQE
AwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgcoGA1UdHwSBwjCB
vzCBvKCBuaCBtoYmaHR0cDovL2NoLnNpZW1lbnMuY29tL3BraT9aWlpaWlpBNi5j
cmyGQWxkYXA6Ly9jbC5zaWVtZW5zLm5ldC9DTj1aWlpaWlpBNixMPVBLST9jZXJ0
aWZpY2F0ZVJldm9jYXRpb25MaXN0hklsZGFwOi8vY2wuc2llbWVucy5jb20vQ049
WlpaWlpaQTYsbz1UcnVzdGNlbnRlcj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0
MEUGA1UdIAQ+MDwwOgYNKwYBBAGhaQcCAgMBAzApMCcGCCsGAQUFBwIBFhtodHRw
Oi8vd3d3LnNpZW1lbnMuY29tL3BraS8wDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAW
gBT4FV1HDGx3e3LEAheRaKK292oJRDCCAQQGCCsGAQUFBwEBBIH3MIH0MDIGCCsG
AQUFBzAChiZodHRwOi8vYWguc2llbWVucy5jb20vcGtpP1paWlpaWkE2LmNydDBB
BggrBgEFBQcwAoY1bGRhcDovL2FsLnNpZW1lbnMubmV0L0NOPVpaWlpaWkE2LEw9
UEtJP2NBQ2VydGlmaWNhdGUwSQYIKwYBBQUHMAKGPWxkYXA6Ly9hbC5zaWVtZW5z
LmNvbS9DTj1aWlpaWlpBNixvPVRydXN0Y2VudGVyP2NBQ2VydGlmaWNhdGUwMAYI
KwYBBQUHMAGGJGh0dHA6Ly9vY3NwLnBraS1zZXJ2aWNlcy5zaWVtZW5zLmNvbTAN
BgkqhkiG9w0BAQsFAAOCAgEAXPVcX6vaEcszJqg5IemF9aFTlwTrX5ITNIpzcqG+
kD5haOf2mZYLjl+MKtLC1XfmIsGCUZNb8bjP6QHQEI+2d6x/ZOqPq7Kd7PwVu6x6
xZrkDjUyhUbUntT5+RBy++l3Wf6Cq6Kx+K8ambHBP/bu90/p2U8KfFAG3Kr2gI2q
fZrnNMOxmJfZ3/sXxssgLkhbZ7hRa+MpLfQ6uFsSiat3vlawBBvTyHnoZ/7oRc8y
qi6QzWcd76CPpMElYWibl+hJzKbBZUWvc71AzHR6i1QeZ6wubYz7vr+FF5Y7tnxB
Vz6omPC9XAg0F+Dla6Zlz3Awj5imCzVXa+9SjtnsidmJdLcKzTAKyDewewoxYOOJ
j3cJU7VSjJPl+2fVmDBaQwcNcUcu/TPAKApkegqO7tRF9IPhjhW8QkRnkqMetO3D
OXmAFVIsEI0Hvb2cdb7B6jSpjGUuhaFm9TCKhQtCk2p8JCDTuaENLm1x34rrJKbT
2vzyYN0CZtSkUdgD4yQxK9VWXGEzexRisWb4AnZjD2NAquLPpXmw8N0UwFD7MSpC
dpaX7FktdvZmMXsnGiAdtLSbBgLVWOD1gmJFDjrhNbI8NOaOaNk4jrfGqNh5lhGU
4DnBT2U6Cie1anLmFH/oZooAEXR2o3Nu+1mNDJChnJp0ovs08aa3zZvBdcloOvfU
qdowggh3MIIGX6ADAgECAgQtyi/nMA0GCSqGSIb3DQEBCwUAMIGZMQswCQYDVQQG
EwJERTEPMA0GA1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjEQMA4GA1UE
CgwHU2llbWVuczERMA8GA1UEBRMIWlpaWlpaQTExHTAbBgNVBAsMFFNpZW1lbnMg
VHJ1c3QgQ2VudGVyMSIwIAYDVQQDDBlTaWVtZW5zIFJvb3QgQ0EgVjMuMCAyMDE2
MB4XDTE2MDcyMDEzNDYxMFoXDTIyMDcyMDEzNDYxMFowgbYxCzAJBgNVBAYTAkRF
MQ8wDQYDVQQIDAZCYXllcm4xETAPBgNVBAcMCE11ZW5jaGVuMRAwDgYDVQQKDAdT
aWVtZW5zMREwDwYDVQQFEwhaWlpaWlpBNjEdMBsGA1UECwwUU2llbWVucyBUcnVz
dCBDZW50ZXIxPzA9BgNVBAMMNlNpZW1lbnMgSXNzdWluZyBDQSBNZWRpdW0gU3Ry
ZW5ndGggQXV0aGVudGljYXRpb24gMjAxNjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAL9UfK+JAZEqVMVvECdYF9IK4KSw34AqyNl3rYP5x03dtmKaNu+2
0fQqNESA1NGzw3s6LmrKLh1cR991nB2cvKOXu7AvEGpSuxzIcOROd4NpvRx+Ej1p
JIPeqf+ScmVK7lMSO8QL/QzjHOpGV3is9sG+ZIxOW9U1ESooy4Hal6ZNs4DNItsz
piCKqm6G3et4r2WqCy2RRuSqvnmMza7Y8BZsLy0ZVo5teObQ37E/FxqSrbDI8nxn
B7nVUve5ZjrqoIGSkEOtyo11003dVO1vmWB9A0WQGDqE/q3w178hGhKfxzRaqzyi
SoADUYS2sD/CglGTUxVq6u0pGLLsCFjItcCWqW+T9fPYfJ2CEd5b3hvqdCn+pXjZ
/gdX1XAcdUF5lRnGWifaYpT9n4s4adzX8q6oHSJxTppuAwLRKH6eXALbGQ1I9lGQ
DSOipD/09xkEsPw6HOepmf2U3YxZK1VU2sHqugFJboeLcHMzp6E1n2ctlNG1GKE9
FDHmdyFzDi0Nnxtf/GgVjnHF68hByEE1MYdJ4nJLuxoT9hyjYdRW9MpeNNxxZnmz
W3zh7QxIqP0ZfIz6XVhzrI9uZiqwwojDiM5tEOUkQ7XyW6grNXe75yt6mTj89LlB
H5fOW2RNmCy/jzBXDjgyskgK7kuCvUYTuRv8ITXbBY5axFA+CpxZqokpAgMBAAGj
ggKmMIICojCCAQUGCCsGAQUFBwEBBIH4MIH1MEEGCCsGAQUFBzAChjVsZGFwOi8v
YWwuc2llbWVucy5uZXQvQ049WlpaWlpaQTEsTD1QS0k/Y0FDZXJ0aWZpY2F0ZTAy
BggrBgEFBQcwAoYmaHR0cDovL2FoLnNpZW1lbnMuY29tL3BraT9aWlpaWlpBMS5j
cnQwSgYIKwYBBQUHMAKGPmxkYXA6Ly9hbC5zaWVtZW5zLmNvbS91aWQ9WlpaWlpa
QTEsbz1UcnVzdGNlbnRlcj9jQUNlcnRpZmljYXRlMDAGCCsGAQUFBzABhiRodHRw
Oi8vb2NzcC5wa2ktc2VydmljZXMuc2llbWVucy5jb20wHwYDVR0jBBgwFoAUcG2g
UOyp0CxnnRkV/v0EczXD4tQwEgYDVR0TAQH/BAgwBgEB/wIBADBABgNVHSAEOTA3
MDUGCCsGAQQBoWkHMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuc2llbWVucy5j
b20vcGtpLzCBxwYDVR0fBIG/MIG8MIG5oIG2oIGzhj9sZGFwOi8vY2wuc2llbWVu
cy5uZXQvQ049WlpaWlpaQTEsTD1QS0k/YXV0aG9yaXR5UmV2b2NhdGlvbkxpc3SG
Jmh0dHA6Ly9jaC5zaWVtZW5zLmNvbS9wa2k/WlpaWlpaQTEuY3JshkhsZGFwOi8v
Y2wuc2llbWVucy5jb20vdWlkPVpaWlpaWkExLG89VHJ1c3RjZW50ZXI/YXV0aG9y
aXR5UmV2b2NhdGlvbkxpc3QwJwYDVR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwME
BggrBgEFBQcDCTAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPgVXUcMbHd7csQC
F5Foorb3aglEMA0GCSqGSIb3DQEBCwUAA4ICAQBw+sqMp3SS7DVKcILEmXbdRAg3
lLO1r457KY+YgCT9uX4VG5EdRKcGfWXK6VHGCi4Dos5eXFV34Mq/p8nu1sqMuoGP
YjHn604eWDprhGy6GrTYdxzcE/GGHkpkuE3Ir/45UcmZlOU41SJ9SNjuIVrSHMOf
ccSY42BCspR/Q1Z/ykmIqQecdT3/Kkx02GzzSN2+HlW6cEO4GBW5RMqsvd2n0h2d
fe2zcqOgkLtx7u2JCR/U77zfyxG3qXtcymoz0wgSHcsKIl+GUjITLkHfS9Op8V7C
Gr/dX437sIg5pVHmEAWadjkIzqdHux+EF94Z6kaHywohc1xG0KvPYPX7iSNjkvhz
4NY53DHmxl4YEMLffZnaS/dqyhe1GTpcpyN8WiR4KuPfxrkVDOsuzWFtMSvNdlOV
gdI0MXcLMP+EOeANZWX6lGgJ3vWyemo58nzgshKd24MY3w3i6masUkxJH2KvI7UH
/1Db3SC8oOUjInvSRej6M3ZhYWgugm6gbpUgFoDw/o9Cg6Qm71hY0JtcaPC13rzm
N8a2Br0+Fa5e2VhwLmAxyfe1JKzqPwuHT0S5u05SQghL5VdzqfA8FCL/j4XC9yI6
csZTAQi73xFQYVjZt3+aoSz84lOlTmVo/jgvGMY/JzH9I4mETGgAJRNj34Z/0meh
M+pKWCojNH/dgyJSwDGCAlIwggJOAgEBMIG/MIG2MQswCQYDVQQGEwJERTEPMA0G
A1UECAwGQmF5ZXJuMREwDwYDVQQHDAhNdWVuY2hlbjEQMA4GA1UECgwHU2llbWVu
czERMA8GA1UEBRMIWlpaWlpaQTYxHTAbBgNVBAsMFFNpZW1lbnMgVHJ1c3QgQ2Vu
dGVyMT8wPQYDVQQDDDZTaWVtZW5zIElzc3VpbmcgQ0EgTWVkaXVtIFN0cmVuZ3Ro
IEF1dGhlbnRpY2F0aW9uIDIwMTYCBBXXLOIwCwYJYIZIAWUDBAIBoGkwHAYJKoZI
hvcNAQkFMQ8XDTE5MTExNDE3MzYzNFowLwYJKoZIhvcNAQkEMSIEIJO0Q0yM+f6h
pNqE7YCAEPwe751CamgWYqKBIUMjTViqMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0B
BwEwCwYJKoZIhvcNAQEBBIIBACZqs0NEuP1O/90avijVtTGicqMHp6vBBcmPJK7O
WOsL1DIDfAww+fw0r5cMbnmJA+iTfY5iZU/nqMK9kiGx055eoqU9KJaWFzY3KFO/
aOeXBCxv7CTDIVKoQtA0RCH6cGOgD6dnH2Lez3aDmziEd7gMqkBRo7lh1O6o5FQy
xyZl3p3/MYrFTeZDnr0YeBWWzPrECaQkI1M7K1hdTqmURU1wE6tSANYyT7/BtN+O
XVB/7uD6aTTo+eHyeJxcZGja0IsMXmwlsFqmlxxciYhQhQdPaXRcutdx0fMEF5Zq
wxhu3ScPA3X7e2ENEKJNl5W1OT9YXvc3K9Hwvtj8USx3CJI=
-----END SIGNED MESSAGE-----
SIGNATURE
end
end