summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknown <joe2010xtmf@163.com>2014-06-08 04:45:34 -0400
committerUnknown <joe2010xtmf@163.com>2014-06-08 04:45:34 -0400
commit302c863cda651130286838309d3d897cace93534 (patch)
treebc2b5e8efd513304806e1e900141856d3adfce48
parenta0318db2f9094eda2beea19ed323244b4ae30831 (diff)
downloadgitea-302c863cda651130286838309d3d897cace93534.tar.gz
gitea-302c863cda651130286838309d3d897cace93534.zip
Fix #242
-rw-r--r--conf/app.ini6
-rw-r--r--gogs.go2
-rw-r--r--models/action.go23
-rw-r--r--models/models.go2
-rw-r--r--models/webhook.go130
-rw-r--r--modules/bin/conf.go494
-rw-r--r--modules/cron/cron.go4
-rw-r--r--modules/hooks/hooks.go95
-rw-r--r--modules/setting/setting.go12
-rw-r--r--routers/admin/admin.go3
-rw-r--r--routers/install.go3
-rw-r--r--routers/repo/setting.go16
-rw-r--r--templates/VERSION2
-rw-r--r--templates/admin/config.tmpl15
14 files changed, 432 insertions, 375 deletions
diff --git a/conf/app.ini b/conf/app.ini
index 1fc88757d8..c792c0fb4b 100644
--- a/conf/app.ini
+++ b/conf/app.ini
@@ -66,6 +66,12 @@ ENABLE_CACHE_AVATAR = false
; Mail notification
ENABLE_NOTIFY_MAIL = false
+[webhook]
+; Cron task interval in minutes
+TASK_INTERVAL = 1
+; Deliver timeout in seconds
+DELIVER_TIMEOUT = 5
+
[mailer]
ENABLED = false
; Buffer length of channel, keep it as it is if you don't know what it is.
diff --git a/gogs.go b/gogs.go
index aabcbe82e1..8a633a305b 100644
--- a/gogs.go
+++ b/gogs.go
@@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.4.2.0605 Alpha"
+const APP_VER = "0.4.2.0608 Alpha"
func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
diff --git a/models/action.go b/models/action.go
index 9fc9d89b9f..e39b04a1ad 100644
--- a/models/action.go
+++ b/models/action.go
@@ -15,7 +15,6 @@ import (
qlog "github.com/qiniu/log"
"github.com/gogits/gogs/modules/base"
- "github.com/gogits/gogs/modules/hooks"
"github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting"
)
@@ -131,35 +130,35 @@ func CommitRepoAction(userId, repoUserId int64, userName, actEmail string,
}
repoLink := fmt.Sprintf("%s%s/%s", setting.AppUrl, repoUserName, repoName)
- commits := make([]*hooks.PayloadCommit, len(commit.Commits))
+ commits := make([]*PayloadCommit, len(commit.Commits))
for i, cmt := range commit.Commits {
- commits[i] = &hooks.PayloadCommit{
+ commits[i] = &PayloadCommit{
Id: cmt.Sha1,
Message: cmt.Message,
Url: fmt.Sprintf("%s/commit/%s", repoLink, cmt.Sha1),
- Author: &hooks.PayloadAuthor{
+ Author: &PayloadAuthor{
Name: cmt.AuthorName,
Email: cmt.AuthorEmail,
},
}
}
- p := &hooks.Payload{
+ p := &Payload{
Ref: refFullName,
Commits: commits,
- Repo: &hooks.PayloadRepo{
+ Repo: &PayloadRepo{
Id: repo.Id,
Name: repo.LowerName,
Url: repoLink,
Description: repo.Description,
Website: repo.Website,
Watchers: repo.NumWatches,
- Owner: &hooks.PayloadAuthor{
+ Owner: &PayloadAuthor{
Name: repoUserName,
Email: actEmail,
},
Private: repo.IsPrivate,
},
- Pusher: &hooks.PayloadAuthor{
+ Pusher: &PayloadAuthor{
Name: repo.Owner.LowerName,
Email: repo.Owner.Email,
},
@@ -172,7 +171,13 @@ func CommitRepoAction(userId, repoUserId int64, userName, actEmail string,
}
p.Secret = w.Secret
- hooks.AddHookTask(&hooks.HookTask{hooks.HTT_WEBHOOK, w.Url, p, w.ContentType, w.IsSsl})
+ CreateHookTask(&HookTask{
+ Type: WEBHOOK,
+ Url: w.Url,
+ Payload: p,
+ ContentType: w.ContentType,
+ IsSsl: w.IsSsl,
+ })
}
return nil
}
diff --git a/models/models.go b/models/models.go
index fa65ef30f6..dca77e00e1 100644
--- a/models/models.go
+++ b/models/models.go
@@ -35,7 +35,7 @@ func init() {
tables = append(tables, new(User), new(PublicKey), new(Repository), new(Watch),
new(Action), new(Access), new(Issue), new(Comment), new(Oauth2), new(Follow),
new(Mirror), new(Release), new(LoginSource), new(Webhook), new(IssueUser),
- new(Milestone), new(Label))
+ new(Milestone), new(Label), new(HookTask))
}
func LoadModelsConfig() {
diff --git a/models/webhook.go b/models/webhook.go
index f10fa2131e..e68edc813d 100644
--- a/models/webhook.go
+++ b/models/webhook.go
@@ -7,29 +7,35 @@ package models
import (
"encoding/json"
"errors"
+ "time"
+ "github.com/gogits/gogs/modules/httplib"
"github.com/gogits/gogs/modules/log"
+ "github.com/gogits/gogs/modules/setting"
)
var (
ErrWebhookNotExist = errors.New("Webhook does not exist")
)
-// Content types.
+type HookContentType int
+
const (
- CT_JSON = iota + 1
- CT_FORM
+ JSON HookContentType = iota + 1
+ FORM
)
+// HookEvent represents events that will delivery hook.
type HookEvent struct {
PushOnly bool `json:"push_only"`
}
+// Webhook represents a web hook object.
type Webhook struct {
Id int64
RepoId int64
Url string `xorm:"TEXT"`
- ContentType int
+ ContentType HookContentType
Secret string `xorm:"TEXT"`
Events string `xorm:"TEXT"`
*HookEvent `xorm:"-"`
@@ -44,7 +50,7 @@ func (w *Webhook) GetEvent() {
}
}
-func (w *Webhook) SaveEvent() error {
+func (w *Webhook) UpdateEvent() error {
data, err := json.Marshal(w.HookEvent)
w.Events = string(data)
return err
@@ -57,18 +63,12 @@ func (w *Webhook) HasPushEvent() bool {
return false
}
-// CreateWebhook creates new webhook.
+// CreateWebhook creates a new web hook.
func CreateWebhook(w *Webhook) error {
_, err := orm.Insert(w)
return err
}
-// UpdateWebhook updates information of webhook.
-func UpdateWebhook(w *Webhook) error {
- _, err := orm.AllCols().Update(w)
- return err
-}
-
// GetWebhookById returns webhook by given ID.
func GetWebhookById(hookId int64) (*Webhook, error) {
w := &Webhook{Id: hookId}
@@ -93,8 +93,114 @@ func GetWebhooksByRepoId(repoId int64) (ws []*Webhook, err error) {
return ws, err
}
+// UpdateWebhook updates information of webhook.
+func UpdateWebhook(w *Webhook) error {
+ _, err := orm.AllCols().Update(w)
+ return err
+}
+
// DeleteWebhook deletes webhook of repository.
func DeleteWebhook(hookId int64) error {
_, err := orm.Delete(&Webhook{Id: hookId})
return err
}
+
+// ___ ___ __ ___________ __
+// / | \ ____ ____ | | _\__ ___/____ _____| | __
+// / ~ \/ _ \ / _ \| |/ / | | \__ \ / ___/ |/ /
+// \ Y ( <_> | <_> ) < | | / __ \_\___ \| <
+// \___|_ / \____/ \____/|__|_ \ |____| (____ /____ >__|_ \
+// \/ \/ \/ \/ \/
+
+type HookTaskType int
+
+const (
+ WEBHOOK = iota + 1
+ SERVICE
+)
+
+type PayloadAuthor struct {
+ Name string `json:"name"`
+ Email string `json:"email"`
+}
+
+type PayloadCommit struct {
+ Id string `json:"id"`
+ Message string `json:"message"`
+ Url string `json:"url"`
+ Author *PayloadAuthor `json:"author"`
+}
+
+type PayloadRepo struct {
+ Id int64 `json:"id"`
+ Name string `json:"name"`
+ Url string `json:"url"`
+ Description string `json:"description"`
+ Website string `json:"website"`
+ Watchers int `json:"watchers"`
+ Owner *PayloadAuthor `json:"author"`
+ Private bool `json:"private"`
+}
+
+// Payload represents payload information of hook.
+type Payload struct {
+ Secret string `json:"secret"`
+ Ref string `json:"ref"`
+ Commits []*PayloadCommit `json:"commits"`
+ Repo *PayloadRepo `json:"repository"`
+ Pusher *PayloadAuthor `json:"pusher"`
+}
+
+// HookTask represents hook task.
+type HookTask struct {
+ Id int64
+ Type int
+ Url string
+ *Payload `xorm:"-"`
+ PayloadContent string `xorm:"TEXT"`
+ ContentType HookContentType
+ IsSsl bool
+ IsDeliveried bool
+}
+
+// CreateHookTask creates a new hook task,
+// it handles conversion from Payload to PayloadContent.
+func CreateHookTask(t *HookTask) error {
+ data, err := json.Marshal(t.Payload)
+ if err != nil {
+ return err
+ }
+ t.PayloadContent = string(data)
+ _, err = orm.Insert(t)
+ return err
+}
+
+// UpdateHookTask updates information of hook task.
+func UpdateHookTask(t *HookTask) error {
+ _, err := orm.AllCols().Update(t)
+ return err
+}
+
+// DeliverHooks checks and delivers undelivered hooks.
+func DeliverHooks() {
+ timeout := time.Duration(setting.WebhookDeliverTimeout) * time.Second
+ orm.Where("is_deliveried=?", false).Iterate(new(HookTask),
+ func(idx int, bean interface{}) error {
+ t := bean.(*HookTask)
+ // Only support JSON now.
+ if _, err := httplib.Post(t.Url).SetTimeout(timeout, timeout).
+ Body([]byte(t.PayloadContent)).Response(); err != nil {
+ log.Error("webhook.DeliverHooks(Delivery): %v", err)
+ return nil
+ }
+
+ t.IsDeliveried = true
+ if err := UpdateHookTask(t); err != nil {
+ log.Error("webhook.DeliverHooks(UpdateHookTask): %v", err)
+ return nil
+ }
+
+ log.Trace("Hook delivered: %s", t.PayloadContent)
+ return nil
+ })
+}
diff --git a/modules/bin/conf.go b/modules/bin/conf.go
index f2b3fb8723..c07f87b747 100644
--- a/modules/bin/conf.go
+++ b/modules/bin/conf.go
@@ -1,11 +1,11 @@
package bin
import (
- "bytes"
- "compress/gzip"
- "fmt"
- "io"
- "strings"
+ "bytes"
+ "compress/gzip"
+ "fmt"
+ "io"
+ "strings"
)
func bindata_read(data []byte, name string) ([]byte, error) {
@@ -29,225 +29,230 @@ func conf_app_ini() ([]byte, error) {
return bindata_read([]byte{
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0xb4, 0x58,
0xed, 0x72, 0xdb, 0xb8, 0xd5, 0xfe, 0xcf, 0xab, 0x40, 0xf4, 0xee, 0xbe,
- 0x9b, 0x74, 0x6c, 0x49, 0x76, 0x1a, 0x27, 0x6b, 0x6f, 0x66, 0x56, 0x96,
- 0x28, 0x9b, 0x8d, 0xf5, 0x11, 0x92, 0x76, 0x9a, 0x66, 0x3c, 0x1c, 0x9a,
- 0x84, 0x24, 0xd4, 0x24, 0x41, 0x13, 0x90, 0x15, 0xf5, 0x5f, 0x6f, 0xa1,
- 0xd3, 0xab, 0xe9, 0xf5, 0xf4, 0x47, 0x2f, 0xa3, 0xcf, 0x01, 0x49, 0x99,
- 0x52, 0xb4, 0xd9, 0xf4, 0x6b, 0x76, 0x27, 0x16, 0x81, 0x83, 0x83, 0x73,
- 0x9e, 0xf3, 0x8d, 0x33, 0xd6, 0xcb, 0x73, 0x96, 0x85, 0x29, 0x67, 0x7a,
- 0x11, 0x6a, 0xa6, 0x16, 0x72, 0xa5, 0x98, 0xcc, 0x18, 0x7f, 0xe4, 0xc5,
- 0x9a, 0xe5, 0xe1, 0x1c, 0x1b, 0x42, 0x27, 0xdc, 0xea, 0x4d, 0xa7, 0xc1,
- 0xb8, 0x37, 0xb2, 0xd9, 0x5b, 0x76, 0x21, 0xe7, 0xea, 0x14, 0xff, 0xb2,
- 0x0b, 0xa1, 0x99, 0xc7, 0x8b, 0x47, 0x11, 0x95, 0xfb, 0x57, 0x93, 0x8b,
- 0x09, 0xf6, 0x45, 0x3a, 0xef, 0xcc, 0x42, 0xac, 0xca, 0xac, 0x9d, 0x67,
- 0x73, 0xeb, 0x8c, 0xf5, 0x17, 0x61, 0x06, 0x4e, 0x20, 0x17, 0x33, 0xb6,
- 0x96, 0x4b, 0x56, 0x2c, 0x33, 0x96, 0xc8, 0x28, 0x4c, 0x92, 0xb5, 0xe5,
- 0x5e, 0x8f, 0x83, 0x6b, 0xcf, 0x76, 0x71, 0x72, 0x2e, 0x34, 0xa8, 0x6d,
- 0xa1, 0x17, 0xbc, 0x60, 0xad, 0x98, 0x3f, 0xb6, 0x0e, 0x58, 0x2b, 0x2f,
- 0x64, 0xdc, 0x62, 0x12, 0x0b, 0x9a, 0x2b, 0x8d, 0x95, 0x98, 0xcf, 0xc2,
- 0x65, 0x02, 0x5e, 0xaa, 0xa4, 0x31, 0x1c, 0x46, 0x93, 0x01, 0xc9, 0x86,
- 0x6f, 0xcb, 0xfa, 0x54, 0xf0, 0x5c, 0x2a, 0xa1, 0x65, 0xb1, 0xbe, 0xb5,
- 0xdc, 0xc9, 0xc4, 0xc7, 0x86, 0xe5, 0xf5, 0x5d, 0x67, 0xea, 0x07, 0xfe,
- 0xc7, 0x29, 0xd1, 0xdd, 0x85, 0x6a, 0x01, 0x42, 0x05, 0xe9, 0x79, 0x71,
- 0x6b, 0x4d, 0xdd, 0x89, 0x3f, 0xe9, 0x4f, 0xae, 0xb0, 0xb3, 0xd0, 0x3a,
- 0xb7, 0x06, 0x93, 0x51, 0xcf, 0x19, 0xe3, 0xcb, 0x08, 0xb9, 0x90, 0x4a,
- 0x1b, 0x3e, 0xc1, 0xb5, 0x4b, 0x24, 0xdf, 0x3f, 0xaf, 0xe9, 0x5f, 0xa8,
- 0xd3, 0x4e, 0xe7, 0xfb, 0xe7, 0x25, 0x39, 0x3e, 0xbe, 0x7f, 0x7e, 0xe9,
- 0xfb, 0xd3, 0x60, 0x3a, 0x71, 0xfd, 0x17, 0xaa, 0x63, 0x99, 0x8f, 0xde,
- 0x60, 0x40, 0xba, 0x59, 0x9b, 0x1d, 0x7c, 0xbc, 0xec, 0x76, 0xbb, 0x96,
- 0xe7, 0x5d, 0xd6, 0xdf, 0xc7, 0xc7, 0xd0, 0x7b, 0x20, 0x54, 0x78, 0x97,
- 0x70, 0xd6, 0x1f, 0x8c, 0x09, 0xff, 0x8c, 0x89, 0xac, 0xd6, 0x3e, 0x95,
- 0x31, 0xb7, 0x26, 0xc3, 0xe1, 0x95, 0x33, 0xb6, 0x6b, 0x55, 0x67, 0x61,
- 0xa2, 0xb8, 0x35, 0x70, 0xbc, 0xde, 0xf9, 0x95, 0x1d, 0xb8, 0x93, 0x6b,
- 0xdf, 0x76, 0xc9, 0x04, 0x9b, 0xad, 0x33, 0x76, 0xc1, 0x33, 0x5e, 0x84,
- 0x9a, 0x33, 0xa5, 0x79, 0xae, 0x4e, 0xb1, 0xf2, 0x1d, 0x8b, 0x62, 0x98,
- 0x55, 0x2f, 0x3a, 0x5a, 0x76, 0xe6, 0x30, 0x64, 0x27, 0x5a, 0x2a, 0x2d,
- 0xd3, 0x0e, 0xa9, 0xad, 0x0c, 0xc1, 0x5c, 0x1a, 0xf3, 0x7c, 0x77, 0x31,
- 0x21, 0x95, 0x3b, 0xaa, 0x88, 0x3a, 0xf9, 0xfd, 0xbc, 0x13, 0x15, 0xeb,
- 0x1c, 0x67, 0x74, 0xa2, 0x3a, 0xf3, 0x8a, 0x6d, 0x10, 0xf1, 0x42, 0xb7,
- 0x41, 0x7f, 0x18, 0x85, 0x6f, 0x75, 0xb1, 0xe4, 0xec, 0x30, 0x5e, 0x62,
- 0x43, 0xc8, 0xec, 0xed, 0x9b, 0xd7, 0x27, 0xdd, 0x45, 0x37, 0xed, 0x2a,
- 0x76, 0x48, 0xf0, 0xbd, 0x4d, 0xd7, 0xf4, 0xa7, 0xcd, 0x3f, 0x87, 0x69,
- 0x9e, 0xf0, 0x76, 0x24, 0x53, 0xab, 0x6f, 0xbb, 0x7e, 0x30, 0x74, 0xae,
- 0x48, 0x99, 0xa6, 0x14, 0x1d, 0xc3, 0x36, 0xe7, 0xa9, 0xf5, 0xce, 0xfe,
- 0xb8, 0x97, 0xe0, 0x9e, 0xaf, 0xcd, 0xfe, 0x19, 0xbb, 0xce, 0x73, 0xb8,
- 0x4a, 0x02, 0xb8, 0x12, 0x26, 0x67, 0x4c, 0x73, 0x70, 0x27, 0x85, 0xc3,
- 0x2c, 0x86, 0xd2, 0x10, 0x25, 0x62, 0x33, 0x01, 0x4c, 0x49, 0x65, 0x90,
- 0x37, 0x5c, 0x07, 0x3e, 0x66, 0x56, 0xd9, 0x0a, 0xce, 0xc6, 0x8d, 0x53,
- 0xd3, 0x32, 0xff, 0xcc, 0xa3, 0xa5, 0xe6, 0xb1, 0xe5, 0xf9, 0x3d, 0xdf,
- 0xe9, 0x07, 0xc6, 0xec, 0xd3, 0x9e, 0x7f, 0x49, 0x26, 0xb4, 0x3e, 0xc5,
- 0xa1, 0x0e, 0xe1, 0x3b, 0xfc, 0xb6, 0xe1, 0xa7, 0xe9, 0x5a, 0x3d, 0x24,
- 0xc6, 0x53, 0xa1, 0xe1, 0xbc, 0xe0, 0xaa, 0xf4, 0x56, 0x2c, 0x0a, 0xcd,
- 0x5f, 0x62, 0x43, 0xe8, 0x1f, 0x14, 0xb9, 0x7d, 0xc1, 0xa2, 0x85, 0xa4,
- 0x60, 0x19, 0x9c, 0xd7, 0x7e, 0x68, 0xce, 0x5a, 0x97, 0x13, 0x8f, 0xbc,
- 0xe0, 0xe8, 0xf8, 0x75, 0xbb, 0x8b, 0xff, 0x8e, 0x4e, 0x5f, 0xbe, 0xec,
- 0x9e, 0x58, 0x55, 0xb8, 0x91, 0x95, 0xac, 0x2a, 0x40, 0x0a, 0x29, 0xb5,
- 0x35, 0xed, 0x79, 0xde, 0x87, 0x01, 0x7b, 0x0b, 0x11, 0x86, 0x74, 0x51,
- 0xe3, 0xda, 0x2c, 0x59, 0x1f, 0x30, 0x5e, 0xc7, 0x4f, 0xe9, 0x4f, 0x24,
- 0x59, 0xc1, 0x1f, 0x96, 0xa2, 0xe0, 0xa5, 0x60, 0xf0, 0x78, 0x31, 0x5b,
- 0x1f, 0xce, 0x96, 0x49, 0xd2, 0x82, 0x13, 0x5e, 0x6d, 0x62, 0xa7, 0xa4,
- 0xaf, 0xd9, 0xd6, 0xf2, 0x1b, 0xae, 0x56, 0x05, 0x01, 0xe9, 0x6f, 0xfc,
- 0xa6, 0x1d, 0xdf, 0x01, 0x8e, 0x30, 0x4e, 0x45, 0x76, 0x6b, 0x02, 0x29,
- 0x5a, 0x16, 0x42, 0x23, 0xde, 0x9c, 0x31, 0x90, 0xbb, 0xba, 0x82, 0x27,
- 0xf6, 0xdf, 0x35, 0x5c, 0xf1, 0xd9, 0xb3, 0xfe, 0x65, 0x6f, 0x7c, 0x61,
- 0x33, 0xff, 0xd2, 0xf1, 0x98, 0x3f, 0x61, 0xef, 0x6c, 0x7b, 0xca, 0x3e,
- 0x4e, 0xae, 0x5d, 0x66, 0x74, 0x1b, 0xf4, 0xfc, 0x1e, 0xf3, 0x7a, 0x43,
- 0xfb, 0xd9, 0x33, 0xcb, 0xb3, 0xfb, 0xae, 0xed, 0x07, 0xb0, 0x3e, 0x18,
- 0x3c, 0xfb, 0xbf, 0x9f, 0x87, 0x03, 0xfb, 0x83, 0x8b, 0xff, 0xff, 0xff,
- 0x37, 0xcf, 0xc1, 0xa9, 0xb7, 0xd4, 0xf2, 0x30, 0x91, 0x73, 0x44, 0x47,
- 0xc1, 0x53, 0x9e, 0xde, 0x41, 0xd7, 0x38, 0x5c, 0x2b, 0x0b, 0xbe, 0xef,
- 0x8c, 0x03, 0xd7, 0x1e, 0xd9, 0xa3, 0x73, 0x84, 0xc2, 0xa0, 0xf7, 0xd1,
- 0xc3, 0xf9, 0xd7, 0x56, 0x7f, 0x32, 0x79, 0xe7, 0xd8, 0x26, 0xc7, 0x34,
- 0x20, 0x0d, 0xc2, 0x15, 0x57, 0x32, 0xe5, 0xf5, 0xf6, 0xe6, 0x5c, 0x93,
- 0x46, 0x64, 0x51, 0xc1, 0x63, 0x41, 0xa8, 0x94, 0xc9, 0x02, 0xd6, 0xbb,
- 0xb5, 0x7a, 0x7d, 0xdf, 0xb9, 0xb1, 0x83, 0x3e, 0x60, 0x0b, 0xae, 0xe8,
- 0xd7, 0xc8, 0x19, 0x23, 0xfa, 0xe8, 0xb6, 0xa3, 0x37, 0x5d, 0xcb, 0xb5,
- 0x3d, 0x9b, 0x7c, 0x86, 0xac, 0xf4, 0x8b, 0x44, 0x70, 0x5d, 0xf0, 0x63,
- 0x19, 0xe7, 0x31, 0xd3, 0x92, 0x21, 0x57, 0xce, 0x44, 0x91, 0x32, 0x7e,
- 0x98, 0x86, 0x22, 0x61, 0x33, 0x18, 0xa0, 0xe0, 0x73, 0xa1, 0x74, 0x19,
- 0x4e, 0xe0, 0x79, 0xe1, 0x78, 0x14, 0xe0, 0x36, 0x32, 0xcd, 0x15, 0xb8,
- 0x8e, 0x87, 0x8e, 0x3b, 0x6a, 0xe0, 0x3b, 0x90, 0x5c, 0xb1, 0x4c, 0x6a,
- 0x86, 0x9c, 0x2a, 0x57, 0xd5, 0x61, 0x5c, 0x40, 0x81, 0x60, 0xac, 0xc4,
- 0xa0, 0x89, 0x89, 0x8c, 0x28, 0x92, 0xcb, 0x4c, 0x97, 0x56, 0xdd, 0x64,
- 0x0f, 0xc3, 0xde, 0x85, 0xc7, 0x4f, 0xc6, 0x0d, 0xa6, 0x46, 0xc4, 0x14,
- 0x91, 0xc7, 0x94, 0x98, 0x9b, 0x7c, 0x04, 0x51, 0x1f, 0x05, 0x5f, 0x81,
- 0xed, 0x5a, 0x2f, 0x44, 0x36, 0x6f, 0x43, 0xb2, 0xf7, 0xd7, 0x8e, 0x6b,
- 0x07, 0x9e, 0x73, 0x31, 0x06, 0xfc, 0x37, 0x8e, 0xfd, 0xa1, 0xc1, 0xa1,
- 0x1f, 0x46, 0x88, 0xb3, 0xf0, 0x11, 0x6e, 0x03, 0x59, 0x14, 0xcb, 0x45,
- 0xa4, 0x97, 0x05, 0xb7, 0xec, 0xb1, 0xb9, 0xb7, 0xdf, 0xeb, 0x5f, 0xda,
- 0x41, 0xef, 0x06, 0xc6, 0x77, 0x1b, 0xa7, 0x46, 0x84, 0x01, 0x94, 0x11,
- 0x33, 0x11, 0x95, 0xfa, 0x57, 0xf4, 0xe3, 0x89, 0xef, 0x0c, 0x3f, 0x06,
- 0x84, 0xc1, 0x86, 0xdc, 0xfa, 0x44, 0x90, 0x51, 0x16, 0x2f, 0x89, 0x06,
- 0x0d, 0x46, 0xe7, 0xcb, 0xd9, 0xcc, 0xe4, 0x87, 0x6c, 0x8e, 0x48, 0x47,
- 0x82, 0x88, 0x50, 0x89, 0x32, 0x9e, 0x1c, 0xb0, 0x7b, 0xce, 0x73, 0x2a,
- 0x48, 0x90, 0x49, 0x98, 0x7c, 0x50, 0x55, 0xa6, 0x58, 0x66, 0x3f, 0x68,
- 0x76, 0x9f, 0x01, 0xc3, 0x15, 0x55, 0x44, 0xb3, 0xd9, 0x86, 0x4b, 0x8e,
- 0x07, 0xc1, 0xf9, 0xf5, 0x70, 0x48, 0x39, 0xd6, 0x26, 0x8c, 0x8e, 0xc8,
- 0x86, 0x63, 0xaa, 0x9c, 0x88, 0x1b, 0x24, 0x9d, 0x35, 0x0c, 0x09, 0x80,
- 0x8c, 0xf9, 0xca, 0x92, 0xe9, 0x5d, 0x9f, 0xff, 0xce, 0xee, 0xfb, 0xa6,
- 0x60, 0xd4, 0xe5, 0xf3, 0x85, 0xaa, 0xd5, 0x2b, 0x4b, 0x0f, 0x25, 0x69,
- 0x3a, 0x72, 0xca, 0x54, 0xaa, 0xf3, 0xf6, 0x9c, 0x7e, 0x53, 0x72, 0x3c,
- 0x7d, 0xf5, 0xe6, 0x35, 0xf6, 0xde, 0xbf, 0xaf, 0x36, 0x1e, 0x1e, 0xcc,
- 0xea, 0xf1, 0xab, 0x3a, 0x57, 0xd4, 0x6c, 0x66, 0x85, 0x4c, 0x61, 0xe0,
- 0x18, 0xf1, 0xaf, 0xac, 0xa1, 0x3b, 0x19, 0x3d, 0xed, 0x41, 0xf1, 0xa5,
- 0xf1, 0x31, 0x12, 0x92, 0xfc, 0x20, 0x0f, 0x95, 0x5a, 0xc9, 0x22, 0xae,
- 0xb3, 0xc9, 0x26, 0x93, 0x50, 0x66, 0x93, 0xe1, 0x52, 0x2f, 0xbe, 0xc4,
- 0xb0, 0xda, 0x68, 0xa3, 0x34, 0x2f, 0x96, 0x77, 0x5f, 0xee, 0xf7, 0xaf,
- 0x1c, 0x7b, 0xec, 0x07, 0x8e, 0xe1, 0x52, 0x7d, 0x94, 0xf1, 0x5b, 0x16,
- 0xdd, 0xc9, 0xd4, 0xb8, 0xbc, 0xc9, 0xdb, 0xa8, 0x95, 0x61, 0x2e, 0x2a,
- 0x56, 0xa4, 0x4f, 0x87, 0xe4, 0xb3, 0x7a, 0xd7, 0xfe, 0x65, 0x55, 0x59,
- 0x6b, 0xb2, 0x06, 0x89, 0x89, 0xf4, 0x8e, 0x11, 0xa2, 0x43, 0xff, 0xc8,
- 0x42, 0xfc, 0x89, 0x5b, 0xfe, 0xe4, 0x9d, 0x3d, 0xfe, 0xc6, 0x43, 0x51,
- 0x04, 0x6c, 0x02, 0x2d, 0xef, 0x79, 0x66, 0x99, 0xa2, 0xa8, 0x59, 0x94,
- 0x08, 0x8e, 0x18, 0x10, 0x71, 0x59, 0x28, 0x38, 0x62, 0x43, 0x1b, 0x28,
- 0xb1, 0x5f, 0xb3, 0x43, 0x48, 0x2a, 0x89, 0x52, 0x15, 0x53, 0x71, 0x91,
- 0x28, 0x33, 0x0a, 0xa5, 0x4e, 0xce, 0xcb, 0xe2, 0xd5, 0x41, 0x5d, 0xfe,
- 0x23, 0x8f, 0xf4, 0x06, 0x1e, 0xb3, 0xf3, 0x1f, 0xc3, 0xb3, 0x5a, 0xad,
- 0x2a, 0x56, 0x00, 0x4a, 0x99, 0x8b, 0x8c, 0x0e, 0x84, 0x93, 0xc8, 0x66,
- 0xb2, 0xcd, 0x8d, 0x7f, 0x7d, 0x33, 0x39, 0xa4, 0xa4, 0xf2, 0xb7, 0x0f,
- 0xe2, 0x2a, 0x0f, 0x6c, 0x29, 0x25, 0x4b, 0xc8, 0x8e, 0x0d, 0x97, 0xbd,
- 0x18, 0x7f, 0xf5, 0x54, 0x05, 0x71, 0x05, 0xc9, 0xc3, 0xc3, 0xbf, 0x0d,
- 0x07, 0x72, 0x98, 0x71, 0x7e, 0xf6, 0xf7, 0xbf, 0xfd, 0xe5, 0x1f, 0x7f,
- 0xfe, 0x2b, 0x25, 0xfd, 0x3d, 0x3e, 0x52, 0x84, 0xf9, 0xa2, 0x0a, 0x8c,
- 0x4a, 0x82, 0x76, 0xb7, 0xe1, 0x22, 0x67, 0x6c, 0xaf, 0x93, 0xec, 0x3d,
- 0x55, 0x4a, 0x8e, 0x13, 0x3c, 0x8b, 0xc8, 0x31, 0x56, 0x5c, 0xdc, 0xc9,
- 0x7d, 0xa8, 0xc1, 0x0f, 0xb2, 0xb6, 0xae, 0xcf, 0x47, 0x73, 0x71, 0x78,
- 0x57, 0x3b, 0xda, 0xf1, 0xaf, 0xb8, 0xe7, 0xd7, 0x8f, 0x6e, 0x39, 0x69,
- 0x85, 0xa0, 0x5e, 0x09, 0xad, 0xf7, 0x25, 0xb6, 0x7f, 0x01, 0xc6, 0x7d,
- 0x96, 0x47, 0x0c, 0x56, 0xac, 0x9f, 0x50, 0xf8, 0x15, 0xe1, 0x7f, 0xe1,
- 0xcc, 0x3e, 0xa9, 0x0d, 0x76, 0xff, 0x0b, 0x99, 0x0d, 0xe3, 0x86, 0xdd,
- 0xbe, 0x41, 0xe4, 0x2f, 0x8f, 0x6c, 0x4b, 0x1c, 0x51, 0x79, 0xda, 0xea,
- 0xe5, 0x78, 0x8a, 0xa9, 0xa1, 0x6c, 0x99, 0x90, 0xd7, 0xf1, 0x43, 0x96,
- 0xab, 0x86, 0x72, 0x67, 0xf8, 0xa8, 0x88, 0xad, 0xde, 0xa0, 0x37, 0xf5,
- 0x4d, 0x46, 0x2d, 0x57, 0xea, 0x0e, 0xaa, 0xda, 0xaf, 0xda, 0xb2, 0x8b,
- 0x3e, 0xea, 0x03, 0xf0, 0x7b, 0x0c, 0x13, 0x2a, 0x14, 0x48, 0x3a, 0x32,
- 0x8b, 0xd5, 0x16, 0xc7, 0x93, 0x2e, 0xda, 0x27, 0x70, 0xba, 0xe9, 0x91,
- 0x22, 0x27, 0xdd, 0x9a, 0x51, 0x29, 0x8b, 0xc9, 0x55, 0x4d, 0x59, 0xc0,
- 0x20, 0x43, 0x0e, 0x42, 0x7d, 0x64, 0xd4, 0x5c, 0x6f, 0xca, 0xc0, 0x19,
- 0x33, 0x07, 0x4e, 0x59, 0xeb, 0xf4, 0xa4, 0xfb, 0xf2, 0xc7, 0x16, 0x16,
- 0xea, 0x53, 0x58, 0x7b, 0xea, 0x32, 0x8f, 0x8e, 0x8e, 0x8f, 0x8e, 0x5a,
- 0x55, 0x45, 0x31, 0x0d, 0x8e, 0x52, 0x60, 0xb6, 0x1f, 0x0f, 0xca, 0x23,
- 0x4f, 0xb8, 0x94, 0xb0, 0x54, 0x8d, 0xef, 0x3e, 0x4c, 0x30, 0x21, 0xdd,
- 0x38, 0x03, 0x03, 0x8a, 0xc9, 0x40, 0x67, 0x6c, 0x5a, 0xc8, 0x47, 0x11,
- 0x83, 0xa9, 0xe9, 0x75, 0xe6, 0x4c, 0xe6, 0x24, 0xb9, 0x2a, 0x85, 0xc3,
- 0x99, 0x53, 0xd3, 0xbe, 0x2c, 0xc2, 0x47, 0x2a, 0x56, 0xeb, 0x9a, 0x6a,
- 0xcd, 0x69, 0x24, 0x24, 0x16, 0xa8, 0x84, 0xa5, 0x7c, 0x4f, 0x1d, 0x3d,
- 0x7a, 0xdd, 0xf6, 0xbc, 0x8d, 0x4e, 0x97, 0xba, 0xd2, 0x6a, 0x57, 0xb5,
- 0x9e, 0xf4, 0xaf, 0x78, 0x24, 0xe2, 0x9e, 0x97, 0x4b, 0x55, 0xd5, 0x35,
- 0x48, 0x1d, 0xb0, 0x5c, 0xca, 0xc4, 0x83, 0xfb, 0x1c, 0x6c, 0x2a, 0x63,
- 0xcd, 0xf0, 0x09, 0xa3, 0x93, 0x97, 0xaf, 0x7f, 0x3c, 0x38, 0xea, 0x76,
- 0x0f, 0x42, 0x8c, 0x13, 0x9f, 0x05, 0x37, 0x60, 0x92, 0xde, 0xa7, 0xe8,
- 0x10, 0x0f, 0xf1, 0xf7, 0x30, 0x2e, 0x04, 0x58, 0x76, 0xcc, 0x22, 0x8b,
- 0x55, 0x56, 0xdf, 0x8a, 0xde, 0x0d, 0x0d, 0x52, 0xcd, 0x91, 0x3a, 0xf7,
- 0xd3, 0xfa, 0x9a, 0x9f, 0x6b, 0x61, 0x03, 0x6d, 0x3a, 0xf4, 0x0d, 0x5a,
- 0x65, 0x63, 0x77, 0x51, 0x37, 0xda, 0xb5, 0x4a, 0xb8, 0xd3, 0xab, 0x74,
- 0x8f, 0xa4, 0xbc, 0x17, 0xdc, 0xd4, 0xf4, 0xba, 0x73, 0xad, 0x1a, 0x56,
- 0x11, 0x90, 0x9e, 0x01, 0xfa, 0x56, 0xa1, 0xe9, 0x84, 0x53, 0x36, 0x34,
- 0xa8, 0x05, 0x1b, 0xe0, 0xe0, 0x76, 0x26, 0x3a, 0x2a, 0x8f, 0x6c, 0xd8,
- 0xad, 0x8a, 0xd1, 0x92, 0x21, 0xc2, 0xf2, 0xda, 0xb5, 0x1b, 0x6d, 0x94,
- 0x9d, 0x99, 0xc1, 0x54, 0x51, 0xe5, 0x34, 0xf7, 0x6f, 0x9d, 0xa5, 0xc9,
- 0xaf, 0x6e, 0xd0, 0xa8, 0xf3, 0x2d, 0xb9, 0xe0, 0xb8, 0xd9, 0x78, 0x12,
- 0x1d, 0x01, 0xa0, 0x05, 0x5a, 0x91, 0x3a, 0x0a, 0xb6, 0x98, 0xbc, 0x39,
- 0xf9, 0x2d, 0x46, 0xe2, 0x8b, 0x7e, 0x50, 0x07, 0x40, 0xe0, 0x3b, 0x46,
- 0xad, 0x72, 0xe3, 0x89, 0x4b, 0x22, 0x66, 0xdc, 0xf0, 0xd9, 0x73, 0xdc,
- 0xb3, 0x3d, 0x0f, 0x1d, 0x2c, 0xfa, 0xed, 0xa1, 0xbd, 0x7b, 0x7e, 0x83,
- 0x41, 0x0c, 0x1f, 0x53, 0x0b, 0x36, 0x5b, 0x66, 0xd1, 0xc1, 0xc6, 0xcf,
- 0xd5, 0x22, 0x3c, 0x22, 0xef, 0xc6, 0xdf, 0xe3, 0x57, 0x27, 0x95, 0x7b,
- 0xc7, 0xaf, 0x5a, 0xcd, 0x3b, 0x88, 0x66, 0x73, 0x85, 0x33, 0x08, 0x2e,
- 0x7b, 0xde, 0xe5, 0xf0, 0x7a, 0xdc, 0xc7, 0x25, 0x66, 0xeb, 0x49, 0x46,
- 0x73, 0x01, 0x86, 0xd4, 0x2d, 0x11, 0xc9, 0x10, 0x05, 0x42, 0x18, 0xfd,
- 0x5a, 0xe9, 0x1a, 0xbb, 0xbc, 0xcc, 0xbc, 0x83, 0x30, 0xac, 0x7a, 0x64,
- 0x0a, 0x43, 0x9f, 0x86, 0xd4, 0x24, 0x8c, 0x38, 0x35, 0xde, 0xd5, 0xba,
- 0x71, 0x8d, 0xa7, 0x29, 0xaf, 0xf4, 0xe8, 0x52, 0xe2, 0x07, 0x91, 0x89,
- 0xe5, 0x4e, 0x40, 0x56, 0xfb, 0xb8, 0xcc, 0xbd, 0x71, 0xfa, 0x84, 0x48,
- 0xd5, 0x79, 0xd6, 0xbd, 0xff, 0x85, 0xbb, 0xd3, 0x7f, 0x5b, 0x9f, 0xd0,
- 0x3e, 0x95, 0x0f, 0x27, 0xd5, 0xe4, 0xdb, 0x48, 0x08, 0x55, 0x57, 0xd4,
- 0xcc, 0x08, 0x94, 0x86, 0x0c, 0x76, 0x68, 0x54, 0x4b, 0x39, 0xea, 0x29,
- 0x79, 0x47, 0x94, 0xfa, 0x6c, 0x39, 0x59, 0xc0, 0x95, 0xd2, 0x34, 0x24,
- 0xc5, 0x14, 0xcf, 0x43, 0xf3, 0x4c, 0x91, 0x82, 0x52, 0xe4, 0xf0, 0x34,
- 0x7a, 0xef, 0x50, 0x75, 0xe8, 0x54, 0xc7, 0x0e, 0x4c, 0xdc, 0xb7, 0xac,
- 0x6a, 0x5a, 0xad, 0x56, 0xff, 0x9b, 0x4d, 0xfe, 0x4e, 0x7f, 0xdf, 0x35,
- 0x7e, 0x53, 0x2b, 0xee, 0x17, 0x30, 0x03, 0xa9, 0x39, 0xe0, 0x77, 0xcb,
- 0x39, 0xfd, 0x70, 0xd0, 0x61, 0xd1, 0xdf, 0x0f, 0x61, 0x61, 0xf4, 0xb7,
- 0x8b, 0x42, 0x16, 0xf4, 0xa3, 0x8f, 0x49, 0x18, 0x83, 0xcb, 0x6e, 0x6a,
- 0x2c, 0x39, 0x58, 0x57, 0xf6, 0x8d, 0x4d, 0xe9, 0xdd, 0x7c, 0x5a, 0x75,
- 0x8a, 0xaf, 0xb1, 0x31, 0xaa, 0x97, 0xc3, 0x19, 0x99, 0xa1, 0x5d, 0xad,
- 0xdf, 0x6e, 0x8e, 0x6d, 0x4e, 0x18, 0x34, 0x76, 0xc9, 0x69, 0xb1, 0x41,
- 0x4b, 0x8f, 0x27, 0x75, 0x7e, 0xc0, 0x76, 0x39, 0xb9, 0xe3, 0x87, 0x71,
- 0x2d, 0x7a, 0xed, 0x30, 0x81, 0xad, 0x18, 0x8a, 0xa3, 0x4c, 0x61, 0x81,
- 0x98, 0xa8, 0x58, 0x21, 0x35, 0x7e, 0x3f, 0x57, 0xa8, 0xf7, 0x91, 0x01,
- 0x74, 0x26, 0x69, 0xa8, 0x84, 0xcb, 0xd6, 0x49, 0xfb, 0xc5, 0x97, 0x09,
- 0x00, 0xd3, 0x77, 0xe0, 0x4e, 0xfc, 0x9e, 0xdf, 0x88, 0xfc, 0x51, 0xf8,
- 0x19, 0xf1, 0x9a, 0x21, 0x5d, 0x2d, 0xcd, 0x98, 0x0e, 0x56, 0x0a, 0x5c,
- 0x60, 0x60, 0x92, 0x73, 0x8b, 0x87, 0x81, 0x1b, 0x80, 0x8f, 0x7a, 0xbf,
- 0x0f, 0xe8, 0x95, 0xcb, 0xab, 0x4d, 0x60, 0x8c, 0x40, 0x8c, 0x14, 0x32,
- 0x35, 0x02, 0x4d, 0xcc, 0xf4, 0xd7, 0xf8, 0x1c, 0xbf, 0x41, 0x39, 0x09,
- 0x33, 0x30, 0x64, 0x3f, 0xfd, 0x84, 0xaf, 0x03, 0x86, 0x78, 0x1e, 0x9d,
- 0x1b, 0xbe, 0x9e, 0xf3, 0x07, 0x64, 0xa8, 0x4b, 0x67, 0x68, 0x9e, 0xdc,
- 0xde, 0x98, 0x80, 0x9d, 0xa7, 0xd4, 0xef, 0x91, 0xd6, 0x31, 0x3a, 0xeb,
- 0xf5, 0x97, 0x7a, 0x0d, 0x30, 0x6b, 0x7e, 0xfc, 0x42, 0x33, 0xfb, 0x73,
- 0x2e, 0x50, 0x51, 0xcc, 0xc3, 0x03, 0x89, 0x43, 0x0c, 0x48, 0x96, 0xe7,
- 0x31, 0x4f, 0x38, 0x4d, 0xd9, 0x33, 0x1a, 0xbe, 0x53, 0x88, 0x4d, 0x14,
- 0xdb, 0x70, 0xbd, 0x36, 0xc2, 0x6c, 0x9e, 0x27, 0x1a, 0x1e, 0x90, 0xed,
- 0x33, 0x7f, 0xd6, 0xb0, 0xe7, 0x19, 0x73, 0x79, 0x55, 0xf5, 0xcb, 0x92,
- 0x4f, 0x0f, 0x05, 0xe5, 0x5b, 0x6d, 0x05, 0x48, 0x8a, 0x14, 0x14, 0xce,
- 0xf9, 0x9e, 0xe4, 0xee, 0xda, 0x28, 0x2e, 0x63, 0x0c, 0xa4, 0x01, 0x52,
- 0xce, 0xc8, 0x6b, 0xbe, 0x13, 0xfa, 0x38, 0x8f, 0x38, 0x2c, 0x36, 0xbc,
- 0x57, 0x0b, 0x9e, 0x35, 0xdb, 0x0b, 0x30, 0x49, 0x70, 0xdd, 0xd7, 0xb8,
- 0x36, 0xcb, 0x45, 0x15, 0x32, 0x3a, 0xca, 0x29, 0x1c, 0x96, 0x99, 0xf8,
- 0x5c, 0xe6, 0x85, 0x65, 0x9c, 0xef, 0xc4, 0x04, 0x91, 0x34, 0x5f, 0x5f,
- 0xf1, 0x0d, 0x06, 0x97, 0xcd, 0x6e, 0xa6, 0x7e, 0x3f, 0xdd, 0xbc, 0x4b,
- 0x99, 0x34, 0xb3, 0x83, 0x13, 0x2d, 0x6e, 0xe1, 0xf4, 0xb5, 0xc9, 0x7c,
- 0x5b, 0x84, 0x81, 0x08, 0xe7, 0x19, 0x2e, 0x14, 0x51, 0x0d, 0x5e, 0x39,
- 0x54, 0x9b, 0x34, 0xd9, 0x6a, 0x4c, 0xf1, 0x5f, 0x25, 0xdc, 0x19, 0xeb,
- 0xb7, 0xa7, 0xf4, 0x6f, 0x9f, 0xc4, 0x4b, 0x0b, 0x73, 0xea, 0x28, 0x90,
- 0xff, 0xa2, 0x30, 0x63, 0x77, 0xa4, 0x26, 0x27, 0xf8, 0xd0, 0x24, 0xf1,
- 0x2a, 0x27, 0x7e, 0x6a, 0x1d, 0xfd, 0xdc, 0x78, 0x4a, 0x6d, 0x1d, 0xb4,
- 0x8e, 0xb7, 0xbe, 0x6f, 0xc9, 0x2e, 0xb6, 0x73, 0x63, 0xbb, 0x5e, 0x13,
- 0xba, 0x4d, 0x5e, 0xde, 0x85, 0xef, 0xe9, 0x59, 0x73, 0x03, 0xe1, 0xc0,
- 0xa5, 0xe3, 0xa6, 0x59, 0x87, 0x81, 0xe9, 0xef, 0x3f, 0x03, 0x00, 0x00,
- 0xff, 0xff, 0x77, 0x1f, 0xe2, 0xa5, 0x2d, 0x18, 0x00, 0x00,
- },
+ 0x9b, 0x74, 0x6c, 0x49, 0x76, 0x1a, 0x27, 0x6b, 0x6f, 0x66, 0x96, 0x96,
+ 0x28, 0x9b, 0x8d, 0x25, 0x39, 0x24, 0xed, 0x34, 0xcd, 0x78, 0x38, 0x34,
+ 0x09, 0x49, 0xa8, 0x49, 0x82, 0x26, 0x20, 0x2b, 0xea, 0xbf, 0xde, 0x42,
+ 0xa7, 0x57, 0xd3, 0xeb, 0xe9, 0x8f, 0x5e, 0x46, 0x9f, 0x03, 0x92, 0x32,
+ 0xe5, 0x68, 0xb3, 0xe9, 0xd7, 0xec, 0x4e, 0x2c, 0x02, 0x07, 0x07, 0xe7,
+ 0x3c, 0xe7, 0x1b, 0x27, 0xcc, 0x2e, 0x0a, 0x96, 0x47, 0x19, 0x67, 0x7a,
+ 0x11, 0x69, 0xa6, 0x16, 0x72, 0xa5, 0x98, 0xcc, 0x19, 0x7f, 0xe0, 0xe5,
+ 0x9a, 0x15, 0xd1, 0x1c, 0x1b, 0x42, 0xa7, 0xdc, 0xb2, 0x2f, 0x2f, 0xc3,
+ 0x89, 0x3d, 0x76, 0xd8, 0x5b, 0x76, 0x26, 0xe7, 0xea, 0x18, 0xff, 0xb2,
+ 0x33, 0xa1, 0x99, 0xcf, 0xcb, 0x07, 0x11, 0x57, 0xfb, 0x17, 0xd3, 0xb3,
+ 0x29, 0xf6, 0x45, 0x36, 0xef, 0xcd, 0x22, 0xac, 0xca, 0xbc, 0x5b, 0xe4,
+ 0x73, 0xeb, 0x84, 0x0d, 0x16, 0x51, 0x0e, 0x4e, 0x20, 0x17, 0x33, 0xb6,
+ 0x96, 0x4b, 0x56, 0x2e, 0x73, 0x96, 0xca, 0x38, 0x4a, 0xd3, 0xb5, 0xe5,
+ 0x5d, 0x4d, 0xc2, 0x2b, 0xdf, 0xf1, 0x70, 0x72, 0x2e, 0x34, 0xa8, 0x1d,
+ 0xa1, 0x17, 0xbc, 0x64, 0x9d, 0x84, 0x3f, 0x74, 0xf6, 0x58, 0xa7, 0x28,
+ 0x65, 0xd2, 0x61, 0x12, 0x0b, 0x9a, 0x2b, 0x8d, 0x95, 0x84, 0xcf, 0xa2,
+ 0x65, 0x0a, 0x5e, 0xaa, 0xa2, 0x31, 0x1c, 0xc6, 0xd3, 0x21, 0xc9, 0x86,
+ 0x6f, 0xcb, 0xfa, 0x54, 0xf2, 0x42, 0x2a, 0xa1, 0x65, 0xb9, 0xbe, 0xb1,
+ 0xbc, 0xe9, 0x34, 0xc0, 0x86, 0xe5, 0x0f, 0x3c, 0xf7, 0x32, 0x08, 0x83,
+ 0x8f, 0x97, 0x44, 0x77, 0x1b, 0xa9, 0x05, 0x08, 0x15, 0xa4, 0xe7, 0xe5,
+ 0x8d, 0x75, 0xe9, 0x4d, 0x83, 0xe9, 0x60, 0x7a, 0x81, 0x9d, 0x85, 0xd6,
+ 0x85, 0x35, 0x9c, 0x8e, 0x6d, 0x77, 0x82, 0x2f, 0x23, 0xe4, 0x42, 0x2a,
+ 0x6d, 0xf8, 0x84, 0x57, 0x1e, 0x91, 0x7c, 0xff, 0xbc, 0xa1, 0x7f, 0xa1,
+ 0x8e, 0x7b, 0xbd, 0xef, 0x9f, 0x57, 0xe4, 0xf8, 0xf8, 0xfe, 0xf9, 0x79,
+ 0x10, 0x5c, 0x86, 0x97, 0x53, 0x2f, 0x78, 0xa1, 0x7a, 0x96, 0xf9, 0xb0,
+ 0x87, 0x43, 0xd2, 0xcd, 0xda, 0xec, 0xe0, 0xe3, 0x65, 0xbf, 0xdf, 0xb7,
+ 0x7c, 0xff, 0xbc, 0xf9, 0x3e, 0x3c, 0x84, 0xde, 0x43, 0xa1, 0xa2, 0xdb,
+ 0x94, 0xb3, 0xc1, 0x70, 0x42, 0xf8, 0xe7, 0x4c, 0xe4, 0x8d, 0xf6, 0x99,
+ 0x4c, 0xb8, 0x35, 0x1d, 0x8d, 0x2e, 0xdc, 0x89, 0xd3, 0xa8, 0x3a, 0x8b,
+ 0x52, 0xc5, 0xad, 0xa1, 0xeb, 0xdb, 0xa7, 0x17, 0x4e, 0xe8, 0x4d, 0xaf,
+ 0x02, 0xc7, 0x23, 0x13, 0x6c, 0xb6, 0x4e, 0xd8, 0x19, 0xcf, 0x79, 0x19,
+ 0x69, 0xce, 0x94, 0xe6, 0x85, 0x3a, 0xc6, 0xca, 0x77, 0x2c, 0x4e, 0x60,
+ 0x56, 0xbd, 0xe8, 0x69, 0xd9, 0x9b, 0xc3, 0x90, 0xbd, 0x78, 0xa9, 0xb4,
+ 0xcc, 0x7a, 0xa4, 0xb6, 0x32, 0x04, 0x73, 0x69, 0xcc, 0xf3, 0xdd, 0xd9,
+ 0x94, 0x54, 0xee, 0xa9, 0x32, 0xee, 0x15, 0x77, 0xf3, 0x5e, 0x5c, 0xae,
+ 0x0b, 0x9c, 0xd1, 0xa9, 0xea, 0xcd, 0x6b, 0xb6, 0x61, 0xcc, 0x4b, 0xdd,
+ 0x05, 0xfd, 0x7e, 0x1c, 0xbd, 0xd5, 0xe5, 0x92, 0xb3, 0xfd, 0x64, 0x89,
+ 0x0d, 0x21, 0xf3, 0xb7, 0x6f, 0x5e, 0x1f, 0xf5, 0x17, 0xfd, 0xac, 0xaf,
+ 0xd8, 0x3e, 0xc1, 0xf7, 0x36, 0x5b, 0xd3, 0x9f, 0x2e, 0xff, 0x1c, 0x65,
+ 0x45, 0xca, 0xbb, 0xb1, 0xcc, 0xac, 0x81, 0xe3, 0x05, 0xe1, 0xc8, 0xbd,
+ 0x20, 0x65, 0xda, 0x52, 0xf4, 0x0c, 0xdb, 0x82, 0x67, 0xd6, 0x3b, 0xe7,
+ 0xe3, 0x4e, 0x82, 0x3b, 0xbe, 0x36, 0xfb, 0x27, 0xec, 0xaa, 0x28, 0xe0,
+ 0x2a, 0x29, 0xe0, 0x4a, 0x99, 0x9c, 0x31, 0xcd, 0xc1, 0x9d, 0x14, 0x8e,
+ 0xf2, 0x04, 0x4a, 0x43, 0x94, 0x98, 0xcd, 0x04, 0x30, 0x25, 0x95, 0x41,
+ 0xde, 0x72, 0x1d, 0xf8, 0x98, 0x59, 0x65, 0x2b, 0x38, 0x1b, 0x37, 0x4e,
+ 0x4d, 0xcb, 0xfc, 0x33, 0x8f, 0x97, 0x9a, 0x27, 0x96, 0x1f, 0xd8, 0x81,
+ 0x3b, 0x08, 0x8d, 0xd9, 0x2f, 0xed, 0xe0, 0x9c, 0x4c, 0x68, 0x7d, 0x4a,
+ 0x22, 0x1d, 0xc1, 0x77, 0xf8, 0x4d, 0xcb, 0x4f, 0xb3, 0xb5, 0xba, 0x4f,
+ 0x8d, 0xa7, 0x42, 0xc3, 0x79, 0xc9, 0x55, 0xe5, 0xad, 0x58, 0x14, 0x9a,
+ 0xbf, 0xc4, 0x86, 0xd0, 0x3f, 0x28, 0x72, 0xfb, 0x92, 0xc5, 0x0b, 0x49,
+ 0xc1, 0x32, 0x3c, 0x6d, 0xfc, 0xd0, 0x9c, 0xb5, 0xce, 0xa7, 0x3e, 0x79,
+ 0xc1, 0xc1, 0xe1, 0xeb, 0x6e, 0x1f, 0xff, 0x1d, 0x1c, 0xbf, 0x7c, 0xd9,
+ 0x3f, 0xb2, 0xea, 0x70, 0x23, 0x2b, 0x59, 0x75, 0x80, 0x94, 0x52, 0x6a,
+ 0xeb, 0xd2, 0xf6, 0xfd, 0x0f, 0x43, 0xf6, 0x16, 0x22, 0x8c, 0xe8, 0xa2,
+ 0xd6, 0xb5, 0x79, 0xba, 0xde, 0x63, 0xbc, 0x89, 0x9f, 0xca, 0x9f, 0x48,
+ 0xb2, 0x92, 0xdf, 0x2f, 0x45, 0xc9, 0x2b, 0xc1, 0xe0, 0xf1, 0x62, 0xb6,
+ 0xde, 0x9f, 0x2d, 0xd3, 0xb4, 0x03, 0x27, 0xbc, 0xd8, 0xc4, 0x4e, 0x45,
+ 0xdf, 0xb0, 0x6d, 0xe4, 0x37, 0x5c, 0xad, 0x1a, 0x02, 0xd2, 0xdf, 0xf8,
+ 0x4d, 0x37, 0xb9, 0x05, 0x1c, 0x51, 0x92, 0x89, 0xfc, 0xc6, 0x04, 0x52,
+ 0xbc, 0x2c, 0x85, 0x46, 0xbc, 0xb9, 0x13, 0x20, 0x77, 0x71, 0x01, 0x4f,
+ 0x1c, 0xbc, 0x6b, 0xb9, 0xe2, 0xb3, 0x67, 0x83, 0x73, 0x7b, 0x72, 0xe6,
+ 0xb0, 0xe0, 0xdc, 0xf5, 0x59, 0x30, 0x65, 0xef, 0x1c, 0xe7, 0x92, 0x7d,
+ 0x9c, 0x5e, 0x79, 0xcc, 0xe8, 0x36, 0xb4, 0x03, 0x9b, 0xf9, 0xf6, 0xc8,
+ 0x79, 0xf6, 0xcc, 0xf2, 0x9d, 0x81, 0xe7, 0x04, 0x21, 0xac, 0x0f, 0x06,
+ 0xcf, 0xfe, 0xef, 0xe7, 0xd1, 0xd0, 0xf9, 0xe0, 0xe1, 0xff, 0xff, 0xff,
+ 0xcd, 0x73, 0x70, 0xb2, 0x97, 0x5a, 0xee, 0xa7, 0x72, 0x8e, 0xe8, 0x28,
+ 0x79, 0xc6, 0xb3, 0x5b, 0xe8, 0x9a, 0x44, 0x6b, 0x65, 0xc1, 0xf7, 0xdd,
+ 0x49, 0xe8, 0x39, 0x63, 0x67, 0x7c, 0x8a, 0x50, 0x18, 0xda, 0x1f, 0x7d,
+ 0x9c, 0x7f, 0x6d, 0x0d, 0xa6, 0xd3, 0x77, 0xae, 0x63, 0x72, 0x4c, 0x0b,
+ 0xd2, 0x30, 0x5a, 0x71, 0x25, 0x33, 0xde, 0x6c, 0x6f, 0xce, 0xb5, 0x69,
+ 0x44, 0x1e, 0x97, 0x3c, 0x11, 0x84, 0x4a, 0x95, 0x2c, 0x60, 0xbd, 0x1b,
+ 0xcb, 0x1e, 0x04, 0xee, 0xb5, 0x13, 0x0e, 0x00, 0x5b, 0x78, 0x41, 0xbf,
+ 0xc6, 0xee, 0x04, 0xd1, 0x47, 0xb7, 0x1d, 0xbc, 0xe9, 0x5b, 0x9e, 0xe3,
+ 0x3b, 0xe4, 0x33, 0x64, 0xa5, 0x5f, 0x24, 0x82, 0xeb, 0x82, 0x1f, 0xcb,
+ 0x39, 0x4f, 0x98, 0x96, 0x0c, 0xb9, 0x72, 0x26, 0xca, 0x8c, 0xf1, 0xfd,
+ 0x2c, 0x12, 0x29, 0x9b, 0xc1, 0x00, 0x25, 0x9f, 0x0b, 0xa5, 0xab, 0x70,
+ 0x02, 0xcf, 0x33, 0xd7, 0xa7, 0x00, 0x77, 0x90, 0x69, 0x2e, 0xc0, 0x75,
+ 0x32, 0x72, 0xbd, 0x71, 0x0b, 0xdf, 0xa1, 0xe4, 0x8a, 0xe5, 0x52, 0x33,
+ 0xe4, 0x54, 0xb9, 0xaa, 0x0f, 0xe3, 0x02, 0x0a, 0x04, 0x63, 0x25, 0x06,
+ 0x4d, 0x4c, 0x64, 0xc4, 0xb1, 0x5c, 0xe6, 0xba, 0xb2, 0xea, 0x26, 0x7b,
+ 0x18, 0xf6, 0x1e, 0x3c, 0x7e, 0x3a, 0x69, 0x31, 0x35, 0x22, 0x66, 0x88,
+ 0x3c, 0xa6, 0xc4, 0xdc, 0xe4, 0x23, 0x88, 0xfa, 0x20, 0xf8, 0x0a, 0x6c,
+ 0xd7, 0x7a, 0x21, 0xf2, 0x79, 0x17, 0x92, 0xbd, 0xbf, 0x72, 0x3d, 0x27,
+ 0xf4, 0xdd, 0xb3, 0x09, 0xe0, 0xbf, 0x76, 0x9d, 0x0f, 0x2d, 0x0e, 0x83,
+ 0x28, 0x46, 0x9c, 0x45, 0x0f, 0x70, 0x1b, 0xc8, 0xa2, 0x58, 0x21, 0x62,
+ 0xbd, 0x2c, 0xb9, 0xe5, 0x4c, 0xcc, 0xbd, 0x03, 0x7b, 0x70, 0xee, 0x84,
+ 0xf6, 0x35, 0x8c, 0xef, 0xb5, 0x4e, 0x8d, 0x09, 0x03, 0x28, 0x23, 0x66,
+ 0x22, 0xae, 0xf4, 0xaf, 0xe9, 0x27, 0xd3, 0xc0, 0x1d, 0x7d, 0x0c, 0x09,
+ 0x83, 0x0d, 0xb9, 0xf5, 0x69, 0xc5, 0x6f, 0x17, 0x52, 0xde, 0x51, 0x4c,
+ 0x0e, 0x4a, 0x14, 0x2f, 0x1d, 0xa9, 0x3b, 0x08, 0x0b, 0xf5, 0x1f, 0xa2,
+ 0x94, 0xa4, 0x86, 0xfa, 0x88, 0x69, 0x65, 0x05, 0xb6, 0xff, 0x2e, 0x74,
+ 0x27, 0xc0, 0xf1, 0xda, 0x26, 0x06, 0x07, 0x04, 0x1c, 0x4f, 0x05, 0x22,
+ 0x02, 0x65, 0x2e, 0xe3, 0x72, 0xa9, 0x89, 0x1c, 0xce, 0x2c, 0xf3, 0x44,
+ 0x59, 0x43, 0x87, 0x0c, 0xe7, 0x85, 0x81, 0x3b, 0x76, 0x90, 0x5e, 0x71,
+ 0xe0, 0x15, 0x6e, 0x23, 0x03, 0x51, 0xcd, 0xa8, 0x44, 0x1a, 0xb6, 0xc4,
+ 0x3e, 0x5d, 0xce, 0x66, 0x26, 0x1b, 0xe5, 0x73, 0xe4, 0x15, 0xa4, 0xa3,
+ 0x18, 0x75, 0x2f, 0xe7, 0xe9, 0x1e, 0xbb, 0xe3, 0xbc, 0xa0, 0xf2, 0x07,
+ 0x04, 0x84, 0xc9, 0x3e, 0x75, 0x1d, 0x4c, 0x64, 0xfe, 0x83, 0x66, 0x77,
+ 0x39, 0x2c, 0xb6, 0xa2, 0xfa, 0x6b, 0x36, 0xbb, 0x08, 0x80, 0xc9, 0x30,
+ 0x3c, 0xbd, 0x1a, 0x8d, 0x28, 0xa3, 0x3b, 0x64, 0x91, 0x03, 0xf2, 0x98,
+ 0x09, 0xd5, 0x69, 0x44, 0x29, 0x52, 0xdc, 0x1a, 0x6e, 0x43, 0x8a, 0x11,
+ 0x50, 0x55, 0x81, 0xf6, 0xaf, 0x4e, 0x7f, 0xe7, 0x0c, 0x02, 0x53, 0x9e,
+ 0x9a, 0x62, 0xfd, 0x42, 0x35, 0x60, 0x56, 0x85, 0x8e, 0x4a, 0x02, 0x1d,
+ 0x39, 0x66, 0x2a, 0xd3, 0x45, 0x77, 0x4e, 0xbf, 0x29, 0x15, 0x1f, 0xbf,
+ 0x7a, 0xf3, 0x1a, 0x7b, 0xef, 0xdf, 0xd7, 0x1b, 0xf7, 0xf7, 0x66, 0xf5,
+ 0xf0, 0x55, 0x93, 0x99, 0x1a, 0x36, 0xb3, 0x52, 0x66, 0x70, 0xa7, 0x04,
+ 0xd9, 0x46, 0x59, 0x23, 0x6f, 0x3a, 0x7e, 0xdc, 0x83, 0xe2, 0x4b, 0xe3,
+ 0xd1, 0x24, 0x24, 0x79, 0x5d, 0x11, 0x29, 0xb5, 0x92, 0x65, 0xd2, 0xe4,
+ 0xae, 0x4d, 0xde, 0xa2, 0x3c, 0x2a, 0xa3, 0xa5, 0x5e, 0x7c, 0x89, 0x61,
+ 0xbd, 0xd1, 0x45, 0x23, 0xb0, 0x58, 0xde, 0x7e, 0xb9, 0x3f, 0xb8, 0x70,
+ 0x9d, 0x49, 0x10, 0xba, 0x86, 0x4b, 0xfd, 0x51, 0x65, 0x8b, 0xaa, 0xc4,
+ 0x4f, 0x2f, 0x4d, 0x80, 0x99, 0x2a, 0x81, 0xca, 0x1c, 0x15, 0xa2, 0x66,
+ 0x45, 0xfa, 0xf4, 0x48, 0x3e, 0xcb, 0xbe, 0x0a, 0xce, 0xeb, 0x3a, 0xde,
+ 0x90, 0xb5, 0x48, 0x4c, 0x5e, 0xe9, 0x19, 0x21, 0x7a, 0xf4, 0x8f, 0x2c,
+ 0xc5, 0x9f, 0xb8, 0x15, 0x4c, 0xdf, 0x39, 0x93, 0x6f, 0x3c, 0x14, 0xc7,
+ 0xc0, 0x26, 0xd4, 0xf2, 0x8e, 0xe7, 0x96, 0x29, 0xc1, 0x9a, 0xc5, 0xa9,
+ 0xe0, 0x88, 0x38, 0x91, 0x54, 0x65, 0x89, 0x23, 0x12, 0xb5, 0x81, 0x12,
+ 0xfb, 0x0d, 0x3b, 0x78, 0x9c, 0x92, 0x28, 0x8c, 0x09, 0x95, 0x32, 0x89,
+ 0xa2, 0xa6, 0x50, 0x58, 0xe5, 0xbc, 0x2a, 0x95, 0x3d, 0x74, 0x01, 0x7f,
+ 0xe4, 0xb1, 0xde, 0xc0, 0x63, 0x76, 0xfe, 0x63, 0x78, 0x56, 0xab, 0x55,
+ 0xcd, 0x0a, 0x40, 0x29, 0x73, 0x91, 0xd1, 0x81, 0x70, 0x12, 0xf9, 0x4c,
+ 0x76, 0xb9, 0xf1, 0xaf, 0x6f, 0x26, 0x87, 0x94, 0x54, 0x6c, 0x77, 0x41,
+ 0x5c, 0x67, 0x9d, 0x2d, 0xa5, 0x64, 0x05, 0xd9, 0xa1, 0xe1, 0xb2, 0x13,
+ 0xe3, 0xaf, 0x9e, 0xaa, 0x21, 0xae, 0x21, 0xb9, 0xbf, 0xff, 0xb7, 0xe1,
+ 0x40, 0xc6, 0x34, 0xce, 0xcf, 0xfe, 0xfe, 0xb7, 0xbf, 0xfc, 0xe3, 0xcf,
+ 0x7f, 0xa5, 0x12, 0xb3, 0xc3, 0x47, 0xca, 0xa8, 0x58, 0xd4, 0x81, 0x51,
+ 0x4b, 0xd0, 0xed, 0xb7, 0x5c, 0xe4, 0x84, 0xed, 0x74, 0x92, 0x9d, 0xa7,
+ 0x2a, 0xc9, 0x71, 0x82, 0xe7, 0x31, 0x39, 0xc6, 0x8a, 0x8b, 0x5b, 0xb9,
+ 0x0b, 0x35, 0xf8, 0x41, 0xde, 0xd5, 0xcd, 0xf9, 0x78, 0x2e, 0xf6, 0x6f,
+ 0x1b, 0x47, 0x3b, 0xfc, 0x15, 0xf7, 0xfc, 0xfa, 0xd1, 0x2d, 0x27, 0xad,
+ 0x11, 0xd4, 0x2b, 0xa1, 0xf5, 0xae, 0xc4, 0xf6, 0x2f, 0xc0, 0xb8, 0xcb,
+ 0xf2, 0x88, 0xc1, 0x9a, 0xf5, 0x23, 0x0a, 0xbf, 0x22, 0xfc, 0x2f, 0x9c,
+ 0xd9, 0x25, 0xb5, 0xc1, 0xee, 0x7f, 0x21, 0xb3, 0x61, 0xdc, 0xb2, 0xdb,
+ 0x37, 0x88, 0xfc, 0xe5, 0x91, 0x6d, 0x89, 0x63, 0x2a, 0x86, 0x5b, 0x9d,
+ 0x23, 0xcf, 0x30, 0xa3, 0x54, 0x0d, 0x1a, 0xf2, 0x3a, 0x7e, 0xc8, 0x6a,
+ 0xd5, 0x50, 0x3e, 0x19, 0x75, 0x6a, 0x62, 0xcb, 0x1e, 0xda, 0x97, 0x81,
+ 0xc9, 0xa8, 0xd5, 0x4a, 0xd3, 0xaf, 0xd5, 0xfb, 0x75, 0x13, 0x78, 0x36,
+ 0xd8, 0xaa, 0x80, 0x75, 0x49, 0xdb, 0xe2, 0x78, 0xd4, 0xb7, 0x5a, 0xb5,
+ 0xf0, 0xa8, 0xdf, 0x30, 0xaa, 0x64, 0x31, 0xb9, 0xaa, 0x2d, 0x0b, 0x18,
+ 0xe4, 0xc8, 0x41, 0xa8, 0xc6, 0x8c, 0x5a, 0xf9, 0x4d, 0x19, 0x38, 0x61,
+ 0xe6, 0xc0, 0x31, 0xeb, 0x1c, 0x1f, 0xf5, 0x5f, 0xfe, 0xd8, 0xc1, 0x42,
+ 0x73, 0x0a, 0x6b, 0x8f, 0x3d, 0xed, 0xc1, 0xc1, 0xe1, 0xc1, 0x41, 0xa7,
+ 0xae, 0x28, 0xa6, 0x9d, 0x52, 0x0a, 0xcc, 0x76, 0xe3, 0x41, 0x79, 0xe4,
+ 0x11, 0x97, 0x0a, 0x96, 0xba, 0xcd, 0xde, 0x85, 0x09, 0xe6, 0xb1, 0x6b,
+ 0x77, 0x68, 0x40, 0x31, 0x19, 0xe8, 0x84, 0x5d, 0x96, 0xf2, 0x41, 0x24,
+ 0x60, 0x6a, 0x3a, 0xab, 0x39, 0x93, 0x05, 0x49, 0xae, 0x2a, 0xe1, 0x70,
+ 0xe6, 0xd8, 0x34, 0x4b, 0x8b, 0xe8, 0x81, 0x8a, 0xd5, 0xba, 0xa1, 0x5a,
+ 0x73, 0x1a, 0x40, 0x89, 0x05, 0x2a, 0x61, 0x25, 0xdf, 0xe3, 0xfc, 0x80,
+ 0xce, 0xba, 0x3b, 0xef, 0xa2, 0xaf, 0xa6, 0x1e, 0xb8, 0xde, 0x55, 0x9d,
+ 0x47, 0xfd, 0x6b, 0x1e, 0xa9, 0xb8, 0xe3, 0xd5, 0x52, 0x5d, 0x75, 0x0d,
+ 0x52, 0x7b, 0xac, 0x90, 0x32, 0xf5, 0xe1, 0x3e, 0x7b, 0x9b, 0xca, 0xd8,
+ 0x30, 0x7c, 0xc4, 0xe8, 0xe8, 0xe5, 0xeb, 0x1f, 0xf7, 0x0e, 0xfa, 0xfd,
+ 0xbd, 0x08, 0xc3, 0xcb, 0x67, 0xc1, 0x0d, 0x98, 0xa4, 0xf7, 0x31, 0xfa,
+ 0xd1, 0x7d, 0xfc, 0xdd, 0x4f, 0x4a, 0xea, 0x56, 0x7a, 0x66, 0x91, 0x25,
+ 0x2a, 0x6f, 0x6e, 0x45, 0xa7, 0x88, 0x76, 0xac, 0xe1, 0x48, 0x73, 0xc2,
+ 0x71, 0x73, 0xcd, 0xcf, 0x8d, 0xb0, 0xa1, 0x36, 0xf3, 0xc0, 0x06, 0xad,
+ 0xaa, 0x8d, 0x3c, 0x6b, 0xda, 0xfa, 0x46, 0x25, 0xdc, 0xe9, 0xd7, 0xba,
+ 0xc7, 0x68, 0xab, 0x04, 0x37, 0x35, 0xbd, 0xe9, 0x93, 0xeb, 0xf6, 0x58,
+ 0x84, 0xa4, 0x67, 0x88, 0x2e, 0x59, 0x68, 0x3a, 0xe1, 0x56, 0x0d, 0x0d,
+ 0x6a, 0xc1, 0x06, 0x38, 0xb8, 0x9d, 0x89, 0x8e, 0xda, 0x23, 0x5b, 0x76,
+ 0xab, 0x63, 0xb4, 0x62, 0x88, 0xb0, 0xbc, 0xf2, 0x9c, 0x56, 0x1b, 0xe5,
+ 0xe4, 0x66, 0x0c, 0x56, 0x54, 0x39, 0xcd, 0xfd, 0x5b, 0x67, 0x69, 0xce,
+ 0x6c, 0xda, 0x41, 0xea, 0xb3, 0x2b, 0x2e, 0x38, 0x6e, 0x36, 0x1e, 0x45,
+ 0x47, 0x00, 0x50, 0x4b, 0xb7, 0x89, 0x82, 0x2d, 0x26, 0x6f, 0x8e, 0x7e,
+ 0x8b, 0x01, 0xfc, 0x6c, 0xb0, 0x69, 0x06, 0x4d, 0x8f, 0x07, 0x26, 0xd5,
+ 0xc6, 0x23, 0x97, 0x54, 0xcc, 0xb8, 0xe1, 0xb3, 0xe3, 0xb8, 0xef, 0xf8,
+ 0x3e, 0xfa, 0x65, 0x74, 0xf7, 0x23, 0xe7, 0xe9, 0xf9, 0x0d, 0x06, 0x09,
+ 0x7c, 0x4c, 0x2d, 0xd8, 0x6c, 0x99, 0xc7, 0x7b, 0x1b, 0x3f, 0x57, 0x8b,
+ 0xe8, 0x80, 0xbc, 0x1b, 0x7f, 0x0f, 0x5f, 0x1d, 0xd5, 0xee, 0x9d, 0xbc,
+ 0xea, 0xb4, 0xef, 0x20, 0x9a, 0xcd, 0x15, 0xee, 0x30, 0x3c, 0xb7, 0xfd,
+ 0xf3, 0xd1, 0xd5, 0x64, 0x80, 0x4b, 0xcc, 0xd6, 0xa3, 0x8c, 0xe6, 0x02,
+ 0x8c, 0xc4, 0x5b, 0x22, 0x92, 0x21, 0x4a, 0x84, 0x30, 0xfa, 0xb5, 0xca,
+ 0x35, 0x9e, 0xf2, 0x32, 0xd3, 0x15, 0xc2, 0xb0, 0xee, 0xc8, 0x29, 0x0c,
+ 0x03, 0x1a, 0x89, 0xd3, 0x28, 0xe6, 0xd4, 0xe6, 0xd7, 0xeb, 0xc6, 0x35,
+ 0x1e, 0x67, 0xca, 0xca, 0xa3, 0x2b, 0x89, 0xef, 0x45, 0x2e, 0x96, 0x4f,
+ 0x02, 0xb2, 0xde, 0xc7, 0x65, 0xde, 0xb5, 0x3b, 0x20, 0x44, 0xea, 0xce,
+ 0xb3, 0x99, 0x34, 0xce, 0xbc, 0x27, 0xdd, 0xbe, 0xf5, 0x09, 0xed, 0x53,
+ 0xf5, 0x4c, 0x53, 0xcf, 0xd9, 0xad, 0x84, 0x50, 0x77, 0x45, 0xed, 0x8c,
+ 0x40, 0x69, 0xc8, 0x60, 0x87, 0x46, 0xb5, 0x92, 0xa3, 0x99, 0xc9, 0x9f,
+ 0x88, 0xd2, 0x9c, 0xad, 0xe6, 0x18, 0xb8, 0x52, 0x96, 0x45, 0xa4, 0x98,
+ 0xe2, 0x45, 0x64, 0x1e, 0x45, 0x32, 0x50, 0x8a, 0x02, 0x9e, 0x46, 0xaf,
+ 0x2b, 0xaa, 0x09, 0x9d, 0xfa, 0xd8, 0x9e, 0x89, 0xfb, 0x8e, 0x55, 0xcf,
+ 0xc6, 0xf5, 0xea, 0x7f, 0xb3, 0xc9, 0x7f, 0xd2, 0xdf, 0xf7, 0x8d, 0xdf,
+ 0x34, 0x8a, 0x07, 0x25, 0xcc, 0x40, 0x6a, 0x0e, 0xf9, 0xed, 0x72, 0x4e,
+ 0x3f, 0x5c, 0x74, 0x58, 0xf4, 0xf7, 0x43, 0x54, 0x1a, 0xfd, 0x9d, 0xb2,
+ 0x94, 0x25, 0xfd, 0x18, 0x60, 0xee, 0xc6, 0x98, 0xf4, 0x34, 0x35, 0x56,
+ 0x1c, 0xac, 0x0b, 0xe7, 0xda, 0xa1, 0xf4, 0x6e, 0x3e, 0xad, 0x26, 0xc5,
+ 0x37, 0xd8, 0x18, 0xd5, 0xab, 0x51, 0x90, 0xcc, 0xd0, 0xad, 0xd7, 0x6f,
+ 0x36, 0xc7, 0x36, 0x27, 0x0c, 0x1a, 0x4f, 0xc9, 0x69, 0xb1, 0x45, 0x4b,
+ 0x4f, 0x35, 0x4d, 0x7e, 0xc0, 0x76, 0xf5, 0x4e, 0x80, 0x1f, 0xc6, 0xb5,
+ 0xe8, 0x6d, 0xc5, 0x04, 0xb6, 0x62, 0x28, 0x8e, 0x32, 0x83, 0x05, 0x12,
+ 0xa2, 0x62, 0xa5, 0xd4, 0xf8, 0xfd, 0x5c, 0xa1, 0xde, 0xc7, 0x06, 0xd0,
+ 0x99, 0xa4, 0x11, 0x16, 0x2e, 0xdb, 0x24, 0xed, 0x17, 0x5f, 0x26, 0x00,
+ 0xcc, 0xfa, 0xa1, 0x37, 0x0d, 0xec, 0xa0, 0x15, 0xf9, 0xe3, 0xe8, 0x33,
+ 0xe2, 0x35, 0x47, 0xba, 0x5a, 0x9a, 0x47, 0x01, 0xb0, 0x52, 0xe0, 0x02,
+ 0x03, 0x93, 0x9c, 0x5b, 0x3c, 0x0c, 0xdc, 0x00, 0x7c, 0x6c, 0xff, 0x3e,
+ 0xa4, 0x37, 0x35, 0xbf, 0x31, 0x81, 0x31, 0x02, 0x31, 0x52, 0xc8, 0xd4,
+ 0x08, 0x34, 0x31, 0xd3, 0x5f, 0xe3, 0x73, 0xf8, 0x06, 0xe5, 0x24, 0xca,
+ 0xc1, 0x90, 0xfd, 0xf4, 0x13, 0xbe, 0xf6, 0x18, 0xe2, 0x79, 0x7c, 0x6a,
+ 0xf8, 0xfa, 0xee, 0x1f, 0x90, 0xa1, 0xce, 0xdd, 0x91, 0x79, 0xe0, 0x7b,
+ 0x63, 0x02, 0x76, 0x9e, 0x51, 0xbf, 0x47, 0x5a, 0x27, 0xe8, 0xac, 0xd7,
+ 0x5f, 0xea, 0x35, 0xc4, 0x64, 0xfb, 0xf1, 0x0b, 0xcd, 0x9c, 0xcf, 0x85,
+ 0x40, 0x45, 0x31, 0xcf, 0x1c, 0x24, 0x0e, 0x31, 0x20, 0x59, 0x9e, 0x27,
+ 0x3c, 0xe5, 0x34, 0xd3, 0xcf, 0x68, 0xd4, 0xcf, 0x20, 0x36, 0x51, 0x6c,
+ 0xc3, 0xf5, 0xda, 0x08, 0xb3, 0x79, 0x0c, 0x69, 0x79, 0x40, 0xbe, 0xcb,
+ 0xfc, 0x79, 0xcb, 0x9e, 0x27, 0xcc, 0xe3, 0x75, 0xd5, 0xaf, 0x4a, 0x3e,
+ 0x3d, 0x4b, 0x54, 0x2f, 0xc3, 0x35, 0x20, 0x19, 0x52, 0x50, 0x34, 0xe7,
+ 0x3b, 0x92, 0xbb, 0xe7, 0xa0, 0xb8, 0x4c, 0x30, 0x90, 0x86, 0x48, 0x39,
+ 0x63, 0xbf, 0xfd, 0x2a, 0x19, 0xe0, 0x3c, 0xe2, 0xb0, 0xdc, 0xf0, 0x5e,
+ 0x2d, 0x78, 0xde, 0x6e, 0x2f, 0xc0, 0x24, 0xc5, 0x75, 0x5f, 0xe3, 0xda,
+ 0x2e, 0x17, 0x75, 0xc8, 0xe8, 0xb8, 0xa0, 0x70, 0x58, 0xe6, 0xe2, 0x73,
+ 0x95, 0x17, 0x96, 0x49, 0xf1, 0x24, 0x26, 0x88, 0xa4, 0xfd, 0xd6, 0x8b,
+ 0x6f, 0x30, 0x38, 0x6f, 0x77, 0x33, 0xcd, 0x6b, 0xed, 0xe6, 0x15, 0xcc,
+ 0xa4, 0x99, 0x27, 0x38, 0xd1, 0xe2, 0x16, 0x4e, 0x5f, 0x9b, 0xcc, 0xb7,
+ 0x45, 0x18, 0x8a, 0x68, 0x9e, 0xe3, 0x42, 0x11, 0x37, 0xe0, 0x55, 0x43,
+ 0xb5, 0x49, 0x93, 0x9d, 0xd6, 0x14, 0xff, 0x55, 0xc2, 0x27, 0x63, 0xfd,
+ 0xf6, 0x94, 0xfe, 0xed, 0x93, 0x78, 0x65, 0x61, 0x4e, 0x1d, 0x05, 0xf2,
+ 0x5f, 0x1c, 0xe5, 0xec, 0x96, 0xd4, 0xe4, 0x04, 0x1f, 0x9a, 0x24, 0x5e,
+ 0xe7, 0xc4, 0x4f, 0x9d, 0x83, 0x9f, 0x5b, 0x0f, 0xb7, 0x9d, 0xbd, 0xce,
+ 0xe1, 0xd6, 0xf7, 0x0d, 0xd9, 0xc5, 0xa1, 0xa7, 0x12, 0xbf, 0x0d, 0xdd,
+ 0x26, 0x2f, 0x3f, 0x85, 0xef, 0xf1, 0x11, 0x75, 0x03, 0xe1, 0xd0, 0xa3,
+ 0xe3, 0xa6, 0x59, 0x87, 0x81, 0xe9, 0xef, 0x3f, 0x03, 0x00, 0x00, 0xff,
+ 0xff, 0x20, 0xc7, 0xce, 0x30, 0x9b, 0x18, 0x00, 0x00,
+ },
"conf/app.ini",
)
}
@@ -893,7 +898,7 @@ func conf_content_git_bare_zip() ([]byte, error) {
0x28, 0x3f, 0xfe, 0xba, 0x0a, 0x40, 0x72, 0xf5, 0xcf, 0xf9, 0x6a, 0x9b,
0x11, 0xa6, 0xf9, 0x31, 0xfa, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x01,
0x81, 0x55, 0x99, 0xb6, 0x26, 0x00, 0x00,
- },
+ },
"conf/content/git-bare.zip",
)
}
@@ -946,7 +951,7 @@ func conf_etc_supervisord_conf() ([]byte, error) {
0x8d, 0x88, 0x90, 0x28, 0xbf, 0x3f, 0xd4, 0xfe, 0xe7, 0x05, 0xbd, 0x28,
0xc2, 0x24, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x75, 0xb0, 0x31,
0xf7, 0x04, 0x00, 0x00,
- },
+ },
"conf/etc/supervisord.conf",
)
}
@@ -970,7 +975,7 @@ func conf_gitignore_android() ([]byte, error) {
0xb8, 0xa3, 0xb5, 0xe2, 0x2c, 0x81, 0x0c, 0xe2, 0x75, 0xc9, 0xf2, 0x07,
0x2f, 0x5e, 0x58, 0x0b, 0x39, 0x3d, 0xa4, 0xf9, 0x3f, 0x00, 0x00, 0xff,
0xff, 0x00, 0x96, 0x67, 0x2c, 0x0e, 0x01, 0x00, 0x00,
- },
+ },
"conf/gitignore/Android",
)
}
@@ -989,7 +994,7 @@ func conf_gitignore_c() ([]byte, error) {
0xeb, 0x8e, 0x79, 0xeb, 0x31, 0x1d, 0x73, 0xb8, 0xa3, 0x8d, 0x6e, 0xdd,
0xea, 0xd7, 0xf5, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xca, 0x54, 0xa9, 0x22,
0x8f, 0x00, 0x00, 0x00,
- },
+ },
"conf/gitignore/C",
)
}
@@ -1065,7 +1070,7 @@ func conf_gitignore_c_sharp() ([]byte, error) {
0x8b, 0x52, 0xd1, 0xf6, 0x63, 0x0e, 0x6e, 0xd8, 0x98, 0xaa, 0x6a, 0xd8,
0xb4, 0xfb, 0xc9, 0x76, 0x55, 0xfd, 0xd7, 0x1f, 0x9f, 0xfe, 0x0b, 0x00,
0x00, 0xff, 0xff, 0xfe, 0xac, 0xdb, 0x69, 0xf1, 0x05, 0x00, 0x00,
- },
+ },
"conf/gitignore/C Sharp",
)
}
@@ -1081,7 +1086,7 @@ func conf_gitignore_c_() ([]byte, error) {
0x5c, 0x92, 0x58, 0x82, 0xa6, 0x32, 0x27, 0x31, 0x13, 0x4c, 0x02, 0x89,
0x44, 0x2e, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xe6, 0x21, 0x26,
0x7e, 0x00, 0x00, 0x00,
- },
+ },
"conf/gitignore/C++",
)
}
@@ -1106,7 +1111,7 @@ func conf_gitignore_google_go() ([]byte, error) {
0x22, 0xd5, 0x42, 0x03, 0xe7, 0x8f, 0xcc, 0x91, 0xf3, 0x76, 0xe7, 0x08,
0x5a, 0xe9, 0x27, 0x00, 0x00, 0xff, 0xff, 0x3c, 0xab, 0x59, 0x6f, 0xfb,
0x00, 0x00, 0x00,
- },
+ },
"conf/gitignore/Google Go",
)
}
@@ -1128,7 +1133,7 @@ func conf_gitignore_java() ([]byte, error) {
0xc4, 0xd9, 0x51, 0x29, 0x52, 0x96, 0x20, 0x55, 0xb3, 0x54, 0x7b, 0x4f,
0x6c, 0x82, 0x2e, 0x7d, 0x5c, 0x72, 0x5c, 0xc7, 0x47, 0x00, 0x00, 0x00,
0xff, 0xff, 0xe7, 0xd6, 0xf7, 0xa4, 0xbc, 0x00, 0x00, 0x00,
- },
+ },
"conf/gitignore/Java",
)
}
@@ -1153,7 +1158,7 @@ func conf_gitignore_objective_c() ([]byte, error) {
0xc9, 0x07, 0xae, 0xa1, 0xb9, 0x4c, 0x22, 0x3f, 0x5b, 0x4d, 0x65, 0x7b,
0x3d, 0x9f, 0x60, 0x5c, 0x71, 0xf9, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xa9,
0x17, 0x4f, 0x2a, 0x18, 0x01, 0x00, 0x00,
- },
+ },
"conf/gitignore/Objective-C",
)
}
@@ -1180,7 +1185,7 @@ func conf_gitignore_python() ([]byte, error) {
0x78, 0xeb, 0xf6, 0x9c, 0x58, 0x85, 0x7f, 0x28, 0x58, 0x2b, 0xb6, 0xa6,
0x1c, 0xdd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0xf0, 0xe2, 0xc0,
0x3a, 0x01, 0x00, 0x00,
- },
+ },
"conf/gitignore/Python",
)
}
@@ -1200,7 +1205,7 @@ func conf_gitignore_ruby() ([]byte, error) {
0x41, 0xb1, 0xbc, 0x23, 0x4d, 0xdf, 0x7d, 0xf0, 0x88, 0x6c, 0xbf, 0x3b,
0xf1, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xca, 0xf7, 0x91, 0x9e,
0x00, 0x00, 0x00,
- },
+ },
"conf/gitignore/Ruby",
)
}
@@ -2189,7 +2194,7 @@ func conf_license_affero_gpl() ([]byte, error) {
0x42, 0xc2, 0x5f, 0x88, 0x57, 0x1b, 0xd8, 0x89, 0x3e, 0x15, 0x0e, 0xb8,
0x30, 0xdf, 0x60, 0x88, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x0c, 0xd2,
0xa8, 0x4c, 0xc3, 0x86, 0x00, 0x00,
- },
+ },
"conf/license/Affero GPL",
)
}
@@ -2527,7 +2532,7 @@ func conf_license_apache_v2_license() ([]byte, error) {
0x37, 0x23, 0x02, 0x0e, 0x94, 0x00, 0x65, 0xa1, 0x3f, 0x7d, 0xb3, 0x2f,
0x4c, 0x4b, 0x32, 0x5f, 0x77, 0xe7, 0xe7, 0x9a, 0xff, 0x6f, 0x00, 0x00,
0x00, 0xff, 0xff, 0xa8, 0x76, 0x8d, 0x12, 0x3b, 0x2c, 0x00, 0x00,
- },
+ },
"conf/license/Apache v2 License",
)
}
@@ -2809,7 +2814,7 @@ func conf_license_artistic_license_2_0() ([]byte, error) {
0xdd, 0x89, 0x97, 0xd6, 0xcf, 0xf7, 0x8f, 0x92, 0x0f, 0xb9, 0xfb, 0x77,
0x00, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x26, 0x8b, 0xf2, 0xb7, 0x22, 0x00,
0x00,
- },
+ },
"conf/license/Artistic License 2.0",
)
}
@@ -2883,7 +2888,7 @@ func conf_license_bsd_3_clause_license() ([]byte, error) {
0x95, 0xb8, 0xec, 0x49, 0x8a, 0xac, 0xd8, 0xd0, 0x39, 0xee, 0xdb, 0xbf,
0x02, 0x00, 0x00, 0xff, 0xff, 0x84, 0xcd, 0xba, 0x22, 0xc1, 0x05, 0x00,
0x00,
- },
+ },
"conf/license/BSD (3-Clause) License",
)
}
@@ -3459,7 +3464,7 @@ func conf_license_gpl_v2() ([]byte, error) {
0x4d, 0xee, 0x25, 0x41, 0xb2, 0x70, 0x4f, 0xe6, 0xf0, 0xef, 0xb7, 0x30,
0xc7, 0xff, 0x7e, 0x8b, 0x83, 0x22, 0xe6, 0xff, 0x06, 0x00, 0x00, 0xff,
0xff, 0x82, 0x4d, 0xf9, 0x2b, 0x69, 0x46, 0x00, 0x00,
- },
+ },
"conf/license/GPL v2",
)
}
@@ -3521,7 +3526,7 @@ func conf_license_mit_license() ([]byte, error) {
0x42, 0x26, 0x78, 0x8e, 0x5c, 0x15, 0x81, 0x29, 0xe2, 0xdb, 0xf0, 0xd3,
0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x49, 0x86, 0xab, 0x31, 0x29, 0x04,
0x00, 0x00,
- },
+ },
"conf/license/MIT License",
)
}
@@ -3537,7 +3542,7 @@ func conf_mysql_sql() ([]byte, error) {
0xa1, 0xe0, 0xec, 0xef, 0xe3, 0x03, 0xd2, 0x06, 0xe2, 0xc4, 0xa7, 0xa7,
0xe6, 0xa5, 0x16, 0x25, 0xe6, 0xc4, 0x27, 0x67, 0x5a, 0x73, 0x01, 0x02,
0x00, 0x00, 0xff, 0xff, 0xcd, 0xf5, 0x53, 0x80, 0x6d, 0x00, 0x00, 0x00,
- },
+ },
"conf/mysql.sql",
)
}
@@ -3557,12 +3562,11 @@ func conf_supervisor_ini() ([]byte, error) {
0xa1, 0xed, 0x82, 0x8e, 0x38, 0x6f, 0x11, 0x92, 0x13, 0x67, 0x75, 0xe7,
0xeb, 0xe5, 0xe4, 0x86, 0xef, 0xd7, 0xc1, 0x18, 0xfa, 0x04, 0x00, 0x00,
0xff, 0xff, 0x61, 0x60, 0x15, 0x6f, 0xc9, 0x00, 0x00, 0x00,
- },
+ },
"conf/supervisor.ini",
)
}
-
// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
@@ -3584,7 +3588,7 @@ func AssetNames() []string {
}
// _bindata is a table, holding each asset generator, mapped to its name.
-var _bindata = map[string] func() ([]byte, error) {
+var _bindata = map[string]func() ([]byte, error){
"conf/app.ini": conf_app_ini,
"conf/content/git-bare.zip": conf_content_git_bare_zip,
"conf/etc/supervisord.conf": conf_etc_supervisord_conf,
diff --git a/modules/cron/cron.go b/modules/cron/cron.go
index 27b1fc41bb..c06e649bb7 100644
--- a/modules/cron/cron.go
+++ b/modules/cron/cron.go
@@ -5,13 +5,17 @@
package cron
import (
+ "fmt"
+
"github.com/robfig/cron"
"github.com/gogits/gogs/models"
+ "github.com/gogits/gogs/modules/setting"
)
func NewCronContext() {
c := cron.New()
c.AddFunc("@every 1h", models.MirrorUpdate)
+ c.AddFunc(fmt.Sprintf("@every %dm", setting.WebhookTaskInterval), models.DeliverHooks)
c.Start()
}
diff --git a/modules/hooks/hooks.go b/modules/hooks/hooks.go
deleted file mode 100644
index 6ae4418b35..0000000000
--- a/modules/hooks/hooks.go
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2014 The Gogs Authors. All rights reserved.
-// Use of this source code is governed by a MIT-style
-// license that can be found in the LICENSE file.
-
-package hooks
-
-import (
- "encoding/json"
- "time"
-
- "github.com/gogits/gogs/modules/httplib"
- "github.com/gogits/gogs/modules/log"
-)
-
-// Hook task types.
-const (
- HTT_WEBHOOK = iota + 1
- HTT_SERVICE
-)
-
-type PayloadAuthor struct {
- Name string `json:"name"`
- Email string `json:"email"`
-}
-
-type PayloadCommit struct {
- Id string `json:"id"`
- Message string `json:"message"`
- Url string `json:"url"`
- Author *PayloadAuthor `json:"author"`
-}
-
-type PayloadRepo struct {
- Id int64 `json:"id"`
- Name string `json:"name"`
- Url string `json:"url"`
- Description string `json:"description"`
- Website string `json:"website"`
- Watchers int `json:"watchers"`
- Owner *PayloadAuthor `json:"author"`
- Private bool `json:"private"`
-}
-
-// Payload represents payload information of hook.
-type Payload struct {
- Secret string `json:"secret"`
- Ref string `json:"ref"`
- Commits []*PayloadCommit `json:"commits"`
- Repo *PayloadRepo `json:"repository"`
- Pusher *PayloadAuthor `json:"pusher"`
-}
-
-// HookTask represents hook task.
-type HookTask struct {
- Type int
- Url string
- *Payload
- ContentType int
- IsSsl bool
-}
-
-var (
- taskQueue = make(chan *HookTask, 1000)
-)
-
-// AddHookTask adds new hook task to task queue.
-func AddHookTask(t *HookTask) {
- taskQueue <- t
-}
-
-func init() {
- go handleQueue()
-}
-
-func handleQueue() {
- for {
- select {
- case t := <-taskQueue:
- // Only support JSON now.
- data, err := json.MarshalIndent(t.Payload, "", "\t")
- if err != nil {
- log.Error("hooks.handleQueue(json): %v", err)
- continue
- }
-
- _, err = httplib.Post(t.Url).SetTimeout(5*time.Second, 5*time.Second).
- Body(data).Response()
- if err != nil {
- log.Error("hooks.handleQueue: Fail to deliver hook: %v", err)
- continue
- }
- log.Info("Hook delivered: %s", string(data))
- }
- }
-}
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index 2f64511a12..35c9165139 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -53,6 +53,10 @@ var (
CookieUserName string
CookieRememberName string
+ // Webhook settings.
+ WebhookTaskInterval int
+ WebhookDeliverTimeout int
+
// Repository settings.
RepoRootPath string
ScriptType string
@@ -187,9 +191,9 @@ var Service struct {
RequireSignInView bool
EnableCacheAvatar bool
NotifyMail bool
+ LdapAuth bool
ActiveCodeLives int
ResetPwdCodeLives int
- LdapAuth bool
}
func newService() {
@@ -390,6 +394,11 @@ func newNotifyMailService() {
log.Info("Notify Mail Service Enabled")
}
+func newWebhookService() {
+ WebhookTaskInterval = Cfg.MustInt("webhook", "TASK_INTERVAL", 1)
+ WebhookDeliverTimeout = Cfg.MustInt("webhook", "DELIVER_TIMEOUT", 5)
+}
+
func NewServices() {
newService()
newLogService()
@@ -398,4 +407,5 @@ func NewServices() {
newMailService()
newRegisterMailService()
newNotifyMailService()
+ newWebhookService()
}
diff --git a/routers/admin/admin.go b/routers/admin/admin.go
index 6f8868a659..56eba88a2b 100644
--- a/routers/admin/admin.go
+++ b/routers/admin/admin.go
@@ -193,6 +193,9 @@ func Config(ctx *middleware.Context) {
ctx.Data["DbCfg"] = models.DbCfg
+ ctx.Data["WebhookTaskInterval"] = setting.WebhookTaskInterval
+ ctx.Data["WebhookDeliverTimeout"] = setting.WebhookDeliverTimeout
+
ctx.Data["MailerEnabled"] = false
if setting.MailService != nil {
ctx.Data["MailerEnabled"] = true
diff --git a/routers/install.go b/routers/install.go
index f44391a46c..eb0fc199cf 100644
--- a/routers/install.go
+++ b/routers/install.go
@@ -14,7 +14,6 @@ import (
"github.com/Unknwon/goconfig"
"github.com/go-martini/martini"
"github.com/go-xorm/xorm"
- qlog "github.com/qiniu/log"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
@@ -56,7 +55,7 @@ func GlobalInit() {
if setting.InstallLock {
if err := models.NewEngine(); err != nil {
- qlog.Fatal(err)
+ log.Fatal("Fail to initialize ORM engine: %v", err)
}
models.HasEngine = true
diff --git a/routers/repo/setting.go b/routers/repo/setting.go
index 0232dbcfe3..ac9ce7c77c 100644
--- a/routers/repo/setting.go
+++ b/routers/repo/setting.go
@@ -244,9 +244,9 @@ func WebHooksAddPost(ctx *middleware.Context, form auth.NewWebhookForm) {
return
}
- ct := models.CT_JSON
+ ct := models.JSON
if form.ContentType == "2" {
- ct = models.CT_FORM
+ ct = models.FORM
}
w := &models.Webhook{
@@ -259,8 +259,8 @@ func WebHooksAddPost(ctx *middleware.Context, form auth.NewWebhookForm) {
},
IsActive: form.Active,
}
- if err := w.SaveEvent(); err != nil {
- ctx.Handle(500, "setting.WebHooksAddPost(SaveEvent)", err)
+ if err := w.UpdateEvent(); err != nil {
+ ctx.Handle(500, "setting.WebHooksAddPost(UpdateEvent)", err)
return
} else if err := models.CreateWebhook(w); err != nil {
ctx.Handle(500, "setting.WebHooksAddPost(CreateWebhook)", err)
@@ -311,9 +311,9 @@ func WebHooksEditPost(ctx *middleware.Context, params martini.Params, form auth.
return
}
- ct := models.CT_JSON
+ ct := models.JSON
if form.ContentType == "2" {
- ct = models.CT_FORM
+ ct = models.FORM
}
w := &models.Webhook{
@@ -327,8 +327,8 @@ func WebHooksEditPost(ctx *middleware.Context, params martini.Params, form auth.
},
IsActive: form.Active,
}
- if err := w.SaveEvent(); err != nil {
- ctx.Handle(500, "setting.WebHooksEditPost(SaveEvent)", err)
+ if err := w.UpdateEvent(); err != nil {
+ ctx.Handle(500, "setting.WebHooksEditPost(UpdateEvent)", err)
return
} else if err := models.UpdateWebhook(w); err != nil {
ctx.Handle(500, "setting.WebHooksEditPost(WebHooksEditPost)", err)
diff --git a/templates/VERSION b/templates/VERSION
index 7ba2c25f9a..cf75962a83 100644
--- a/templates/VERSION
+++ b/templates/VERSION
@@ -1 +1 @@
-0.4.2.0605 Alpha \ No newline at end of file
+0.4.2.0608 Alpha \ No newline at end of file
diff --git a/templates/admin/config.tmpl b/templates/admin/config.tmpl
index a8e9d1ae99..583ee25e35 100644
--- a/templates/admin/config.tmpl
+++ b/templates/admin/config.tmpl
@@ -91,6 +91,21 @@
<div class="panel panel-default">
<div class="panel-heading">
+ Webhook Configuration
+ </div>
+
+ <div class="panel-body">
+ <dl class="dl-horizontal admin-dl-horizontal">
+ <dt>Task Interval</dt>
+ <dd>{{.WebhookTaskInterval}} minutes</dd>
+ <dt>Deliver Timeout</dt>
+ <dd>{{.WebhookDeliverTimeout}} seconds</dd>
+ </dl>
+ </div>
+ </div>
+
+ <div class="panel panel-default">
+ <div class="panel-heading">
Mailer Configuration
</div>