diff --git a/config/config.go b/config/config.go index e2c08e4eca..f37aeca931 100644 --- a/config/config.go +++ b/config/config.go @@ -200,6 +200,14 @@ func (c *Config) UnmarshalYAML(unmarshal func(interface{}) error) error { sc.APIURL = c.Global.SlackAPIURL } } + for _, tc := range rcv.TeamsConfigs { + if tc.APIURL == "" { + if c.Global.TeamsAPIURL == "" { + return fmt.Errorf("no global Teams API URL set") + } + tc.APIURL = c.Global.TeamsAPIURL + } + } for _, hc := range rcv.HipchatConfigs { if hc.APIURL == "" { if c.Global.HipchatURL == "" { @@ -320,6 +328,7 @@ type GlobalConfig struct { SMTPAuthIdentity string `yaml:"smtp_auth_identity,omitempty" json:"smtp_auth_identity,omitempty"` SMTPRequireTLS bool `yaml:"smtp_require_tls,omitempty" json:"smtp_require_tls,omitempty"` SlackAPIURL Secret `yaml:"slack_api_url,omitempty" json:"slack_api_url,omitempty"` + TeamsAPIURL Secret `yaml:"teams_api_url,omitempty" json:"teams_api_url,omitempty"` PagerdutyURL string `yaml:"pagerduty_url,omitempty" json:"pagerduty_url,omitempty"` HipchatURL string `yaml:"hipchat_url,omitempty" json:"hipchat_url,omitempty"` HipchatAuthToken Secret `yaml:"hipchat_auth_token,omitempty" json:"hipchat_auth_token,omitempty"` @@ -457,6 +466,7 @@ type Receiver struct { PagerdutyConfigs []*PagerdutyConfig `yaml:"pagerduty_configs,omitempty" json:"pagerduty_configs,omitempty"` HipchatConfigs []*HipchatConfig `yaml:"hipchat_configs,omitempty" json:"hipchat_configs,omitempty"` SlackConfigs []*SlackConfig `yaml:"slack_configs,omitempty" json:"slack_configs,omitempty"` + TeamsConfigs []*TeamsConfig `yaml:"teams_configs,omitempty" json:"teams_configs,omitempty"` WebhookConfigs []*WebhookConfig `yaml:"webhook_configs,omitempty" json:"webhook_configs,omitempty"` OpsGenieConfigs []*OpsGenieConfig `yaml:"opsgenie_configs,omitempty" json:"opsgenie_configs,omitempty"` PushoverConfigs []*PushoverConfig `yaml:"pushover_configs,omitempty" json:"pushover_configs,omitempty"` diff --git a/config/notifiers.go b/config/notifiers.go index 68c411b5a6..d11f245959 100644 --- a/config/notifiers.go +++ b/config/notifiers.go @@ -71,6 +71,21 @@ var ( Fallback: `{{ template "slack.default.fallback" . }}`, } + // DefaultTeamsConfig defines default values for Microsoft Teams configurations. + DefaultTeamsConfig = TeamsConfig{ + NotifierConfig: NotifierConfig{ + VSendResolved: false, + }, + Context: `{{ template "teams.default.context" . }}`, + Type: `{{ template "teams.default.type" . }}`, + Title: `{{ template "teams.default.title" . }}`, + Text: `{{ template "teams.default.text" . }}`, + URI: `{{ template "teams.default.uri" . }}`, + URIText: `{{ template "teams.default.uritext" . }}`, + URIOS: `{{ template "teams.default.urios" . }}`, + ThemeColor: `{{ template "teams.default.themecolor" . }}`, + } + // DefaultHipchatConfig defines default values for Hipchat configurations. DefaultHipchatConfig = HipchatConfig{ NotifierConfig: NotifierConfig{ @@ -236,6 +251,35 @@ func (c *SlackConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { return checkOverflow(c.XXX, "slack config") } +// TeamsConfig configures notifications via Microsoft Teams. +type TeamsConfig struct { + NotifierConfig `yaml:",inline" json:",inline"` + + APIURL Secret `yaml:"api_url,omitempty" json:"api_url,omitempty"` + + Context string `yaml:"context,omitempty" json:"context,omitempty"` + Type string `yaml:"type,omitempty" json:"type,omitempty"` + Title string `yaml:"title,omitempty" json:"title,omitempty"` + Text string `yaml:"text,omitempty" json:"text,omitempty"` + URI string `yaml:"uri,omitempty" json:"uri,omitempty"` + URIText string `yaml:"uritext,omitempty" json:"uritext,omitempty"` + URIOS string `yaml:"urios,omitempty" json:"urios,omitempty"` + ThemeColor string `yaml:"themecolor,omitempty" json:"themecolor,omitempty"` + + // Catches all undefined fields and must be empty after parsing. + XXX map[string]interface{} `yaml:",inline" json:"-"` +} + +// UnmarshalYAML implements the yaml.Unmarshaler interface. +func (c *TeamsConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { + *c = DefaultTeamsConfig + type plain TeamsConfig + if err := unmarshal((*plain)(c)); err != nil { + return err + } + return checkOverflow(c.XXX, "teams config") +} + // HipchatConfig configures notifications via Hipchat. type HipchatConfig struct { NotifierConfig `yaml:",inline" json:",inline"` diff --git a/notify/impl.go b/notify/impl.go index 73b3186b5b..2fc96877a3 100644 --- a/notify/impl.go +++ b/notify/impl.go @@ -37,10 +37,11 @@ import ( "golang.org/x/net/context" "golang.org/x/net/context/ctxhttp" + "net/textproto" + "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" - "net/textproto" ) type notifierConfig interface { @@ -120,6 +121,10 @@ func BuildReceiverIntegrations(nc *config.Receiver, tmpl *template.Template) []I n := NewSlack(c, tmpl) add("slack", i, n, c) } + for i, c := range nc.TeamsConfigs { + n := NewTeams(c, tmpl) + add("teams", i, n, c) + } for i, c := range nc.HipchatConfigs { n := NewHipchat(c, tmpl) add("hipchat", i, n, c) @@ -607,6 +612,95 @@ func (n *Slack) retry(statusCode int) (bool, error) { return false, nil } +// Teams implements a Notifier for Microsoft Teams notifications. +type Teams struct { + conf *config.TeamsConfig + tmpl *template.Template +} + +// NewTeams returns a new Microsoft Teams notification handler. +func NewTeams(conf *config.TeamsConfig, tmpl *template.Template) *Teams { + return &Teams{ + conf: conf, + tmpl: tmpl, + } +} + +type teamsReq struct { + Context string `json:"@context,omitempty"` + Type string `json:"@type,omitempty"` + Title string `json:"title,omitempty"` + Text string `json:"text"` + ThemeColor string `json:"themeColor,omitempty"` + PotentialAction []potentialAction `json:"potentialAction,omitempty"` +} + +type potentialAction interface{} + +type teamsOpenURI struct { + Type string `json:"@type"` + Name string `json:"name"` + Target []teamOpenURITarget `json:"targets"` +} + +type teamOpenURITarget struct { + OS string `json:"os"` + URI string `json:"uri"` +} + +// Notify implements the Notifier interface. +func (n *Teams) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { + var err error + var ( + data = n.tmpl.Data(receiverName(ctx), groupLabels(ctx), as...) + tmplText = tmplText(n.tmpl, data, &err) + ) + + openURI := &teamsOpenURI{ + Type: "OpenUri", + Name: tmplText(n.conf.URIText), + Target: []teamOpenURITarget{ + { + OS: tmplText(n.conf.URIOS), + URI: tmplText(n.conf.URI), + }, + }, + } + + req := &teamsReq{ + Context: tmplText(n.conf.Context), + Type: tmplText(n.conf.Type), + Title: tmplText(n.conf.Title), + Text: tmplText(n.conf.Text), + ThemeColor: tmplText(n.conf.ThemeColor), + PotentialAction: []potentialAction{openURI}, + } + if err != nil { + return false, err + } + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(req); err != nil { + return false, err + } + + resp, err := ctxhttp.Post(ctx, http.DefaultClient, string(n.conf.APIURL), contentTypeJSON, &buf) + if err != nil { + return true, err + } + resp.Body.Close() + + return n.retry(resp.StatusCode) +} + +func (n *Teams) retry(statusCode int) (bool, error) { + if statusCode/100 != 2 { + return (statusCode/100 == 5), fmt.Errorf("unexpected status code %v", statusCode) + } + + return false, nil +} + // Hipchat implements a Notifier for Hipchat notifications. type Hipchat struct { conf *config.HipchatConfig diff --git a/template/default.tmpl b/template/default.tmpl index aa3ae37f0d..a69024145c 100644 --- a/template/default.tmpl +++ b/template/default.tmpl @@ -21,6 +21,15 @@ {{ define "slack.default.iconurl" }}{{ end }} {{ define "slack.default.text" }}{{ end }} +{{ define "teams.default.context" }}http://schema.org/extensions{{ end }} +{{ define "teams.default.type" }}MessageCard{{ end }} +{{ define "teams.default.title" }}{{ end }} +{{ define "teams.default.text" }}{{ template "__subject" . }}{{ end }} +{{ define "teams.default.uri" }}{{ template "__alertmanagerURL" . }}{{ end }} +{{ define "teams.default.uritext" }}View Alert{{ end }} +{{ define "teams.default.urios" }}default{{ end }} +{{ define "teams.default.themecolor" }}{{ if gt (len .Alerts.Firing) 0 }}F35225{{ end }}{{ if gt (len .Alerts.Resolved) 0 }}81BB05{{ end }}{{ end }} + {{ define "hipchat.default.from" }}{{ template "__alertmanager" . }}{{ end }} {{ define "hipchat.default.message" }}{{ template "__subject" . }}{{ end }} diff --git a/template/internal/deftmpl/bindata.go b/template/internal/deftmpl/bindata.go index 78e63ec49b..37f299426b 100644 --- a/template/internal/deftmpl/bindata.go +++ b/template/internal/deftmpl/bindata.go @@ -68,7 +68,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _templateDefaultTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3b\x6b\x6f\xdb\x36\xbb\xdf\xf5\x2b\x9e\x69\x38\x58\x03\x58\x96\x93\x6e\xc5\xe2\xd8\x39\x70\x1d\xa5\x11\x8e\x23\x07\xb2\xd2\xae\x18\x86\x80\x96\x68\x9b\xad\x44\x6a\x24\x95\xc4\xcb\xfc\xdf\x0f\x48\xc9\x17\xc5\x72\xe2\x14\x5d\xe2\xf7\x5d\x12\xb4\x91\x28\x3e\xf7\x2b\x45\xea\xee\x0e\x22\x3c\x22\x14\x83\x79\x75\x85\x62\xcc\x65\x82\x28\x1a\x63\x6e\xc2\x6c\xd6\x51\xf7\xe7\xf9\xfd\xdd\x1d\x60\x1a\xc1\x6c\x66\x6c\x04\xb9\xf4\x7b\x0a\xea\xee\x0e\xea\xce\xad\xc4\x9c\xa2\xf8\xd2\xef\xc1\x6c\x66\xff\x68\xeb\x79\xe2\x7f\x39\x0e\x31\xb9\xc6\xbc\xad\x26\xf9\xc5\x4d\x0e\x53\x60\x2f\xa3\x17\xd9\xf0\x0b\x0e\xa5\x42\xfb\xbb\x02\x19\x48\x24\x33\x01\x7f\x83\x64\x97\x69\x3a\x07\x25\x23\xc0\x7f\x2e\x1e\x9a\x23\xc2\x09\x1d\x2b\x98\xa6\x82\xd1\x52\x88\xfa\xa9\x1e\x85\xbf\x21\xc6\x74\x95\xe2\x1f\xa0\x26\x7d\xe0\x2c\x4b\x7b\x68\x88\x63\x51\x1f\x30\x2e\x71\x74\x81\x08\x17\xf5\x8f\x28\xce\xb0\x22\xf8\x85\x11\x0a\x26\x28\xac\x90\x93\x1c\x4b\x78\xa3\x70\xd5\xbb\x2c\x49\x18\xcd\x81\xf7\x8a\xb1\x15\x7c\x7b\x30\x9b\xbd\xb9\xbb\x83\x1b\x22\x27\xe5\xc9\x75\x1f\x27\xec\x1a\x97\xa9\x7b\x28\xc1\xa2\x50\x63\x15\xf5\x05\xe3\x7b\x8b\xab\x0d\xb6\x89\xb0\x08\x39\x49\x25\x61\xd4\x7c\x40\xc7\x12\xdf\xca\xdc\x8e\x57\x31\x11\xb2\x98\xca\x11\x1d\x63\xa8\xc3\x6c\x96\xf3\xd5\x34\x96\x83\xeb\x7a\x52\x5a\xb1\xb4\x22\x15\xfb\xea\xae\x0d\x0b\x01\x0a\xc6\x72\xe2\x1d\x4a\x99\x44\x8a\xa7\x12\xca\x95\xe1\x6f\xc3\x3b\x60\x19\x0f\x71\x33\x37\x26\xa6\x98\x23\xc9\x78\xee\x7e\x46\x85\xa2\x4a\x3a\x10\x31\x0a\xbf\xd6\x23\x3c\x42\x59\x2c\xeb\x92\xc8\x18\x17\x5a\x90\x38\x49\x63\x24\xcb\xbe\x58\xdf\xa4\xf2\x32\x9e\x4c\xa8\x10\x48\xaa\x50\x95\x03\x6d\x4b\x7c\x23\x14\xc7\x43\x14\x7e\x5d\xc3\x57\xc9\xbe\x42\x0a\x7f\xc3\x63\x13\x63\x42\xbf\x6e\xcd\x41\xca\xb1\x72\x16\x73\xbb\xd9\x2b\xf8\x1f\x54\x80\x4e\x1b\x5b\x72\x40\x42\x46\x71\xc2\xbe\x90\x2d\x79\x50\xf3\x33\x1e\x6f\xcb\xf1\x9a\x70\x25\x37\x99\x90\x34\x9c\x20\xb9\x34\x08\x67\xc9\xb7\x1b\xf7\x3e\xb6\x04\x0b\x81\xc6\x4f\x70\xbc\x12\x6f\xa9\xa2\x16\x65\x72\xba\xc0\xb7\x1e\xfd\x4f\x73\xe6\x75\x8c\x61\x4c\x30\x95\xdf\x2e\xf1\x26\x8c\xcb\xba\xf1\x6d\x2e\xb2\x8e\x97\x50\x21\x11\x0d\xb1\xa8\xc0\xbb\x96\xee\x1e\xd0\x2a\x4b\xc5\x18\x53\x82\xbf\xdd\x48\x0f\x21\x5b\xb7\x50\x51\x1d\x36\x24\xc3\xca\x72\x60\xdc\x2b\x46\xa5\x6a\xb7\x07\x0d\xb0\x66\x33\x23\x1f\x84\x7c\x50\xa7\xdd\x87\x35\x52\x2e\x99\x9a\x88\xb5\x22\x51\x05\x3d\x1f\x0b\x16\x5f\xe3\xe8\x1e\xc5\xf9\xf0\xf6\x34\xe7\x10\x6b\x54\xad\x6d\x54\x2a\x74\x15\x78\xba\x37\x95\xac\x7e\x4d\x42\xc9\x38\x4b\xc5\x12\xad\x44\x12\x5f\x95\x8d\xff\x6a\xab\xa7\xd9\x6a\x5d\xab\x98\x4a\x22\xa7\x57\x11\x11\x69\x8c\xa6\x57\x1b\x6a\xe5\xe3\x81\xb5\x8e\x39\x61\x94\x48\xa6\x14\x72\x25\x19\x8b\x9f\x98\xb2\x56\x71\xe3\x04\x91\x78\xe9\x07\xcb\x76\xf4\xc9\x5c\x96\x31\x4d\x64\xa2\xd9\x32\x5a\x3f\x9c\xf4\xbb\xc1\xe7\x0b\x07\xd4\x10\x5c\x5c\xbe\xef\xb9\x5d\x30\x2d\xdb\xfe\xf4\xb6\x6b\xdb\x27\xc1\x09\xfc\x76\x16\x9c\xf7\x60\xbf\xde\x80\x80\x23\x2a\x88\x72\x36\x14\xdb\xb6\xe3\x99\x60\x4e\xa4\x4c\x9b\xb6\x7d\x73\x73\x53\xbf\x79\x5b\x67\x7c\x6c\x07\xbe\x7d\xab\x70\xed\x2b\xe0\xe2\xd2\x92\x2b\x90\xf5\x48\x46\xe6\xb1\xd1\xfa\xc1\xb2\x8c\x81\x9c\xc6\x18\x10\x8d\x40\x13\x89\x30\x27\xca\xa0\xaa\xb4\x81\x42\x2d\x9a\xb6\x3d\x26\x72\x92\x0d\xeb\x21\x4b\x6c\x25\xc3\x38\xa3\xb6\x46\x87\xc2\x1c\x9f\xa5\x45\xb3\xe6\xea\x10\x86\x61\x04\x13\x0c\xe7\x6e\x00\x3d\x12\x62\x2a\x30\xbc\x39\x77\x83\x3d\xc3\xe8\xb2\x74\xca\xc9\x78\x22\xe1\x4d\xb8\x07\x07\x8d\xfd\x9f\xe1\x3c\xc7\x68\x18\x17\x98\x27\x44\x08\xc2\x28\x10\x01\x13\xcc\xf1\x70\x0a\x63\x8e\xa8\xc4\x51\x0d\x46\x1c\x63\x60\x23\x08\x27\x88\x8f\x71\x0d\x24\x03\x44\xa7\x90\x62\x2e\x18\x05\x36\x94\x88\x50\xe5\xff\x08\x42\x96\x4e\x0d\x36\x02\x39\x21\x02\x04\x1b\xc9\x1b\xc4\x73\x09\x91\x10\x2c\x24\x48\xe2\x08\x22\x16\x66\x09\xa6\x79\xe0\xc2\x88\xc4\x58\xc0\x1b\x39\xc1\x60\x0e\x0a\x08\x73\x4f\x13\x89\x30\x8a\x0d\x42\x41\x3d\x9b\x3f\xd2\x9d\x3c\xcb\x24\x70\x2c\x24\x27\x5a\x0b\x35\x20\x34\x8c\xb3\x48\xf1\x30\x7f\x1c\x93\x84\x14\x14\x14\xb8\x16\x5c\x18\x92\x41\x26\x70\x4d\xf3\x59\x83\x84\x45\x64\xa4\xfe\x62\x2d\x56\x9a\x0d\x63\x22\x26\x35\x88\x88\x42\x3d\xcc\x24\xae\x81\x50\x83\x5a\x8f\x35\x25\x87\xcd\x38\x08\x1c\xc7\x46\xc8\x52\x82\x05\x68\x59\x97\xdc\xe9\x39\x8a\xf5\x54\x29\x54\x16\x2a\x12\x6a\xe4\x66\xc2\x92\xb2\x24\x44\x18\xa3\x8c\x53\x22\x26\x58\xc3\x44\x0c\x04\xd3\x14\x95\x37\xab\x11\x35\x7d\xc4\xe2\x98\xdd\x28\xd1\x42\x46\x23\x52\x34\xef\xda\xc8\x68\xa8\x16\x30\xe1\xc2\xae\x94\x49\x12\xe6\xea\xd6\x06\x48\x97\x56\x2d\x1e\x89\x09\x8a\x63\x18\xe2\x42\x61\x38\x02\x42\x01\xad\x88\xc3\x15\x79\x55\xbf\x25\x41\x31\xa4\x8c\x6b\x7a\xf7\xc5\xac\x1b\x46\x70\xe6\xc0\xa0\x7f\x1a\x7c\xea\xf8\x0e\xb8\x03\xb8\xf0\xfb\x1f\xdd\x13\xe7\x04\xcc\xce\x00\xdc\x81\x59\x83\x4f\x6e\x70\xd6\xbf\x0c\xe0\x53\xc7\xf7\x3b\x5e\xf0\x19\xfa\xa7\xd0\xf1\x3e\xc3\xff\xb9\xde\x49\x0d\x9c\xdf\x2e\x7c\x67\x30\x80\xbe\x6f\xb8\xe7\x17\x3d\xd7\x39\xa9\x81\xeb\x75\x7b\x97\x27\xae\xf7\x01\xde\x5f\x06\xe0\xf5\x03\xe8\xb9\xe7\x6e\xe0\x9c\x40\xd0\x07\x45\xb0\x40\xe5\x3a\x03\x85\xec\xdc\xf1\xbb\x67\x1d\x2f\xe8\xbc\x77\x7b\x6e\xf0\xb9\x66\x9c\xba\x81\xa7\x70\x9e\xf6\x7d\xe8\xc0\x45\xc7\x0f\xdc\xee\x65\xaf\xe3\xc3\xc5\xa5\x7f\xd1\x1f\x38\xd0\xf1\x4e\xc0\xeb\x7b\xae\x77\xea\xbb\xde\x07\xe7\xdc\xf1\x82\x3a\xb8\x1e\x78\x7d\x70\x3e\x3a\x5e\x00\x83\xb3\x4e\xaf\xa7\x48\x19\x9d\xcb\xe0\xac\xef\x2b\xfe\xa0\xdb\xbf\xf8\xec\xbb\x1f\xce\x02\x38\xeb\xf7\x4e\x1c\x7f\x00\xef\x1d\xe8\xb9\x9d\xf7\x3d\x27\x27\xe5\x7d\x86\x6e\xaf\xe3\x9e\xd7\xe0\xa4\x73\xde\xf9\xe0\x68\xa8\x7e\x70\xe6\xf8\x86\x9a\x96\x73\x07\x9f\xce\x1c\x35\xa4\xe8\x75\x3c\xe8\x74\x03\xb7\xef\x29\x31\xba\x7d\x2f\xf0\x3b\xdd\xa0\x06\x41\xdf\x0f\x16\xa0\x9f\xdc\x81\x53\x83\x8e\xef\x0e\x94\x42\x4e\xfd\xfe\x79\xcd\x50\xea\xec\x9f\xaa\x29\xae\xa7\xe0\x3c\x27\xc7\xa2\x54\x0d\x25\x8b\xf4\x7d\x7d\x7f\x39\x70\x16\x08\xe1\xc4\xe9\xf4\x5c\xef\xc3\x40\x01\x2b\x11\xe7\x93\xeb\x86\x65\x1d\x1b\x2d\x9d\x02\x6f\x93\x98\x8a\x76\x45\x62\xdb\x3f\x3c\x3c\xcc\xf3\x99\xb9\xdd\x24\xa1\x92\x5b\xdb\x1c\x31\x2a\xad\x11\x4a\x48\x3c\x6d\xc2\x4f\x67\x38\xbe\xc6\x92\x84\x08\x3c\x9c\xe1\x9f\x6a\xb0\x18\xa8\x41\x87\x13\x14\xd7\x40\x20\x2a\x2c\x81\x39\x19\x1d\xc1\x90\xdd\x5a\x82\xfc\xa5\x6a\x31\x0c\x19\x8f\x30\xb7\x86\xec\xf6\x08\x34\x52\x41\xfe\xc2\x4d\xd8\xff\x39\xbd\x3d\x82\x04\xf1\x31\xa1\x4d\x68\x1c\xa9\xdc\x3a\xc1\x28\x7a\x49\xfa\x09\x96\x08\x54\x45\x6d\x9b\xd7\x04\xdf\xa8\x28\x32\x55\xf4\x4a\x4c\x65\xdb\xbc\x21\x91\x9c\xb4\x23\x7c\x4d\x42\x6c\xe9\x9b\x97\x53\x16\xd8\x73\x76\x95\x31\x2d\xfc\x67\x46\xae\xdb\x66\x37\x67\xd5\x0a\xa6\x29\x5e\x61\x5c\xb5\x22\xb6\x32\xee\x91\xae\x04\x02\xcb\xf6\x65\x70\x6a\xfd\xfa\xc2\xec\xeb\xa5\xee\xcb\x99\xfb\xa1\x5e\xa4\x65\x6b\xe6\x8e\x0d\xa3\x65\x2b\xa7\x54\x17\x43\x16\x4d\x81\x48\x9c\x88\x90\xa5\xb8\x6d\x9a\xfa\x46\x4e\xd5\x75\x11\x51\x22\x9c\xe0\x04\xe9\x88\x72\x54\x75\x3f\x9f\xf7\xbe\xcf\x2a\xa4\x75\x83\x87\x5f\x89\xb4\xf2\x07\x09\x63\x72\xa2\x81\xf2\xda\x40\x90\xc0\xd1\x72\x92\xf2\x0d\x0d\x6d\xa1\xe8\x4b\x26\x64\x13\x28\xa3\xf8\x08\x26\x58\x55\xa6\x26\xec\x37\x1a\xff\x73\x04\x31\xa1\xd8\x5a\x0c\xd5\xdf\xe1\xe4\x08\x74\x04\xe4\x13\xe0\x07\x92\xa8\x60\x41\x54\x1e\xc1\x10\x85\x5f\xc7\x9c\x65\x34\xb2\x42\x16\x33\xde\x84\x1f\x47\xef\xd4\xef\xaa\xfa\x21\x45\x51\xa4\xb9\x52\xde\x30\x1c\xeb\x99\x6d\xb3\x98\x69\x2a\x7d\x4b\x34\x7c\x6e\xf7\x58\x11\x69\x4b\x39\x2a\x79\x07\x68\x49\xfe\x82\x79\x0c\x40\x71\xf0\xcc\x99\xf4\x1a\x73\x85\x24\xb6\x50\x4c\xc6\xb4\x09\x92\xa5\x65\x45\x5d\xeb\x07\x6d\x53\xb2\xd4\x3c\x6e\xd9\x32\x5a\x32\x9a\x67\x56\xf3\x5d\xa3\xf1\xcc\xa1\x52\xc9\x74\xb1\xb4\x6a\xc2\x30\x66\xe1\xd7\x92\x6f\x27\xe8\xd6\x2a\x9c\xe4\x5d\xa3\x91\xde\x96\x1e\x86\x31\x46\x5c\x11\x94\x93\xd2\xf8\xa6\x40\x59\x28\x07\x50\x26\xd9\xbd\x90\x28\x69\x4b\x2b\x0a\xa0\x15\x91\xeb\xe7\x76\xab\xb2\xbc\xf7\x95\xf3\xb0\x10\x73\xbe\x95\x91\x75\x30\x17\x76\x56\x9a\x30\x21\xc4\x71\x5c\xcc\x6e\x9b\x8d\xfc\x5e\xa4\x28\x9c\xdf\x3f\xab\xa0\xc5\x43\x8e\x22\x92\x89\x26\xbc\xd5\x63\x15\x09\x60\x34\x2a\x65\xb1\x1c\xac\x09\xfb\xe9\x2d\x08\x16\x93\x08\x7e\xc4\x87\xea\xb7\x9c\x18\x46\xa3\x15\x5d\xec\x42\x76\x58\x72\xf2\x7c\x59\xe2\xdd\xc6\x80\x2b\x69\x57\x83\xdc\x14\xa5\xe6\x97\x46\xe3\x08\x74\x89\x2a\xe6\x87\x98\x4a\xcc\xab\xec\xa5\xff\x35\xb4\x51\xd6\xed\xe6\xbc\xfb\xe5\xe0\xa0\x5b\x5d\x80\x0e\x94\x5f\x9b\x50\xc4\x5b\x4e\x60\xd5\x7a\x39\x6c\x75\x44\xce\x7f\x96\x3b\x66\x8b\xad\x32\xd0\x2f\x4b\x2a\xdf\x25\xed\xc1\x3e\xcc\x66\x62\xf1\xc2\x03\x46\x8c\xc3\x72\x57\x67\xc3\xae\x1a\xcc\x66\xf7\xa8\xc2\xea\x1e\x4f\xbb\xb4\xc3\xb3\x36\xad\x78\xb5\x52\x32\xfe\x22\x07\x2f\xee\xf9\xab\x9b\x6e\x53\xcc\x96\xce\xb3\x9f\x3b\xcf\x43\xbe\xb1\xf3\xb9\x6f\xa3\xda\x77\xcb\x09\x76\xdd\x15\x1a\xd0\x98\xe7\x92\x87\xdc\xa1\x10\x03\xc1\x84\xe3\x51\xdb\xdc\xe6\x8d\xfb\x33\xfb\xc3\x3c\x69\x9e\x9e\x9e\x16\xc9\x37\xc2\x21\xe3\xfa\x9d\xdc\x7c\x79\x50\x5a\x10\x1c\xa8\xe5\x40\x29\x6f\x0f\x59\x1c\x55\x27\xee\x30\xe3\x42\x61\x4f\x19\xc9\x07\x16\x0d\x05\xa1\x1a\x69\xd1\x57\xdc\x4b\xf0\xbf\x28\xc6\x34\x3e\xfd\x12\x75\xc4\x78\xd2\x84\x10\xa5\x44\xa2\x98\xfc\x85\x2b\x93\xfe\xdb\x9f\x7f\xc5\x11\xaa\xa8\xd7\x6b\x33\x8a\x61\xad\xe5\x66\x5e\xc8\x17\x83\x8b\xee\x2d\xbd\x2d\xcc\x7b\xfc\x91\xe0\x1b\x20\x14\x1e\x7d\x3b\xde\xb2\x51\xa5\x0f\xdf\x4b\xbc\xd5\xe9\x37\xff\x79\x6c\xf3\xa3\xa2\x28\xbc\x86\xec\x3f\x13\xb2\x42\x72\x46\xc7\x2f\xa7\xda\xdf\x37\x9f\xcb\xf9\xa3\xd8\xf9\x6a\xd9\x39\x93\xdf\xc1\xeb\x2a\x1a\x86\xe2\xc9\xfc\xf0\xc9\xfd\x2d\xb4\x57\x3f\xfc\x77\xf8\x61\xde\x9a\x2e\x5c\xad\x35\x7c\x39\x33\x83\x5d\xad\xa3\x47\x4e\x5d\x6d\x3e\x1a\xf5\xc2\xc2\x6c\x8e\x3b\xa8\xa8\x05\xcb\x4d\xf4\xbc\x12\xbc\xb8\x67\xac\x70\xb4\x2b\xee\xf1\xa8\x46\x1f\x3d\x4a\xf7\x1f\xea\x2c\xab\x1d\xe6\xfd\xb3\x7d\x2f\xd4\x50\xce\xdb\xad\xb5\x9e\x32\xa3\x11\xe6\xaa\xfb\x2b\xbb\x53\x7e\x3a\x51\x35\x51\xbb\x97\x63\xbe\xad\x9a\x6e\xd9\xde\xad\x9e\x35\xa9\x34\xef\x6b\x57\xb8\x33\xd5\x78\xe7\x3c\x13\xa0\x35\xd9\x41\x9e\x76\x4e\x4f\x4f\x89\xe0\x87\x3a\xe2\xd7\xc0\xfa\xef\x6c\x73\x57\x97\x5b\x8b\x33\x7b\xcb\x05\xd7\x7c\xe8\x05\x96\x5c\xab\x27\x08\x5f\xbd\xf1\xdf\xe1\x8d\xaf\x8b\xae\xd7\x45\xd7\xeb\xa2\x6b\xd7\x9d\xe5\x75\xd1\xb5\x33\x2d\xdb\x26\x43\xb5\x6c\xbd\x1f\x77\xfc\x84\xad\xd0\x05\xc8\x72\xe4\xd9\x4f\x62\x94\x8e\x26\xad\x9c\x34\x59\x1a\xfa\xf0\xf0\xf0\xa1\x0d\xee\xf2\xce\xee\xfa\x96\xe4\x6e\x34\x0d\xbb\xd4\xbe\x3c\x67\xeb\x72\xb0\xb1\x75\xa9\xdc\x44\x7b\xcc\xe4\x2b\xbd\xcd\xbd\x73\x0d\xe5\x53\x58\xab\xe9\xaa\xfc\xf5\xf1\xf3\x39\xc4\xc1\x6a\xb6\xd2\x12\x6d\x9d\xaa\x30\x95\x30\x9c\x6e\xb7\x0f\xb7\x9e\x3b\xd6\xce\x3b\xdc\xcf\x0c\x2d\x3b\x22\xd7\xc7\xf9\xff\x46\x39\x4d\xec\x5a\x5b\xbb\xe1\x78\x5d\x2e\xe2\x32\x7f\xb5\xec\x21\x8b\xa6\x6a\x64\x22\x93\xf8\xd8\x30\xaa\xbf\xdf\x49\x33\x31\x61\xd7\x98\x7f\x87\xaf\x7b\xd7\x50\xfd\xf3\xdf\x83\x7d\x9f\xcf\xc1\xb6\xff\x1a\xec\xfb\x7d\x0c\xb6\x42\x73\x0b\x4d\x2e\x3f\xd1\x7d\xc2\x37\x7b\xff\x1f\x00\x00\xff\xff\xae\x05\x86\xad\xbb\x40\x00\x00") +var _templateDefaultTmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x1b\xed\x6e\xdb\x38\xf2\xbf\x9e\x62\x56\x8b\xc3\x36\x80\x6d\x39\xe9\xb6\xd8\x3a\x76\x0e\xae\xa3\x34\xc2\x39\x76\x60\x2b\xed\x16\x8b\x45\x40\x4b\x63\x9b\xad\x44\x6a\x49\x2a\x89\x37\xeb\x77\x3f\x90\x92\x3f\x14\xdb\x89\xd3\xeb\x25\xbe\xdb\x24\x68\x23\x51\xf3\x3d\xc3\x99\xa1\x48\xdd\xde\x42\x88\x43\xca\x10\xec\xcb\x4b\x12\xa1\x50\x31\x61\x64\x84\xc2\x86\xe9\xb4\xa9\xef\xcf\xb2\xfb\xdb\x5b\x40\x16\xc2\x74\x6a\x6d\x44\xb9\xe8\xb5\x35\xd6\xed\x2d\x54\xdc\x1b\x85\x82\x91\xe8\xa2\xd7\x86\xe9\xd4\xf9\xd1\x31\x70\xf2\x9f\x02\x03\xa4\x57\x28\x1a\x1a\xa8\x97\xdf\x64\x38\x39\xf5\x22\x79\x99\x0e\xbe\x60\xa0\x34\xd9\xdf\x34\x4a\x5f\x11\x95\x4a\xf8\x0b\x14\xbf\x48\x92\x19\x2a\x1d\x02\xfe\x31\x7f\x68\x0f\xa9\xa0\x6c\xa4\x71\x6a\x1a\xc7\x68\x21\x2b\x27\x66\x14\xfe\x82\x08\xd9\x32\xc7\xdf\x41\x03\x7d\x10\x3c\x4d\xda\x64\x80\x91\xac\xf4\xb9\x50\x18\x9e\x13\x2a\x64\xe5\x23\x89\x52\xd4\x0c\xbf\x70\xca\xc0\x06\x4d\x15\x32\x96\x23\x05\xaf\x34\xad\x4a\x8b\xc7\x31\x67\x19\xf2\x5e\x3e\xb6\x44\x6f\x0f\xa6\xd3\x57\xb7\xb7\x70\x4d\xd5\xb8\x08\x5c\xe9\x61\xcc\xaf\xb0\xc8\xbd\x43\x62\x94\xb9\x19\xd7\x71\x9f\x0b\xbe\x37\xbf\xda\xe0\x9b\x10\x65\x20\x68\xa2\x28\x67\xf6\x3d\x36\x56\x78\xa3\x32\x3f\x5e\x46\x54\xaa\x1c\x54\x10\x36\x42\xa8\xc0\x74\x9a\xc9\x55\xb3\x16\x83\xab\x76\xd2\x56\x29\x1b\x43\x6a\xf1\xf5\x5d\x03\xe6\x0a\xe4\x82\x65\xcc\x9b\x8c\x71\x45\xb4\x4c\x05\x92\x4b\xc3\xdf\x46\xb7\xcf\x53\x11\x60\x2d\x73\x26\x32\x14\x44\x71\x91\x85\x9f\xb5\xc6\x50\x05\x1b\xc8\x88\x04\x5f\x2b\x21\x0e\x49\x1a\xa9\x8a\xa2\x2a\xc2\xdc\x0a\x0a\xe3\x24\x22\xaa\x18\x8b\x95\x4d\x26\x2f\xd2\x49\xa5\x9e\x02\xf1\x3a\x52\xc5\x89\xb6\x25\xbd\x21\x89\xa2\x01\x09\xbe\xae\xd0\x5b\x2b\xbe\x26\x0a\x7f\xc1\x43\x80\x11\x65\x5f\xb7\x96\x20\x11\xa8\x83\xc5\xde\x0e\x7a\x89\xfe\xbd\x06\x30\x69\x63\x4b\x09\x68\xc0\x19\xc6\xfc\x0b\xdd\x52\x06\x0d\x9f\x8a\x68\x5b\x89\x57\x94\x5b\x86\x55\x48\x62\x39\x87\x0d\x38\x9b\x81\x8f\x95\x4a\x6a\x8e\x23\x83\x31\xc6\xa4\xc2\xc5\xc8\xc1\x1b\x85\x4c\xea\x60\x5e\xcb\xb5\x48\x49\x4d\x12\x13\x23\x67\x28\x25\x19\x61\x8b\x88\x70\x1b\xac\xa5\x28\x7d\x10\x76\xa1\xd7\xe3\x02\xba\x48\x26\x15\xf4\x3f\x72\xe5\x0a\xb5\x99\x5c\x1f\x29\x5e\x83\x49\xd3\xdb\xe1\x71\xa9\xb1\xf2\x81\x6d\xf4\x1f\x63\x8c\x01\x8f\xb8\xb0\xe7\x05\x63\x9e\xbd\x0b\xe5\x61\x0f\xaa\x30\x9d\x9e\xbc\x7e\x73\x70\xf0\x66\x39\x6b\xac\x41\xe8\xa1\xe4\xd1\x15\x86\x19\xca\x2f\xfb\xef\xdf\x57\xdf\x3c\x94\x68\xc6\x34\x09\xc6\x44\x2d\xa6\xb4\xe0\xf1\xb7\xa7\x87\xbb\xd4\xe2\x2c\x80\xb6\xf7\x74\x41\xb6\x44\x73\x0b\x53\x35\x99\xd3\x5b\xad\x1f\x8f\x8b\x9e\x55\x8a\x41\x44\x91\xad\x0b\xc5\x2d\x35\xde\x44\x71\xd1\x79\x7c\x5b\x64\xae\xd2\xa5\x4c\x2a\xc2\x02\x94\x6b\xe8\xae\x14\xcc\x7b\xac\xca\x13\x39\x42\x46\xf1\xdb\x9d\x74\x1f\xb1\x55\x0f\xe5\xfd\xc5\x86\x72\xba\xb6\xa1\xb0\x1e\x9a\x10\xe5\xe9\xd4\xca\x06\x21\x1b\x34\x85\xfb\x7e\x8b\x14\x9b\x2e\xc3\xa4\xbc\xa4\xd1\x03\xf3\x69\x89\xe3\x6c\x78\x7b\x9e\x33\x8c\x15\xae\xe5\x6d\x4c\x2a\x4d\x1f\xf1\xf8\x68\x2a\x78\xfd\x8a\x06\x8a\x0b\x9e\x2c\x52\x90\x54\x44\xe1\x65\xd1\xf9\x2f\xbe\x7a\x9c\xaf\x56\xad\x8a\x4c\x51\x35\xb9\x0c\xa9\x4c\x22\x32\xb9\xdc\xd0\x6d\x3d\x3c\xb1\x56\x29\xc7\x9c\x51\xc5\xb5\x41\x2e\x15\xe7\xd1\x23\x53\xd6\x32\x6d\x8c\x09\x8d\x16\x71\xb0\x58\xd0\x3c\x5a\xca\x22\xa5\xb1\x8a\x8d\x58\x56\xfd\x87\xe3\x6e\xcb\xff\x7c\xee\x82\x1e\x82\xf3\x8b\xf7\x6d\xaf\x05\x76\xd9\x71\x3e\xbd\x6e\x39\xce\xb1\x7f\x0c\xbf\x9e\xfa\x67\x6d\xd8\xaf\x54\xc1\x17\x84\x49\xaa\x83\x8d\x44\x8e\xe3\x76\x6c\xb0\xf3\xf6\xe5\xfa\xfa\xba\x72\xfd\xda\xb4\x2f\x7e\xcf\xb9\xd1\xb4\xf6\x35\x72\x7e\x59\x56\x4b\x98\x95\x50\x85\xf6\x91\x55\xff\xa1\x5c\xb6\xfa\x6a\x12\x21\x10\x16\x82\x61\x12\xa2\xa0\xda\xa1\xba\xb4\x81\x26\x2d\x6b\x8e\x33\xa2\x6a\x9c\x0e\x2a\x01\x8f\x1d\xad\xc3\x28\x65\x8e\x21\x47\x82\x8c\x5e\xd9\xa8\x56\x9e\x99\x43\x5a\x96\xe5\x8f\x11\xce\x3c\x1f\xda\x34\x40\x26\x11\x5e\x9d\x79\xfe\x9e\x65\xb5\x78\x32\x11\x74\x34\x56\xf0\x2a\xd8\x83\x83\xea\xfe\xcf\x70\x96\x51\xb4\xac\x73\x14\x31\x95\xba\xed\x02\x2a\x61\x8c\x02\x07\x13\x18\x09\xc2\x14\x86\x25\x18\x0a\x44\xe0\x43\x08\xc6\x44\x8c\xb0\x04\x8a\x03\x61\x13\x48\x50\x48\xce\x80\x0f\x14\xa1\x4c\xc7\x3f\x81\x80\x27\x13\x8b\x0f\x41\x8d\xa9\x04\xc9\x87\xea\x9a\x88\x4c\x43\x22\x25\x0f\x28\x51\x18\x42\xc8\x83\x34\x46\x96\x4d\x5c\x18\xd2\x08\x25\xbc\x52\x63\x04\xbb\x9f\x63\xd8\x7b\x86\x49\x88\x24\xb2\x28\x03\xfd\x6c\xf6\xc8\xac\x05\x79\xaa\x40\xa0\x54\x82\x1a\x2b\x94\x80\xb2\x20\x4a\x43\x2d\xc3\xec\x71\x44\x63\x9a\x73\xd0\xe8\x46\x71\x69\x29\x0e\xa9\xc4\x92\x91\xb3\x04\x31\x0f\xe9\x50\xff\x45\xa3\x56\x92\x0e\x22\x2a\xc7\x25\x08\xa9\x26\x3d\x48\x15\x96\x40\xea\x41\x63\xc7\x92\xd6\xc3\xe1\x02\x24\x46\x91\x15\xf0\x84\xa2\x04\xa3\xeb\x42\x3a\x03\xa3\x45\x4f\xb4\x41\x55\x6e\x22\xa9\x47\xae\xc7\x3c\x2e\x6a\x42\xa5\x35\x4c\x05\xa3\x72\x8c\x06\x27\xe4\x20\xb9\xe1\xa8\xa3\x59\x8f\x68\xf0\x21\x8f\x22\x7e\xad\x55\x0b\x38\x0b\x69\xbe\xfc\x33\x4e\x26\x03\xbd\x04\x0e\xe6\x7e\x65\x5c\xd1\x20\x33\xb7\x71\x40\xb2\xf0\x6a\xfe\x48\x8e\x49\x14\xc1\x00\x73\x83\x61\x08\x94\x01\x59\x52\x47\x68\xf6\xba\x7e\x2b\x4a\x22\x48\xb8\x30\xfc\xee\xaa\x59\xb1\x2c\xff\xd4\x85\x7e\xf7\xc4\xff\xd4\xec\xb9\xe0\xf5\xe1\xbc\xd7\xfd\xe8\x1d\xbb\xc7\x60\x37\xfb\xe0\xf5\xed\x12\x7c\xf2\xfc\xd3\xee\x85\x0f\x9f\x9a\xbd\x5e\xb3\xe3\x7f\x86\xee\x09\x34\x3b\x9f\xe1\x5f\x5e\xe7\xb8\x04\xee\xaf\xe7\x3d\xb7\xdf\x87\x6e\xcf\xf2\xce\xce\xdb\x9e\x7b\x5c\x02\xaf\xd3\x6a\x5f\x1c\x7b\x9d\x0f\xf0\xfe\xc2\x87\x4e\xd7\x87\xb6\x77\xe6\xf9\xee\x31\xf8\x5d\xd0\x0c\x73\x52\x9e\xdb\xd7\xc4\xce\xdc\x5e\xeb\xb4\xd9\xf1\x9b\xef\xbd\xb6\xe7\x7f\x2e\x59\x27\x9e\xdf\xd1\x34\x4f\xba\x3d\x68\xc2\x79\xb3\xe7\x7b\xad\x8b\x76\xb3\x07\xe7\x17\xbd\xf3\x6e\xdf\x85\x66\xe7\x18\x3a\xdd\x8e\xd7\x39\xe9\x79\x9d\x0f\xee\x99\xdb\xf1\x2b\xe0\x75\xa0\xd3\x05\xf7\xa3\xdb\xf1\xa1\x7f\xda\x6c\xb7\x35\x2b\xab\x79\xe1\x9f\x76\x7b\x5a\x3e\x68\x75\xcf\x3f\xf7\xbc\x0f\xa7\x3e\x9c\x76\xdb\xc7\x6e\xaf\x0f\xef\x5d\x68\x7b\xcd\xf7\x6d\x37\x63\xd5\xf9\x0c\xad\x76\xd3\x3b\x2b\xc1\x71\xf3\xac\xf9\xc1\x35\x58\x5d\xff\xd4\xed\x59\x1a\x2c\x93\x0e\x3e\x9d\xba\x7a\x48\xf3\x6b\x76\xa0\xd9\xf2\xbd\x6e\x47\xab\xd1\xea\x76\xfc\x5e\xb3\xe5\x97\xc0\xef\xf6\xfc\x39\xea\x27\xaf\xef\x96\xa0\xd9\xf3\xfa\xda\x20\x27\xbd\xee\x59\xc9\xd2\xe6\xec\x9e\x68\x10\xaf\xa3\xf1\x3a\x6e\x46\x45\x9b\x1a\x0a\x1e\xe9\xf6\xcc\xfd\x45\xdf\x9d\x13\x84\x63\xb7\xd9\xf6\x3a\x1f\xfa\x1a\x59\xab\x38\x03\xae\x58\xe5\xf2\x91\x55\x37\x29\xf0\x26\x8e\x98\x6c\xac\x49\x6c\xfb\xef\xde\xbd\xcb\xf2\x99\xbd\x1d\x90\xd4\xc9\xad\x61\x0f\x39\x53\xe5\x21\x89\x69\x34\xa9\xc1\x4f\xa7\x18\x5d\xa1\xa2\x01\x81\x0e\xa6\xf8\x53\x09\xe6\x03\x25\x68\x0a\x4a\xa2\x12\x48\xc2\x64\x59\xa2\xa0\xc3\x43\x18\xf0\x9b\xb2\xa4\x7f\xea\x5a\x0c\x03\x2e\x42\x14\xe5\x01\xbf\x39\x04\x43\x54\xd2\x3f\xb1\x06\xfb\x3f\x27\x37\x87\x10\x13\x31\xa2\xac\x06\xd5\x43\x9d\x5b\xc7\x48\xc2\xe7\xe4\x1f\xa3\x22\xa0\x2b\x6a\xc3\xbe\xa2\x78\xad\x67\x91\x0d\x66\xd5\xcb\x54\xc3\xbe\xa6\xa1\x1a\x37\x42\xbc\xa2\x01\x96\xcd\xcd\xf3\x19\x0b\x9c\x99\xb8\xda\x99\x65\xfc\x23\xa5\x57\x0d\xbb\x95\x89\x5a\xf6\xcd\xf2\x7a\x2e\xb8\x6e\x45\x1c\xed\xdc\x43\x53\x09\x24\xaa\xc6\x85\x7f\x52\xfe\xe5\x99\xc5\x37\xcb\xf9\xe7\x73\xf7\x7d\xbd\x48\xdd\x31\xc2\x1d\x59\x56\xdd\xd1\x41\xa9\x2f\x06\x3c\x9c\x00\x55\x18\xcb\x80\x27\xd8\xb0\x6d\x73\xa3\x26\xfa\x7a\xf5\x75\x88\xab\xab\xfb\xd9\xac\xf7\x7d\x52\x25\xcb\xd7\x38\xf8\x4a\x55\x39\x7b\x10\x73\xae\xc6\x06\x29\xab\x0d\x94\x48\x0c\x17\x40\x3a\x36\x0c\x76\x99\x84\x5f\x52\xa9\x6a\xc0\x38\xc3\x43\x18\xa3\xae\x4c\x35\xd8\xaf\x56\xff\x71\x08\x11\x65\x58\x9e\x0f\x55\xde\x62\x7c\x08\x66\x06\x64\x00\xf0\x03\x8d\xf5\x64\x21\x4c\x1d\xc2\x80\x04\x5f\x47\x82\xa7\x2c\x2c\x9b\xf7\x0f\x35\xf8\x71\xf8\x56\xff\x2e\x9b\x1f\x12\x12\x86\x46\x2a\x1d\x0d\x83\x91\x81\x6c\xd8\x39\xa4\xad\xed\xad\xc8\xe0\xa9\xc3\x63\x49\xa5\x2d\xf5\x58\x2b\x3b\x40\x5d\x89\x67\xcc\x63\x00\x5a\x82\x27\xce\xa4\x57\x28\x34\x91\xa8\x4c\x22\x3a\x62\x35\x50\x3c\x29\x1a\xea\xca\x3c\x68\xd8\x8a\x27\xf6\x51\xdd\x51\xe1\x42\xd0\x2c\xb3\xda\x6f\xab\xd5\x27\x9e\x2a\x6b\x85\xce\x97\x56\x35\x18\x44\x3c\xf8\x5a\x88\xed\x98\xdc\x94\xf3\x20\x79\x5b\xad\x26\x37\x85\x87\x41\x84\x44\x68\x86\x6a\x5c\x18\xdf\x34\x51\xe6\xc6\x01\x92\x2a\x7e\x67\x4a\x14\xac\x65\x0c\x05\x50\x0f\xe9\xd5\x53\x87\x55\x51\xdf\xbb\xc6\xb9\x5f\x89\x99\xdc\xda\xc9\x66\x32\xe7\x7e\xd6\x96\xb0\x21\xc0\x28\xca\xa1\x1b\x76\x35\xbb\x97\x09\x09\x66\xf7\x4f\xaa\x68\xfe\x50\x90\x90\xa6\xb2\x06\xaf\xcd\xd8\x9a\x04\x30\x1c\x16\xb2\x58\x86\x56\x83\xfd\xe4\x06\x24\x8f\x68\x08\x3f\xe2\x3b\xfd\x5b\x4c\x0c\xc3\xe1\x92\x2d\x76\x21\x3b\x2c\x24\x79\xba\x2c\xf1\x76\xe3\x84\x2b\x58\xd7\xa0\x5c\xe7\xa5\xe6\x4d\xb5\x7a\x08\xa6\x44\xe5\xf0\x01\x32\x85\x62\x9d\xbf\xcc\xbf\xaa\x71\xca\xaa\xdf\xdc\xb7\x6f\x0e\x0e\x5a\xeb\x0b\xd0\x81\x8e\x6b\x1b\xf2\xf9\x96\x31\x58\xf6\x5e\x86\xbb\x7e\x46\xce\x7e\x16\x7b\xae\xf3\xcd\x56\x20\xf9\xcb\xfd\xd5\x77\x49\x7b\xb0\x0f\xd3\xe9\x62\x9f\x04\x86\x5c\xc0\x62\x5f\x70\xc3\xbe\x2c\x4c\xa7\x77\xb8\xc2\xf2\x2e\x61\xa3\xb0\x47\xb8\x02\x96\xbf\x5a\x29\x38\x7f\x9e\x83\xe7\xf7\xe2\x25\x4c\xb7\x29\x66\x8b\xe0\xd9\xcf\x82\xe7\xbe\xd8\xd8\xf9\xdc\xb7\xd1\xec\xbb\x15\x04\xbb\x1e\x0a\x55\xa8\xce\x72\xc9\x7d\xe1\x90\xab\x41\x60\x2c\x70\xd8\xb0\xb7\x79\xe3\xfe\xc4\xf1\x30\x4b\x9a\x27\x27\x27\x79\xf2\x0d\x31\xe0\xc2\xbc\x93\x9b\x2d\x0f\x0a\x0b\x82\x03\xbd\x1c\x28\xe4\xed\x01\x8f\xc2\xf5\x89\x3b\x48\x85\xd4\xd4\x13\x4e\xb3\x81\x79\x43\x41\x99\x21\x9a\xf7\x15\x77\x12\xfc\x1b\x2d\x98\xa1\x67\x5e\xa2\x0e\xb9\x88\x6b\x10\x90\x84\x2a\x12\xd1\x3f\x71\x6d\xd2\x7f\xfd\xf3\x2f\x18\x92\x35\xf5\x7a\x05\x22\x1f\x36\x56\xae\x65\x85\x7c\x3e\x38\xef\xde\x92\x9b\xdc\xbd\x47\x66\xef\x96\x32\x78\xf0\xed\x78\xdd\x21\x6b\x63\xf8\x4e\xe2\x5d\x9f\x7e\xb3\x9f\x87\x77\x6e\x5f\xa6\xec\x13\x4d\x59\xa9\x04\x67\xa3\xe7\x33\xed\x6f\x9b\x4f\x76\xfd\x9e\xef\x7c\xd5\x9d\x4c\xc8\xef\x10\x75\x6b\x1a\x86\xfc\xc9\xec\xf8\xd2\xdd\x2d\xb4\x97\x38\xfc\x7b\xc4\x61\xd6\x9a\xce\x43\xad\x3e\x78\x3e\x37\x83\xb3\xde\x46\x0f\x9c\xdb\xdb\x7c\xb8\xee\x99\x95\xd9\x3c\xef\x60\x4d\x2d\x58\x6c\xa2\x67\x95\xe0\xd9\x23\x63\x49\xa2\x5d\x09\x8f\x07\x2d\xfa\xe0\x61\xcc\xff\xd1\x60\x59\xee\x30\xef\x9e\x0e\x7d\xa6\x86\x72\xd6\x6e\xad\xf4\x94\x29\x0b\x51\xe8\xee\xaf\x18\x4e\xd9\xf9\x56\xdd\x44\xed\x5e\x8e\xf9\xb6\x6a\xba\x65\x7b\x57\x3c\x67\xb7\x86\xfb\x4b\x57\xb8\x33\xd5\x78\xe7\x22\x13\xa0\x3e\xde\x41\x99\x76\xce\x4e\x8f\x99\xc1\xf7\x75\xc4\x2f\x13\xeb\xff\xb3\xcd\x5d\x5e\x6e\xcd\xcf\xec\x2d\x16\x5c\xb3\xa1\x67\x58\x72\x2d\x9f\x20\x7c\x89\xc6\xbf\x47\x34\xbe\x2c\xba\x5e\x16\x5d\x2f\x8b\xae\x5d\x0f\x96\x97\x45\xd7\xce\xb4\x6c\x9b\x1c\x55\x77\xcc\x7e\xdc\xd1\x23\xb6\x42\xe7\x28\x8b\x91\x27\x3f\x89\x51\x38\x9a\xb4\x74\xd2\x64\xe1\xe8\x77\xef\xde\xdd\xb7\xc1\x5d\xdc\xd9\x5d\xdd\x92\xdc\x8d\xa6\x61\x97\xda\x97\xa7\x6c\x5d\x0e\x36\xb6\x2e\x6b\x37\xd1\x1e\x72\xf9\x52\x6f\x73\xe7\x5c\x43\xf1\x14\xd6\x72\xba\x2a\x7e\xbf\xfe\x74\x01\x71\xb0\x9c\xad\x8c\x46\x5b\xa7\x2a\x64\x0a\x06\x93\xed\xf6\xe1\x56\x73\xc7\xca\x79\x87\xbb\x99\xa1\xee\x84\xf4\xea\x28\xfb\xdf\x2a\xa6\x89\x5d\x6b\x6b\x37\x1c\xaf\xcb\x54\x5c\xe4\xaf\xba\x33\xe0\xe1\x44\x8f\x8c\x55\x1c\x1d\x59\xd6\xfa\xef\x77\x92\x54\x8e\xf9\x15\x8a\xef\xf0\x7d\xf8\x0a\xa9\xff\xfe\xf7\x60\xdf\xe7\x73\xb0\xed\xbf\x06\xfb\x7e\x1f\x83\x2d\xf1\xdc\xc2\x92\x8b\x8f\xbc\x1f\xf1\xcd\xde\xbf\x03\x00\x00\xff\xff\x7d\xf9\xda\x83\xfd\x42\x00\x00") func templateDefaultTmplBytes() ([]byte, error) { return bindataRead( @@ -83,7 +83,7 @@ func templateDefaultTmpl() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "template/default.tmpl", size: 16571, mode: os.FileMode(420), modTime: time.Unix(1, 0)} + info := bindataFileInfo{name: "template/default.tmpl", size: 17149, mode: os.FileMode(420), modTime: time.Unix(1, 0)} a := &asset{bytes: bytes, info: info} return a, nil }