--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG7jCCBNagAwIBAgIBDzANBgkqhkiG9w0BAQsFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
+BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
+MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
+ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
+8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
+zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
+fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
+w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
+G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
+epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
+laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
+QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
+fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
+YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAX8w
+ggF7MB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TAPBgNVHRMBAf8EBTAD
+AQH/MDQGCWCGSAGG+EIBCAQnFiVodHRwOi8vd3d3LmNhY2VydC5vcmcvaW5kZXgu
+cGhwP2lkPTEwMFYGCWCGSAGG+EIBDQRJFkdUbyBnZXQgeW91ciBvd24gY2VydGlm
+aWNhdGUgZm9yIEZSRUUgaGVhZCBvdmVyIHRvIGh0dHA6Ly93d3cuY2FjZXJ0Lm9y
+ZzAxBgNVHR8EKjAoMCagJKAihiBodHRwOi8vY3JsLmNhY2VydC5vcmcvcmV2b2tl
+LmNybDAzBglghkgBhvhCAQQEJhYkVVJJOmh0dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9y
+ZXZva2UuY3JsMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYWaHR0cDovL29j
+c3AuY2FjZXJ0Lm9yZzAfBgNVHSMEGDAWgBQWtTIb1Mfz4OaO873SsDrusjkY0TAN
+BgkqhkiG9w0BAQsFAAOCAgEAR5zXs6IX01JTt7Rq3b+bNRUhbO9vGBMggczo7R0q
+Ih1kdhS6WzcrDoO6PkpuRg0L3qM7YQB6pw2V+ubzF7xl4C0HWltfzPTbzAHdJtja
+JQw7QaBlmAYpN2CLB6Jeg8q/1Xpgdw/+IP1GRwdg7xUpReUA482l4MH1kf0W0ad9
+4SuIfNWQHcdLApmno/SUh1bpZyeWrMnlhkGNDKMxCCQXQ360TwFHc8dfEAaq5ry6
+cZzm1oetrkSviE2qofxvv1VFiQ+9TX3/zkECCsUB/EjPM0lxFBmu9T5Ih+Eqns9i
+vmrEIQDv9tNyJHuLsDNqbUBal7OoiPZnXk9LH+qb+pLf1ofv5noy5vX2a5OKebHe
++0Ex/A7e+G/HuOjVNqhZ9j5Nispfq9zNyOHGWD8ofj8DHwB50L1Xh5H+EbIoga/h
+JCQnRtxWkHP699T1JpLFYwapgplivF4TFv4fqp0nHTKC1x9gGrIgvuYJl1txIKmx
+XdfJzgscMzqpabhtHOMXOiwQBpWzyJkofF/w55e0LttZDBkEsilV/vW0CJsPs3eN
+aQF+iMWscGOkgLFlWsAS3HwyiYLNJo26aqyWPaIdc8E4ck7Sk08WrFrHIK3EHr4n
+1FZwmLpFAvucKqgl0hr+2jypyh5puA3KksHF3CsUzjMUvzxMhykh9zrMxQAHLBVr
+Gwc=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
+JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
+mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
+VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
+AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
+AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
+pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
+dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
+fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
+NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
+H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA
+n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc
+biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp
+EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA
+bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu
+YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB
+AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW
+BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI
+QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I
+0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni
+lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9
+B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv
+ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
+IhNzbM8m9Yop5w==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw
+CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
+ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg
+RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu
+Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq
+hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf
+Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q
+RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD
+AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY
+JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv
+6pZjamVFkpUBtA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICFjCCAZ2gAwIBAgIQA2mP5xLVGfPO0P23sWQwETAKBggqhkjOPQQDAzBNMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERp
+Z2lDZXJ0IENTIEVDQyBQMzg0IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcNNDYw
+MTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu
+Yy4xJTAjBgNVBAMTHERpZ2lDZXJ0IENTIEVDQyBQMzg0IFJvb3QgRzUwdjAQBgcq
+hkjOPQIBBgUrgQQAIgNiAAR/FK2Ftpf9AiE1TWDoOJOTmz0FEG2v0/7v+rv7c5nz
+7DISjcdouIveiaKIVHeNuyF+M5VWlgno1YyhBLibbhkAYuhCKKZYN4QZVSZ7Mzdn
+8ppyraGurgBCPBx+uHqeIZyjQjBAMB0GA1UdDgQWBBTwjJhxOThlwjobphdmHcjt
+Zd6SNjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQD
+AwNnADBkAjAjb+EAGSZQ5EYgZYs3p8/rBuHMMskqoewyDXOiHgIcNWEqTmmrOXft
+l4jAfWvqid0CMEPx0VijdT6Gm7ZVEYsX9z3+CmnFf07GdRtalMvqERHGCCKI3tB6
+oqV56OMhp80Tsw==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFZDCCA0ygAwIBAgIQBs7hMb5tVcgH98DH+0TmIDANBgkqhkiG9w0BAQwFADBM
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJDAiBgNVBAMT
+G0RpZ2lDZXJ0IENTIFJTQTQwOTYgUm9vdCBHNTAeFw0yMTAxMTUwMDAwMDBaFw00
+NjAxMTQyMzU5NTlaMEwxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
+SW5jLjEkMCIGA1UEAxMbRGlnaUNlcnQgQ1MgUlNBNDA5NiBSb290IEc1MIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtjNzgNhiA3AULBEcOV58rnyDhh3+
+Ji9MJK2L6oNfqbw9W/wLmEwCRzDs4v7s6DRbZl6/O9cspiX/jFmz3+rafCnZRlBy
+CB1u0RsK3R/NmYn6Dw9zxOGcHXUyzW+X2ipqlbJsyQnQ6gt7fRcGSZnv1t7gyFPU
+rsZ38Ya7Ixy4wN9Z94590e+C5iaLWji1/3XVstlPCfM3iFDaEaSKFBTRUwQAffNq
+RBj+UHAyBxyomg46HcUKH24LJmm3PKJXcCyG+kxulalYQ7msEtb/P+3XQxdrTM6e
+xJCr//oQUJqjkFfW54wQrp8WGs81HX/Xdu2KnDWnKLinXSH8MDfd3ggZTxXG56ba
+kEeO95RTTI5TAr79meXqhtCvAwLTm6qT8asojiAB/0z7zLcpQPWHpBITBR9DbtdR
+UJ84tCDtFwkSj8y5Ga+fzb5pEdOvVRBtF4Z5llLGsgCd5a84sDX0iGuPDgQ9fO6v
+zdNqEErGzYbKIj2hSlz7Dv+I31xip8C5HtmsbH44N/53kyXChYpPtTcGWgaBFPHO
+lJ2ZkeoyWs5nPW4EZq0MTy2jLvee9Xid9wr9fo/jQopVlrzxnzct/J5flf6MGBv8
+jv1LkK/XA2gSY6zik6eiywTlT2TOA/rGFJ/Zi+jM1GKMa+QALBmfGgbGMYFU+1Mk
+mq9Vmbqdda64wt0CAwEAAaNCMEAwHQYDVR0OBBYEFGgBk7HSSkBCaZRGLBxaiKkl
+tEdPMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
+DAUAA4ICAQCS/O64AnkXAlF9IcVJZ6ek8agkOOsMaOpaQmuc9HPBaUotszcFUEKY
+kp4GeSwuBpn2798roM2zkgGDtaDLJ7U8IxqYSaLsLZmlWUOs0rGT1lfXHLyT1sZA
+4bNvGVW3E9flQzOktavL2sExZA101iztw41u67uvGUdhYS3A9AW5b3jcOvdCQGVT
+kb2ZDZOSVKapN1krm8uZxrw99wSE8JQzHQ+CWjnLLkXDKBmjspuYyPwxa2CP9umG
+KLzgPH10XRaJW2kkxxCLxEu7Nk/UWT/DsKSRmfgu0UoBnfWIEu+/WhFqWU9Za1pn
+84+0Ew/A2C89KHKqGX8RfWpbn5XnX7eUT/E+oVr/Lcyd3yd3jzJzHGcKdvP6XLG/
+vB29DCibsscXZwszD8O9Ntz7ukILq+2Ew2LWhBapsQdrqW7uxs/msEQpwvCzYYAq
+i2/SFFwlh1Rk86RMwaH4p2vq/uo6/HnbDo/cxvPJ1Gze6YOhjh0i7Mk6sgB73Dun
+Qhp/3IupET2Op8Agb10JXUNE5o9mzKlbB/Hvm3oOs1ThlP0OLMaT11X9cZg1uAlK
+/8YpKCz2Ui3bFBiSJ+IWfozK1GG+goeR65g3P79fXXc/NKwbOEOraHKZMh46Ghml
+ozhMI9ej58zVKpIXkAtaS70WvfuGauKJmezkoFUYyaMIHxPgMghy0A==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICHzCCAaWgAwIBAgIQBk+mpigpFB8OnYNi4RdeOjAKBggqhkjOPQQDAzBRMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xKTAnBgNVBAMTIERp
+Z2lDZXJ0IENsaWVudCBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoX
+DTQ2MDExNDIzNTk1OVowUTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0
+LCBJbmMuMSkwJwYDVQQDEyBEaWdpQ2VydCBDbGllbnQgRUNDIFAzODQgUm9vdCBH
+NTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGccPoSdUFeo//Ftm0qfjw07rsbG8eqB
+zMO1usko/cGp2vZs9iBCAYRKWmL9DF88W3kWed3X5delJjH1ZMbzJL/19kUvIYZt
+83aXZQUguq+5kcUq7pjF/pcb86fx59LPrqNCMEAwHQYDVR0OBBYEFLMsqpCF7XM8
+9c7QwUtG0sVgbZR5MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoG
+CCqGSM49BAMDA2gAMGUCMA+xAdFskP8ICqhlLebjF8aVdClLedTB64pmR9WrI38F
+XyW4HOyOxz2nObN2wJVzdAIxAPxsGdjNe5nR/lSqYzVCmsBe59u5HcnCny2HfswZ
+Nm9hi+opTmtpPNJloAPNqSXojA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIQBMj8A6hU65igmwKIPGajwDANBgkqhkiG9w0BAQwFADBQ
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xKDAmBgNVBAMT
+H0RpZ2lDZXJ0IENsaWVudCBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAw
+WhcNNDYwMTE0MjM1OTU5WjBQMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNl
+cnQsIEluYy4xKDAmBgNVBAMTH0RpZ2lDZXJ0IENsaWVudCBSU0E0MDk2IFJvb3Qg
+RzUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDj5uj0wpUboAFRLX+I
+QSuQu82uUBQ2Z5vvcB6iQP+eAEwpG0yWS14MOh8mMifsddzfgmhVsFKbtnxboguE
+15i2LlAWtXz5u3f6Mz+krrB2VW1VGG6fF4Yk9EuUMIZyhTeVT8H5rCjRgcu/MWOF
+eTMCNOD4kT5fcb49xWdRQT4iE3MYDXNRFd5odImBB2yZhmksQQ6Vl/MWA1ZQgWqW
+2YbSp1DvlXT+AgPJUb2DvrAA/Rt6I3PfR5ux4sgA6U92sicwkcq696rhA2an39jj
+80pCMcwHQ/WouQXqhCf5e0QocgAv8+rzif5MgcFElEk6C1PJAU9nl30lyeDfCmE+
+Zoja1fhUoqtUsdXc/iSCZrS3giGWY6KTt7Nwh6EgNPr6WF0vexfIH1y2lDVgw5q7
+jiL4prUp3Cbe51dJgU1kue/CPIgLTMwBmNJYLVJEOrPOwz6+zrnDS+XRUbbhMdEy
+R0HPwJ+Wk1tl55NGtYsVlAJSurMuYlkHtDYFkVNec4Ho/7lMdo/ak3PArTgX7uf4
+owW0fV9gNpwqoVBIfhUeRXn4IFEF9uxiHWrRLw2L73RO8aNsNu4TRrE/CIIyu7n0
+YLmR4delkuCVoEGFFdjM0Y2htyQy7WOSRbDqB+jkdCDxJrlj9cLHbY2xVuheRRyM
+vNFAj2LuSb00sKKWwTkd/M1l7wIDAQABo0IwQDAdBgNVHQ4EFgQUk2078qYZI73o
+uEyOuc/V/vzEvXowDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQEMBQADggIBAJf7rW+sE2WxsOHVVpktlQqqgbVwgROdfZfVRyH+127F
+RTQA63zRgbUkkfsLmn7eYl+OUMT7RUYdU0vWsBnhj6GFc4V4lgG0uOg70K+Qa5Lv
+fPZnUjFmF55q4se9VUqSD2a0RQYAzJu2QQAsCkAKdLbYSsF0KKE1KCS11q7FjpQJ
+APog8EoWRf+HcFf6MyqaA+awMwy4vsOWO06jolechshjIte2FoLwOHF1j4uK4TUQ
+twrG651sWHJdC2jEq2XlS9I7gKqHn1ikGiKsq4pRyVN2hmIuLu8vVKfD1XLwoCxf
+f3T0i+QnCziTjdh5GO6rqvQK9MF5kjpFXnJkNqWaTl0y3GFFNDo3Lo8CtIC2DoVH
+pILSqMpngrkjnuNNENi3xq6YXBV2oyyHhggwDW9u1Bb2yokrgF1cXdoLfo+811E4
+oz3688ZMCpdmhHObOXSf+z1qwJvC4anrv7Lrl2Eb+d5G9lXiKwy0Z+hcVhDWuTl8
+4q0yIbA1IbrW0cRQAx2xAEc3u3ZAITXwLmXbUsDpttcIYNqOiVHYeK/7aAzRvkmf
+ICdRoooBEuLAf+CN0+sxBeYlYUKIAONWBaBDF01dFTkRr1Ebb/Xe38SzyyAeWIVg
+ZAcMGDpl6+ohzswf6wSVPAxNqDe1t8GeWAM1oDzRSTALzohNU1kgK5YqxhXHkA5A
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICETCCAZegAwIBAgIQDfPZN2WjecWVZuqS4iRPNDAKBggqhkjOPQQDAzBKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIjAgBgNVBAMTGURp
+Z2lDZXJ0IEVDQyBQMzg0IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcNNDYwMTE0
+MjM1OTU5WjBKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4x
+IjAgBgNVBAMTGURpZ2lDZXJ0IEVDQyBQMzg0IFJvb3QgRzUwdjAQBgcqhkjOPQIB
+BgUrgQQAIgNiAAT8WR/OmWx/mw62KWNvxoXzCtPWm65XFUwO7V3jCX5tKqOGqrp4
+oKdxvUT6CMBKBtZv3SxKOHTl0L3/ev/lOU69vRceH0Ot1bwn2Eu/dowwMqT7+VPl
+2Ko4U12ooDegZwqjQjBAMB0GA1UdDgQWBBSSlvfmutURuvkiLnt+WtnwJeUFGzAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBl
+AjEA/cBN8aSn26cMJhH0Sb0HOGMrRGIGeQjHw9TPmz6rOieqkMf9WaK4MlLbyo4X
+CwqQAjBdGuxRidRk3PnlHji9Wy7j5UTkOxh61/CVQI/y68/0+dBlokHysOZ8wTYs
+j1453Tc=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIQCHTZWCM+IlfFIRXIvyKSrjANBgkqhkiG9w0BAQsFADBn
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSYwJAYDVQQDEx1EaWdpQ2VydCBGZWRlcmF0ZWQgSUQg
+Um9vdCBDQTAeFw0xMzAxMTUxMjAwMDBaFw0zMzAxMTUxMjAwMDBaMGcxCzAJBgNV
+BAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdp
+Y2VydC5jb20xJjAkBgNVBAMTHURpZ2lDZXJ0IEZlZGVyYXRlZCBJRCBSb290IENB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvAEB4pcCqnNNOWE6Ur5j
+QPUH+1y1F9KdHTRSza6k5iDlXq1kGS1qAkuKtw9JsiNRrjltmFnzMZRBbX8Tlfl8
+zAhBmb6dDduDGED01kBsTkgywYPxXVTKec0WxYEEF0oMn4wSYNl0lt2eJAKHXjNf
+GTwiibdP8CUR2ghSM2sUTI8Nt1Omfc4SMHhGhYD64uJMbX98THQ/4LMGuYegou+d
+GTiahfHtjn7AboSEknwAMJHCh5RlYZZ6B1O4QbKJ+34Q0eKgnI3X6Vc9u0zf6DH8
+Dk+4zQDYRRTqTnVO3VT8jzqDlCRuNtq6YvryOWN74/dq8LQhUnXHvFyrsdMaE1X2
+DwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNV
+HQ4EFgQUGRdkFnbGt1EWjKwbUne+5OaZvRYwHwYDVR0jBBgwFoAUGRdkFnbGt1EW
+jKwbUne+5OaZvRYwDQYJKoZIhvcNAQELBQADggEBAHcqsHkrjpESqfuVTRiptJfP
+9JbdtWqRTmOf6uJi2c8YVqI6XlKXsD8C1dUUaaHKLUJzvKiazibVuBwMIT84AyqR
+QELn3e0BtgEymEygMU569b01ZPxoFSnNXc7qDZBDef8WfqAV/sxkTi8L9BkmFYfL
+uGLOhRJOFprPdoDIUBB+tmCl3oDcBy3vnUeOEioz8zAkprcb3GHwHAK+vHmmfgcn
+WsfMLH4JCLa/tRYL+Rw/N3ybCkDp00s0WUZ+AoDywSl0Q/ZEnNY0MsFiw6LyIdbq
+M/s/1JRtO3bDSzD9TazRVzn2oBqzSa8VgIo5C1nOnoAKJTlsClJKvIhnRlaLQqk=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
+MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI
+2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx
+1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ
+q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz
+tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ
+vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP
+BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV
+5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY
+1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4
+NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG
+Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91
+8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe
+pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
+MrY=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw
+CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
+ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe
+Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw
+EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x
+IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF
+K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG
+fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO
+Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd
+BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx
+AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/
+oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8
+sycX
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
+PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
+xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
+Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
+hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
+EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
+FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
+nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
+eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
+hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
+Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
++OkuE6N36B9K
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDnDCCAoSgAwIBAgIQAqgneYhfz3LBrBcPI90GkTANBgkqhkiG9w0BAQUFADBo
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMScwJQYDVQQDEx5EaWdpQ2VydCBQcml2YXRlIFNlcnZp
+Y2VzIFJvb3QwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBoMQswCQYD
+VQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGln
+aWNlcnQuY29tMScwJQYDVQQDEx5EaWdpQ2VydCBQcml2YXRlIFNlcnZpY2VzIFJv
+b3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSJd1k/fsWB/YZrssY
+2nJkvAlRkaq997TyFdBFI1kvVYoGhrybaY7hqCC9FHyaZgnurTMXmHffvE7RixwC
+t1wYtZxx9OEWbtHFcZWnY+Ic3bBKqRQl3QOMVyNB3CyrrtmuScOtnLdCttv5bF5q
+uWzw+VwhZDPyZcnfTTxkMQLrvv/rr0BzHsrjcRl09W7c1oM08tnA5WhkenjgY/uN
+ac/xvo46bjZOkWMVQEaMUL3a/C205AWVvedVwxV9n4Jh5HT/73okgI7n+HHarvlS
+98xD8J0c/4RPkNuH8PPbCfpVJORdZ2AfTQNW6hqp4nvsmp66USmFqSqn7BGVj8yk
+G7OFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0G
+A1UdDgQWBBT5EiBkqVFrCPeFbwBuDOmRtdaFQDANBgkqhkiG9w0BAQUFAAOCAQEA
+UKpbVqWY/1PPDXKVIM1P5c25Pa5B8z6C2YiYLVahTs7sKT/vTD+66hNqJM+tbGAV
+cbkZGIsPwVXsJ/ygwcZtd6/8kBIzDrDQnPFp4bhL0XV5QirOKlpngKyi1bh0TUEd
+DnXib4bc7Tw6rro8Va04ugIHv1H9mLJg9YwMhp+3+yPx1JyyB/3XVqlxpGiKSXx1
++ZFo4hbIl8vhNhWqdcShlwdeNInjzQLRGPIx00Dsh+8uszEElWMMRzIGWCHzubZu
+j/IOhqMO9trk6/2q0rwk9PnXYc8QVsAWAAbYkQe3xM/eB1VSS7DJMUiRWqdoz6LG
++BqPRSmowBJZCGnvhDihQw==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFXjCCA0agAwIBAgIQCL+ib5o/M2WirPCmOMQBcDANBgkqhkiG9w0BAQwFADBJ
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xITAfBgNVBAMT
+GERpZ2lDZXJ0IFJTQTQwOTYgUm9vdCBHNTAeFw0yMTAxMTUwMDAwMDBaFw00NjAx
+MTQyMzU5NTlaMEkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5j
+LjEhMB8GA1UEAxMYRGlnaUNlcnQgUlNBNDA5NiBSb290IEc1MIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAqr4NsgZ9JvlH6uQb50JpuJnCue4ksUaQy1kk
+UlQ1piTCX5EZyLZC1vNHZZVk54VlZ6mufABP4HgDUK3zf464EeeBYrGL3/JJJgne
+Dxa82iibociXL5OQ2iAq44TU/6mesC2/tADemx/IoGNTaIVvTYXGqmP5jbI1dmJ0
+A9yTmGgFns2QZd3SejGrJC1tQC6QP2NsLOv6HoBUjXkCkBSztU9O9YgEQ4DDSLMm
+L6xRlTJVJS9BlrBWoQg73JgfcoUsd8qYzDj7jnLJbewF7O1NtzxbFFCF3Zf7WfeQ
+EvQTv4NNgLIVZRGXYOXWXOYEtVDmcTO2IJOpaAA4zknbtFw7ctdFXFS/zTwBIx58
+1vhpLKUACmwySLTecC06ExfBf2TL8zDtoT2WZ/GUtWBsW2lo9YIzCaK22fOFsm6g
+lPDCxH2hLMpz9a7gUpyiZuYDzurf7RjUuWOL9+j/+7Nbj0PFr7d0lFA1Za7WL/GF
+j1OhcPSNMl28lsMewgQEnAQPs11+iSDKXicNiUoSI7T2xN3YH/hoszb4HrzG94S2
+6IpOiDA4wCbYcAoJOjQOa4ISlhwv5p6t2HE1gbGMBm70bmb/S0quvfD+11xfU7sy
+PM1i0RSgKR8Q3qlyT7GtZOWDKo+L6oSV7pglmJqzcTzBp1DyrEJiMcKhkMbu4reK
+qLW2GzsCAwEAAaNCMEAwHQYDVR0OBBYEFGJtt5FPxOqjYmCPoNC+tY8GfGgAMA4G
+A1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4IC
+AQBh6PsnbdbiuLMJr6rwsYJM/j0XiU0tFZ377tC7hOyEddtDE96Mn8cp74d0yxNw
+gVYAdPyu9Nk63iIIUaWgXIJmtntMqdqPq6wcQZZm1p3eVua/TrGyXl/Aw27UwoSQ
+9X2xuhbRKYrInenP0McZOz/P7vfhM65CyJjACJ7zWvPf1Cs7jqgoVhnHTnc8JVTc
+uEhI0fknaj7sE6+yBYn9VV/zfY4NnAldLIp+hc744b8RPTKMWtd+PfQzWM+iBZij
+s/vOib/9whbdbtyISQ0LoAP/50XpBMHp/aqddfi4H4eD2es501qny5isE4kA/G+V
+TuF9EUZt9jhGoxOgLAH1Ys+/HFCRJ3Rdt+xHfNDRdct77tFNIwrDYKV3LYDaZw+O
+a3YH8KYP6oSuHnm/CIraCfP07rU289R6Q7qUNeH6wTsblpmkV2PrtaiC9634d9d2
+hvN2U1Zb/CZChM6fg5GRr/S+cBWApdjoabHYkVS4GbJi+aL6Ve0Ev7lEhuTP8ZsA
+vxEPvrV0JFH/dzRj7EgjDugR63dt2sqCkb6khJNM2qH+zAaE6CHoVLrm0x1jPcJa
+/ObJg55yZKmGWQCMwvcTg7bQpDHGrJGOe6QiVhPGdccjvItb/EY9/l1SKa+v6MnD
+dkvoq0cC8poN0yyIgAeGwGMPAkyOBFN2uVhCb3wpcF2/Jw==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICHDCCAaOgAwIBAgIQBT9uoAYBcn3tP8OjtqPW7zAKBggqhkjOPQQDAzBQMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xKDAmBgNVBAMTH0Rp
+Z2lDZXJ0IFNNSU1FIEVDQyBQMzg0IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN
+NDYwMTE0MjM1OTU5WjBQMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs
+IEluYy4xKDAmBgNVBAMTH0RpZ2lDZXJ0IFNNSU1FIEVDQyBQMzg0IFJvb3QgRzUw
+djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQWnVXlttT7+2drGtShqtJ3lT6I5QeftnBm
+ICikiOxwNa+zMv83E0qevAED3oTBuMbmZUeJ8hNVv82lHghgf61/6GGSKc8JR14L
+HMAfpL/yW7yY75lMzHBrtrrQKB2/vgSjQjBAMB0GA1UdDgQWBBRzemuW20IHi1Jm
+wmQyF/7gZ5AurTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggq
+hkjOPQQDAwNnADBkAjA3RPUygONx6/Rtz3zMkZrDbnHY0iNdkk2CQm1cYZX2kfWn
+CPZql+mclC2YcP0ztgkCMAc8L7lYgl4Po2Kok2fwIMNpvwMsO1CnO69BOMlSSJHW
+Dvu8YDB8ZD8SHkV/UT70pg==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFajCCA1KgAwIBAgIQBfa6BCODRst9XOa5W7ocVTANBgkqhkiG9w0BAQwFADBP
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJzAlBgNVBAMT
+HkRpZ2lDZXJ0IFNNSU1FIFJTQTQwOTYgUm9vdCBHNTAeFw0yMTAxMTUwMDAwMDBa
+Fw00NjAxMTQyMzU5NTlaME8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2Vy
+dCwgSW5jLjEnMCUGA1UEAxMeRGlnaUNlcnQgU01JTUUgUlNBNDA5NiBSb290IEc1
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4Gpb2fj5fey1e+9f3Vw0
+2Npd0ctldashfFsA1IJvRYVBiqkSAnIy8BT1A3W7Y5dJD0CZCxoeVqfS0OGr3eUE
+G+MfFBICiPWggAn2J5pQ8LrjouCsahSRtWs4EHqiMeGRG7e58CtbyHcJdrdRxDYK
+mVNURCW3CTWGFwVWkz1BtwLXYh+KkhGH6hFt6ggR3LF4SEmS9rRRgHgj2P7hVho6
+kBNWNInV4pWLX96yzPs/OLeF9+qevy6hLi9NfWoRLjag/xEIBJVV4Bs7Z5OplFXq
+Mu0GOn/Cf+OtEyfRNEGzMMO/tIj4A4Kk3z6reHegWZNx593rAAR7zEg5KOAeoxVp
+yDayoQuX31XW75GcpPYW91EK7gMjkdwE/+DdOPYiAwDCB3EaEsnXRiqUG83Wuxvu
+v75NUFiwC80wdin1z+W2ai92sLBpatBtZRg1fpO8chfBVULNL8Ilu/T9HaFkIlRd
+4p5yQYRucZbqRQe2XnpKhp1zZHc4A9IPU6VVIMRN/2hvVanq3XHkT9mFo3xOKQKe
+CwnyGlPMAKbd0TT2DcEwsZwCZKw17aWwKbHSlTMP0iAzvewjS/IZ+dqYZOQsMR8u
+4Y0cBJUoTYxYzUvlc4KGjOyo1nlc+2S73AxMKPYXr+Jo1haGmNv8AdwxuvicDvko
+Rkrh/ZYGRXkRaBdlXIsmh1sCAwEAAaNCMEAwHQYDVR0OBBYEFNGj1FcdT1XbdUxc
+Qp5jFs60xjsfMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBDAUAA4ICAQAHpwreU7ua63C/sjaQzeSnuPEM5F1aHXhl/Mm4HiMRV3xp
+NW0B/1NQvwcOuscBP1gqlHUDqxwLI9wbih43PR1Yj3PZsypv3xCgWwynyrB/uSSi
+ATUy5V5GQevYf3PnQumkUSZ3gQqo6w8KUJ1+iiBn/AuOOhHTxYxgGNlLsfzU8bRJ
+Tq6H4dH7dqFf8wbPl5YM6Z51gVxTDSL8NuZJbnTbAIWNfCKgjvsQTNRiE1vvS3Im
+i/xOio/+lxBTxXiLQmQbX+CJ/bsJf1DgVIUmEWodZflJKdx8Nt/7PffSrO4yjW6m
+fTmcRcTKDfU7tHlTpS9Wx1HFikxkXZBDI45rTBd4zOi/9TvkqEjPrZsM3zJK09kS
+jiN4DS2vn6+ePAnClwDtOmkccT8539OPxGb17zaUD/PdkraWX5Cm3XOqpiCUlCVq
+CQxy5BMjYEyjyhcue2cA29DN6nofOSZXiTB3y07llUVPX/s2XD35ILU6ECVPkzJa
+7sGW6OlWBLBJYU3seKidGMH/2OovVu+VK3sEXmfjVUDtOQT5C3n1aoxcD4makMfN
+i97bJjWhbs2zQvKiDzsMjpP/FM/895P35EEIbhlSEQ9TGXN4DM/YhYH4rVXIsJ5G
+Y6+cUu5cv/DAWzceCSDSPiPGoRVKDjZ+MMV5arwiiNkMUkAf3U4PZyYW0q0XHA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp
+Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2
+MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ
+bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG
+ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS
+7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp
+0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS
+B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49
+BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ
+LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4
+DXZDjC5Ty3zfDBeWUA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT
+HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN
+NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs
+IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+
+ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0
+2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp
+wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM
+pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD
+nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po
+sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx
+Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd
+Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX
+KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe
+XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL
+tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv
+TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN
+AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw
+GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H
+PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF
+O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ
+REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik
+AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv
+/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+
+p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw
+MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF
+qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK
+ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg
+RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu
+Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y
+ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If
+xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV
+ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO
+DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ
+jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/
+CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi
+EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM
+fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY
+uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK
+chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t
+9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
+ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2
+SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd
++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc
+fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa
+sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N
+cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N
+0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie
+4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI
+r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1
+/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm
+gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
+MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
+KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
+MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
+NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
+BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
+So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
+tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
+CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
+qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
+rD6ogRLQy7rQkgu2npaqBA+K
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
+mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
+MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
+BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
+BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
+hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
+5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
+JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
+DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
+huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
+HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
+AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
+zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
+kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
+SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
+spki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
+MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
+AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
+ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
+7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
+kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
+mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
+KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
+6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
+4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
+oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
+UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
+AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBcMQswCQYDVQQGEwJVUzEZ
+MBcGA1UECgwQVmVyaXpvbiBCdXNpbmVzczERMA8GA1UECwwIT21uaVJvb3QxHzAd
+BgNVBAMMFlZlcml6b24gR2xvYmFsIFJvb3QgQ0EwHhcNMDkwNzMwMTQyNzA0WhcN
+MzQwNzMwMTQyNzA0WjBcMQswCQYDVQQGEwJVUzEZMBcGA1UECgwQVmVyaXpvbiBC
+dXNpbmVzczERMA8GA1UECwwIT21uaVJvb3QxHzAdBgNVBAMMFlZlcml6b24gR2xv
+YmFsIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCKAAxw
+Hb/rNIbDmUU1Hn9D96tvJC3NGcIQu7DKKVupIKurcizE4gI5bYK4xRHq+PuznmL4
+Mx6wH8nj9jfbBMg7Y0824oWkJR3HaR8EvWhFE5YHH5RQ9T7FJ1SewElXRI4HY9Sm
+ru0imcxNlmkEE252iZ90FpT5HVS9ornSgwEiDE1EgKr+NYknJaeGicbVGpLjj8WV
+oBRymuhWxQJVHJf5IC7Q9TwTGVr24fkLA4Jpp4y31m+cVj6d6CoJYG1L5vuLmRT3
+NE9lWYCNuVfIojUh2IhxVl3uglctJpAYn5qcnI/v1MVjp1R9R5GHfRoSqBsYb6lv
+sSe65AR0zjcef2bFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgEGMB0GA1UdDgQWBBRMOBG4mABbWitwPqp45NVnZ2enfjANBgkqhkiG9w0B
+AQsFAAOCAQEAAV+gsQYB9HnXZRhgPs95oLrCI08j34eWX4EOOBUuXMgCaCkg/Ivu
+pYoYgWRcmDV+OTCCpIKKULW6w+ha1qie4sMX29vE67AKIA3pnuP/YFRH8Tud1Cg8
+oq6j+6qLgiIqNYeQuBxZR5DVnS76SeNlqDbrx+QcaNyzMWyrTs4kgBXIEFkQEXJN
+epyYnMT8YeCzsp1OoMbCWasY1qJVRewpqiU31k5KPQtAweST5PzNkQv45qvMs3bE
+Yr8Z7Ya2ecMpVFS8mX1GV8+mz/RUKpoDZUcBoUIqyyVHbnxeAEuR2fkbEAZw+UIV
+pl+q10Ae/clInZeB6lxowqDniaFTTb/H4w==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
+U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
+SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
+biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
+GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
+fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
+aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
+aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
+kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
+4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
+FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIF9jCCA96gAwIBAgIQZWNxhdNvRcaPfzH5CYeSgjANBgkqhkiG9w0BAQwFADCB
+lDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8w
+HQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRl
+YyBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+IC0gRzYwHhcNMTIxMDE4MDAwMDAwWhcNMzcxMjAxMjM1OTU5WjCBlDELMAkGA1UE
+BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT
+eW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAz
+IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzYwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC3DrL6TbyachX7d1vb/UMPywv3
+YC6zK34Mu1PyzE5l8xm7/zUd99Opu0Attd141Kb5N+qFBXttt+YTSwZ8+3ZjjyAd
+LTgrBIXy6LDRX01KIclq2JTqHgJQpqqQB6BHIepm+QSg5oPwxPVeluInTWHDs8GM
+IrZmoQDRVin77cF/JMo9+lqUsITDx7pDHP1kDvEo+0dZ8ibhMblE+avd+76+LDfj
+rAsY0/wBovGkCjWCR0yrvYpe3xOF/CDMSFmvr0FvyyPNypOn3dVfyGQ7/wEDoApP
+LW49hL6vyDKyUymQFfewBZoKPPa5BpDJpeFdoDuw/qi2v/WJKFckOiGGceTciotB
+VeweMCRZ0cBZuHivqlp03iWAMJjtMERvIXAc2xJTDtamKGaTLB/MTzwbgcW59nhv
+0DI6CHLbaw5GF4WU87zvvPekXo7p6bVk5bdLRRIsTDe3YEMKTXEGAJQmNXQfu3o5
+XE475rgD4seTi4QsJUlF3X8jlGAfy+nN9quX92Hn+39igcjcCjBcGHzmzu/Hbh6H
+fLPpysh7avRo/IOlDFa0urKNSgrHl5fFiDAVPRAIVBVycmczM/R8t84AJ1NlziTx
+WmTnNi/yLgLCl99y6AIeoPc9tftoYAP6M6nmEm0G4amoXU48/tnnAGWsthlNe4N/
+NEfq4RhtsYsceavnnQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUOXEIAD7eyIbnkP/k/SEPziQZFvYwDQYJKoZIhvcN
+AQEMBQADggIBAFBriE1gSM5a4yLOZ3yEp80c/ekMA4w2rwqHDmquV64B0Da78v25
+c8FftaiuTKL6ScsHRhY2vePIVzh+OOS/JTNgxtw3nGO7XpgeGrKC8K6mdxGAREeh
+KcXwszrOmPC47NMOgAZ3IzBM/3lkYyJbd5NDS3Wz2ztuO0rd8ciutTeKlYg6EGhw
+OLlbcH7VQ8n8X0/l5ns27vAg7UdXEyYQXhQGDXt2B8LGLRb0rqdsD7yID08sAraj
+1yLmmUc12I2lT4ESOhF9s8wLdfMecKMbA+r6mujmLjY5zJnOOj8Mt674Q5mwk25v
+qtkPajGRu5zTtCj7g0x6c4JQZ9IOrO1gxbJdNZjPh34eWR0kvFa62qRa2MzmvB4Q
+jxuMjvPB27e+1LBbZY8WaPNWxSoZFk0PuGWHbSSDuGLc4EdhGoh7zk5//dzGDVqa
+pPO1TPbdMaboHREhMzAEYX0c4D5PjT+1ixIAWn2poQDUg+twuxj4pNIcgS23CBHI
+Jnu21OUPA0Zy1CVAHr5JXW2T8VyyO3VUaTqg7kwiuqya4gitRWMFSlI1dsQ09V4H
+Mq3cfCbRW4+t5OaqG3Wf61206MCpFXxOSgdy30bJ1JGSdVaw4e43NmUoxRXIK3bM
+bW8Zg/T92hXiQeczeUaDV/nxpbZt07zXU+fucW14qZen7iCcGRVyFT0E
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICpzCCAi2gAwIBAgIQTHm1miicdjFk9YlE0JEC3jAKBggqhkjOPQQDAzCBlDEL
+MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD
+VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBD
+bGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0g
+RzQwHhcNMTIxMDE4MDAwMDAwWhcNMzcxMjAxMjM1OTU5WjCBlDELMAkGA1UEBhMC
+VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h
+bnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAzIFB1
+YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcq
+hkjOPQIBBgUrgQQAIgNiAARXz+qzOU0/oSHgbi84csaHl/OFC0fnD1HI0fSZm8pZ
+Zf9M+eoLtyXV0vbsMS0yYhLXdoan+jjJZdT+c+KEOfhMSWIT3brViKBfPchPsD+P
+oVAR5JNGrcNfy/GkapVW6MCjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBQknbzScfcdwiW+IvGJpSwVOzQeXjAKBggqhkjOPQQD
+AwNoADBlAjEAuWZoZdsF0Dh9DvPIdWG40CjEsUozUVj78jwQyK5HeHbKZiQXhj5Q
+Vm6lLZmIuL0kAjAD6qfnqDzqnWLGX1TamPR3vU+PGJyRXEdrQE0QHbPhicoLIsga
+xcX+i93B3294n5E=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
+vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
+ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
+IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
+IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
+bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
+9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
+H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
+LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
+/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
+rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
+WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
+exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
+DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
+sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
+seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
+4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
+lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
+7M2CYfE45k+XmCpajQ==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIF1zCCA7+gAwIBAgIRAJOLsI5imHtPdfmMtqUEXJYwDQYJKoZIhvcNAQEMBQAw
+gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
+ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
+VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE4
+MDkwNjAwMDAwMFoXDTI4MDkwNTIzNTk1OVowTDELMAkGA1UEBhMCTFYxDTALBgNV
+BAcTBFJpZ2ExETAPBgNVBAoTCEdvR2V0U1NMMRswGQYDVQQDExJHb0dldFNTTCBS
+U0EgRFYgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfwF4hD6E1
+kLglXs1n2fH5vMQukCGyyD4LqLsc3pSzeh8we7njU4TB85BH5YXqcfwiH1Sf78aB
+hk1FgXoAZ3EQrF49We8mnTtTPFRnMwEHLJRpY9I/+peKeAZNL0MJG5zM+9gmcSpI
+OTI6p7MPela72g0pBQjwcExYLqFFVsnroEPTRRlmfTBTRi9r7rYcXwIct2VUCRmj
+jR1GX13op370YjYwgGv/TeYqUWkNiEjWNskFDEfxSc0YfoBwwKdPNfp6t/5+RsFn
+lgQKstmFLQbbENsdUEpzWEvZUpDC4qPvRrxEKcF0uLoZhEnxhskwXSTC64BNtc+l
+VEk7/g/be8svAgMBAAGjggF1MIIBcTAfBgNVHSMEGDAWgBRTeb9aqitKz1SA4dib
+wJ3ysgNmyzAdBgNVHQ4EFgQU+ftQxItnu2dk/oMhpqnOP1WEk5kwDgYDVR0PAQH/
+BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
+CCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYLKwYBBAGyMQECAkAwCAYGZ4EMAQIBMFAG
+A1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VU0VSVHJ1
+c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2BggrBgEFBQcBAQRqMGgw
+PwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RS
+U0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRy
+dXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAXXRDKHiA5DOhNKsztwayc8qtlK4q
+Vt2XNdlzXn4RyZIsC9+SBi0Xd4vGDhFx6XX4N/fnxlUjdzNN/BYY1gS1xK66Uy3p
+rw9qI8X12J4er9lNNhrsvOcjB8CT8FyvFu94j3Bs427uxcSukhYbERBAIN7MpWKl
+VWxT3q8GIqiEYVKa/tfWAvnOMDDSKgRwMUtggr/IE77hekQm20p7e1BuJODf1Q7c
+FPt7T74m3chg+qu0xheLI6HsUFuOxc7R5SQlkFvaVY5tmswfWpY+rwhyJW+FWNbT
+uNXkxR4v5KOQPWrY100/QN68/j17paKuSXNcsr56snuB/Dx+MACLBdsF35HxPadx
+78vkfQ37WcVmKZtHrHJQ/QUyjxdG8fezMsh0f+puUln/O+NlsFtipve8qYa9h/K5
+yD0oZN93ChWve78XrV4vCpjO75Nk5B8O9CWQqGTHbhkgvjyb9v/B+sYJqB22/NLl
+R4RPvbmqDJGeEI+4u6NJ5YiLIVVsX+dyfFP8zUbSsj6J34RyCYKBbQ4L+r7k8Srs
+LY51WUFP292wkFDPSDmV7XsUNTDOZoQcBh2Fycf7xFfxeA+6ERx2d8MpPPND7yS2
+1dkf+SY5SdpSbAKtYmbqb9q8cZUDEImNWJFUVHBLDOrnYhGwJudE3OBXRTxNhMDm
+IXnjEeWrFvAZQhk=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICxjCCAk2gAwIBAgIRALO93/inhFu86QOgQTWzSkUwCgYIKoZIzj0EAwMwTzEL
+MAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNo
+IEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDIwHhcNMjAwOTA0MDAwMDAwWhcN
+MjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3MgRW5j
+cnlwdDELMAkGA1UEAxMCRTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQkXC2iKv0c
+S6Zdl3MnMayyoGli72XoprDwrEuf/xwLcA/TmC9N/A8AmzfwdAVXMpcuBe8qQyWj
++240JxP2T35p0wKZXuskR5LBJJvmsSGPwSSB/GjMH2m6WPUZIvd0xhajggEIMIIB
+BDAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
+MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFrz7Sv8NsI3eblSMOpUb89V
+yy6sMB8GA1UdIwQYMBaAFHxClq7eS0g7+pL4nozPbYupcjeVMDIGCCsGAQUFBwEB
+BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gyLmkubGVuY3Iub3JnLzAnBgNVHR8E
+IDAeMBygGqAYhhZodHRwOi8veDIuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYG
+Z4EMAQIBMA0GCysGAQQBgt8TAQEBMAoGCCqGSM49BAMDA2cAMGQCMHt01VITjWH+
+Dbo/AwCd89eYhNlXLr3pD5xcSAQh8suzYHKOl9YST8pE9kLJ03uGqQIwWrGxtO3q
+YJkgsTgDyj2gJrjubi1K9sZmHzOa25JK1fUpE8ZwYii6I4zPPS/Lgul/
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICxjCCAkygAwIBAgIQTtI99q9+x/mwxHJv+VEqdzAKBggqhkjOPQQDAzBPMQsw
+CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg
+R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw0y
+NTA5MTUxNjAwMDBaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNy
+eXB0MQswCQYDVQQDEwJFMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABCOaLO3lixmN
+YVWex+ZVYOiTLgi0SgNWtU4hufk50VU4Zp/LbBVDxCsnsI7vuf4xp4Cu+ETNggGE
+yBqJ3j8iUwe5Yt/qfSrRf1/D5R58duaJ+IvLRXeASRqEL+VkDXrW3qOCAQgwggEE
+MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
+EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUbZkq9U0C6+MRwWC6km+NPS7x
+6kQwHwYDVR0jBBgwFoAUfEKWrt5LSDv6kviejM9ti6lyN5UwMgYIKwYBBQUHAQEE
+JjAkMCIGCCsGAQUFBzAChhZodHRwOi8veDIuaS5sZW5jci5vcmcvMCcGA1UdHwQg
+MB4wHKAaoBiGFmh0dHA6Ly94Mi5jLmxlbmNyLm9yZy8wIgYDVR0gBBswGTAIBgZn
+gQwBAgEwDQYLKwYBBAGC3xMBAQEwCgYIKoZIzj0EAwMDaAAwZQIxAPJCN9qpyDmZ
+tX8K3m8UYQvK51BrXclM6WfrdeZlUBKyhTXUmFAtJw4X6A0x9mQFPAIwJa/No+KQ
+UAM1u34E36neL/Zba7ombkIOchSgx1iVxzqtFWGddgoG+tppRPWhuhhn
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
+TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
+WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
+RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
+R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
+sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
+NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
+Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
+/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
+AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
+Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
+FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
+AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
+Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
+gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
+PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
+ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
+CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
+lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
+avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
+yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
+yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
+hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
+HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
+MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
+nLRbwHOoq7hHwg==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFFjCCAv6gAwIBAgIRAIp5IlCr5SxSbO7Pf8lC3WIwDQYJKoZIhvcNAQELBQAw
+TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
+WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
+RW5jcnlwdDELMAkGA1UEAxMCUjQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCzKNx3KdPnkb7ztwoAx/vyVQslImNTNq/pCCDfDa8oPs3Gq1e2naQlGaXS
+Mm1Jpgi5xy+hm5PFIEBrhDEgoo4wYCVg79kaiT8faXGy2uo/c0HEkG9m/X2eWNh3
+z81ZdUTJoQp7nz8bDjpmb7Z1z4vLr53AcMX/0oIKr13N4uichZSk5gA16H5OOYHH
+IYlgd+odlvKLg3tHxG0ywFJ+Ix5FtXHuo+8XwgOpk4nd9Z/buvHa4H6Xh3GBHhqC
+VuQ+fBiiCOUWX6j6qOBIUU0YFKAMo+W2yrO1VRJrcsdafzuM+efZ0Y4STTMzAyrx
+E+FCPMIuWWAubeAHRzNl39Jnyk2FAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
+AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
+Af8CAQAwHQYDVR0OBBYEFDadPuCxQPYnLHy/jZ0xivZUpkYmMB8GA1UdIwQYMBaA
+FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
+AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
+Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
+gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCJbu5CalWO+H+Az0lmIG14DXmlYHQE
+k26umjuCyioWs2icOlZznPTcZvbfq02YPHGTCu3ctggVDULJ+fwOxKekzIqeyLNk
+p8dyFwSAr23DYBIVeXDpxHhShvv0MLJzqqDFBTHYe1X5X2Y7oogy+UDJxV2N24/g
+Z8lxG4Vr2/VEfUOrw4Tosl5Z+1uzOdvTyBcxD/E5rGgTLczmulctHy3IMTmdTFr0
+FnU0/HMQoquWQuODhFqzMqNcsdbjANUBwOEQrKI8Sy6+b84kHP7PtO+S4Ik8R2k7
+ZeMlE1JmxBi/PZU860YlwT8/qOYToCHVyDjhv8qutbf2QnUl3SV86th2I1QQE14s
+0y7CdAHcHkw3sAEeYGkwCA74MO+VFtnYbf9B2JBOhyyWb5087rGzitu5MTAW41X9
+DwTeXEg+a24tAeht+Y1MionHUwa4j7FB/trN3Fnb/r90+4P66ZETVIEcjseUSMHO
+w6yqv10/H/dw/8r2EDUincBBX3o9DL3SadqragkKy96HtMiLcqMMGAPm0gti1b6f
+bnvOdr0mrIVIKX5nzOeGZORaYLoSD4C8qvFT7U+Um6DMo36cVDNsPmkF575/s3C2
+CxGiCPQqVxPgfNSh+2CPd2Xv04lNeuw6gG89DlOhHuoFKRlmPnom+gwqhz3ZXMfz
+TfmvjrBokzCICA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
+TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
+WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
+ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
+MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
+h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
+A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
+T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
+B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
+B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
+KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
+OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
+jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
+qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
+rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
+hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
+3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
+NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
+ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
+TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
+jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
+oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
+4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
+mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
+emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw
+CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg
+R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00
+MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT
+ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw
+EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW
++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9
+ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI
+zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW
+tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1
+/q4AaOeMSQ+2b1tbFfLn
+-----END CERTIFICATE-----
--- /dev/null
+curl https://www.gosuslugi.ru/api/nsi/v1/custom/dic/tls/csv
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFwjCCA6qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCUlUx
+PzA9BgNVBAoMNlRoZSBNaW5pc3RyeSBvZiBEaWdpdGFsIERldmVsb3BtZW50IGFu
+ZCBDb21tdW5pY2F0aW9uczEgMB4GA1UEAwwXUnVzc2lhbiBUcnVzdGVkIFJvb3Qg
+Q0EwHhcNMjIwMzAxMjEwNDE1WhcNMzIwMjI3MjEwNDE1WjBwMQswCQYDVQQGEwJS
+VTE/MD0GA1UECgw2VGhlIE1pbmlzdHJ5IG9mIERpZ2l0YWwgRGV2ZWxvcG1lbnQg
+YW5kIENvbW11bmljYXRpb25zMSAwHgYDVQQDDBdSdXNzaWFuIFRydXN0ZWQgUm9v
+dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMfFOZ8pUAL3+r2n
+qqE0Zp52selXsKGFYoG0GM5bwz1bSFtCt+AZQMhkWQheI3poZAToYJu69pHLKS6Q
+XBiwBC1cvzYmUYKMYZC7jE5YhEU2bSL0mX7NaMxMDmH2/NwuOVRj8OImVa5s1F4U
+zn4Kv3PFlDBjjSjXKVY9kmjUBsXQrIHeaqmUIsPIlNWUnimXS0I0abExqkbdrXbX
+YwCOXhOO2pDUx3ckmJlCMUGacUTnylyQW2VsJIyIGA8V0xzdaeUXg0VZ6ZmNUr5Y
+Ber/EAOLPb8NYpsAhJe2mXjMB/J9HNsoFMBFJ0lLOT/+dQvjbdRZoOT8eqJpWnVD
+U+QL/qEZnz57N88OWM3rabJkRNdU/Z7x5SFIM9FrqtN8xewsiBWBI0K6XFuOBOTD
+4V08o4TzJ8+Ccq5XlCUW2L48pZNCYuBDfBh7FxkB7qDgGDiaftEkZZfApRg2E+M9
+G8wkNKTPLDc4wH0FDTijhgxR3Y4PiS1HL2Zhw7bD3CbslmEGgfnnZojNkJtcLeBH
+BLa52/dSwNU4WWLubaYSiAmA9IUMX1/RpfpxOxd4Ykmhz97oFbUaDJFipIggx5sX
+ePAlkTdWnv+RWBxlJwMQ25oEHmRguNYf4Zr/Rxr9cS93Y+mdXIZaBEE0KS2iLRqa
+OiWBki9IMQU4phqPOBAaG7A+eP8PAgMBAAGjZjBkMB0GA1UdDgQWBBTh0YHlzlpf
+BKrS6badZrHF+qwshzAfBgNVHSMEGDAWgBTh0YHlzlpfBKrS6badZrHF+qwshzAS
+BgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
+AAOCAgEAALIY1wkilt/urfEVM5vKzr6utOeDWCUczmWX/RX4ljpRdgF+5fAIS4vH
+tmXkqpSCOVeWUrJV9QvZn6L227ZwuE15cWi8DCDal3Ue90WgAJJZMfTshN4OI8cq
+W9E4EG9wglbEtMnObHlms8F3CHmrw3k6KmUkWGoa+/ENmcVl68u/cMRl1JbW2bM+
+/3A+SAg2c6iPDlehczKx2oa95QW0SkPPWGuNA/CE8CpyANIhu9XFrj3RQ3EqeRcS
+AQQod1RNuHpfETLU/A2gMmvn/w/sx7TB3W5BPs6rprOA37tutPq9u6FTZOcG1Oqj
+C/B7yTqgI7rbyvox7DEXoX7rIiEqyNNUguTk/u3SZ4VXE2kmxdmSh3TQvybfbnXV
+4JbCZVaqiZraqc7oZMnRoWrXRG3ztbnbes/9qhRGI7PqXqeKJBztxRTEVj8ONs1d
+WN5szTwaPIvhkhO3CO5ErU2rVdUr89wKpNXbBODFKRtgxUT70YpmJ46VVaqdAhOZ
+D9EUUn4YaeLaS8AjSF/h7UkjOibNc4qVDiPP+rkehFWM66PVnP1Msh93tc+taIfC
+EYVMxjh8zNbFuoc7fzvvrFILLe7ifvEIUqSVIC/AzplM/Jxw7buXFeGP1qVCBEHq
+391d/9RAfaZ12zkwFsl+IKwE/OZxW8AHa9i1p4GO0YSNuczzEm4=
+-----END CERTIFICATE-----
--- /dev/null
+http://reestr-pki.ru/cdp/
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFGTCCBMigAwIBAgIQNGgeQMtB7zOpoLfIdpKaKTAIBgYqhQMCAgMwggFKMR4w
+HAYJKoZIhvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRwwGgYD
+VQQIDBM3NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAx
+PzA9BgNVBAkMNjEyNTM3NSDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQotCy0LXR
+gNGB0LrQsNGPLCDQtC4gNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfR
+jCDQoNC+0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqF
+AwOBAwEBEgwwMDc3MTA0NzQzNzUxQTA/BgNVBAMMONCT0L7Qu9C+0LLQvdC+0Lkg
+0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMB4XDTEyMDcy
+MDEyMzExNFoXDTI3MDcxNzEyMzExNFowggFKMR4wHAYJKoZIhvcNAQkBFg9kaXRA
+bWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3NyDQsy4g0JzQvtGB
+0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxPzA9BgNVBAkMNjEyNTM3NSDQ
+sy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQotCy0LXRgNGB0LrQsNGPLCDQtC4gNzEs
+MCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgxGDAW
+BgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQz
+NzUxQTA/BgNVBAMMONCT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+0YHRgtC+0LLQtdGA
+0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqF
+AwICHgEDQwAEQI+lv3kQI8jWka1kMVdbvpvFioP0Pyn3Knmp+2XD6KgPWnXEIlSR
+X8g/IYracDr51YsNc2KE3C7mkH6hA3M3ofujggGCMIIBfjCBxgYFKoUDZHAEgbww
+gbkMI9Cf0JDQmtCcIMKr0JrRgNC40L/RgtC+0J/RgNC+IEhTTcK7DCDQn9CQ0Jog
+wqvQk9C+0LvQvtCy0L3QvtC5INCj0KbCuww20JfQsNC60LvRjtGH0LXQvdC40LUg
+4oSWIDE0OS8zLzIvMi05OTkg0L7RgiAwNS4wNy4yMDEyDDjQl9Cw0LrQu9GO0YfQ
+tdC90LjQtSDihJYgMTQ5LzcvMS80LzItNjAzINC+0YIgMDYuMDcuMjAxMjAuBgUq
+hQNkbwQlDCPQn9CQ0JrQnCDCq9Ca0YDQuNC/0YLQvtCf0YDQviBIU03CuzBDBgNV
+HSAEPDA6MAgGBiqFA2RxATAIBgYqhQNkcQIwCAYGKoUDZHEDMAgGBiqFA2RxBDAI
+BgYqhQNkcQUwBgYEVR0gADAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUi5g7iRhR6O+cAni46sjUILJVyV0wCAYGKoUDAgIDA0EA23Re
+ec/Y27rpMi+iFbgWCazGY3skBTq5ZGsQKOUxCe4mO7UBDACiWqdA0nvqiQMXeHgq
+o//fO9pxuIHtymwyMg==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFFDCCBMGgAwIBAgIQTm1HiybyfWV/do4CXOPTkzAKBggqhQMHAQEDAjCCASQx
+HjAcBgkqhkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAW
+BgNVBAgMDzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQ
+sDEuMCwGA1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+0Lwg
+NzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40Lgx
+GDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0
+NzQzNzUxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQ
+uNC4MB4XDTE4MDcwNjEyMTgwNloXDTM2MDcwMTEyMTgwNlowggEkMR4wHAYJKoZI
+hvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83
+NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy0LAxLjAsBgNV
+BAkMJdGD0LvQuNGG0LAg0KLQstC10YDRgdC60LDRjywg0LTQvtC8IDcxLDAqBgNV
+BAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYFKoUD
+ZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1MSww
+KgYDVQQDDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDBmMB8G
+CCqFAwcBAQEBMBMGByqFAwICIwEGCCqFAwcBAQICA0MABEB1OSpFp7milX33EP0i
+kge6HbZacYp9fVj8sUa5RWFXrB27SKX5SvtIGepqKev69RSYeHHKR+jT9YX2NuSK
+9wONo4IBwjCCAb4wgfUGBSqFA2RwBIHrMIHoDDTQn9CQ0JrQnCDCq9Ca0YDQuNC/
+0YLQvtCf0YDQviBIU03CuyDQstC10YDRgdC40LggMi4wDEPQn9CQ0JogwqvQk9C+
+0LvQvtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC9
+0YLRgMK7DDXQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzMvMi8yLzIzINC+
+0YIgMDIuMDMuMjAxOAw00JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzYv
+MTA1INC+0YIgMjcuMDYuMjAxODA/BgUqhQNkbwQ2DDTQn9CQ0JrQnCDCq9Ca0YDQ
+uNC/0YLQvtCf0YDQviBIU03CuyDQstC10YDRgdC40LggMi4wMEMGA1UdIAQ8MDow
+CAYGKoUDZHEBMAgGBiqFA2RxAjAIBgYqhQNkcQMwCAYGKoUDZHEEMAgGBiqFA2Rx
+BTAGBgRVHSAAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBTCVPG0a9RMt+BtNrQjkPH+wzybBjAKBggqhQMHAQEDAgNBAJr6/eI7rHL7
++FsQnoH2i6DVxqalbIxLKj05edpZGPLLb6B2PTAMya7pSt9hb8QnFABgsR4IE5gT
+4VVkDWbX/n4=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFFTCCBMKgAwIBAgIRAOrKMs71+XnWjTxOTyzGh6QwCgYIKoUDBwEBAwIwggEk
+MR4wHAYJKoZIhvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRgw
+FgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy
+0LAxLjAsBgNVBAkMJdGD0LvQuNGG0LAg0KLQstC10YDRgdC60LDRjywg0LTQvtC8
+IDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4
+MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEw
+NDc0Mzc1MSwwKgYDVQQDDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB
+0LjQuDAeFw0yMTA3MDIxMjQxNDdaFw0zOTA3MDIxMjQxNDdaMIIBJDEeMBwGCSqG
+SIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEYMBYGA1UECAwP
+Nzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMS4wLAYD
+VQQJDCXRg9C70LjRhtCwINCi0LLQtdGA0YHQutCw0Y8sINC00L7QvCA3MSwwKgYD
+VQQKDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDEYMBYGBSqF
+A2QBEg0xMDQ3NzAyMDI2NzAxMRowGAYIKoUDA4EDAQESDDAwNzcxMDQ3NDM3NTEs
+MCoGA1UEAwwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgwZjAf
+BggqhQMHAQEBATATBgcqhQMCAiMBBggqhQMHAQECAgNDAARAznwizLAQgEZQecg2
+Re7+vfP0h4I5BVHNCzC3UQsCNZdAxM2nn/pKJGaDI8hv4DM3FF3reU2jWDO7Sp66
+fTrSZqOCAcIwggG+MIH1BgUqhQNkcASB6zCB6Aw00J/QkNCa0JwgwqvQmtGA0LjQ
+v9GC0L7Qn9GA0L4gSFNNwrsg0LLQtdGA0YHQuNC4IDIuMAxD0J/QkNCaIMKr0JPQ
+vtC70L7QstC90L7QuSDRg9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQ
+vdGC0YDCuww10JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS8zLzIvMi8yMyDQ
+vtGCIDAyLjAzLjIwMTgMNNCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkvNy82
+LzEwNSDQvtGCIDI3LjA2LjIwMTgwPwYFKoUDZG8ENgw00J/QkNCa0JwgwqvQmtGA
+0LjQv9GC0L7Qn9GA0L4gSFNNwrsg0LLQtdGA0YHQuNC4IDIuMDBDBgNVHSAEPDA6
+MAgGBiqFA2RxATAIBgYqhQNkcQIwCAYGKoUDZHEDMAgGBiqFA2RxBDAIBgYqhQNk
+cQUwBgYEVR0gADAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUGXePu4Lmb8hfk/AVHZMiodatDCYwCgYIKoUDBwEBAwIDQQCFR821LAew
+8tY3/fYGGXQNN5g6E74pjdurOqOoZbS+0WjiGsLPVzcrAts2l7BRGowjZ3MVAmHJ
+L/NjPYAClFu0
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFUTCCBP6gAwIBAgIRAJUfo0d8YQQ6rfqFhieCNEIwCgYIKoUDBwEBAwIwggE7
+MSEwHwYJKoZIhvcNAQkBFhJkaXRAZGlnaXRhbC5nb3YucnUxCzAJBgNVBAYTAlJV
+MRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQ
+utCy0LAxUzBRBgNVBAkMStCf0YDQtdGB0L3QtdC90YHQutCw0Y8g0L3QsNCx0LXR
+gNC10LbQvdCw0Y8sINC00L7QvCAxMCwg0YHRgtGA0L7QtdC90LjQtSAyMSYwJAYD
+VQQKDB3QnNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0x
+MDQ3NzAyMDI2NzAxMRUwEwYFKoUDZAQSCjc3MTA0NzQzNzUxJjAkBgNVBAMMHdCc
+0LjQvdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MB4XDTIyMDEwODEzMzIzOVoXDTQw
+MDEwODEzMzIzOVowggE7MSEwHwYJKoZIhvcNAQkBFhJkaXRAZGlnaXRhbC5nb3Yu
+cnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNV
+BAcMENCzLiDQnNC+0YHQutCy0LAxUzBRBgNVBAkMStCf0YDQtdGB0L3QtdC90YHQ
+utCw0Y8g0L3QsNCx0LXRgNC10LbQvdCw0Y8sINC00L7QvCAxMCwg0YHRgtGA0L7Q
+tdC90LjQtSAyMSYwJAYDVQQKDB3QnNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQ
+uDEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMRUwEwYFKoUDZAQSCjc3MTA0NzQz
+NzUxJjAkBgNVBAMMHdCc0LjQvdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MGYwHwYI
+KoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIDQwAEQFpKa6Qda48LjFq/drz2
+M27fFqu/g3+Prxrg9lE+KPzdbvRHwuOtbhlJ92ogmS+i7mhDDGPsWhtPVduV9Kbq
+QI6jggHQMIIBzDCB9QYFKoUDZHAEgeswgegMNNCf0JDQmtCcIMKr0JrRgNC40L/R
+gtC+0J/RgNC+IEhTTcK7INCy0LXRgNGB0LjQuCAyLjAMQ9Cf0JDQmiDCq9CT0L7Q
+u9C+0LLQvdC+0Lkg0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3R
+gtGAwrsMNdCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkvMy8yLzIvMjMg0L7R
+giAwMi4wMy4yMDE4DDTQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzcvNi00
+NDkg0L7RgiAzMC4xMi4yMDIxMD8GBSqFA2RvBDYMNNCf0JDQmtCcIMKr0JrRgNC4
+0L/RgtC+0J/RgNC+IEhTTcK7INCy0LXRgNGB0LjQuCAyLjAwDAYFKoUDZHIEAwIB
+ADBDBgNVHSAEPDA6MAgGBiqFA2RxATAIBgYqhQNkcQIwCAYGKoUDZHEDMAgGBiqF
+A2RxBDAIBgYqhQNkcQUwBgYEVR0gADAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUyRNYsUynYjp+0j88pucUfJ1wo4YwCgYIKoUDBwEB
+AwIDQQCCSXhICg3SZ/TTCtRJpBFuXGSy3PeZTEeOwdOHIv0tWiN2q0mPRzB/o6r9
+MXjGqdzfYGtCrq1l5FsXZOI5c/2S
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFFDCCBMGgAwIBAgIQTm1HiybyfWV/do4CXOPTkzAKBggqhQMHAQEDAjCCASQx
+HjAcBgkqhkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAW
+BgNVBAgMDzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQ
+sDEuMCwGA1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+0Lwg
+NzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40Lgx
+GDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0
+NzQzNzUxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQ
+uNC4MB4XDTE4MDcwNjEyMTgwNloXDTM2MDcwMTEyMTgwNlowggEkMR4wHAYJKoZI
+hvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83
+NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy0LAxLjAsBgNV
+BAkMJdGD0LvQuNGG0LAg0KLQstC10YDRgdC60LDRjywg0LTQvtC8IDcxLDAqBgNV
+BAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYFKoUD
+ZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1MSww
+KgYDVQQDDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDBmMB8G
+CCqFAwcBAQEBMBMGByqFAwICIwEGCCqFAwcBAQICA0MABEB1OSpFp7milX33EP0i
+kge6HbZacYp9fVj8sUa5RWFXrB27SKX5SvtIGepqKev69RSYeHHKR+jT9YX2NuSK
+9wONo4IBwjCCAb4wgfUGBSqFA2RwBIHrMIHoDDTQn9CQ0JrQnCDCq9Ca0YDQuNC/
+0YLQvtCf0YDQviBIU03CuyDQstC10YDRgdC40LggMi4wDEPQn9CQ0JogwqvQk9C+
+0LvQvtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC9
+0YLRgMK7DDXQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzMvMi8yLzIzINC+
+0YIgMDIuMDMuMjAxOAw00JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzYv
+MTA1INC+0YIgMjcuMDYuMjAxODA/BgUqhQNkbwQ2DDTQn9CQ0JrQnCDCq9Ca0YDQ
+uNC/0YLQvtCf0YDQviBIU03CuyDQstC10YDRgdC40LggMi4wMEMGA1UdIAQ8MDow
+CAYGKoUDZHEBMAgGBiqFA2RxAjAIBgYqhQNkcQMwCAYGKoUDZHEEMAgGBiqFA2Rx
+BTAGBgRVHSAAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBTCVPG0a9RMt+BtNrQjkPH+wzybBjAKBggqhQMHAQEDAgNBAJr6/eI7rHL7
++FsQnoH2i6DVxqalbIxLKj05edpZGPLLb6B2PTAMya7pSt9hb8QnFABgsR4IE5gT
+4VVkDWbX/n4=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIGIzCCBdCgAwIBAgIQWGKJALOtn7FAASd/YMJgDDAKBggqhQMHAQEDAjCCAWgx
+GDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0
+NzQzNzUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAX
+BgNVBAcMENCzLiDQnNC+0YHQutCy0LAxOjA4BgNVBAkMMdCf0YDQtdGB0L3QtdC9
+0YHQutCw0Y8g0L3QsNCxLiwg0LQuIDEwLCDRgdGC0YAuIDIxJjAkBgNVBAoMHdCc
+0LjQvdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MYGJMIGGBgNVBAMMf9Cc0LjQvdGG
+0LjRhNGA0Ysg0KDQvtGB0YHQuNC4LiDQo9GB0LjQu9C10L3QvdCw0Y8g0L3QtdC6
+0LLQsNC70LjRhNC40YbQuNGA0L7QstCw0L3QvdCw0Y8g0Y3Qu9C10LrRgtGA0L7Q
+vdC90LDRjyDQv9C+0LTQv9C40YHRjC4wHhcNMjEwOTMwMDgxMDEzWhcNMzYwOTMw
+MDgxMDEzWjCCAWgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOB
+AwEBEgwwMDc3MTA0NzQzNzUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+
+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy0LAxOjA4BgNVBAkMMdCf
+0YDQtdGB0L3QtdC90YHQutCw0Y8g0L3QsNCxLiwg0LQuIDEwLCDRgdGC0YAuIDIx
+JjAkBgNVBAoMHdCc0LjQvdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MYGJMIGGBgNV
+BAMMf9Cc0LjQvdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4LiDQo9GB0LjQu9C10L3Q
+vdCw0Y8g0L3QtdC60LLQsNC70LjRhNC40YbQuNGA0L7QstCw0L3QvdCw0Y8g0Y3Q
+u9C10LrRgtGA0L7QvdC90LDRjyDQv9C+0LTQv9C40YHRjC4wZjAfBggqhQMHAQEB
+ATATBgcqhQMCAiMBBggqhQMHAQECAgNDAARABVlRighq8WUQbwafwWZKQg+zKv43
+80wYQhdlP6U8GDzFg5OCLHYaR4ur3SnUL+YUbbqaHSsZdZiMEntjmIyv16OCAkkw
+ggJFMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUDK2S1qH9/0zRGezLIfK9JJMZ
+BbMwDwYDVR0TAQH/BAUwAwEB/zAnBgNVHSAEIDAeMAgGBiqFA2RxATAIBgYqhQNk
+cQIwCAYGKoUDZHEDMIIBMwYFKoUDZHAEggEoMIIBJAxS0KHQmtCX0JggwqvQmtGA
+0LjQv9GC0L7Qn9GA0L4gQ1NQwrsg0LLQtdGA0YHQuNGPIDQuMCAo0LjRgdC/0L7Q
+u9C90LXQvdC40LUgMy1CYXNlKQwswqvQmtGA0LjQv9GC0L7Qn9GA0L4g0KPQpsK7
+INCy0LXRgNGB0LjQuCAyLjAMT9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC
+0LLQtdGC0YHRgtCy0LjRjyDihJYg0KHQpC8xMjQtMzk2NyDQvtGCIDE1LjAxLjIw
+MjEMT9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjR
+jyDihJYg0KHQpC8xMjgtMzg2OSDQvtGCIDIzLjA3LjIwMjAwXQYFKoUDZG8EVAxS
+0KHQmtCX0JggwqvQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQwrsg0LLQtdGA0YHQuNGP
+IDQuMCAo0LjRgdC/0L7Qu9C90LXQvdC40LUgMy1CYXNlKTARBgkrBgEEAYI3FAIE
+BAwCQ0EwEAYJKwYBBAGCNxUBBAMCAQAwHwYJKwYBBAGCNxUHBBIwEAYIKoUDAgIu
+AAACAQECAQAwCgYIKoUDBwEBAwIDQQDwAhJdc9xMYUeyZY+hTgr8N12Sq4NlD6Y1
+2wmWWp6XJs05O/UIqkVFQf0BSxJpMCesZzLHym7Gk69d12nUTE8o
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFwjCCA6qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCUlUx
+PzA9BgNVBAoMNlRoZSBNaW5pc3RyeSBvZiBEaWdpdGFsIERldmVsb3BtZW50IGFu
+ZCBDb21tdW5pY2F0aW9uczEgMB4GA1UEAwwXUnVzc2lhbiBUcnVzdGVkIFJvb3Qg
+Q0EwHhcNMjIwMzAxMjEwNDE1WhcNMzIwMjI3MjEwNDE1WjBwMQswCQYDVQQGEwJS
+VTE/MD0GA1UECgw2VGhlIE1pbmlzdHJ5IG9mIERpZ2l0YWwgRGV2ZWxvcG1lbnQg
+YW5kIENvbW11bmljYXRpb25zMSAwHgYDVQQDDBdSdXNzaWFuIFRydXN0ZWQgUm9v
+dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMfFOZ8pUAL3+r2n
+qqE0Zp52selXsKGFYoG0GM5bwz1bSFtCt+AZQMhkWQheI3poZAToYJu69pHLKS6Q
+XBiwBC1cvzYmUYKMYZC7jE5YhEU2bSL0mX7NaMxMDmH2/NwuOVRj8OImVa5s1F4U
+zn4Kv3PFlDBjjSjXKVY9kmjUBsXQrIHeaqmUIsPIlNWUnimXS0I0abExqkbdrXbX
+YwCOXhOO2pDUx3ckmJlCMUGacUTnylyQW2VsJIyIGA8V0xzdaeUXg0VZ6ZmNUr5Y
+Ber/EAOLPb8NYpsAhJe2mXjMB/J9HNsoFMBFJ0lLOT/+dQvjbdRZoOT8eqJpWnVD
+U+QL/qEZnz57N88OWM3rabJkRNdU/Z7x5SFIM9FrqtN8xewsiBWBI0K6XFuOBOTD
+4V08o4TzJ8+Ccq5XlCUW2L48pZNCYuBDfBh7FxkB7qDgGDiaftEkZZfApRg2E+M9
+G8wkNKTPLDc4wH0FDTijhgxR3Y4PiS1HL2Zhw7bD3CbslmEGgfnnZojNkJtcLeBH
+BLa52/dSwNU4WWLubaYSiAmA9IUMX1/RpfpxOxd4Ykmhz97oFbUaDJFipIggx5sX
+ePAlkTdWnv+RWBxlJwMQ25oEHmRguNYf4Zr/Rxr9cS93Y+mdXIZaBEE0KS2iLRqa
+OiWBki9IMQU4phqPOBAaG7A+eP8PAgMBAAGjZjBkMB0GA1UdDgQWBBTh0YHlzlpf
+BKrS6badZrHF+qwshzAfBgNVHSMEGDAWgBTh0YHlzlpfBKrS6badZrHF+qwshzAS
+BgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
+AAOCAgEAALIY1wkilt/urfEVM5vKzr6utOeDWCUczmWX/RX4ljpRdgF+5fAIS4vH
+tmXkqpSCOVeWUrJV9QvZn6L227ZwuE15cWi8DCDal3Ue90WgAJJZMfTshN4OI8cq
+W9E4EG9wglbEtMnObHlms8F3CHmrw3k6KmUkWGoa+/ENmcVl68u/cMRl1JbW2bM+
+/3A+SAg2c6iPDlehczKx2oa95QW0SkPPWGuNA/CE8CpyANIhu9XFrj3RQ3EqeRcS
+AQQod1RNuHpfETLU/A2gMmvn/w/sx7TB3W5BPs6rprOA37tutPq9u6FTZOcG1Oqj
+C/B7yTqgI7rbyvox7DEXoX7rIiEqyNNUguTk/u3SZ4VXE2kmxdmSh3TQvybfbnXV
+4JbCZVaqiZraqc7oZMnRoWrXRG3ztbnbes/9qhRGI7PqXqeKJBztxRTEVj8ONs1d
+WN5szTwaPIvhkhO3CO5ErU2rVdUr89wKpNXbBODFKRtgxUT70YpmJ46VVaqdAhOZ
+D9EUUn4YaeLaS8AjSF/h7UkjOibNc4qVDiPP+rkehFWM66PVnP1Msh93tc+taIfC
+EYVMxjh8zNbFuoc7fzvvrFILLe7ifvEIUqSVIC/AzplM/Jxw7buXFeGP1qVCBEHq
+391d/9RAfaZ12zkwFsl+IKwE/OZxW8AHa9i1p4GO0YSNuczzEm4=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIHPDCCBSSgAwIBAgICEAQwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCUlUx
+PzA9BgNVBAoMNlRoZSBNaW5pc3RyeSBvZiBEaWdpdGFsIERldmVsb3BtZW50IGFu
+ZCBDb21tdW5pY2F0aW9uczEgMB4GA1UEAwwXUnVzc2lhbiBUcnVzdGVkIFJvb3Qg
+Q0EwHhcNMjIwNTI3MTA1MTU3WhcNMjcwNTMxMTA1MTU3WjByMQswCQYDVQQGEwJS
+VTE/MD0GA1UECgw2VGhlIE1pbmlzdHJ5IG9mIERpZ2l0YWwgRGV2ZWxvcG1lbnQg
+YW5kIENvbW11bmljYXRpb25zMSIwIAYDVQQDDBlSdXNzaWFuIFRydXN0ZWQgRFYg
+U3ViIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0qErju5cEzrI
+/rXyT1PdWrZ8dVe+jn8pG44ux9wR7eEK3srIG+pS/Au0XUKdEVOf4SnpOO1U0WKS
+AvL/LagQiU6KEwO0ZMAPmqqP3D62mMgyYY1ukvCYjIUG5i6FlwUhoW1TIcVPpSMj
+tHHfbLXeg/ZuKUrO5ivmeNsEOhUTixSwHoOtfVtXn+IBM5V3hgaRQ7q45wIolAcV
+yKveCeRM4FWl22ukaeok+R5ldhge4Qks1+c8p9wgDH7C5TlOmQVQ4TUrBy1IrQSS
+2nkj8678d8JnKmM2tZatW8crYilBpvxp9iUu8tY0qPKbSGbAUi21U2OwZnkmd97o
+2Kyw+dUv1VZCHslnii4NgCIUtkSXm3MeBEh5aE8UxMndLub4Y60L2Yzz0zrajlsq
+QMYKVfvn+GMn/DB+fJxwENTAnISN57lrxiVTqSzK8aNiDMCRhBhBWFD+0SjctHnl
+jCyIpT56BXMGdwWbH7Cct1WbQROzUfqQEw9KcZOqT5GYylWsJ3Y9GYD96ANuyebv
+p9RYRp4pcS0VPaVq7Ta0J8qVdX5FJb+4kY+ggunwvZ/hbOiJUATEh3x9ehjCowUA
+EOAmFFGs8L78CShoWdbcCRWuf6Foa6fBI3DsQQWfBf5/agTNQMRhNMAVP2b6H8zv
+rV0QTYRxhvAK/jJqX5h6GnxcaTMlPd0CAwEAAaOCAdwwggHYMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBQdc/tm3eYZ+aXLk4F/
+k4itmNnFWzAfBgNVHSMEGDAWgBTh0YHlzlpfBKrS6badZrHF+qwshzCBxwYIKwYB
+BQUHAQEEgbowgbcwOwYIKwYBBQUHMAKGL2h0dHA6Ly9yZWVzdHItcGtpLnJ1L2Nk
+cC9yb290Y2Ffc3NsX3JzYTIwMjIuY3J0MDsGCCsGAQUFBzAChi9odHRwOi8vcm9z
+dGVsZWNvbS5ydS9jZHAvcm9vdGNhX3NzbF9yc2EyMDIyLmNydDA7BggrBgEFBQcw
+AoYvaHR0cDovL2NvbXBhbnkucnQucnUvY2RwL3Jvb3RjYV9zc2xfcnNhMjAyMi5j
+cnQwgacGA1UdHwSBnzCBnDCBmaCBlqCBk4YvaHR0cDovL3JlZXN0ci1wa2kucnUv
+Y2RwL3Jvb3RjYV9zc2xfcnNhMjAyMi5jcmyGL2h0dHA6Ly9yb3N0ZWxlY29tLnJ1
+L2NkcC9yb290Y2Ffc3NsX3JzYTIwMjIuY3Jshi9odHRwOi8vY29tcGFueS5ydC5y
+dS9jZHAvcm9vdGNhX3NzbF9yc2EyMDIyLmNybDANBgkqhkiG9w0BAQsFAAOCAgEA
+ObdkintrAWIw7J/FbeFELumujQL/4tkxP6oe8hxaup/UJLOPFJOMm0u4dP3d/aMH
+ruToQE2i4h2FdPPNmGomSdn/vTw2yQyAJ9GYC+W3h300/PqpcUu4Ix/HYdE1NA/l
+n0JWo3UNowmAmiuDYmX1MCGHV3R293yU+vlw9DubKT1qfFRDSMKQ2qnCXdkJZPCK
+0qW6RfXs53+i8a88MtwGpeMWa/FCo3KWqRtVP+fbZaTubb5hJolPKEv1H3pFCtK8
+I+SxP+Zm/0Cu1WHSmvCjNTNJDFvB36ibsp8PTt7EmiV0KZdCgqo8WW6KyXyAYFgN
+IRq+34pPUYUZLrx8hAaKXiVorX4Etux3y4hpoNRLILEFT/ug2mhP/eoEcbr/aByV
+I0CV5TC+cupXKvfSDBrS74fjqRNHSfdlaJOqfo+YjphQAgXXzaOfxoPlsR0mAANp
+gAK41mc2gO8B87ST0+VJQQ/cYhrM/vFER3vrTYlPN00Q7rwY2LDfuiw7bJ2nlH5Y
+Nid2GLoa71EQRlXCypJFPGdoMiDhbtg1GacCX7VOylQzzlQRkcgOvKe4rLw834rt
+v6ACedL9D5NonkgG/1LBBVAR2my9sptt1YUhgneK0aMhUkxUNWcPQt6Mrj9THh4U
+TxiEc2QHORcar1WfDLXdLasmqm0IgYNtZuyhfnvAdgo=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIHQjCCBSqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCUlUx
+PzA9BgNVBAoMNlRoZSBNaW5pc3RyeSBvZiBEaWdpdGFsIERldmVsb3BtZW50IGFu
+ZCBDb21tdW5pY2F0aW9uczEgMB4GA1UEAwwXUnVzc2lhbiBUcnVzdGVkIFJvb3Qg
+Q0EwHhcNMjIwMzAyMTEyNTE5WhcNMjcwMzA2MTEyNTE5WjBvMQswCQYDVQQGEwJS
+VTE/MD0GA1UECgw2VGhlIE1pbmlzdHJ5IG9mIERpZ2l0YWwgRGV2ZWxvcG1lbnQg
+YW5kIENvbW11bmljYXRpb25zMR8wHQYDVQQDDBZSdXNzaWFuIFRydXN0ZWQgU3Vi
+IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9YPqBKOk19NFymrE
+wehzrhBEgT2atLezpduB24mQ7CiOa/HVpFCDRZzdxqlh8drku408/tTmWzlNH/br
+HuQhZ/miWKOf35lpKzjyBd6TPM23uAfJvEOQ2/dnKGGJbsUo1/udKSvxQwVHpVv3
+S80OlluKfhWPDEXQpgyFqIzPoxIQTLZ0deirZwMVHarZ5u8HqHetRuAtmO2ZDGQn
+vVOJYAjls+Hiueq7Lj7Oce7CQsTwVZeP+XQx28PAaEZ3y6sQEt6rL06ddpSdoTMp
+BnCqTbxW+eWMyjkIn6t9GBtUV45yB1EkHNnj2Ex4GwCiN9T84QQjKSr+8f0psGrZ
+vPbCbQAwNFJjisLixnjlGPLKa5vOmNwIh/LAyUW5DjpkCx004LPDuqPpFsKXNKpa
+L2Dm6uc0x4Jo5m+gUTVORB6hOSzWnWDj2GWfomLzzyjG81DRGFBpco/O93zecsIN
+3SL2Ysjpq1zdoS01CMYxie//9zWvYwzI25/OZigtnpCIrcd2j1Y6dMUFQAzAtHE+
+qsXflSL8HIS+IJEFIQobLlYhHkoE3avgNx5jlu+OLYe0dF0Ykx1PGNjbwqvTX37R
+Cn32NMjlotW2QcGEZhDKj+3urZizp5xdTPZitA+aEjZM/Ni71VOdiOP0igbw6asZ
+2fxdozZ1TnSSYNYvNATwthNmZysCAwEAAaOCAeUwggHhMBIGA1UdEwEB/wQIMAYB
+Af8CAQAwDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTR4XENCy2BTm6KSo9MI7NM
+XqtpCzAfBgNVHSMEGDAWgBTh0YHlzlpfBKrS6badZrHF+qwshzCBxwYIKwYBBQUH
+AQEEgbowgbcwOwYIKwYBBQUHMAKGL2h0dHA6Ly9yb3N0ZWxlY29tLnJ1L2NkcC9y
+b290Y2Ffc3NsX3JzYTIwMjIuY3J0MDsGCCsGAQUFBzAChi9odHRwOi8vY29tcGFu
+eS5ydC5ydS9jZHAvcm9vdGNhX3NzbF9yc2EyMDIyLmNydDA7BggrBgEFBQcwAoYv
+aHR0cDovL3JlZXN0ci1wa2kucnUvY2RwL3Jvb3RjYV9zc2xfcnNhMjAyMi5jcnQw
+gbAGA1UdHwSBqDCBpTA1oDOgMYYvaHR0cDovL3Jvc3RlbGVjb20ucnUvY2RwL3Jv
+b3RjYV9zc2xfcnNhMjAyMi5jcmwwNaAzoDGGL2h0dHA6Ly9jb21wYW55LnJ0LnJ1
+L2NkcC9yb290Y2Ffc3NsX3JzYTIwMjIuY3JsMDWgM6Axhi9odHRwOi8vcmVlc3Ry
+LXBraS5ydS9jZHAvcm9vdGNhX3NzbF9yc2EyMDIyLmNybDANBgkqhkiG9w0BAQsF
+AAOCAgEARBVzZls79AdiSCpar15dA5Hr/rrT4WbrOfzlpI+xrLeRPrUG6eUWIW4v
+Sui1yx3iqGLCjPcKb+HOTwoRMbI6ytP/ndp3TlYua2advYBEhSvjs+4vDZNwXr/D
+anbwIWdurZmViQRBDFebpkvnIvru/RpWud/5r624Wp8voZMRtj/cm6aI9LtvBfT9
+cfzhOaexI/99c14dyiuk1+6QhdwKaCRTc1mdfNQmnfWNRbfWhWBlK3h4GGE9JK33
+Gk8ZS8DMrkdAh0xby4xAQ/mSWAfWrBmfzlOqGyoB1U47WTOeqNbWkkoAP2ys94+s
+Jg4NTkiDVtXRF6nr6fYi0bSOvOFg0IQrMXO2Y8gyg9ARdPJwKtvWX8VPADCYMiWH
+h4n8bZokIrImVKLDQKHY4jCsND2HHdJfnrdL2YJw1qFskNO4cSNmZydw0Wkgjv9k
+F+KxqrDKlB8MZu2Hclph6v/CZ0fQ9YuE8/lsHZ0Qc2HyiSMnvjgK5fDc3TD4fa8F
+E8gMNurM+kV8PT8LNIM+4Zs+LKEV8nqRWBaxkIVJGekkVKO8xDBOG/aN62AZKHOe
+GcyIdu7yNMMRihGVZCYr8rYiJoKiOzDqOkPkLOPdhtVlgnhowzHDxMHND/E2WA5p
+ZHuNM/m0TXt2wTTPL7JH2YC0gPz/BvvSzjksgzU5rLbRyUKQkgU=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG2DCCBoegAwIBAgILANXJ6OMAAAAAAAwwCAYGKoUDAgIDMIIBSjEeMBwGCSqG
+SIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEcMBoGA1UECAwT
+Nzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMT8wPQYD
+VQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0KLQstC10YDRgdC6
+0LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQ
+vtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMB
+ARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy0L3QvtC5INGD0LTQ
+vtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDAeFw0xMjA3MjAxMzI1
+MDZaFw0yNzA3MTcxMzI1MDZaMIIBITEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQz
+NzUxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEeMBwGCSqGSIb3DQEJARYPZGl0
+QG1pbnN2eWF6LnJ1MTwwOgYDVQQJDDMxMjUzNzUg0LMuINCc0L7RgdC60LLQsCDR
+g9C7LiDQotCy0LXRgNGB0LrQsNGPINC0LjcxLDAqBgNVBAoMI9Cc0LjQvdC60L7Q
+vNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRUwEwYDVQQHDAzQnNC+0YHQutCy0LAx
+HDAaBgNVBAgMEzc3INCzLiDQnNC+0YHQutCy0LAxCzAJBgNVBAYTAlJVMRswGQYD
+VQQDDBLQo9CmIDEg0JjQoSDQk9Cj0KYwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYH
+KoUDAgIeAQNDAARAbU2Kxdct10eEH+AjY+ky/3IPC6+S5hvS7jU55UYg8g0bbsZ1
+JXe/4IbOcXjS7y1TsU1p/gayfqQw5IBRcp5l8qOCA28wggNrMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFPRmLzxd2FxkXSst3qMekf2IGP46MAsGA1UdDwQEAwIB
+hjAQBgkrBgEEAYI3FQEEAwIBADAvBgNVHSAEKDAmMAgGBiqFA2RxATAIBgYqhQNk
+cQIwCAYGKoUDZHEDMAYGBFUdIAAwNgYFKoUDZG8ELQwr0JrRgNC40L/RgtC+0J/R
+gNC+IENTUCAo0LLQtdGA0YHQuNGPIDMuNi4xKTCCAYsGA1UdIwSCAYIwggF+gBSL
+mDuJGFHo75wCeLjqyNQgslXJXaGCAVKkggFOMIIBSjEeMBwGCSqGSIb3DQEJARYP
+ZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEcMBoGA1UECAwTNzcg0LMuINCc
+0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMT8wPQYDVQQJDDYxMjUz
+NzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0KLQstC10YDRgdC60LDRjywg0LQu
+IDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4
+MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEw
+NDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy
+0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgIIQNGgeQMtB7zOpoLfIdpKaKTBZBgNV
+HR8EUjBQMCagJKAihiBodHRwOi8vcm9zdGVsZWNvbS5ydS9jZHAvZ3VjLmNybDAm
+oCSgIoYgaHR0cDovL3JlZXN0ci1wa2kucnUvY2RwL2d1Yy5jcmwwgcYGBSqFA2Rw
+BIG8MIG5DCPQn9CQ0JrQnCDCq9Ca0YDQuNC/0YLQvtCf0YDQviBIU03Cuwwg0J/Q
+kNCaIMKr0JPQvtC70L7QstC90L7QuSDQo9CmwrsMNtCX0LDQutC70Y7Rh9C10L3Q
+uNC1IOKEliAxNDkvMy8yLzItOTk5INC+0YIgMDUuMDcuMjAxMgw40JfQsNC60LvR
+jtGH0LXQvdC40LUg4oSWIDE0OS83LzEvNC8yLTYwMyDQvtGCIDA2LjA3LjIwMTIw
+CAYGKoUDAgIDA0EA6iV+FNqmkkGHRzHFjtige/eHpe/m9Xf83Pi7CdHl2AZyEexf
+cYtRQM0ZlbRagdyPB0ZfPqnIieBZ9Po5KGT8PA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG3TCCBoygAwIBAgILAP9y9MEAAAAAACswCAYGKoUDAgIDMIIBSjEeMBwGCSqG
+SIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEcMBoGA1UECAwT
+Nzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMT8wPQYD
+VQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0KLQstC10YDRgdC6
+0LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQ
+vtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMB
+ARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy0L3QvtC5INGD0LTQ
+vtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDAeFw0xMzEyMDUxODEy
+MDZaFw0xNzEyMDQxODEyMDZaMIIBITEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQz
+NzUxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEeMBwGCSqGSIb3DQEJARYPZGl0
+QG1pbnN2eWF6LnJ1MTwwOgYDVQQJDDMxMjUzNzUg0LMuINCc0L7RgdC60LLQsCDR
+g9C7LiDQotCy0LXRgNGB0LrQsNGPINC0LjcxLDAqBgNVBAoMI9Cc0LjQvdC60L7Q
+vNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRUwEwYDVQQHDAzQnNC+0YHQutCy0LAx
+HDAaBgNVBAgMEzc3INCzLiDQnNC+0YHQutCy0LAxCzAJBgNVBAYTAlJVMRswGQYD
+VQQDDBLQo9CmIDEg0JjQoSDQk9Cj0KYwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYH
+KoUDAgIeAQNDAARAfseuq3yfDouZVpJSktlCsA3o4onHAk6tVVd7qSvVrkI82HDS
+Zmn5Z4pLBj1YHJOPYb+iFVB7la+huHS1hmIl+6OCA3QwggNwMBIGA1UdEwEB/wQI
+MAYBAf8CAQEwHQYDVR0OBBYEFGS6CUrMdo/Wzmbv89yTP6kwNeQHMAsGA1UdDwQE
+AwIBhjASBgkrBgEEAYI3FQEEBQIDAQABMC8GA1UdIAQoMCYwCAYGKoUDZHEBMAgG
+BiqFA2RxAjAIBgYqhQNkcQMwBgYEVR0gADA2BgUqhQNkbwQtDCvQmtGA0LjQv9GC
+0L7Qn9GA0L4gQ1NQICjQstC10YDRgdC40Y8gMy42LjEpMIIBiwYDVR0jBIIBgjCC
+AX6AFIuYO4kYUejvnAJ4uOrI1CCyVcldoYIBUqSCAU4wggFKMR4wHAYJKoZIhvcN
+AQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3NyDQ
+sy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxPzA9BgNVBAkM
+NjEyNTM3NSDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQotCy0LXRgNGB0LrQsNGP
+LCDQtC4gNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHR
+gdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgww
+MDc3MTA0NzQzNzUxQTA/BgNVBAMMONCT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+0YHR
+gtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAghA0aB5Ay0HvM6mgt8h2kpop
+MFkGA1UdHwRSMFAwJqAkoCKGIGh0dHA6Ly9yb3N0ZWxlY29tLnJ1L2NkcC9ndWMu
+Y3JsMCagJKAihiBodHRwOi8vcmVlc3RyLXBraS5ydS9jZHAvZ3VjLmNybDCBxgYF
+KoUDZHAEgbwwgbkMI9Cf0JDQmtCcIMKr0JrRgNC40L/RgtC+0J/RgNC+IEhTTcK7
+DCDQn9CQ0JogwqvQk9C+0LvQvtCy0L3QvtC5INCj0KbCuww20JfQsNC60LvRjtGH
+0LXQvdC40LUg4oSWIDE0OS8zLzIvMi05OTkg0L7RgiAwNS4wNy4yMDEyDDjQl9Cw
+0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzcvMS80LzItNjAzINC+0YIgMDYuMDcu
+MjAxMjAIBgYqhQMCAgMDQQCuTvnFWHxBA33LHZV5yfbdy8BMA0FwWG/ykarS89FK
+dSs5VX5L2J8fgCvHolAGYl0Pa6lJGPX1Fsi5Uwc5lwOQ
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG3DCCBougAwIBAgIKHBjOyAAAAAAAPTAIBgYqhQMCAgMwggFKMR4wHAYJKoZI
+hvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3
+NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxPzA9BgNV
+BAkMNjEyNTM3NSDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQotCy0LXRgNGB0LrQ
+sNGPLCDQtC4gNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+
+0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEB
+EgwwMDc3MTA0NzQzNzUxQTA/BgNVBAMMONCT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+
+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMB4XDTE1MDQyMjExMTU0
+MFoXDTE5MDQyMTExMTU0MFowggEhMRowGAYIKoUDA4EDAQESDDAwNzcxMDQ3NDM3
+NTEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMR4wHAYJKoZIhvcNAQkBFg9kaXRA
+bWluc3Z5YXoucnUxPDA6BgNVBAkMMzEyNTM3NSDQsy4g0JzQvtGB0LrQstCwINGD
+0LsuINCi0LLQtdGA0YHQutCw0Y8g0LQuNzEsMCoGA1UECgwj0JzQuNC90LrQvtC8
+0YHQstGP0LfRjCDQoNC+0YHRgdC40LgxFTATBgNVBAcMDNCc0L7RgdC60LLQsDEc
+MBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDELMAkGA1UEBhMCUlUxGzAZBgNV
+BAMMEtCj0KYgMSDQmNChINCT0KPQpjBjMBwGBiqFAwICEzASBgcqhQMCAiMBBgcq
+hQMCAh4BA0MABECIK3XrPENDFjbx03P0BFzzRxoQIFUYBswZ1ybdlY+kWyDedtob
+HYKraIKYY+2GIf3kkwOiGRYvL9UPfVbWUQYKo4IDdDCCA3AwEgYDVR0TAQH/BAgw
+BgEB/wIBATAdBgNVHQ4EFgQUzIJYI521zO5pWagHdvAS2gxJQx8wCwYDVR0PBAQD
+AgGGMBIGCSsGAQQBgjcVAQQFAgMCAAIwLwYDVR0gBCgwJjAIBgYqhQNkcQEwCAYG
+KoUDZHECMAgGBiqFA2RxAzAGBgRVHSAAMDYGBSqFA2RvBC0MK9Ca0YDQuNC/0YLQ
+vtCf0YDQviBDU1AgKNCy0LXRgNGB0LjRjyAzLjYuMSkwggGLBgNVHSMEggGCMIIB
+foAUi5g7iRhR6O+cAni46sjUILJVyV2hggFSpIIBTjCCAUoxHjAcBgkqhkiG9w0B
+CQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxHDAaBgNVBAgMEzc3INCz
+LiDQnNC+0YHQutCy0LAxFTATBgNVBAcMDNCc0L7RgdC60LLQsDE/MD0GA1UECQw2
+MTI1Mzc1INCzLiDQnNC+0YHQutCy0LAsINGD0LsuINCi0LLQtdGA0YHQutCw0Y8s
+INC0LiA3MSwwKgYDVQQKDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB
+0LjQuDEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMRowGAYIKoUDA4EDAQESDDAw
+NzcxMDQ3NDM3NTFBMD8GA1UEAww40JPQvtC70L7QstC90L7QuSDRg9C00L7RgdGC
+0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YCCEDRoHkDLQe8zqaC3yHaSmikw
+WQYDVR0fBFIwUDAmoCSgIoYgaHR0cDovL3Jvc3RlbGVjb20ucnUvY2RwL2d1Yy5j
+cmwwJqAkoCKGIGh0dHA6Ly9yZWVzdHItcGtpLnJ1L2NkcC9ndWMuY3JsMIHGBgUq
+hQNkcASBvDCBuQwj0J/QkNCa0JwgwqvQmtGA0LjQv9GC0L7Qn9GA0L4gSFNNwrsM
+INCf0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0KPQpsK7DDbQl9Cw0LrQu9GO0YfQ
+tdC90LjQtSDihJYgMTQ5LzMvMi8yLTk5OSDQvtGCIDA1LjA3LjIwMTIMONCX0LDQ
+utC70Y7Rh9C10L3QuNC1IOKEliAxNDkvNy8xLzQvMi02MDMg0L7RgiAwNi4wNy4y
+MDEyMAgGBiqFAwICAwNBAKLIL6X6RGBDYnHl/AQurCU3kHrqCQ7uTxQ1dvcm7/2f
+pzZvAILjCblWf13bicj6ZpC11QdiZo9zThxQxwKXhME=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIGrDCCBlugAwIBAgILAOvBBVQAAAAAAFkwCAYGKoUDAgIDMIIBSjEeMBwGCSqG
+SIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEcMBoGA1UECAwT
+Nzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMT8wPQYD
+VQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0KLQstC10YDRgdC6
+0LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQ
+vtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMB
+ARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy0L3QvtC5INGD0LTQ
+vtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDAeFw0xNjAzMTYxMjAy
+NTFaFw0yNzA3MTIxMjAyNTFaMIIBITEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQz
+NzUxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEeMBwGCSqGSIb3DQEJARYPZGl0
+QG1pbnN2eWF6LnJ1MTwwOgYDVQQJDDMxMjUzNzUg0LMuINCc0L7RgdC60LLQsCDR
+g9C7LiDQotCy0LXRgNGB0LrQsNGPINC0LjcxLDAqBgNVBAoMI9Cc0LjQvdC60L7Q
+vNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRUwEwYDVQQHDAzQnNC+0YHQutCy0LAx
+HDAaBgNVBAgMEzc3INCzLiDQnNC+0YHQutCy0LAxCzAJBgNVBAYTAlJVMRswGQYD
+VQQDDBLQo9CmIDEg0JjQoSDQk9Cj0KYwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYH
+KoUDAgIeAQNDAARAx70Y7WYQ4ODtdiSSx3MJnr1GQBEIExiPO/LWj1TRKES1OcDI
+YgtdOBGVYSvbsStl10jkAOG0OpnGsd2by4m+LaOCA0MwggM/MA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFBGIaV7vyOlz23pXNbzSAfMF/qfRMAsGA1UdDwQEAwIB
+hjCCAYsGA1UdIwSCAYIwggF+gBSLmDuJGFHo75wCeLjqyNQgslXJXaGCAVKkggFO
+MIIBSjEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJS
+VTEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB
+0LrQstCwMT8wPQYDVQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g
+0KLQstC10YDRgdC60LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB
+0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDEx
+GjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy
+0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgIIQ
+NGgeQMtB7zOpoLfIdpKaKTBZBgNVHR8EUjBQMCagJKAihiBodHRwOi8vcm9zdGVs
+ZWNvbS5ydS9jZHAvZ3VjLmNybDAmoCSgIoYgaHR0cDovL3JlZXN0ci1wa2kucnUv
+Y2RwL2d1Yy5jcmwwJgYFKoUDZG8EHQwb0JrRgNC40L/RgtC+LdCf0YDQviBDU1Ag
+My42MCUGA1UdIAQeMBwwCAYGKoUDZHEBMAgGBiqFA2RxAjAGBgRVHSAAMIHGBgUq
+hQNkcASBvDCBuQwj0J/QkNCa0JwgwqvQmtGA0LjQv9GC0L7Qn9GA0L4gSFNNwrsM
+INCf0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0KPQpsK7DDbQl9Cw0LrQu9GO0YfQ
+tdC90LjQtSDihJYgMTQ5LzMvMi8yLTk5OSDQvtGCIDA1LjA3LjIwMTIMONCX0LDQ
+utC70Y7Rh9C10L3QuNC1IOKEliAxNDkvNy8xLzQvMi02MDMg0L7RgiAwNi4wNy4y
+MDEyMAgGBiqFAwICAwNBAKVYokUvb7XAMPJF38ZPKO2BFBldmGEfqsfmsiO35Y52
+kTkx512H3YLqWMrOLjIfVMJhc+DTCNeXWY6bhK4/DRU=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG8DCCBp+gAwIBAgILAMzgRWQAAAAAAJIwCAYGKoUDAgIDMIIBSjEeMBwGCSqG
+SIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEcMBoGA1UECAwT
+Nzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMT8wPQYD
+VQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0KLQstC10YDRgdC6
+0LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQ
+vtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMB
+ARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy0L3QvtC5INGD0LTQ
+vtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDAeFw0xNjEyMDcxMDUx
+MTFaFw0yNjEyMDcxMDUxMTFaMIIBITEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQz
+NzUxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEeMBwGCSqGSIb3DQEJARYPZGl0
+QG1pbnN2eWF6LnJ1MTwwOgYDVQQJDDMxMjUzNzUg0LMuINCc0L7RgdC60LLQsCDR
+g9C7LiDQotCy0LXRgNGB0LrQsNGPINC0LjcxLDAqBgNVBAoMI9Cc0LjQvdC60L7Q
+vNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRUwEwYDVQQHDAzQnNC+0YHQutCy0LAx
+HDAaBgNVBAgMEzc3INCzLiDQnNC+0YHQutCy0LAxCzAJBgNVBAYTAlJVMRswGQYD
+VQQDDBLQo9CmIDEg0JjQoSDQk9Cj0KYwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYH
+KoUDAgIeAQNDAARA0o8rJm8qWVz/UI9xrRFvMBRZI3STCxA839I2vjNiSMNXUtjW
+Jatz6qfZpJPJzXHxYShC6Ng1JgilG8h+mv7LhaOCA4cwggODMAsGA1UdDwQEAwIB
+hjAdBgNVHQ4EFgQUn8JzWKh0gWpgbTP0R6RopnY5Z5swFAYJKwYBBAGCNxQCBAcM
+BVN1YkNBMA8GA1UdEwEB/wQFMAMBAf8wLwYDVR0gBCgwJjAGBgRVHSAAMAgGBiqF
+A2RxATAIBgYqhQNkcQIwCAYGKoUDZHEDMDYGBSqFA2RvBC0MKyLQmtGA0LjQv9GC
+0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDMuOSkwEgYJKwYBBAGCNxUBBAUC
+AwQABDCCAYsGA1UdIwSCAYIwggF+gBSLmDuJGFHo75wCeLjqyNQgslXJXaGCAVKk
+ggFOMIIBSjEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQG
+EwJSVTEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQ
+vtGB0LrQstCwMT8wPQYDVQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQ
+uy4g0KLQstC10YDRgdC60LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7Q
+vNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3
+MDExGjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQ
+vtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLR
+gIIQNGgeQMtB7zOpoLfIdpKaKTBZBgNVHR8EUjBQMCagJKAihiBodHRwOi8vcm9z
+dGVsZWNvbS5ydS9jZHAvZ3VjLmNybDAmoCSgIoYgaHR0cDovL3JlZXN0ci1wa2ku
+cnUvY2RwL2d1Yy5jcmwwgcYGBSqFA2RwBIG8MIG5DCPQn9CQ0JrQnCDCq9Ca0YDQ
+uNC/0YLQvtCf0YDQviBIU03Cuwwg0J/QkNCaIMKr0JPQvtC70L7QstC90L7QuSDQ
+o9CmwrsMNtCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkvMy8yLzItOTk5INC+
+0YIgMDUuMDcuMjAxMgw40JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzEv
+NC8yLTYwMyDQvtGCIDA2LjA3LjIwMTIwCAYGKoUDAgIDA0EAnWGN3cDUzgTIMNMT
+EGTdWO6KGIy/PudXB4Ybj6kGugyG0JbFxeq6dp3RfMSSs53AE33qH4XUuqS+6Fq/
+vFHZpA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG8DCCBp+gAwIBAgILAKDQmGEAAAAAAiowCAYGKoUDAgIDMIIBSjEeMBwGCSqG
+SIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEcMBoGA1UECAwT
+Nzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMT8wPQYD
+VQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0KLQstC10YDRgdC6
+0LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQ
+vtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMB
+ARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy0L3QvtC5INGD0LTQ
+vtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDAeFw0xODAxMjYwOTE1
+MzVaFw0yNzAxMjYwOTE1MzVaMIIBHDEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2
+eWF6LnJ1MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIM
+MDA3NzEwNDc0Mzc1MQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQ
+stCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMSYwJAYDVQQJDB3Rg9C7LiDQ
+otCy0LXRgNGB0LrQsNGPLCDQtC4gNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQ
+stGP0LfRjCDQoNC+0YHRgdC40LgxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLR
+j9C30Ywg0KDQvtGB0YHQuNC4MGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwIC
+HgEDQwAEQMTCJCufT5WUXGG673NQSzTWpkMarz9ssqeMnLza14iWLVfHoVNpc4ZG
++UWTjVLU3OD7wBmG2YAfYJtN5Ed/jHijggOMMIIDiDALBgNVHQ8EBAMCAYYwHQYD
+VR0OBBYEFCm0DYj5qBzFRL9Q3mVpA5VbBSPRMBQGCSsGAQQBgjcUAgQHDAVTdWJD
+QTASBgNVHRMBAf8ECDAGAQH/AgEAMDUGA1UdIAQuMCwwDAYKKwYBBAGCNwoMATAI
+BgYqhQNkcQEwCAYGKoUDZHECMAgGBiqFA2RxAzA0BgUqhQNkbwQrDCnQmtGA0LjQ
+v9GC0L7Qn9GA0L4gQ1NQICjQstC10YDRgdC40Y8gMy45KTAQBgkrBgEEAYI3FQEE
+AwIBADCCAYsGA1UdIwSCAYIwggF+gBSLmDuJGFHo75wCeLjqyNQgslXJXaGCAVKk
+ggFOMIIBSjEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQG
+EwJSVTEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQ
+vtGB0LrQstCwMT8wPQYDVQQJDDYxMjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQ
+uy4g0KLQstC10YDRgdC60LDRjywg0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7Q
+vNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3
+MDExGjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQ
+vtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLR
+gIIQNGgeQMtB7zOpoLfIdpKaKTBZBgNVHR8EUjBQMCagJKAihiBodHRwOi8vcm9z
+dGVsZWNvbS5ydS9jZHAvZ3VjLmNybDAmoCSgIoYgaHR0cDovL3JlZXN0ci1wa2ku
+cnUvY2RwL2d1Yy5jcmwwgcYGBSqFA2RwBIG8MIG5DCPQn9CQ0JrQnCDCq9Ca0YDQ
+uNC/0YLQvtCf0YDQviBIU03Cuwwg0J/QkNCaIMKr0JPQvtC70L7QstC90L7QuSDQ
+o9CmwrsMNtCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkvMy8yLzItOTk5INC+
+0YIgMDUuMDcuMjAxMgw40JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzEv
+NC8yLTYwMyDQvtGCIDA2LjA3LjIwMTIwCAYGKoUDAgIDA0EApzAuHf+HXGpko9zM
+cVoLxnGjdKcH5SHFYCfNJGTP3wZVk0E+Q2FMAuWnoBb0+iBLKjHy4LCsL2EJP9Rt
+Vc6Xxg==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG2TCCBoigAwIBAgIKPIIlGQAAAAAAGDAIBgYqhQMCAgMwggFKMR4wHAYJKoZI
+hvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3
+NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxPzA9BgNV
+BAkMNjEyNTM3NSDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQotCy0LXRgNGB0LrQ
+sNGPLCDQtC4gNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+
+0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEB
+EgwwMDc3MTA0NzQzNzUxQTA/BgNVBAMMONCT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+
+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMB4XDTEzMDcyMzA2NTQy
+MloXDTE3MDcyMjA2NTQyMlowggEgMRowGAYIKoUDA4EDAQESDDAwNzcxMDQ3NDM3
+NTEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMR4wHAYJKoZIhvcNAQkBFg9kaXRA
+bWluc3Z5YXoucnUxPDA6BgNVBAkMMzEyNTM3NSDQsy4g0JzQvtGB0LrQstCwINGD
+0LsuINCi0LLQtdGA0YHQutCw0Y8g0LQuNzEsMCoGA1UECgwj0JzQuNC90LrQvtC8
+0YHQstGP0LfRjCDQoNC+0YHRgdC40LgxFTATBgNVBAcMDNCc0L7RgdC60LLQsDEb
+MBkGA1UECAwSNzcg0LMu0JzQvtGB0LrQstCwMQswCQYDVQQGEwJSVTEbMBkGA1UE
+AwwS0KPQpiAyINCY0KEg0JPQo9CmMGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqF
+AwICHgEDQwAEQGnCxoF+JPaGUh2Hgtz3HO2pZdz4LNTgdTXFsQNlkbHaxMTZjHUe
+sfpbVTbeVsYm6Amab3zUxp4OeRZnjS/zHBGjggNyMIIDbjASBgNVHRMBAf8ECDAG
+AQH/AgEBMB0GA1UdDgQWBBTGa8ECopKqFAoKShT9GR0NV9BEnDALBgNVHQ8EBAMC
+AYYwEAYJKwYBBAGCNxUBBAMCAQAwLwYDVR0gBCgwJjAIBgYqhQNkcQEwCAYGKoUD
+ZHECMAgGBiqFA2RxAzAGBgRVHSAAMDYGBSqFA2RvBC0MK9Ca0YDQuNC/0YLQvtCf
+0YDQviBDU1AgKNCy0LXRgNGB0LjRjyAzLjYuMSkwggGLBgNVHSMEggGCMIIBfoAU
+i5g7iRhR6O+cAni46sjUILJVyV2hggFSpIIBTjCCAUoxHjAcBgkqhkiG9w0BCQEW
+D2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxHDAaBgNVBAgMEzc3INCzLiDQ
+nNC+0YHQutCy0LAxFTATBgNVBAcMDNCc0L7RgdC60LLQsDE/MD0GA1UECQw2MTI1
+Mzc1INCzLiDQnNC+0YHQutCy0LAsINGD0LsuINCi0LLQtdGA0YHQutCw0Y8sINC0
+LiA3MSwwKgYDVQQKDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQ
+uDEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMRowGAYIKoUDA4EDAQESDDAwNzcx
+MDQ3NDM3NTFBMD8GA1UEAww40JPQvtC70L7QstC90L7QuSDRg9C00L7RgdGC0L7Q
+stC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YCCEDRoHkDLQe8zqaC3yHaSmikwWQYD
+VR0fBFIwUDAmoCSgIoYgaHR0cDovL3Jvc3RlbGVjb20ucnUvY2RwL2d1Yy5jcmww
+JqAkoCKGIGh0dHA6Ly9yZWVzdHItcGtpLnJ1L2NkcC9ndWMuY3JsMIHGBgUqhQNk
+cASBvDCBuQwj0J/QkNCa0JwgwqvQmtGA0LjQv9GC0L7Qn9GA0L4gSFNNwrsMINCf
+0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0KPQpsK7DDbQl9Cw0LrQu9GO0YfQtdC9
+0LjQtSDihJYgMTQ5LzMvMi8yLTk5OSDQvtGCIDA1LjA3LjIwMTIMONCX0LDQutC7
+0Y7Rh9C10L3QuNC1IOKEliAxNDkvNy8xLzQvMi02MDMg0L7RgiAwNi4wNy4yMDEy
+MAgGBiqFAwICAwNBACc2ZYXoqvi+dWijj+v4v0v08aoDXCi9ceFN5sfI60/VXa+L
+5l70WwzgjGumbpF/H936RAVSDdn1Iz8d559EXw0=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG2zCCBoqgAwIBAgIKRYm2OgAAAAAANTAIBgYqhQMCAgMwggFKMR4wHAYJKoZI
+hvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3
+NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxPzA9BgNV
+BAkMNjEyNTM3NSDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQotCy0LXRgNGB0LrQ
+sNGPLCDQtC4gNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+
+0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEB
+EgwwMDc3MTA0NzQzNzUxQTA/BgNVBAMMONCT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+
+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMB4XDTE0MTIxOTAwMDc0
+NVoXDTE4MTIxODAwMDc0NVowggEgMRowGAYIKoUDA4EDAQESDDAwNzcxMDQ3NDM3
+NTEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMR4wHAYJKoZIhvcNAQkBFg9kaXRA
+bWluc3Z5YXoucnUxPDA6BgNVBAkMMzEyNTM3NSDQsy4g0JzQvtGB0LrQstCwINGD
+0LsuINCi0LLQtdGA0YHQutCw0Y8g0LQuNzEsMCoGA1UECgwj0JzQuNC90LrQvtC8
+0YHQstGP0LfRjCDQoNC+0YHRgdC40LgxFTATBgNVBAcMDNCc0L7RgdC60LLQsDEb
+MBkGA1UECAwSNzcg0LMu0JzQvtGB0LrQstCwMQswCQYDVQQGEwJSVTEbMBkGA1UE
+AwwS0KPQpiAyINCY0KEg0JPQo9CmMGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqF
+AwICHgEDQwAEQOvLMVc+wjT6FTTgumH8+MsKRKQQxcyGwDG1RfAflhVGGnK71rVv
+/dJiIwNclxqAp5HC1XEPUyEttGbhq1YLENGjggN0MIIDcDASBgNVHRMBAf8ECDAG
+AQH/AgEBMB0GA1UdDgQWBBQNCfpGjs8LyV+STqhFypkLWa3nUzALBgNVHQ8EBAMC
+AYYwEgYJKwYBBAGCNxUBBAUCAwEAATAvBgNVHSAEKDAmMAgGBiqFA2RxATAIBgYq
+hQNkcQIwCAYGKoUDZHEDMAYGBFUdIAAwNgYFKoUDZG8ELQwr0JrRgNC40L/RgtC+
+0J/RgNC+IENTUCAo0LLQtdGA0YHQuNGPIDMuNi4xKTCCAYsGA1UdIwSCAYIwggF+
+gBSLmDuJGFHo75wCeLjqyNQgslXJXaGCAVKkggFOMIIBSjEeMBwGCSqGSIb3DQEJ
+ARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVTEcMBoGA1UECAwTNzcg0LMu
+INCc0L7RgdC60LLQsDEVMBMGA1UEBwwM0JzQvtGB0LrQstCwMT8wPQYDVQQJDDYx
+MjUzNzUg0LMuINCc0L7RgdC60LLQsCwg0YPQuy4g0KLQstC10YDRgdC60LDRjywg
+0LQuIDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQ
+uNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3
+NzEwNDc0Mzc1MUEwPwYDVQQDDDjQk9C+0LvQvtCy0L3QvtC5INGD0LTQvtGB0YLQ
+vtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgIIQNGgeQMtB7zOpoLfIdpKaKTBZ
+BgNVHR8EUjBQMCagJKAihiBodHRwOi8vcm9zdGVsZWNvbS5ydS9jZHAvZ3VjLmNy
+bDAmoCSgIoYgaHR0cDovL3JlZXN0ci1wa2kucnUvY2RwL2d1Yy5jcmwwgcYGBSqF
+A2RwBIG8MIG5DCPQn9CQ0JrQnCDCq9Ca0YDQuNC/0YLQvtCf0YDQviBIU03Cuwwg
+0J/QkNCaIMKr0JPQvtC70L7QstC90L7QuSDQo9CmwrsMNtCX0LDQutC70Y7Rh9C1
+0L3QuNC1IOKEliAxNDkvMy8yLzItOTk5INC+0YIgMDUuMDcuMjAxMgw40JfQsNC6
+0LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzEvNC8yLTYwMyDQvtGCIDA2LjA3LjIw
+MTIwCAYGKoUDAgIDA0EAeaTj/dAfi11Hqx9NjhFhtPCU1S7RQNl7VY3B/SYF2va8
+EmAvCrIiCMeFdBlCkuw40HAzXEX5HmBeF/Zf4nWcpA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIIBTCCB7KgAwIBAgILAMk63c4AAAAABJEwCgYIKoUDBwEBAwIwggEkMR4wHAYJ
+KoZIhvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQI
+DA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy0LAxLjAs
+BgNVBAkMJdGD0LvQuNGG0LAg0KLQstC10YDRgdC60LDRjywg0LTQvtC8IDcxLDAq
+BgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYF
+KoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1
+MSwwKgYDVQQDDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDAe
+Fw0yMDEwMTUxMTQyNDlaFw0zNTEwMTUxMTQyNDlaMIIBvjEcMBoGCSqGSIb3DQEJ
+ARYNdWNAZXNwaGVyZS5ydTEYMBYGBSqFA2QBEg0xMDU3ODEyNzUyNTAyMRowGAYI
+KoUDA4EDAQESDDAwNzgwMTM5MjI3MTELMAkGA1UEBhMCUlUxLTArBgNVBAgMJDc4
+INCzLiDQodCw0L3QutGCLdCf0LXRgtC10YDQsdGD0YDQszEqMCgGA1UEBwwh0LMu
+INCh0LDQvdC60YIt0J/QtdGC0LXRgNCx0YPRgNCzMVowWAYDVQQJDFHQkdC+0LvR
+jNGI0L7QuSDQodCw0LzQv9GB0L7QvdC40LXQstGB0LrQuNC5INC/0YAuLCDQtC42
+OCwg0LvQuNGCLiDQnSwg0L/QvtC8LiAx0J0xMDAuBgNVBAsMJ9Cj0LTQvtGB0YLQ
+vtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDE4MDYGA1UECgwv0J7QntCeICLQ
+mtCe0KDQo9ChINCa0L7QvdGB0LDQu9GC0LjQvdCzINCh0J3QkyIxODA2BgNVBAMM
+L9Ce0J7QniAi0JrQntCg0KPQoSDQmtC+0L3RgdCw0LvRgtC40L3QsyDQodCd0JMi
+MGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIDQwAEQKjSuDCsuv1C
+sDnZL0/NtQiIKGQapTZPMPGcClUZLHDiGDtc+Pf3AFIjjmV9zP9ErAAUgAbq6ddJ
+Bepc0fNKMT6jggQeMIIEGjALBgNVHQ8EBAMCAYYwHQYDVR0OBBYEFM2K95NQ09rW
+Jk2gqrtws3Z+xSOYMBIGA1UdEwEB/wQIMAYBAf8CAQAwJQYDVR0gBB4wHDAIBgYq
+hQNkcQEwCAYGKoUDZHECMAYGBFUdIAAwUgYFKoUDZG8ESQxHItCa0YDQuNC/0YLQ
+vtCf0YDQviBDU1AiINCy0LXRgNGB0LjRjyA0LjAgKNC40YHQv9C+0LvQvdC10L3Q
+uNC1IDItQmFzZSkwFAYJKwYBBAGCNxQCBAcMBVN1YkNBMBIGCSsGAQQBgjcVAQQF
+AgMBAAEwggFlBgNVHSMEggFcMIIBWIAUwlTxtGvUTLfgbTa0I5Dx/sM8mwahggEs
+pIIBKDCCASQxHjAcBgkqhkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UE
+BhMCUlUxGDAWBgNVBAgMDzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc
+0L7RgdC60LLQsDEuMCwGA1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGP
+LCDQtNC+0LwgNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+
+0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEB
+EgwwMDc3MTA0NzQzNzUxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg
+0KDQvtGB0YHQuNC4ghBObUeLJvJ9ZX92jgJc49OTMIGPBgNVHR8EgYcwgYQwKqAo
+oCaGJGh0dHA6Ly9yZWVzdHItcGtpLnJ1L2NkcC9ndWMyMDIwLmNybDAqoCigJoYk
+aHR0cDovL2NvbXBhbnkucnQucnUvY2RwL2d1YzIwMjAuY3JsMCqgKKAmhiRodHRw
+Oi8vcm9zdGVsZWNvbS5ydS9jZHAvZ3VjMjAyMC5jcmwwQAYIKwYBBQUHAQEENDAy
+MDAGCCsGAQUFBzAChiRodHRwOi8vcmVlc3RyLXBraS5ydS9jZHAvZ3VjMjAyMC5j
+cnQwgfUGBSqFA2RwBIHrMIHoDDTQn9CQ0JrQnCDCq9Ca0YDQuNC/0YLQvtCf0YDQ
+viBIU03CuyDQstC10YDRgdC40LggMi4wDEPQn9CQ0JogwqvQk9C+0LvQvtCy0L3Q
+vtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgMK7DDXQ
+l9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzMvMi8yLzIzINC+0YIgMDIuMDMu
+MjAxOAw00JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzYvMTA1INC+0YIg
+MjcuMDYuMjAxODAKBggqhQMHAQEDAgNBAE6GD3vUMEe4nsUKym7rTFElpTfS0u2L
+iaIp1xykdacAAnnMEA6nhw89G0+7u0FatFi1lX1AbLR3Ra+WxOBYMp0=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFFDCCBMGgAwIBAgIQTm1HiybyfWV/do4CXOPTkzAKBggqhQMHAQEDAjCCASQx
+HjAcBgkqhkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAW
+BgNVBAgMDzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQ
+sDEuMCwGA1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+0Lwg
+NzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40Lgx
+GDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0
+NzQzNzUxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQ
+uNC4MB4XDTE4MDcwNjEyMTgwNloXDTM2MDcwMTEyMTgwNlowggEkMR4wHAYJKoZI
+hvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83
+NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy0LAxLjAsBgNV
+BAkMJdGD0LvQuNGG0LAg0KLQstC10YDRgdC60LDRjywg0LTQvtC8IDcxLDAqBgNV
+BAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYFKoUD
+ZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1MSww
+KgYDVQQDDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDBmMB8G
+CCqFAwcBAQEBMBMGByqFAwICIwEGCCqFAwcBAQICA0MABEB1OSpFp7milX33EP0i
+kge6HbZacYp9fVj8sUa5RWFXrB27SKX5SvtIGepqKev69RSYeHHKR+jT9YX2NuSK
+9wONo4IBwjCCAb4wgfUGBSqFA2RwBIHrMIHoDDTQn9CQ0JrQnCDCq9Ca0YDQuNC/
+0YLQvtCf0YDQviBIU03CuyDQstC10YDRgdC40LggMi4wDEPQn9CQ0JogwqvQk9C+
+0LvQvtCy0L3QvtC5INGD0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC9
+0YLRgMK7DDXQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzMvMi8yLzIzINC+
+0YIgMDIuMDMuMjAxOAw00JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzYv
+MTA1INC+0YIgMjcuMDYuMjAxODA/BgUqhQNkbwQ2DDTQn9CQ0JrQnCDCq9Ca0YDQ
+uNC/0YLQvtCf0YDQviBIU03CuyDQstC10YDRgdC40LggMi4wMEMGA1UdIAQ8MDow
+CAYGKoUDZHEBMAgGBiqFA2RxAjAIBgYqhQNkcQMwCAYGKoUDZHEEMAgGBiqFA2Rx
+BTAGBgRVHSAAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBTCVPG0a9RMt+BtNrQjkPH+wzybBjAKBggqhQMHAQEDAgNBAJr6/eI7rHL7
++FsQnoH2i6DVxqalbIxLKj05edpZGPLLb6B2PTAMya7pSt9hb8QnFABgsR4IE5gT
+4VVkDWbX/n4=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIIJDCCB9GgAwIBAgIKMlKzdAAAAAAETjAKBggqhQMHAQEDAjCCASQxHjAcBgkq
+hkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAWBgNVBAgM
+Dzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDEuMCwG
+A1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+0LwgNzEsMCoG
+A1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgxGDAWBgUq
+hQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQzNzUx
+LDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MB4X
+DTIwMDczMTExMTUwMloXDTM1MDczMTExMTUwMlowggHJMRgwFgYJKoZIhvcNAQkB
+Fgl1Y0BtaWwucnUxGDAWBgUqhQNkARINMTAzNzcwMDI1NTI4NDEaMBgGCCqFAwOB
+AwEBEgwwMDc3MDQyNTIyNjExCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3NyDQsy4g
+0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxJzAlBgNVBAkMHtGD
+0LsuINCX0L3QsNC80LXQvdC60LAsINC0LiAxOTFYMFYGA1UECwxPNCDRhtC10L3R
+gtGAICjRg9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5KSDQstC+0LnRgdC60L7Q
+stC+0Lkg0YfQsNGB0YLQuCAzMTY1OTFYMFYGA1UECgxP0JzQuNC90LjRgdGC0LXR
+gNGB0YLQstC+INC+0LHQvtGA0L7QvdGLINCg0L7RgdGB0LjQudGB0LrQvtC5INCk
+0LXQtNC10YDQsNGG0LjQuDFYMFYGA1UEAwxP0JzQuNC90LjRgdGC0LXRgNGB0YLQ
+stC+INC+0LHQvtGA0L7QvdGLINCg0L7RgdGB0LjQudGB0LrQvtC5INCk0LXQtNC1
+0YDQsNGG0LjQuDBmMB8GCCqFAwcBAQEBMBMGByqFAwICIwEGCCqFAwcBAQICA0MA
+BEBCe/rx153+/tfCcVxbKUmzfkIgyXnk6ItYTjinfMeBJfg9HSfAYbM8HW5xybA4
+T64sVLz0Vcp1aynqMkkOfkzjo4IEMzCCBC8wCwYDVR0PBAQDAgGGMB0GA1UdDgQW
+BBRlCwg6pyqNx6ZEloK5ffmda44qqDASBgNVHRMBAf8ECDAGAQH/AgEAMCUGA1Ud
+IAQeMBwwCAYGKoUDZHEBMAgGBiqFA2RxAjAGBgRVHSAAMFsGBSqFA2RvBFIMUNCh
+0JrQl9CYICLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiDQstC10YDRgdC40Y8gNC4w
+ICjQuNGB0L/QvtC70L3QtdC90LjQtSAyLUJhc2UpMBQGCSsGAQQBgjcUAgQHDAVT
+dWJDQTASBgkrBgEEAYI3FQEEBQIDAgACMIIBZQYDVR0jBIIBXDCCAViAFMJU8bRr
+1Ey34G02tCOQ8f7DPJsGoYIBLKSCASgwggEkMR4wHAYJKoZIhvcNAQkBFg9kaXRA
+bWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+0YHQutCy
+0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy0LAxLjAsBgNVBAkMJdGD0LvQuNGG
+0LAg0KLQstC10YDRgdC60LDRjywg0LTQvtC8IDcxLDAqBgNVBAoMI9Cc0LjQvdC6
+0L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIw
+MjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEwNDc0Mzc1MSwwKgYDVQQDDCPQnNC4
+0L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuIIQTm1HiybyfWV/do4CXOPT
+kzCBmAYDVR0fBIGQMIGNMC2gK6AphidodHRwOi8vcmVlc3RyLXBraS5ydS9jZHAv
+Z3VjX2dvc3QxMi5jcmwwLaAroCmGJ2h0dHA6Ly9jb21wYW55LnJ0LnJ1L2NkcC9n
+dWNfZ29zdDEyLmNybDAtoCugKYYnaHR0cDovL3Jvc3RlbGVjb20ucnUvY2RwL2d1
+Y19nb3N0MTIuY3JsMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcwAoYnaHR0cDov
+L3JlZXN0ci1wa2kucnUvY2RwL2d1Y19nb3N0MTIuY3J0MIH1BgUqhQNkcASB6zCB
+6Aw00J/QkNCa0JwgwqvQmtGA0LjQv9GC0L7Qn9GA0L4gSFNNwrsg0LLQtdGA0YHQ
+uNC4IDIuMAxD0J/QkNCaIMKr0JPQvtC70L7QstC90L7QuSDRg9C00L7RgdGC0L7Q
+stC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YDCuww10JfQsNC60LvRjtGH0LXQvdC4
+0LUg4oSWIDE0OS8zLzIvMi8yMyDQvtGCIDAyLjAzLjIwMTgMNNCX0LDQutC70Y7R
+h9C10L3QuNC1IOKEliAxNDkvNy82LzEwNSDQvtGCIDI3LjA2LjIwMTgwCgYIKoUD
+BwEBAwIDQQDCxdB+RmSxthiLbG2FhjAlIlokYo6Pj3bljSPmfMrbPHWUwfiriIMJ
+MuehVhq0AaOA0VVP/dfEPVMLWasaA13b
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFUTCCBP6gAwIBAgIRAJUfo0d8YQQ6rfqFhieCNEIwCgYIKoUDBwEBAwIwggE7
+MSEwHwYJKoZIhvcNAQkBFhJkaXRAZGlnaXRhbC5nb3YucnUxCzAJBgNVBAYTAlJV
+MRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQ
+utCy0LAxUzBRBgNVBAkMStCf0YDQtdGB0L3QtdC90YHQutCw0Y8g0L3QsNCx0LXR
+gNC10LbQvdCw0Y8sINC00L7QvCAxMCwg0YHRgtGA0L7QtdC90LjQtSAyMSYwJAYD
+VQQKDB3QnNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0x
+MDQ3NzAyMDI2NzAxMRUwEwYFKoUDZAQSCjc3MTA0NzQzNzUxJjAkBgNVBAMMHdCc
+0LjQvdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MB4XDTIyMDEwODEzMzIzOVoXDTQw
+MDEwODEzMzIzOVowggE7MSEwHwYJKoZIhvcNAQkBFhJkaXRAZGlnaXRhbC5nb3Yu
+cnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNV
+BAcMENCzLiDQnNC+0YHQutCy0LAxUzBRBgNVBAkMStCf0YDQtdGB0L3QtdC90YHQ
+utCw0Y8g0L3QsNCx0LXRgNC10LbQvdCw0Y8sINC00L7QvCAxMCwg0YHRgtGA0L7Q
+tdC90LjQtSAyMSYwJAYDVQQKDB3QnNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQ
+uDEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMRUwEwYFKoUDZAQSCjc3MTA0NzQz
+NzUxJjAkBgNVBAMMHdCc0LjQvdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MGYwHwYI
+KoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIDQwAEQFpKa6Qda48LjFq/drz2
+M27fFqu/g3+Prxrg9lE+KPzdbvRHwuOtbhlJ92ogmS+i7mhDDGPsWhtPVduV9Kbq
+QI6jggHQMIIBzDCB9QYFKoUDZHAEgeswgegMNNCf0JDQmtCcIMKr0JrRgNC40L/R
+gtC+0J/RgNC+IEhTTcK7INCy0LXRgNGB0LjQuCAyLjAMQ9Cf0JDQmiDCq9CT0L7Q
+u9C+0LLQvdC+0Lkg0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3R
+gtGAwrsMNdCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkvMy8yLzIvMjMg0L7R
+giAwMi4wMy4yMDE4DDTQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzcvNi00
+NDkg0L7RgiAzMC4xMi4yMDIxMD8GBSqFA2RvBDYMNNCf0JDQmtCcIMKr0JrRgNC4
+0L/RgtC+0J/RgNC+IEhTTcK7INCy0LXRgNGB0LjQuCAyLjAwDAYFKoUDZHIEAwIB
+ADBDBgNVHSAEPDA6MAgGBiqFA2RxATAIBgYqhQNkcQIwCAYGKoUDZHEDMAgGBiqF
+A2RxBDAIBgYqhQNkcQUwBgYEVR0gADAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUyRNYsUynYjp+0j88pucUfJ1wo4YwCgYIKoUDBwEB
+AwIDQQCCSXhICg3SZ/TTCtRJpBFuXGSy3PeZTEeOwdOHIv0tWiN2q0mPRzB/o6r9
+MXjGqdzfYGtCrq1l5FsXZOI5c/2S
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIH+TCCB6agAwIBAgILAM/o/2EAAAAABfYwCgYIKoUDBwEBAwIwggE7MSEwHwYJ
+KoZIhvcNAQkBFhJkaXRAZGlnaXRhbC5nb3YucnUxCzAJBgNVBAYTAlJVMRgwFgYD
+VQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy0LAx
+UzBRBgNVBAkMStCf0YDQtdGB0L3QtdC90YHQutCw0Y8g0L3QsNCx0LXRgNC10LbQ
+vdCw0Y8sINC00L7QvCAxMCwg0YHRgtGA0L7QtdC90LjQtSAyMSYwJAYDVQQKDB3Q
+nNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0xMDQ3NzAy
+MDI2NzAxMRUwEwYFKoUDZAQSCjc3MTA0NzQzNzUxJjAkBgNVBAMMHdCc0LjQvdGG
+0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MB4XDTIyMDExMDEwNTQ0NloXDTM3MDExMDEw
+NTQ0NlowggFXMSAwHgYJKoZIhvcNAQkBFhF1Y19ma0Byb3NrYXpuYS5ydTEYMBYG
+A1UECAwPNzcg0JzQvtGB0LrQstCwMRUwEwYFKoUDZAQSCjc3MTA1Njg3NjAxGDAW
+BgUqhQNkARINMTA0Nzc5NzAxOTgzMDFgMF4GA1UECQxX0JHQvtC70YzRiNC+0Lkg
+0JfQu9Cw0YLQvtGD0YHRgtC40L3RgdC60LjQuSDQv9C10YDQtdGD0LvQvtC6LCDQ
+tC4gNiwg0YHRgtGA0L7QtdC90LjQtSAxMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQ
+stCwMQswCQYDVQQGEwJSVTEuMCwGA1UECgwl0JrQsNC30L3QsNGH0LXQudGB0YLQ
+stC+INCg0L7RgdGB0LjQuDEuMCwGA1UEAwwl0JrQsNC30L3QsNGH0LXQudGB0YLQ
+stC+INCg0L7RgdGB0LjQuDBmMB8GCCqFAwcBAQEBMBMGByqFAwICIwEGCCqFAwcB
+AQICA0MABEC2K1eiN738omFBKg9fAzgFHW2u7ANlsnVh+KK46pSiJ6YpCxzp3sTi
+nybSaUBeOfPVVf7aXo7TXITryyyfbOV+o4IEYjCCBF4wEgYDVR0TAQH/BAgwBgEB
+/wIBADCBlAYFKoUDZG8EgYoMgYfQn9GA0L7Qs9GA0LDQvNC80L3Qvi3QsNC/0L/Q
+sNGA0LDRgtC90YvQuSDQutC+0LzQv9C70LXQutGBIFZpUE5ldCBQS0kgU2Vydmlj
+ZSAo0L3QsCDQsNC/0L/QsNGA0LDRgtC90L7QuSDQv9C70LDRgtGE0L7RgNC80LUg
+SFNNIDIwMDBRMikwDgYDVR0PAQH/BAQDAgHGMCcGA1UdIAQgMB4wCAYGKoUDZHEB
+MAgGBiqFA2RxAjAIBgYqhQNkcQMwDAYFKoUDZHIEAwIBATCCAX0GA1UdIwSCAXQw
+ggFwgBTJE1ixTKdiOn7SPzym5xR8nXCjhqGCAUOkggE/MIIBOzEhMB8GCSqGSIb3
+DQEJARYSZGl0QGRpZ2l0YWwuZ292LnJ1MQswCQYDVQQGEwJSVTEYMBYGA1UECAwP
+Nzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMVMwUQYD
+VQQJDErQn9GA0LXRgdC90LXQvdGB0LrQsNGPINC90LDQsdC10YDQtdC20L3QsNGP
+LCDQtNC+0LwgMTAsINGB0YLRgNC+0LXQvdC40LUgMjEmMCQGA1UECgwd0JzQuNC9
+0YbQuNGE0YDRiyDQoNC+0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcw
+MTEVMBMGBSqFA2QEEgo3NzEwNDc0Mzc1MSYwJAYDVQQDDB3QnNC40L3RhtC40YTR
+gNGLINCg0L7RgdGB0LjQuIIRAJUfo0d8YQQ6rfqFhieCNEIwHQYDVR0OBBYEFB2A
+JtKJYucEgY8eSuircpJ2Ld09MIGPBgNVHR8EgYcwgYQwKqAooCaGJGh0dHA6Ly9y
+ZWVzdHItcGtpLnJ1L2NkcC9ndWMyMDIyLmNybDAqoCigJoYkaHR0cDovL2NvbXBh
+bnkucnQucnUvY2RwL2d1YzIwMjIuY3JsMCqgKKAmhiRodHRwOi8vcm9zdGVsZWNv
+bS5ydS9jZHAvZ3VjMjAyMi5jcmwwQAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAC
+hiRodHRwOi8vcmVlc3RyLXBraS5ydS9jZHAvZ3VjMjAyMi5jcnQwgfUGBSqFA2Rw
+BIHrMIHoDDTQn9CQ0JrQnCDCq9Ca0YDQuNC/0YLQvtCf0YDQviBIU03CuyDQstC1
+0YDRgdC40LggMi4wDEPQn9CQ0JogwqvQk9C+0LvQvtCy0L3QvtC5INGD0LTQvtGB
+0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgMK7DDXQl9Cw0LrQu9GO0YfQ
+tdC90LjQtSDihJYgMTQ5LzMvMi8yLzIzINC+0YIgMDIuMDMuMjAxOAw00JfQsNC6
+0LvRjtGH0LXQvdC40LUg4oSWIDE0OS83LzYtNDQ5INC+0YIgMzAuMTIuMjAyMTAK
+BggqhQMHAQEDAgNBADczVMIbKIaVT6vfgJurMdJEyPg8kjhdNN+WzHGqDkMbr41u
+njW9HRPMaSOYXQRPnLw+z/OfJ1aTn8oEN3ETLtI=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIJKjCCCNegAwIBAgIRAu6RtgD0rCu/SKAaWxgGcKIwCgYIKoUDBwEBAwIwggFR
+MRgwFgYFKoUDZAESDTEwMjc3MDA0ODU3NTcxGjAYBggqhQMDgQMBARIMMDA3NzA1
+NDAxMzQwMQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRUw
+EwYDVQQHDAzQnNC+0YHQutCy0LAxRzBFBgNVBAkMPtC/0LXRgNC10YPQu9C+0Log
+0J7RgNC70LjQutC+0LIsINC00L7QvCAxMCwg0YHRgtGA0L7QtdC90LjQtSAxMTAw
+LgYDVQQLDCfQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAx
+LzAtBgNVBAoMJtCk0JPQkdCjICLQpNCa0J8g0KDQvtGB0YDQtdC10YHRgtGA0LAi
+MS8wLQYDVQQDDCbQpNCT0JHQoyAi0KTQmtCfINCg0L7RgdGA0LXQtdGB0YLRgNCw
+IjAeFw0yMTAzMjMxMDU0NDNaFw0yMjA2MjMxMTA0NDNaMIIBCTEYMBYGBSqFA2QB
+Eg0xMDQ3Nzk2OTQwNDY1MRowGAYIKoUDA4EDAQESDDAwNzcwNjU2MDUzNjEzMDEG
+A1UECQwq0YPQuy4g0JLQvtGA0L7QvdGG0L7QstC+INCf0L7Qu9C1LCDQtC4gNNCQ
+MRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxGDAWBgNVBAgMDzc3INCc0L7RgdC60LLQ
+sDELMAkGA1UEBhMCUlUxJDAiBgkqhkiG9w0BCQEWFTAwX09aSUwxQHJvc3JlZXN0
+ci5ydTEbMBkGA1UECgwS0KDQvtGB0YDQtdC10YHRgtGAMRswGQYDVQQDDBLQoNC+
+0YHRgNC10LXRgdGC0YAwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQEC
+AgNDAARALRZHYJmiFHpo5GA207b51rasg2UUREcaWiCX2Wf1RGZd/9MMD/saYpQD
+XgCOd8UXp9w81cZGLfTWTgNqgUNyPqOCBcUwggXBMA4GA1UdDwEB/wQEAwID+DAd
+BgNVHQ4EFgQURsFyHF02bzoGXwMgWi0wDiVXC+MwGwYDVR0lBBQwEgYIKwYBBQUH
+AwIGBiqFA2QCAjBFBggrBgEFBQcBAQQ5MDcwNQYIKwYBBQUHMAKGKWh0dHA6Ly91
+Yy5rYWRhc3RyLnJ1L3Jvb3QvaW5kZXgvcm9vdDcuY2VyMB0GA1UdIAQWMBQwCAYG
+KoUDZHEBMAgGBiqFA2RxAjCCATgGA1UdEQSCAS8wggErpIIBJzCCASMxggEfMIIB
+GwYJKoZIhvcNAQkIDIIBDNCh0LXRgNCy0LjRgSDQv9GA0LjQtdC80LAg0Y3Qu9C1
+0LrRgtGA0L7QvdC90YvRhSDQt9Cw0Y/QstC70LXQvdC40LksINC/0YDQtdC00L7R
+gdGC0LDQstC70LXQvdC40Y8g0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0YXQvtC0
+0LUg0LjRgdC/0L7Qu9C90LXQvdC40Y8g0YPRgdC70YPQs9C4INC4INCy0YvQtNCw
+0YfQuCDRgNC10LfRg9C70YzRgtCw0YLQvtCyINC+0LrQsNC30LDQvdC40Y8g0YPR
+gdC70YPQs9C4INCyINGN0LvQtdC60YLRgNC+0L3QvdC+0Lwg0LLQuNC00LUwggG9
+BgUqhQNkcASCAbIwggGuDFDQodCa0JfQmCAi0JrRgNC40L/RgtC+0J/RgNC+IENT
+UCIg0LLQtdGA0YHQuNGPIDQuMCAo0LjRgdC/0L7Qu9C90LXQvdC40LUgMi1CYXNl
+KQyBt9Cf0YDQvtCz0YDQsNC80LzQvdC+LdCw0L/Qv9Cw0YDQsNGC0L3Ri9C5INC6
+0L7QvNC/0LvQtdC60YEgItCj0LTQvtGB0YLQvtCy0LXRgNGP0Y7RidC40Lkg0YbQ
+tdC90YLRgCAi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiINCy0LXRgNGB0LjQuCAy
+LjAiICjQstCw0YDQuNCw0L3RgiDQuNGB0L/QvtC70L3QtdC90LjRjyA1KQxP0KHQ
+tdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPIOKEliDQ
+odCkLzEyNC0zOTY2INC+0YIgMTUuMDEuMjAyMQxP0KHQtdGA0YLQuNGE0LjQutCw
+0YIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPIOKEliDQodCkLzEyOC0zODY4INC+
+0YIgMjMuMDcuMjAyMDA/BgUqhQNkbwQ2DDTQodCa0JfQmCAi0JrRgNC40L/RgtC+
+0J/RgNC+IENTUCIgKNCy0LXRgNGB0LjRjyA0LjApMD8GA1UdHwQ4MDYwNKAyoDCG
+Lmh0dHA6Ly91Yy5rYWRhc3RyLnJ1L3Jldm9rZS9pbmRleC9yZXZva2VkNy5jcmww
+ggFfBgNVHSMEggFWMIIBUoAUEPru7ZjoSQxGYhsL4RgIuKl9k5uhggEspIIBKDCC
+ASQxHjAcBgkqhkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUx
+GDAWBgNVBAgMDzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC6
+0LLQsDEuMCwGA1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+
+0LwgNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC4
+0LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3
+MTA0NzQzNzUxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB
+0YHQuNC4ggoiLy26AAAAAATXMCsGA1UdEAQkMCKADzIwMjEwMzIzMTA1NDQzWoEP
+MjAyMjA2MjMxMDU0NDNaMAoGCCqFAwcBAQMCA0EAt5RwEoIF+aFW9cW7Xk1K+xMB
+GIOA4trSRqBaOQ8LCpEnAjhivJIBMaaw0W5VcNHbHf+bEz2yzVWH9F6fUP2Q0w==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIBVDCB+6ADAgECAgwB3q3A3gCMGXg8etYwCgYIKoZIzj0EAw
+IwHDEaMBgGA1UEAwwRVENJIEVDRFNBIFJPT1QgQTEwHhcNMjIw
+MzMwMDkzMzE4WhcNMzIwMzMwMDkzMzE4WjAcMRowGAYDVQQDDB
+FUQ0kgRUNEU0EgUk9PVCBBMTBZMBMGByqGSM49AgEGCCqGSM49
+AwEHA0IABJni7LJT4Gj86pG0s9wOefWgqgp/EGf4ZcSxNgAJfh
+cl6WYNoWaZfflki4Rd0VzAJgbaTSW26zuv2mGM61txD96jIzAh
+MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCC
+qGSM49BAMCA0gAMEUCIDKjKPoaZrqtljmuy60G1PYINvR3A1eL
+OzT4RfhGBTrBAiEAhJL7IeLDbo2eZAIp4zioaIpo1hVyXkABNb
+npOTQ9KPs=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIHrDCCB1mgAwIBAgIKIi8tugAAAAAE1zAKBggqhQMHAQEDAjCCASQxHjAcBgkq
+hkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAWBgNVBAgM
+Dzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDEuMCwG
+A1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+0LwgNzEsMCoG
+A1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgxGDAWBgUq
+hQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQzNzUx
+LDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MB4X
+DTIwMTEyMDA4NDkyMloXDTM1MTEyMDA4NDkyMlowggFRMRgwFgYFKoUDZAESDTEw
+Mjc3MDA0ODU3NTcxGjAYBggqhQMDgQMBARIMMDA3NzA1NDAxMzQwMQswCQYDVQQG
+EwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQ
+utCy0LAxRzBFBgNVBAkMPtC/0LXRgNC10YPQu9C+0Log0J7RgNC70LjQutC+0LIs
+INC00L7QvCAxMCwg0YHRgtGA0L7QtdC90LjQtSAxMTAwLgYDVQQLDCfQo9C00L7R
+gdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAxLzAtBgNVBAoMJtCk0JPQ
+kdCjICLQpNCa0J8g0KDQvtGB0YDQtdC10YHRgtGA0LAiMS8wLQYDVQQDDCbQpNCT
+0JHQoyAi0KTQmtCfINCg0L7RgdGA0LXQtdGB0YLRgNCwIjBmMB8GCCqFAwcBAQEB
+MBMGByqFAwICIwEGCCqFAwcBAQICA0MABEAub08wAHxEYraLidGC8LljGlvN3Sm+
+C86kQlpihsNvBHeiZc9RcTKYQn9I2Bezpc6nOWzXcBrnV4OtTvF8N/S8o4IEMzCC
+BC8wCwYDVR0PBAQDAgGGMB0GA1UdDgQWBBQQ+u7tmOhJDEZiGwvhGAi4qX2TmzAS
+BgNVHRMBAf8ECDAGAQH/AgEAMCUGA1UdIAQeMBwwBgYEVR0gADAIBgYqhQNkcQEw
+CAYGKoUDZHECMFsGBSqFA2RvBFIMUNCh0JrQl9CYICLQmtGA0LjQv9GC0L7Qn9GA
+0L4gQ1NQIiDQstC10YDRgdC40Y8gNC4wICjQuNGB0L/QvtC70L3QtdC90LjQtSAy
+LUJhc2UpMBQGCSsGAQQBgjcUAgQHDAVTdWJDQTASBgkrBgEEAYI3FQEEBQIDAgAC
+MIIBZQYDVR0jBIIBXDCCAViAFMJU8bRr1Ey34G02tCOQ8f7DPJsGoYIBLKSCASgw
+ggEkMR4wHAYJKoZIhvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJV
+MRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQ
+utCy0LAxLjAsBgNVBAkMJdGD0LvQuNGG0LAg0KLQstC10YDRgdC60LDRjywg0LTQ
+vtC8IDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQ
+uNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3
+NzEwNDc0Mzc1MSwwKgYDVQQDDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7R
+gdGB0LjQuIIQTm1HiybyfWV/do4CXOPTkzCBmAYDVR0fBIGQMIGNMC2gK6Aphido
+dHRwOi8vcmVlc3RyLXBraS5ydS9jZHAvZ3VjX2dvc3QxMi5jcmwwLaAroCmGJ2h0
+dHA6Ly9jb21wYW55LnJ0LnJ1L2NkcC9ndWNfZ29zdDEyLmNybDAtoCugKYYnaHR0
+cDovL3Jvc3RlbGVjb20ucnUvY2RwL2d1Y19nb3N0MTIuY3JsMEMGCCsGAQUFBwEB
+BDcwNTAzBggrBgEFBQcwAoYnaHR0cDovL3JlZXN0ci1wa2kucnUvY2RwL2d1Y19n
+b3N0MTIuY3J0MIH1BgUqhQNkcASB6zCB6Aw00J/QkNCa0JwgwqvQmtGA0LjQv9GC
+0L7Qn9GA0L4gSFNNwrsg0LLQtdGA0YHQuNC4IDIuMAxD0J/QkNCaIMKr0JPQvtC7
+0L7QstC90L7QuSDRg9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC
+0YDCuww10JfQsNC60LvRjtGH0LXQvdC40LUg4oSWIDE0OS8zLzIvMi8yMyDQvtGC
+IDAyLjAzLjIwMTgMNNCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkvNy82LzEw
+NSDQvtGCIDI3LjA2LjIwMTgwCgYIKoUDBwEBAwIDQQBkwci6wQBRV9DuqI6e3Qtp
+VfS26StAt0Q3G+GXxE9HT9toUbddJCqgXXDeiUHLZDkLpcxaroaA9dzmr4IGzopO
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIGEzCCA/ugAwIBAgIQfVtRJrR2uhHbdBYLvFMNpzANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgx
+MTAyMDAwMDAwWhcNMzAxMjMxMjM1OTU5WjCBjzELMAkGA1UEBhMCR0IxGzAZBgNV
+BAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UE
+ChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5TZWN0aWdvIFJTQSBEb21haW4g
+VmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA1nMz1tc8INAA0hdFuNY+B6I/x0HuMjDJsGz99J/LEpgPLT+N
+TQEMgg8Xf2Iu6bhIefsWg06t1zIlk7cHv7lQP6lMw0Aq6Tn/2YHKHxYyQdqAJrkj
+eocgHuP/IJo8lURvh3UGkEC0MpMWCRAIIz7S3YcPb11RFGoKacVPAXJpz9OTTG0E
+oKMbgn6xmrntxZ7FN3ifmgg0+1YuWMQJDgZkW7w33PGfKGioVrCSo1yfu4iYCBsk
+Haswha6vsC6eep3BwEIc4gLw6uBK0u+QDrTBQBbwb4VCSmT3pDCg/r8uoydajotY
+uK3DGReEY+1vVv2Dy2A0xHS+5p3b4eTlygxfFQIDAQABo4IBbjCCAWowHwYDVR0j
+BBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFI2MXsRUrYrhd+mb
++ZsF4bgBjWHhMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMB0G
+A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAbBgNVHSAEFDASMAYGBFUdIAAw
+CAYGZ4EMAQIBMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRydXN0
+LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDB2Bggr
+BgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRydXN0LmNv
+bS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZaHR0cDov
+L29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAMr9hvQ5Iw0/H
+ukdN+Jx4GQHcEx2Ab/zDcLRSmjEzmldS+zGea6TvVKqJjUAXaPgREHzSyrHxVYbH
+7rM2kYb2OVG/Rr8PoLq0935JxCo2F57kaDl6r5ROVm+yezu/Coa9zcV3HAO4OLGi
+H19+24rcRki2aArPsrW04jTkZ6k4Zgle0rj8nSg6F0AnwnJOKf0hPHzPE/uWLMUx
+RP0T7dWbqWlod3zu4f+k+TY4CFM5ooQ0nBnzvg6s1SQ36yOoeNDT5++SR2RiOSLv
+xvcRviKFxmZEJCaOEDKNyJOuB56DPi/Z+fVGjmO+wea03KbNIaiGCpXZLoUmGv38
+sbZXQm2V0TP2ORQGgkE49Y9Y3IBbpNV9lXj9p5v//cWoaasm56ekBYdbqbe4oyAL
+l6lFhd2zi+WJN44pDfwGF/Y4QA5C5BIG+3vzxhFoYt/jmPQT2BVPi7Fp2RBgvGQq
+6jG35LWjOhSbJuMLe/0CjraZwTiXWTb2qHSihrZe68Zk6s+go/lunrotEbaGmAhY
+LcmsJWTyXnW0OMGuf1pGg+pRyrbxmRE1a6Vqe8YAsOf4vmSyrcjC8azjUeqkk+B5
+yOGBQMkKW+ESPMFgKuOXwIlCypTPRpgSabuY0MLTDXJLR27lk8QyKGOHQ+SwMj4K
+00u/I5sUKUErmgQfky3xxzlIPK1aEn8=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
+IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
+BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
+MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
+YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
+dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
+BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
+papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
+DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
+KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
+XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
+rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
+BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
+Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
+LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
+MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
+ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
+gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
+YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
+b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
+9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
+zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
+OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
+HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
+2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
+oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
+KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
+m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
+MdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIFjzCCBTSgAwIBAgIQLk/0vCQf0ZZ/H92kT/tl/jALBglghkgBZQMEAwIwga4x
+CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xKDAmBgNVBAsTH0Nl
+cnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xODA2BgNVBAsTLyhjKSAyMDEy
+IHRoYXd0ZSwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MSQwIgYDVQQD
+Ext0aGF3dGUgUHJpbWFyeSBSb290IENBIC0gRzQwHhcNMTIxMDE1MDAwMDAwWhcN
+MzcxMjAxMjM1OTU5WjCBrjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
+SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4
+MDYGA1UECxMvKGMpIDIwMTIgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg
+dXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHNDCC
+A0YwggI5BgcqhkjOOAQBMIICLAKCAQEAuKVG7qscYrwa+gRUVIUUaIbYo3g8dU85
+I2dmd62jZc6E4M7CnLmimI1lYeQ8QhGJvNGhvIZQoK62KtiKAmR7CZ8FeDPujvMx
+gh/NiWmiTXHKUABzR9rTX+GFXGIzKpwLgYEH+aX4T8DGOJbT1NQjvtrUD+OjUv/t
+MlC7Sf+/RGlQe9vanTKB1wenDEKaO/9QgleE29AtpdzuGzTVI2VwL1kNA8Ez9XdE
+r6WTYOI+CX/z9O/itvXTThpPbHoXN8lbOEKHSnINQeURhU4dfcTClLj01T8j47LO
+yg7WxlpRWGNjRh/FAeU6ETZvd4UE1Zq7Uq6XVnxgc3p47vkpXdLVLQIhALPolWFX
+lPUCYH74I/jxM3/Zzuw9PVr8b3okbIFwNq+hAoIBABEgze+P0RWy3WZy1w6reNOI
+0n5QtwiwvCnDGt/HPO7NeB0qhyLXl9NwVdj1OmN9jn3mfATGrpuJZOBQkoAfTp+Y
+rz6SN9nS9ityIvDpZu7+XEp8qU95xsJ69rS7lRle2qPT5iolHGKA4czbwOLephg8
+GGIoIorQcxgUVRHXFhvswgcAxHv5fG3vX+YTnycrvPsVt+Uv5vteIUyBD5J6ybOg
+xEEgtSeBKkrEDHTTQU/8ZxJR1Wd3CmYJXICvbG7GnbX5BSVSoPqC58KBqqjY9j+F
+IyAV/Vyi1VqVr+qxfzrwXqxS0e6eZXIe4/ztknFOwrfyUBLnsQkfG7c8EWvcMsAD
+ggEFAAKCAQBTC/9/4vZWeiazdA/ujWrT/ZypqHFDIAXaIe/l8yMhZJnAxkJGlsK1
+aGwMtcVCzrxrRQXMocvNntNTv5SIA2yg5HkHO1z/2mb360X4u374cVmNbZN6vKi2
+RwIngV/b4SKpT8pCwUXOOO9wHZYQJi/aHXGBwkkrHLknS9RvEXaHd+NGCcTc3MRp
+ANpGl5ri4FQ0aDdw8OT3ITHvpUxfmv5z7z6U3ZMwnio7ZCVFj0YBD900oiHhlpwY
+LbbJiVIWvze+hxsIBOxVCJHf7vr0FqN+8BJK4SHKHgAI/IHOz3vM6fXAevDj/F9F
+7IQYh94T6mGueqYylB9ib/diNcqfO7Nqo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUx2eJZCLxnbHzi4Omwg6Zk1F265YwCwYJ
+YIZIAWUDBAMCA0gAMEUCIQCu5jrSlbF2eM49USoLQ36j8pTHZKIvLvWARxfM6dvr
+cwIgXKaxL+n4xluL6+8J3bYiE/wb5wUoC8hlSfg82gzLMd8=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
+qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
+BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
+NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
+LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
+A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
+W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
+3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
+6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
+Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
+NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
+r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
+DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
+YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
+/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
+LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
+jVaMaA==
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIICsDCCAhmgAwIBAgIQZ8jh6OO+HL38kTuOpiOHSTANBgkqhkiG9w0BAQUFADCB
+izELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxML
+RHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENl
+cnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcN
+OTcwMTAxMDAwMDAwWhcNMjEwMTAxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTAT
+BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNV
+BAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNV
+BAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
+MIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u
+6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522
+FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR
+MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS+mqF4EF+3kKMZ/F
+QfRWVKvpwuWXjhj+kckMPiZkyaFMJ2SnvQGTVXFuF0853BvcSTUQOSP/ypvIz2Y/
+3Ewa1IEGQlIf4SaxFhe65nByMUToTo1b5NP50OOPJWQx5yr4GIg2GlLFDUE1G2m3
+JvUXzMEZXkt8XOKDgJH6L/uatxY=
+-----END CERTIFICATE-----
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIG1TCCBL2gAwIBAgIQbFWr29AHksedBwzYEZ7WvzANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjAw
+MTMwMDAwMDAwWhcNMzAwMTI5MjM1OTU5WjBLMQswCQYDVQQGEwJBVDEQMA4GA1UE
+ChMHWmVyb1NTTDEqMCgGA1UEAxMhWmVyb1NTTCBSU0EgRG9tYWluIFNlY3VyZSBT
+aXRlIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAhmlzfqO1Mdgj
+4W3dpBPTVBX1AuvcAyG1fl0dUnw/MeueCWzRWTheZ35LVo91kLI3DDVaZKW+TBAs
+JBjEbYmMwcWSTWYCg5334SF0+ctDAsFxsX+rTDh9kSrG/4mp6OShubLaEIUJiZo4
+t873TuSd0Wj5DWt3DtpAG8T35l/v+xrN8ub8PSSoX5Vkgw+jWf4KQtNvUFLDq8mF
+WhUnPL6jHAADXpvs4lTNYwOtx9yQtbpxwSt7QJY1+ICrmRJB6BuKRt/jfDJF9Jsc
+RQVlHIxQdKAJl7oaVnXgDkqtk2qddd3kCDXd74gv813G91z7CjsGyJ93oJIlNS3U
+gFbD6V54JMgZ3rSmotYbz98oZxX7MKbtCm1aJ/q+hTv2YK1yMxrnfcieKmOYBbFD
+hnW5O6RMA703dBK92j6XRN2EttLkQuujZgy+jXRKtaWMIlkNkWJmOiHmErQngHvt
+iNkIcjJumq1ddFX4iaTI40a6zgvIBtxFeDs2RfcaH73er7ctNUUqgQT5rFgJhMmF
+x76rQgB5OZUkodb5k2ex7P+Gu4J86bS15094UuYcV09hVeknmTh5Ex9CBKipLS2W
+2wKBakf+aVYnNCU6S0nASqt2xrZpGC1v7v6DhuepyyJtn3qSV2PoBiU5Sql+aARp
+wUibQMGm44gjyNDqDlVp+ShLQlUH9x8CAwEAAaOCAXUwggFxMB8GA1UdIwQYMBaA
+FFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1UdDgQWBBTI2XhootkZaNU9ct5fCj7c
+tYaGpjAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHSUE
+FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0gBBswGTANBgsrBgEEAbIxAQIC
+TjAIBgZngQwBAgEwUAYDVR0fBEkwRzBFoEOgQYY/aHR0cDovL2NybC51c2VydHJ1
+c3QuY29tL1VTRVJUcnVzdFJTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHYG
+CCsGAQUFBwEBBGowaDA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1c3Qu
+Y29tL1VTRVJUcnVzdFJTQUFkZFRydXN0Q0EuY3J0MCUGCCsGAQUFBzABhhlodHRw
+Oi8vb2NzcC51c2VydHJ1c3QuY29tMA0GCSqGSIb3DQEBDAUAA4ICAQAVDwoIzQDV
+ercT0eYqZjBNJ8VNWwVFlQOtZERqn5iWnEVaLZZdzxlbvz2Fx0ExUNuUEgYkIVM4
+YocKkCQ7hO5noicoq/DrEYH5IuNcuW1I8JJZ9DLuB1fYvIHlZ2JG46iNbVKA3ygA
+Ez86RvDQlt2C494qqPVItRjrz9YlJEGT0DrttyApq0YLFDzf+Z1pkMhh7c+7fXeJ
+qmIhfJpduKc8HEQkYQQShen426S3H0JrIAbKcBCiyYFuOhfyvuwVCFDfFvrjADjd
+4jX1uQXd161IyFRbm89s2Oj5oU1wDYz5sx+hoCuh6lSs+/uPuWomIq3y1GDFNafW
++LsHBU16lQo5Q2yh25laQsKRgyPmMpHJ98edm6y2sHUabASmRHxvGiuwwE25aDU0
+2SAeepyImJ2CzB80YG7WxlynHqNhpE7xfC7PzQlLgmfEHdU+tHFeQazRQnrFkW2W
+kqRGIq7cKRnyypvjPMkjeiV9lRdAM9fSJvsB3svUuu1coIG1xxI1yegoGM4r5QP4
+RGIVvYaiI76C0djoSbQ/dkIUUXQuB8AL5jyH34g3BZaaXyvpmnV4ilppMXVAnAYG
+ON51WhJ6W0xNdNJwzYASZYH+tmCWI+N60Gv2NNMGHwMZ7e9bXgzUCZH5FaBFDGR5
+S9VWqHB73Q+OyIVvIbKYcSc2w/aSuFKGSA==
+-----END CERTIFICATE-----
--- /dev/null
+198.41.0.4
+2001:503:ba3e::2:30
+170.247.170.2
+2801:1b8:10::b
+192.33.4.12
+2001:500:2::c
+199.7.91.13
+2001:500:2d::d
+192.203.230.10
+2001:500:a8::e
+192.5.5.241
+2001:500:2f::f
+192.112.36.4
+2001:500:12::d0d
+198.97.190.53
+2001:500:1::53
+192.36.148.17
+2001:7fe::53
+192.58.128.30
+2001:503:c27::2:30
+193.0.14.129
+2001:7fd::1
+199.7.83.42
+2001:500:9f::42
+202.12.27.33
+2001:dc3::35
--- /dev/null
+redo-ifchange root-servers.net.zone
+perl -lane 'print $F[$#F] if $F[3] =~ /^AA?/' < root-servers.net.zone |
+while read addr ; do
+ [ "${addr#*:}" = "$addr" ] && echo $addr ||
+ sipcalc $addr | perl -lane 'print $F[$#F] if /^Compressed address/'
+done
--- /dev/null
+185.34.136.178|uz56xw8h7fw656bpfv84pctjbl9rbzbqrw4rpzdhtvzyltpjdmx0zq
+2a00:dcc7:d3ff:88b2::1|uz56xw8h7fw656bpfv84pctjbl9rbzbqrw4rpzdhtvzyltpjdmx0zq
+192.184.93.99|uz5dkwpjfvfwb9rh1qj93mtup0gw65s6j7vqqumch0r9gzlu8qxx39
+2604:180:1:92a::3|uz5dkwpjfvfwb9rh1qj93mtup0gw65s6j7vqqumch0r9gzlu8qxx39
--- /dev/null
+185.66.36.55|uz5mj60yr9tnudkkpcglw1y0w6dlh78j1l4gk4z7t8bsf1u4d48wlq
+37.157.196.86|uz5mj60yr9tnudkkpcglw1y0w6dlh78j1l4gk4z7t8bsf1u4d48wlq
+2a02:2b88:2:1::127d:1|uz5mj60yr9tnudkkpcglw1y0w6dlh78j1l4gk4z7t8bsf1u4d48wlq
+2a03:1e20:0:5::2|uz5mj60yr9tnudkkpcglw1y0w6dlh78j1l4gk4z7t8bsf1u4d48wlq
--- /dev/null
+104.248.15.206|uz5dns1bx64zu3pgn9nm4zfvmh2vy4hpjy7nkjz6qjcu325bg9hzcx
+104.207.143.9|uz5dns2sdrnxskf5lqt46v34cdlfqb9q2lvvmpr95g3l1qh0148sf6
--- /dev/null
+wget -O $3.gz https://www.internic.net/zones/root-servers.net.zone.gz
+wget -O $3.gz.sig https://www.internic.net/zones/root-servers.net.zone.gz.sig
+gpg --keyring ~/work/keyrings/all.kbx --verify $3.gz.sig
+rm $3.gz.sig
+gunzip $3.gz
--- /dev/null
+45.10.110.72|uz5nulnd504gp3s7sdmdl5l2gxc762hpw926t90k39ltxp67flbccn
+2a04:ac00:a:146::25|uz5nulnd504gp3s7sdmdl5l2gxc762hpw926t90k39ltxp67flbccn
+91.211.5.21|uz544mqwggqbf3z4utlhfqn45vpbpq78nc63hpg5u2ut29stkt0pkr
+2a03:e2c0:2663:1::1|uz544mqwggqbf3z4utlhfqn45vpbpq78nc63hpg5u2ut29stkt0pkr
--- /dev/null
+131.193.32.108|uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1
+131.193.32.109|uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1
--- /dev/null
+wget -O $3 http://data.iana.org/root-anchors/$1
--- /dev/null
+. 172800 IN DNSKEY 257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU=
--- /dev/null
+redo-ifchange icannbundle.pem root-anchors.p7s root-anchors.xml
+cmd="unbound-anchor -a $3 -c icannbundle.pem -x root-anchors.xml -s root-anchors.p7s"
+$cmd || :
+$cmd
bt-max-open-files=1000
bt-max-peers=0
bt-save-metadata=true
+dht-entry-point=dht.cypherpunks.ru:8991
+dht-entry-point6=dht.cypherpunks.ru:8991
enable-dht=true
enable-dht6=true
seed-ratio=0.0
disk-cache=0
file-allocation=trunc
force-save=true
+#disable-ipv6=true
+++ /dev/null
-#!/bin/sh
-
-ffmpeg -i "$1" -vf scale=w=iw/4:h=ih/4 -c:v mpeg2video -b:v 10000k -y "$1".mpg
+++ /dev/null
-#!/bin/sh
-
-/usr/local/sbin/bitlbee -c ~/.bitlbee.conf
+++ /dev/null
-#!/bin/sh
-
-clang-format -style="`cat ~/.clang-format`" $@
--- /dev/null
+#!/usr/bin/env zsh
+
+cueprint -i cue -t "%t\n" =(iconv -f ${2:-latin1} -t utf-8 "$1") | while read name; do
+ (( i++ ))
+ printf -v num %02d $i
+ name=${name:gs#/#,}
+ print -r mv split-track${num}.wav ${num}.${(qq)name}.wav
+done
+++ /dev/null
-#!/bin/sh
-
-c=1
-iconv -f latin1 -t utf-8 "$1" |
-sed -n 's/^ *TITLE .\(.*\)".*$/\1/p' | while read trackname; do
- v=`printf "%02d\n" $c`
- echo mv split-track$v.wav $v.\"$trackname\".wav
- c=$(( $c + 1 ))
-done
+++ /dev/null
-#!/bin/sh
-
-# natural logarithm: 1000lLx 10lLx /p
-# sum of everything in stack: lSxp
-pre="5k 10o \
-[1-d2+/d2*Skd*Sy0Ss10K^Sp[d1r/lk*ls+lsrdss-lp*d*1[s_q]s_>_lkly*sk2+lfx]Sf1lfxLsLkLyLpLfs_s_s_s_]sL \
-[0d[+2z>a]salax]sS
-"
-exec rlwrap \
- --history-filename /tmp/.dc_history \
- --substitute-prompt "> " \
- --prompt-colour=red \
- --wait-before-prompt -1 \
- --pre-given "$pre" dc
--- /dev/null
+#!/bin/sh
+
+exec aria2c --bt-save-metadata --bt-metadata-only "$1"
#!/usr/bin/env perl
# Simple script for substitute placeholders in Texinfo files with
# docstring values found in source code.
-# Copyright (C) 2020 Sergey Matveev (stargrave@stargrave.org)
+# Copyright (C) 2020-2024 Sergey Matveev (stargrave@stargrave.org)
#
# If you C source code contains:
#
if ($ARGV[0] eq "-v") {
$verbose = 1;
shift @ARGV;
-};
-my @srcDirs = split / /, $ARGV[0];
-my $docDir = $ARGV[1];
-my $docBuildDir = $ARGV[2];
-my @exts = split / /, defined $ENV{EXTS} ? $ENV{EXTS} : "c h h.in";
+}
+my $outDir = $ARGV[0];
+my @srcDirs = split /:/, $ARGV[1];
+my @docDirs = split /:/, $ARGV[2];
+my @exts = split / /, (defined $ENV{EXTS}) ? $ENV{EXTS} : "c h h.in";
my %docstrings;
open(my $src, "<:encoding(UTF-8)", "$srcDir/$fn") or
die "can not open $srcDir/$fn";
my $curEntry;
- while(<$src>) {
+ while (<$src>) {
chomp;
if (not /^\/\//) {
if (defined $curEntry) {
undef $curEntry;
- };
+ }
next;
- };
+ }
s/^\/\/ ?//;
if (/^TEXINFO: (.*)$/) {
$curEntry = $1;
$docstrings{$curEntry} = "";
print "\t$fn: $curEntry\n" if $verbose;
next;
- };
- ( $docstrings{$curEntry} .= "$_\n" ) if defined $curEntry;
- };
+ }
+ ($docstrings{$curEntry} .= "$_\n") if defined $curEntry;
+ }
close $src;
- };
+ }
closedir $dir;
-};
+}
-print "doc: $docDir\n" if $verbose;
-opendir(my $dir, $docDir) or die "can not open $docDir";
-foreach my $fn (readdir $dir) {
- next unless $fn =~ /\.texi$/;
- open(my $src, "<:encoding(UTF-8)", "$docDir/$fn") or
- die "can not open $docDir/$fn";
- open(my $dst, ">:encoding(UTF-8)", "$docBuildDir/$fn") or
- die "can not open $docBuildDir/$fn";
- while(<$src>) {
- ( print($dst $_) and next ) unless /^\s*\@DOCSTRING (.*)\@$/;
- print "\t$fn: $1\n" if $verbose;
- die "unable to find docstring: $1" unless defined $docstrings{$1};
- print $dst $docstrings{$1};
- };
- close $src;
- close $dst;
-};
-closedir $dir;
+foreach my $docDir (@docDirs) {
+ print "doc: $docDir\n" if $verbose;
+ opendir(my $dir, $docDir) or die "can not open $docDir";
+ ($docDir .= "/") unless $docDir =~ /\/$/;
+ ($docDir = "") if $docDir eq "./";
+ foreach my $fn (readdir $dir) {
+ next unless $fn =~ /\.texi$/;
+ $fn = $docDir . $fn;
+ open(my $src, "<:encoding(UTF-8)", $fn) or die "can not open $fn";
+ mkdir "$outDir/$docDir";
+ open(my $dst, ">:encoding(UTF-8)", "$outDir/$fn") or
+ die "can not open $outDir/$fn";
+ while (<$src>) {
+ (print($dst $_) and next) unless /^\s*\@DOCSTRING (.*)\@$/;
+ print "\t$fn: $1\n" if $verbose;
+ die "unable to find docstring: $1" unless defined $docstrings{$1};
+ print $dst $docstrings{$1};
+ }
+ close $src;
+ close $dst;
+ }
+ closedir $dir;
+}
+++ /dev/null
-#!/bin/sh
-
-exiftool -all= -overwrite_original $@
--- /dev/null
+#!/bin/sh
+
+h=${1#*//}
+h=${h%%/*}
+echo "$1" | tcpclient -DHR -l 0 $h 1965 tlsc -name $h -insecure sh -c "addcr >&7 ; delcr <&6"
--- /dev/null
+#!/bin/sh
+
+one=`dd if=/dev/random bs=1 count=1 2>/dev/null | xxd -p`
+two=`dd if=/dev/random bs=1 count=2 2>/dev/null | xxd -p`
+thr=`dd if=/dev/random bs=1 count=2 2>/dev/null | xxd -p`
+sipcalc fd${one}:${two}:${thr}::/48
--- /dev/null
+#!/bin/sh -e
+# Generate list of available git repositories
+
+cat pre.txt
+cat <<EOF
+-------------------------------+------------------+---------------------------
+Repository name | Latest change | Description, upstream URLs
+-------------------------------+------------------+---------------------------
+EOF
+
+find . -name '*.git' -maxdepth 1 -mindepth 1 | sort | while read dir ; do
+ cd $dir
+ for commit in master main trunk ; do
+ mtime=`git cat-file -p $commit 2>/dev/null | perl -lane 'print $F[$#F - 1] if /^author/'`
+ [ -z "$mtime" ] || break
+ done
+ [ -z "$mtime" ] || mtime=`date -u -j -f %s $mtime "+%Y-%m-%d %H:%M"`
+ printf "%-30s | %16s | %s\n" ${dir#./} "$mtime" "`cat description`"
+ git remote | while read remote ; do
+ printf "%-30s | %16s | %s\n" "" "" "`git remote get-url $remote`"
+ done
+ cd ..
+done
+++ /dev/null
-#!/bin/sh
-
-gpg --compress-level 0 --encrypt --force-aead --cipher-algo AES-128 $@
--- /dev/null
+#!/bin/sh -e
+
+# -de1
+
+exec rlwrap \
+ --prompt-colour=red \
+ --substitute-prompt "> " \
+ perl -Mbignum -MEncode -MData::Dumper \
+ -e '$Data::Dumper::Useqq = 1;' \
+ -e '*x = \&Dumper; $_dummy = $x;' \
+ -wnE 'say eval()//$@'
+++ /dev/null
-#!/bin/sh
-
-jpegtran -optimize -progressive -perfect -copy none $@
--- /dev/null
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+my %hdrs;
+my $hdr;
+my @hdrs_order;
+my %hdrs_dup = (
+ "Content-Disposition", 1,
+ "Date" => 1,
+ "From" => 1,
+ "Message-ID" => 1,
+ "Subject" => 1,
+ "To" => 1,
+);
+
+while (<>) {
+ chomp;
+ last if ($_ eq "");
+ /^([^:]+): (.*)$/;
+ if (/^\s/) {
+ @{$hdrs{$hdr}}[-1] .= "\n$_";
+ next;
+ };
+ $hdr = $1;
+ my $val = $2;
+ (defined $hdrs{$hdr}) ? (push @{$hdrs{$hdr}}, $val) : ($hdrs{$hdr} = [$val]);
+ push @hdrs_order, $hdr;
+};
+
+my %seen;
+foreach (@hdrs_order) {
+ next if (defined $seen{$_});
+ $seen{$_} = 1;
+ if (defined $hdrs_dup{$_}) {
+ print "$_: @{$hdrs{$_}}[-1]\n";
+ next;
+ };
+ foreach my $val (@{$hdrs{$_}}) {
+ print "$_: $val\n";
+ };
+};
+
+print "\n";
+while (<>) { print };
+++ /dev/null
-#!/usr/bin/env python3.6
-
-import sys
-
-fn = sys.argv[1]
-out = sys.argv[2]
-with open(fn, "rb") as fd:
- lines = fd.read().split(b"\n")
-
-def dup(lines, what):
- idx = []
- met = False
- for i, line in enumerate(lines):
- if line == "":
- break
- if met:
- if line.startswith(b" "):
- idx.append(i)
- continue
- else:
- met = False
- if line.startswith(what):
- if len(idx) == 0:
- idx.append(i)
- met = True
- else:
- return [l for n, l in enumerate(lines) if n not in idx]
- return lines
-
-lines = dup(lines, b"To")
-lines = dup(lines, b"From")
-lines = dup(lines, b"Subject")
-with open(out, "wb") as fd:
- fd.write(b"\n".join(lines))
--- /dev/null
+#!/bin/sh -e
+
+sipcalc $1 |
+sed -n 's/://g ; s/^Expanded.*-.//p' |
+xxd -r -p |
+perl -MMIME::Base32 -ne 'print lc encode_base32 $_; print ".meshname\n"'
+++ /dev/null
-#!/bin/sh
-
-mirror-page.sh "$1" \
- --warc-file $name-$(date '+%Y%M%d%H%m%S') \
- --no-warc-compression \
- --no-warc-keep-log \
- $@
+++ /dev/null
-#!/bin/sh
-
-user_agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27"
-
-name=$1
-shift
-mkdir -p $name
-
-cd $name
-wget \
- --page-requisites \
- --convert-links \
- --adjust-extension \
- --restrict-file-names=ascii \
- --span-hosts \
- --random-wait \
- --execute robots=off \
- --user-agent "$user_agent" \
- --reject '*.woff*,*.ttf,*.eot,*.js' \
- --tries 10 \
- $@
+++ /dev/null
-#!/bin/sh
-
-mirror-site.sh "$1" \
- --warc-file $name-$(date '+%Y%M%d%H%m%S') \
- --no-warc-compression \
- --no-warc-keep-log \
- $@
+++ /dev/null
-#!/bin/sh
-
-user_agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27"
-
-name=$1
-shift
-mkdir -p $name
-
-cd $name
-wget \
- --page-requisites \
- --convert-links \
- --adjust-extension \
- --restrict-file-names=ascii \
- --span-hosts \
- --random-wait \
- --execute robots=off \
- --recursive \
- --timestamping \
- -l inf \
- --no-remove-listing \
- --no-parent \
- --user-agent "$user_agent" \
- --reject '*.woff*,*.ttf,*.eot,*.js' \
- --tries 10 \
- $@
--- /dev/null
+#!/bin/sh -e
+
+sleep 1
+tmp=`mktemp`
+trap "rm -f $tmp $tmp.png $tmp.webp $tmp.txt" HUP PIPE INT QUIT TERM EXIT
+[ "$1" = "root" ] && {
+ root="-window root" || root=""
+ shift
+}
+import $root $tmp.png
+my-cwebpl -o $tmp.webp $tmp.png
+if [ "$1" = no ]; then
+ fn=/tmp/`dd if=/dev/urandom bs=8 count=1 2>/dev/null | xxd -p`.webp
+ mv $tmp.webp $fn
+ echo $fn | tee $tmp.txt
+else
+ paster $tmp.webp > $tmp.txt
+fi
+xmessage -file $tmp.txt
+++ /dev/null
-#!/bin/sh
-
-mkvpropedit \
- --edit info \
- --delete title \
- --delete date \
- --set muxing-application=- \
- --set writing-application=- \
- --chapters "" \
- --tags all: $@
+++ /dev/null
-#!/usr/bin/env perl
-
-exec "mpv", map { s/^([A-Z][A-Z])$/--profile=$1/ ; $_ } @ARGV;
--- /dev/null
+#!/usr/bin/env zsh
+
+cat <<EOF
+%rec: Album
+%mandatory: Artist Album
+%allowed: Year Collection Lossless
+%type: Year int
+%type: Lossless bool
+
+EOF
+
+setopt EXTENDED_GLOB
+COLS=()
+for col (cols/*) COLS=($COLS $col:t)
+for name (*~cols) {
+ ts=(${(s/-/)name})
+ year=""
+ for (( i=2 ; i <= $#ts ; i++ )) {
+ [[ ${ts[$i]} =~ "^[0-9][0-9][0-9][0-9]$" ]] && {
+ year=${ts[$i]}
+ break
+ }
+ }
+ [[ -n $year ]] && {
+ artist=(${ts[1,$i-1]})
+ album=(${ts[$i+1,-1]})
+ } || {
+ artist=${ts[1]}
+ album=(${ts[2,-1]})
+ }
+ lossless=""
+ if [[ -d $name ]] ; then
+ wvs=($name/**/*.wv(N))
+ [[ ${#wvs} -gt 0 ]] && lossless=1
+ else
+ [[ $name:e = wv ]] && lossless=1
+ fi
+ cols=()
+ for col ($COLS) [[ -e cols/$col/$name ]] && cols=($cols $col)
+
+ print "Artist: ${(j/-/)artist:gs/_/ /}"
+ [[ -n $year ]] && print "Year: $year"
+ print "Album: ${(j/-/)album:gs/_/ /}"
+ [[ -n $lossless ]] && print "Lossless: yes"
+ for col ($cols) print "Collection: $col"
+ print
+}
--- /dev/null
+#!/usr/bin/env zsh
+
+ext=${1:-wav}
+
+while read name ; do
+ (( i++ ))
+ print -v num -f %02d $i
+ print -r mv track${num}.cdda.$ext ${num}.${(qq)name}.$ext
+done
[ $# -eq 0 ] && fs="$(find . -maxdepth 1 -type f)" || fs="$@"
for f in $fs ; do
- mv -v "$f" $(sha1 -q "$f").${f##*.}
+ mv -v "$f" $(b3sum < "$f").${f##*.}
done
--- /dev/null
+#!/bin/sh -e
+
+exec 7z x -tbzip2 -si -so
rm -fr \
~/.*_history \
~/.cache ~/.config ~/.local* ~/.thumbnails \
- ~/.links ~/.w3m \
+ ~/.w3m \
~/.java \
~/.pylint.d \
~/.viminfo \
- ~/xombrero.core \
+ ~/.Trash \
+ ~/go \
~/zathura.core
--- /dev/null
+#!/bin/sh
+
+fields="type size sha512"
+mtree -c -k "$fields" | mtree -C -S -k "$fields"
--- /dev/null
+#!/usr/bin/env zsh
+# Original ps2pdf is just a trivial caller to gs too.
+# That ones is lossless, tries to be closer to PDF/A-1.
+# It also copies Producer metainformation tag to Creator,
+# removes all empty metainformation fields, removed fields
+# with uuid:s, removes Format (that is application/pdf).
+
+setopt ERR_EXIT
+opts=(
+ -dQUIET
+ -dBATCH
+ -dNOPAUSE
+ -dSAFER
+ -sDEVICE=pdfwrite
+ -dPDFSETTINGS=/default
+ -dPDFA=1
+ -dCompatibilityLevel=1.4
+ -dPDFACompatibilityPolicy=3 # that will skip some errors about XMP
+ -dAutoRotatePages=/None
+ -dOptimize=true
+ -sColorConversionStrategy=RGB # advised for PDF/A
+ -sProcessColorModel=DeviceRGB # advised for PDF/A
+ -dAutoFilterColorImages=false
+ -dAutoFilterGrayImages=false
+ -dAutoFilterMonoImages=false
+ -dColorImageFilter=/FlateEncode
+ -dGrayImageFilter=/FlateEncode
+ -dMonoImageFilter=/FlateEncode
+ -sOutputFile="$1".pdf
+)
+gs ${=opts} $1
+
+toremove=(Format)
+exiftool $1.pdf | while read l ; do
+ f=${${(s/:/)l}[1]:gs/ //}
+ [[ "$l" =~ ": " ]] || toremove=($f $toremove)
+ [[ "$l" =~ ": uuid:" ]] && toremove=($f $toremove)
+done
+for i ({1..${#toremove}}) toremove[$i]=-${toremove[$i]}=
+exiftool -zip -overwrite_original -quiet \
+ -tagsFromFile $1 -Producer\>Creator \
+ ${=toremove} $1.pdf
+[[ -z $LINEARIZE ]] || LINEARIZE=--linearize
+qpdf $LINEARIZE --compress-streams=y $1.pdf $1.pdf.pdf
+mv $1.pdf.pdf $1.pdf
do_next
while : ; do
- echo -n "$cur: crop:$crop rotate:$rotate v/r/c/s/p/n> "
+ echo -n "$cur: C:$crop R:$rotate v/r/c/s/p/n> "
read c
case $c in
v)
--- /dev/null
+#!/bin/sh -e
+
+exec zstdmt -v --ultra -22 --rm "$@"
+++ /dev/null
-#!/bin/zsh
-
-typeset -A seen
-path-extractor | while read fn ; do
- [[ $seen[$fn] -eq 1 ]] && continue
- seen+=($fn 1)
- print $fn
-done | fzf -m
#!/bin/sh
-exec java -jar $HOME/src/plantuml.jar $@
+exec java -jar $HOME/src/plantuml/plantuml.jar $@
+++ /dev/null
-#!/bin/sh -ex
-
-t=$(TMPDIR=. mktemp)
-pngcrush -rem alla -rem allb "$1" $t
-mv $t "$1"
+++ /dev/null
-#!/bin/sh
-
-gs \
- -dBATCH -dNOPAUSE -dSAFER \
- -sDEVICE=pdfwrite -dPDFA \
- -dPDFSETTINGS=/default \
- -dAutoRotatePages=/None \
- -sColorConversionStrategy=DeviceRGB \
- -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode \
- -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode \
- -dMonoImageFilter=/FlateEncode \
- -dOptimize=true \
- -dEmbedAllFonts=true \
- -sOutputFile="$1".pdf "$1"
-remind -g ~/rem/index.rem
+#!/bin/sh
+
+remind -g ~/rem/index.rem $@
+++ /dev/null
-#!/bin/zsh
-
-. $HOME/bin/tmux-common.sh
-
-$TMUX has-session -t im && exit
-$TMUX new-session -d -s im
-$TMUX rename-window -t im:1 "mattermost"
-$TMUX split-window -t im:1
-
-paste im:1.0 "~/work/matterircd/start.sh"
-sleep 1
-paste im:1.1 "irssi"
-$TMUX resize-pane -U -t im:1 15
-
-#$TMUX select-window -t root:1.0
-
-CMD="$TMUX attach-session -t im" CMDTITLE="Terminal8" $HOME/bin/dwm-term &
+++ /dev/null
-#!/bin/sh
-
-winid=$1
-shift
-exec ~/bin/st -w $winid -e lynx $@
+++ /dev/null
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-my %rels;
-my $header = 0;
-my $printed = 0;
-
-while(<STDIN>){
- ($rels{$2} = $1) if /^<link href="([^#]*)[^"]*" rel="([^"]*)" title/;
- if(/<div class="header">$/){
- print "$_<center><p>";
- if(defined $rels{"prev"}){
- print "<a href=\"$rels{'prev'}\" accesskey=\"p\" rel=\"prev\">[<<<]</a>";
- };
- if(defined $rels{"up"}){
- print "<a href=\"$rels{'up'}\" accesskey=\"u\" rel=\"up\">[^^^]</a>";
- };
- if(defined $rels{"next"}){
- print "<a href=\"$rels{'next'}\" accesskey=\"n\" rel=\"next\">[>>>]</a>";
- };
- $header++;
- };
- if($header && /^<.div>$/){
- print "</p></center>$_";
- $header--;
- };
- next if $header;
- print;
-};
+++ /dev/null
-TMUX=/usr/local/bin/tmux
-
-paste()
-{
- local pane="$1"
- local cmd="$2"
- $TMUX set-buffer "$cmd"
- $TMUX paste-buffer -t "$pane"
- $TMUX delete-buffer
- $TMUX send-keys -t "$pane" Enter
-}
+++ /dev/null
-#!/usr/bin/env zsh
-
-cd $2
-set -e
-tmp=`mktemp`
-trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT
-
-case $1 in
-(find)
- find . -mindepth 1 -path "*/.git" -prune -o \
- \( -type f -o -type d -o -type l \) -print |
- cut -c3- | fzf -m --preview="less -N -S {}" |
- while read fn ; do print ${(q)fn} ; done > $tmp
- ;;
-(buf-files)
- tmux capture-pane -J
- tmux save-buffer $tmp.capture
- trap "rm -f $tmp.capture" HUP PIPE INT QUIT TERM EXIT
- tmux delete-buffer
- pe < $tmp.capture > $tmp
- ;;
-(git-files) git status --short | fzf -m | perl -npe 's/^\s*\S+\s+//' > $tmp ;;
-(git-branches) { git branch ; git branch --remote } | fzf > $tmp ;;
-(git-commits)
- git --no-pager log --oneline -n 20 | perl -ne "print \"@~\$n \$_\"; \$n++" |
- fzf --reverse | cut -w -f1 > $tmp
- ;;
-(*) echo unknown command ; sleep 1 ; exit ;;
-esac
-
-[ -s $tmp ] || exit
-tmux set-buffer "`perl -npe 's/\n/ /g' $tmp`"
-tmux paste-buffer
-tmux delete-buffer
+++ /dev/null
-#!/bin/sh
-
-tmux has-session -t git-extractor && tmux kill-session -t git-extractor || :
-tmux new-session -d -s git-extractor -c "$1" '
- git status --short | fzf -m --preview="" | while read item ; do
- item=`echo $item | cut -w -f2-`
- echo -n "$item "
- done | read data
- tmux set-buffer "$data"
- tmux detach
-'
-tmux set-option -t git-extractor status off
-exec tmux attach-session -t git-extractor
+++ /dev/null
-#!/bin/sh
-
-while :; do
- echo -n "> "
- read pass
- passman has "$pass" && break
-done
-exec passman "$pass" >/dev/null
+++ /dev/null
-#!/bin/sh
-
-[ -e /tmp/stargrave-flags/WG ] && [ -n "$1" ] && {
- exec $HOME/local/bin/xombrero -n "$1" 2>/dev/null
-}
-
-term() {
- DISPLAY=:0 CMD="tmux attach-session -t www" CMDTITLE="Terminal9" $HOME/bin/dwm-term &
-}
-
-if tmux has-session -t www 2> /dev/null ; then
- attached=`tmux list-sessions -F "#{session_attached}" -f "#{==:#{session_name},www}"`
- [ "$attached" != "0" ] || {
- term &
- sleep 0.5
- }
- tmux new-window -t www "lynx $@"
-else
- tmux new-session -d -s www "sleep 0.5 ; lynx $@"
- tmux set-option -t www default-command lynx
- term &
-fi
+++ /dev/null
-#!/bin/sh
-
-while :; do
- life=$(apm -l)
- flags="$(ls /tmp/stargrave-flags | perl -e 'print join " ", sort map { chomp and $_ } <>')"
- topinfo=$(top -b -d 1 0 | sed s/[,:]//g)
- meminfo=$(echo "$topinfo" | grep "^Mem")
- arcinfo=$(echo "$topinfo" | grep "^ARC")
- swpinfo=$(echo "$topinfo" | perl -ne 'print $1 if /^Swap \w+ Total (\w+) Used/')
- xsetroot -name "$swpinfo $meminfo $arcinfo [$flags] $life% $(date "+%Y-%m-%dT%H:%M:%S")"
- sleep 20
-done
+++ /dev/null
-#!/usr/local/bin/zsh
-
-. /usr/local/bin/virtualenvwrapper.sh
-workon youtube3
-youtube-dl --config-location ~/.youtube-dl.conf $@
#!/usr/bin/env zsh
-set -e
+setopt ERR_EXIT EXTENDED_GLOB
usage() {
cat <<EOF
$0 DATASET@SNAPPREFIX sync-initial DST
$0 DATASET@SNAPPREFIX sync DST
$0 DATASET@SNAPPREFIX clean COUNT
+ FIFO=1
EOF
exit 1
}
-enccmd="/home/stargrave/bin/gpg-e-fast.sh --recipient offline"
+mk_fifo() {
+ [[ -z $FIFO ]] || {
+ mkfifo $dst/$latest_filename.zfs.zst.age
+ echo $dst/$latest_filename.zfs.zst.age
+ }
+}
+
+enccmd=(~stargrave/bin/age -R /home/stargrave/.age/general.pub)
[[ $# -ge 2 ]] || usage
what=$1
action=$2
-now=$(date "+%Y%m%d%H%M")
-depth=${#${(s./.)what}}
+zmodload -F zsh/datetime b:strftime
+now=$(strftime %Y%m%d%H%M)
+[[ $what =~ / ]] && depth=1 || depth=${#${(s./.)what}}
snaps=$(zfs list -t snap -d $depth -o name -H | grep $what | sort -nr)
snaps=(${(f)snaps})
latest=${snaps[1]}
latest_filename=${latest:gs#/#%}
+dst=$3
case $action in
snap-initial)
print $what-$now
;;
sync-initial)
- dst=$3
[[ -d $dst ]] || usage
+ mk_fifo
setopt PIPE_FAIL
- zfs send -Rv $latest | zstd | ${=enccmd} > \
- $dst/$latest_filename.zfs.zst.gpg
+ zfs send -Rwv $latest | zstdmt | $enccmd > $dst/$latest_filename.zfs.zst.age
sync
touch $dst/$latest_filename.from
;;
sync)
- dst=$3
[[ -d $dst ]] || usage
- latest_dst=($dst/*(.Onn[1]))
+ mk_fifo
+ latest_dst=($dst/*.from~$dst/.*(.Onn[1]))
[[ $latest_dst ]]
latest_dst=${latest_dst[1]}
latest_dst=${${latest_dst##*/}%.from}
[[ $latest_dst != $latest_filename ]]
setopt PIPE_FAIL
- zfs send -Rv -i ${latest_dst:gs#%#/} $latest | zstd | ${=enccmd} > \
- $dst/$latest_filename.zfs.zst.gpg
+ set -x
+ zfs send -Rwv -i ${latest_dst:gs#%#/} $latest | zstdmt | $enccmd > \
+ $dst/$latest_filename.zfs.zst.age
+ set +x
sync
print $latest_dst > $dst/$latest_filename.from
;;
+++ /dev/null
-#!/bin/sh
-
-zstdmt -v --ultra -22 --rm $@
ColumnLimit: 88,
IndentWidth: 4,
AlignAfterOpenBracket: AlwaysBreak,
- AlignConsecutiveAssignments: true,
+ AlignConsecutiveAssignments: false,
AllowAllParametersOfDeclarationOnNextLine: false,
AllowShortBlocksOnASingleLine: true,
AlwaysBreakAfterReturnType: TopLevel,
--- /dev/null
+5k
+10o
+
+# [ 1-d2+/
+# d2*Sk # Initialize multiplier
+# d*Sy # Initialize multiplier factor
+# 0Ss # Initialize accumulator
+# 10K^Sp # Initialize 10^k power
+# [ d1r/lk*ls+lsrdss # Update accumulator
+# -lp*d*1 [s_q]s_>_ # Check precision
+# lkly*sk 2+ # Update multiplier and counter
+# lfx
+# ]Sf
+# 1lfxLs
+# LkLyLpLfs_s_s_s_] sL
+# natural logarithm: 1000lLx 10lLx /p
+[1-d2+/d2*Skd*Sy0Ss10K^Sp[d1r/lk*ls+lsrdss-lp*d*1[s_q]s_>_lkly*sk2+lfx]Sf1lfxLsLkLyLpLfs_s_s_s_]sL
+
+# sum of everything in stack: lSxp
+[0d[+2z>a]salax]sS
--- /dev/null
+#!/bin/sh
+
+exec rlwrap \
+ --history-filename /tmp/.dc_history \
+ --substitute-prompt "> " \
+ --prompt-colour=red \
+ dc -f ~/.dc -f -
--- /dev/null
+downdir=/home/stargrave/tmp/
+jar=/tmp/.ebjar
+cachedir=/tmp/.ebcache
+cachesize=200
+webtimer=30
+proxy = http|https * localhost:8080
+
+plugin{
+ type=image/webp
+ desc=WebP
+ suffix=webp
+ content=image/webp
+ down_url
+ program=sxiv %i
+}
+
+plugin{
+ type=image/jpeg
+ desc=JPEG
+ suffix=jpg
+ content=image/jpeg
+ down_url
+ program=sxiv %i
+}
+
+plugin{
+ type=image/png
+ desc=PNG
+ suffix=png
+ content=image/png
+ down_url
+ program=sxiv %i
+}
+
+plugin{
+ type=image/jxl
+ desc=JPEG XL
+ suffix=jxl
+ content=image/jxl
+ down_url
+ program=sxiv %i
+}
+
+plugin{
+ type=application/pdf
+ desc=PDF
+ suffix=pdf
+ content=application/pdf
+ down_url
+ program=zat %i
+}
+
+function+S{
+ b https://html.duckduckgo.com/html?q=~0
+ /Next Page/+1
+ z20
+}
+
+function+Sg{
+ b https://www.google.com/search?q=~0
+ /^{h3/
+ z20
+}
+
+function+Soid{
+ b https://oidref.com/~0
+ /^h1/
+ z20
+}
+
+function+Spep{
+ b https://www.python.org/dev/peps/pep-0~0/
+ /^h1/
+ z20
+}
+
+function+Spy{
+ b https://pypi.org/project/~0/
+ /^h1/
+ z20
+}
+
+function+Srfc{
+ b https://datatracker.ietf.org/doc/html/rfc~0
+ /^From:/
+ z40
+}
+
+function+Swe{
+ b https://en.wikipedia.org/wiki/~0
+ /^h1/
+ z40
+}
+
+function+Swr{
+ b https://ru.wikipedia.org/wiki/~0
+ /^h1/
+ z40
+}
+
+function+Scroll{
+ +,+20n
+ if(?) {
+ +,$n
+ if(?) {
+ 0<Scroll
+ }
+ }
+}
+
+function:init{
+ db0
+ hf
+ ls=lt
+ showall+
+ vs+
+ endm+
+ ll2000
+ js-
+ db2
+}
--- /dev/null
+$include ~/.inputrc
+
+"\eOP": "<Scroll\n"
--- /dev/null
+#!/bin/sh
+
+LANG=en_US.UTF-8 INPUTRC=~/.inputrc-eb book=~/.lynx_bookmarks.html \
+ exec rlwrap \
+ --history-filename /tmp/.eb_history \
+ --substitute-prompt "> " \
+ --prompt-colour=red \
+ --complete-filenames \
+ edbrowse $@
*.o
*.pyc
*.swp
-.hypothesis
+.autoenv.zsh
+.autoenv_leave.zsh
.redo
.tags
start.sh
+[pack]
+ threads = 8
[advice]
pushUpdateRejected = false
detachedHead = false
[user]
name = Sergey Matveev
email = stargrave@stargrave.org
- signingkey = "E49857EF"
+ signingkey = "12AD32689C660D426967FD75CB8205632107AD8A"
[color]
diff = auto
status = auto
branch = auto
interactive = auto
[core]
+ compression = 0
excludesfile = /home/stargrave/.git-ignore
quotepath = false
- filemode = true
- logallrefupdates = true
whitespace = blank-at-eol, space-before-tab, tab-in-indent, blank-at-eof
pager=diff-highlight | $PAGER
[log]
colorMoved = default
colorMovedWS = allow-indentation-change
tool = vimdiff
+ noprefix = true
[grep]
lineNumber = true
[merge]
tool = vimdiff
+ conflictStyle = zdiff3
[pull]
ff = only
[help]
defaultBranch = master
[format]
useAutoBase = true
+[safe]
+ directory = *
+[includeIf "gitdir:~/work/stc/"]
+ path = ~/work/stc/.gitconfig
--- /dev/null
+git commit --amend
--- /dev/null
+git branch --remote
--- /dev/null
+git log -i --grep=$1
--- /dev/null
+git diff --name-only --diff-filter=M --relative
--- /dev/null
+git remote -v
--- /dev/null
+alias Ga="git add"
+alias Gb="git branch"
+alias Gc="git checkout"
+alias Gd="git diff"
+alias Gdc="git diff --cached"
+alias gg="git grep "
+alias ggj="GIT_EDITOR=\"$EDITOR -c copen\" git jump grep "
+alias Gl="git log --oneline --graph --decorate=short"
+alias Gld="git log --date=format:'%F %R' --pretty=format:'%ad %C(auto)%h %s'"
+alias Gp="git log --patch"
+alias Gs="git show --show-signature"
+bindkey -s "\eOR" " git status --short\n" # F3
--- /dev/null
+autoload -Uz vcs_info
+zstyle ":vcs_info:*" enable git
+zstyle ":vcs_info:*" max-exports 1
+zstyle ":vcs_info:git:*" formats "G"
+zstyle ":vcs_info:git:*" actionformats "%a"
charset utf-8
no-auto-key-retrieve
-keyserver hkps://hkps.pool.sks-keyservers.net
+# keyserver hkps://keys.openpgp.org
+keyserver hkps://keyserver.ubuntu.com
no-secmem-warning
no-greeting
no-emit-version
-default-key AE1A8109E49857EF
+default-key 12AD32689C660D426967FD75CB8205632107AD8A
keyid-format 0xlong
photo-viewer sxiv %i
trust-model tofu+pgp
-auto-key-locate dane wkd hkps://hkps.pool.sks-keyservers.net local
+auto-key-locate nodefault dane wkd local
aead-algo OCB
-personal-aead-preferences OCB EAX
-personal-cipher-preferences TWOFISH AES256 CAMELLIA256 AES192 CAMELLIA192 AES CAMELLIA128 CAST5 BLOWFISH IDEA 3DES
-personal-digest-preferences SHA512 SHA384 SHA256 SHA224 RIPEMD160 SHA1
-personal-compress-preferences ZLIB ZIP BZIP2 Uncompressed
-default-preference-list OCB EAX TWOFISH AES256 CAMELLIA256 AES192 CAMELLIA192 AES CAMELLIA128 CAST5 BLOWFISH IDEA 3DES SHA512 SHA384 SHA256 SHA224 RIPEMD160 SHA1 ZLIB ZIP BZIP2 Uncompressed
+personal-aead-preferences OCB
+personal-cipher-preferences AES256 TWOFISH AES
+personal-digest-preferences SHA512
+personal-compress-preferences ZLIB ZIP Uncompressed
+default-preference-list OCB AES256 TWOFISH AES SHA512 ZLIB ZIP Uncompressed
cert-digest-algo SHA512
-group myself=AE1A8109E49857EF
+group myself=12AD32689C660D426967FD75CB8205632107AD8A
+group myold=CF60E89A59231E76E2636422AE1A8109E49857EF
--- /dev/null
+export GPG_TTY=$(tty)
+alias gpgkr="gpg --no-default-keyring --keyring "
--- /dev/null
+#!/bin/sh -ex
+
+email=$1
+shift
+
+hsh=`gpg-wks-client --print-wkd-hash $email | cut -d " " -f1`
+gpg --export $@ > $hsh
+gpg --armor --export $@ > $hsh.asc
--- /dev/null
+#!/usr/bin/env zsh
+
+setopt NO_NOMATCH
+rm -fr $GOCACHE \
+ /tmp/*.pch \
+ /tmp/go-build* \
+ /tmp/go.*.*.{mod,sum} \
+ /tmp/gopackages-* \
+ /tmp/gopls-* \
+ /tmp/gopls.* \
+ $XDG_CACHE_HOME/gopls
--- /dev/null
+#!/bin/sh
+
+exiftool -all= -TagsFromFile @ -ColorSpaceTags -overwrite_original "$1"
--- /dev/null
+#!/usr/bin/env zsh
+
+setopt ERR_EXIT
+tmp=`mktemp`
+trap "rm -f $tmp.pnm $tmp.jxl" HUP PIPE INT QUIT TERM EXIT
+case $1:e in
+pnm) cp $1 $tmp.pnm ;;
+gif) giftopnm < $1 > $tmp.pnm ;;
+png) pngtopnm < $1 > $tmp.pnm ;;
+webp) dwebp -mt -quiet -o $tmp.pnm $1 ;;
+*)
+ print unknown extension >&2
+ exit 1
+esac
+
+common=(--quiet --distance=0 --effort=9 --brotli_effort=11)
+prev=$(( 1 << 62 ))
+best=""
+zmodload -F zsh/stat b:zstat
+for g (0 1 2 3) {
+ opts=(--modular_group_size=$g)
+ cjxl $common $opts $tmp.pnm $tmp.jxl
+ zstat -A cur +size $tmp.jxl
+ [[ $cur -gt $prev ]] || {
+ prev=$cur
+ best=($opts)
+ }
+}
+zstat -A cur +size $1
+[[ $cur -lt $prev ]] && {
+ print $1 is smaller : $cur vs $prev
+ exit 2
+}
+cjxl $common $best $tmp.pnm $1:r.jxl
--- /dev/null
+#!/bin/sh -ex
+
+t=$(TMPDIR=. mktemp)
+pngcrush -rem alla -rem allb -z 2 "$1" $t
+advpng -z -4 $t
+mv $t "$1"
--- /dev/null
+#!/bin/sh -e
+
+tmp=`mktemp`
+trap "rm -f $tmp $tmp.jpg" HUP PIPE INT QUIT TERM EXIT
+jpegtran -optimize -progressive -perfect -copy all "$1" > $tmp.jpg
+cjxl $tmp.jpg "${1%.*}.jxl" --distance=0 --effort=9 --brotli_effort=11 --lossless_jpeg=1
+[ -s "${1%.*}.jxl" ]
+touch -r "$1" "${1%.*}.jxl"
-aliases = { wc = "window close"; };
+aliases = { wc = "window close"; qmsg = "quote privmsg $0 :$1-"; };
settings = {
"fe-text" = {
actlist_sort = "refnum";
user_name = "stargrave";
nick = "stargrave";
timestamp_format = "%H:%M:%S";
+ resolve_prefer_ipv6 = "yes";
};
};
logs = { };
+servers = (
+ {
+ address = "irc.oftc.net";
+ chatnet = "OFTC";
+ port = "6697";
+ use_tls = "yes";
+ tls_verify = "yes";
+ tls_cert = "~/.irssi/certs/stargrave.irc.ed.pem";
+ autoconnect = "yes";
+ },
+ {
+ address = "irc.libera.chat";
+ chatnet = "LiberaChat";
+ port = "6697";
+ use_tls = "yes";
+ tls_verify = "yes";
+ tls_cert = "~/.irssi/certs/stargrave.irc.ed.pem";
+ autoconnect = "yes";
+ },
+);
+chatnets = {
+ OFTC = { type = "IRC"; };
+ LiberaChat = { type = "IRC"; };
+};
hilights = ( { text = "stargrave"; nick = "yes"; word = "yes"; } );
+keyboard = (
+ { key = "^Y"; id = "command"; data = "SCROLLBACK GOTO -2"; },
+ { key = "^E"; id = "command"; data = "SCROLLBACK GOTO +2"; },
+ { key = "^L"; id = "command"; data = "WINDOW LAST"; }
+);
+channels = (
+ { name = "#redo"; chatnet = "LiberaChat"; autojoin = "yes"; },
+ { name = "#yggdrasil"; chatnet = "LiberaChat"; autojoin = "yes"; },
+ { name = "#nncp"; chatnet = "OFTC"; autojoin = "yes"; },
+);
--- /dev/null
+#command
+^N next-file
+^P prev-file
+c forw-search \^commit\r
+C back-search \^commit\r
+f forw-search \^diff --git\r
--- /dev/null
+export PAGER=less
+export LESSHISTFILE=/tmp/.lesshst
+export -TU LESS lessflags " "
+lessflags=(
+ --use-color
+ --RAW-CONTROL-CHARS
+ --HILITE-UNREAD
+ --no-init
+ --ignore-case
+ --jump-target=2
+ "-Ps?f%f .?m(%i/%m) .%lt-%lb?L/%L. [%bB?B/%B.]?B %pB\%.?x N\:%x.%t"
+)
--- /dev/null
+alias -g M="| less"
+alias m="less "
--- /dev/null
+set http:decode true
+set http:use-propfind true
+set ssl:ca-file "/etc/ssl/cert.pem"
+set http:proxy "http://localhost:8080/"
+set https:proxy "http://localhost:8080/"
--- /dev/null
+#!/bin/sh
+
+echo http://blog.stargrave.org/russian/$1
--- /dev/null
+#!/bin/sh
+
+tmp=`mktemp`
+trap "rm $tmp" HUP PIPE INT QUIT TERM EXIT
+curl https://api.github.com/repos/${1}/${2}/releases > $tmp
+gojq -r ".[] | .assets[] | .browser_download_url" < $tmp
+gojq -r ".[] | .tarball_url" < $tmp
--- /dev/null
+#!/bin/sh
+
+echo https://datatracker.ietf.org/doc/html/rfc$1
--- /dev/null
+#!/bin/sh
+
+echo https://www.youtube.com/watch?v=$1
--- /dev/null
+#!/bin/sh -e
+
+url="$@"
+if [ $# -gt 1 ] ; then
+ sel="$1"
+ shift
+ case "$sel" in
+ gg) url="https://www.google.com/search?q=$@" ;;
+ oid) url="https://oidref.com/$@" ;;
+ pep) url="https://www.python.org/dev/peps/pep-0$@/" ;;
+ py) url="https://pypi.org/project/$@/" ;;
+ rfc) url="https://datatracker.ietf.org/doc/html/rfc$@" ;;
+ s) url="https://html.duckduckgo.com/html?q=$@" ;;
+ we) url="https://en.wikipedia.org/wiki/$@" ;;
+ wr) url="https://ru.wikipedia.org/wiki/$@" ;;
+ esac
+fi
+exec links -g "$url"
-command alias mr memory read --size 1 --format x --count %1 --
+command alias mr memory read --force --size 1 --format x --count %1 --
KEYMAP:^E:DOWN_TWO
KEYMAP:^Y:UP_TWO
-INCLUDE:/usr/local/etc/lynx.cfg
+HELPFILE:file://localhost/home/stargrave/local/stow/lynx/share/lynx_help/lynx_help_main.html
PARTIAL:TRUE
SHOW_KB_RATE:KB,ETA
INFOSECS:1
ASSUME_CHARSET:utf-8
JUMPFILE:/home/stargrave/.lynx_jumps.html
INCLUDE:/home/stargrave/.lynx_cookies.cfg
+http_proxy:http://localhost:8080/
+https_proxy:http://localhost:8080/
<body>
<dl compact>
<dt>gg<dd><a href="https://www.google.com/search?q=%s">Google</a></dd>
+<dt>oid<dd><a href="https://oidref.com/%s">OID</a></dd>
+<dt>pep<dd><a href="https://www.python.org/dev/peps/pep-0%s/">PEP</a></dd>
<dt>py<dd><a href="https://pypi.org/project/%s/">PyPI</a></dd>
-<dt>rfc<dd><a href="https://tools.ietf.org/html/rfc%s">RFC</a></dd>
-<dt>s<dd><a href="https://lite.duckduckgo.com/lite/?q=%s">DuckDuckGo</a></dd>
+<dt>rfc<dd><a href="https://datatracker.ietf.org/doc/html/rfc%s">RFC</a></dd>
+<dt>s<dd><a href="https://html.duckduckgo.com/html?q=%s">DuckDuckGo</a></dd>
<dt>we<dd><a href="https://en.wikipedia.org/wiki/%s">WikiEN</a></dd>
<dt>wr<dd><a href="https://ru.wikipedia.org/wiki/%s">WikiRU</a></dd>
</dl>
-text/html; /usr/local/bin/lynx -noreferer -partial -assume_charset=%{charset} -dump %s; copiousoutput; nametemplate=%s.html
-application/pdf; /home/stargrave/bin/zat '%s'; test=test -n "$DISPLAY"
-image/gif; /usr/local/bin/sxiv '%s'; test=test -n "$DISPLAY"
-image/jpeg; /usr/local/bin/sxiv '%s'; test=test -n "$DISPLAY"
-image/png; /usr/local/bin/sxiv '%s'; test=test -n "$DISPLAY"
-image/webp; /usr/local/bin/sxiv '%s'; test=test -n "$DISPLAY"
+application/epub+zip; zat '%s'; test=test -n "$DISPLAY"
+application/pdf; zat '%s'; test=test -n "$DISPLAY"
+application/vnd.gnupg.wks; gpg-wks-client -v --read --send; needsterminal; description=WKS message
+application/x-perl; pod2text --color '%s' | less; needsterminal
+image/gif; sxiv '%s'; test=test -n "$DISPLAY"
+image/jpeg; sxiv '%s'; test=test -n "$DISPLAY"
+image/jxl; sxiv '%s'; test=test -n "$DISPLAY"
+image/png; sxiv '%s'; test=test -n "$DISPLAY"
+image/tiff; sxiv '%s'; test=test -n "$DISPLAY"
+image/webp; sxiv '%s'; test=test -n "$DISPLAY"
+image/x-djvu; zat '%s'; test=test -n "$DISPLAY"
+image/x-portable-anymap; sxiv '%s'; test=test -n "$DISPLAY"
+image/x-portable-arbitrarymap; sxiv '%s'; test=test -n "$DISPLAY"
+image/x-portable-bitmap; sxiv '%s'; test=test -n "$DISPLAY"
+image/x-portable-floatmap; sxiv '%s'; test=test -n "$DISPLAY"
+image/x-portable-graymap; sxiv '%s'; test=test -n "$DISPLAY"
+image/x-portable-pixmap; sxiv '%s'; test=test -n "$DISPLAY"
+image/x-xpixmap; sxiv '%s'; test=test -n "$DISPLAY"
+text/html; lynx -noreferer -partial -assume_charset=%{charset} -dump %s; copiousoutput; nametemplate=%s.html
+text/info; info '%s'; needsterminal
+text/plain; less '%s'; needsterminal
+text/x-man; man '%s'; needsterminal
--- /dev/null
+export WWW_HOME=file:///home/stargrave/.lynx_bookmarks.html
+export SSL_CERT_FILE=/usr/local/openssl/cert.pem
+export LYNX_CFG=~/.lynx.cfg
--- /dev/null
+#!/usr/bin/env zsh
+
+setopt ERR_EXIT
+zparseopts -D -A info url: descr: out:
+tags=`mktemp`
+trap "rm -f $tags" HUP PIPE INT QUIT TERM EXIT
+[[ -z ${info[-url]} ]] || {
+ urlTag="<Tag><Simple><Name>URL</Name><String>${info[-url]}</String></Simple></Tag>"
+ tagsopt=(--global-tags $tags)
+}
+[[ -z ${info[-descr]} ]] || {
+ txt=`xml esc < ${info[-descr]}`
+ descrTag="<Tag><Simple><Name>DESCRIPTION</Name><String>$txt</String></Simple></Tag>"
+ tagsopt=(--global-tags $tags)
+}
+printf "<Tags>\n%s\n%s\n</Tags>" $urlTag $descrTag > $tags
+mkvmerge --no-date --disable-track-statistics-tags $tagsopt --output ${info[-out]} $@
+mkvpropedit --set muxing-application=- --set writing-application=- ${info[-out]}
vo=gpu
-profile=gpu-hq
-hwdec=vaapi
-hwdec-codecs=h264,hevc,vp8,mpeg2video,vc1
-scale=ewa_lanczossharp
-cscale=ewa_lanczossharp
cache=yes
cache-secs=60
display-tags=*
-#osd-fractions
-ytdl=no
gapless-audio=yes
autosync=30
-oss-mixer-device=/dev/mixer
-oss-mixer-channel=vol
+cache-on-disk=no
+gpu-shader-cache=no
+audio-channels=2
+hwdec=vaapi
+hwdec-codecs=h264,hevc,vp8,vp9,mpeg2video,vc1
[AO]
-audio-device=oss//dev/dsp3
+audio-device=oss//dev/vdsp
+audio-delay=-0.04
-[AM]
-audio-device=oss//dev/dsp2
-oss-mixer-device=/dev/mixer2
-oss-mixer-channel=pcm
+[X1]
+vo=x11
[VN]
af=lavfi=loudnorm
[NV]
video=no
+
+[E3]
+audio-device=oss//dev/dsp3
+
+[E4]
+audio-device=oss//dev/dsp4
PGUP seek 600
PGDWN seek -600
-Shift+PGUP add chapter 1
-Shift+PGDWN add chapter -1
+HOME add chapter 1
+END add chapter -1
ENTER playlist-next force
BS set speed 1.0
-VOLUME_UP run "mixer" "-f" "${oss-mixer-device}" "${oss-mixer-channel}" "+2"
-VOLUME_DOWN run "mixer" "-f" "${oss-mixer-device}" "${oss-mixer-channel}" "-2"
+#VOLUME_UP run "mixer" "-f" "${oss-mixer-device}" "${oss-mixer-channel}" "+2"
+#VOLUME_DOWN run "mixer" "-f" "${oss-mixer-device}" "${oss-mixer-channel}" "-2"
+VOLUME_UP add volume +2
+VOLUME_DOWN add volume -2
--- /dev/null
+#!/bin/sh
+
+ffmpeg -i "$1" -vf scale=iw/4:ih/4 -sws_flags spline+accurate_rnd+full_chroma_int -c:v mpeg2video -b:v 10000k -y "$1".mpg
--- /dev/null
+#!/usr/bin/env zsh
+
+args=()
+for arg ($@) {
+ [[ $arg =~ "^[A-Z][A-Z0-9]$" ]] && arg="--profile=$arg"
+ args=($args $arg)
+}
+export vblank_mode=1
+exec mpv $args
-image/webp webp
-image/png png
-application/pdf pdf
-image/jpeg jpg
-image/jpeg jpeg
+application/epub+zip epub
application/gzip gz
+application/metalink4+xml meta4
+application/pdf pdf
+application/x-perl pod
+application/zstd zst
+image/gif gif
+image/jpeg jpeg jpg
+image/jxl jxl
+image/png png
+image/webp webp
+image/x-djvu djvu
+image/x-portable-anymap pnm
+image/x-portable-arbitrarymap pam
+image/x-portable-bitmap pbm
+image/x-portable-floatmap pfm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-xpixmap xpm
+text/info info
+text/plain txt
+text/x-man man
+++ /dev/null
-color hdrdefault blue default
-color quoted blue default
-color signature red default
-color attachment red default
-color prompt brightmagenta default
-color message brightred default
-color error brightred default
-color indicator brightyellow red
-color status brightgreen blue
-color tree default default
-color normal default default
-color markers red default
-color search white black
-color tilde brightmagenta default
-color index blue default ~F
-#color index red default "~N|~O"
-
-color header brightmagenta default "subject:"
-color header brightred default "to:"
-color header brightred default "cc:"
-color header brightred default "list-id:"
-color header brightred default "list-archive:"
-
-color header brightyellow default "date:"
-color header brightyellow default "received:"
-
-color header brightgreen default "from:"
-color header brightgreen default "reply-to:"
-color header brightgreen default "mail-reply-to:"
-color header brightgreen default "mail-followup-to:"
-color header brightgreen default "organization:"
-color header brightgreen default "user-agent:"
-
-color body brightgreen default "(http|https|ftp|news|telnet|finger|gopher)://[^ \"\t\r\n]*"
-color body brightgreen default "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+"
--- /dev/null
+color hdrdefault blue default
+color quoted brightblue default
+color signature red default
+color attachment red default
+color prompt brightmagenta default
+color message brightcyan default
+color error brightred default
+color indicator brightyellow red
+color status brightgreen blue
+color tree magenta default
+color markers red default
+color tilde brightmagenta default
+color index blue default ~F
+#color index red default "~N|~O"
+
+color header brightmagenta default subject:
+color header brightred default to:
+color header brightred default cc:
+color header brightred default list-id:
+color header brightred default list-archive:
+
+color header brightyellow default date:
+color header brightyellow default received:
+
+color header brightgreen default from:
+color header brightgreen default reply-to:
+color header brightgreen default mail-reply-to:
+color header brightgreen default mail-followup-to:
+color header brightgreen default organization:
+color header brightgreen default user-agent:
+
+color body brightgreen default "(finger|ftp|gemini|gopher|http|https|irc|ircs|news|telnet)://[^ \"\t\r\n]*"
+color body brightgreen default "[-a-z_0-9.]+@[-a-z_0-9.]+"
-set folder = "~/mail"
+set folder = ~/mail
set mbox_type = maildir
# set mbox_type = mbox
set spoolfile = =mbox
-set record = =sent-`date "+%y-%m"`
+set record = =back-`date "+%y-%m"`
set postponed = =postponed
set certificate_file = ~/.mutt/certificates
set net_inc = 1
set edit_headers = yes
-set charset = "utf-8"
+set charset = utf-8
set pager_stop = yes
-set sort = "threads"
-set sort_aux = "last-date-received"
+set sort = threads
+set sort_aux = last-date-received
set pager_index_lines = 6
set timeout = 60
set rfc2047_parameters
set ssl_force_tls = no
set user_agent = yes
set signature = ~/.signature
-set hostname = "stargrave.org"
+set hostname = stargrave.org
set realname = "Sergey Matveev"
-set query_command="mu cfind --format=mutt-ab '%s'"
+set query_command = "mu cfind --format=mutt-ab '%s'"
set forward_format = "Fwd: %s"
-set indent_string = ">"
-set attribution = "*** %n [%{%Y-%m-%d %H:%M}]:"
-set index_format = "%4C %Z[%1H] %{%m-%d} [%N] %-15.15L (%?l?%4l&%4c?)%?M?[#%02M]?%?Y?[%Y]? %s"
+set date_format = "%Y-%m-%d %H:%M"
+set index_format = "%4C %Z[%1H] %D [%N] %-15.15L (%?l?%4l&%4c?)%?M?[#%02M]?%?Y?[%Y]? %s"
set pipe_decode = yes
+set print_command = "cat > /tmp/mail-printed"
+set attribution = "*** %n [%{%Y-%m-%d %H:%M}]:"
+set forward_attribution_intro = "----- BEGIN %i -----"
+set forward_attribution_trailer = "----- END %i -----"
+set mail_check_stats
+set folder_format="%3C %t %N [%3n|%3m] %D %f"
+
set crypt_protected_headers_write = yes
-set print_command="cat > /tmp/mail-printed"
+set crypt_opportunistic_encrypt = yes
+set crypt_autosign = yes
-macro index <F1> "<next-unread-mailbox><enter>" "Go to new mail"
+source ~/.mutt/useragent.rc
+
+macro index,pager,browser <F1> "<next-unread-mailbox><enter>"
macro index <F5> ":set mbox_type = mbox\n" "mbox mailbox type"
+macro index S "<save-message>=spamdb<enter>"
-macro index <F8> "<shell-escape>mu find --clearlinks --format=links --linksdir=~/mail/search " "mu find"
-macro index <F9> "<change-folder-readonly>~/mail/search<enter>" "mu find results"
+macro index <F6> "<shell-escape>mu find --clearlinks --format=links --linksdir=/home/stargrave/mail/search " "mu find"
+macro index <F7> "<change-folder-readonly>~/mail/search<enter>" "mu find results"
+macro index <F8> "<change-folder-readonly>~/mail/search-sent<enter>" "mu find sent results"
macro pager \cu |urlview\n
alternative_order text/plain text/enriched text/html
auto_view text/html
unignore \
- Mail-Followup-To \
List-Id \
- Reply-To \
+ Mail-Followup-To \
Mail-Reply-To \
- Organization \
+ Message-Id \
OpenPGP \
+ Organization \
+ Reply-To \
Return-Path \
- X-Mailer \
User-Agent \
- Message-Id
+ X-Bogosity \
+ X-Label \
+ X-Mailer \
+ X-Original-To
fcc-hook .* $record
folder-hook . "set sort = threads; push <collapse-all>"
-folder-hook =rss "set sort = date"
-source ~/.mutt/mailboxes
+source ~/.mutt/mailboxes.rc
+
+folder-hook =blog-comment "set sort = date"
+folder-hook =monitoring "set sort = date"
+
+set my_month_prev = `date -j -v -1m "+%y-%m"`
+set my_month_curr = `date "+%y-%m"`
+
+mailboxes \
+ =stcnet-$my_month_prev \
+ =stcnet-$my_month_curr \
+ =back-$my_month_prev \
+ =back-$my_month_curr
+
+folder-hook =search-sent "set sort = date-sent"
+
source ~/.mutt/accounts/rc
+source ~/.mutt/hooks.rc
# set mime_forward = yes
# set mime_forward_rest = yes
--- /dev/null
+set my_mutt_version=`mutt -v | sed -n 's/^Mutt \(.*\) (.*$/\1/p'`
+set my_gpg_version=`gpg --version | sed -n 's/^gpg (.*) \(.*\)$/\1/p'`
+set my_vim_version=`vim --version | sed -n 's/^VIM . Vi IMproved \([^ ]*\).*$/\1/p'`
+set my_arch=`uname -m`
+set my_fbsd_version=`uname -r`
+my_hdr User-Agent: Mutt/$my_mutt_version GnuPG/$my_gpg_version Vim/$my_vim_version FreeBSD/$my_fbsd_version ($my_arch)
-set hostname = "stargrave.org"
source ~/.mutt/muttrc
-source ~/.mutt/color
-source ~/.mutt/lists
+source ~/.mutt/colour.rc
+source ~/.mutt/lists.rc
source ~/.mutt/gpg.rc
Sergey Matveev (http://www.stargrave.org/)
-OpenPGP: CF60 E89A 5923 1E76 E263 6422 AE1A 8109 E498 57EF
+OpenPGP: 12AD 3268 9C66 0D42 6967 FD75 CB82 0563 2107 AD8A
--- /dev/null
+mailpath=(
+ ~/mail/mbox/new"?Neue Nachrichten in =mbox"
+ ~/mail/arbeit/new"?Neue Nachrichten in =arbeit"
+)
+export MUHOME=~/.mu
+bindkey -s "\eOP" " inc\n" # F1
--- /dev/null
+#!/bin/sh -e
+
+mutt -f =back-`date "+%y-%m"`
+++ /dev/null
-history-limit 0
-text-width 80
-bind-key ^Y up
-bind-key ^E down
-notify-beep yes
-cleanup-on-quit yes
-
-max-items 100
-
-auto-reload yes
-reload-time 120
-reload-threads 10
-suppress-first-reload yes
-
-feed-sort-order lastupdated
-browser "~/bin/www %u &"
--- /dev/null
+alias mc="nnn"
--- /dev/null
+export NNN_OPTS=dHRU
+export NNN_OPENER=zsh-mime-open
+export NNN_PLUG='s:!sxiv -t .*;a:!tar tf "$nnn" | less*;d:!godu'
+export NNN_ARCHIVE="\\.(bz2|gz|iso|tar|tgz|txz|xz|zip|zst)$"
--- /dev/null
+#!/usr/bin/env zsh
+
+setopt ERR_EXIT
+[[ -n "$NNN_PIPE" ]]
+autoload ~/.zsh/functions/cf
+cf $1
+print -n -- "0c$PWD" > "$NNN_PIPE"
--- /dev/null
+#!/usr/bin/env zsh
+
+setopt ERR_EXIT
+sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
+[[ -s $sel ]]
+tgts=$(xargs -0 -L1 < $sel)
+tgts=(${(f)tgts})
+size=$(du -A -c $tgts)
+size=(${=size})
+size=${size[$#size - 1]}
+for tgt ($tgts) { pushd $tgt:h ; tar cf - $tgt:t ; popd } |
+pv --wait --interval 0.5 --size ${size}k |
+tar xf - --options read_concatenated_archives
import os
-alias hare os.system('kill %d' % os.getpid())
-alias hare9 os.system('kill -9 %d' % os.getpid())
-alias pp1 import pyderasn ;; print(pyderasn.pprint(%1, oid_maps=(locals().get('OID_STR_TO_NAME', {}),)))
+alias hare os.system("kill %d" % os.getpid())
+alias hare9 os.system("kill -9 %d" % os.getpid())
+alias pp1 import pyderasn ;; print(pyderasn.pprint(%1, oid_maps=(locals().get("OID_STR_TO_NAME", {}),)))
disable-pip-version-check = yes
no-binary = :all:
cache-dir = /tmp/pip-cache
-index-url = http://localhost:8080/simple/
+index-url = http://localhost:8081/simple/
set editing-mode vi
set show-mode-in-prompt on
+set expand-tilde on
+
set colored-stats on
set colored-completion-prefix on
set visible-stats on
--- /dev/null
+export RECOLL_DATADIR=~/local/stow/recoll/share/recoll
--- /dev/null
+#!/bin/sh
+
+tmp=`mktemp`
+trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT
+pages=`mutool info "$1" | sed -n 's/Pages: //p'`
+for page in `seq $pages` ; do
+ mutool convert -F text -o $tmp "$1" $page 2>/dev/null
+ cat $tmp
+ printf '\14\n' # ^L
+done
--- /dev/null
+#!/bin/sh
+
+tmp=`mktemp`
+trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT
+mutool convert -F text -o $tmp "$1" 2>/dev/null
+cat $tmp
--- /dev/null
+#!/bin/sh
+
+[ "$1" = "no" ] && shift || args="-A -p 2"
+
+cd ~/recoll
+args="$args -c main"
+while : ; do
+ [ -d "$1" ] || break
+ args="$args -i $1/xapiandb"
+ shift
+done
+
+recollq $args "$@" 2>/dev/null | perl -ne '
+ if (/^(ABSTRACT|SNIPPETS)/../^\/(ABSTRACT|SNIPPETS)/) {
+ print "\t$_" unless /^.?(ABSTRACT|SNIPPETS)/;
+ next;
+ };
+ next unless /^(.*)\t\[file:\/\/(.*)\]\t\[.*\]\t\d+\t.*\t.*$/;
+ print "$2\t$1\n";
+' | spc -e grn,"(^/.*)" | less
--- /dev/null
+[index]
+
+application/pdf = exec my-pdftotext; mimetype = text/plain ; charset=utf-8
--- /dev/null
+.0p = text/x-man
+.1 = text/x-man
+.1m = text/x-man
+.1p = text/x-man
+.1ssl = text/x-man
+.1x = text/x-man
+.2 = text/x-man
+.3 = text/x-man
+.3curses = text/x-man
+.3form = text/x-man
+.3gl = text/x-man
+.3menu = text/x-man
+.3ncurses = text/x-man
+.3p = text/x-man
+.3pm = text/x-man
+.3ssl = text/x-man
+.3tiff = text/x-man
+.3x = text/x-man
+.4 = text/x-man
+.4x = text/x-man
+.5 = text/x-man
+.5ssl = text/x-man
+.6 = text/x-man
+.6x = text/x-man
+.7 = text/x-man
+.7ssl = text/x-man
+.8 = text/x-man
+.9 = text/x-man
+.n = text/x-man
--- /dev/null
+idxflushmb = 512
+followLinks = 1
+topdirs = \
+ /usr/local/lib/perl5/5.32/perl/man \
+ /usr/local/lib/perl5/site_perl/man \
+ /usr/share/openssl/man \
+ /usr/local/share/man \
+ /usr/local/man \
+ /usr/share/man \
+ /usr/local/share/info \
+ /usr/local/info \
+ ~/local/share/man \
+ ~/local/share/info
--- /dev/null
+[index]
+
+application/pdf = exec my-pdftotext; mimetype = text/plain ; charset=utf-8
--- /dev/null
+idxflushmb = 512
+topdirs = ~/doc/rfc
+skippedNames = *.p7s *.xml *.html
--- /dev/null
+Protocol 2
+IdentitiesOnly yes
+Compression no
+UpdateHostKeys ask
+VerifyHostKeyDNS ask
+
+Host *
+ HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-ed25519
+ KexAlgorithms sntrup761x25519-sha512@openssh.com,curve25519-sha256@libssh.org,curve25519-sha256
+ Ciphers chacha20-poly1305@openssh.com,aes256-ctr,aes128-ctr
+ MACs umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
+ ControlMaster auto
+ ControlPath ~/.ssh/sockets/%r@%h-%p
+ ControlPersist 60
--- /dev/null
+local t="-t 0"
+ssh -C -t $1 "export LANG=en_US.UTF-8 ; tmux has-session $t && tmux attach-session $t || tmux new-session $t"
--- /dev/null
+alias sshnm="ssh -S none"
--- /dev/null
+#!/bin/sh -e
+
+exec ssh-keygen -Z chacha20-poly1305@openssh.com -t ed25519 -C $1 -f ~/.ssh/sign/$1
set-option -g repeat-time 0
set-option -g history-limit 20000
set-option -g renumber-windows on
+set-option -g terminal-features[0] "screen*:256:ccolour:clipboard:cstyle:title"
+set-option -gU terminal-features[1]
+set-option -g pane-border-indicators both
set-option -g prefix C-a
unbind-key C-b
bind-key b set-option status
unbind-key L
-bind-key t display-menu \
- music t "display-popup -KE -w 100% -R ~/bin/tmux-menu-music.sh" \
- pass p "display-popup -KE -R ~/bin/tmux-menu-pass-session.sh" \
- dict d "display-popup -KE -h 100% -R ~/bin/tmux-menu-dict.sh" \
- calc c "display-popup -KE -R ~/bin/tmux-menu-calc.sh" \
- cal l "display-popup -R \"cal -3N\"" \
- top o "display-popup -KE -h 100% -R \"top -s 1\""
-
-bind-key u {
- capture-pane -J
- save-buffer /tmp/tmux-buffer
- delete-buffer
- display-popup -KE -w 100% -R "urlview /tmp/tmux-buffer"
-}
-
-bind-key y {
- capture-pane -J
- save-buffer /tmp/tmux-buffer
- delete-buffer
- split-window 'vim -c "set listchars=" -c "match ExtraWhitespace //" /tmp/tmux-buffer'
-}
-
-bind-key o display-menu \
- find o "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh find '#{pane_current_path}'\"" \
- buf-files f "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh buf-files '#{pane_current_path}'\"" \
- git-files g "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh git-files '#{pane_current_path}'\"" \
- git-branches b "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh git-branches '#{pane_current_path}'\"" \
- git-commits c "display-popup -KE -w 100% -R \"~/bin/tmux-fzf.zsh git-commits '#{pane_current_path}'\""
-
-bind-key Y {
- capture-pane -J -S - -E -
- save-buffer /tmp/tmux-buffer
- delete-buffer
- split-window 'vim -c "set listchars=" -c "match ExtraWhitespace //" /tmp/tmux-buffer'
-}
+source-file ~/.tmux/rc/urlview
+source-file ~/.tmux/rc/capture
+source-file ~/.tmux/rc/menu-various
+source-file ~/.tmux/rc/menu-fzf
--- /dev/null
+paste()
+{
+ local pane="$1"
+ local cmd="$2"
+ tmux set-buffer "$cmd"
+ tmux paste-buffer -t "$pane"
+ tmux delete-buffer
+ tmux send-keys -t "$pane" Enter
+}
--- /dev/null
+#!/usr/bin/env zsh
+
+cd $2
+setopt ERR_EXIT
+fpath=(~/.tmux/functions.zsh $fpath)
+autoload tmux-fzf-$1
+tmp=`mktemp`
+trap "rm -f $tmp" HUP PIPE INT QUIT TERM EXIT
+tmux-fzf-$1 > $tmp || { echo unknown command ; sleep 1 ; exit }
+[[ -s $tmp ]] || exit
+tmux set-buffer "`perl -npe 's/\n/ /g' $tmp`"
+tmux paste-buffer
+tmux delete-buffer
#!/bin/sh
-echo -n "> "
-read word
+word=$(rlwrap -S "> " head -1)
sdcv "$word" | exec less
#!/bin/sh
tmux has-session -t music || {
- tmux new-session -d -s music -c ~/tmp/music
+ tmux new-session -d -s music -c ~/music
tmux set-option -t music status off
}
exec tmux attach-session -t music
#!/bin/sh
while tmux has-session -t pass ; do echo waiting... ; sleep 1 ; done
-tmux new-session -d -s pass rlwrap --history-filename /dev/null ~/bin/tmux-menu-pass.sh
+tmux new-session -d -s pass rlwrap --history-filename /dev/null --no-warnings ~/.tmux/bin/menu-pass.sh
tmux set-option -t pass status off
exec tmux attach-session -t pass
--- /dev/null
+#!/bin/sh
+
+while :; do
+ echo -n "> "
+ read pass
+ passman "$pass" && break
+done
--- /dev/null
+bfs -L . -mindepth 1 \
+ -path "*/.git" -prune -o \
+ -path "*/.redo" -prune -o \
+ \( -type f -o -type d -o -type l \) -print |
+cut -c3- | fzf -m --preview="less -N -S {}" |
+while read fn ; do print -r ${(q)fn} ; done
--- /dev/null
+{ git branch ; git branch --remote } | sed "s/ //g" |
+fzf --preview "git log --oneline --graph --decorate=short --color=always {}"
--- /dev/null
+git --no-pager log --oneline -n 100 | perl -ne 'print "@~$n $_"; $n++' |
+fzf --reverse | cut -w -f1
--- /dev/null
+git status --short |
+fzf -m --delimiter " " --preview "git diff --color=always {-1}" |
+perl -npe 's/^\s*\S+\s+//' |
+while read fn ; do print -r ${(q)fn} ; done
--- /dev/null
+pgrep -l -f . |
+fzf -m --no-sort --keep-right --delimiter " " \
+ --preview="procstat -c {1} ; procstat -s {1} ; procstat -r {1} ; procstat -f {1}" |
+perl -lane 'print $F[0]'
--- /dev/null
+bind-key y {
+ capture-pane -J
+ save-buffer /tmp/tmux-buffer
+ delete-buffer
+ split-window 'vim -c "set listchars=" -c "match ExtraWhitespace //" /tmp/tmux-buffer'
+}
+
+bind-key Y {
+ capture-pane -J -S - -E -
+ save-buffer /tmp/tmux-buffer
+ delete-buffer
+ split-window 'vim -c "set listchars=" -c "match ExtraWhitespace //" /tmp/tmux-buffer'
+}
--- /dev/null
+bind-key o display-menu \
+ find o "display-popup -E -w 100% \"~/.tmux/bin/fzf.zsh find '#{pane_current_path}'\"" \
+ procs p "display-popup -E -w 100% -h 100% \"~/.tmux/bin/fzf.zsh procs '#{pane_current_path}'\"" \
+ git-files g "display-popup -E -w 100% \"~/.tmux/bin/fzf.zsh git-files '#{pane_current_path}'\"" \
+ git-branches b "display-popup -E -w 100% \"~/.tmux/bin/fzf.zsh git-branches '#{pane_current_path}'\"" \
+ git-commits c "display-popup -E -w 100% \"~/.tmux/bin/fzf.zsh git-commits '#{pane_current_path}'\""
--- /dev/null
+bind-key t display-menu \
+ music t "display-popup -E -w 100% '~/.tmux/bin/menu-music.sh'" \
+ pass p "display-popup -E '~/.tmux/bin/menu-pass-session.sh'" \
+ dict d "display-popup -E -h 100% '~/.tmux/bin/menu-dict.sh'" \
+ calc c "display-popup -E '~/.tmux/bin/menu-calc.sh'" \
+ cal l "display-popup 'cal -3N'" \
+ top o "display-popup -E -w 100% -h 100% 'top -s 1'"
--- /dev/null
+bind-key u {
+ capture-pane -J
+ save-buffer /tmp/tmux-buffer
+ delete-buffer
+ display-popup -E -w 100% "urlview /tmp/tmux-buffer"
+}
+++ /dev/null
-COMMAND /home/stargrave/bin/www %s &
--- /dev/null
+#!/bin/sh -e
+cmd=www
+# regexp is taken from urlview
+grep -P -o '(((http|https|ftp|gopher)|mailto):(//)?[^ <>\"\t]*|(www|ftp)[0-9]?\\.[-a-z0-9.]+)[^ .,;\t\n\r<\">\\):]?[^, <>\"\t]*[^ .,;\t\n\r<\">\\):]' "$@" |
+fzf --bind="enter:execute($cmd {})" \
+ --bind="ctrl-f:execute(rlwrap --pre-given={} head -1 | xargs $cmd)"
--- /dev/null
+set commentstring=//\ %s
--- /dev/null
+vim9script
+
+export def Do()
+ var lines = []
+ job_start(&equalprg, {
+ in_io: "buffer", in_buf: bufnr("%"),
+ callback: (chan, msg) => {
+ lines = add(lines, msg)
+ },
+ exit_cb: (job, status) => {
+ if status != 0
+ for i in range(len(lines))
+ lines[i] = substitute(lines[i], "^[^:]\\+:", @% .. ":", "")
+ endfor
+ cgetexpr lines
+ copen
+ return
+ endif
+ var view = winsaveview()
+ silent execute ":%!" .. &equalprg
+ winrestview(view)
+ }
+ })
+enddef
--- /dev/null
+vim9script
+
+export def Do(motion: string)
+ var saved = @/
+ mark '
+ execute motion
+ call histdel("/", -1)
+ @/ = saved
+enddef
--- /dev/null
+vim9script
+
+export def KillSignature()
+ cursor(1, 1)
+ search('^[>|] \?-- \?$')
+ if getpos(".")[1] != 1
+ normal d}
+ endif
+enddef
--- /dev/null
+autocmd BufRead,BufNewFile *.h setlocal filetype=ch
-autocmd BufNewFile,BufRead *.hjson setlocal shiftwidth=2
-autocmd BufNewFile,BufRead *.hjson setlocal commentstring=#\ %s
+autocmd BufNewFile,BufRead *.hjson set filetype=hjson
-function! s:KillSignature()
- call cursor(1, 1)
- call search('^[>|] \?-- \?$')
- if getpos(".")[1] != 1
- normal d}
- endif
-endfunction
-
-autocmd BufRead /tmp/mutt-* call s:KillSignature()
-autocmd BufRead /tmp/mutt-* setlocal textwidth=72
+autocmd BufRead,BufNewFile /tmp/mutt-* set filetype=mutt
+++ /dev/null
-autocmd BufNewFile,BufRead *.tex abbreviate framedo \begin{frame}<CR>\frametitle{TODO}<CR>\end{frame}<ESC>k>>wwlcw
-autocmd BufNewFile,BufRead *.tex abbreviate itemdo \begin{itemize}<CR>\item <CR>\end{itemize}<ESC>k>>$a
-autocmd BufNewFile,BufRead *.tex abbreviate cnter \begin{center}<CR>\end{center}<ESC>k$o
--- /dev/null
+abbreviate <buffer> pdiff ptrdiff_t
+abbreviate <buffer> SZ size_t
+abbreviate <buffer> u8 uint8_t *
+abbreviate <buffer> ucc unsigned char *
-setlocal commentstring=//\ %s
-
-abbreviate UCC unsigned char
-abbreviate u8 uint8_t *
-abbreviate U8 (uint8_t *)
-let @e = "ywoassert(\epA!= NULL);\e"
-
-setlocal equalprg=cfmt.sh
-command! -buffer Fmt normal mtgg=G'tz.
+let @e = "yWoassert(\epA!= NULL);\e"
+nmap [cl O// clang-format off<ESC>
+nmap ]cl o// clang-format on<ESC>
--- /dev/null
+set equalprg=clang-format
+command! -buffer Fmt call fmt#Do()
+++ /dev/null
-au User lsp_setup call lsp#register_server({
-\ "name": "clangd",
-\ "cmd": ["clangd"],
-\ "allowlist": ["c", "cpp", "objc", "objcpp"],
-\})
--- /dev/null
+set spell
+set textwidth=72
+++ /dev/null
-setlocal spell spelllang=ru,en_gb
+++ /dev/null
-setlocal textwidth=72
set noexpandtab
-let g:defsplit_shift=" "
+let b:defsplit_shift=" "
+set makeprg=go\ build
let @e = "^iif err = \eA; err != nil {\eo "
let @r = "oif err != nil {\r}\eO "
-" Copyright 2011 The Go Authors. All rights reserved.
-" Use of this source code is governed by a BSD-style
-" license that can be found in the LICENSE file.
-"
-" fmt.vim: Vim command to format Go files with gofmt.
-"
-" This filetype plugin add a new commands for go buffers:
-"
-" :Fmt
-"
-" Filter the current Go buffer through gofmt.
-" It tries to preserve cursor position and avoids
-" replacing the buffer with stderr output.
-"
-" Options:
-"
-" g:go_fmt_commands [default=1]
-"
-" Flag to indicate whether to enable the commands listed above.
-"
-" g:gofmt_command [default="gofmt"]
-"
-" Flag naming the gofmt executable to use.
-"
-if exists("b:did_ftplugin_go_fmt")
- finish
-endif
-
-if !exists("g:go_fmt_commands")
- let g:go_fmt_commands = 1
-endif
-
-if !exists("g:gofmt_command")
- let g:gofmt_command = "goimports"
-endif
-
-if g:go_fmt_commands
- command! -buffer Fmt call s:GoFormat()
-endif
-
-function! s:GoFormat()
- let view = winsaveview()
- silent execute "%!" . g:gofmt_command
- if v:shell_error
- let errors = []
- for line in getline(1, line('$'))
- let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\)\s*\(.*\)')
- if !empty(tokens)
- call add(errors, {"filename": @%,
- \"lnum": tokens[2],
- \"col": tokens[3],
- \"text": tokens[4]})
- endif
- endfor
- if empty(errors)
- % | " Couldn't detect gofmt error format, output errors
- endif
- undo
- if !empty(errors)
- call setqflist(errors, 'r')
- endif
- echohl Error | echomsg "Gofmt returned error" | echohl None
- endif
- call winrestview(view)
-endfunction
-
-let b:did_ftplugin_go_fmt = 1
-
-" vim:ts=4:sw=4:et
+set equalprg=goimports
+command! -buffer Fmt call fmt#Do()
+++ /dev/null
-" Popup documentation of specified object under the cursor
-" Requires github.com/zmb3/gogetdoc in the $PATH
-
-function! LintStatus()
- if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return "GD" | endif
- return ""
-endfunction
-
-function! GoGetDocGot(ch)
- let msgs = []
- while ch_status(a:ch) == "buffered"
- let msgs = add(msgs, ch_read(a:ch))
- endwhile
- if exists("b:godocid") | call popup_close(b:godocid) | endif
- if len(msgs) == 0
- echohl WarningMsg | echomsg "No go doc" | echohl None
- return
- endif
- let msgs = msgs[2:]
- let b:godocid = popup_atcursor(msgs[2:-2], {"wrap": 0, "title": msgs[0], "move": "word"})
-endfunction
-
-function! s:GoGetDoc()
- if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return | endif
- let pos = line2byte(line(".")) + col(".") - 2
- let cmdline = "gogetdoc -pos " . expand("%p") . ":#" . pos
- echomsg cmdline
- let b:gogetdoc_job = job_start(cmdline, {
- \"in_mode": "nl",
- \"err_io": "null",
- \"close_cb": "GoGetDocGot",
- \})
-endfunction
-
-nmap <buffer> <silent> <CR> :call <SID>GoGetDoc()<CR>
+++ /dev/null
-au User lsp_setup call lsp#register_server({
-\ "name": "gopls",
-\ "cmd": ["gopls"],
-\ "allowlist": ["go"],
-\})
-nnoremap <silent> <buffer> ]] :call <SID>Go_jump('/^\(func\\|type\)')<cr>
-nnoremap <silent> <buffer> [[ :call <SID>Go_jump('?^\(func\\|type\)')<cr>
-nnoremap <silent> <buffer> ]m :call <SID>Go_jump('/^\s*\(func\\|type\)')<cr>
-nnoremap <silent> <buffer> [m :call <SID>Go_jump('?^\s*\(func\\|type\)')<cr>
-
-if exists('*<SID>Go_jump') | finish | endif
-
-fun! <SID>Go_jump(motion) range
- let cnt = v:count1
- let save = @/ " save last search pattern
- mark '
- while cnt > 0
- silent! exe a:motion
- let cnt = cnt - 1
- endwhile
- call histdel('/', -1)
- let @/ = save " restore last search pattern
-endfun
+vim9script
+if exists("*go#jump#Do") | finish | endif
+nnoremap <silent> <buffer> ]] :call go#jump#Do(':/^\(func\\|type\)')<CR>
+nnoremap <silent> <buffer> [[ :call go#jump#Do(':?^\(func\\|type\)')<CR>
+nnoremap <silent> <buffer> ]m :call go#jump#Do(':/^\s*\(func\\|type\)')<CR>
+nnoremap <silent> <buffer> [m :call go#jump#Do(':?^\s*\(func\\|type\)')<CR>
--- /dev/null
+set shiftwidth=2
+set commentstring=#\ %s
--- /dev/null
+abbreviate <buffer> tto <em></em><ESC>F<i
--- /dev/null
+vim9script
+mutt#KillSignature()
+set textwidth=72
+set commentstring=>%s
+set syntax=mail
+silent :%substitute /^> */>/e | set nohlsearch
-iabbrev #u # coding: utf-8
-iabbrev tt # type:
-iabbrev tti # type: ignore
-iabbrev trace import pdb ; pdb.set_trace()<CR>pass
-iabbrev itrace import ipdb ; ipdb.set_trace()<CR>pass
-iabbrev embed import code ; code.interact(local=locals())
-iabbrev iembed from IPython import embed ; embed()
-iabbrev kargs *args, **kwargs
-iabbrev pyldis # pylint: disable=
-iabbrev deff def () -> None:<ESC>F(i
-iabbrev """ """<ESC>o"<ESC>2i"<ESC>kA
-nmap <leader>ss :set lazyredraw<CR>vip:sort u<CR>:'<,'>sort i<CR>:set nolazyredraw<CR>
-let @b = ">gvctry:\e<<oexcept Exception as err:\rimport pdb ; pdb.set_trace()\rpass\e>>k>>kP"
-let @n = "ddV/except.*:\r<n3dd"
+iabbrev <buffer> #u # coding: utf-8
+iabbrev <buffer> tt # type:
+iabbrev <buffer> tti # type: ignore
+iabbrev <buffer> trace breakpoint()
+iabbrev <buffer> embed import code ; code.interact(local=locals())
+iabbrev <buffer> kargs *args, **kwargs
+iabbrev <buffer> pyldis # pylint: disable=
+iabbrev <buffer> deff def () -> None:<ESC>F(i
+nmap <buffer> <leader>ss :set lazyredraw<CR>vip:sort u<CR>:'<,'>sort i<CR>:set nolazyredraw<CR>
+syntax keyword pythonStatement match case
+++ /dev/null
-" Python imports insert completion
-" Maintainer: Sergey Matveev <stargrave@stargrave.org>
-" License: GNU General Public License version 3 of the License or later
-"
-" This plugin is intended for quick import-line insertion.
-" For example you have got "from foo.bar import Baz" import somewhere in
-" your Git-versioned code. In another file you can write "Baz" and then
-" press <F3> in insert mode. Completion menu will show you suggestions
-" of all import lines from your code containing Baz import.
-"
-" If you have Pylint or Pyflakes output in quickfix window, containing
-" unfedined variables errors, then you can you :call AllImportCompl()
-" function. It will go through the quickfix list and find all possible
-" imports, sort them and insert under current cursor position.
-"
-" It uses external "git grep" call and assumes that "canonical" Python
-" import format is used (single import per line).
-" You can use http://www.git.stargrave.org/?p=pyimportcan.git;a=blob;f=pyimportcan.pl
-" utility to convert existing imports to that format.
-
-let s:git_grep_cmd = "git grep -H --line-number --ignore-case --no-color "
-
-if exists('g:loaded_importcompl') | finish | endif
-let g:loaded_importcompl = 1
-
-function! SortByLen(s1, s2)
- if len(a:s1) == len(a:s2) | return a:s1 > a:s2 | endif
- return 1 ? len(a:s1) > len(a:s2) : -1
-endfunction
-
-function! ImportCompl()
- normal diw
- let output = system(s:git_grep_cmd . '"^from .* import .*' . @" . '" -- "*.py" "**/*.py"')
- let suggestions = []
- for line in split(output, "\n")
- if stridx(line, "unused-import") != -1 | continue | endif
- let m = matchlist(line, '^.*:\d\+:\(.*\)$')
- if len(m) == 0 | continue | endif
- call insert(suggestions, m[1])
- endfor
- call sort(suggestions, "SortByLen")
- call uniq(suggestions)
- call reverse(suggestions)
- call complete(col('.'), suggestions)
- return ''
-endfunction
-
-inoremap <F3> <C-R>=ImportCompl()<CR>
-
-function! AllImportCompl()
- let output = system(s:git_grep_cmd . '"^from .* import" -- "*.py" "**/*.py"')
- let imports = {}
- for line in split(output, "\n")
- if stridx(line, "unused-import") != -1 | continue | endif
- for regexp in [
- \'^.*:\d\+:\(from .* import \(\w\+\).*\)$',
- \'^.*:\d\+:\(from .* import \w\+ as \(\w\+\).*\)$',
- \]
- let m = matchlist(line, regexp)
- if len(m) == 0 | break | endif
- let imports[m[2]] = m[1]
- endfor
- endfor
- let lines = getloclist(winnr())
- if len(lines) == 0 | let lines = getqflist() | endif
- let result = []
- for line in lines
- let m = matchlist(line.text, '\(E0602\|F821\).*' . "'" . '\(\w\+\)' . "'$")
- if len(m) == 0 || !has_key(imports, m[2]) | continue | endif
- call insert(result, imports[m[2]])
- endfor
- call sort(result, "i")
- call uniq(result)
- call append(".", result)
-endfunction
+++ /dev/null
-if executable("pyls")
- " pip install 'python-language-server[all]'
- au User lsp_setup call lsp#register_server({
- \ "name": "pyls",
- \ "cmd": {server_info->["pyls"]},
- \ "allowlist": ["python"],
- \})
-endif
--- /dev/null
+vim9script
+@b = ">gvctry:\e<<oexcept Exception as err:\rbreakpoint()\rpass\e>>k>>kP"
+@n = "ddV/except.*:\r<n3dd"
+++ /dev/null
-" PEP8 caller
-" Maintainer: Sergey Matveev <stargrave@stargrave.org>
-" License: GNU General Public License version 3 of the License or later
-"
-" Call pycodestyle utility and fill quickfix window with its results.
-
-sign define P8 text=P8 texthl=Error
-function! s:pep8()
- set makeprg=PATH=$PATH\ pycodestyle\ --select=E,W\ %
- silent make
- sign unplace *
- let l:id = 1
- for item in getqflist()
- execute(':sign place '.l:id.' name=P8 line='.l:item.lnum.' buffer='.l:item.bufnr)
- let l:id = l:id + 2
- endfor
- redraw!
- copen
-endfunction
-
-map <F5> :call <SID>pep8()<CR>
+++ /dev/null
-" Asynchronous pylint utility call
-" Maintainer: Sergey Matveev <stargrave@stargrave.org>
-" License: GNU General Public License version 3 of the License or later
-"
-" This plugin allows you to asynchronously call pylint.
-"
-" * Add %{LintStatus()} to your statusline to see if pylint is running
-" * Press <F6> to start pylint on current file
-" * Press <S-F6> to open quickfix window with messages from pylint
-" * All lines with corresponding pylint existing warning will be highlighted
-" * If no warning and errors occurred, "pylint is clean" message will be shown
-" * If existing quickfix window is found, then it won't be overwritten.
-" Start pylint manually (<F6>) to force its filling
-" * After Python file is saved, pylint is automatically started
-
-if exists('g:loaded_pylint') | finish | endif
-let g:loaded_pylint = 1
-
-function! LintStatus()
- if exists("b:lint_job") && job_status(b:lint_job) == "run" | return "LN" | endif
- return ""
-endfunction
-
-function! s:qffill(ch)
- let msgs = []
- while ch_status(a:ch) == 'buffered'
- let msgs = add(msgs, ch_read(a:ch))
- endwhile
- cgetexpr msgs
-endfunction
-
-sign define LN text=LN texthl=Error
-
-function! PylintFinish(ch)
- let l:errorformat_bak = &errorformat
- set errorformat=%f:%l:\ [%t]%m,%f:%l:%m
- call s:qffill(a:ch)
- let &errorformat=l:errorformat_bak
- sign unplace *
- let l:id = 2
- for item in getqflist()
- if item.lnum == 0 | continue | endif
- execute(':sign place '.l:id.' name=LN line='.l:item.lnum.' buffer='.l:item.bufnr)
- let l:id = l:id + 2
- endfor
- redraw!
- if l:id == 2
- echohl MoreMsg | echomsg "pylint is clean" | echohl None
- cclose
- endif
-endfunction
-
-function! PylintStart()
- if exists("g:pylint_disable") || (exists("b:lint_job") && job_status(b:lint_job) == "run")
- return
- endif
- let ignores = [
- \"locally-disabled",
- \"no-init",
- \"no-self-use",
- \"too-few-public-methods",
- \"missing-docstring",
- \"too-many-instance-attributes",
- \"invalid-name",
- \"too-many-arguments",
- \"too-many-locals",
- \"too-many-public-methods",
- \"no-value-for-parameter",
- \]
- if !exists("g:pylint_linter") | let g:pylint_linter = "pylint" | endif
- if g:pylint_linter == "flake8"
- let cmdline = [
- \"flake8",
- \"--ignore=E501",
- \"--format=%(path)s:%(row)d: [%(code)s] %(text)s",
- \"--max-line-length=90",
- \expand("%p")
- \]
- elseif g:pylint_linter == "pylint"
- let cmdline = [
- \"pylint",
- \"--jobs=4",
- \"--reports=n",
- \"--msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}",
- \"--disable=" . join(ignores, ","),
- \"--persistent=n",
- \"--score=no",
- \expand("%p")
- \]
- else
- echohl WarningMsg | echomsg "Unknown linter specified" | echohl None
- return
- endif
- let b:lint_job = job_start(cmdline, {"in_mode": "nl", "err_io": "null", "close_cb": "PylintFinish"})
-endfunction()
-
-map <F6> :unlet! g:pylint_disable<CR>:call PylintStart()<CR>
-map \e[32~ :redraw!<CR>:copen<CR>
-autocmd BufWritePost *.py call PylintStart()
+++ /dev/null
-" Nose-compatible test name preparer
-" Maintainer: Sergey Matveev <stargrave@stargrave.org>
-" License: GNU General Public License version 3 of the License or later
-"
-" When standing inside TestCase's test method, type <leader>t and full
-" Python (your.project.tests:TestCaseName.test_method_name) path will be
-" copied to clipboard ("*) register.
-
-function! TestName()
- normal mm
- normal ?.*\s*def .*[Tt]est\r
- normal ^f(Byw
- let postfix = @"
- normal [[f(Byw
- let postfix = @" . "." . postfix
- normal `m
- let base = join([""] + split(getcwd(), "/")[:-1], "/")
- let prefix = substitute(expand("%:p:r")[len(base)+1:], "/", ".", "g")
- let name = prefix . ":" . postfix
- let @* = name
- echomsg name
-endfunction
-
-nmap <leader>t :call TestName()<CR>
+++ /dev/null
-function! UnusedImportsRemover()
- call setqflist(filter(getqflist(), "stridx(v:val.text, \"unused-import\") != -1 || stridx(v:val.text, \"imported but unused\") != -1"))
- cdo d
-endfunction
+++ /dev/null
-let b:did_ftplugin = 1
--- /dev/null
+set commentstring=--\ %s
--- /dev/null
+nmap K :Man <C-R><C-W>.tcl86<CR>
--- /dev/null
+abbreviate framedo \begin{frame}<CR>\frametitle{TODO}<CR>\end{frame}<ESC>k>>wwlcw
+abbreviate itemdo \begin{itemize}<CR>\item <CR>\end{itemize}<ESC>k>>$a
+abbreviate cnter \begin{center}<CR>\end{center}<ESC>k$o
+abbreviate TTT \texttt{}<ESC>i
-abbreviate \t @tab
-setlocal commentstring=@c\ %s
+abbreviate <buffer> \t @tab
+set commentstring=@c\ \ %s
--- /dev/null
+set commentstring=#%s
+abbreviate <buffer> v9 vim9script
-setlocal shiftwidth=2
+set shiftwidth=2
--- /dev/null
+vim9script
+
+const Sep = "₀◎○ë" # something that won't be met anywhere
+
+export def Do(first: number, last: number, sep: string)
+ var in: list<string>
+ for n in range(first, last)
+ in = add(in, substitute(getline(n), sep, "\t" .. Sep, "g"))
+ endfor
+ var out = systemlist("column -t -s \"\t\"", add(in, ""))
+ for n in range(first, last)
+ setline(n, substitute(out[n - first], " " .. Sep, escape(sep, "&"), "g"))
+ endfor
+enddef
--- /dev/null
+if exists("*align#Do") | finish | endif
+command! -nargs=1 -range Align call align#Do(<line1>, <line2>, <f-args>)
--- /dev/null
+vim9script
+
+export def Do(): string
+ var bufsRaw = execute("buffers", "silent")
+ var bufs: list<string>
+ var leftIdx: number
+ var rightIdx: number
+ var filename: string
+ var linenum: string
+ var attrs: list<string>
+ var attr: string
+ var hl: string
+ for buf in split(bufsRaw, "\n")[ : 16]
+ leftIdx = stridx(buf, '"')
+ rightIdx = strridx(buf, '"')
+ filename = substitute(
+ strpart(buf, leftIdx + 1, rightIdx - leftIdx - 1), "%", "%%", "g")
+ linenum = split(strpart(buf, rightIdx), " ")[-1]
+ attrs = split(strpart(buf, 0, leftIdx - 1), '\s\+')
+ attrs = map(attrs, 'substitute(v:val, "%", "%%", "g")')
+ attr = (len(attrs) == 1) ? attrs[0] : attrs[0] .. ":" .. join(attrs[1 :], "")
+ attr = "%#TabLine#" .. attr .. "%*"
+ if len(filename) > 20 | filename = "<" .. filename[-(20 - 1) :] | endif
+ hl = (match(attr, "%%") == -1) ? "%#TabLine#:" : "%#TabLineSel#"
+ bufs = add(bufs, attr .. hl .. filename .. ":" .. linenum .. "%*")
+ endfor
+ return join(bufs, " ")
+enddef
--- /dev/null
+if exists("*buftabline#Do") | finish | endif
+set showtabline=2
+set tabline=%!buftabline#Do()
--- /dev/null
+vim9script
+
+export def Do(...args: list<number>)
+ if len(args) == 0 | return | endif
+ execute "normal " .. args[0] .. (args[0] > 0 ? "g;" : "g,")
+enddef
--- /dev/null
+if exists("*chnglstnav#Do") | finish | endif
+nmap <End> :changes<CR>:call chnglstnav#Do()<Left>
--- /dev/null
+vim9script
+
+# Universal Ctags creator
+# Maintainer: Sergey Matveev <stargrave@stargrave.org>
+# License: GNU General Public License version 3 of the License or later
+#
+# Create "tags" file in your project's root first.
+# Then :Ctags LANG to fill it.
+
+export def Do(lang: string, onlyCmd: bool, verbose: bool)
+ var dsts = tagfiles()
+ if len(dsts) == 0
+ echohl WarningMsg | echomsg "No tagfiles" | echohl None
+ return
+ endif
+ var dst = sort(dsts, (a, b) => len(a) > len(b) ? 1 : len(a) == len(b) ? 0 : -1)[0]
+ var src = "/" .. join(split(dst, "/")[: -3], "/")
+ if dst[0] != "/"
+ dst = getcwd() .. "/.tags/tags"
+ src = getcwd()
+ endif
+ var cmdline = [
+ "uctags",
+ "--languages=" .. lang,
+ "--python-kinds=-i",
+ "--c++-kinds=+p",
+ "--recurse",
+ ]
+ if verbose == true | cmdline += ["--verbose"] | endif
+ cmdline += ["-f", dst, src]
+ if onlyCmd == true
+ echo join(cmdline, " ")
+ return
+ endif
+ execute "!" .. join(cmdline, " ")
+ if verbose != true | redraw! | endif
+enddef
--- /dev/null
+vim9script
+if exists("*ctags#Do") | finish | endif
+command! -nargs=1 Ctags silent call ctags#Do(<f-args>, false, false)
+command! -nargs=1 Ctagsv silent call ctags#Do(<f-args>, true, false)
+command! -nargs=1 Ctagscmd call ctags#Do(<f-args>, true, true)
--- /dev/null
+vim9script
+
+# Function call splitter
+# Maintainer: Sergey Matveev <stargrave@stargrave.org>
+# License: GNU General Public License version 3 of the License or later
+#
+# This plugin splits function call on several lines.
+#
+# def foobar(self, foo: str, bar: Some[thing, too]) -> None:
+# to
+# def foobar(
+# self,
+# foo: str,
+# bar: Some[thing, too],
+# ) -> None:
+#
+# foo(bar, baz)[0]
+# to
+# foo(
+# bar,
+# baz,
+# )[0]
+#
+# You can un-split it using :Undefsplit command on the line where
+# splitting starts.
+#
+# :Defsplit has optional argument specifying how many opening round
+# parenthesis must be skipped.
+# :Defsplit 1 on foo(baz(baz(...))) produces
+# foo(baz(
+# baz(...),
+# ))
+#
+# Also there is :Brsplit command behaving similarly, but it splits other
+# types of brackets: "{}", "[]".
+
+def BracketFind(brsAllowable: list<string>, line: string, offset: number): number
+ var possible: list<number>
+ var found: number
+ for bracket in brsAllowable
+ found = stridx(line, bracket, offset)
+ if found != -1 | possible += [found] | endif
+ endfor
+ return min(possible)
+enddef
+
+const Brs = {"(": ")", "[": "]", "{": "}"}
+
+export def Do(brsAllowable: list<string>, singleLineComma: bool, ...args: list<string>)
+ var skip = len(args) == 0 ? 0 : str2nr(args[0])
+ var shift = get(b:, "defsplit_shift", " ")
+ var line = getline(".")
+ var prfx: string
+ for i in range(len(line))
+ if line[i] != shift[0]
+ prfx = strpart(line, 0, i)
+ if line[i : i + 3] ==# "def " ||
+ line[i : i + 5] ==# "class " ||
+ line[i : i + 9] ==# "async def "
+ shift ..= shift
+ endif
+ break
+ endif
+ endfor
+ var brfirst = BracketFind(brsAllowable, line, 0)
+ var brlast = strridx(line, Brs[line[brfirst]])
+ while skip > 0
+ brfirst = BracketFind(brsAllowable, line, brfirst + 1)
+ brlast = strridx(line, Brs[line[brfirst]], brlast - 1)
+ skip -= 1
+ endwhile
+ var [curly, round, squar, outbuf] = [0, 0, 0, ""]
+ var ready = [strpart(line, 0, brfirst + 1)]
+ var trailingComma = true
+ for c in split(line[brfirst + 1 : brlast - 1], '\zs')
+ if c ==# "*" | trailingComma = false | endif
+ if outbuf ==# "" && c ==# " " | continue | endif
+ outbuf ..= c
+ if c ==# "," && !curly && !round && !squar
+ ready = add(ready, prfx .. shift .. outbuf)
+ outbuf = ""
+ elseif c ==# "[" | squar += 1
+ elseif c ==# "]" | squar -= 1
+ elseif c ==# "(" | round += 1
+ elseif c ==# ")" | round -= 1
+ elseif c ==# "{" | curly += 1
+ elseif c ==# "}" | curly -= 1
+ endif
+ endfor
+ if trailingComma && !(singleLineComma == true && len(ready) == 1)
+ outbuf = outbuf .. ","
+ endif
+ ready = add(ready, prfx .. shift .. outbuf)
+ ready = add(ready, prfx .. strpart(line, brlast))
+ append(line("."), ready)
+ normal "_dd
+enddef
--- /dev/null
+if exists("*defsplit#Do") | finish | endif
+command! -nargs=? Defsplit call defsplit#Do(["("], v:false, <f-args>)
+command! -nargs=? Brsplit call defsplit#Do(["(", "[", "{"], v:false, <f-args>)
+command! -nargs=? Defsplits call defsplit#Do(["("], v:true, <f-args>)
+command! -nargs=? Brsplits call defsplit#Do(["(", "[", "{"], v:true, <f-args>)
+command! Undefsplit normal ^v%$J:keepp s/^\(.*\)\([([{]\) \(.*[^,]\),\?\([)\]}]\)\(.*\)$/\1\2\3\4\5<CR>:keepp s/, \?\([)\]}]\+\)$/\1/e<CR>:<CR>
--- /dev/null
+vim9script
+
+# Simplified version of http://www.vim.org/scripts/script.php?script_id=2184
+# that does not replace current window
+
+export def Goto()
+ var file = bufname("%")
+ if filereadable(file) | return | endif
+ var names = matchlist(file, '\(.\{-1,}\):\%(\(\d\+\)\%(:\(\d*\):\?\)\?\)\?$')
+ if empty(names) | return | endif
+ var fileName = names[1]
+ var lineNum = names[2] == "" ? "0" : names[2]
+ var colNum = names[3] == "" ? "0" : names[3]
+ if !filereadable(fileName) | return | endif
+ var nr = bufnr("%")
+ execute "keepalt edit +" .. lineNum .. " " .. fileName
+ execute "normal! " .. colNum .. "|"
+ execute "bdelete " .. nr
+enddef
--- /dev/null
+if exists("*fileline#Goto") | finish | endif
+augroup FilelinePlugin
+ autocmd!
+ autocmd BufNewFile *:* nested call fileline#Goto()
+ autocmd BufRead *:* nested call fileline#Goto()
+augroup END
--- /dev/null
+vim9script
+
+# Popup documentation of specified object under the cursor
+# Requires github.com/zmb3/gogetdoc in the $PATH
+
+export def Status(): string
+ if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return "GD" | endif
+ return ""
+enddef
+
+export def Got(ch: channel)
+ var msgs: list<string>
+ while ch_status(ch) == "buffered"
+ msgs = add(msgs, ch_read(ch))
+ endwhile
+ if exists("b:godocid") | popup_close(b:godocid) | endif
+ if len(msgs) == 0
+ echohl WarningMsg | echomsg "No go doc" | echohl None
+ return
+ endif
+ msgs = msgs[2 :]
+ b:godocid = popup_atcursor(msgs[2 : -2],
+ {"wrap": 0, "title": msgs[0], "move": "word"})
+enddef
+
+export def Do()
+ if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return | endif
+ var pos = line2byte(line(".")) + col(".") - 2
+ var cmdline = "gogetdoc -pos " .. expand("%p") .. ":#" .. pos
+ echomsg cmdline
+ b:gogetdoc_job = job_start(cmdline, {
+ "in_mode": "nl",
+ "err_io": "null",
+ "close_cb": "go#getdoc#Got",
+ })
+enddef
--- /dev/null
+if exists("*go#getdoc#Do") | finish | endif
+let b:mein_status_func=function("go#getdoc#Status")
+nmap <buffer> <silent> <CR> :call go#getdoc#Do()<CR>
--- /dev/null
+vim9script
+
+# Based on Mark plugin by Yuheng Xie:
+# https://www.vim.org/scripts/script.php?script_id=1238
+# That one:
+# * uses autoload for lazy loading
+# * is ported to vim9script for code simplification and performance
+# * uses lists, instead of pack of variables to keep the state
+# * does not pollute global variable namespace
+# * has ability only to highlight the current word
+
+hi MarkWord1 ctermfg=Black ctermbg=Cyan
+hi MarkWord2 ctermfg=Black ctermbg=Green
+hi MarkWord3 ctermfg=Black ctermbg=Yellow
+hi MarkWord4 ctermfg=Black ctermbg=Red
+hi MarkWord5 ctermfg=Black ctermbg=Magenta
+hi MarkWord6 ctermfg=Black ctermbg=Blue
+
+const MarkIdOffset = 3333
+var Show: bool
+var Words: list<string>
+var Idx: number
+
+def Init()
+ if len(Words) > 0 | return | endif
+ var i = 1
+ while hlexists("MarkWord" .. i) | i = i + 1 | endwhile
+ Words = repeat([""], i - 1)
+enddef
+
+def WinRefresh()
+ for i in range(len(Words))
+ exec "syntax clear MarkWord" .. (i + 1)
+ silent! matchdelete(MarkIdOffset + i + 1)
+ if (Words[i] == "") || !Show | continue | endif
+ matchadd("MarkWord" .. (i + 1), Words[i], -10, MarkIdOffset + i + 1)
+ endfor
+enddef
+
+export def Refresh()
+ Init()
+ var nr = winnr()
+ silent! windo WinRefresh()
+ silent! exec ":" .. nr .. "wincmd w"
+enddef
+
+export def Toggle()
+ Show = !Show
+ Refresh()
+enddef
+
+def Do(word: string)
+ for i in range(len(Words))
+ if !Show | Words[i] = ""
+ elseif Words[i] == word | Words[i] = "" | return
+ endif
+ endfor
+ if !Show | Show = true | endif
+ for i in range(len(Words))
+ if Words[i] != "" | continue | endif
+ Words[i] = word
+ Idx = ((i + 1) == len(Words)) ? 0 : (i + 1)
+ return
+ endfor
+ Words[Idx] = word
+ Idx = ((Idx + 1) == len(Words)) ? 0 : (Idx + 1)
+enddef
+
+export def Word()
+ Init()
+ Do('\<' .. expand("<cword>") .. '\>')
+ Refresh()
+enddef
--- /dev/null
+if exists("*mark#Word") | finish | endif
+nmap <silent> <leader>m :call mark#Word()<CR>
+autocmd BufWinEnter,WinEnter * call mark#Refresh()
--- /dev/null
+vim9script
+
+# Based on https://vim.fandom.com/wiki/Move_to_next/previous_line_with_same_indentation
+
+export def Do(step: number, diff: number)
+ var l = line(".")
+ var cin = indent(l)
+ var last = line("$")
+ var lin: number
+ while (l > 0 && l <= last)
+ l += step
+ if (strlen(getline(l)) == 0) | continue | endif
+ lin = indent(l)
+ if !(
+ ((diff == 0) && (lin == cin)) ||
+ ((diff == 1) && (lin > cin)) ||
+ ((diff == -1) && (lin < cin))
+ ) | continue | endif
+ cursor(l, lin + 1)
+ return
+ endwhile
+enddef
--- /dev/null
+if exists("*navindent#Do") | finish | endif
+nmap <silent> [- :call navindent#Do(-1, -1)<CR>
+nmap <silent> ]- :call navindent#Do(+1, -1)<CR>
+nmap <silent> [= :call navindent#Do(-1, 0)<CR>
+nmap <silent> ]= :call navindent#Do(+1, 0)<CR>
+nmap <silent> [+ :call navindent#Do(-1, +1)<CR>
+nmap <silent> ]+ :call navindent#Do(+1, +1)<CR>
--- /dev/null
+vim9script
+export def Load()
+ highlight nonhuman ctermbg=blue ctermfg=red
+ autocmd BufReadPost * syntax match nonhuman "[^\u0000-\u007Fа-яА-ЯёЁäÄöÖüÜßẞ]" containedin=ALL
+enddef
--- /dev/null
+vim9script
+if exists("*nonhumanhl#Load") | finish | endif
+nonhumanhl#Load()
--- /dev/null
+vim9script
+
+# Python imports insert completion
+# Maintainer: Sergey Matveev <stargrave@stargrave.org>
+# License: GNU General Public License version 3 of the License or later
+#
+# This plugin is intended for quick import-line insertion.
+# For example you have got "from foo.bar import Baz" import somewhere in
+# your Git-versioned code. In another file you can write "Baz" and then
+# press <F3> in insert mode. Completion menu will show you suggestions
+# of all import lines from your code containing Baz import.
+#
+# If you have Pylint or Pyflakes output in quickfix window, containing
+# unfedined variables errors, then you can you :call python#importcompl#all()
+# function. It will go through the quickfix list and find all possible
+# imports, sort them and insert under current cursor position.
+#
+# It uses external "git grep" call and assumes that "canonical" Python
+# import format is used (single import per line).
+# You can use http://www.git.stargrave.org/?p=pyimportcan.git;a=blob;f=pyimportcan.pl
+# utility to convert existing imports to that format.
+
+const gitGrepCmd = "git grep -H --line-number --ignore-case --no-color "
+
+export def Do(): string
+ normal diw
+ var output = system(gitGrepCmd .. '"^from .* import .*' .. @" .. '" -- "*.py" "**/*.py"')
+ var suggestions: list<string>
+ var m: list<string>
+ for line in split(output, "\n")
+ if stridx(line, "unused-import") != -1 | continue | endif
+ m = matchlist(line, '^.*:\d\+:\(.*\)$')
+ if len(m) == 0 | continue | endif
+ insert(suggestions, m[1])
+ endfor
+ sort(suggestions, (s1: string, s2: string): number => {
+ if len(s1) == len(s2) | return 0 | endif
+ if len(s1) > len(s2) | return 1 | endif
+ return -1
+ })
+ uniq(suggestions)
+ reverse(suggestions)
+ complete(col("."), suggestions)
+ return ""
+enddef
+
+export def All()
+ var output = system(gitGrepCmd .. '"^from .* import" -- "*.py" "**/*.py"')
+ var imports = {}
+ var ms: list<string>
+ for line in split(output, "\n")
+ if stridx(line, "unused-import") != -1 | continue | endif
+ for regexp in [
+ '^.*:\d\+:\(from .* import \(\w\+\).*\)$',
+ '^.*:\d\+:\(from .* import \w\+ as \(\w\+\).*\)$',
+ ]
+ ms = matchlist(line, regexp)
+ if len(ms) == 0 | break | endif
+ imports[ms[2]] = ms[1]
+ endfor
+ endfor
+ var lines = getloclist(winnr())
+ if len(lines) == 0 | lines = getqflist() | endif
+ var result: list<string>
+ var m: string
+ for line in lines
+ if line.text !~ "^undefined name" | continue | endif
+ m = line.text[strridx(line.text[: -2], "'") + 1 : -2]
+ if len(m) == 0 || !has_key(imports, m) | continue | endif
+ insert(result, imports[m])
+ endfor
+ sort(result, "i")
+ uniq(result)
+ append(".", result)
+enddef
--- /dev/null
+vim9script
+
+export def Remove()
+ setqflist(filter(getqflist(), (idx, val) =>
+ stridx(val.text, "unused-import") != -1 ||
+ stridx(val.text, "imported but unused") != -1))
+ cdo d
+enddef
--- /dev/null
+if exists("*python#importcompl#Do") | finish | endif
+inoremap <F3> <C-R>=python#importcompl#Do()<CR>
+cnoremap <F3> call python#importcompl#All()<CR>
+cnoremap <F4> call python#unused#Remove()<CR>
--- /dev/null
+vim9script
+
+# PEP8 caller
+# Maintainer: Sergey Matveev <stargrave@stargrave.org>
+# License: GNU General Public License version 3 of the License or later
+#
+# Call pycodestyle utility and fill quickfix window with its results.
+
+export def Do()
+ set makeprg=PATH=$PATH\ pycodestyle\ --select=E,W\ %
+ silent make
+ sign unplace *
+ var _id = 1
+ for item in getqflist()
+ execute(":sign place " .. _id .. " name=P8 line=" .. item.lnum ..
+ " buffer=" .. item.bufnr)
+ _id = _id + 2
+ endfor
+ redraw!
+ copen
+enddef
--- /dev/null
+if exists("*python#pep8#Do") | finish | endif
+sign define P8 text=P8 texthl=Error
+map <buffer> <F5> :call python#pep8#Do()<CR>
--- /dev/null
+vim9script
+
+# Nose-compatible test name preparer
+# Maintainer: Sergey Matveev <stargrave@stargrave.org>
+# License: GNU General Public License version 3 of the License or later
+#
+# When standing inside TestCase's test method, type <leader>t and full
+# Python (your.project.tests:TestCaseName.test_method_name) path will be
+# copied to clipboard ("*) register.
+
+export def Get()
+ var pos = getpos(".")
+ var postfix = matchstr(getline(search(".*\s*def .*[Tt]est", "b")), '\w\+(')[: -2]
+ postfix = matchstr(getline(search("^\s*class", "bn")), '\w\+(')[: -2] .. "." .. postfix
+ setpos(".", pos)
+ var base = join([""] + split(getcwd(), "/")[: -1], "/")
+ var prefix = substitute(expand("%:p:r")[len(base) + 1 :], "/", ".", "g")
+ var name = prefix .. ":" .. postfix
+ @* = name
+ echomsg name
+enddef
--- /dev/null
+if exists("*python#testname#Get") | finish | endif
+nmap <buffer> <leader>t :call python#testname#Get()<CR>
--- /dev/null
+vim9script
+
+export def PwdLoad()
+ g:whereami_pwdL = trim(system("pwd -L"))
+ g:whereami_pwdP = trim(system("pwd -P"))
+enddef
+
+export def Do(fmt: string)
+ var fullpath = expand("%:p")
+ if fullpath[ : len(g:whereami_pwdP) - 1] ==# g:whereami_pwdP
+ fullpath = g:whereami_pwdL .. fullpath[len(g:whereami_pwdP) : ]
+ endif
+ var where = printf(fmt, fullpath, line("."))
+ @* = where
+ echomsg where
+enddef
--- /dev/null
+if exists("*whereami#pwdLoad") | finish | endif
+autocmd VimEnter * call whereami#PwdLoad()
+nmap <leader>w :call whereami#Do("%s:%d")<CR>
+nmap <leader>W :call whereami#Do("breakpoint set --file %s --line %d")<CR>
--- /dev/null
+vim9script
+
+export def Do(query: string, opencmd: string)
+ silent var result = systemlist(g:zshfe_path .. " " .. query)
+ if len(result) == 0 | return | endif
+ execute opencmd .. " " .. result[0][: -2]
+enddef
--- /dev/null
+vim9script
+
+# zsh file completion caller
+# Maintainer: Sergey Matveev <stargrave@stargrave.org>
+# License: GNU General Public License version 3 of the License or later
+
+if exists("*zshfe#Do") | finish | endif
+if !exists("g:zshfe_path")
+ g:zshfe_path = expand("<sfile>:p:h") .. "/zshfe.zsh"
+endif
+
+command! -nargs=1 Fe call zshfe#Do(<f-args>, "edit")
+command! -nargs=1 Fsp call zshfe#Do(<f-args>, "split")
+command! -nargs=1 Fvs call zshfe#Do(<f-args>, "vsplit")
+
+nmap <Leader>e :Fe
+nmap <Leader><space> :Fsp
+nmap <Leader>v :Fvs
#!/usr/bin/env zsh
-set -e
+setopt ERR_EXIT
zmodload zsh/zpty
zpty zshfe zsh
zpty -w zshfe "print ZSHFE $*"$'\t EFHSZ\nexit\n'
--- /dev/null
+let &t_BE = "\e[?2004h"
+let &t_BD = "\e[?2004l"
+exec "set t_PS=\e[200~"
+exec "set t_PE=\e[201~"
+++ /dev/null
-if exists("g:loaded_mein_buftabline") | finish | endif
-let g:loaded_mein_buftabline = 1
-
-function! BufTabline()
- redir => bufsRaw
- silent buffers
- redir END
- let bufs = []
- for buf in split(bufsRaw, "\n")[:16]
- let leftIdx = stridx(buf, '"')
- let rightIdx = strridx(buf, '"')
- let filename = substitute(buf[leftIdx + 1 : rightIdx - 1], "%", "%%", "g")
- let linenum = split(buf[rightIdx:], " ")[-1]
- let attrs = split(buf[:leftIdx-1], '\s\+')
- let attrs = map(attrs, 'substitute(v:val, "%", "%%", "g")')
- let attrs = (len(attrs) == 1) ? attrs[0] : attrs[0] . ":" . join(attrs[1:], "")
- let attrs = "%#TabLine#" . attrs . "%*"
- if len(filename) > 20 | let filename = "<" . filename[-(20-1):] | endif
- let hl = (match(attrs, "%%") == -1) ? "%#TabLine#:" : "%#TabLineSel#"
- let bufs = add(bufs, attrs . hl . filename . ":" . linenum . "%*")
- endfor
- return join(bufs, " ")
-endfunction
-
-set showtabline=2
-set tabline=%!BufTabline()
+++ /dev/null
-if exists("g:loaded_mein_chnglstnav") | finish | endif
-let g:loaded_mein_chnglstnav = 1
-
-function! s:Chng(...)
- if a:0 == 0 | return | endif
- execute "normal " . a:1 . (a:1 > 0 ? "g;" : "g,")
-endfunction
-
-command! -nargs=? Chng call s:Chng(<args>)
-nmap <End> :changes<CR>:Chng<Space>
+++ /dev/null
-" Universal Ctags creator
-" Maintainer: Sergey Matveev <stargrave@stargrave.org>
-" License: GNU General Public License version 3 of the License or later
-"
-" Create "tags" file in your project's root first.
-" Then :Ctags LANG to fill it.
-
-if exists("g:loaded_mein_ctags") | finish | endif
-let g:loaded_mein_ctags = 1
-
-function! s:ctags(lang, onlyCmd, verbose)
- let dst = tagfiles()
- if len(dst) == 0
- echohl WarningMsg | echomsg "No tagfiles" | echohl None
- return
- endif
- let dst = sort(dst, {a, b -> len(a) > len(b) ? 1 : len(a) == len(b) ? 0 : -1})[0]
- let src = "/" . join(split(dst, "/")[:-3], "/")
- if dst[0] != "/"
- let dst = getcwd() . "/.tags/tags"
- let src = getcwd()
- endif
- let cmdline = [
- \"uctags",
- \"--languages=" . a:lang,
- \"--python-kinds=-i",
- \"--c++-kinds=+p",
- \"--recurse",
- \]
- if a:verbose == v:true | let cmdline += ["--verbose"] | endif
- let cmdline += ["-f", dst, src]
- if a:onlyCmd == v:true
- echo join(cmdline, " ")
- return
- endif
- execute "!" . join(cmdline, " ")
- if a:verbose != v:true | redraw! | endif
-endfunction
-
-command! -nargs=1 Ctags silent call s:ctags(<f-args>, v:false, v:false)
-command! -nargs=1 Ctagsv silent call s:ctags(<f-args>, v:true, v:false)
-command! -nargs=1 Ctagscmd call s:ctags(<f-args>, v:true, v:true)
+++ /dev/null
-" Python function call splitter
-" Maintainer: Sergey Matveev <stargrave@stargrave.org>
-" License: GNU General Public License version 3 of the License or later
-"
-" This plugin splits Python function call on several lines.
-"
-" def foobar(self, foo: str, bar: Some[thing, too]) -> None:
-" to
-" def foobar(
-" self,
-" foo: str,
-" bar: Some[thing, too],
-" ) -> None:
-"
-" foo(bar, baz)[0]
-" to
-" foo(
-" bar,
-" baz,
-" )[0]
-"
-" You can un-split it using :Undefsplit command on the line where
-" splitting starts.
-"
-" :Defsplit has optional argument specifying how many opening round
-" parenthesis must be skipped.
-" :Defsplit 1 on foo(baz(baz(...))) produces
-" foo(baz(
-" baz(...),
-" ))
-"
-" Also there is :Brsplit command behaving similarly, but it splits other
-" types of brackets: "{}", "[]".
-
-if exists("g:loaded_defsplit") | finish | endif
-let g:loaded_defsplit = 1
-if !exists("g:defsplit_shift") | let g:defsplit_shift = " " | endif
-
-function! s:bracket_find(brs_allowable, line, offset)
- let possible = []
- for bracket in a:brs_allowable
- let found = stridx(a:line, bracket, a:offset)
- if found != -1 | let possible += [found] | endif
- endfor
- return min(possible)
-endfunction
-
-function! s:defsplit(brs_allowable, single_line_comma, ...)
- if a:0 == 0 | let skip = 0 | else | let skip = str2nr(a:1) | endif
- let shift = g:defsplit_shift
- let line = getline(".")
- for i in range(len(line))
- if line[i] != g:defsplit_shift[0]
- let prfx = strpart(line, 0, i)
- if line[i : i+3] ==# "def " ||
- \line[i : i+5] ==# "class " ||
- \line[i : i+9] ==# "async def "
- let shift .= shift
- endif
- break
- endif
- endfor
- let brs = {"(": ")", "[": "]", "{": "}"}
- let brfirst = s:bracket_find(a:brs_allowable, line, 0)
- let brlast = strridx(line, brs[line[brfirst]])
- while skip > 0
- let brfirst = s:bracket_find(a:brs_allowable, line, brfirst + 1)
- let brlast = strridx(line, brs[line[brfirst]], brlast - 1)
- let skip -= 1
- endwhile
- let [curly, round, squar, outbuf] = [0, 0, 0, ""]
- let ready = [strpart(line, 0, brfirst + 1)]
- let trailing_comma = 1
- for c in split(line[brfirst + 1 : brlast-1], '\zs')
- if c ==# "*" | let trailing_comma = 0 | endif
- if outbuf ==# "" && c ==# " " | continue | endif
- let outbuf .= c
- if c ==# "," && !curly && !round && !squar
- let ready = add(ready, prfx . shift . outbuf)
- let outbuf = ""
- elseif c ==# "[" | let squar += 1
- elseif c ==# "]" | let squar -= 1
- elseif c ==# "(" | let round += 1
- elseif c ==# ")" | let round -= 1
- elseif c ==# "{" | let curly += 1
- elseif c ==# "}" | let curly -= 1
- endif
- endfor
- if trailing_comma && !(a:single_line_comma == v:true && len(ready) == 1)
- let outbuf = outbuf . ","
- endif
- let ready = add(ready, prfx . shift . outbuf)
- let ready = add(ready, prfx . strpart(line, brlast))
- call append(line("."), ready)
- normal "_dd
-endfunction
-
-command! -nargs=? Defsplit call s:defsplit(["("], v:false, <f-args>)
-command! -nargs=? Brsplit call s:defsplit(["(", "[", "{"], v:false, <f-args>)
-command! -nargs=? Defsplits call s:defsplit(["("], v:true, <f-args>)
-command! -nargs=? Brsplits call s:defsplit(["(", "[", "{"], v:true, <f-args>)
-
-command! Undefsplit normal ^v%$J:keepp s/^\(.*\)\([([{]\) \(.*[^,]\),\?\([)\]}]\)\(.*\)$/\1\2\3\4\5<CR>:keepp s/, \?\([)\]}]\+\)$/\1/e<CR>:<CR>
-let g:loaded_2html_plugin = 1
-let g:loaded_getscriptPlugin = 1
-let g:loaded_logipat = 1
-let g:loaded_rrhelper = 1
-let g:loaded_spellfile_plugin = 1
-let g:loaded_vimballPlugin = 1
-let g:loaded_vimball = 1
+vim9script
+
+g:loaded_2html_plugin = 1
+g:loaded_getscriptPlugin = 1
+g:loaded_logipat = 1
+g:loaded_rrhelper = 1
+g:loaded_spellfile_plugin = 1
+g:loaded_vimballPlugin = 1
+g:loaded_vimball = 1
-if exists("g:loaded_mein_exted") | finish | endif
-let g:loaded_mein_exted = 1
-
-function! s:exted(ext)
- execute "edit %<." . a:ext
-endfunction
-
-command! -nargs=1 Ee silent call s:exted(<f-args>)
+vim9script
+command -nargs=1 Ee execute "edit %<." .. <f-args>
+++ /dev/null
-" Simplified version of http://www.vim.org/scripts/script.php?script_id=2184
-" that does not replace current window
-
-if exists("g:loaded_mein_file_line") | finish | endif
-let g:loaded_mein_file_line = 1
-
-function! s:gotoline()
- let file = bufname("%")
- if filereadable(file) | return | endif
- let names = matchlist(file, '\(.\{-1,}\):\%(\(\d\+\)\%(:\(\d*\):\?\)\?\)\?$')
- if empty(names) | return | endif
- let file_name = names[1]
- let line_num = names[2] == "" ? "0" : names[2]
- let col_num = names[3] == "" ? "0" : names[3]
- if !filereadable(file_name) | return | endif
- let nr = bufnr("%")
- exec "keepalt edit +" . line_num . " " . file_name
- exec "normal! " . col_num . "|"
- exec "bdelete " . nr
-endfunction
-
-autocmd! BufNewFile *:* nested call s:gotoline()
-autocmd! BufRead *:* nested call s:gotoline()
+++ /dev/null
-let g:fzf_preview_window = []
-if exists("g:loaded_mein_ggrep") | finish | endif
-let g:loaded_mein_ggrep = 1
+vim9script
-function! s:Vmg(pattern)
- silent execute 'Ggrep "' . a:pattern . '"'
+command! -nargs=* -complete=file Vmg {
+ silent execute "Ggrep \"" .. <q-args> .. '"'
copen
- redraw!
- let g:pylint_disable=1
-endfunction
-
-command! -nargs=* -complete=file Vmg call s:Vmg(<q-args>)
+}
--- /dev/null
+command! Gblame Git blame
+command! Gcommit Git commit
-if exists("g:loaded_mein_grep") | finish | endif
-let g:loaded_mein_grep = 1
+vim9script
-function! s:Vim(pattern)
- let ignorecase_bak=&ignorecase
- set noignorecase
- execute "vimgrep /" . a:pattern . "/ **/*"
+command! -nargs=* -complete=file Vim {
+ set grepprg=grep\ -Rns\ --binary-files=without-match\ --exclude-dir=.git\ --exclude-dir=.tags\ $*\ /dev/null\ .
+ execute "silent grep \"" .. <q-args> .. "\""
copen
- let &ignorecase=ignorecase_bak
- let g:pylint_disable=1
-endfunction
-
-command! -nargs=* -complete=file Vim call s:Vim(<q-args>)
+ redraw!
+}
-if exists("g:loaded_mein_lsp") | finish | endif
-let g:loaded_mein_lsp = 1
-let g:lsp_auto_enable = 1
+vim9script
-let g:lsp_diagnostics_echo_cursor = 1
-let g:lsp_diagnostics_echo_delay = -1
-let g:lsp_signature_help_enabled = 0
+# go get golang.org/x/tools/gopls@latest
+# pip install "python-language-server[all]"
-function! s:on_lsp_buffer_enabled() abort
- setlocal omnifunc=lsp#complete
- nmap <buffer> [g <Plug>(lsp-previous-diagnostic)
- nmap <buffer> ]g <Plug>(lsp-next-diagnostic)
- nmap <buffer> gd <plug>(lsp-definition)
- nmap <buffer> K <plug>(lsp-hover)
-endfunction
+var lspServers: list<dict<any>>
-augroup lsp_install
- autocmd!
- autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
-augroup END
+for d in [
+ {
+ filetype: ["c", "ch", "cpp"],
+ path: "clangd",
+ args: ["--log=error"],
+ },
+ {
+ filetype: ["go", "gomod"],
+ path: "gopls",
+ syncInit: true,
+ },
+ {
+ filetype: ["python"],
+ path: "pyls",
+ syncInit: true,
+ workspaceConfig: {pyls: {
+ configurationSources: ["flake8"],
+ plugins: {
+ mccabe: {enabled: false},
+ },
+ }},
+ },
+]
+ if executable(d["path"])
+ add(lspServers, d)
+ endif
+endfor
+
+var lspOpts = {
+ ignoreMissingServer: true,
+ autoComplete: false,
+
+ autoHighlight: true,
+ autoPopulateDiags: true,
+
+ # Lint warning only on status line, do not show near cursor
+ showDiagInPopup: false,
+ showDiagOnStatusLine: true,
+ showSignature: false,
+}
+
+set omnifunc=g:LspOmniFunc
+autocmd VimEnter * call LspAddServer(lspServers)
+autocmd VimEnter * call LspOptionsSet(lspOpts)
+autocmd CursorMoved * silent! LspDiagCurrent
+nmap gd :LspGotoDefinition<CR>
+nmap <C-W>gd :vert LspGotoDefinition<CR>
+nmap <F6> :lopen<CR>
+nmap [l :LspDiagPrev<CR>
+nmap ]l :LspDiagNext<CR>
+vim9script
if exists("g:loaded_mein_netrw") | finish | endif
-let g:loaded_mein_netrw = 1
+g:loaded_mein_netrw = 1
-let g:netrw_banner = 0
-let g:netrw_bufsettings = "noma nomod nowrap ro nobl"
+g:netrw_banner = 0
+g:netrw_bufsettings = "noma nomod nowrap ro nobl"
-function! WinClose(islocal)
+def g:WinClose(islocal: number): string
close
-endfunction
-let g:Netrw_UserMaps = [["<Del>", "WinClose"]]
+ return ""
+enddef
+g:Netrw_UserMaps = [["<Del>", "g:WinClose"]]
autocmd VimLeave * call delete("/home/stargrave/.vim/.netrwhist")
+++ /dev/null
-if exists("g:loaded_mein_pastemode") | finish | endif
-let g:loaded_mein_pastemode = 1
-
-if &term =~ "screen.*"
- let &t_ti = &t_ti . "\e[?2004h"
- let &t_te = "\e[?2004l" . &t_te
- function! XTermPasteBegin(ret)
- set pastetoggle=<Esc>[201~
- set paste
- return a:ret
- endfunction
- map <expr> <Esc>[200~ XTermPasteBegin("i")
- imap <expr> <Esc>[200~ XTermPasteBegin("")
- cmap <Esc>[200~ <nop>
- cmap <Esc>[201~ <nop>
-endif
+++ /dev/null
-if exists("g:loaded_mein_whereami") | finish | endif
-let g:loaded_mein_whereami = 1
-
-function! s:pwdLoad()
- let g:mein_pwdL=trim(system("pwd -L"))
- let g:mein_pwdP=trim(system("pwd -P"))
-endfunction
-
-autocmd VimEnter * call s:pwdLoad()
-
-function! WhereAmI(fmt)
- let fullpath = expand("%:p")
- if fullpath[:len(g:mein_pwdP)-1] ==# g:mein_pwdP
- let fullpath = g:mein_pwdL . fullpath[len(g:mein_pwdP):]
- endif
- if a:fmt == "gnu"
- let where = fullpath . ":" . line(".")
- elseif a:fmt == "lldb"
- let where = "breakpoint set --file " . fullpath . " --line " . line(".")
- else
- let where = "unknown fmt"
- endif
- let @* = where
- echomsg where
-endfunction
-
-nmap <leader>w :call WhereAmI("gnu")<CR>
-nmap <leader>W :call WhereAmI("lldb")<CR>
+++ /dev/null
-" zsh file completion caller
-" Maintainer: Sergey Matveev <stargrave@stargrave.org>
-" License: GNU General Public License version 3 of the License or later
-
-if exists("g:loaded_zshfe") | finish | endif
-let g:loaded_zshfe = 1
-if !exists("g:zshfe_path") | let g:zshfe_path=expand("~/.vim/plugin/zshfe.zsh") | endif
-
-function! s:zshfe(query, opencmd)
- silent let result = systemlist(g:zshfe_path . " " . a:query)
- if len(result) == 0 | return | endif
- exec a:opencmd . " " . result[0][:-2]
-endfunction
-
-command! -nargs=1 Fe call s:zshfe(<f-args>, "edit")
-command! -nargs=1 Fsp call s:zshfe(<f-args>, "split")
-command! -nargs=1 Fvs call s:zshfe(<f-args>, "vsplit")
-
-nmap <Leader>e :Fe
-nmap <Leader><space> :Fsp
-nmap <Leader>v :Fvs
"set t_kD=\7f
set mouse="" " if Vim is compiled with mouse support
-set viminfo='100,<50,s10,f1,%,n~/secure/vim/info
+set viminfo-=h
+set viminfo+=f1,%,n~/secure/vim/info
set viewdir=~/secure/vim/view
-set history=128
set directory=~/secure/vim/tmp
set undodir=~/secure/vim/undo
set undofile
set cpoptions+=$
set showcmd
set showmatch
-set listchars=trail:·,tab:>→,nbsp:% ",eol:¶
-set list
set completeopt-=preview
set diffopt+=indent-heuristic,algorithm:histogram
set cursorline
set cursorcolumn
set colorcolumn=80
+
+set listchars=trail:·,tab:>→,nbsp:% ",eol:¶
+set list
highlight ExtraWhitespace ctermbg=green ctermfg=blue
match ExtraWhitespace /\s\+$/
set hlsearch
set incsearch
set gdefault
-set wildmode=longest:list
+map <F4> :nohlsearch<CR>:call mark#Toggle()<CR>
+
+set wildmode=list:longest
set tags=.tags/**/tags;
set wildignore=**/.git,**/.tags
set exrc
set secure
-map <F4> :nohlsearch<CR>:MarkClear<CR>
-
" Folding {{{
set foldmethod=indent
set foldnestmax=9
" }}}
" Statusline {{{
+let MeinStatus = {-> exists("b:mein_status_func") ? b:mein_status_func() : ""}
set laststatus=2
-set statusline=%F\ %m%r%h%w%q%k
+set statusline=%F\ %m%r%h%w%k
set statusline+=%{len(getqflist())?'[Q]':''}
set statusline+=%{len(getloclist(0))?'[L]':''}
set statusline+=\ %=
set statusline+=%#DiffAdd#%l/%L
set statusline+=%#Todo#%c%V:0x%B
set statusline+=%#Comment#%o
-set statusline+=%#Error#%{LintStatus()}
+set statusline+=%#Error#%{MeinStatus()}
set statusline+=%*\ %P
-
-function! LintStatus() " it is overrided in ftplugins
- return ""
-endfunction
" }}}
" View saving {{{
-autocmd BufWinLeave *.* mkview
-autocmd BufWinEnter *.* silent loadview
+autocmd BufWinLeave ?* silent! if &ft !=# "gitcommit" | mkview | endif
+autocmd BufWinEnter ?* silent! loadview
" }}}
" Windows related {{{
iabbrev итп и т.п.
" }}}
-set keywordprg=
+let g:tex_flavor = "latex"
+set keywordprg=:LspHover
let g:sh_no_error = 1
-
set termwinkey=<C-B>
nmap <space> f<space>
-vmap <space> I<space><ESC>gv
nmap _ f_l
nmap <leader>] "*yiw
nnoremap <leader>d "_d
vnoremap <leader>d "_d
-cmap <C-O> <S-Left>
-cmap <C-P> <S-Right>
-
map Q gq
-map Y y$
cmap ][ '[,']
imap <C-b> <C-x><C-o>
-nmap <F2> :set wrap!<CR>:set wrap?<CR>
+imap <C-@> <C-x><C-f>
nmap <Tab> :buffers<CR>:b<Space>
nmap <silent> <Home> :registers<CR>
nmap <leader>' yiwciw"<C-r>""<ESC>
nmap <leader>h1 yypVr=o
nmap <leader>sc 024i-<ESC>a >8 <ESC>24a-<ESC>
nmap <leader><C-]> :vertical wincmd ]<CR>
+nmap [oc :copen<CR>
+nmap ]oc :cclose<CR>
nnoremap <C-P> <C-I>
+nmap ZQ :qall<CR>
+nmap ZZ :wall<CR>:mksession!<CR>:qall<CR>
+
command! E Explore
command! Ch cd %:p:h
command! -bar -nargs=? -bang Tmp :silent vnew<bang>|setlocal buftype=nofile bufhidden=hide noswapfile buflisted filetype=<args> modifiable
+
+execute "digraphs Ru" .. 0x20BD
+
+runtime ftplugin/man.vim
+packadd cfilter
--- /dev/null
+alias vi="vim"
tmux delete-buffer
perl -ne '/^([^:]+:\d+:.*[^\s])\s*$/ and print "$1\n"' < $tmp > $tmp.err
rm $tmp
-vim -c 'let g:pylint_disable=1' -c copen -q $tmp.err
+vim -c copen -q $tmp.err
rm $tmp.err
XTerm.termName: screen-256color
XTerm.vt100.internalBorder: 0
-XTerm.vt100.faceName: Inconsolata LGC:pixelsize=16:antialias=false:autohint=true
+XTerm.vt100.faceName: Go Mono:pixelsize=18:antialias=true
XTerm.vt100.foreground: gray90
XTerm.vt100.background: black
XTerm.vt100.cursorColor: white
Shift<Key>Page_Up: string("\e[5;2~") \n \
<Key>Menu: string("\ 1") \n \
<Key>Super_R: string("\ 1") \n \
+ <Btn4Down>: string("\19") \n \
+ <Btn5Down>: string("\ 5") \n \
Shift Alt<Key>Insert: insert-selection(CLIPBOARD, CUT_BUFFER1)
XTerm.vt100.trimSelection: true
--- /dev/null
+<device screen="0" driver="dri2">
+ <application name="Default">
+ <option name="vblank_mode" value="0"/>
+ </application>
+</device>
#!/bin/zsh
-xsetroot -solid \#222222 &
+xsetroot -solid \#222222
xset b off
+setxkbmap -rules xorg -layout us,ru -option grp:caps_toggle,grp_led:caps
xrdb ~/.Xresources
xmodmap ~/.Xmodmap
-~/bin/xstatusbar.sh &
-rm -f ~/.ssh/agent ; ssh-agent -a ~/.ssh/agent
-~/bin/cleanup.sh
-exec $HOME/src/suckless/dwm/dwm
+~/work/godwmstat/godwmstat -xsetroot &
+rm -f ~/.ssh/agent ; ssh-agent -a $SSH_AUTH_SOCK
+exec ~/src/suckless/dwm/dwm
--- /dev/null
+#!/bin/sh
+
+st -t Terminal8 -e sh -c "cd /home/stargrave/secure/mmc ; /home/stargrave/work/mmc/cmd/start" 2>/dev/null &
}
[ -z "$NOTABSTART" ] || exit 1
tabbed -n tabbed-$tabname -d $@ > $w
+sleep 0.1
exec $0 $tabname $@
+++ /dev/null
-##
-## GENERAL SETTINGS
-##
-
-#
-# The strategy for the config file is as follows:
-#
-# Boolean values are the opposite of the default and need to simply be
-# uncommented to alter the default.
-#
-# Text values *are* set to the default and in order to change them one must
-# uncomment the option *and* change the value.
-#
-
-# NOTE: browser_mode and gui_mode MUST be the first entries in this
-# file!
-
-# Normal browser operation (default).
-# browser_mode = normal
-
-# Prevent tracking operation.
-browser_mode = whitelist
-
-# Classic GUI (default).
-# gui_mode = classic
-
-# Minimalistic GUI.
-gui_mode = minimal
-
-home = file:///home/stargrave/.lynx_bookmarks.html
-download_dir = ~/tmp
-download_mode = start
-# download_notifications = 1
-# window_maximize = 1
-# window_width = 1024
-# window_height = 768
-# enable_spell_checking = 1
-# spell_check_languages = en_US
-# default_zoom_level = 1.0
-encoding = UTF-8
-ssl_ca_file = /usr/local/share/certs/ca-root-nss.crt
-# ssl_strict_certs = 1
-enable_strict_transport = 1
-# ctrl_click_focus = 1
-# append_next = 0
-# save_global_history = 1
-color_visited_uris = 0
-guess_search = 1
-# enable_autoscroll = 1
-# session_autosave = 1
-# history_autosave = 1
-# autofocus_onload = 1
-# single_instance = 1
-enable_socket = 1
-# enable_js_autorun = 0
-auto_load_images = 0
-enable_localstorage = 1
-# userstyle = /usr/local/share/xombrero/style.css
-# userstyle_global = 1
-enable_favicon_entry = 0
-enable_favicon_tabs = 0
-# preload_strict_transport = 1
-# referer = always
-referer = same-domain
-warn_cert_changes = 1
-enable_cache = 0
-# js_auto_open_windows = 0
-
-# See http://www.xroxy.com/proxylist.php for a good list of open
-# proxies.
-#
-# polipo
-# http_proxy = http://127.0.0.1:8123
-#
-# tsocks
-# http_proxy = http://127.0.0.1:1080
-#
-http_proxy = socks5://localhost:4444/
-# If you only occasionally use a proxy
-http_proxy_starts_enabled = 0
-
-# Search engines; uncomment one of these lines for you favorite search
-# engine.
-#
-# Google
-# search_string = https://www.google.com/search?q=%s
-#
-# Yahoo
-# search_string = http://search.yahoo.com/search?p=%s
-#
-# Start Page
-# search_string = https://startpage.com/do/search?language=english_us&cat=web&query=%s
-#
-# DuckDuckGo
-search_string = https://lite.duckduckgo.com/lite/?q=%s
-
-# External editor.
-# NOTE: The editor specified here must not fork into the background.
-#
-# Examples of editors:
-external_editor = st -e vim -f <file>
-# external_editor = gvim -f <file>
-# external_editor = xterm -geometry 177x58+0+0 -font -*-fixed-medium-r-*-*-15-*-*-*-*-*-iso8859-* -e vim -f <file>
-# external_editor = emacsclient -c <file>
-
-# "default_script" points to a script executed by the run_script
-# command. The only argument passed to this script is the current URI.
-#
-# default_script = ~/.xombrero/playflash.sh
-
-# "user_agent" can be set to just about anything, for a comprehensive
-# list see: http://www.useragentstring.com/pages/All/ . If more than one
-# "user_agent" is given, then xombrero will use them in a round-robin
-# fashion for each request.
-#
-#user_agent = Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)
-#user_agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
-#user_agent = Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0
-#user_agent = Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7C144 Safari/528.16
-#user_agent = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1
-#
-
-##
-## ALIASES
-##
-
-# Aliases are given in the following format:
-#
-# alias = <alias>, <link>
-#
-# Where the link part might contain "%s", the "%s" will be substituted
-# with the user's input when the alias is expanded.
-
-# alias = s, https://www.google.com/search?q=%s
-# alias = w, https://secure.wikimedia.org/wikipedia/en/w/index.php?title=Special%3ASearch&search=%s
-# alias = ports, http://openports.se/search.php?so=%s
-
-alias = gg, https://www.google.com/search?q=%s
-alias = py, https://pypi.org/project/%s/
-alias = rfc, https://tools.ietf.org/html/rfc%s
-alias = we, https://en.wikipedia.org/wiki/%s
-alias = wr, https://ru.wikipedia.org/wiki/%s
-
-##
-## COOKIE, JAVASCRIPT AND PLUGIN WHITE LISTS
-##
-
-# Add the domains you trust.
-
-# cookie_wl = .conformal.com
-# cookie_wl = .peereboom.us
-
-# js_wl = .conformal.com
-# js_wl = .peereboom.us
-
-# pl_wl = .conformal.com
-# pl_wl = .peereboom.us
-
-
-##
-## FORCE HTTPS FOR SITES
-##
-
-# Add the domains of sites that should be only accesed over HTTPS.
-
-# force_https = .conformal.com
-
-
-##
-## MIME TYPES
-##
-
-# PDF, note that xpdf can't load a URI directly; use "@" in front of
-# mime_type to indicate to download the file first.
-
-# mime_type = application/pdf,kpdf
-# mime_type = @application/pdf,xpdf
-
-# Specific MIME type for video.
-# mime_type = video/x-ms-wmv,mplayer
-# mime_type = video/quicktime,mplayer
-
-# Default MIME type for video.
-# mime_type = video/*,mplayer
-
-# Default MIME type for audio.
-# mime_type = audio/*,vlc
-
-# Word documents.
-# mime_type = application/msword,soffice
-
-# Ignoring flash can be done by using the donothing pseudo-binary.
-# mime_type = application/x-shockwave-flash,donothing
-
-
-##
-## ADVANCED SETTINGS
-##
-
-# resource_dir = /usr/local/share/xombrero/
-# refresh_interval = 10
-# url_regex = ^[[:blank:]]*[^[:blank:]]*([[:alnum:]-]+\.)+[[:alnum:]-][^[:blank:]]*[[:blank:]]*$
-# gnutls_priority_string = NORMAL:%COMPAT
-
-# NOTE: webkit 1.4.x overwrites these values!
-# max_host_connections = 5
-# max_connections = 25
-
-
-##
-## ADVANCED GUI SETTINGS
-##
-
-# The following low-level GUI settings are set by the high-level setting
-# "gui_mode".
-
-# The settings for "gui_mode = classic" are as follows:
-
-# fancy_bar = 1
-# show_tabs = 1
-# tab_style = normal
-# userstyle_global = 0
-# show_url = 1
-# show_statusbar = 0
-# show_scrollbars = 1
-
-# The settings for "gui_mode = minimal" are as follows:
-
-# fancy_bar = 0
-# show_tabs = 1
-# tab_style = compact
-# show_url = 0
-# show_statusbar = 1
-# show_scrollbars = 0
-
-# The following are settings shared between "classic" and "minimal"
-# "gui_mode":
-
-# statusbar_elems = BP
-statusbar_elems = BP|T
-# icon_size = 2
-# cmd_font = monospace normal 9
-# oops_font = monospace normal 9
-# statusbar_font = monospace normal 9
-# tabbar_font = monospace normal 9
-
-
-##
-## ADVANCED COOKIE AND JAVASCRIPT SETTINGS
-##
-
-# The following low-level settings are set by the high-level setting
-# "browser_mode", and shouldn't be tweaked manually unless you know what
-# you are doing.
-
-# The settings for "browser_mode = normal" are as follows:
-
-# allow_volatile_cookies = 0
-# cookie_policy = allow
-# cookies_enabled = 1
-# enable_cookie_whitelist = 0
-# read_only_cookies = 0
-# save_rejected_cookies = 0
-# session_timeout = 3600
-# enable_scripts = 1
-# enable_js_whitelist = 0
-# enable_localstorage = 1
-# enable_plugins = 1
-# enable_plugin_whitelist = 0
-# allow_insecure_content = 1
-# allow_insecure_scripts = 1
-# do_not_track = 0
-
-# The settings for "browser_mode = whitelist" are as follows:
-
-# allow_volatile_cookies = 0
-cookie_policy = no3rdparty
-# cookies_enabled = 1
-# enable_cookie_whitelist = 1
-# read_only_cookies = 0
-# save_rejected_cookies = 0
-# session_timeout = 3600
-# enable_scripts = 0
-# enable_js_whitelist = 1
-# enable_localstorage = 0
-# enable_plugins = 0
-# enable_plugin_whitelist = 1
-# allow_insecure_content = 0
-# allow_insecure_scripts = 0
-do_not_track = 1
-
-
-##
-## KEY BINDINGS
-##
-
-# To delete all default keybindings use "keybinding = clearall".
-#
-# keybinding = clearall
-#
-# Key names can be found at:
-#
-# http://git.gnome.org/browse/gtk+/tree/gdk/gdkkeysyms-compat.h
-#
-# Just chop off the "GDK_" part and you have the keyname. Or look at:
-#
-# http://git.gnome.org/browse/gtk+/tree/gdk/gdkkeysyms.h
-#
-# and chop off "GDK_KEY_".
-#
-# Be aware that the names are case sensitive!
-#
-# The default keybindings are the following:
-#
-# keybinding = command,colon
-# keybinding = search,slash
-# keybinding = searchb,question
-# keybinding = command_mode,!Escape
-# keybinding = insert_mode,i
-# keybinding = cookiejar,!M1-j
-# keybinding = downloadmgr,!M1-d
-# keybinding = history,!M1-h
-# keybinding = print,!C-p
-# keybinding = quitall,!C-q
-# keybinding = restart,!M1-q
-# keybinding = run_script,!M1-r
-# keybinding = js toggle,!C-j
-# keybinding = cookie toggle,!M1-c
-# keybinding = togglesrc,!C-s
-# keybinding = yankuri,y
-# keybinding = pasteuricur,p
-# keybinding = pasteurinew,P
-# keybinding = toplevel toggle,!F4
-# keybinding = help,!F1
-keybinding = loadimages,!F1
-keybinding = :set auto_load_images=1,!F3
-# keybinding = proxy toggle,!F2
-# keybinding = searchnext,n
-# keybinding = searchprevious,N
-# keybinding = focusaddress,!F6
-# keybinding = focussearch,!F7
-# keybinding = hinting,f
-# keybinding = hinting,period
-# keybinding = hinting_newtab,S-F
-# keybinding = hinting_newtab,comma
-# keybinding = userstyle,s
-# keybinding = userstyle_global,S
-# keybinding = goback,BackSpace
-# keybinding = goback,!M1-Left
-# keybinding = goforward,!S-BackSpace
-# keybinding = goforward,!M1-Right
-keybinding = reload,r
-# keybinding = reload,!F5
-# keybinding = reload,!C-r
-# keybinding = reload,!C-l
-# keybinding = favorites,!M1-f
-# keybinding = scrolldown,j
-# keybinding = scrolldown,Down
-# keybinding = scrollup,k
-# keybinding = scrollup,Up
-# keybinding = scrollbottom,G
-# keybinding = scrollbottom,End
-# keybinding = scrolltop,Home
-# keybinding = scrollpagedown,space
-# keybinding = scrollpagedown,!C-f
-# keybinding = scrollpagedown,Page_Down
-# keybinding = scrollhalfdown,!C-d
-# keybinding = scrollpageup,Page_Up
-# keybinding = scrollpageup,!C-b
-# keybinding = scrollhalfup,!C-u
-# keybinding = scrollright,l
-# keybinding = scrollright,Right
-# keybinding = scrollfarright,dollar
-# keybinding = scrollleft,h
-# keybinding = scrollleft,Left
-# keybinding = scrollfarleft,0
-# keybinding = statustoggle,!C-n
-keybinding = stop,!C-c
-# keybinding = stop,!S-F5
-# keybinding = tabnew,!C-t
-#keybinding = tabclose,!d
-keybinding = tabclose,!C-w
-# keybinding = tabundoclose,U
-# keybinding = tabnext 1,!C-1
-# keybinding = tabnext 2,!C-2
-# keybinding = tabnext 3,!C-3
-# keybinding = tabnext 4,!C-4
-# keybinding = tabnext 5,!C-5
-# keybinding = tabnext 6,!C-6
-# keybinding = tabnext 7,!C-7
-# keybinding = tabnext 8,!C-8
-# keybinding = tabnext 9,!C-9
-# keybinding = tabfirst,!C-less
-# keybinding = tablast,!C-greater
-keybinding = tabprevious,!C-Page_Up
-keybinding = tabnext,!C-Page_Down
-keybinding = tabnext,!C-Tab
-# keybinding = focusout,!C-minus
-# keybinding = focusin,!C-equal
-# keybinding = focusin,!C-plus
-# keybinding = focusreset,!C-0
-# keybinding = editelement,!C-i
-# keybinding = passthrough,!C-z
-keybinding = :open ,o
-keybinding = :open <uri>,O
-keybinding = :tabnew ,t
-keybinding = :tabnew <uri>,T
-
-# parse the contents of another configuration file
-# include_config = ~/.xombrero_alternate.conf
--no-cache-dir
--youtube-skip-dash-manifest
---force-ipv4
--no-playlist
---format best[ext=webm]/bestvideo[ext=webm]+bestaudio[ext=webm]/best
+--format bestvideo[vcodec~=av01]+bestaudio[ext=webm]/bestvideo[ext=webm]+bestaudio[ext=webm]/best
--- /dev/null
+#!/usr/local/bin/zsh
+
+. ~/work/youtube-venv/bin/activate
+url=${@[${#@}]}
+args=(${@[1,${#@}-1]})
+[[ ${#url} -eq 11 ]] && url=https://www.youtube.com/watch?v=$url
+yt-dlp --config-location ~/.youtube-dl.conf ${=args} $url
#!/usr/local/bin/zsh
-yt --format best $@
+yt --format b $@
export XDG_DATA_DIRS=$HOME/local
export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH
winid=`start-tabbed.sh zathura -c`
-bin.zathura -e $winid "$1"
+zathura -e $winid "$1"
rm -f zathura.core
-~/bin/cleanup.sh
+~/bin/my-cleanup
umask 077
-mkdir -p /tmp/stargrave-xdg /tmp/stargrave-lldb /tmp/stargrave-flags
-env | grep -q XAUTH || ~/bin/rem
-~/bin/cleanup.sh
+[[ -e $XDG_DATA_HOME ]] || mkdir -p $XDG_DATA_HOME /tmp/stargrave-lldb /tmp/stargrave-flags
+export DISPLAY=:0
+export XAUTHORITY=/home/stargrave/.Xauthority
+~/bin/my-cleanup
--- /dev/null
+alias -g G="| grep --colour=always"
--- /dev/null
+alias l="ls -AF, "
+alias ll="ls -D \"%Y-%m-%d %H:%M\" -AFl, "
--- /dev/null
+alias -g 2DN="2>/dev/null"
+alias -g DN=">/dev/null"
+alias -g DNA=">&/dev/null"
+alias -g TO="2>&1"
--- /dev/null
+alias -g T="| tai64nlocal"
--- /dev/null
+alias -g W="| wc -l | sed 's/ //g'"
--- /dev/null
+fpath=(~/.zsh/functions $fpath)
--- /dev/null
+HISTFILE=~/secure/.history
+HISTSIZE=10240
+SAVEHIST=10240
--- /dev/null
+export IRCNAME="Sergey Matveev"
+export IRCNICK="stargrave"
+export MMC_ENTRYPOINT=mm.rnd.stcnet.ru
--- /dev/null
+export CLICOLOR=1
+lscolors=(
+ Bx # ex # directory
+ Gx # fx # symbolic link
+ cx # cx # socket
+ dx # dx # pipe
+ Cx # bx # executable
+ eg # eg # block special
+ Dx # ed # character special
+ ab # ab # executable with setuid bit set
+ ag # ag # executable with setgid bit set
+ ac # ac # directory writable to others, with sticky bit
+ ad # ad # directory writable to others, without sticky bit
+)
+export LSCOLORS=${(j::)lscolors}
--- /dev/null
+path=(~/bin ~/local/bin /usr/local/bin /usr/local/sbin /usr/bin /usr/sbin /bin /sbin)
+manpath=(
+ ~/local/share/man
+ /usr/local/lib/perl5/5.26/perl/man
+ /usr/local/lib/perl5/site_perl/man
+ /usr/share/openssl/man
+ /usr/local/share/man
+ /usr/local/man
+ /usr/share/man
+)
+export -TU INFOPATH infopath
+infopath=(~/local/share/info /usr/local/share/info /usr/local/info)
+
+export -TU PKG_CONFIG_PATH pkg_config_path
+pkg_config_path=(~/local/lib/pkgconfig ~/local/libdata/pkgconfig)
+
+export -TU LD_LIBRARY_PATH ld_library_path
+ld_library_path=(~/local/lib)
--- /dev/null
+export REDO_JOBS=8
+export REDO_NO_SYNC=1
--- /dev/null
+export STARDICT_DATA_DIR=~/dic
+export SDCV_HISTSIZE=0
--- /dev/null
+export COLORFGBG="default;default;0"
+export COLORTERM=xterm-256color
+[ "$TERM" = "screen-256color" ] || TERM=xterm-256color
+export TERM
--- /dev/null
+export XDG_CACHE_HOME=/tmp/stargrave-xdg
+export XDG_CONFIG_HOME=/tmp/stargrave-xdg
+export XDG_DATA_HOME=/tmp/stargrave-xdg
+export XDG_RUNTIME_DIR=/tmp/stargrave-xdg
--- /dev/null
+export -TU CFLAGS cflags " "
+cflags=(-I$HOME/local/include -I/usr/local/include -I/usr/local/include/PCSC)
+
+export -TU LDFLAGS ldflags " "
+ldflags=(-L$HOME/local/lib -L/usr/local/lib)
+
+export -TU CXXFLAGS cxxflags " "
+cxxflags=($cflags)
--- /dev/null
+export GOCACHE=/tmp/go-cache
+export GOPROXY=off
+export GOSUMDB=off
+export GOPATH=~/work/gopath
+path=($GOPATH/bin ~/work/go/bin $path)
--- /dev/null
+export PIP_RESPECT_VIRTUALENV=true
+export VIRTUAL_ENV_DISABLE_PROMPT=1
+export PYTHONDONTWRITEBYTECODE=1
--- /dev/null
+manpath=(~/src/suckless/tabbed $manpath)
+path=(~/src/suckless/tabbed $path)
--- /dev/null
+pv --wait --width 80 --interval 0.5 $@
--- /dev/null
+mutt -f =arbeit -e "source ~/.mutt/accounts/arbeit" $@
--- /dev/null
+local dir=$(bfs -L ${1:-.} -mindepth 1 \
+ -path "*/\.git" -prune -o \
+ -path "*/\.redo" -prune -o \
+ -type d -print 2>/dev/null |
+ fzf --height 40% --reverse --preview="tree -CN {}")
+[[ -z $dir ]] || { print -s cd $dir ; cd $dir }
--- /dev/null
+bfs -L . -name "*$1*" -print
--- /dev/null
+local GREP_ARGS=(
+ --devices=skip
+ --colour=always
+ --with-filename
+ --line-number
+ --dereference-recursive
+ --binary-files=without-match
+ --exclude-dir=.git
+ --exclude-dir=.tags
+)
+grep $GREP_ARGS $@ | less
--- /dev/null
+mutt -f "=$1"
--- /dev/null
+setopt GLOB_STAR_SHORT GLOB_DOTS EXTENDED_GLOB
+setopt NO_NOMATCH
+setopt AUTO_PUSHD PUSHD_IGNORE_DUPS
+setopt PIPE_FAIL
+setopt MULTIBYTE
+
+setopt RM_STAR_SILENT
+export LISTMAX=9999
--- /dev/null
+setopt APPEND_HISTORY SHARE_HISTORY INC_APPEND_HISTORY EXTENDED_HISTORY
+setopt HIST_IGNORE_SPACE HIST_IGNORE_ALL_DUPS
+local history_ignore=(
+ "dl-magnet *"
+ "link-for-*"
+ "sdcv *"
+ "t *"
+ "unsafe-www *"
+ "yt* *"
+ arr
+ t
+)
+HISTORY_IGNORE="(${(j:|:)history_ignore})"
--- /dev/null
+bindkey "^[[1~" beginning-of-line # Home
+bindkey "^[[4~" end-of-line # End
--- /dev/null
+bindkey -v
+export KEYTIMEOUT=1
--- /dev/null
+for z (~/.zsh/aliases/*(on)) . $z
--- /dev/null
+for f (~/.zsh/functions/*) autoload ${f:t}
--- /dev/null
+cddotdot() {
+ cd ..
+ pwd
+ zle reset-prompt
+}
+zle -N cddotdot
+bindkey "\eOQ" cddotdot # F2
--- /dev/null
+autoload -U history-search-end
+zle -N history-beginning-search-backward-end history-search-end
+zle -N history-beginning-search-forward-end history-search-end
+bindkey "^[[A" history-beginning-search-backward-end
+bindkey "^[[B" history-beginning-search-forward-end
+
+beginning-history-incremental-pattern-search-backward() {
+ zle history-incremental-pattern-search-backward ${BUFFER:gs/ /*/}
+}
+zle -N beginning-history-incremental-pattern-search-backward
+bindkey "^[[1;2A" beginning-history-incremental-pattern-search-backward
+bindkey -M isearch "^[[A" history-incremental-pattern-search-backward
+bindkey -M isearch "^[[B" history-incremental-pattern-search-forward
--- /dev/null
+autoload -U zsh-mime-setup ; zsh-mime-setup
+
+mime_compressed_handler() {
+ local tmp=`mktemp -t zsh-mime`
+ mv $tmp $tmp.$1:r:e
+ tmp=$tmp.$1:r:e
+ case $1:e in
+ (bz2) bunzip2 < $1 > $tmp ;;
+ (gz) gunzip < $1 > $tmp ;;
+ (xz) unxz < $1 > $tmp ;;
+ (zst) unzstd < $1 > $tmp ;;
+ (*) exit 1 ;;
+ esac
+ zsh-mime-handler $tmp
+}
+
+alias -s bz2=mime_compressed_handler
+alias -s gz=mime_compressed_handler
+alias -s xz=mime_compressed_handler
+alias -s zst=mime_compressed_handler
+
+alias -s html=lynx
--- /dev/null
+popdquiet() {
+ popd
+ zle reset-prompt
+}
+zle -N popdquiet
+bindkey "\eOS" popdquiet # F4
--- /dev/null
+autoload -U edit-command-line
+zle -N edit-command-line
+bindkey -M vicmd v edit-command-line
--- /dev/null
+autoload -U zmv
--- /dev/null
+zstyle ":completion:*" list-colors ""
+
+zstyle ":completion:*:functions" ignored-patterns "_*"
+zstyle ":completion:*:manuals" separate-sections true
+
+zstyle ":completion:*" group-name ""
+zstyle ":completion:*:messages" format "%d"
+zstyle ":completion:*:warnings" format "%F{red}no matches: %d%f"
+zstyle ":completion:*:*:*:*:descriptions" format "%B... %d%b"
+zstyle ":completion:*:files:*:*:descriptions" format ""
+
+zstyle ":completion:*" file-patterns "%p:globbed" "*"
+zstyle ":completion:*" matcher-list "" "m:{a-z-}={A-Z_}" "r:|?=** m:{a-z-}={A-Z_}"
+zstyle ":completion:*:man:*:*:*" matcher-list "" "m:{a-zA-Z}={A-Za-z} l:|=* r:|=*"
+zstyle ":completion:*" completer \
+ _mycomp_mbox \
+ _mycomp_man:man \
+ _mycomp_info \
+ _mycomp \
+ _parameters \
+ _ignored
+
+_mycomp() {
+ [[ $CURRENT -eq 1 ]] && curcontext="${curcontext%:*:*}:-command-:" \
+ _command_names && return
+ [[ $IPREFIX =~ ~.* ]] && _tilde && return
+ local has_files
+ curcontext=:files:${curcontext#:*:} _files && has_files=1
+ [[ $has_files ]] && return
+
+ # MAGIC_EQUAL_SUBST {{{
+ [[ $PREFIX = *\=* ]] || return 1
+ compstate[parameter]=${PREFIX%%\=*}
+ compset -P 1 "*="
+ _value
+ # }}}
+}
+
+_mycomp_man() {
+ [[ ${words[1]} == man ]] && _dispatch man man man "" -default- && _value && return
+}
+
+_mycomp_info() {
+ [[ ${words[1]} == info ]] && _dispatch info info info "" -default- && return
+}
+
+local mboxes=()
+for m ($MAILDIR/*(/on)) mboxes=($mboxes $m:t)
+
+_mycomp_mbox() {
+ [[ ${words[1]} == mbox ]] && _values mboxes $mboxes && return
+}
+
+autoload -U compinit ; compinit -d /tmp/.zcompdump
+autoload -U complist
--- /dev/null
+setopt PROMPT_SUBST
+
+PROMPT="%2~ %B"
+# A: autoenv
+# V: virtualenv
+# M: laxed umask
+PROMPT+='${(j::)psvar}'
+PROMPT+="%(1j.%j.)%b"
+PROMPT+='%U${vcs_info_msg_0_}%u'
+PROMPT+="%(?.. %S%?%s)"
+PROMPT+='%(1S. %B${SECONDS}%b.)'
+PROMPT+='%B%F{magenta}%#%f%b '
+
+function zle-line-init zle-keymap-select {
+ local ccolour=red
+ [[ ${KEYMAP} == vicmd ]] || ccolour=green
+ printf "\e]12;${ccolour}\e\\"
+ [[ "$#_autoenv_stack_entered" -eq 0 ]] && psvar=(${psvar#A}) || {
+ [[ -n "${psvar[(r)A]}" ]] || psvar=(A $psvar)
+ }
+ [[ -z "$VIRTUAL_ENV" ]] && psvar=(${psvar#V}) || {
+ [[ -n "${psvar[(r)V]}" ]] || psvar=(V $psvar)
+ }
+ [[ `umask` == "077" ]] && psvar=(${psvar#M}) || {
+ [[ -n "${psvar[(r)M]}" ]] || psvar=("M" $psvar)
+ }
+ zle reset-prompt
+}
+
+zle -N zle-line-init
+zle -N zle-keymap-select
+
+preexec() {
+ printf "\e]12;green\e\\"
+ SECONDS=0
+}
+
+precmd() {
+ printf "\a\e]2;\e\\"
+ [[ -n "$NO_VCS_INFO" ]] || vcs_info
+}
--- /dev/null
+. ~/work/zsh-autosuggestions/zsh-autosuggestions.zsh
+unset ZSH_AUTOSUGGEST_USE_ASYNC
+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=cyan"
+ZSH_AUTOSUGGEST_IGNORE_WIDGETS+=(
+ history-incremental-pattern-search-backward
+ history-incremental-pattern-search-forward
+)
--- /dev/null
+ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets)
+. ~/work/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+typeset -A ZSH_HIGHLIGHT_STYLES
+ZSH_HIGHLIGHT_STYLES[assign]="fg=yellow"
+ZSH_HIGHLIGHT_STYLES[commandseparator]="fg=red"
+ZSH_HIGHLIGHT_STYLES[single-hyphen-option]="fg=green,bold"
+ZSH_HIGHLIGHT_STYLES[double-hyphen-option]="fg=green"
+ZSH_HIGHLIGHT_STYLES[globbing]="fg=magenta"
+ZSH_HIGHLIGHT_STYLES[global-alias]="fg=yellow,bold"
+ZSH_HIGHLIGHT_STYLES[history-expansion]="fg=magenta"
+ZSH_HIGHLIGHT_STYLES[redirection]="fg=red"
+ZSH_HIGHLIGHT_STYLES[path]="fg=white,underline"
+ZSH_HIGHLIGHT_STYLES[path_pathseparator]="fg=white,bold,underline"
--- /dev/null
+while read w ; do
+ w=(${(s/=/)w})
+ hash -d ${w[1]}=${~${w[2]}}
+done < ~/.zsh/hashd
--- /dev/null
+bracketed-paste() {
+ zle .$WIDGET && LBUFFER=${LBUFFER%$'\n'}
+}
+zle -N bracketed-paste
--- /dev/null
+. ~/work/zsh-autoquoter/zsh-autoquoter.zsh
+ZSH_HIGHLIGHT_HIGHLIGHTERS+=(zaq)
+ZAQ_PREFIXES=(
+ "Gg"
+ "mutt -f"
+ "sdcv"
+ "t a"
+)
--- /dev/null
+. ~/work/zsh-autoenv/autoenv.zsh
-# vim: foldmethod=marker:foldlevel=0
+for z (~/.zsh/env/*(on)) . $z
-# History {{{
-HISTFILE=~/secure/.history
-HISTSIZE=10240
-SAVEHIST=10240
-# }}}
-
-# Terminal {{{
-export COLORFGBG="default;default;0"
-export COLORTERM=xterm-256color
-[ "$TERM" = "screen-256color" ] || TERM=xterm-256color
-export TERM
-# }}}
-
-# Less options {{{
-export PAGER=less
-export LESSHISTFILE=-
-export LESS=RXij3M
-# }}}
-
-# ls options {{{
-export CLICOLOR=1
-export LSCOLORS=BxGxcxdxCxegDxabagacad
-# }}}
-
-# Lynx options {{{
-export WWW_HOME=file:///home/stargrave/.lynx_bookmarks.html
-export SSL_CERT_FILE=/usr/local/openssl/cert.pem
-export LYNX_CFG=~/.lynx.cfg
-# }}}
-
-# sdcv options {{{
-export STARDICT_DATA_DIR=$HOME/dic
-export SDCV_HISTSIZE=0
-# }}}
-
-# IRC options {{{
-export IRCNAME="Sergey Matveev"
-export IRCNICK="stargrave"
-# }}}
-
-# Python options {{{
-export PIP_RESPECT_VIRTUALENV=true
-export PIP_VIRTUALENV_BASE=~/.virtualenvs
-export PYTHONDONTWRITEBYTECODE=1
-# }}}
-
-# XDG related junk {{{
-export XDG_CACHE_HOME=/tmp/stargrave-xdg
-export XDG_CONFIG_HOME=/tmp/stargrave-xdg
-export XDG_DATA_HOME=/tmp/stargrave-xdg
-export XDG_RUNTIME_DIR=/tmp/stargrave-xdg
-# }}}
-
-# Paths {{{
-path=(~/bin ~/local/bin /usr/local/bin /usr/local/sbin /usr/bin /usr/sbin /bin /sbin)
-manpath=(
- ~/local/share/man
- /usr/local/lib/perl5/5.26/perl/man
- /usr/local/lib/perl5/site_perl/man
- /usr/share/openssl/man
- /usr/local/share/man
- /usr/local/man
- /usr/share/man
-)
-export -TU INFOPATH infopath
-infopath=(~/local/share/info /usr/local/share/info /usr/local/info)
-
-manpath=(~/src/suckless/tabbed $manpath)
-path=(~/src/suckless/tabbed $path)
-
-path=(~/work/goredo $path)
-
-export -TU PKG_CONFIG_PATH pkgconfigpath
-pkgconfigpath=(~/local/lib/pkgconfig ~/local/libdata/pkgconfig)
-# }}}
-
-# C related {{{
-export CFLAGS="-I$HOME/local/include -I/usr/local/include"
-export LDFLAGS="-L$HOME/local/lib -L/usr/local/lib"
-export -TU LD_LIBRARY_PATH ld_library_path
-ld_library_path=(~/local/lib)
-# }}}
-
-# Go related {{{
-export GOCACHE=/tmp/go-cache
-export GOPROXY=off
-export GOSUMDB=off
-export GOPATH=$HOME/work/gopath
-path=($GOPATH/bin ~/work/go/bin $path)
-# }}}
-
-# Various {{{
export SHELL=/bin/zsh
export EDITOR=vim
-export TZ='Europe/Moscow'
+export TZ=Europe/Moscow
export IFCONFIG_FORMAT=inet:cidr,inet6:cidr
-export SSH_AUTH_SOCK=$HOME/.ssh/agent
-export MAILDIR=$HOME/mail
+export SSH_AUTH_SOCK=~/.ssh/agent
+export MAILDIR=~/mail
export DBUS_SESSION_BUS_ADDRESS=disabled:
export MYSQL_HISTFILE=/tmp/.mysql_history
-export REDO_JOBS=0 REDO_NO_SYNC=1
-export SHARNESS_TEST_SRCDIR=$HOME/local/stow/sharness/share/sharness
-# }}}
+export SHARNESS_TEST_SRCDIR=~/local/stow/sharness/share/sharness
+export FZF_DEFAULT_OPTS="--color=16 --info=inline"
+export AUTOENV_AUTH_FILE=~/.zsh/autoenv-auth
+export TIMEFMT="user:%U sys:%S mem:%K/%M io:%I/%O %*E %P"
+export RLWRAP_HOME=/tmp
-# vim: foldmethod=marker:foldlevel=0
-
-# Basic options {{{
-setopt INTERACTIVE_COMMENTS
-setopt GLOB_STAR_SHORT GLOB_DOTS EXTENDED_GLOB
-setopt NO_NOMATCH
-setopt AUTO_PUSHD PUSHD_IGNORE_DUPS
-setopt PIPE_FAIL
-
-setopt RM_STAR_SILENT
-export LISTMAX=9999
-# }}}
-
-# History options {{{
-setopt APPEND_HISTORY SHARE_HISTORY INC_APPEND_HISTORY HIST_IGNORE_ALL_DUPS
-setopt HIST_IGNORE_SPACE
-HISTORY_IGNORE="(yt* *|t *|t|sdcv *|mmfileget *|arr)"
-# }}}
-
-# Vi mode {{{
-bindkey -v
-export KEYTIMEOUT=1
-# }}}
-
-# Home/end {{{
-bindkey "^[[1~" beginning-of-line
-bindkey "^[[4~" end-of-line
-# }}}
-
-# Command-line editing {{{
-autoload -U edit-command-line
-zle -N edit-command-line
-bindkey -M vicmd v edit-command-line
-# }}}
-
-# History search {{{
-autoload -U history-search-end
-zle -N history-beginning-search-backward-end history-search-end
-zle -N history-beginning-search-forward-end history-search-end
-bindkey "^[[A" history-beginning-search-backward-end
-bindkey "^[[B" history-beginning-search-forward-end
-
-beginning-history-incremental-pattern-search-backward() {
- zle history-incremental-pattern-search-backward ${BUFFER:gs/ /*/}
-}
-zle -N beginning-history-incremental-pattern-search-backward
-bindkey "^[[1;2A" beginning-history-incremental-pattern-search-backward
-bindkey -M isearch "^[[A" history-incremental-pattern-search-backward
-bindkey -M isearch "^[[B" history-incremental-pattern-search-forward
-# }}}
-
-# Prompt {{{
-function zle-line-init zle-keymap-select {
- mode_vi=${${KEYMAP/vicmd/+}/(main|viins)/-}
- [[ $timer ]] && timer_show=$(( $SECONDS - $timer ))
- prompt="%2~|"
- prompt+="%U${timer_show}%u|"
- prompt+="%B%?%b"
- prompt+="${mode_vi}"
- prompt+="%B%F{magenta}%#%f%b "
- PS1=$prompt
- zle reset-prompt
-}
-zle -N zle-line-init
-zle -N zle-keymap-select
-
-preexec() {
- timer=$SECONDS
-}
-
-precmd() {
- printf "\a\033]2;\033\\"
-}
-# }}}
-
-# Aliases {{{
-alias l="ls -AF "
-alias ll="ls -AFl "
-alias ssh="TERM=xterm ssh"
-alias vi="vim"
-alias more="less"
-alias m="less "
-alias -g M="| less"
-alias -g W="| wc -l | sed 's/ //g'"
-alias mc="mc --nomouse"
-alias sent="mutt -f =sent-\`date '+%y-%m'\`"
-
-f() {
- # find . -name "*$1*" -print
- print -C 1 **$1*
-}
-
-ssht() {
- ssh -C -t $1 tmux attach -t0
-}
-alias sshnm="ssh -S none"
-# }}}
-
-# Faster movement {{{
-cddotdot() {
- cd ..
- pwd
- zle reset-prompt
-}
-zle -N cddotdot
-bindkey "\eOQ" cddotdot # F2
-
-pushdquiet() {
- popd
- zle reset-prompt
-}
-zle -N pushdquiet
-bindkey "\eOS" pushdquiet # F4
-# }}}
-
-# Git {{{
-alias Ga="git add"
-alias Gb="git branch"
-alias Gc="git checkout"
-alias Gd="git diff"
-alias Gdc="git diff --cached"
-alias Gs="git show --show-signature"
-alias Gm="git diff --name-only --diff-filter=M"
-alias Gam="git commit --amend"
-
-alias Gl="git log --oneline --graph --decorate=short"
-alias Gld="git log --format=format:'%ai %Cgreen%h%Creset %s'"
-alias Gr="git --no-pager log --oneline -n 20 | perl -ne 'print \"@~\$n \$_\"; \$n++'"
-alias Grr="git --no-pager log --oneline --graph -n 1024 | vi -c 'setlocal filetype=gitrebase buftype=nofile noswapfile' -"
-
-bindkey -s "\eOR" " git status --short\n" # F3
-# }}}
-
-# grep {{{
-GREP=/usr/local/bin/grep
-GREP_ARGS="--color=always --with-filename --line-number --dereference-recursive"
-LESS_COLORED="less --RAW-CONTROL-CHARS"
-g() {
- $GREP ${=GREP_ARGS} $@ | ${=LESS_COLORED}
-}
-GS() {
- $GREP ${=GREP_ARGS} $@ | sort --numeric-sort | ${=LESS_COLORED}
-}
-alias -g G="| $GREP --color"
-alias gg="git grep "
-# }}}
-
-# GPG agent {{{
-GPG_TTY=$(tty)
-export GPG_TTY
-# }}}
-
-# Virtualenv {{{
-venv() {
- . /usr/local/bin/virtualenvwrapper.sh
-}
-# }}}
-
-# Mail {{{
-mailpath=(
- ~/mail/mbox"?Neue Nachrichten in =mbox"
- ~/mail/arbeit"?Neue Nachrichten in =arbeit"
-)
-alias arr="mutt -f \=arbeit -e 'source ~/.mutt/accounts/stcnet.ru'"
-bindkey -s "\eOP" " inc\n" # F1
-# }}}
-
-# Completion {{{
-zstyle ":completion:*:functions" ignored-patterns "_*"
-zstyle ":completion:*" matcher-list "" 'm:{a-z\-}={A-Z\_}' 'r:|?=** m:{a-z\-}={A-Z\_}'
-_mycomp () {
- [[ ${words[1]} != man ]] || { _man && return 0 }
- [[ $CURRENT -eq 1 ]] && _command_names || _files && return 0
- # MAGIC_EQUAL_SUBST {{{
- [[ $PREFIX = *\=* ]] || return 1
- compstate[parameter]=${PREFIX%%\=*}
- compset -P 1 "*="
- _value
- # }}}
-}
-zstyle ":completion:*" completer _mycomp _parameters
-autoload -U compinit ; compinit -d /tmp/.zcompdump
-zstyle ":completion:*:default" list-colors ""
-autoload -U complist
-# }}}
-
-# Highlighting {{{
-ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets)
-. ~/work/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
-typeset -A ZSH_HIGHLIGHT_STYLES
-ZSH_HIGHLIGHT_STYLES[assign]="fg=yellow"
-ZSH_HIGHLIGHT_STYLES[commandseparator]="fg=red"
-ZSH_HIGHLIGHT_STYLES[single-hyphen-option]="fg=green,bold"
-ZSH_HIGHLIGHT_STYLES[double-hyphen-option]="fg=green"
-ZSH_HIGHLIGHT_STYLES[globbing]="fg=magenta"
-ZSH_HIGHLIGHT_STYLES[global-alias]="fg=yellow,bold"
-ZSH_HIGHLIGHT_STYLES[history-expansion]="fg=magenta"
-ZSH_HIGHLIGHT_STYLES[redirection]="fg=red"
-ZSH_HIGHLIGHT_STYLES[path]="fg=white,underline"
-ZSH_HIGHLIGHT_STYLES[path_pathseparator]="fg=white,bold,underline"
-# }}}
-
-# Autosuggestion {{{
-. ~/work/zsh-autosuggestions/zsh-autosuggestions.zsh
-ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=cyan"
-# }}}
-
-# fzf {{{
-export FZF_DEFAULT_OPTS="--color=16 --info=inline"
-cf() {
- local dir=$(find ${1:-.} -mindepth 1 -path "*/\.git" -prune -o -type d -print |
- fzf --height 40% --reverse --preview="tree -CN {}")
- [[ -z $dir ]] || cd $dir
-}
-# }}}
-
-# Named directories {{{
-while read w ; do
- w=(${(s/=/)w})
- hash -d ${w[1]}=${~${w[2]}}
-done < ~/.zhashd
-# }}}
+for z (~/.zsh/rc/*(on)) . $z
--- /dev/null
+#!/usr/bin/env zsh
+
+. ~/.zsh/rc/010mime.zsh
+zsh-mime-handler $1